...
Предобработка:
Блок кода | ||||
---|---|---|---|---|
| ||||
package ru.provider.bgbilling.modules.inet.dyn.device; import javax.annotation.Resource; import org.apache.log4j.Logger; import ru.bitel.bgbilling.kernel.network.dhcp.DhcpOption; import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket; 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.modules.inet.dhcp.InetDhcpProcessor; import ru.bitel.bgbilling.modules.inet.runtime.device.PacketValueExtractor; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.ParameterMap; import ru.bitel.common.io.BinaryValueExtractor; public class PonDhcpRelayProtocolHandler extends ProtocolHandlerAdapter { private static final Logger logger = Logger.getLogger( PonDhcpRelayProtocolHandler.class ); @Resource private PacketValueExtractor packetValueExtractor; private byte oltPortCode; private BinaryValueExtractor oltPortExtractor; private byte ontIdPortCode; private BinaryValueExtractor ontIdPortExtractor; @Override public void init( Setup setup, int moduleId, InetDevice inetDevice, InetDeviceType inetDeviceType, ParameterMap deviceConfig ) throws Exception { oltPortCode = (byte)deviceConfig.getInt( "dhcp.option82.oltPort.code", 1 ); oltPortExtractor = packetValueExtractor.getExtractor( deviceConfig, "dhcp.option82.oltPort." ); ontIdPortCode = (byte)deviceConfig.getInt( "dhcp.option82.ontId.code", 1 ); ontIdPortExtractor = packetValueExtractor.getExtractor( deviceConfig, "dhcp.option82.ontId." ); } @Override public void preprocessDhcpRequest( final DhcpPacket request, final DhcpPacket response ) throws Exception { final int svlan = packetValueExtractor.getOption82AgentSvlanId( request, true ); final int vlan = packetValueExtractor.getOption82VlanId( request, true ); final int oltPort = extract( request, oltPortCode, oltPortExtractor ); final int ontId = extract( request, ontIdPortCode, ontIdPortExtractor ); final String onuIdentifier = (String)packetValueExtractor.getOption82Login( request, true ); final String calledStationId = svlan + "." + vlan + "/" + oltPort + ":" + ontId + "/" + onuIdentifier; logger.info( calledStationId ); // устанавливаем VLAN, чтобы он был досупен биллингу при обработке пакета request.setOption( InetDhcpProcessor.VLAN_ID, vlan ); // устанавливаем VLAN в circuitId сессии request.setOption( InetDhcpProcessor.CIRCUIT_ID, vlan ); // устанавливаем в calledStationId сессии, для информации request.setOption( InetDhcpProcessor.CALLED_STATION_ID, calledStationId ); } private static int extract( final DhcpPacket request, final byte code, final BinaryValueExtractor extractor ) { final DhcpOption subOption = request.getSubOption( code ); if( subOption != null ) { return extractor.extractInt( subOption.value, -1 ); } return -1; } } |