ru.bitel.bgbilling.kernel.network.radius

## Class RadiusProcessor<C extends ru.bitel.bgbilling.kernel.network.radius.nas.NasConnection<?>,N extends ru.bitel.bgbilling.kernel.network.radius.nas.Nas<C,?,?>,P>

- java.lang.Object
- - ru.bitel.bgbilling.kernel.network.processor.Processor
  - - ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor<C,N,P>

- Type Parameters:
    `N` -
    `P` -
  Direct Known Subclasses:
    AbstractRadiusProcessor, InetRadiusProcessor

      public abstract class RadiusProcessor<C extends ru.bitel.bgbilling.kernel.network.radius.nas.NasConnection<?>,N extends ru.bitel.bgbilling.kernel.network.radius.nas.Nas<C,?,?>,P>
      extends ru.bitel.bgbilling.kernel.network.processor.Processor

  Радиус процессор, минимальный набор, основная архитектура обработки.
  Author:
    amir

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `RadiusProcessor.ConnectionIterator<C extends ru.bitel.bgbilling.kernel.network.radius.nas.NasConnection<?>,N extends ru.bitel.bgbilling.kernel.network.radius.nas.Nas<C,?,?>>`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `bitel.billing.server.util.RequestCounter` | `accountingStartCounter`
    `bitel.billing.server.util.RequestCounter` | `accountingStopCounter`
    `bitel.billing.server.util.RequestCounter` | `accountingUpdateCounter`
    `bitel.billing.server.util.RequestCounter` | `accountingUpdateIgnoreCount`
    `bitel.billing.server.util.RequestCounter` | `antispamIgnoreCount`
    `bitel.billing.server.util.RequestCounter` | `authenticationAcceptCounter`
    `bitel.billing.server.util.RequestCounter` | `authenticationIgnoreCount`
    `bitel.billing.server.util.RequestCounter` | `authenticationRejectCounter`
    `protected boolean` | `forwardAfterPreprocess`
    `protected boolean` | `forwardAfterProcess`
    `protected java.lang.String` | `module`
    `protected ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N>` | `nasList`
    `protected Setup` | `setup`

    - ### Fields inherited from class ru.bitel.bgbilling.kernel.network.processor.Processor

      `applicationId, moduleId`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RadiusProcessor(Setup setup, java.lang.String module, int mid, ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> nasList)` Deprecated.
    `RadiusProcessor(Setup setup, java.lang.String module, int mid, ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> nasList, boolean loadNasList, boolean linkReload)`

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `accessRequest(RadiusListenerWorker<N> req, N nas, int logRecordId, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)` Обработка Acсess-Request.
    `protected void` | `accessRequestImpl(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, java.util.Date date, RadiusSession<N,P> radiusSession, int logRecordId, ConnectionSet connectionSet)`
    `protected C` | `accounting(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, java.util.Date time)` Обработка Accounting-Request по умолчанию.
    `C` | `accountingRequest(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, java.util.Date time)` Обработка пакета Accounting-Request
    `protected void` | `addToLog(java.util.Date date, RadiusPacket packet, int recordId)`
    `protected void` | `afterNasListReload()`
    `protected abstract int` | `authentication(RadiusListenerWorker<?> req, N nas, RadiusSession<N,P> session, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, int log_record_id)` Обработка Access-Request разделяется на два этапа - аутентификацию и авторизацию.
    `protected abstract int` | `authorization(RadiusListenerWorker<?> req, N nas, RadiusSession<N,P> radiusSession, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, int log_record_id, ContractManager contractM, Contract contract, java.lang.Object login, java.lang.String userName)` Авторизация клиента.
    `java.lang.Iterable<C>` | `connections()`
    `abstract java.lang.String` | `executeCommand(java.lang.String command, java.lang.String params)`
    `int` | `getAccessAcceptPerMinute()`
    `int` | `getAccessRejectPerMinute()`
    `int` | `getAccessRequestIgnorePerMinute()`
    `int` | `getAccountingStartPerMinute()`
    `int` | `getAccountingStopPerMinute()`
    `int` | `getAccountingUpdateIgnorePerMinute()`
    `int` | `getAccountingUpdatePerMinute()`
    `int` | `getActiveConnectionsCount()`
    `int` | `getAntispamIgnorePerMinute()`
    `protected java.util.List<C>` | `getConnectionList()`
    `protected N` | `getNas(java.net.SocketAddress clientAddress, RadiusPacket packet)` Получение наса по радиус пакету.
    `ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N>` | `getNasList()`
    `abstract java.lang.String` | `getStatus()`
    `int` | `getStoppedConnectionCount()`
    `int` | `getSuspendedConnectionCount()`
    `protected int` | `insertToLog(java.util.Date date, RadiusPacket packet)`
    `static RadiusProcessor<?,ru.bitel.bgbilling.kernel.network.radius.nas.Nas<?,?,?>,?>` | `newInstance(java.lang.Class<? extends RadiusProcessor> clazz, RadiusSetup setup, int mid)`
    `protected abstract RadiusSession<N,P>` | `newRadiusSession(java.sql.Connection con, N nas, RadiusPacket request, RadiusSession.State state)` Создание новой радиус сессии.
    `protected void` | `postprocessAccessRequest(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)` Постобработка Access-Request По умолчанию - обработка скриптом предобработки наса.
    `protected void` | `postprocessAccountingRequest(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)` Постобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса.
    `protected void` | `preprocessAccessRequest(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)` Предобработка Access-Request По умолчанию - обработка скриптом предобработки наса.
    `protected void` | `preprocessAccountingRequest(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)` Предобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса.
    `void` | `processConnections(RadiusProcessor.ConnectionIterator<C,N> iterator)`
    `protected void` | `reloadConfig()` Перезагрузка конфигурации сервера + модуля.
    `protected void` | `reloadNasList()` Корректная перезагрузка насов (конфига, инспекторов и т.п.).

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### accountingStartCounter

          public final bitel.billing.server.util.RequestCounter accountingStartCounter

    - #### accountingStopCounter

          public final bitel.billing.server.util.RequestCounter accountingStopCounter

    - #### accountingUpdateCounter

          public final bitel.billing.server.util.RequestCounter accountingUpdateCounter

    - #### authenticationAcceptCounter

          public final bitel.billing.server.util.RequestCounter authenticationAcceptCounter

    - #### authenticationRejectCounter

          public final bitel.billing.server.util.RequestCounter authenticationRejectCounter

    - #### authenticationIgnoreCount

          public final bitel.billing.server.util.RequestCounter authenticationIgnoreCount

    - #### accountingUpdateIgnoreCount

          public final bitel.billing.server.util.RequestCounter accountingUpdateIgnoreCount

    - #### antispamIgnoreCount

          public final bitel.billing.server.util.RequestCounter antispamIgnoreCount

    - #### setup

          protected final Setup setup

    - #### module

          protected final java.lang.String module

    - #### nasList

          protected final ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C extends ru.bitel.bgbilling.kernel.network.radius.nas.NasConnection<?>,N extends ru.bitel.bgbilling.kernel.network.radius.nas.Nas<C,?,?>> nasList

    - #### forwardAfterPreprocess

          protected volatile boolean forwardAfterPreprocess

    - #### forwardAfterProcess

          protected volatile boolean forwardAfterProcess

  - ### Constructor Detail

    - #### RadiusProcessor

          @Deprecated
          public RadiusProcessor(Setup setup,
                                             java.lang.String module,
                                             int mid,
                                             ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> nasList)
                                      throws ru.bitel.bgbilling.common.BGException

      Deprecated.
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### RadiusProcessor

          public RadiusProcessor(Setup setup,
                                 java.lang.String module,
                                 int mid,
                                 ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> nasList,
                                 boolean loadNasList,
                                 boolean linkReload)
                          throws ru.bitel.bgbilling.common.BGException

      Throws:
        `ru.bitel.bgbilling.common.BGException`

  - ### Method Detail

    - #### reloadConfig

          protected void reloadConfig()

      Перезагрузка конфигурации сервера + модуля.

    - #### reloadNasList

          protected void reloadNasList()

      Корректная перезагрузка насов (конфига, инспекторов и т.п.).

    - #### afterNasListReload

          protected void afterNasListReload()

    - #### getNas

          protected final N getNas(java.net.SocketAddress clientAddress,
                                   RadiusPacket packet)

      Получение наса по радиус пакету.
      Сначала нас ищется по атрибуту Nas-Identifier, потом Nas-Ip-Address.
      Parameters:
        `clientAddress` -
        `packet` -
      Returns:

    - #### getNasList

          public ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> getNasList()

    - #### connections

          public final java.lang.Iterable<C> connections()

    - #### executeCommand

          public abstract java.lang.String executeCommand(java.lang.String command,
                                                          java.lang.String params)

    - #### processConnections

          public void processConnections(RadiusProcessor.ConnectionIterator<C,N> iterator)

    - #### preprocessAccessRequest

          protected void preprocessAccessRequest(N nas,
                                                 RadiusPacket request,
                                                 RadiusPacket response,
                                                 ConnectionSet connectionSet)

      Предобработка Access-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
      Parameters:
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### preprocessAccountingRequest

          protected void preprocessAccountingRequest(N nas,
                                                     RadiusPacket request,
                                                     RadiusPacket response,
                                                     ConnectionSet connectionSet)

      Предобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
      Parameters:
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### postprocessAccessRequest

          protected void postprocessAccessRequest(N nas,
                                                  RadiusPacket request,
                                                  RadiusPacket response,
                                                  ConnectionSet connectionSet)

      Постобработка Access-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
      Parameters:
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### postprocessAccountingRequest

          protected void postprocessAccountingRequest(N nas,
                                                      RadiusPacket request,
                                                      RadiusPacket response,
                                                      ConnectionSet connectionSet)

      Постобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
      Parameters:
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### insertToLog

          protected int insertToLog(java.util.Date date,
                                    RadiusPacket packet)

    - #### addToLog

          protected void addToLog(java.util.Date date,
                                  RadiusPacket packet,
                                  int recordId)

    - #### accessRequest

          public void accessRequest(RadiusListenerWorker<N> req,
                                    N nas,
                                    int logRecordId,
                                    RadiusPacket request,
                                    RadiusPacket response,
                                    ConnectionSet connectionSet)
                             throws ru.bitel.bgbilling.common.BGException

      Обработка Acсess-Request. Вызывается из `RadiusListener`
      Parameters:
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### accessRequestImpl

          protected void accessRequestImpl(RadiusListenerWorker<N> req,
                                           N nas,
                                           RadiusPacket request,
                                           RadiusPacket response,
                                           java.util.Date date,
                                           RadiusSession<N,P> radiusSession,
                                           int logRecordId,
                                           ConnectionSet connectionSet)

    - #### newRadiusSession

          protected abstract RadiusSession<N,P> newRadiusSession(java.sql.Connection con,
                                                                 N nas,
                                                                 RadiusPacket request,
                                                                 RadiusSession.State state)

      Создание новой радиус сессии.
      Кроме всего прочего вызов данного метода означает что это первый запрос сессии.
      Parameters:
        `con` -
        `nas` - TODO
        `request` -
        `state` -
      Returns:

    - #### accountingRequest

          public C accountingRequest(RadiusListenerWorker<N> req,
                                     N nas,
                                     RadiusPacket request,
                                     RadiusPacket response,
                                     ConnectionSet connectionSet,
                                     java.util.Date time)

      Обработка пакета Accounting-Request
      Parameters:
        `req` - TODO
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### authentication

          protected abstract int authentication(RadiusListenerWorker<?> req,
                                                N nas,
                                                RadiusSession<N,P> session,
                                                RadiusPacket request,
                                                RadiusPacket response,
                                                ConnectionSet connectionSet,
                                                int log_record_id)

      Обработка Access-Request разделяется на два этапа - аутентификацию и авторизацию.
      В данном методе должна проходить аутентификация.
      Этот метод вызывается один раз за радиус сессию, т.е. сразу на Access-Request, если сессии нет,
      или в конце обработки eap запросов.
      Метод вызывается из `RadiusSession`
      Внутри логики должен найтись логин, провериться пароль, и, если все нормально, вызваться `#authorization(Nas, RadiusSession, RadiusPacket, RadiusPacket, Connection, Connection, int, Contract, Login, String)`
      Parameters:
        `conSlave` - TODO

    - #### authorization

          protected abstract int authorization(RadiusListenerWorker<?> req,
                                               N nas,
                                               RadiusSession<N,P> radiusSession,
                                               RadiusPacket request,
                                               RadiusPacket response,
                                               ConnectionSet connectionSet,
                                               int log_record_id,
                                               ContractManager contractM,
                                               Contract contract,
                                               java.lang.Object login,
                                               java.lang.String userName)

      Авторизация клиента.
      Вызывается после того как логин найден, пароль проверен.
      На этом этапе надо проверить, что деньги, тариф и т.п. есть, проверить ограничения логина и т.д.
      Parameters:
        `nas` -
        `radiusSession` -
        `request` -
        `response` -
        `con` -
        `conSlave` - TODO
        `log_record_id` -
        `contract` -
        `login` -
        `userName` -
      Returns:
      See Also:
        `#authentication(Nas, RadiusSession, RadiusPacket, RadiusPacket, Connection, Connection, int)`

    - #### accounting

          protected C accounting(RadiusListenerWorker<N> req,
                                 N nas,
                                 RadiusPacket request,
                                 RadiusPacket response,
                                 ConnectionSet connectionSet,
                                 java.util.Date time)

      Обработка Accounting-Request по умолчанию.
      Parameters:
        `req` - TODO
        `nas` -
        `request` -
        `response` -
        `con` -
        `conSlave` -

    - #### newInstance

          public static RadiusProcessor<?,ru.bitel.bgbilling.kernel.network.radius.nas.Nas<?,?,?>,?> newInstance(java.lang.Class<? extends RadiusProcessor> clazz,
                                                                                                                 RadiusSetup setup,
                                                                                                                 int mid)
                                                                                                          throws java.lang.SecurityException,
                                                                                                                 java.lang.NoSuchMethodException,
                                                                                                                 java.lang.IllegalArgumentException,
                                                                                                                 java.lang.InstantiationException,
                                                                                                                 java.lang.IllegalAccessException,
                                                                                                                 java.lang.reflect.InvocationTargetException

      Throws:
        `java.lang.SecurityException`
        `java.lang.NoSuchMethodException`
        `java.lang.IllegalArgumentException`
        `java.lang.InstantiationException`
        `java.lang.IllegalAccessException`
        `java.lang.reflect.InvocationTargetException`

    - #### getConnectionList

          protected java.util.List<C> getConnectionList()

    - #### getStatus

          public abstract java.lang.String getStatus()

    - #### getActiveConnectionsCount

          public int getActiveConnectionsCount()

    - #### getSuspendedConnectionCount

          public int getSuspendedConnectionCount()

    - #### getStoppedConnectionCount

          public int getStoppedConnectionCount()

    - #### getAccountingStartPerMinute

          public int getAccountingStartPerMinute()

    - #### getAccountingStopPerMinute

          public int getAccountingStopPerMinute()

    - #### getAccountingUpdatePerMinute

          public int getAccountingUpdatePerMinute()

    - #### getAccessAcceptPerMinute

          public int getAccessAcceptPerMinute()

    - #### getAccessRejectPerMinute

          public int getAccessRejectPerMinute()

    - #### getAccessRequestIgnorePerMinute

          public int getAccessRequestIgnorePerMinute()

    - #### getAccountingUpdateIgnorePerMinute

          public int getAccountingUpdateIgnorePerMinute()

    - #### getAntispamIgnorePerMinute

          public int getAntispamIgnorePerMinute()