Обработчик процессора протокола модуля Voice

Обработчик протокола позволяет делать некоторую дополнительную логику при обработке 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);