Package ru.bitel.bgbilling.modules.inet.server.runtime.device

# 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`
  `agentSvlanPattern`
  Шаблон поиска SVLAN
  `protected String`
  `agentSvlanPrefix`
  Префикс атрибута (если есть) - значение для SVLAN
  `protected int`
  `agentSvlanType`
  Код атрибута - значение для SVLAN
  `protected int`
  `agentSvlanVendor`
  Вендор атрибута - значение для SVLAN
  `protected String`
  `calledStationIdPrefix`
  Префикс атрибута (если есть) - значение для подмены Called-Station-Id
  `protected int`
  `calledStationIdType`
  Код атрибута - значение для подмены Called-Station-Id
  `protected int`
  `calledStationIdVendor`
  Вендор атрибута - значение для подмены Called-Station-Id
  `protected String`
  `callingStationIdPrefix`
  Префикс атрибута (если есть) - значение для подмены Calling-Station-Id
  `protected int`
  `callingStationIdType`
  Код атрибута - значение для подмены Calling-Station-Id
  `protected int`
  `callingStationIdVendor`
  Вендор атрибута - значение для подмены Calling-Station-Id
  `protected Pattern`
  `macAddressPattern`
  Шаблон поиска MAC-адреса
  `protected String`
  `macAddressPrefix`
  Префикс атрибута (если есть) - MAC-адрес
  `protected int`
  `macAddressType`
  Код атрибута - MAC-адрес
  `protected int`
  `macAddressVendor`
  Вендор атрибута - MAC-адрес
  `protected int`
  `option82RemoveHeader`
  Нужно ли удалять заголовок (2 байта, тип+длина) из значения DHCP-опции
  `protected Pattern`
  `vlanPattern`
  Шаблон поиска VLAN
  `protected String`
  `vlanPrefix`
  Префикс атрибута (если есть) - значение для VLAN
  `protected int`
  `vlanType`
  Код атрибута - значение для VLAN
  `protected int`
  `vlanVendor`
  Вендор атрибута - значение для VLAN

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PacketValueExtractor(ParameterMap config)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `byte[]`
  `convertToInt(Object data)`
  Конвертирует значение (byte[], ByteBuffer, HEX-String) в byte[].
  `int`
  `convertToInt(Object value, int def)`
  Ковертирует значение (String, Long, Integer, byte[], ByteBuffer) в int.
  `int`
  `extractAgentSvlanId(RadiusPacket request)`
  Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
  `Object`
  `extractCalledStationId(RadiusPacket request)`
  Получение Called-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
  `Object`
  `extractCallingStationId(RadiusPacket request)`
  Получение Calling-Station-Id из атрибута в RADIUS-пакете c помошью параметров конфигурации:
  `Object`
  `extractMacAddress(RadiusPacket request)`
  Извлечение значения MAC-адреса с помошью параметров конфигурации:
  `Object`
  `extractOption82AgentRemoteId(DhcpPacket request)`
  Извлечение agentRemoteId из option82 DHCP-пакета c помошью параметров конфигурации:
  `int`
  `extractOption82AgentSvlanId(DhcpPacket request)`
  Извлечение SVLAN из option82 DHCP-пакета c помошью параметров конфигурации:
  `int`
  `extractOption82InterfaceId(DhcpPacket request)`
  Извлечение порта из option82 DHCP-пакета c помошью параметров конфигурации:
  `int`
  `extractOption82InterfaceId(RadiusPacket request)`
  Извлечение порта из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
  `int`
  `extractOption82VlanId(DhcpPacket request)`
  Извлечение VLAN из option82 DHCP-пакета c помошью параметров конфигурации:
  `int`
  `extractOption82VlanId(RadiusPacket request)`
  Извлечение VLAN из circuitId option82 RADIUS-пакета c помошью параметров конфигурации:
  `int`
  `extractVlanId(RadiusPacket request)`
  Извлечение VLAN из RADIUS-пакета c помошью параметров конфигурации:
  `Object`
  `getAgentRemoteId(RadiusPacket request)`
  Получение 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)`
  `Object`
  `getOption82AgentRemoteId(DhcpPacket request, boolean setOption)`
  Получение agentRemoteId из option82 DHCP-пакета.
  Если есть установленная опция InetDhcpProcessor.AGENT_REMOTE_ID, то возвращает ее значение.
  `int`
  `getOption82AgentSvlanId(DhcpPacket request, boolean setOption)`
  Получение SVLAN из option82 DHCP-пакета.
  Если есть установленная опция InetDhcpProcessor.AGENT_SVLAN, то возвращает ее значение.
  `Object`
  `getOption82CircuitId(RadiusPacket request)`
  Получение 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, то возвращает ее значение.
  `Object`
  `getOption82Login(DhcpPacket request)`
  Получение логина из option82 DHCP-пакета c помошью параметров конфигурации:
  `Object`
  `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`
  `setCalledStationIdAttribute(RadiusPacket request)`
  Подмена Called-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
  `void`
  `setCallingStationIdAttribute(RadiusPacket request)`
  Подмена Calling-Station-Id атрибута в RADIUS-пакете c помошью параметров конфигурации:
  `void`
  `setMacAddressOption(RadiusPacket request)`
  Извлечение значения 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:
      - `getOption82CircuitId(RadiusPacket)`

  - ### 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:
      - `getOption82CircuitId(RadiusPacket)`

  - ### 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)