@netkitty/codec 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/README.md +352 -0
- package/README.zh-CN.md +342 -0
- package/dist/Codec.d.ts +133 -0
- package/dist/Codec.js +632 -0
- package/dist/PacketHeaders.d.ts +189 -0
- package/dist/PacketHeaders.js +384 -0
- package/dist/abstracts/BaseHeader.d.ts +325 -0
- package/dist/abstracts/BaseHeader.js +734 -0
- package/dist/errors/CodecSchemaValidateError.d.ts +4 -0
- package/dist/errors/CodecSchemaValidateError.js +11 -0
- package/dist/headers/ADSAMS.d.ts +33 -0
- package/dist/headers/ADSAMS.js +208 -0
- package/dist/headers/AH.d.ts +28 -0
- package/dist/headers/AH.js +137 -0
- package/dist/headers/AMQP.d.ts +31 -0
- package/dist/headers/AMQP.js +316 -0
- package/dist/headers/ARP.d.ts +26 -0
- package/dist/headers/ARP.js +243 -0
- package/dist/headers/BACnetIP.d.ts +27 -0
- package/dist/headers/BACnetIP.js +97 -0
- package/dist/headers/BFD.d.ts +28 -0
- package/dist/headers/BFD.js +155 -0
- package/dist/headers/BGP.d.ts +27 -0
- package/dist/headers/BGP.js +111 -0
- package/dist/headers/BSAPIP.d.ts +33 -0
- package/dist/headers/BSAPIP.js +78 -0
- package/dist/headers/Babel.d.ts +32 -0
- package/dist/headers/Babel.js +224 -0
- package/dist/headers/BitTorrent.d.ts +28 -0
- package/dist/headers/BitTorrent.js +72 -0
- package/dist/headers/C37118.d.ts +26 -0
- package/dist/headers/C37118.js +147 -0
- package/dist/headers/CAPWAP.d.ts +38 -0
- package/dist/headers/CAPWAP.js +275 -0
- package/dist/headers/CDP.d.ts +25 -0
- package/dist/headers/CDP.js +117 -0
- package/dist/headers/CMS.d.ts +33 -0
- package/dist/headers/CMS.js +238 -0
- package/dist/headers/COTP.d.ts +30 -0
- package/dist/headers/COTP.js +193 -0
- package/dist/headers/CassandraCQL.d.ts +28 -0
- package/dist/headers/CassandraCQL.js +117 -0
- package/dist/headers/CoAP.d.ts +29 -0
- package/dist/headers/CoAP.js +140 -0
- package/dist/headers/Codesys.d.ts +32 -0
- package/dist/headers/Codesys.js +119 -0
- package/dist/headers/Collectd.d.ts +29 -0
- package/dist/headers/Collectd.js +154 -0
- package/dist/headers/DCCP.d.ts +30 -0
- package/dist/headers/DCCP.js +204 -0
- package/dist/headers/DHCP.d.ts +26 -0
- package/dist/headers/DHCP.js +148 -0
- package/dist/headers/DHCPFailover.d.ts +30 -0
- package/dist/headers/DHCPFailover.js +104 -0
- package/dist/headers/DHCPv6.d.ts +25 -0
- package/dist/headers/DHCPv6.js +145 -0
- package/dist/headers/DNP3.d.ts +27 -0
- package/dist/headers/DNP3.js +150 -0
- package/dist/headers/DNS.d.ts +55 -0
- package/dist/headers/DNS.js +309 -0
- package/dist/headers/DTLS.d.ts +33 -0
- package/dist/headers/DTLS.js +142 -0
- package/dist/headers/Diameter.d.ts +34 -0
- package/dist/headers/Diameter.js +229 -0
- package/dist/headers/EAPOL.d.ts +32 -0
- package/dist/headers/EAPOL.js +135 -0
- package/dist/headers/EIGRP.d.ts +28 -0
- package/dist/headers/EIGRP.js +165 -0
- package/dist/headers/ENIP.d.ts +31 -0
- package/dist/headers/ENIP.js +164 -0
- package/dist/headers/ESP.d.ts +27 -0
- package/dist/headers/ESP.js +140 -0
- package/dist/headers/Elasticsearch.d.ts +30 -0
- package/dist/headers/Elasticsearch.js +125 -0
- package/dist/headers/EtherCAT.d.ts +35 -0
- package/dist/headers/EtherCAT.js +150 -0
- package/dist/headers/EthernetII.d.ts +28 -0
- package/dist/headers/EthernetII.js +117 -0
- package/dist/headers/FCoE.d.ts +38 -0
- package/dist/headers/FCoE.js +210 -0
- package/dist/headers/FTP.d.ts +34 -0
- package/dist/headers/FTP.js +158 -0
- package/dist/headers/Finger.d.ts +41 -0
- package/dist/headers/Finger.js +135 -0
- package/dist/headers/FoundationFieldbusHSE.d.ts +43 -0
- package/dist/headers/FoundationFieldbusHSE.js +163 -0
- package/dist/headers/GELF.d.ts +35 -0
- package/dist/headers/GELF.js +261 -0
- package/dist/headers/GENEVE.d.ts +26 -0
- package/dist/headers/GENEVE.js +209 -0
- package/dist/headers/GESRTP.d.ts +32 -0
- package/dist/headers/GESRTP.js +141 -0
- package/dist/headers/GLBP.d.ts +29 -0
- package/dist/headers/GLBP.js +159 -0
- package/dist/headers/GRE.d.ts +27 -0
- package/dist/headers/GRE.js +181 -0
- package/dist/headers/GTPU.d.ts +25 -0
- package/dist/headers/GTPU.js +203 -0
- package/dist/headers/GTPv2C.d.ts +30 -0
- package/dist/headers/GTPv2C.js +281 -0
- package/dist/headers/GitProtocol.d.ts +34 -0
- package/dist/headers/GitProtocol.js +141 -0
- package/dist/headers/Goose.d.ts +115 -0
- package/dist/headers/Goose.js +1067 -0
- package/dist/headers/Gopher.d.ts +43 -0
- package/dist/headers/Gopher.js +182 -0
- package/dist/headers/HARTIP.d.ts +30 -0
- package/dist/headers/HARTIP.js +145 -0
- package/dist/headers/HSR.d.ts +27 -0
- package/dist/headers/HSR.js +105 -0
- package/dist/headers/HSRP.d.ts +26 -0
- package/dist/headers/HSRP.js +173 -0
- package/dist/headers/HTTP.d.ts +32 -0
- package/dist/headers/HTTP.js +153 -0
- package/dist/headers/HTTP2.d.ts +34 -0
- package/dist/headers/HTTP2.js +190 -0
- package/dist/headers/IAX2.d.ts +33 -0
- package/dist/headers/IAX2.js +274 -0
- package/dist/headers/ICMP.d.ts +15 -0
- package/dist/headers/ICMP.js +148 -0
- package/dist/headers/ICMPv6.d.ts +15 -0
- package/dist/headers/ICMPv6.js +129 -0
- package/dist/headers/IEC104_I_Frame.d.ts +23 -0
- package/dist/headers/IEC104_I_Frame.js +6489 -0
- package/dist/headers/IEC104_S_Frame.d.ts +26 -0
- package/dist/headers/IEC104_S_Frame.js +135 -0
- package/dist/headers/IEC104_U_Frame.d.ts +27 -0
- package/dist/headers/IEC104_U_Frame.js +176 -0
- package/dist/headers/IEC61850SampledValues.d.ts +20 -0
- package/dist/headers/IEC61850SampledValues.js +420 -0
- package/dist/headers/IGMP.d.ts +31 -0
- package/dist/headers/IGMP.js +274 -0
- package/dist/headers/IMAP.d.ts +32 -0
- package/dist/headers/IMAP.js +185 -0
- package/dist/headers/IPFIX.d.ts +29 -0
- package/dist/headers/IPFIX.js +156 -0
- package/dist/headers/IPv4.d.ts +20 -0
- package/dist/headers/IPv4.js +370 -0
- package/dist/headers/IPv6.d.ts +29 -0
- package/dist/headers/IPv6.js +209 -0
- package/dist/headers/IPv6HopByHopOptions.d.ts +81 -0
- package/dist/headers/IPv6HopByHopOptions.js +495 -0
- package/dist/headers/IRC.d.ts +34 -0
- package/dist/headers/IRC.js +175 -0
- package/dist/headers/ISAKMP.d.ts +29 -0
- package/dist/headers/ISAKMP.js +197 -0
- package/dist/headers/ISCSI.d.ts +39 -0
- package/dist/headers/ISCSI.js +289 -0
- package/dist/headers/ISIS.d.ts +25 -0
- package/dist/headers/ISIS.js +79 -0
- package/dist/headers/ISOSession.d.ts +27 -0
- package/dist/headers/ISOSession.js +343 -0
- package/dist/headers/Ident.d.ts +42 -0
- package/dist/headers/Ident.js +184 -0
- package/dist/headers/KNXnetIP.d.ts +30 -0
- package/dist/headers/KNXnetIP.js +135 -0
- package/dist/headers/Kafka.d.ts +35 -0
- package/dist/headers/Kafka.js +128 -0
- package/dist/headers/Kerberos.d.ts +30 -0
- package/dist/headers/Kerberos.js +217 -0
- package/dist/headers/L2TP.d.ts +26 -0
- package/dist/headers/L2TP.js +297 -0
- package/dist/headers/LACP.d.ts +31 -0
- package/dist/headers/LACP.js +151 -0
- package/dist/headers/LDAP.d.ts +31 -0
- package/dist/headers/LDAP.js +226 -0
- package/dist/headers/LDP.d.ts +31 -0
- package/dist/headers/LDP.js +138 -0
- package/dist/headers/LISP.d.ts +30 -0
- package/dist/headers/LISP.js +103 -0
- package/dist/headers/LLC.d.ts +27 -0
- package/dist/headers/LLC.js +81 -0
- package/dist/headers/LLDP.d.ts +26 -0
- package/dist/headers/LLDP.js +126 -0
- package/dist/headers/LLMNR.d.ts +23 -0
- package/dist/headers/LLMNR.js +40 -0
- package/dist/headers/LPD.d.ts +31 -0
- package/dist/headers/LPD.js +159 -0
- package/dist/headers/MACsec.d.ts +34 -0
- package/dist/headers/MACsec.js +178 -0
- package/dist/headers/MDNS.d.ts +26 -0
- package/dist/headers/MDNS.js +45 -0
- package/dist/headers/MGCP.d.ts +30 -0
- package/dist/headers/MGCP.js +155 -0
- package/dist/headers/MMS.d.ts +29 -0
- package/dist/headers/MMS.js +243 -0
- package/dist/headers/MPLS.d.ts +31 -0
- package/dist/headers/MPLS.js +145 -0
- package/dist/headers/MQTT.d.ts +30 -0
- package/dist/headers/MQTT.js +173 -0
- package/dist/headers/MQTTSN.d.ts +34 -0
- package/dist/headers/MQTTSN.js +177 -0
- package/dist/headers/MarkerProtocol.d.ts +32 -0
- package/dist/headers/MarkerProtocol.js +153 -0
- package/dist/headers/Megaco.d.ts +32 -0
- package/dist/headers/Megaco.js +144 -0
- package/dist/headers/Memcached.d.ts +44 -0
- package/dist/headers/Memcached.js +285 -0
- package/dist/headers/ModbusTCP.d.ts +25 -0
- package/dist/headers/ModbusTCP.js +99 -0
- package/dist/headers/ModbusUDP.d.ts +26 -0
- package/dist/headers/ModbusUDP.js +100 -0
- package/dist/headers/MongoDB.d.ts +33 -0
- package/dist/headers/MongoDB.js +143 -0
- package/dist/headers/MySQL.d.ts +30 -0
- package/dist/headers/MySQL.js +114 -0
- package/dist/headers/NATS.d.ts +29 -0
- package/dist/headers/NATS.js +135 -0
- package/dist/headers/NBDS.d.ts +34 -0
- package/dist/headers/NBDS.js +176 -0
- package/dist/headers/NBNS.d.ts +34 -0
- package/dist/headers/NBNS.js +78 -0
- package/dist/headers/NBSS.d.ts +36 -0
- package/dist/headers/NBSS.js +137 -0
- package/dist/headers/NFS.d.ts +36 -0
- package/dist/headers/NFS.js +273 -0
- package/dist/headers/NHRP.d.ts +32 -0
- package/dist/headers/NHRP.js +154 -0
- package/dist/headers/NNTP.d.ts +35 -0
- package/dist/headers/NNTP.js +162 -0
- package/dist/headers/NTP.d.ts +18 -0
- package/dist/headers/NTP.js +73 -0
- package/dist/headers/NetFlowV5.d.ts +28 -0
- package/dist/headers/NetFlowV5.js +205 -0
- package/dist/headers/OLSR.d.ts +31 -0
- package/dist/headers/OLSR.js +213 -0
- package/dist/headers/OPCUA.d.ts +33 -0
- package/dist/headers/OPCUA.js +165 -0
- package/dist/headers/OPCUAPubSub.d.ts +33 -0
- package/dist/headers/OPCUAPubSub.js +144 -0
- package/dist/headers/OSPF.d.ts +31 -0
- package/dist/headers/OSPF.js +365 -0
- package/dist/headers/OmronFINS.d.ts +31 -0
- package/dist/headers/OmronFINS.js +90 -0
- package/dist/headers/OpenFlow.d.ts +30 -0
- package/dist/headers/OpenFlow.js +113 -0
- package/dist/headers/OpenVPN.d.ts +35 -0
- package/dist/headers/OpenVPN.js +214 -0
- package/dist/headers/PCWorx.d.ts +35 -0
- package/dist/headers/PCWorx.js +115 -0
- package/dist/headers/PIM.d.ts +27 -0
- package/dist/headers/PIM.js +129 -0
- package/dist/headers/POP3.d.ts +31 -0
- package/dist/headers/POP3.js +152 -0
- package/dist/headers/POWERLINK.d.ts +28 -0
- package/dist/headers/POWERLINK.js +116 -0
- package/dist/headers/PPPoEDiscovery.d.ts +29 -0
- package/dist/headers/PPPoEDiscovery.js +198 -0
- package/dist/headers/PPPoESession.d.ts +28 -0
- package/dist/headers/PPPoESession.js +125 -0
- package/dist/headers/PPTP.d.ts +30 -0
- package/dist/headers/PPTP.js +122 -0
- package/dist/headers/PROFINETRT.d.ts +28 -0
- package/dist/headers/PROFINETRT.js +74 -0
- package/dist/headers/PTP.d.ts +34 -0
- package/dist/headers/PTP.js +213 -0
- package/dist/headers/PostgreSQL.d.ts +40 -0
- package/dist/headers/PostgreSQL.js +236 -0
- package/dist/headers/QUIC.d.ts +34 -0
- package/dist/headers/QUIC.js +308 -0
- package/dist/headers/RADIUS.d.ts +24 -0
- package/dist/headers/RADIUS.js +138 -0
- package/dist/headers/RDP.d.ts +27 -0
- package/dist/headers/RDP.js +93 -0
- package/dist/headers/RFB.d.ts +39 -0
- package/dist/headers/RFB.js +151 -0
- package/dist/headers/RGoose.d.ts +72 -0
- package/dist/headers/RGoose.js +340 -0
- package/dist/headers/RIP.d.ts +29 -0
- package/dist/headers/RIP.js +133 -0
- package/dist/headers/RIPng.d.ts +26 -0
- package/dist/headers/RIPng.js +140 -0
- package/dist/headers/RMCP.d.ts +26 -0
- package/dist/headers/RMCP.js +155 -0
- package/dist/headers/RSVP.d.ts +31 -0
- package/dist/headers/RSVP.js +263 -0
- package/dist/headers/RTCP.d.ts +34 -0
- package/dist/headers/RTCP.js +217 -0
- package/dist/headers/RTP.d.ts +33 -0
- package/dist/headers/RTP.js +291 -0
- package/dist/headers/RTPS.d.ts +33 -0
- package/dist/headers/RTPS.js +182 -0
- package/dist/headers/RTSP.d.ts +36 -0
- package/dist/headers/RTSP.js +184 -0
- package/dist/headers/RawData.d.ts +17 -0
- package/dist/headers/RawData.js +43 -0
- package/dist/headers/Redis.d.ts +32 -0
- package/dist/headers/Redis.js +202 -0
- package/dist/headers/Rlogin.d.ts +42 -0
- package/dist/headers/Rlogin.js +139 -0
- package/dist/headers/Rsync.d.ts +28 -0
- package/dist/headers/Rsync.js +117 -0
- package/dist/headers/S7comm.d.ts +36 -0
- package/dist/headers/S7comm.js +244 -0
- package/dist/headers/SCTP.d.ts +35 -0
- package/dist/headers/SCTP.js +174 -0
- package/dist/headers/SFlow.d.ts +29 -0
- package/dist/headers/SFlow.js +242 -0
- package/dist/headers/SIP.d.ts +27 -0
- package/dist/headers/SIP.js +146 -0
- package/dist/headers/SLMP.d.ts +36 -0
- package/dist/headers/SLMP.js +154 -0
- package/dist/headers/SLP.d.ts +30 -0
- package/dist/headers/SLP.js +207 -0
- package/dist/headers/SLPv1.d.ts +32 -0
- package/dist/headers/SLPv1.js +138 -0
- package/dist/headers/SMB1.d.ts +37 -0
- package/dist/headers/SMB1.js +200 -0
- package/dist/headers/SMB2.d.ts +36 -0
- package/dist/headers/SMB2.js +203 -0
- package/dist/headers/SMPP.d.ts +33 -0
- package/dist/headers/SMPP.js +119 -0
- package/dist/headers/SMTP.d.ts +33 -0
- package/dist/headers/SMTP.js +157 -0
- package/dist/headers/SNAP.d.ts +22 -0
- package/dist/headers/SNAP.js +68 -0
- package/dist/headers/SNMP.d.ts +28 -0
- package/dist/headers/SNMP.js +302 -0
- package/dist/headers/SOCKS4.d.ts +42 -0
- package/dist/headers/SOCKS4.js +302 -0
- package/dist/headers/SOCKS5.d.ts +45 -0
- package/dist/headers/SOCKS5.js +223 -0
- package/dist/headers/SSDP.d.ts +27 -0
- package/dist/headers/SSDP.js +161 -0
- package/dist/headers/SSH.d.ts +44 -0
- package/dist/headers/SSH.js +274 -0
- package/dist/headers/STOMP.d.ts +48 -0
- package/dist/headers/STOMP.js +177 -0
- package/dist/headers/STP.d.ts +26 -0
- package/dist/headers/STP.js +150 -0
- package/dist/headers/STUN.d.ts +25 -0
- package/dist/headers/STUN.js +183 -0
- package/dist/headers/SercosIII.d.ts +43 -0
- package/dist/headers/SercosIII.js +199 -0
- package/dist/headers/Skinny.d.ts +32 -0
- package/dist/headers/Skinny.js +139 -0
- package/dist/headers/StatsD.d.ts +27 -0
- package/dist/headers/StatsD.js +134 -0
- package/dist/headers/SunRPC.d.ts +34 -0
- package/dist/headers/SunRPC.js +268 -0
- package/dist/headers/Syslog.d.ts +21 -0
- package/dist/headers/Syslog.js +91 -0
- package/dist/headers/TCP.d.ts +19 -0
- package/dist/headers/TCP.js +905 -0
- package/dist/headers/TFTP.d.ts +28 -0
- package/dist/headers/TFTP.js +224 -0
- package/dist/headers/TLS_Alert.d.ts +24 -0
- package/dist/headers/TLS_Alert.js +639 -0
- package/dist/headers/TLS_ApplicationData.d.ts +24 -0
- package/dist/headers/TLS_ApplicationData.js +170 -0
- package/dist/headers/TLS_ChangeCipherSpec.d.ts +23 -0
- package/dist/headers/TLS_ChangeCipherSpec.js +168 -0
- package/dist/headers/TLS_Handshake.d.ts +65 -0
- package/dist/headers/TLS_Handshake.js +860 -0
- package/dist/headers/TLS_Heartbeat.d.ts +27 -0
- package/dist/headers/TLS_Heartbeat.js +247 -0
- package/dist/headers/TPKT.d.ts +26 -0
- package/dist/headers/TPKT.js +99 -0
- package/dist/headers/TacacsPlus.d.ts +27 -0
- package/dist/headers/TacacsPlus.js +133 -0
- package/dist/headers/Telnet.d.ts +40 -0
- package/dist/headers/Telnet.js +193 -0
- package/dist/headers/Teredo.d.ts +40 -0
- package/dist/headers/Teredo.js +251 -0
- package/dist/headers/TimeProtocol.d.ts +25 -0
- package/dist/headers/TimeProtocol.js +53 -0
- package/dist/headers/UDP.d.ts +19 -0
- package/dist/headers/UDP.js +171 -0
- package/dist/headers/VLAN_802dot1Q.d.ts +24 -0
- package/dist/headers/VLAN_802dot1Q.js +96 -0
- package/dist/headers/VRRP.d.ts +26 -0
- package/dist/headers/VRRP.js +309 -0
- package/dist/headers/VXLAN.d.ts +24 -0
- package/dist/headers/VXLAN.js +75 -0
- package/dist/headers/WCCP.d.ts +29 -0
- package/dist/headers/WCCP.js +117 -0
- package/dist/headers/WHOIS.d.ts +37 -0
- package/dist/headers/WHOIS.js +126 -0
- package/dist/headers/WSDiscovery.d.ts +29 -0
- package/dist/headers/WSDiscovery.js +118 -0
- package/dist/headers/WakeOnLAN.d.ts +30 -0
- package/dist/headers/WakeOnLAN.js +126 -0
- package/dist/headers/WebSocket.d.ts +26 -0
- package/dist/headers/WebSocket.js +173 -0
- package/dist/headers/WireGuard.d.ts +38 -0
- package/dist/headers/WireGuard.js +216 -0
- package/dist/headers/XMPP.d.ts +37 -0
- package/dist/headers/XMPP.js +149 -0
- package/dist/headers/Zabbix.d.ts +35 -0
- package/dist/headers/Zabbix.js +153 -0
- package/dist/headers/cms/AcsiPdu.d.ts +45 -0
- package/dist/headers/cms/AcsiPdu.js +112 -0
- package/dist/headers/cms/PerDecoder.d.ts +68 -0
- package/dist/headers/cms/PerDecoder.js +211 -0
- package/dist/headers/cms/PerReader.d.ts +64 -0
- package/dist/headers/cms/PerReader.js +155 -0
- package/dist/helper/BufferToHex.d.ts +5 -0
- package/dist/helper/BufferToHex.js +10 -0
- package/dist/helper/BufferToIP.d.ts +12 -0
- package/dist/helper/BufferToIP.js +23 -0
- package/dist/helper/BufferToNumber.d.ts +18 -0
- package/dist/helper/BufferToNumber.js +47 -0
- package/dist/helper/HexToBuffer.d.ts +7 -0
- package/dist/helper/HexToBuffer.js +27 -0
- package/dist/helper/HexToNumber.d.ts +18 -0
- package/dist/helper/HexToNumber.js +48 -0
- package/dist/helper/IPToBuffer.d.ts +12 -0
- package/dist/helper/IPToBuffer.js +34 -0
- package/dist/helper/NumberToBERBuffer.d.ts +18 -0
- package/dist/helper/NumberToBERBuffer.js +31 -0
- package/dist/helper/NumberToBERHex.d.ts +18 -0
- package/dist/helper/NumberToBERHex.js +52 -0
- package/dist/helper/NumberToBuffer.d.ts +18 -0
- package/dist/helper/NumberToBuffer.js +38 -0
- package/dist/helper/NumberToHex.d.ts +18 -0
- package/dist/helper/NumberToHex.js +35 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +113 -0
- package/dist/lib/FlexibleObject.d.ts +27 -0
- package/dist/lib/FlexibleObject.js +113 -0
- package/dist/lib/GetBERIntegerLengthFromBuffer.d.ts +6 -0
- package/dist/lib/GetBERIntegerLengthFromBuffer.js +16 -0
- package/dist/lib/ProcessPacketPostHandlers.d.ts +13 -0
- package/dist/lib/ProcessPacketPostHandlers.js +53 -0
- package/dist/lib/SortPostHandlers.d.ts +7 -0
- package/dist/lib/SortPostHandlers.js +11 -0
- package/dist/lib/StringContentEncodingEnum.d.ts +10 -0
- package/dist/lib/StringContentEncodingEnum.js +14 -0
- package/dist/schema/ProtocolFieldJSONSchema.d.ts +35 -0
- package/dist/schema/ProtocolFieldJSONSchema.js +2 -0
- package/dist/schema/ProtocolFieldJSONSchemaDefinition.d.ts +2 -0
- package/dist/schema/ProtocolFieldJSONSchemaDefinition.js +2 -0
- package/dist/schema/ProtocolJSONSchema.d.ts +32 -0
- package/dist/schema/ProtocolJSONSchema.js +2 -0
- package/dist/types/CodecData.d.ts +7 -0
- package/dist/types/CodecData.js +2 -0
- package/dist/types/CodecDecodeResult.d.ts +10 -0
- package/dist/types/CodecDecodeResult.js +2 -0
- package/dist/types/CodecEncodeInput.d.ts +2 -0
- package/dist/types/CodecEncodeInput.js +2 -0
- package/dist/types/CodecEncodeResult.d.ts +5 -0
- package/dist/types/CodecEncodeResult.js +2 -0
- package/dist/types/CodecErrorInfo.d.ts +5 -0
- package/dist/types/CodecErrorInfo.js +2 -0
- package/dist/types/CodecModule.d.ts +2 -0
- package/dist/types/CodecModule.js +2 -0
- package/dist/types/CodecModuleConstructor.d.ts +2 -0
- package/dist/types/CodecModuleConstructor.js +2 -0
- package/dist/types/CodecSchema.d.ts +6 -0
- package/dist/types/CodecSchema.js +2 -0
- package/dist/types/DemuxProducer.d.ts +23 -0
- package/dist/types/DemuxProducer.js +2 -0
- package/dist/types/Dissection.d.ts +23 -0
- package/dist/types/Dissection.js +2 -0
- package/dist/types/HeaderTreeNode.d.ts +4 -0
- package/dist/types/HeaderTreeNode.js +2 -0
- package/dist/types/LayerGraph.d.ts +32 -0
- package/dist/types/LayerGraph.js +2 -0
- package/dist/types/PostHandlerItem.d.ts +4 -0
- package/dist/types/PostHandlerItem.js +2 -0
- package/package.json +141 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseHeader } from '../abstracts/BaseHeader';
|
|
2
|
+
import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
|
|
3
|
+
/**
|
|
4
|
+
* NTP — Network Time Protocol (RFC 5905), the 48-byte packet header. Rides UDP port 123. Fields per
|
|
5
|
+
* RFC 5905 §7.3: a flags byte (LI/VN/Mode), Stratum, Poll and Precision (signed power-of-two seconds),
|
|
6
|
+
* Root Delay/Dispersion (NTP short 16.16 fixed-point, kept as raw uint32), Reference Identifier, and
|
|
7
|
+
* four 64-bit NTP timestamps (Reference/Origin/Receive/Transmit). Extension fields and the optional
|
|
8
|
+
* MAC (authenticated NTP) fall to the following raw layer.
|
|
9
|
+
*/
|
|
10
|
+
export declare class NTP extends BaseHeader {
|
|
11
|
+
#private;
|
|
12
|
+
get SCHEMA(): ProtocolJSONSchema;
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly nickname: string;
|
|
16
|
+
readonly matchKeys: string[];
|
|
17
|
+
match(): boolean;
|
|
18
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NTP = void 0;
|
|
4
|
+
const BaseHeader_1 = require("../abstracts/BaseHeader");
|
|
5
|
+
/**
|
|
6
|
+
* NTP — Network Time Protocol (RFC 5905), the 48-byte packet header. Rides UDP port 123. Fields per
|
|
7
|
+
* RFC 5905 §7.3: a flags byte (LI/VN/Mode), Stratum, Poll and Precision (signed power-of-two seconds),
|
|
8
|
+
* Root Delay/Dispersion (NTP short 16.16 fixed-point, kept as raw uint32), Reference Identifier, and
|
|
9
|
+
* four 64-bit NTP timestamps (Reference/Origin/Receive/Transmit). Extension fields and the optional
|
|
10
|
+
* MAC (authenticated NTP) fall to the following raw layer.
|
|
11
|
+
*/
|
|
12
|
+
class NTP extends BaseHeader_1.BaseHeader {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.id = 'ntp';
|
|
16
|
+
this.name = 'Network Time Protocol';
|
|
17
|
+
this.nickname = 'NTP';
|
|
18
|
+
//Port-defined (udp:123). No reliable content signature, so it is a plain bucket entry (no
|
|
19
|
+
//heuristicFallback): it is NTP only when it rides udp:123.
|
|
20
|
+
this.matchKeys = ['udpport:123'];
|
|
21
|
+
}
|
|
22
|
+
static #schemaCache;
|
|
23
|
+
get SCHEMA() {
|
|
24
|
+
return (NTP.#schemaCache ??= NTP.#buildSchema());
|
|
25
|
+
}
|
|
26
|
+
static #buildSchema() {
|
|
27
|
+
return {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
//Byte 0 packs three bit fields (bit 0 = MSB): LI[0..1], VN[2..4], Mode[5..7].
|
|
31
|
+
li: {
|
|
32
|
+
type: 'integer',
|
|
33
|
+
label: 'Leap Indicator',
|
|
34
|
+
minimum: 0,
|
|
35
|
+
maximum: 3,
|
|
36
|
+
decode: function () { this.instance.li.setValue(this.readBits(0, 1, 0, 2)); },
|
|
37
|
+
encode: function () { this.writeBits(0, 1, 0, 2, this.instance.li.getValue(0)); }
|
|
38
|
+
},
|
|
39
|
+
vn: {
|
|
40
|
+
type: 'integer',
|
|
41
|
+
label: 'Version',
|
|
42
|
+
minimum: 0,
|
|
43
|
+
maximum: 7,
|
|
44
|
+
decode: function () { this.instance.vn.setValue(this.readBits(0, 1, 2, 3)); },
|
|
45
|
+
encode: function () { this.writeBits(0, 1, 2, 3, this.instance.vn.getValue(0)); }
|
|
46
|
+
},
|
|
47
|
+
mode: {
|
|
48
|
+
type: 'integer',
|
|
49
|
+
label: 'Mode',
|
|
50
|
+
minimum: 0,
|
|
51
|
+
maximum: 7,
|
|
52
|
+
decode: function () { this.instance.mode.setValue(this.readBits(0, 1, 5, 3)); },
|
|
53
|
+
encode: function () { this.writeBits(0, 1, 5, 3, this.instance.mode.getValue(0)); }
|
|
54
|
+
},
|
|
55
|
+
stratum: this.fieldUInt('stratum', 1, 1, 'Stratum'),
|
|
56
|
+
//Poll and Precision are signed power-of-two-second exponents (RFC 5905 §7.3).
|
|
57
|
+
poll: this.fieldInt8('poll', 2, 'Poll Interval'),
|
|
58
|
+
precision: this.fieldInt8('precision', 3, 'Precision'),
|
|
59
|
+
rootDelay: this.fieldUInt('rootDelay', 4, 4, 'Root Delay'),
|
|
60
|
+
rootDispersion: this.fieldUInt('rootDispersion', 8, 4, 'Root Dispersion'),
|
|
61
|
+
refId: this.fieldHex('refId', 12, 4, 'Reference ID'),
|
|
62
|
+
refTimestamp: this.fieldHex('refTimestamp', 16, 8, 'Reference Timestamp'),
|
|
63
|
+
originTimestamp: this.fieldHex('originTimestamp', 24, 8, 'Origin Timestamp'),
|
|
64
|
+
receiveTimestamp: this.fieldHex('receiveTimestamp', 32, 8, 'Receive Timestamp'),
|
|
65
|
+
transmitTimestamp: this.fieldHex('transmitTimestamp', 40, 8, 'Transmit Timestamp')
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
match() {
|
|
70
|
+
return !!this.prevCodecModule && this.prevCodecModule.id === 'udp';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.NTP = NTP;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseHeader } from '../abstracts/BaseHeader';
|
|
2
|
+
import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
|
|
3
|
+
import { DemuxProducer } from '../types/DemuxProducer';
|
|
4
|
+
/**
|
|
5
|
+
* NetFlow v5 — Cisco's fixed-format flow export (there is no formal RFC; the record layout is Cisco's
|
|
6
|
+
* published v5 format). Rides UDP, conventionally destination port 2055 (also seen on 9995/9996). All
|
|
7
|
+
* fields are big-endian.
|
|
8
|
+
*
|
|
9
|
+
* A packet is a 24-byte header — version(=5), count (number of flow records), sysUptime, unixSecs,
|
|
10
|
+
* unixNsecs, flowSequence, engineType, engineId, samplingInterval — followed by `count` flow records
|
|
11
|
+
* of 48 bytes each (srcAddr/dstAddr/nextHop, input/output ifIndex, packet/octet counts, flow start/end
|
|
12
|
+
* uptimes, ports, TCP flags, protocol, ToS, AS numbers, prefix masks, and two padding fields).
|
|
13
|
+
*
|
|
14
|
+
* The record walk is bounded by BOTH `count` and the bytes actually captured, so a lying count in a
|
|
15
|
+
* truncated capture can never over-read; any trailing bytes beyond 24 + count*48 fall to the raw layer.
|
|
16
|
+
* `count` is honored when supplied (so a malformed count round-trips byte-for-byte) and derived from
|
|
17
|
+
* records.length only when absent (crafting). This is a leaf header — nothing demuxes off NetFlow.
|
|
18
|
+
*/
|
|
19
|
+
export declare class NetFlowV5 extends BaseHeader {
|
|
20
|
+
#private;
|
|
21
|
+
get SCHEMA(): ProtocolJSONSchema;
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly nickname: string;
|
|
25
|
+
readonly matchKeys: string[];
|
|
26
|
+
match(): boolean;
|
|
27
|
+
readonly demuxProducers: DemuxProducer[];
|
|
28
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NetFlowV5 = void 0;
|
|
4
|
+
const BaseHeader_1 = require("../abstracts/BaseHeader");
|
|
5
|
+
const BufferToNumber_1 = require("../helper/BufferToNumber");
|
|
6
|
+
const NumberToBuffer_1 = require("../helper/NumberToBuffer");
|
|
7
|
+
const BufferToIP_1 = require("../helper/BufferToIP");
|
|
8
|
+
const IPToBuffer_1 = require("../helper/IPToBuffer");
|
|
9
|
+
const StringContentEncodingEnum_1 = require("../lib/StringContentEncodingEnum");
|
|
10
|
+
//The fixed geometry of a NetFlow v5 export: a 24-byte header, then `count` flow records of 48 bytes.
|
|
11
|
+
const HEADER_LENGTH = 24;
|
|
12
|
+
const RECORD_LENGTH = 48;
|
|
13
|
+
/**
|
|
14
|
+
* NetFlow v5 — Cisco's fixed-format flow export (there is no formal RFC; the record layout is Cisco's
|
|
15
|
+
* published v5 format). Rides UDP, conventionally destination port 2055 (also seen on 9995/9996). All
|
|
16
|
+
* fields are big-endian.
|
|
17
|
+
*
|
|
18
|
+
* A packet is a 24-byte header — version(=5), count (number of flow records), sysUptime, unixSecs,
|
|
19
|
+
* unixNsecs, flowSequence, engineType, engineId, samplingInterval — followed by `count` flow records
|
|
20
|
+
* of 48 bytes each (srcAddr/dstAddr/nextHop, input/output ifIndex, packet/octet counts, flow start/end
|
|
21
|
+
* uptimes, ports, TCP flags, protocol, ToS, AS numbers, prefix masks, and two padding fields).
|
|
22
|
+
*
|
|
23
|
+
* The record walk is bounded by BOTH `count` and the bytes actually captured, so a lying count in a
|
|
24
|
+
* truncated capture can never over-read; any trailing bytes beyond 24 + count*48 fall to the raw layer.
|
|
25
|
+
* `count` is honored when supplied (so a malformed count round-trips byte-for-byte) and derived from
|
|
26
|
+
* records.length only when absent (crafting). This is a leaf header — nothing demuxes off NetFlow.
|
|
27
|
+
*/
|
|
28
|
+
class NetFlowV5 extends BaseHeader_1.BaseHeader {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
this.id = 'netflow5';
|
|
32
|
+
this.name = 'NetFlow v5';
|
|
33
|
+
this.nickname = 'NetFlow v5';
|
|
34
|
+
//Port-defined (udp:2055, and the commonly-used 9995/9996). NetFlow v5 does carry a reliable content
|
|
35
|
+
//signature — the first two bytes are the version (=5) — but that alone is weak, so it stays a plain
|
|
36
|
+
//bucket entry (no heuristicFallback): NetFlow v5 only when it rides one of its known UDP ports.
|
|
37
|
+
this.matchKeys = ['udpport:2055', 'udpport:9995', 'udpport:9996'];
|
|
38
|
+
//Leaf header: the flow records are terminal data, nothing demuxes off NetFlow.
|
|
39
|
+
this.demuxProducers = [];
|
|
40
|
+
}
|
|
41
|
+
static #schemaCache;
|
|
42
|
+
get SCHEMA() {
|
|
43
|
+
return (NetFlowV5.#schemaCache ??= NetFlowV5.#buildSchema());
|
|
44
|
+
}
|
|
45
|
+
/** Bytes available for this NetFlow message: the frame end, clamped by the UDP payload length. */
|
|
46
|
+
#available() {
|
|
47
|
+
let available = this.packet.length - this.startPos;
|
|
48
|
+
if (this.prevCodecModule && this.prevCodecModule.id === 'udp') {
|
|
49
|
+
const udpLength = this.prevCodecModule.instance.length.getValue(0);
|
|
50
|
+
if (udpLength >= 8 && udpLength - 8 < available)
|
|
51
|
+
available = udpLength - 8;
|
|
52
|
+
}
|
|
53
|
+
return available < 0 ? 0 : available;
|
|
54
|
+
}
|
|
55
|
+
static #recordItemSchema() {
|
|
56
|
+
return {
|
|
57
|
+
type: 'object',
|
|
58
|
+
label: 'Flow Record',
|
|
59
|
+
properties: {
|
|
60
|
+
srcAddr: { type: 'string', label: 'Source Address', minLength: 7, maxLength: 15, contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.IPv4 },
|
|
61
|
+
dstAddr: { type: 'string', label: 'Destination Address', minLength: 7, maxLength: 15, contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.IPv4 },
|
|
62
|
+
nextHop: { type: 'string', label: 'Next Hop', minLength: 7, maxLength: 15, contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.IPv4 },
|
|
63
|
+
input: { type: 'integer', label: 'Input SNMP ifIndex', minimum: 0, maximum: 65535 },
|
|
64
|
+
output: { type: 'integer', label: 'Output SNMP ifIndex', minimum: 0, maximum: 65535 },
|
|
65
|
+
dPkts: { type: 'integer', label: 'Packets', minimum: 0, maximum: 4294967295 },
|
|
66
|
+
dOctets: { type: 'integer', label: 'Octets', minimum: 0, maximum: 4294967295 },
|
|
67
|
+
first: { type: 'integer', label: 'Flow Start SysUptime', minimum: 0, maximum: 4294967295 },
|
|
68
|
+
last: { type: 'integer', label: 'Flow End SysUptime', minimum: 0, maximum: 4294967295 },
|
|
69
|
+
srcPort: { type: 'integer', label: 'Source Port', minimum: 0, maximum: 65535 },
|
|
70
|
+
dstPort: { type: 'integer', label: 'Destination Port', minimum: 0, maximum: 65535 },
|
|
71
|
+
pad1: { type: 'integer', label: 'Pad 1', minimum: 0, maximum: 255 },
|
|
72
|
+
tcpFlags: { type: 'integer', label: 'TCP Flags', minimum: 0, maximum: 255 },
|
|
73
|
+
prot: { type: 'integer', label: 'Protocol', minimum: 0, maximum: 255 },
|
|
74
|
+
tos: { type: 'integer', label: 'Type of Service', minimum: 0, maximum: 255 },
|
|
75
|
+
srcAs: { type: 'integer', label: 'Source AS', minimum: 0, maximum: 65535 },
|
|
76
|
+
dstAs: { type: 'integer', label: 'Destination AS', minimum: 0, maximum: 65535 },
|
|
77
|
+
srcMask: { type: 'integer', label: 'Source Mask', minimum: 0, maximum: 255 },
|
|
78
|
+
dstMask: { type: 'integer', label: 'Destination Mask', minimum: 0, maximum: 255 },
|
|
79
|
+
pad2: { type: 'integer', label: 'Pad 2', minimum: 0, maximum: 65535 }
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
static #buildSchema() {
|
|
84
|
+
return {
|
|
85
|
+
type: 'object',
|
|
86
|
+
summary: 'NetFlow v5 ${count} flows',
|
|
87
|
+
properties: {
|
|
88
|
+
version: this.fieldUInt('version', 0, 2, 'Version'),
|
|
89
|
+
count: {
|
|
90
|
+
type: 'integer',
|
|
91
|
+
label: 'Count',
|
|
92
|
+
minimum: 0,
|
|
93
|
+
maximum: 65535,
|
|
94
|
+
decode: function () {
|
|
95
|
+
this.instance.count.setValue((0, BufferToNumber_1.BufferToUInt16)(this.readBytes(2, 2)));
|
|
96
|
+
},
|
|
97
|
+
encode: function () {
|
|
98
|
+
//Honor an explicitly-set count (even a lying one — so a malformed capture still
|
|
99
|
+
//round-trips byte-for-byte); derive from the record array only when absent (crafting).
|
|
100
|
+
let count = this.instance.count.getValue();
|
|
101
|
+
if (count === undefined || count === null) {
|
|
102
|
+
const records = this.instance.records.getValue();
|
|
103
|
+
count = Array.isArray(records) ? records.length : 0;
|
|
104
|
+
}
|
|
105
|
+
if (count > 65535) {
|
|
106
|
+
this.recordError(this.instance.count.getPath(), 'Maximum value is 65535');
|
|
107
|
+
count = 65535;
|
|
108
|
+
}
|
|
109
|
+
if (count < 0) {
|
|
110
|
+
this.recordError(this.instance.count.getPath(), 'Minimum value is 0');
|
|
111
|
+
count = 0;
|
|
112
|
+
}
|
|
113
|
+
this.instance.count.setValue(count);
|
|
114
|
+
this.writeBytes(2, (0, NumberToBuffer_1.UInt16ToBuffer)(count));
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
sysUptime: this.fieldUInt('sysUptime', 4, 4, 'System Uptime'),
|
|
118
|
+
unixSecs: this.fieldUInt('unixSecs', 8, 4, 'Unix Seconds'),
|
|
119
|
+
unixNsecs: this.fieldUInt('unixNsecs', 12, 4, 'Unix Nanoseconds'),
|
|
120
|
+
flowSequence: this.fieldUInt('flowSequence', 16, 4, 'Flow Sequence'),
|
|
121
|
+
engineType: this.fieldUInt('engineType', 20, 1, 'Engine Type'),
|
|
122
|
+
engineId: this.fieldUInt('engineId', 21, 1, 'Engine ID'),
|
|
123
|
+
samplingInterval: this.fieldUInt('samplingInterval', 22, 2, 'Sampling Interval'),
|
|
124
|
+
records: {
|
|
125
|
+
type: 'array',
|
|
126
|
+
label: 'Flow Records',
|
|
127
|
+
items: this.#recordItemSchema(),
|
|
128
|
+
decode: function () {
|
|
129
|
+
//Bound the walk by BOTH the declared count and the captured bytes: a lying count in
|
|
130
|
+
//a truncated frame must never read past the buffer. Each record is a fixed 48 bytes.
|
|
131
|
+
const count = this.instance.count.getValue(0);
|
|
132
|
+
const available = this.#available();
|
|
133
|
+
const maxByBytes = available >= HEADER_LENGTH ? Math.floor((available - HEADER_LENGTH) / RECORD_LENGTH) : 0;
|
|
134
|
+
const total = Math.min(count, maxByBytes);
|
|
135
|
+
const records = [];
|
|
136
|
+
for (let i = 0; i < total; i++) {
|
|
137
|
+
const base = HEADER_LENGTH + i * RECORD_LENGTH;
|
|
138
|
+
records.push({
|
|
139
|
+
srcAddr: (0, BufferToIP_1.BufferToIPv4)(this.readBytes(base, 4)),
|
|
140
|
+
dstAddr: (0, BufferToIP_1.BufferToIPv4)(this.readBytes(base + 4, 4)),
|
|
141
|
+
nextHop: (0, BufferToIP_1.BufferToIPv4)(this.readBytes(base + 8, 4)),
|
|
142
|
+
input: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 12, 2)),
|
|
143
|
+
output: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 14, 2)),
|
|
144
|
+
dPkts: (0, BufferToNumber_1.BufferToUInt32)(this.readBytes(base + 16, 4)),
|
|
145
|
+
dOctets: (0, BufferToNumber_1.BufferToUInt32)(this.readBytes(base + 20, 4)),
|
|
146
|
+
first: (0, BufferToNumber_1.BufferToUInt32)(this.readBytes(base + 24, 4)),
|
|
147
|
+
last: (0, BufferToNumber_1.BufferToUInt32)(this.readBytes(base + 28, 4)),
|
|
148
|
+
srcPort: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 32, 2)),
|
|
149
|
+
dstPort: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 34, 2)),
|
|
150
|
+
pad1: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 36, 1)),
|
|
151
|
+
tcpFlags: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 37, 1)),
|
|
152
|
+
prot: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 38, 1)),
|
|
153
|
+
tos: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 39, 1)),
|
|
154
|
+
srcAs: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 40, 2)),
|
|
155
|
+
dstAs: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 42, 2)),
|
|
156
|
+
srcMask: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 44, 1)),
|
|
157
|
+
dstMask: (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(base + 45, 1)),
|
|
158
|
+
pad2: (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(base + 46, 2))
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
this.instance.records.setValue(records);
|
|
162
|
+
},
|
|
163
|
+
encode: function () {
|
|
164
|
+
const records = this.instance.records.getValue();
|
|
165
|
+
if (!Array.isArray(records))
|
|
166
|
+
return;
|
|
167
|
+
records.forEach((record, index) => {
|
|
168
|
+
const base = HEADER_LENGTH + index * RECORD_LENGTH;
|
|
169
|
+
this.writeBytes(base, (0, IPToBuffer_1.IPv4ToBuffer)(record.srcAddr ? record.srcAddr : '0.0.0.0'));
|
|
170
|
+
this.writeBytes(base + 4, (0, IPToBuffer_1.IPv4ToBuffer)(record.dstAddr ? record.dstAddr : '0.0.0.0'));
|
|
171
|
+
this.writeBytes(base + 8, (0, IPToBuffer_1.IPv4ToBuffer)(record.nextHop ? record.nextHop : '0.0.0.0'));
|
|
172
|
+
this.writeBytes(base + 12, (0, NumberToBuffer_1.UInt16ToBuffer)(record.input ? record.input : 0));
|
|
173
|
+
this.writeBytes(base + 14, (0, NumberToBuffer_1.UInt16ToBuffer)(record.output ? record.output : 0));
|
|
174
|
+
this.writeBytes(base + 16, (0, NumberToBuffer_1.UInt32ToBuffer)(record.dPkts ? record.dPkts : 0));
|
|
175
|
+
this.writeBytes(base + 20, (0, NumberToBuffer_1.UInt32ToBuffer)(record.dOctets ? record.dOctets : 0));
|
|
176
|
+
this.writeBytes(base + 24, (0, NumberToBuffer_1.UInt32ToBuffer)(record.first ? record.first : 0));
|
|
177
|
+
this.writeBytes(base + 28, (0, NumberToBuffer_1.UInt32ToBuffer)(record.last ? record.last : 0));
|
|
178
|
+
this.writeBytes(base + 32, (0, NumberToBuffer_1.UInt16ToBuffer)(record.srcPort ? record.srcPort : 0));
|
|
179
|
+
this.writeBytes(base + 34, (0, NumberToBuffer_1.UInt16ToBuffer)(record.dstPort ? record.dstPort : 0));
|
|
180
|
+
this.writeBytes(base + 36, (0, NumberToBuffer_1.UInt8ToBuffer)(record.pad1 ? record.pad1 : 0));
|
|
181
|
+
this.writeBytes(base + 37, (0, NumberToBuffer_1.UInt8ToBuffer)(record.tcpFlags ? record.tcpFlags : 0));
|
|
182
|
+
this.writeBytes(base + 38, (0, NumberToBuffer_1.UInt8ToBuffer)(record.prot ? record.prot : 0));
|
|
183
|
+
this.writeBytes(base + 39, (0, NumberToBuffer_1.UInt8ToBuffer)(record.tos ? record.tos : 0));
|
|
184
|
+
this.writeBytes(base + 40, (0, NumberToBuffer_1.UInt16ToBuffer)(record.srcAs ? record.srcAs : 0));
|
|
185
|
+
this.writeBytes(base + 42, (0, NumberToBuffer_1.UInt16ToBuffer)(record.dstAs ? record.dstAs : 0));
|
|
186
|
+
this.writeBytes(base + 44, (0, NumberToBuffer_1.UInt8ToBuffer)(record.srcMask ? record.srcMask : 0));
|
|
187
|
+
this.writeBytes(base + 45, (0, NumberToBuffer_1.UInt8ToBuffer)(record.dstMask ? record.dstMask : 0));
|
|
188
|
+
this.writeBytes(base + 46, (0, NumberToBuffer_1.UInt16ToBuffer)(record.pad2 ? record.pad2 : 0));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
match() {
|
|
196
|
+
if (!this.prevCodecModule || this.prevCodecModule.id !== 'udp')
|
|
197
|
+
return false;
|
|
198
|
+
//Require the whole 24-byte header within the payload and the version signature (=5).
|
|
199
|
+
if (this.#available() < HEADER_LENGTH)
|
|
200
|
+
return false;
|
|
201
|
+
const version = (0, BufferToNumber_1.BufferToUInt16)(this.packet.subarray(this.startPos, this.startPos + 2));
|
|
202
|
+
return version === 5;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.NetFlowV5 = NetFlowV5;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseHeader } from '../abstracts/BaseHeader';
|
|
2
|
+
import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
|
|
3
|
+
import { DemuxProducer } from '../types/DemuxProducer';
|
|
4
|
+
/**
|
|
5
|
+
* OLSR — Optimized Link State Routing (RFC 3626), a MANET proactive routing protocol carried over UDP
|
|
6
|
+
* port 698. An OLSR packet is a 4-byte packet header — Packet Length (the total packet octet count
|
|
7
|
+
* including this header) and Packet Sequence Number — followed by one or more messages. Each message is
|
|
8
|
+
* a 12-byte message header — Message Type (1 HELLO, 2 TC, 3 MID, 4 HNA), Vtime (the validity-time
|
|
9
|
+
* mantissa/exponent byte), Message Size (the message octet count including this 12-byte header),
|
|
10
|
+
* Originator Address (the 4-byte IPv4 address of the node that generated the message), Time To Live,
|
|
11
|
+
* Hop Count and Message Sequence Number — followed by (Message Size - 12) body bytes.
|
|
12
|
+
*
|
|
13
|
+
* The message body layout differs per Message Type (HELLO's link/neighbor sets, TC's advertised
|
|
14
|
+
* neighbors, MID's interface addresses, HNA's network/mask pairs) and several bodies need
|
|
15
|
+
* cross-message topology context, so this codec keeps each body verbatim as `body` hex (byte-perfect)
|
|
16
|
+
* and does not sub-decode it. The message array runs from offset 4 to the Packet Length (capped by the
|
|
17
|
+
* UDP payload), each message bounded by its own Message Size; a message that under/overruns is not
|
|
18
|
+
* consumed, so trailing / truncated bytes are left to the codec's recursion / RawData. On encode the
|
|
19
|
+
* Packet Length and each Message Size are honored when supplied (a crafted packet may lie), else derived
|
|
20
|
+
* from the actual bytes. A well-formed packet round-trips byte-for-byte.
|
|
21
|
+
*/
|
|
22
|
+
export declare class OLSR extends BaseHeader {
|
|
23
|
+
#private;
|
|
24
|
+
get SCHEMA(): ProtocolJSONSchema;
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly nickname: string;
|
|
28
|
+
readonly matchKeys: string[];
|
|
29
|
+
match(): boolean;
|
|
30
|
+
readonly demuxProducers: DemuxProducer[];
|
|
31
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OLSR = void 0;
|
|
4
|
+
const BaseHeader_1 = require("../abstracts/BaseHeader");
|
|
5
|
+
const BufferToHex_1 = require("../helper/BufferToHex");
|
|
6
|
+
const HexToBuffer_1 = require("../helper/HexToBuffer");
|
|
7
|
+
const BufferToNumber_1 = require("../helper/BufferToNumber");
|
|
8
|
+
const NumberToBuffer_1 = require("../helper/NumberToBuffer");
|
|
9
|
+
const BufferToIP_1 = require("../helper/BufferToIP");
|
|
10
|
+
const IPToBuffer_1 = require("../helper/IPToBuffer");
|
|
11
|
+
const StringContentEncodingEnum_1 = require("../lib/StringContentEncodingEnum");
|
|
12
|
+
/**
|
|
13
|
+
* OLSR — Optimized Link State Routing (RFC 3626), a MANET proactive routing protocol carried over UDP
|
|
14
|
+
* port 698. An OLSR packet is a 4-byte packet header — Packet Length (the total packet octet count
|
|
15
|
+
* including this header) and Packet Sequence Number — followed by one or more messages. Each message is
|
|
16
|
+
* a 12-byte message header — Message Type (1 HELLO, 2 TC, 3 MID, 4 HNA), Vtime (the validity-time
|
|
17
|
+
* mantissa/exponent byte), Message Size (the message octet count including this 12-byte header),
|
|
18
|
+
* Originator Address (the 4-byte IPv4 address of the node that generated the message), Time To Live,
|
|
19
|
+
* Hop Count and Message Sequence Number — followed by (Message Size - 12) body bytes.
|
|
20
|
+
*
|
|
21
|
+
* The message body layout differs per Message Type (HELLO's link/neighbor sets, TC's advertised
|
|
22
|
+
* neighbors, MID's interface addresses, HNA's network/mask pairs) and several bodies need
|
|
23
|
+
* cross-message topology context, so this codec keeps each body verbatim as `body` hex (byte-perfect)
|
|
24
|
+
* and does not sub-decode it. The message array runs from offset 4 to the Packet Length (capped by the
|
|
25
|
+
* UDP payload), each message bounded by its own Message Size; a message that under/overruns is not
|
|
26
|
+
* consumed, so trailing / truncated bytes are left to the codec's recursion / RawData. On encode the
|
|
27
|
+
* Packet Length and each Message Size are honored when supplied (a crafted packet may lie), else derived
|
|
28
|
+
* from the actual bytes. A well-formed packet round-trips byte-for-byte.
|
|
29
|
+
*/
|
|
30
|
+
class OLSR extends BaseHeader_1.BaseHeader {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
this.id = 'olsr';
|
|
34
|
+
this.name = 'Optimized Link State Routing';
|
|
35
|
+
this.nickname = 'OLSR';
|
|
36
|
+
this.matchKeys = ['udpport:698'];
|
|
37
|
+
//A leaf header — each message body needs per-type, topology-dependent parsing.
|
|
38
|
+
this.demuxProducers = [];
|
|
39
|
+
}
|
|
40
|
+
static #schemaCache;
|
|
41
|
+
get SCHEMA() {
|
|
42
|
+
return (OLSR.#schemaCache ??= OLSR.#buildSchema());
|
|
43
|
+
}
|
|
44
|
+
/** The payload length bounded by the UDP datagram (so retained padding/FCS is not absorbed). */
|
|
45
|
+
#payloadLength() {
|
|
46
|
+
let available = this.packet.length - this.startPos;
|
|
47
|
+
if (this.prevCodecModule && this.prevCodecModule.id === 'udp') {
|
|
48
|
+
const udpLength = this.prevCodecModule.instance.length.getValue(0);
|
|
49
|
+
if (udpLength >= 8 && udpLength - 8 < available)
|
|
50
|
+
available = udpLength - 8;
|
|
51
|
+
}
|
|
52
|
+
return available < 0 ? 0 : available;
|
|
53
|
+
}
|
|
54
|
+
/** Byte offset the message walk stops at: min(UDP payload, Packet Length). */
|
|
55
|
+
#consumedEnd() {
|
|
56
|
+
const payload = this.#payloadLength();
|
|
57
|
+
const packetLength = this.instance.packetLength.getValue(0);
|
|
58
|
+
return (packetLength > 0 && packetLength < payload) ? packetLength : payload;
|
|
59
|
+
}
|
|
60
|
+
/** Clamp a crafted numeric field to [0, max], recording an error rather than throwing or wrapping. */
|
|
61
|
+
#clamp(path, value, max) {
|
|
62
|
+
let v = (value === undefined || value === null) ? 0 : value;
|
|
63
|
+
if (v > max) {
|
|
64
|
+
this.recordError(path, `Maximum value is ${max}`);
|
|
65
|
+
v = max;
|
|
66
|
+
}
|
|
67
|
+
if (v < 0) {
|
|
68
|
+
this.recordError(path, 'Minimum value is 0');
|
|
69
|
+
v = 0;
|
|
70
|
+
}
|
|
71
|
+
return v;
|
|
72
|
+
}
|
|
73
|
+
static #buildSchema() {
|
|
74
|
+
return {
|
|
75
|
+
type: 'object',
|
|
76
|
+
summary: 'OLSR seq=${packetSequenceNumber} ${messages.length} msgs',
|
|
77
|
+
properties: {
|
|
78
|
+
packetLength: {
|
|
79
|
+
type: 'integer',
|
|
80
|
+
label: 'Packet Length',
|
|
81
|
+
minimum: 0,
|
|
82
|
+
maximum: 65535,
|
|
83
|
+
decode: function () {
|
|
84
|
+
this.instance.packetLength.setValue((0, BufferToNumber_1.BufferToUInt16)(this.readBytes(0, 2)));
|
|
85
|
+
},
|
|
86
|
+
encode: function () {
|
|
87
|
+
//Packet Length counts the whole packet = 4-byte header + every message. Honored
|
|
88
|
+
//when supplied (a crafted packet may lie); else derived from the actual message
|
|
89
|
+
//bytes (12-byte header + body each), matching what the `messages` field writes.
|
|
90
|
+
const provided = this.instance.packetLength.getValue();
|
|
91
|
+
let value;
|
|
92
|
+
if (provided !== undefined && provided !== null) {
|
|
93
|
+
value = provided;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const messages = this.instance.messages.getValue([]);
|
|
97
|
+
let total = 4;
|
|
98
|
+
if (messages) {
|
|
99
|
+
for (const message of messages) {
|
|
100
|
+
total += 12 + (0, HexToBuffer_1.HexToBuffer)(message.body ? message.body : '').length;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
value = total;
|
|
104
|
+
}
|
|
105
|
+
if (value > 65535) {
|
|
106
|
+
this.recordError(this.instance.packetLength.getPath(), 'Maximum value is 65535');
|
|
107
|
+
value = 65535;
|
|
108
|
+
}
|
|
109
|
+
if (value < 0) {
|
|
110
|
+
this.recordError(this.instance.packetLength.getPath(), 'Minimum value is 0');
|
|
111
|
+
value = 0;
|
|
112
|
+
}
|
|
113
|
+
this.instance.packetLength.setValue(value);
|
|
114
|
+
this.writeBytes(0, (0, NumberToBuffer_1.UInt16ToBuffer)(value));
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
packetSequenceNumber: this.fieldUInt('packetSequenceNumber', 2, 2, 'Packet Sequence Number'),
|
|
118
|
+
//The message chain — 12-byte header + body each, running from offset 4 to the Packet
|
|
119
|
+
//Length (capped by the UDP payload). Owns a single offset walk; each body is bounded by
|
|
120
|
+
//its own Message Size and kept verbatim so every message round-trips byte-for-byte.
|
|
121
|
+
messages: {
|
|
122
|
+
type: 'array',
|
|
123
|
+
label: 'Messages',
|
|
124
|
+
items: {
|
|
125
|
+
type: 'object',
|
|
126
|
+
label: 'Message',
|
|
127
|
+
properties: {
|
|
128
|
+
//Wire fields are plain integers (no hard enum) so any on-wire value re-encodes.
|
|
129
|
+
messageType: { type: 'integer', label: 'Message Type', minimum: 0, maximum: 255 },
|
|
130
|
+
vTime: { type: 'integer', label: 'Vtime', minimum: 0, maximum: 255 },
|
|
131
|
+
messageSize: { type: 'integer', label: 'Message Size', minimum: 0, maximum: 65535 },
|
|
132
|
+
originatorAddress: { type: 'string', label: 'Originator Address', minLength: 7, maxLength: 15, contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.IPv4 },
|
|
133
|
+
ttl: { type: 'integer', label: 'Time To Live', minimum: 0, maximum: 255 },
|
|
134
|
+
hopCount: { type: 'integer', label: 'Hop Count', minimum: 0, maximum: 255 },
|
|
135
|
+
messageSeqNo: { type: 'integer', label: 'Message Sequence Number', minimum: 0, maximum: 65535 },
|
|
136
|
+
body: { type: 'string', label: 'Body', contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX }
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
decode: function () {
|
|
140
|
+
const end = this.#consumedEnd();
|
|
141
|
+
const messages = [];
|
|
142
|
+
let offset = 4;
|
|
143
|
+
while (offset + 12 <= end) {
|
|
144
|
+
//Peek the Message Size (dry-run, so it does not extend the consumed header
|
|
145
|
+
//length) to decide whether the whole message fits. A message that claims fewer
|
|
146
|
+
//than its 12-byte header, or overruns the packet, is truncation/corruption —
|
|
147
|
+
//stop and leave the remaining bytes to the codec's recursion / RawData.
|
|
148
|
+
const messageSize = (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(offset + 2, 2, true));
|
|
149
|
+
if (messageSize < 12 || offset + messageSize > end)
|
|
150
|
+
break;
|
|
151
|
+
const messageType = (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(offset, 1));
|
|
152
|
+
const vTime = (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(offset + 1, 1));
|
|
153
|
+
const originatorAddress = (0, BufferToIP_1.BufferToIPv4)(this.readBytes(offset + 4, 4));
|
|
154
|
+
const ttl = (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(offset + 8, 1));
|
|
155
|
+
const hopCount = (0, BufferToNumber_1.BufferToUInt8)(this.readBytes(offset + 9, 1));
|
|
156
|
+
const messageSeqNo = (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(offset + 10, 2));
|
|
157
|
+
const body = messageSize > 12 ? (0, BufferToHex_1.BufferToHex)(this.readBytes(offset + 12, messageSize - 12)) : '';
|
|
158
|
+
messages.push({
|
|
159
|
+
messageType: messageType,
|
|
160
|
+
vTime: vTime,
|
|
161
|
+
messageSize: messageSize,
|
|
162
|
+
originatorAddress: originatorAddress,
|
|
163
|
+
ttl: ttl,
|
|
164
|
+
hopCount: hopCount,
|
|
165
|
+
messageSeqNo: messageSeqNo,
|
|
166
|
+
body: body
|
|
167
|
+
});
|
|
168
|
+
offset += messageSize;
|
|
169
|
+
}
|
|
170
|
+
this.instance.messages.setValue(messages);
|
|
171
|
+
},
|
|
172
|
+
encode: function () {
|
|
173
|
+
const messages = this.instance.messages.getValue([]);
|
|
174
|
+
if (!messages)
|
|
175
|
+
return;
|
|
176
|
+
let offset = 4;
|
|
177
|
+
for (let i = 0; i < messages.length; i++) {
|
|
178
|
+
const message = messages[i];
|
|
179
|
+
const bodyBuffer = (0, HexToBuffer_1.HexToBuffer)(message.body ? message.body : '');
|
|
180
|
+
//Message Size counts the 12-byte header + body. Honored when supplied (a crafted
|
|
181
|
+
//message may lie); else derived from the header + body actually written. The walk
|
|
182
|
+
//advances by the bytes actually written so a lying Size cannot shift the next
|
|
183
|
+
//message.
|
|
184
|
+
const messageSize = (message.messageSize !== undefined && message.messageSize !== null)
|
|
185
|
+
? this.#clamp(`messages[${i}].messageSize`, message.messageSize, 65535)
|
|
186
|
+
: 12 + bodyBuffer.length;
|
|
187
|
+
this.writeBytes(offset, (0, NumberToBuffer_1.UInt8ToBuffer)(this.#clamp(`messages[${i}].messageType`, message.messageType, 255)));
|
|
188
|
+
this.writeBytes(offset + 1, (0, NumberToBuffer_1.UInt8ToBuffer)(this.#clamp(`messages[${i}].vTime`, message.vTime, 255)));
|
|
189
|
+
this.writeBytes(offset + 2, (0, NumberToBuffer_1.UInt16ToBuffer)(messageSize));
|
|
190
|
+
this.writeBytes(offset + 4, (0, IPToBuffer_1.IPv4ToBuffer)(message.originatorAddress ? message.originatorAddress : '0.0.0.0'));
|
|
191
|
+
this.writeBytes(offset + 8, (0, NumberToBuffer_1.UInt8ToBuffer)(this.#clamp(`messages[${i}].ttl`, message.ttl, 255)));
|
|
192
|
+
this.writeBytes(offset + 9, (0, NumberToBuffer_1.UInt8ToBuffer)(this.#clamp(`messages[${i}].hopCount`, message.hopCount, 255)));
|
|
193
|
+
this.writeBytes(offset + 10, (0, NumberToBuffer_1.UInt16ToBuffer)(this.#clamp(`messages[${i}].messageSeqNo`, message.messageSeqNo, 65535)));
|
|
194
|
+
if (bodyBuffer.length)
|
|
195
|
+
this.writeBytes(offset + 12, bodyBuffer);
|
|
196
|
+
offset += 12 + bodyBuffer.length;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
match() {
|
|
204
|
+
//OLSR rides on UDP port 698. Require the full 4-byte packet header within the UDP payload; a
|
|
205
|
+
//shorter datagram on port 698 is not an OLSR packet and falls through to raw rather than
|
|
206
|
+
//claiming a layer. Selection stays port-bucketed (matchKeys) — the packet header carries no
|
|
207
|
+
//distinctive content magic.
|
|
208
|
+
if (!this.prevCodecModule || this.prevCodecModule.id !== 'udp')
|
|
209
|
+
return false;
|
|
210
|
+
return this.#payloadLength() >= 4;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.OLSR = OLSR;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseHeader } from '../abstracts/BaseHeader';
|
|
2
|
+
import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
|
|
3
|
+
import { DemuxProducer } from '../types/DemuxProducer';
|
|
4
|
+
/**
|
|
5
|
+
* OPC UA Connection Protocol — the OPC UA TCP transport mapping (IEC 62541-6), TCP port 4840. Every OPC
|
|
6
|
+
* UA TCP message is framed by a fixed 8-byte header: a 3-byte ASCII MessageType (HEL/ACK/ERR/OPN/MSG/
|
|
7
|
+
* CLO/RHE/RHF), a 1-byte ASCII Chunk/IsFinal indicator (F final, C intermediate chunk, A abort), and a
|
|
8
|
+
* LITTLE-ENDIAN uint32 MessageSize that counts the WHOLE message including the 8-byte header. The header
|
|
9
|
+
* is followed by MessageSize − 8 bytes of message body.
|
|
10
|
+
*
|
|
11
|
+
* ⚠️ MessageSize is LITTLE-ENDIAN (the only multi-byte field in this header), and there is no
|
|
12
|
+
* little-endian helper in this codebase, so it is read/written byte-by-byte in its closure. The `| ... <<`
|
|
13
|
+
* expression yields a signed int32, so `>>> 0` is applied to the whole expression to keep a MessageSize
|
|
14
|
+
* with the high bit set unsigned. MessageType/Chunk are ASCII text kept as strings.
|
|
15
|
+
*
|
|
16
|
+
* The body is message-type-dependent (HEL/ACK carry a protocol version + buffer sizes + endpoint URL;
|
|
17
|
+
* OPN/MSG/CLO carry a SecureChannelId + security/sequence headers + an encoded body), and much of it is
|
|
18
|
+
* cross-message / security-context state. So this single-message codec keeps the body verbatim as `body`
|
|
19
|
+
* hex (byte-perfect), bounded by MessageSize (the body ends at offset MessageSize, clamped to the
|
|
20
|
+
* captured bytes) so a pipelined/trailing message is left to the codec's recursion / RawData. The
|
|
21
|
+
* MessageSize is honored when supplied (a crafted message may lie), else derived as 8 + body bytes. A
|
|
22
|
+
* well-formed message round-trips byte-for-byte. Structuring the per-message-type body is a later slice.
|
|
23
|
+
*/
|
|
24
|
+
export declare class OPCUA extends BaseHeader {
|
|
25
|
+
#private;
|
|
26
|
+
get SCHEMA(): ProtocolJSONSchema;
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly name: string;
|
|
29
|
+
readonly nickname: string;
|
|
30
|
+
readonly matchKeys: string[];
|
|
31
|
+
match(): boolean;
|
|
32
|
+
readonly demuxProducers: DemuxProducer[];
|
|
33
|
+
}
|