@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.
Files changed (463) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +352 -0
  4. package/README.zh-CN.md +342 -0
  5. package/dist/Codec.d.ts +133 -0
  6. package/dist/Codec.js +632 -0
  7. package/dist/PacketHeaders.d.ts +189 -0
  8. package/dist/PacketHeaders.js +384 -0
  9. package/dist/abstracts/BaseHeader.d.ts +325 -0
  10. package/dist/abstracts/BaseHeader.js +734 -0
  11. package/dist/errors/CodecSchemaValidateError.d.ts +4 -0
  12. package/dist/errors/CodecSchemaValidateError.js +11 -0
  13. package/dist/headers/ADSAMS.d.ts +33 -0
  14. package/dist/headers/ADSAMS.js +208 -0
  15. package/dist/headers/AH.d.ts +28 -0
  16. package/dist/headers/AH.js +137 -0
  17. package/dist/headers/AMQP.d.ts +31 -0
  18. package/dist/headers/AMQP.js +316 -0
  19. package/dist/headers/ARP.d.ts +26 -0
  20. package/dist/headers/ARP.js +243 -0
  21. package/dist/headers/BACnetIP.d.ts +27 -0
  22. package/dist/headers/BACnetIP.js +97 -0
  23. package/dist/headers/BFD.d.ts +28 -0
  24. package/dist/headers/BFD.js +155 -0
  25. package/dist/headers/BGP.d.ts +27 -0
  26. package/dist/headers/BGP.js +111 -0
  27. package/dist/headers/BSAPIP.d.ts +33 -0
  28. package/dist/headers/BSAPIP.js +78 -0
  29. package/dist/headers/Babel.d.ts +32 -0
  30. package/dist/headers/Babel.js +224 -0
  31. package/dist/headers/BitTorrent.d.ts +28 -0
  32. package/dist/headers/BitTorrent.js +72 -0
  33. package/dist/headers/C37118.d.ts +26 -0
  34. package/dist/headers/C37118.js +147 -0
  35. package/dist/headers/CAPWAP.d.ts +38 -0
  36. package/dist/headers/CAPWAP.js +275 -0
  37. package/dist/headers/CDP.d.ts +25 -0
  38. package/dist/headers/CDP.js +117 -0
  39. package/dist/headers/CMS.d.ts +33 -0
  40. package/dist/headers/CMS.js +238 -0
  41. package/dist/headers/COTP.d.ts +30 -0
  42. package/dist/headers/COTP.js +193 -0
  43. package/dist/headers/CassandraCQL.d.ts +28 -0
  44. package/dist/headers/CassandraCQL.js +117 -0
  45. package/dist/headers/CoAP.d.ts +29 -0
  46. package/dist/headers/CoAP.js +140 -0
  47. package/dist/headers/Codesys.d.ts +32 -0
  48. package/dist/headers/Codesys.js +119 -0
  49. package/dist/headers/Collectd.d.ts +29 -0
  50. package/dist/headers/Collectd.js +154 -0
  51. package/dist/headers/DCCP.d.ts +30 -0
  52. package/dist/headers/DCCP.js +204 -0
  53. package/dist/headers/DHCP.d.ts +26 -0
  54. package/dist/headers/DHCP.js +148 -0
  55. package/dist/headers/DHCPFailover.d.ts +30 -0
  56. package/dist/headers/DHCPFailover.js +104 -0
  57. package/dist/headers/DHCPv6.d.ts +25 -0
  58. package/dist/headers/DHCPv6.js +145 -0
  59. package/dist/headers/DNP3.d.ts +27 -0
  60. package/dist/headers/DNP3.js +150 -0
  61. package/dist/headers/DNS.d.ts +55 -0
  62. package/dist/headers/DNS.js +309 -0
  63. package/dist/headers/DTLS.d.ts +33 -0
  64. package/dist/headers/DTLS.js +142 -0
  65. package/dist/headers/Diameter.d.ts +34 -0
  66. package/dist/headers/Diameter.js +229 -0
  67. package/dist/headers/EAPOL.d.ts +32 -0
  68. package/dist/headers/EAPOL.js +135 -0
  69. package/dist/headers/EIGRP.d.ts +28 -0
  70. package/dist/headers/EIGRP.js +165 -0
  71. package/dist/headers/ENIP.d.ts +31 -0
  72. package/dist/headers/ENIP.js +164 -0
  73. package/dist/headers/ESP.d.ts +27 -0
  74. package/dist/headers/ESP.js +140 -0
  75. package/dist/headers/Elasticsearch.d.ts +30 -0
  76. package/dist/headers/Elasticsearch.js +125 -0
  77. package/dist/headers/EtherCAT.d.ts +35 -0
  78. package/dist/headers/EtherCAT.js +150 -0
  79. package/dist/headers/EthernetII.d.ts +28 -0
  80. package/dist/headers/EthernetII.js +117 -0
  81. package/dist/headers/FCoE.d.ts +38 -0
  82. package/dist/headers/FCoE.js +210 -0
  83. package/dist/headers/FTP.d.ts +34 -0
  84. package/dist/headers/FTP.js +158 -0
  85. package/dist/headers/Finger.d.ts +41 -0
  86. package/dist/headers/Finger.js +135 -0
  87. package/dist/headers/FoundationFieldbusHSE.d.ts +43 -0
  88. package/dist/headers/FoundationFieldbusHSE.js +163 -0
  89. package/dist/headers/GELF.d.ts +35 -0
  90. package/dist/headers/GELF.js +261 -0
  91. package/dist/headers/GENEVE.d.ts +26 -0
  92. package/dist/headers/GENEVE.js +209 -0
  93. package/dist/headers/GESRTP.d.ts +32 -0
  94. package/dist/headers/GESRTP.js +141 -0
  95. package/dist/headers/GLBP.d.ts +29 -0
  96. package/dist/headers/GLBP.js +159 -0
  97. package/dist/headers/GRE.d.ts +27 -0
  98. package/dist/headers/GRE.js +181 -0
  99. package/dist/headers/GTPU.d.ts +25 -0
  100. package/dist/headers/GTPU.js +203 -0
  101. package/dist/headers/GTPv2C.d.ts +30 -0
  102. package/dist/headers/GTPv2C.js +281 -0
  103. package/dist/headers/GitProtocol.d.ts +34 -0
  104. package/dist/headers/GitProtocol.js +141 -0
  105. package/dist/headers/Goose.d.ts +115 -0
  106. package/dist/headers/Goose.js +1067 -0
  107. package/dist/headers/Gopher.d.ts +43 -0
  108. package/dist/headers/Gopher.js +182 -0
  109. package/dist/headers/HARTIP.d.ts +30 -0
  110. package/dist/headers/HARTIP.js +145 -0
  111. package/dist/headers/HSR.d.ts +27 -0
  112. package/dist/headers/HSR.js +105 -0
  113. package/dist/headers/HSRP.d.ts +26 -0
  114. package/dist/headers/HSRP.js +173 -0
  115. package/dist/headers/HTTP.d.ts +32 -0
  116. package/dist/headers/HTTP.js +153 -0
  117. package/dist/headers/HTTP2.d.ts +34 -0
  118. package/dist/headers/HTTP2.js +190 -0
  119. package/dist/headers/IAX2.d.ts +33 -0
  120. package/dist/headers/IAX2.js +274 -0
  121. package/dist/headers/ICMP.d.ts +15 -0
  122. package/dist/headers/ICMP.js +148 -0
  123. package/dist/headers/ICMPv6.d.ts +15 -0
  124. package/dist/headers/ICMPv6.js +129 -0
  125. package/dist/headers/IEC104_I_Frame.d.ts +23 -0
  126. package/dist/headers/IEC104_I_Frame.js +6489 -0
  127. package/dist/headers/IEC104_S_Frame.d.ts +26 -0
  128. package/dist/headers/IEC104_S_Frame.js +135 -0
  129. package/dist/headers/IEC104_U_Frame.d.ts +27 -0
  130. package/dist/headers/IEC104_U_Frame.js +176 -0
  131. package/dist/headers/IEC61850SampledValues.d.ts +20 -0
  132. package/dist/headers/IEC61850SampledValues.js +420 -0
  133. package/dist/headers/IGMP.d.ts +31 -0
  134. package/dist/headers/IGMP.js +274 -0
  135. package/dist/headers/IMAP.d.ts +32 -0
  136. package/dist/headers/IMAP.js +185 -0
  137. package/dist/headers/IPFIX.d.ts +29 -0
  138. package/dist/headers/IPFIX.js +156 -0
  139. package/dist/headers/IPv4.d.ts +20 -0
  140. package/dist/headers/IPv4.js +370 -0
  141. package/dist/headers/IPv6.d.ts +29 -0
  142. package/dist/headers/IPv6.js +209 -0
  143. package/dist/headers/IPv6HopByHopOptions.d.ts +81 -0
  144. package/dist/headers/IPv6HopByHopOptions.js +495 -0
  145. package/dist/headers/IRC.d.ts +34 -0
  146. package/dist/headers/IRC.js +175 -0
  147. package/dist/headers/ISAKMP.d.ts +29 -0
  148. package/dist/headers/ISAKMP.js +197 -0
  149. package/dist/headers/ISCSI.d.ts +39 -0
  150. package/dist/headers/ISCSI.js +289 -0
  151. package/dist/headers/ISIS.d.ts +25 -0
  152. package/dist/headers/ISIS.js +79 -0
  153. package/dist/headers/ISOSession.d.ts +27 -0
  154. package/dist/headers/ISOSession.js +343 -0
  155. package/dist/headers/Ident.d.ts +42 -0
  156. package/dist/headers/Ident.js +184 -0
  157. package/dist/headers/KNXnetIP.d.ts +30 -0
  158. package/dist/headers/KNXnetIP.js +135 -0
  159. package/dist/headers/Kafka.d.ts +35 -0
  160. package/dist/headers/Kafka.js +128 -0
  161. package/dist/headers/Kerberos.d.ts +30 -0
  162. package/dist/headers/Kerberos.js +217 -0
  163. package/dist/headers/L2TP.d.ts +26 -0
  164. package/dist/headers/L2TP.js +297 -0
  165. package/dist/headers/LACP.d.ts +31 -0
  166. package/dist/headers/LACP.js +151 -0
  167. package/dist/headers/LDAP.d.ts +31 -0
  168. package/dist/headers/LDAP.js +226 -0
  169. package/dist/headers/LDP.d.ts +31 -0
  170. package/dist/headers/LDP.js +138 -0
  171. package/dist/headers/LISP.d.ts +30 -0
  172. package/dist/headers/LISP.js +103 -0
  173. package/dist/headers/LLC.d.ts +27 -0
  174. package/dist/headers/LLC.js +81 -0
  175. package/dist/headers/LLDP.d.ts +26 -0
  176. package/dist/headers/LLDP.js +126 -0
  177. package/dist/headers/LLMNR.d.ts +23 -0
  178. package/dist/headers/LLMNR.js +40 -0
  179. package/dist/headers/LPD.d.ts +31 -0
  180. package/dist/headers/LPD.js +159 -0
  181. package/dist/headers/MACsec.d.ts +34 -0
  182. package/dist/headers/MACsec.js +178 -0
  183. package/dist/headers/MDNS.d.ts +26 -0
  184. package/dist/headers/MDNS.js +45 -0
  185. package/dist/headers/MGCP.d.ts +30 -0
  186. package/dist/headers/MGCP.js +155 -0
  187. package/dist/headers/MMS.d.ts +29 -0
  188. package/dist/headers/MMS.js +243 -0
  189. package/dist/headers/MPLS.d.ts +31 -0
  190. package/dist/headers/MPLS.js +145 -0
  191. package/dist/headers/MQTT.d.ts +30 -0
  192. package/dist/headers/MQTT.js +173 -0
  193. package/dist/headers/MQTTSN.d.ts +34 -0
  194. package/dist/headers/MQTTSN.js +177 -0
  195. package/dist/headers/MarkerProtocol.d.ts +32 -0
  196. package/dist/headers/MarkerProtocol.js +153 -0
  197. package/dist/headers/Megaco.d.ts +32 -0
  198. package/dist/headers/Megaco.js +144 -0
  199. package/dist/headers/Memcached.d.ts +44 -0
  200. package/dist/headers/Memcached.js +285 -0
  201. package/dist/headers/ModbusTCP.d.ts +25 -0
  202. package/dist/headers/ModbusTCP.js +99 -0
  203. package/dist/headers/ModbusUDP.d.ts +26 -0
  204. package/dist/headers/ModbusUDP.js +100 -0
  205. package/dist/headers/MongoDB.d.ts +33 -0
  206. package/dist/headers/MongoDB.js +143 -0
  207. package/dist/headers/MySQL.d.ts +30 -0
  208. package/dist/headers/MySQL.js +114 -0
  209. package/dist/headers/NATS.d.ts +29 -0
  210. package/dist/headers/NATS.js +135 -0
  211. package/dist/headers/NBDS.d.ts +34 -0
  212. package/dist/headers/NBDS.js +176 -0
  213. package/dist/headers/NBNS.d.ts +34 -0
  214. package/dist/headers/NBNS.js +78 -0
  215. package/dist/headers/NBSS.d.ts +36 -0
  216. package/dist/headers/NBSS.js +137 -0
  217. package/dist/headers/NFS.d.ts +36 -0
  218. package/dist/headers/NFS.js +273 -0
  219. package/dist/headers/NHRP.d.ts +32 -0
  220. package/dist/headers/NHRP.js +154 -0
  221. package/dist/headers/NNTP.d.ts +35 -0
  222. package/dist/headers/NNTP.js +162 -0
  223. package/dist/headers/NTP.d.ts +18 -0
  224. package/dist/headers/NTP.js +73 -0
  225. package/dist/headers/NetFlowV5.d.ts +28 -0
  226. package/dist/headers/NetFlowV5.js +205 -0
  227. package/dist/headers/OLSR.d.ts +31 -0
  228. package/dist/headers/OLSR.js +213 -0
  229. package/dist/headers/OPCUA.d.ts +33 -0
  230. package/dist/headers/OPCUA.js +165 -0
  231. package/dist/headers/OPCUAPubSub.d.ts +33 -0
  232. package/dist/headers/OPCUAPubSub.js +144 -0
  233. package/dist/headers/OSPF.d.ts +31 -0
  234. package/dist/headers/OSPF.js +365 -0
  235. package/dist/headers/OmronFINS.d.ts +31 -0
  236. package/dist/headers/OmronFINS.js +90 -0
  237. package/dist/headers/OpenFlow.d.ts +30 -0
  238. package/dist/headers/OpenFlow.js +113 -0
  239. package/dist/headers/OpenVPN.d.ts +35 -0
  240. package/dist/headers/OpenVPN.js +214 -0
  241. package/dist/headers/PCWorx.d.ts +35 -0
  242. package/dist/headers/PCWorx.js +115 -0
  243. package/dist/headers/PIM.d.ts +27 -0
  244. package/dist/headers/PIM.js +129 -0
  245. package/dist/headers/POP3.d.ts +31 -0
  246. package/dist/headers/POP3.js +152 -0
  247. package/dist/headers/POWERLINK.d.ts +28 -0
  248. package/dist/headers/POWERLINK.js +116 -0
  249. package/dist/headers/PPPoEDiscovery.d.ts +29 -0
  250. package/dist/headers/PPPoEDiscovery.js +198 -0
  251. package/dist/headers/PPPoESession.d.ts +28 -0
  252. package/dist/headers/PPPoESession.js +125 -0
  253. package/dist/headers/PPTP.d.ts +30 -0
  254. package/dist/headers/PPTP.js +122 -0
  255. package/dist/headers/PROFINETRT.d.ts +28 -0
  256. package/dist/headers/PROFINETRT.js +74 -0
  257. package/dist/headers/PTP.d.ts +34 -0
  258. package/dist/headers/PTP.js +213 -0
  259. package/dist/headers/PostgreSQL.d.ts +40 -0
  260. package/dist/headers/PostgreSQL.js +236 -0
  261. package/dist/headers/QUIC.d.ts +34 -0
  262. package/dist/headers/QUIC.js +308 -0
  263. package/dist/headers/RADIUS.d.ts +24 -0
  264. package/dist/headers/RADIUS.js +138 -0
  265. package/dist/headers/RDP.d.ts +27 -0
  266. package/dist/headers/RDP.js +93 -0
  267. package/dist/headers/RFB.d.ts +39 -0
  268. package/dist/headers/RFB.js +151 -0
  269. package/dist/headers/RGoose.d.ts +72 -0
  270. package/dist/headers/RGoose.js +340 -0
  271. package/dist/headers/RIP.d.ts +29 -0
  272. package/dist/headers/RIP.js +133 -0
  273. package/dist/headers/RIPng.d.ts +26 -0
  274. package/dist/headers/RIPng.js +140 -0
  275. package/dist/headers/RMCP.d.ts +26 -0
  276. package/dist/headers/RMCP.js +155 -0
  277. package/dist/headers/RSVP.d.ts +31 -0
  278. package/dist/headers/RSVP.js +263 -0
  279. package/dist/headers/RTCP.d.ts +34 -0
  280. package/dist/headers/RTCP.js +217 -0
  281. package/dist/headers/RTP.d.ts +33 -0
  282. package/dist/headers/RTP.js +291 -0
  283. package/dist/headers/RTPS.d.ts +33 -0
  284. package/dist/headers/RTPS.js +182 -0
  285. package/dist/headers/RTSP.d.ts +36 -0
  286. package/dist/headers/RTSP.js +184 -0
  287. package/dist/headers/RawData.d.ts +17 -0
  288. package/dist/headers/RawData.js +43 -0
  289. package/dist/headers/Redis.d.ts +32 -0
  290. package/dist/headers/Redis.js +202 -0
  291. package/dist/headers/Rlogin.d.ts +42 -0
  292. package/dist/headers/Rlogin.js +139 -0
  293. package/dist/headers/Rsync.d.ts +28 -0
  294. package/dist/headers/Rsync.js +117 -0
  295. package/dist/headers/S7comm.d.ts +36 -0
  296. package/dist/headers/S7comm.js +244 -0
  297. package/dist/headers/SCTP.d.ts +35 -0
  298. package/dist/headers/SCTP.js +174 -0
  299. package/dist/headers/SFlow.d.ts +29 -0
  300. package/dist/headers/SFlow.js +242 -0
  301. package/dist/headers/SIP.d.ts +27 -0
  302. package/dist/headers/SIP.js +146 -0
  303. package/dist/headers/SLMP.d.ts +36 -0
  304. package/dist/headers/SLMP.js +154 -0
  305. package/dist/headers/SLP.d.ts +30 -0
  306. package/dist/headers/SLP.js +207 -0
  307. package/dist/headers/SLPv1.d.ts +32 -0
  308. package/dist/headers/SLPv1.js +138 -0
  309. package/dist/headers/SMB1.d.ts +37 -0
  310. package/dist/headers/SMB1.js +200 -0
  311. package/dist/headers/SMB2.d.ts +36 -0
  312. package/dist/headers/SMB2.js +203 -0
  313. package/dist/headers/SMPP.d.ts +33 -0
  314. package/dist/headers/SMPP.js +119 -0
  315. package/dist/headers/SMTP.d.ts +33 -0
  316. package/dist/headers/SMTP.js +157 -0
  317. package/dist/headers/SNAP.d.ts +22 -0
  318. package/dist/headers/SNAP.js +68 -0
  319. package/dist/headers/SNMP.d.ts +28 -0
  320. package/dist/headers/SNMP.js +302 -0
  321. package/dist/headers/SOCKS4.d.ts +42 -0
  322. package/dist/headers/SOCKS4.js +302 -0
  323. package/dist/headers/SOCKS5.d.ts +45 -0
  324. package/dist/headers/SOCKS5.js +223 -0
  325. package/dist/headers/SSDP.d.ts +27 -0
  326. package/dist/headers/SSDP.js +161 -0
  327. package/dist/headers/SSH.d.ts +44 -0
  328. package/dist/headers/SSH.js +274 -0
  329. package/dist/headers/STOMP.d.ts +48 -0
  330. package/dist/headers/STOMP.js +177 -0
  331. package/dist/headers/STP.d.ts +26 -0
  332. package/dist/headers/STP.js +150 -0
  333. package/dist/headers/STUN.d.ts +25 -0
  334. package/dist/headers/STUN.js +183 -0
  335. package/dist/headers/SercosIII.d.ts +43 -0
  336. package/dist/headers/SercosIII.js +199 -0
  337. package/dist/headers/Skinny.d.ts +32 -0
  338. package/dist/headers/Skinny.js +139 -0
  339. package/dist/headers/StatsD.d.ts +27 -0
  340. package/dist/headers/StatsD.js +134 -0
  341. package/dist/headers/SunRPC.d.ts +34 -0
  342. package/dist/headers/SunRPC.js +268 -0
  343. package/dist/headers/Syslog.d.ts +21 -0
  344. package/dist/headers/Syslog.js +91 -0
  345. package/dist/headers/TCP.d.ts +19 -0
  346. package/dist/headers/TCP.js +905 -0
  347. package/dist/headers/TFTP.d.ts +28 -0
  348. package/dist/headers/TFTP.js +224 -0
  349. package/dist/headers/TLS_Alert.d.ts +24 -0
  350. package/dist/headers/TLS_Alert.js +639 -0
  351. package/dist/headers/TLS_ApplicationData.d.ts +24 -0
  352. package/dist/headers/TLS_ApplicationData.js +170 -0
  353. package/dist/headers/TLS_ChangeCipherSpec.d.ts +23 -0
  354. package/dist/headers/TLS_ChangeCipherSpec.js +168 -0
  355. package/dist/headers/TLS_Handshake.d.ts +65 -0
  356. package/dist/headers/TLS_Handshake.js +860 -0
  357. package/dist/headers/TLS_Heartbeat.d.ts +27 -0
  358. package/dist/headers/TLS_Heartbeat.js +247 -0
  359. package/dist/headers/TPKT.d.ts +26 -0
  360. package/dist/headers/TPKT.js +99 -0
  361. package/dist/headers/TacacsPlus.d.ts +27 -0
  362. package/dist/headers/TacacsPlus.js +133 -0
  363. package/dist/headers/Telnet.d.ts +40 -0
  364. package/dist/headers/Telnet.js +193 -0
  365. package/dist/headers/Teredo.d.ts +40 -0
  366. package/dist/headers/Teredo.js +251 -0
  367. package/dist/headers/TimeProtocol.d.ts +25 -0
  368. package/dist/headers/TimeProtocol.js +53 -0
  369. package/dist/headers/UDP.d.ts +19 -0
  370. package/dist/headers/UDP.js +171 -0
  371. package/dist/headers/VLAN_802dot1Q.d.ts +24 -0
  372. package/dist/headers/VLAN_802dot1Q.js +96 -0
  373. package/dist/headers/VRRP.d.ts +26 -0
  374. package/dist/headers/VRRP.js +309 -0
  375. package/dist/headers/VXLAN.d.ts +24 -0
  376. package/dist/headers/VXLAN.js +75 -0
  377. package/dist/headers/WCCP.d.ts +29 -0
  378. package/dist/headers/WCCP.js +117 -0
  379. package/dist/headers/WHOIS.d.ts +37 -0
  380. package/dist/headers/WHOIS.js +126 -0
  381. package/dist/headers/WSDiscovery.d.ts +29 -0
  382. package/dist/headers/WSDiscovery.js +118 -0
  383. package/dist/headers/WakeOnLAN.d.ts +30 -0
  384. package/dist/headers/WakeOnLAN.js +126 -0
  385. package/dist/headers/WebSocket.d.ts +26 -0
  386. package/dist/headers/WebSocket.js +173 -0
  387. package/dist/headers/WireGuard.d.ts +38 -0
  388. package/dist/headers/WireGuard.js +216 -0
  389. package/dist/headers/XMPP.d.ts +37 -0
  390. package/dist/headers/XMPP.js +149 -0
  391. package/dist/headers/Zabbix.d.ts +35 -0
  392. package/dist/headers/Zabbix.js +153 -0
  393. package/dist/headers/cms/AcsiPdu.d.ts +45 -0
  394. package/dist/headers/cms/AcsiPdu.js +112 -0
  395. package/dist/headers/cms/PerDecoder.d.ts +68 -0
  396. package/dist/headers/cms/PerDecoder.js +211 -0
  397. package/dist/headers/cms/PerReader.d.ts +64 -0
  398. package/dist/headers/cms/PerReader.js +155 -0
  399. package/dist/helper/BufferToHex.d.ts +5 -0
  400. package/dist/helper/BufferToHex.js +10 -0
  401. package/dist/helper/BufferToIP.d.ts +12 -0
  402. package/dist/helper/BufferToIP.js +23 -0
  403. package/dist/helper/BufferToNumber.d.ts +18 -0
  404. package/dist/helper/BufferToNumber.js +47 -0
  405. package/dist/helper/HexToBuffer.d.ts +7 -0
  406. package/dist/helper/HexToBuffer.js +27 -0
  407. package/dist/helper/HexToNumber.d.ts +18 -0
  408. package/dist/helper/HexToNumber.js +48 -0
  409. package/dist/helper/IPToBuffer.d.ts +12 -0
  410. package/dist/helper/IPToBuffer.js +34 -0
  411. package/dist/helper/NumberToBERBuffer.d.ts +18 -0
  412. package/dist/helper/NumberToBERBuffer.js +31 -0
  413. package/dist/helper/NumberToBERHex.d.ts +18 -0
  414. package/dist/helper/NumberToBERHex.js +52 -0
  415. package/dist/helper/NumberToBuffer.d.ts +18 -0
  416. package/dist/helper/NumberToBuffer.js +38 -0
  417. package/dist/helper/NumberToHex.d.ts +18 -0
  418. package/dist/helper/NumberToHex.js +35 -0
  419. package/dist/index.d.ts +52 -0
  420. package/dist/index.js +113 -0
  421. package/dist/lib/FlexibleObject.d.ts +27 -0
  422. package/dist/lib/FlexibleObject.js +113 -0
  423. package/dist/lib/GetBERIntegerLengthFromBuffer.d.ts +6 -0
  424. package/dist/lib/GetBERIntegerLengthFromBuffer.js +16 -0
  425. package/dist/lib/ProcessPacketPostHandlers.d.ts +13 -0
  426. package/dist/lib/ProcessPacketPostHandlers.js +53 -0
  427. package/dist/lib/SortPostHandlers.d.ts +7 -0
  428. package/dist/lib/SortPostHandlers.js +11 -0
  429. package/dist/lib/StringContentEncodingEnum.d.ts +10 -0
  430. package/dist/lib/StringContentEncodingEnum.js +14 -0
  431. package/dist/schema/ProtocolFieldJSONSchema.d.ts +35 -0
  432. package/dist/schema/ProtocolFieldJSONSchema.js +2 -0
  433. package/dist/schema/ProtocolFieldJSONSchemaDefinition.d.ts +2 -0
  434. package/dist/schema/ProtocolFieldJSONSchemaDefinition.js +2 -0
  435. package/dist/schema/ProtocolJSONSchema.d.ts +32 -0
  436. package/dist/schema/ProtocolJSONSchema.js +2 -0
  437. package/dist/types/CodecData.d.ts +7 -0
  438. package/dist/types/CodecData.js +2 -0
  439. package/dist/types/CodecDecodeResult.d.ts +10 -0
  440. package/dist/types/CodecDecodeResult.js +2 -0
  441. package/dist/types/CodecEncodeInput.d.ts +2 -0
  442. package/dist/types/CodecEncodeInput.js +2 -0
  443. package/dist/types/CodecEncodeResult.d.ts +5 -0
  444. package/dist/types/CodecEncodeResult.js +2 -0
  445. package/dist/types/CodecErrorInfo.d.ts +5 -0
  446. package/dist/types/CodecErrorInfo.js +2 -0
  447. package/dist/types/CodecModule.d.ts +2 -0
  448. package/dist/types/CodecModule.js +2 -0
  449. package/dist/types/CodecModuleConstructor.d.ts +2 -0
  450. package/dist/types/CodecModuleConstructor.js +2 -0
  451. package/dist/types/CodecSchema.d.ts +6 -0
  452. package/dist/types/CodecSchema.js +2 -0
  453. package/dist/types/DemuxProducer.d.ts +23 -0
  454. package/dist/types/DemuxProducer.js +2 -0
  455. package/dist/types/Dissection.d.ts +23 -0
  456. package/dist/types/Dissection.js +2 -0
  457. package/dist/types/HeaderTreeNode.d.ts +4 -0
  458. package/dist/types/HeaderTreeNode.js +2 -0
  459. package/dist/types/LayerGraph.d.ts +32 -0
  460. package/dist/types/LayerGraph.js +2 -0
  461. package/dist/types/PostHandlerItem.d.ts +4 -0
  462. package/dist/types/PostHandlerItem.js +2 -0
  463. package/package.json +141 -0
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CAPWAP = 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 StringContentEncodingEnum_1 = require("../lib/StringContentEncodingEnum");
8
+ /**
9
+ * CAPWAP — Control And Provisioning of Wireless Access Points (RFC 5415), UDP port 5246 (control) and
10
+ * 5247 (data). Every CAPWAP message begins with a fixed 8-byte header whose layout is a preamble octet
11
+ * followed by tightly bit-packed fields:
12
+ *
13
+ * - Preamble (octet 0): Version (high nibble) + Type (low nibble). Type 0 = a CAPWAP header follows,
14
+ * Type 1 = the payload is a DTLS record (the header below is then not present).
15
+ * - Octets 1-3 (24 bits): HLEN (5 bits, the whole CAPWAP header length in units of 4 octets),
16
+ * RID (5 bits, Radio ID), WBID (5 bits, Wireless Binding ID), then the flag bits T, F, L, W, M, K
17
+ * (1 bit each) and a 3-bit reserved Flags remainder.
18
+ * - Octets 4-5: Fragment ID (16 bits).
19
+ * - Octets 6-7: Fragment Offset (13 bits) + a 3-bit reserved field.
20
+ *
21
+ * When the M/W flags are set the header carries optional Radio MAC Address / Wireless Specific
22
+ * Information fields; HLEN delimits the whole header (HLEN × 4 octets), after which the payload begins
23
+ * (the control-plane Control Header + message elements, or the tunneled 802.3/802.11 data frame).
24
+ *
25
+ * This is the minimal, byte-faithful slice: the preamble and every bit-packed field are modelled so an
26
+ * editor can see/round-trip them, the optional per-flag header fields are kept verbatim as
27
+ * `headerRemainder` hex (bounded by HLEN × 4), and everything after the header is kept verbatim as
28
+ * `payload` hex (bounded by the UDP datagram so a retained trailer is not absorbed). Sub-decoding the
29
+ * Control Header / message elements or the tunneled frame is deferred, so CAPWAP is effectively a leaf.
30
+ * HLEN is honored verbatim when supplied (a crafted header may lie) else derived from the header bytes;
31
+ * a well-formed message round-trips byte-for-byte.
32
+ */
33
+ class CAPWAP extends BaseHeader_1.BaseHeader {
34
+ constructor() {
35
+ super(...arguments);
36
+ this.id = 'capwap';
37
+ this.name = 'Control And Provisioning of Wireless Access Points';
38
+ this.nickname = 'CAPWAP';
39
+ //Well-known UDP ports 5246 (control) and 5247 (data). No content magic, so selection is
40
+ //port-bucketed only (no heuristicFallback).
41
+ this.matchKeys = ['udpport:5246', 'udpport:5247'];
42
+ //A leaf header — the Control Header / message elements and the tunneled frame are kept verbatim.
43
+ this.demuxProducers = [];
44
+ }
45
+ static #schemaCache;
46
+ get SCHEMA() {
47
+ return (CAPWAP.#schemaCache ??= CAPWAP.#buildSchema());
48
+ }
49
+ /** The payload length bounded by the UDP datagram (so a retained trailer/padding is not absorbed). */
50
+ #payloadBound() {
51
+ let available = this.packet.length - this.startPos;
52
+ if (this.prevCodecModule && this.prevCodecModule.id === 'udp') {
53
+ const udpLength = this.prevCodecModule.instance.length.getValue(0);
54
+ if (udpLength >= 8 && udpLength - 8 < available)
55
+ available = udpLength - 8;
56
+ }
57
+ return available < 0 ? 0 : available;
58
+ }
59
+ /** A single flag bit within the 24-bit field packed across octets 1-3 (bit 0 = MSB of octet 1). */
60
+ static #flagBit(name, bitOffset, label) {
61
+ return {
62
+ type: 'boolean',
63
+ label: label,
64
+ decode: function () {
65
+ this.instance.flags[name].setValue(!!this.readBits(1, 3, bitOffset, 1));
66
+ },
67
+ encode: function () {
68
+ const value = !!this.instance.flags[name].getValue();
69
+ this.instance.flags[name].setValue(value);
70
+ this.writeBits(1, 3, bitOffset, 1, value ? 1 : 0);
71
+ }
72
+ };
73
+ }
74
+ static #buildSchema() {
75
+ return {
76
+ type: 'object',
77
+ summary: 'CAPWAP v${version} type=${type} hlen=${hlen}',
78
+ properties: {
79
+ //Preamble (octet 0): Version (high nibble) + Type (low nibble, 0 = CAPWAP header, 1 = DTLS).
80
+ version: {
81
+ type: 'integer',
82
+ label: 'Version',
83
+ minimum: 0,
84
+ maximum: 15,
85
+ decode: function () {
86
+ this.instance.version.setValue(this.readBits(0, 1, 0, 4));
87
+ },
88
+ encode: function () {
89
+ this.writeBits(0, 1, 0, 4, this.instance.version.getValue(0));
90
+ }
91
+ },
92
+ type: {
93
+ type: 'integer',
94
+ label: 'Type',
95
+ minimum: 0,
96
+ maximum: 15,
97
+ decode: function () {
98
+ this.instance.type.setValue(this.readBits(0, 1, 4, 4));
99
+ },
100
+ encode: function () {
101
+ this.writeBits(0, 1, 4, 4, this.instance.type.getValue(0));
102
+ }
103
+ },
104
+ //HLEN (octet 1-3 bits 0-4): the whole CAPWAP header length in units of 4 octets. Honored
105
+ //verbatim when supplied (a crafted header may lie); else derived from the 8-byte fixed
106
+ //header plus the verbatim optional (headerRemainder) bytes. HLEN × 4 delimits the header.
107
+ hlen: {
108
+ type: 'integer',
109
+ label: 'HLEN',
110
+ minimum: 0,
111
+ maximum: 31,
112
+ decode: function () {
113
+ this.instance.hlen.setValue(this.readBits(1, 3, 0, 5));
114
+ },
115
+ encode: function () {
116
+ const provided = this.instance.hlen.getValue();
117
+ let value = (provided !== undefined && provided !== null)
118
+ ? provided
119
+ : Math.ceil((8 + (0, HexToBuffer_1.HexToBuffer)(this.instance.headerRemainder.getValue('')).length) / 4);
120
+ if (value > 31) {
121
+ this.recordError(this.instance.hlen.getPath(), 'Maximum value is 31');
122
+ value = 31;
123
+ }
124
+ if (value < 0) {
125
+ this.recordError(this.instance.hlen.getPath(), 'Minimum value is 0');
126
+ value = 0;
127
+ }
128
+ this.instance.hlen.setValue(value);
129
+ this.writeBits(1, 3, 0, 5, value);
130
+ }
131
+ },
132
+ //RID (octet 1-3 bits 5-9): Radio ID.
133
+ rid: {
134
+ type: 'integer',
135
+ label: 'RID',
136
+ minimum: 0,
137
+ maximum: 31,
138
+ decode: function () {
139
+ this.instance.rid.setValue(this.readBits(1, 3, 5, 5));
140
+ },
141
+ encode: function () {
142
+ this.writeBits(1, 3, 5, 5, this.instance.rid.getValue(0));
143
+ }
144
+ },
145
+ //WBID (octet 1-3 bits 10-14): Wireless Binding ID (1 = IEEE 802.11).
146
+ wbid: {
147
+ type: 'integer',
148
+ label: 'WBID',
149
+ minimum: 0,
150
+ maximum: 31,
151
+ decode: function () {
152
+ this.instance.wbid.setValue(this.readBits(1, 3, 10, 5));
153
+ },
154
+ encode: function () {
155
+ this.writeBits(1, 3, 10, 5, this.instance.wbid.getValue(0));
156
+ }
157
+ },
158
+ //Flag bits (octet 1-3 bits 15-20): T (payload type), F (fragment), L (last fragment),
159
+ //W (Wireless Specific Info present), M (Radio MAC present), K (keep-alive).
160
+ flags: {
161
+ type: 'object',
162
+ label: 'Flags',
163
+ properties: {
164
+ t: this.#flagBit('t', 15, 'T (Payload Type)'),
165
+ f: this.#flagBit('f', 16, 'F (Fragment)'),
166
+ l: this.#flagBit('l', 17, 'L (Last Fragment)'),
167
+ w: this.#flagBit('w', 18, 'W (Wireless Specific Info)'),
168
+ m: this.#flagBit('m', 19, 'M (Radio MAC Present)'),
169
+ k: this.#flagBit('k', 20, 'K (Keep-Alive)')
170
+ }
171
+ },
172
+ //Flags reserved remainder (octet 1-3 bits 21-23). RFC 5415 requires 0, kept verbatim.
173
+ flagsReserved: {
174
+ type: 'integer',
175
+ label: 'Flags Reserved',
176
+ minimum: 0,
177
+ maximum: 7,
178
+ hidden: true,
179
+ decode: function () {
180
+ this.instance.flagsReserved.setValue(this.readBits(1, 3, 21, 3));
181
+ },
182
+ encode: function () {
183
+ this.writeBits(1, 3, 21, 3, this.instance.flagsReserved.getValue(0));
184
+ }
185
+ },
186
+ //Fragment ID (octet 4-5): identifies fragments of a single CAPWAP message.
187
+ fragmentId: this.fieldUInt('fragmentId', 4, 2, 'Fragment ID'),
188
+ //Fragment Offset (octet 6-7 bits 0-12): the fragment's offset in units of 8 octets.
189
+ fragmentOffset: {
190
+ type: 'integer',
191
+ label: 'Fragment Offset',
192
+ minimum: 0,
193
+ maximum: 8191,
194
+ decode: function () {
195
+ this.instance.fragmentOffset.setValue(this.readBits(6, 2, 0, 13));
196
+ },
197
+ encode: function () {
198
+ this.writeBits(6, 2, 0, 13, this.instance.fragmentOffset.getValue(0));
199
+ }
200
+ },
201
+ //Reserved (octet 6-7 bits 13-15). RFC 5415 requires 0, kept verbatim.
202
+ reserved: {
203
+ type: 'integer',
204
+ label: 'Reserved',
205
+ minimum: 0,
206
+ maximum: 7,
207
+ hidden: true,
208
+ decode: function () {
209
+ this.instance.reserved.setValue(this.readBits(6, 2, 13, 3));
210
+ },
211
+ encode: function () {
212
+ this.writeBits(6, 2, 13, 3, this.instance.reserved.getValue(0));
213
+ }
214
+ },
215
+ //The optional per-flag header fields (Radio MAC Address / Wireless Specific Information),
216
+ //kept verbatim and bounded by HLEN × 4. Empty for the minimal 8-byte header (HLEN = 2).
217
+ headerRemainder: {
218
+ type: 'string',
219
+ label: 'Header Remainder',
220
+ contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX,
221
+ decode: function () {
222
+ const hlen = this.instance.hlen.getValue(0);
223
+ const available = this.packet.length - this.startPos;
224
+ let headerEnd = hlen * 4;
225
+ if (headerEnd < 8)
226
+ headerEnd = 8;
227
+ if (headerEnd > available)
228
+ headerEnd = available;
229
+ this.instance.headerRemainder.setValue(headerEnd > 8 ? (0, BufferToHex_1.BufferToHex)(this.readBytes(8, headerEnd - 8)) : '');
230
+ },
231
+ encode: function () {
232
+ const headerRemainder = this.instance.headerRemainder.getValue('');
233
+ if (headerRemainder)
234
+ this.writeBytes(8, (0, HexToBuffer_1.HexToBuffer)(headerRemainder));
235
+ }
236
+ },
237
+ //Everything after the CAPWAP header (Control Header + message elements, or the tunneled
238
+ //802.3/802.11 data frame), kept verbatim. Bounded by the UDP datagram so a retained
239
+ //trailer is not absorbed; sub-decoding is deferred (CAPWAP is effectively a leaf here).
240
+ payload: {
241
+ type: 'string',
242
+ label: 'Payload',
243
+ contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX,
244
+ decode: function () {
245
+ const hlen = this.instance.hlen.getValue(0);
246
+ let headerEnd = hlen * 4;
247
+ if (headerEnd < 8)
248
+ headerEnd = 8;
249
+ const end = this.#payloadBound();
250
+ if (headerEnd > end)
251
+ headerEnd = end;
252
+ this.instance.payload.setValue(end > headerEnd ? (0, BufferToHex_1.BufferToHex)(this.readBytes(headerEnd, end - headerEnd)) : '');
253
+ },
254
+ encode: function () {
255
+ const hlen = this.instance.hlen.getValue(0);
256
+ let headerEnd = hlen * 4;
257
+ if (headerEnd < 8)
258
+ headerEnd = 8;
259
+ const payload = this.instance.payload.getValue('');
260
+ if (payload)
261
+ this.writeBytes(headerEnd, (0, HexToBuffer_1.HexToBuffer)(payload));
262
+ }
263
+ }
264
+ }
265
+ };
266
+ }
267
+ match() {
268
+ //Require the fixed 8-byte header within the UDP payload (not just the captured frame — a padded
269
+ //sub-8-byte datagram on a CAPWAP port would otherwise over-read the trailer into the header).
270
+ if (!this.prevCodecModule || this.prevCodecModule.id !== 'udp')
271
+ return false;
272
+ return this.#payloadBound() >= 8;
273
+ }
274
+ }
275
+ exports.CAPWAP = CAPWAP;
@@ -0,0 +1,25 @@
1
+ import { BaseHeader } from '../abstracts/BaseHeader';
2
+ import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
3
+ import { DemuxProducer } from '../types/DemuxProducer';
4
+ /**
5
+ * CDP — Cisco Discovery Protocol, carried in an 802.3 frame over LLC/SNAP with OUI 0x00000C and PID
6
+ * 0x2000. A 4-byte header — Version (1), Time-to-Live (1) and a 2-byte Checksum — is followed by a
7
+ * sequence of TLVs, each a 2-byte Type + 2-byte Length (the whole TLV octet count including this 4-byte
8
+ * TLV header) + value. Common types: 0x0001 Device ID, 0x0002 Addresses, 0x0003 Port ID, 0x0004
9
+ * Capabilities, 0x0005 Software Version, 0x0006 Platform.
10
+ *
11
+ * The TLV values are kept verbatim as hex (device names, address lists and capability bitmaps need no
12
+ * form structure), the Checksum is honored verbatim (never recomputed), and the TLV walk is bounded by
13
+ * the captured bytes so a corrupt Length can't run past the frame. A well-formed CDP frame round-trips
14
+ * byte-for-byte.
15
+ */
16
+ export declare class CDP extends BaseHeader {
17
+ #private;
18
+ get SCHEMA(): ProtocolJSONSchema;
19
+ readonly id: string;
20
+ readonly name: string;
21
+ readonly nickname: string;
22
+ readonly matchKeys: string[];
23
+ match(): boolean;
24
+ readonly demuxProducers: DemuxProducer[];
25
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDP = 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 StringContentEncodingEnum_1 = require("../lib/StringContentEncodingEnum");
10
+ /**
11
+ * CDP — Cisco Discovery Protocol, carried in an 802.3 frame over LLC/SNAP with OUI 0x00000C and PID
12
+ * 0x2000. A 4-byte header — Version (1), Time-to-Live (1) and a 2-byte Checksum — is followed by a
13
+ * sequence of TLVs, each a 2-byte Type + 2-byte Length (the whole TLV octet count including this 4-byte
14
+ * TLV header) + value. Common types: 0x0001 Device ID, 0x0002 Addresses, 0x0003 Port ID, 0x0004
15
+ * Capabilities, 0x0005 Software Version, 0x0006 Platform.
16
+ *
17
+ * The TLV values are kept verbatim as hex (device names, address lists and capability bitmaps need no
18
+ * form structure), the Checksum is honored verbatim (never recomputed), and the TLV walk is bounded by
19
+ * the captured bytes so a corrupt Length can't run past the frame. A well-formed CDP frame round-trips
20
+ * byte-for-byte.
21
+ */
22
+ class CDP extends BaseHeader_1.BaseHeader {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.id = 'cdp';
26
+ this.name = 'Cisco Discovery Protocol';
27
+ this.nickname = 'CDP';
28
+ this.matchKeys = ['snapoui:00000c2000'];
29
+ //A leaf — CDP TLVs carry no encapsulated protocol.
30
+ this.demuxProducers = [];
31
+ }
32
+ static #schemaCache;
33
+ get SCHEMA() {
34
+ return (CDP.#schemaCache ??= CDP.#buildSchema());
35
+ }
36
+ static #buildSchema() {
37
+ return {
38
+ type: 'object',
39
+ summary: 'CDP v${version} ttl=${ttl}',
40
+ properties: {
41
+ version: this.fieldUInt('version', 0, 1, 'Version'),
42
+ ttl: this.fieldUInt('ttl', 1, 1, 'TTL'),
43
+ //Honored verbatim — the ones-complement checksum is never recomputed, so a captured frame
44
+ //round-trips byte-for-byte.
45
+ checksum: this.fieldHex('checksum', 2, 2, 'Checksum'),
46
+ tlvs: {
47
+ type: 'array',
48
+ label: 'TLVs',
49
+ items: {
50
+ type: 'object',
51
+ properties: {
52
+ type: { type: 'integer', label: 'Type', minimum: 0, maximum: 65535 },
53
+ length: { type: 'integer', label: 'Length', minimum: 0, maximum: 65535 },
54
+ value: { type: 'string', label: 'Value', contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX }
55
+ }
56
+ },
57
+ decode: function () {
58
+ const available = this.packet.length - this.startPos;
59
+ const tlvs = [];
60
+ let offset = 4;
61
+ while (offset + 4 <= available) {
62
+ const type = (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(offset, 2, true));
63
+ const length = (0, BufferToNumber_1.BufferToUInt16)(this.readBytes(offset + 2, 2, true));
64
+ //A Length below the 4-byte TLV header is malformed — record and stop.
65
+ if (length < 4) {
66
+ this.recordError(this.instance.tlvs.getPath(), `Invalid TLV length ${length}`);
67
+ break;
68
+ }
69
+ let end = offset + length;
70
+ if (end > available)
71
+ end = available;
72
+ const value = end > offset + 4 ? (0, BufferToHex_1.BufferToHex)(this.readBytes(offset + 4, end - (offset + 4))) : '';
73
+ tlvs.push({ type: type, length: length, value: value });
74
+ offset += length;
75
+ }
76
+ //Mark the whole consumed TLV region so an empty-value trailing TLV is not re-decoded
77
+ //as trailing RawData and duplicated on encode (the headers above are dryRun peeks).
78
+ const consumedEnd = offset < available ? offset : available;
79
+ if (consumedEnd > 4)
80
+ this.readBytes(4, consumedEnd - 4);
81
+ this.instance.tlvs.setValue(tlvs);
82
+ },
83
+ encode: function () {
84
+ const tlvs = this.instance.tlvs.getValue();
85
+ if (!Array.isArray(tlvs))
86
+ return;
87
+ let offset = 4;
88
+ for (const tlv of tlvs) {
89
+ const valueBuffer = (0, HexToBuffer_1.HexToBuffer)(tlv && tlv.value ? String(tlv.value) : '');
90
+ const providedLength = Number(tlv && tlv.length);
91
+ const lengthValue = (Number.isFinite(providedLength) && providedLength > 0)
92
+ ? providedLength
93
+ : 4 + valueBuffer.length;
94
+ const type = Number(tlv && tlv.type) || 0;
95
+ this.writeBytes(offset, (0, NumberToBuffer_1.UInt16ToBuffer)(type & 0xffff));
96
+ this.writeBytes(offset + 2, (0, NumberToBuffer_1.UInt16ToBuffer)(lengthValue > 65535 ? 65535 : lengthValue));
97
+ if (valueBuffer.length)
98
+ this.writeBytes(offset + 4, valueBuffer);
99
+ offset += 4 + valueBuffer.length;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ };
105
+ }
106
+ match() {
107
+ //A SNAP child under Cisco OUI 0x00000C + PID 0x2000. Re-verify the OUI/PID off the SNAP parent
108
+ //rather than trusting the key alone, and require the 4-byte CDP header.
109
+ const prev = this.prevCodecModule;
110
+ if (!prev || prev.id !== 'snap')
111
+ return false;
112
+ if (prev.instance.oui.getValue('') !== '00000c' || prev.instance.etherType.getValue('') !== '2000')
113
+ return false;
114
+ return this.packet.length - this.startPos >= 4;
115
+ }
116
+ }
117
+ exports.CDP = CDP;
@@ -0,0 +1,33 @@
1
+ import { BaseHeader } from '../abstracts/BaseHeader';
2
+ import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
3
+ import { DemuxProducer } from '../types/DemuxProducer';
4
+ /**
5
+ * CMS — China smart-substation communication (DL/T 2811-2024, "变电站二次系统通信报文规范"), the
6
+ * State-Grid replacement for IEC 61850 MMS that maps ACSI directly onto TCP (port 8102), dropping the
7
+ * OSI upper layers. Per DL/T 2811 §6.1, an Application Protocol Data Unit (APDU) is an Application
8
+ * Protocol Control Header (APCH) followed by an Application Service Data Unit (ASDU):
9
+ *
10
+ * APCH (4 bytes): Control Code CC — Next(bit8) + Resp(bit7) + Err(bit6) + bak(bit5) + a 4-bit Protocol
11
+ * type PI (low nibble, = 0x01); Service Code SC (1 byte, §6.1.2 Table 1: 1 Associate,
12
+ * 2 Abort, 3 Release, 48 GetDataValues, 83 GetAllDataValues, 154 AssociateNegotiate,
13
+ * 155 GetAllDataDefinition, …); Frame Length FL (2 bytes, little-endian, the APDU
14
+ * length excluding the APCH).
15
+ * ASDU (FL bytes): Service Request Id ReqID (2 bytes, little-endian, §6.2 — 1..65535, 0 for Report)
16
+ * + the service data area (encoded per the SC, kept verbatim here).
17
+ *
18
+ * An empty frame (§6.3) has FL=0 (APCH only) or FL=2 (APCH+ReqID). A large ASDU is framed (§6.5) with
19
+ * the Next bit set. A CMS PDU can also exceed one TCP segment; this single-packet stateless codec
20
+ * structures the APCH + the ASDU bytes present in the packet, leaving TCP-stream reassembly to a higher
21
+ * layer (mid-PDU continuation segments carry no APCH — their first byte's low nibble is not the PI 0x01
22
+ * — so they fall to raw). A single frame round-trips byte-for-byte.
23
+ */
24
+ export declare class CMS 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
+ }