Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим
просмотр истории страницы
Версия 1
Текущий »
Обработчик процессора протокола позволяет произвести
пред/постобработку RADIUS или DHCP-запросов - например, изменить
RADIUS-запрос перед его обработкой системой или установить
дополнительные опции, которые поменяют логику обработки запроса.
Обработчик привязывается к типу устройства, т.е. обработчик будет
работать с запросами с устройств данного типа. При этом поочередно
вызываются все обработчики в цепочке дерева, начиная от корня дерева до
устройства, с которого пришел запрос.
Обработчик процессора протокола состоит из двух интерфейсов,
которые он расширяет:
/**
* Обработчик 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;
}
/**
* Обработчик DHCP-запросов
*/
public interface DhcpProtocolHandler
{
/**
* Предобработка DHCP-запроса
* @param request
* @param response
* @throws Exception
*/
public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
throws Exception;
/**
* Постобработка DHCP-запроса
* @param request
* @param response
* @throws Exception
*/
public void postprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
throws Exception;
}
/**
* Обработчик процессора протокола.
* @see RadiusProtocolHandler
* @author amir
*
*/
public interface ProtocolHandler
extends RadiusProtocolHandler, DhcpProtocolHandler
{
public void init( Setup setup, int moduleId, InetDevice inetDevice, InetDeviceType inetDeviceType, ParameterMap config )
throws Exception;
}
Например, такой обработчик будет подменять значение атрибута
User-Name на значение идентификатора устройства + значение атрибута
Nas-Port-Id, а значение пароля на "Password":
import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary;
import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket;
import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandler;
import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.ParameterMap;
import ru.bitel.common.sql.ConnectionSet;
public class SomeProtocolHandler
extends ProtocolHandlerAdapter
implements ProtocolHandler
{
private String deviceIdentifier;
@Override
public void init( Setup setup, int moduleId, InetDevice inetDevice, InetDeviceType inetDeviceType, ParameterMap deviceConfig )
throws Exception
{
this.deviceIdentifier = inetDevice.getIdentifier();
}
@Override
public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
String nasPortId = request.getStringAttribute( -1, RadiusDictionary.NAS_Port_Id, null );
request.setStringAttribute( -1, RadiusDictionary.User_Name, this.deviceIdentifier + ":" + nasPortId );
request.setStringAttribute( -1, RadiusDictionary.User_Password, "Password" );
}
}