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.base.server.logger.BGLogger
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
  `final bitel.billing.server.util.RequestCounter`
  `accountingIgnoreCount`
  `final bitel.billing.server.util.RequestCounter`
  `accountingStartCounter`
  `final bitel.billing.server.util.RequestCounter`
  `accountingStopCounter`
  `final bitel.billing.server.util.RequestCounter`
  `accountingUpdateCounter`
  `final bitel.billing.server.util.RequestCounter`
  `accountingUpdateIgnoreCount`
  `final bitel.billing.server.util.RequestCounter`
  `antispamIgnoreCount`
  `final bitel.billing.server.util.RequestCounter`
  `authenticationAcceptCounter`
  `final bitel.billing.server.util.RequestCounter`
  `authenticationIgnoreCount`
  `final bitel.billing.server.util.RequestCounter`
  `authenticationRejectCounter`
  `protected boolean`
  `forwardAccessAnswer`
  `protected boolean`
  `forwardAccessRequest`
  `protected boolean`
  `forwardAccountingResponse`
  `protected boolean`
  `forwardAfterPreprocess`
  `protected boolean`
  `forwardAfterProcess`
  `protected final String`
  `module`
  `protected final ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N>`
  `nasList`
  `protected final Setup`
  `setup`

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

  `applicationId, moduleId`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `RadiusProcessor(Setup setup, String module, int mid, ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N> nasList)`
  Deprecated.
  `RadiusProcessor(Setup setup, 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, Date date, RadiusSession<N,P> radiusSession, int logRecordId, ConnectionSet connectionSet)`
  `protected C`
  `accounting(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, Date time)`
  Обработка Accounting-Request по умолчанию.
  `C`
  `accountingRequest(RadiusListenerWorker<N> req, N nas, RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet, Date time)`
  Обработка пакета Accounting-Request
  `protected void`
  `addToLog(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, Object login, String userName)`
  Авторизация клиента.
  Вызывается после того как логин найден, пароль проверен.
  На этом этапе надо проверить, что деньги, тариф и т.п. есть, проверить ограничения логина и т.д.
  `final Iterable<C>`
  `connections()`
  `abstract String`
  `executeCommand(String command, String params)`
  `int`
  `getAccessAcceptPerMinute()`
  `int`
  `getAccessRejectPerMinute()`
  `int`
  `getAccessRequestIgnorePerMinute()`
  `int`
  `getAccountingStartPerMinute()`
  `int`
  `getAccountingStopPerMinute()`
  `int`
  `getAccountingUpdateIgnorePerMinute()`
  `int`
  `getAccountingUpdatePerMinute()`
  `int`
  `getActiveConnectionsCount()`
  `int`
  `getAntispamIgnorePerMinute()`
  `protected List<C>`
  `getConnectionList()`
  `protected N`
  `getNas(SocketAddress clientAddress, RadiusPacket packet)`
  Получение наса по радиус пакету.
  Сначала нас ищется по атрибуту Nas-Identifier, потом Nas-Ip-Address.
  `ru.bitel.bgbilling.kernel.network.radius.nas.NasList<C,N>`
  `getNasList()`
  `abstract String`
  `getStatus()`
  `int`
  `getStoppedConnectionCount()`
  `int`
  `getSuspendedConnectionCount()`
  `protected int`
  `insertToLog(Date date, RadiusPacket packet)`
  `static RadiusProcessor<?,ru.bitel.bgbilling.kernel.network.radius.nas.Nas<?,?,?>,?>`
  `newInstance(Class<? extends RadiusProcessor> clazz, Setup setup, int moduleId)`
  `protected abstract RadiusSession<N,P>`
  `newRadiusSession(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 ru.bitel.bgbilling.kernel.base.server.logger.BGLogger

  `error, error, error, getLogger, logError, logError`

  ### 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 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, 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, 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(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 Iterable<C> connections()

  - ### executeCommand

    public abstract String executeCommand(String command, 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(Date date, RadiusPacket packet)

  - ### addToLog

    protected void addToLog(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, Date date, RadiusSession<N,P> radiusSession, int logRecordId, ConnectionSet connectionSet)

  - ### newRadiusSession

    protected abstract RadiusSession<N,P> newRadiusSession(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, 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, Object login, 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, 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(Class<? extends RadiusProcessor> clazz, Setup setup, int moduleId) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
    Throws:
      `SecurityException`
      `NoSuchMethodException`
      `IllegalArgumentException`
      `InstantiationException`
      `IllegalAccessException`
      `InvocationTargetException`

  - ### getConnectionList

    protected List<C> getConnectionList()

  - ### getStatus

    public abstract 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()