Package 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`

    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

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

- ## Nested Class Summary

  Nested Classes
  Modifier and Type | Class | 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 | Description
  --- | --- | ---
  `bitel.billing.server.util.RequestCounter` | `accountingIgnoreCount` |
  `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` | `forwardAccessAnswer` |
  `protected boolean` | `forwardAccessRequest` |
  `protected boolean` | `forwardAccountingResponse` |
  `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 | 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 moduleId, ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,​N> nasList, boolean loadNasList, boolean linkReload)` |

- ## Method Summary

  Modifier and Type | Method | 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 разделяется на два этапа - аутентификацию и авторизацию. В данном методе должна проходить аутентификация. Этот метод вызывается один раз за радиус сессию, т.е. сразу на Access-Request, если сессии нет, или в конце обработки eap запросов. Метод вызывается из `RadiusSession` Внутри логики должен найтись логин, провериться пароль, и, если все нормально, вызваться `authorization(RadiusListenerWorker, Nas, RadiusSession, RadiusPacket, RadiusPacket, ConnectionSet, int, ContractManager, Contract, Object, String)`
  `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)` | Получение наса по радиус пакету. Сначала нас ищется по атрибуту Nas-Identifier, потом Nas-Ip-Address.
  `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, Setup setup, int moduleId)` |
  `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 Details

  - ### 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

  - ### accountingIgnoreCount

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

  - ### 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

  - ### forwardAccessRequest

    protected volatile boolean forwardAccessRequest

  - ### forwardAccessAnswer

    protected volatile boolean forwardAccessAnswer

  - ### forwardAccountingResponse

    protected volatile boolean forwardAccountingResponse

- ## Constructor Details

  - ### 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 moduleId, 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 Details

  - ### reloadConfig

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

  - ### reloadNasList

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

  - ### afterNasListReload

    protected void afterNasListReload()

  - ### getNas

    protected 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` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash

  - ### preprocessAccountingRequest

    protected void preprocessAccountingRequest​(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)
    Предобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
    Parameters:
      `nas` -
      `request` -
      `response` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash

  - ### postprocessAccessRequest

    protected void postprocessAccessRequest​(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)
    Постобработка Access-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
    Parameters:
      `nas` -
      `request` -
      `response` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash

  - ### postprocessAccountingRequest

    protected void postprocessAccountingRequest​(N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet)
    Постобработка Accounting-Request По умолчанию - обработка скриптом предобработки наса. Возможно расширение.
    Parameters:
      `nas` -
      `request` -
      `response` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash

  - ### 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. Вызывается из `RadiusListenerWorker`
    Parameters:
      `req` -
      `nas` -
      `logRecordId` -
      `request` -
      `response` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash
    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` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash
      `time` -

  - ### 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(RadiusListenerWorker, Nas, RadiusSession, RadiusPacket, RadiusPacket, ConnectionSet, int, ContractManager, Contract, Object, String)`

  - ### 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` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash
      `log_record_id` -
      `contract` -
      `login` -
      `userName` -
    Returns:
    See Also:
      `authentication(RadiusListenerWorker, Nas, RadiusSession, RadiusPacket, RadiusPacket, ConnectionSet, int)`

  - ### accounting

    protected C accounting​(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, java.util.Date time)
    Обработка Accounting-Request по умолчанию.
    Parameters:
      `req` -
      `nas` -
      `request` -
      `response` -
      `connectionSet` - экземпляры соединений с БД: master, slave, trash

  - ### newInstance

    public static RadiusProcessor<?,​ru.bitel.bgbilling.kernel.network.radius.nas.Nas<?,​?,​?>,​?> newInstance​(java.lang.Class<? extends RadiusProcessor> clazz, Setup setup, int moduleId) 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()