Обработчик протокола позволяет делать некоторую дополнительную логику при обработке Radius-запросов - например, изменить RADIUS-запрос перед его обработкой системой или установить дополнительные опции, которые поменяют логику обработки запроса.
Обработчик создается в динамическом коде( ссылка) и имеет имеет следующий интерфейс:
/** * Обработчик процессора протокола. * @see RadiusProtocolHandler * */ public interface ProtocolHandler extends RadiusProtocolHandler { public void init( Setup setup, int moduleId, VoiceDevice voiceDevice, VoiceDeviceType voiceDeviceType, ParameterMap config ) throws Exception; }
init- это метод инициализации, который вызывается при создании обработчика.
Так же обработчик расширяет следующий интерфейс:
/** * Обработчик RADIUS-запросов */ public interface RadiusProtocolHandler { /** * Предобработка RADIUS-запроса Access-Request * @param request * @param response * @param connectionSet * @throws Exception */ public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception; /** * Постобработка RADIUS-запроса Access-Request * @param request * @param response * @param connectionSet * @throws Exception */ public void postprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception; /** * Предобработка RADIUS-запроса Accounting-Request * @param request * @param response * @param connectionSet * @throws Exception */ public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception; /** * Постобработка RADIUS-запроса Accounting-Request * @param request * @param response * @param connectionSet * @throws Exception */ public void postprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet ) throws Exception; }
Параметры, заданные скриптом, более приоритетные, чем взятые из конфигурации. Тут можно выставить такие параметры:
Тип звонка - request.setOption( VoiceNas.CALL_TYPE, VoiceSession.CALL_TYPE_OUTGOING );
Аккаунт оператора - request.setOption( VoiceNas.OPERATOR_ACCOUNT, accountId);