Class PacketValueExtractor

java.lang.Object
ru.bitel.bgbilling.modules.inet.server.runtime.device.PacketValueExtractor

public class PacketValueExtractor extends Object
Утильный класс для извлечения значений из RADIUS- и DHCP- пакетов.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Pattern
    Шаблон поиска SVLAN
    protected String
    Префикс атрибута (если есть) - значение для SVLAN
    protected int
    Код атрибута - значение для SVLAN
    protected int
    Вендор атрибута - значение для SVLAN
    protected String
    Префикс атрибута (если есть) - значение для подмены Called-Station-Id
    protected int
    Код атрибута - значение для подмены Called-Station-Id
    protected int
    Вендор атрибута - значение для подмены Called-Station-Id
    protected String
    Префикс атрибута (если есть) - значение для подмены Calling-Station-Id
    protected int
    Код атрибута - значение для подмены Calling-Station-Id
    protected int
    Вендор атрибута - значение для подмены Calling-Station-Id
    protected Pattern
    Шаблон поиска MAC-адреса
    protected String
    Префикс атрибута (если есть) - MAC-адрес
    protected int
    Код атрибута - MAC-адрес
    protected int
    Вендор атрибута - MAC-адрес
    protected int
    Нужно ли удалять заголовок (2 байта, тип+длина) из значения DHCP-опции
    protected Pattern
    Шаблон поиска VLAN
    protected String
    Префикс атрибута (если есть) - значение для VLAN
    protected int
    Код атрибута - значение для VLAN
    protected int
    Вендор атрибута - значение для VLAN
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    byte[]
    Конвертирует значение (byte[], ByteBuffer, HEX-String) в byte[].
    int
    convertToInt(Object value, int def)
    Ковертирует значение (String, Long, Integer, byte[], ByteBuffer) в int.
    int
    Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
    Получение Called-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
    Получение Calling-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
    Извлечение значения MAC-адреса с помошью параметров конфигурации:
    Извлечение agentRemoteId из option82 DHCP-пакета c помошью параметров конфигурации:
    int
    Извлечение SVLAN из option82 DHCP-пакета c помошью параметров конфигурации:
    int
    Извлечение порта из option82 DHCP-пакета c помошью параметров конфигурации:
    int
    Извлечение порта из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
    int
    Извлечение VLAN из option82 DHCP-пакета c помошью параметров конфигурации:
    int
    Извлечение VLAN из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
    int
    Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
    Получение agentRemoteId из option82 RADIUS-пакета.
    Если есть установленная опция InetRadiusProcessor.AGENT_REMOTE_ID, то возвращает ее значение.
    int
    getAgentSvlanId(RadiusPacket request, boolean setOption)
    Получение SVLAN из RADIUS-пакета.
    Если есть установленная опция InetRadiusProcessor.AGENT_SVLAN, то возвращает ее значение.
    ru.bitel.common.io.BinaryValueExtractor
    getExtractor(ParameterMap params, String prefix)
     
    getOption82AgentRemoteId(DhcpPacket request, boolean setOption)
    Получение agentRemoteId из option82 DHCP-пакета.
    Если есть установленная опция InetDhcpProcessor.AGENT_REMOTE_ID, то возвращает ее значение.
    int
    getOption82AgentSvlanId(DhcpPacket request, boolean setOption)
    Получение SVLAN из option82 DHCP-пакета.
    Если есть установленная опция InetDhcpProcessor.AGENT_SVLAN, то возвращает ее значение.
    Получение circuitId из option82 RADIUS-пакета.
    Если есть установленная опция InetRadiusProcessor.AGENT_CIRCUIT_ID, то возвращает ее значение.
    int
    getOption82InterfaceId(DhcpPacket request, boolean setOption)
    Получение порта из DHCP-пакета.
    Если есть установленная опция InetDhcpProcessor.INTERFACE_ID, то возвращает ее значение.
    int
    getOption82InterfaceId(RadiusPacket request, boolean setOption)
    Получение порта из RADIUS-пакета.
    Если есть установленная опция InetRadiusProcessor.INTERFACE_ID, то возвращает ее значение.
    Получение логина из option82 DHCP-пакета c помошью параметров конфигурации:
    getOption82Login(DhcpPacket request, boolean setOption)
    Получение логина из option82 DHCP-пакета c помошью параметров конфигурации:
    int
    getOption82VlanId(DhcpPacket request, boolean setOption)
    Получение VLAN из option82 DHCP-пакета.
    Если есть установленная опция InetDhcpProcessor.VLAN_ID, то возвращает ее значение.
    int
    getOption82VlanId(RadiusPacket request, boolean setOption)
    Получение VLAN из circuitId option82 RADIUS-пакета.
    Если есть установленная опция InetDhcpProcessor.VLAN_ID, то возвращает ее значение.
    int
    getVlanId(RadiusPacket request, boolean setOption)
    Получение VLAN из RADIUS-пакета.
    Если есть установленная опция InetRadiusProcessor.VLAN_ID, то возвращает ее значение.
    void
    Подмена Called-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
    void
    Подмена Calling-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
    void
    Извлечение значения MAC-адреса и установка его как опцию.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • option82RemoveHeader

      protected int option82RemoveHeader
      Нужно ли удалять заголовок (2 байта, тип+длина) из значения DHCP-опции
    • macAddressVendor

      protected int macAddressVendor
      Вендор атрибута - MAC-адрес
    • macAddressType

      protected int macAddressType
      Код атрибута - MAC-адрес
    • macAddressPrefix

      protected String macAddressPrefix
      Префикс атрибута (если есть) - MAC-адрес
    • macAddressPattern

      protected Pattern macAddressPattern
      Шаблон поиска MAC-адреса
    • callingStationIdVendor

      protected int callingStationIdVendor
      Вендор атрибута - значение для подмены Calling-Station-Id
    • callingStationIdType

      protected int callingStationIdType
      Код атрибута - значение для подмены Calling-Station-Id
    • callingStationIdPrefix

      protected String callingStationIdPrefix
      Префикс атрибута (если есть) - значение для подмены Calling-Station-Id
    • calledStationIdVendor

      protected int calledStationIdVendor
      Вендор атрибута - значение для подмены Called-Station-Id
    • calledStationIdType

      protected int calledStationIdType
      Код атрибута - значение для подмены Called-Station-Id
    • calledStationIdPrefix

      protected String calledStationIdPrefix
      Префикс атрибута (если есть) - значение для подмены Called-Station-Id
    • vlanVendor

      protected int vlanVendor
      Вендор атрибута - значение для VLAN
    • vlanType

      protected int vlanType
      Код атрибута - значение для VLAN
    • vlanPrefix

      protected String vlanPrefix
      Префикс атрибута (если есть) - значение для VLAN
    • vlanPattern

      protected Pattern vlanPattern
      Шаблон поиска VLAN
    • agentSvlanVendor

      protected int agentSvlanVendor
      Вендор атрибута - значение для SVLAN
    • agentSvlanType

      protected int agentSvlanType
      Код атрибута - значение для SVLAN
    • agentSvlanPrefix

      protected String agentSvlanPrefix
      Префикс атрибута (если есть) - значение для SVLAN
    • agentSvlanPattern

      protected Pattern agentSvlanPattern
      Шаблон поиска SVLAN
  • Constructor Details

    • PacketValueExtractor

      public PacketValueExtractor(ParameterMap config)
  • Method Details

    • convertToInt

      public int convertToInt(Object value, int def)
      Ковертирует значение (String, Long, Integer, byte[], ByteBuffer) в int.
      Parameters:
      value -
      def -
      Returns:
    • convertToInt

      public byte[] convertToInt(Object data)
      Конвертирует значение (byte[], ByteBuffer, HEX-String) в byte[].
      Parameters:
      data -
      Returns:
    • getOption82AgentRemoteId

      public Object getOption82AgentRemoteId(DhcpPacket request, boolean setOption)
      Получение agentRemoteId из option82 DHCP-пакета.
      Если есть установленная опция InetDhcpProcessor.AGENT_REMOTE_ID, то возвращает ее значение. Иначе идет извлечение через extractOption82AgentRemoteId(DhcpPacket).
      Parameters:
      request - DHCP-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractOption82AgentRemoteId

      public Object extractOption82AgentRemoteId(DhcpPacket request)
      Извлечение agentRemoteId из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.agentRemoteId.code=2
       dhcp.option82.agentRemoteId.hex=.*
       
      Или
       dhcp.option82.agentRemoteId.code=2
       dhcp.option82.agentRemoteId.position=2
       dhcp.option82.agentRemoteId.length=6
       
      Parameters:
      request -
      Returns:
    • getAgentRemoteId

      public Object getAgentRemoteId(RadiusPacket request)
      Получение agentRemoteId из option82 RADIUS-пакета.
      Если есть установленная опция InetRadiusProcessor.AGENT_REMOTE_ID, то возвращает ее значение. Иначе идет извлечение c помощью параметров
       radius.agentRemoteId.vendor=2352
       radius.agentRemoteId.type=96
       #radius.agentRemoteId.prefix=
       #radius.agentRemoteId.pattern=
       
      Полученное значение устанавливается как опция InetRadiusProcessor.AGENT_REMOTE_ID в пакет.
      Parameters:
      request - RADIUS-запрос.
      Returns:
    • getOption82CircuitId

      public Object getOption82CircuitId(RadiusPacket request)
      Получение circuitId из option82 RADIUS-пакета.
      Если есть установленная опция InetRadiusProcessor.AGENT_CIRCUIT_ID, то возвращает ее значение. Иначе идет извлечение c помощью параметров
       radius.option82.circuitId.vendor=2352
       radius.option82.circuitId.type=97
       #radius.option82.circuitId.prefix=
       #radius.option82.circuitId.pattern=
       
      Полученное значение устанавливается как опция InetRadiusProcessor.AGENT_CIRCUIT_ID в пакет.
      Parameters:
      request - RADIUS-запрос.
      Returns:
    • getOption82VlanId

      public int getOption82VlanId(DhcpPacket request, boolean setOption)
      Получение VLAN из option82 DHCP-пакета.
      Если есть установленная опция InetDhcpProcessor.VLAN_ID, то возвращает ее значение. Иначе идет извлечение через extractOption82VlanId(DhcpPacket).
      Parameters:
      request - DHCP-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • getOption82AgentSvlanId

      public int getOption82AgentSvlanId(DhcpPacket request, boolean setOption)
      Получение SVLAN из option82 DHCP-пакета.
      Если есть установленная опция InetDhcpProcessor.AGENT_SVLAN, то возвращает ее значение. Иначе идет извлечение через extractOption82AgentSvlanId(DhcpPacket).
      Parameters:
      request - DHCP-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractOption82VlanId

      public int extractOption82VlanId(DhcpPacket request)
      Извлечение VLAN из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.vlanId.code=2
       dhcp.option82.vlanId.hex=^(\w{2})
       
      Или
       dhcp.option82.vlanId.code=2
       dhcp.option82.vlanId.position=0
       dhcp.option82.vlanId.length=2
       
      Если в пакет проставлена опция InetDhcpProcessor.AGENT_CIRCUIT_ID, то извлечения происходит из него (т.е. параметр dhcp.option82.vlanId.code ингоринуется).
      Parameters:
      request -
      Returns:
    • extractOption82AgentSvlanId

      public int extractOption82AgentSvlanId(DhcpPacket request)
      Извлечение SVLAN из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.agentSvlanId.code=2
       dhcp.option82.agentSvlanId.hex=^(\w{2})
       
      Или
       dhcp.option82.agentSvlanId.code=2
       dhcp.option82.agentSvlanId.position=0
       dhcp.option82.agentSvlanId.length=2
       
      Если в пакет проставлена опция InetDhcpProcessor.AGENT_CIRCUIT_ID, то извлечения происходит из него (т.е. параметр dhcp.option82.agentSvlanId.code ингоринуется).
      Parameters:
      request -
      Returns:
    • getOption82VlanId

      public int getOption82VlanId(RadiusPacket request, boolean setOption)
      Получение VLAN из circuitId option82 RADIUS-пакета.
      Если есть установленная опция InetDhcpProcessor.VLAN_ID, то возвращает ее значение. Иначе идет извлечение через extractOption82VlanId(RadiusPacket).
      Parameters:
      request - RADIUS-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractOption82VlanId

      public int extractOption82VlanId(RadiusPacket request)
      Извлечение VLAN из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
       dhcp.option82.vlanId.hex=^(\w{2})
       
      Или
       dhcp.option82.vlanId.position=0
       dhcp.option82.vlanId.length=2
       
      Parameters:
      request -
      Returns:
      See Also:
    • getVlanId

      public int getVlanId(RadiusPacket request, boolean setOption)
      Получение VLAN из RADIUS-пакета.
      Если есть установленная опция InetRadiusProcessor.VLAN_ID, то возвращает ее значение. Иначе идет извлечение через extractVlanId(RadiusPacket).
      Parameters:
      request - RADIUS-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractVlanId

      public int extractVlanId(RadiusPacket request)
      Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
       radius.vlan.vendor=
       radius.vlan.type=
       radius.vlan.prefix=
       radius.vlan.pattern=
       
      Или извлечение VLAN из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
       dhcp.option82.vlanId.position=0
       dhcp.option82.vlanId.length=2
       
      Parameters:
      request - RADIUS-пакет.
      Returns:
    • getAgentSvlanId

      public int getAgentSvlanId(RadiusPacket request, boolean setOption)
      Получение SVLAN из RADIUS-пакета.
      Если есть установленная опция InetRadiusProcessor.AGENT_SVLAN, то возвращает ее значение. Иначе идет извлечение через extractAgentSvlanId(RadiusPacket).
      Parameters:
      request - RADIUS-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractAgentSvlanId

      public int extractAgentSvlanId(RadiusPacket request)
      Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
       radius.agentSvlan.vendor=
       radius.agentSvlan.type=
       radius.agentSvlan.prefix=
       radius.agentSvlan.pattern=
       
      Или извлечение VLAN из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
       dhcp.option82.agentSvlanId.code=2
       dhcp.option82.agentSvlanId.hex=^(\w{2})
       
      Или
       dhcp.option82.agentSvlanId.code=2
       dhcp.option82.agentSvlanId.position=0
       dhcp.option82.agentSvlanId.length=2
       
      Parameters:
      request - RADIUS-пакет.
      Returns:
    • getOption82InterfaceId

      public int getOption82InterfaceId(DhcpPacket request, boolean setOption)
      Получение порта из DHCP-пакета.
      Если есть установленная опция InetDhcpProcessor.INTERFACE_ID, то возвращает ее значение. Иначе идет извлечение через extractOption82InterfaceId(DhcpPacket).
      Parameters:
      request - DHCP-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractOption82InterfaceId

      public int extractOption82InterfaceId(DhcpPacket request)
      Извлечение порта из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.interfaceId.code=2
       dhcp.option82.interfaceId.hex=^(\w{2})
       
      Или
       dhcp.option82.interfaceId.code=2
       dhcp.option82.interfaceId.position=0
       dhcp.option82.interfaceId.length=2
       
      Если в пакет проставлена опция InetDhcpProcessor.AGENT_CIRCUIT_ID, то извлечения происходит из него (т.е. параметр dhcp.option82.interfaceId.code ингоринуется).
      Parameters:
      request -
      Returns:
    • getOption82InterfaceId

      public int getOption82InterfaceId(RadiusPacket request, boolean setOption)
      Получение порта из RADIUS-пакета.
      Если есть установленная опция InetRadiusProcessor.INTERFACE_ID, то возвращает ее значение. Иначе идет извлечение через extractOption82InterfaceId(RadiusPacket).
      Parameters:
      request - RADIUS-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • extractOption82InterfaceId

      public int extractOption82InterfaceId(RadiusPacket request)
      Извлечение порта из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
       dhcp.option82.interfaceId.hex=^(\w{2})
       
      Или
       dhcp.option82.interfaceId.position=0
       dhcp.option82.interfaceId.length=2
       
      Parameters:
      request -
      Returns:
      See Also:
    • getOption82Login

      public Object getOption82Login(DhcpPacket request, boolean setOption)
      Получение логина из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.login.code=2
       dhcp.option82.login.hex=.*
       
      Parameters:
      request - DHCP-запрос.
      setOption - нужно ли установить извлеченное значение в пакет через request.setOption.
      Returns:
    • getOption82Login

      public Object getOption82Login(DhcpPacket request)
      Получение логина из option82 DHCP-пакета c помошью параметров конфигурации:
       dhcp.option82.login.code=2
       dhcp.option82.login.hex=.*
       
      Parameters:
      request - DHCP-запрос.
      Returns:
    • setCallingStationIdAttribute

      public void setCallingStationIdAttribute(RadiusPacket request)
      Подмена Calling-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
       radius.callingStationId.vendor=
       radius.callingStationId.type=
       radius.callingStationId.prefix=
       
      Parameters:
      request -
    • extractCallingStationId

      public Object extractCallingStationId(RadiusPacket request)
      Получение Calling-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
       radius.callingStationId.vendor=
       radius.callingStationId.type=
       radius.callingStationId.prefix=
       
      Parameters:
      request -
    • setCalledStationIdAttribute

      public void setCalledStationIdAttribute(RadiusPacket request)
      Подмена Called-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
       radius.calledStationId.vendor=
       radius.calledStationId.type=
       radius.calledStationId.prefix=
       
      Parameters:
      request -
    • extractCalledStationId

      public Object extractCalledStationId(RadiusPacket request)
      Получение Called-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
       radius.calledStationId.vendor=
       radius.calledStationId.type=
       radius.calledStationId.prefix=
       
      Parameters:
      request -
    • setMacAddressOption

      public void setMacAddressOption(RadiusPacket request)
      Извлечение значения MAC-адреса и установка его как опцию. Извлечение происходит с помошью параметров конфигурации:
       radius.macAddress.vendor=
       radius.macAddress.type=
       radius.macAddress.prefix=
       radius.macAddress.pattern=
       
      Parameters:
      request -
    • extractMacAddress

      public Object extractMacAddress(RadiusPacket request)
      Извлечение значения MAC-адреса с помошью параметров конфигурации:
       radius.macAddress.vendor=
       radius.macAddress.type=
       radius.macAddress.prefix=
       radius.macAddress.pattern=
       
      Parameters:
      request -
    • getExtractor

      public ru.bitel.common.io.BinaryValueExtractor getExtractor(ParameterMap params, String prefix)