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
Радиус процессор, минимальный набор, основная архитектура обработки.
  • 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()