@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,4 @@
1
+ export declare class CodecSchemaValidateError extends Error implements NodeJS.ErrnoException {
2
+ errno: number;
3
+ code: string;
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodecSchemaValidateError = void 0;
4
+ class CodecSchemaValidateError extends Error {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.errno = 2001;
8
+ this.code = 'E_CODEC_SCHEMA_VALIDATE';
9
+ }
10
+ }
11
+ exports.CodecSchemaValidateError = CodecSchemaValidateError;
@@ -0,0 +1,33 @@
1
+ import { BaseHeader } from '../abstracts/BaseHeader';
2
+ import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
3
+ import { DemuxProducer } from '../types/DemuxProducer';
4
+ /**
5
+ * Beckhoff ADS/AMS (Automation Device Specification / Automation Message Specification, TwinCAT), TCP
6
+ * port 48898 (0xBF02). An ADS/AMS packet begins with a 6-byte AMS/TCP header — a 2-byte Reserved field
7
+ * (0 for an AMS command) and a 4-byte Length (the count of the bytes that follow the AMS/TCP header, i.e.
8
+ * the 32-byte AMS header plus its data) — followed by the 32-byte AMS header: the target AmsNetId (6) and
9
+ * target AmsPort (2), the source AmsNetId (6) and source AmsPort (2), the Command Id (2), State Flags (2),
10
+ * Data Length (4), Error Code (4) and Invoke Id (4), then `Data Length` bytes of command-specific data.
11
+ *
12
+ * ⚠️ Every multi-byte field is LITTLE-ENDIAN (ADS/AMS on-wire byte order). There is no little-endian
13
+ * helper in this codebase, so the uint16 / uint32 fields are read and written byte-by-byte in their
14
+ * closures. The 6-byte AmsNetId fields (`a.b.c.d.e.f`) are kept verbatim as hex.
15
+ *
16
+ * The command-specific data is command- and direction-dependent (a Read request carries index group /
17
+ * index offset / length; a Read response carries a result + data; only the paired transaction reveals
18
+ * which), which is cross-packet state, so this single-packet codec keeps it verbatim as `data` hex
19
+ * (byte-perfect) and does not sub-decode it. The AMS/TCP Length is auto-computed from the AMS header +
20
+ * data on encode when not supplied, else honored verbatim (a crafted packet may lie); the data is bounded
21
+ * by Data Length so a pipelined / trailing packet is left to the codec's recursion / RawData. A
22
+ * well-formed packet round-trips byte-for-byte.
23
+ */
24
+ export declare class ADSAMS 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
+ }
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADSAMS = 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
+ * Beckhoff ADS/AMS (Automation Device Specification / Automation Message Specification, TwinCAT), TCP
10
+ * port 48898 (0xBF02). An ADS/AMS packet begins with a 6-byte AMS/TCP header — a 2-byte Reserved field
11
+ * (0 for an AMS command) and a 4-byte Length (the count of the bytes that follow the AMS/TCP header, i.e.
12
+ * the 32-byte AMS header plus its data) — followed by the 32-byte AMS header: the target AmsNetId (6) and
13
+ * target AmsPort (2), the source AmsNetId (6) and source AmsPort (2), the Command Id (2), State Flags (2),
14
+ * Data Length (4), Error Code (4) and Invoke Id (4), then `Data Length` bytes of command-specific data.
15
+ *
16
+ * ⚠️ Every multi-byte field is LITTLE-ENDIAN (ADS/AMS on-wire byte order). There is no little-endian
17
+ * helper in this codebase, so the uint16 / uint32 fields are read and written byte-by-byte in their
18
+ * closures. The 6-byte AmsNetId fields (`a.b.c.d.e.f`) are kept verbatim as hex.
19
+ *
20
+ * The command-specific data is command- and direction-dependent (a Read request carries index group /
21
+ * index offset / length; a Read response carries a result + data; only the paired transaction reveals
22
+ * which), which is cross-packet state, so this single-packet codec keeps it verbatim as `data` hex
23
+ * (byte-perfect) and does not sub-decode it. The AMS/TCP Length is auto-computed from the AMS header +
24
+ * data on encode when not supplied, else honored verbatim (a crafted packet may lie); the data is bounded
25
+ * by Data Length so a pipelined / trailing packet is left to the codec's recursion / RawData. A
26
+ * well-formed packet round-trips byte-for-byte.
27
+ */
28
+ class ADSAMS extends BaseHeader_1.BaseHeader {
29
+ constructor() {
30
+ super(...arguments);
31
+ this.id = 'adsams';
32
+ this.name = 'Beckhoff ADS/AMS';
33
+ this.nickname = 'ADS/AMS';
34
+ this.matchKeys = ['tcpport:48898'];
35
+ //A leaf header — the command data requires command- and direction-dependent, cross-packet parsing.
36
+ this.demuxProducers = [];
37
+ }
38
+ static #schemaCache;
39
+ get SCHEMA() {
40
+ return (ADSAMS.#schemaCache ??= ADSAMS.#buildSchema());
41
+ }
42
+ /** A little-endian unsigned 16-bit field of 2 octets at `offset`. */
43
+ static #fieldUInt16LE(name, offset, label) {
44
+ return {
45
+ type: 'integer',
46
+ label: label,
47
+ minimum: 0,
48
+ maximum: 65535,
49
+ decode: function () {
50
+ const b = this.readBytes(offset, 2);
51
+ this.instance[name].setValue(b[0] | (b[1] << 8));
52
+ },
53
+ encode: function () {
54
+ const node = this.instance[name];
55
+ let value = node.getValue(0, (nodePath) => this.recordError(nodePath, 'Not Found'));
56
+ if (value > 65535) {
57
+ this.recordError(node.getPath(), 'Maximum value is 65535');
58
+ value = 65535;
59
+ }
60
+ if (value < 0) {
61
+ this.recordError(node.getPath(), 'Minimum value is 0');
62
+ value = 0;
63
+ }
64
+ node.setValue(value);
65
+ this.writeBytes(offset, Buffer.from([value & 0xff, (value >> 8) & 0xff]));
66
+ }
67
+ };
68
+ }
69
+ /** A little-endian unsigned 32-bit field of 4 octets at `offset`. */
70
+ static #fieldUInt32LE(name, offset, label) {
71
+ return {
72
+ type: 'integer',
73
+ label: label,
74
+ minimum: 0,
75
+ maximum: 4294967295,
76
+ decode: function () {
77
+ const b = this.readBytes(offset, 4);
78
+ this.instance[name].setValue((b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0);
79
+ },
80
+ encode: function () {
81
+ const node = this.instance[name];
82
+ let value = node.getValue(0, (nodePath) => this.recordError(nodePath, 'Not Found'));
83
+ if (value > 4294967295) {
84
+ this.recordError(node.getPath(), 'Maximum value is 4294967295');
85
+ value = 4294967295;
86
+ }
87
+ if (value < 0) {
88
+ this.recordError(node.getPath(), 'Minimum value is 0');
89
+ value = 0;
90
+ }
91
+ node.setValue(value);
92
+ this.writeBytes(offset, Buffer.from([value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >>> 24) & 0xff]));
93
+ }
94
+ };
95
+ }
96
+ static #buildSchema() {
97
+ return {
98
+ type: 'object',
99
+ summary: 'ADS/AMS cmd=${commandId} invoke=${invokeId}',
100
+ properties: {
101
+ //===== AMS/TCP header (6 bytes) =====
102
+ //Reserved: 0 for an AMS command; kept verbatim so any non-zero reserved still round-trips.
103
+ reserved: this.fieldHex('reserved', 0, 2, 'Reserved'),
104
+ length: {
105
+ type: 'integer',
106
+ label: 'AMS/TCP Length',
107
+ minimum: 0,
108
+ maximum: 4294967295,
109
+ decode: function () {
110
+ const b = this.readBytes(2, 4);
111
+ this.instance.length.setValue((b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0);
112
+ },
113
+ encode: function () {
114
+ //Length counts the AMS header (32) + the command data that follow the 6-byte
115
+ //AMS/TCP header. Honored when supplied (a crafted packet may lie); else derived.
116
+ const provided = this.instance.length.getValue();
117
+ let value = (provided !== undefined && provided !== null)
118
+ ? provided
119
+ : 32 + (0, HexToBuffer_1.HexToBuffer)(this.instance.data.getValue('')).length;
120
+ if (value > 4294967295) {
121
+ this.recordError(this.instance.length.getPath(), 'Maximum value is 4294967295');
122
+ value = 4294967295;
123
+ }
124
+ if (value < 0) {
125
+ this.recordError(this.instance.length.getPath(), 'Minimum value is 0');
126
+ value = 0;
127
+ }
128
+ this.instance.length.setValue(value);
129
+ this.writeBytes(2, Buffer.from([value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >>> 24) & 0xff]));
130
+ }
131
+ },
132
+ //===== AMS header (32 bytes) =====
133
+ //6-byte AmsNetId values kept verbatim as hex (on-wire order, e.g. c0a800010101).
134
+ targetNetId: this.fieldHex('targetNetId', 6, 6, 'Target AmsNetId'),
135
+ targetPort: this.#fieldUInt16LE('targetPort', 12, 'Target AmsPort'),
136
+ sourceNetId: this.fieldHex('sourceNetId', 14, 6, 'Source AmsNetId'),
137
+ sourcePort: this.#fieldUInt16LE('sourcePort', 20, 'Source AmsPort'),
138
+ //Command Id: 1 ReadDeviceInfo, 2 Read, 3 Write, 4 ReadState, ... (kept as a raw uint, no
139
+ //enum constraint, so any on-wire command id decodes and re-encodes).
140
+ commandId: this.#fieldUInt16LE('commandId', 22, 'Command Id'),
141
+ //State Flags: bit0 response(1)/request(0), bit2 ADS command (0x0004); kept verbatim.
142
+ stateFlags: this.#fieldUInt16LE('stateFlags', 24, 'State Flags'),
143
+ dataLength: {
144
+ type: 'integer',
145
+ label: 'Data Length',
146
+ minimum: 0,
147
+ maximum: 4294967295,
148
+ decode: function () {
149
+ const b = this.readBytes(26, 4);
150
+ this.instance.dataLength.setValue((b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0);
151
+ },
152
+ encode: function () {
153
+ //Data Length counts the command data that follow the 38-byte header. Honored when
154
+ //supplied (a crafted packet may lie); else derived from the data.
155
+ const provided = this.instance.dataLength.getValue();
156
+ let value = (provided !== undefined && provided !== null)
157
+ ? provided
158
+ : (0, HexToBuffer_1.HexToBuffer)(this.instance.data.getValue('')).length;
159
+ if (value > 4294967295) {
160
+ this.recordError(this.instance.dataLength.getPath(), 'Maximum value is 4294967295');
161
+ value = 4294967295;
162
+ }
163
+ if (value < 0) {
164
+ this.recordError(this.instance.dataLength.getPath(), 'Minimum value is 0');
165
+ value = 0;
166
+ }
167
+ this.instance.dataLength.setValue(value);
168
+ this.writeBytes(26, Buffer.from([value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >>> 24) & 0xff]));
169
+ }
170
+ },
171
+ //Error Code honored verbatim (never recomputed).
172
+ errorCode: this.#fieldUInt32LE('errorCode', 30, 'Error Code'),
173
+ invokeId: this.#fieldUInt32LE('invokeId', 34, 'Invoke Id'),
174
+ //The command-specific data after the 38-byte AMS/TCP+AMS header, kept verbatim. Bounded by
175
+ //Data Length (data ends at offset 38 + dataLength) and the captured bytes, so trailing /
176
+ //pipelined data is left to the codec's recursion / RawData.
177
+ data: {
178
+ type: 'string',
179
+ label: 'Data',
180
+ contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX,
181
+ decode: function () {
182
+ const remaining = this.packet.length - this.startPos;
183
+ const dataLength = this.instance.dataLength.getValue(0);
184
+ let end = 38 + dataLength;
185
+ if (end > remaining)
186
+ end = remaining;
187
+ this.instance.data.setValue(end > 38 ? (0, BufferToHex_1.BufferToHex)(this.readBytes(38, end - 38)) : '');
188
+ },
189
+ encode: function () {
190
+ const data = this.instance.data.getValue('');
191
+ if (data)
192
+ this.writeBytes(38, (0, HexToBuffer_1.HexToBuffer)(data));
193
+ }
194
+ }
195
+ }
196
+ };
197
+ }
198
+ match() {
199
+ //ADS/AMS rides on TCP port 48898. The AMS/TCP + AMS headers carry no strong content magic, so
200
+ //the well-known port is the signature: require the full 6-byte AMS/TCP header + 32-byte AMS
201
+ //header (38 bytes) to be present so the fixed AMS-header fields are never re-emitted from a
202
+ //truncated slice.
203
+ if (!this.prevCodecModule || this.prevCodecModule.id !== 'tcp')
204
+ return false;
205
+ return this.packet.length - this.startPos >= 38;
206
+ }
207
+ }
208
+ exports.ADSAMS = ADSAMS;
@@ -0,0 +1,28 @@
1
+ import { BaseHeader } from '../abstracts/BaseHeader';
2
+ import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
3
+ import { DemuxProducer } from '../types/DemuxProducer';
4
+ /**
5
+ * AH — IP Authentication Header (RFC 4302), carried directly over IP as protocol 51. Like the IPv6
6
+ * extension headers it is a next-header-chained shim, not a leaf: a fixed 12-byte prefix — Next Header
7
+ * (the IP-protocol number of what it protects), Payload Len (the whole AH's length in 4-octet words
8
+ * minus 2), a 2-byte Reserved, a 32-bit Security Parameters Index and a 32-bit Sequence Number —
9
+ * followed by a variable Integrity Check Value whose length is (PayloadLen+2)*4 - 12 octets (12 for
10
+ * the ubiquitous HMAC-SHA1-96). The protected upper-layer payload follows and is left to the codec's
11
+ * recursion: AH's Next Header drives the same `ipproto` demux dimension IPv4/IPv6 use, so a transport-
12
+ * mode AH over UDP recurses into UDP, while an unrecognised next-header falls through to RawData.
13
+ *
14
+ * The ICV is honored verbatim, not recomputed (AH is a faithful executor — it cannot rederive an HMAC
15
+ * without the SA key), and Payload Len is honored-else-derived: a supplied value is kept, an absent one
16
+ * is computed from the ICV length. A well-formed AH message round-trips byte-for-byte.
17
+ */
18
+ export declare class AH extends BaseHeader {
19
+ #private;
20
+ get SCHEMA(): ProtocolJSONSchema;
21
+ readonly id: string;
22
+ readonly name: string;
23
+ readonly nickname: string;
24
+ readonly isProtocol: boolean;
25
+ readonly matchKeys: string[];
26
+ readonly demuxProducers: DemuxProducer[];
27
+ match(): boolean;
28
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AH = 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
+ * AH — IP Authentication Header (RFC 4302), carried directly over IP as protocol 51. Like the IPv6
12
+ * extension headers it is a next-header-chained shim, not a leaf: a fixed 12-byte prefix — Next Header
13
+ * (the IP-protocol number of what it protects), Payload Len (the whole AH's length in 4-octet words
14
+ * minus 2), a 2-byte Reserved, a 32-bit Security Parameters Index and a 32-bit Sequence Number —
15
+ * followed by a variable Integrity Check Value whose length is (PayloadLen+2)*4 - 12 octets (12 for
16
+ * the ubiquitous HMAC-SHA1-96). The protected upper-layer payload follows and is left to the codec's
17
+ * recursion: AH's Next Header drives the same `ipproto` demux dimension IPv4/IPv6 use, so a transport-
18
+ * mode AH over UDP recurses into UDP, while an unrecognised next-header falls through to RawData.
19
+ *
20
+ * The ICV is honored verbatim, not recomputed (AH is a faithful executor — it cannot rederive an HMAC
21
+ * without the SA key), and Payload Len is honored-else-derived: a supplied value is kept, an absent one
22
+ * is computed from the ICV length. A well-formed AH message round-trips byte-for-byte.
23
+ */
24
+ class AH extends BaseHeader_1.BaseHeader {
25
+ constructor() {
26
+ super(...arguments);
27
+ //Byte length of the ICV written during encode; consumed by the Payload Len derive handler.
28
+ this.#icvByteLength = 0;
29
+ this.id = 'ah';
30
+ this.name = 'IP Authentication Header';
31
+ this.nickname = 'AH';
32
+ this.isProtocol = false;
33
+ this.matchKeys = ['ipproto:51'];
34
+ //Extension-header style: it consumes ipproto:51 and produces the next-header key for the protected
35
+ //payload after it (mirrors the IPv6 Hop-by-Hop header).
36
+ this.demuxProducers = [{ field: 'nxt', namespace: 'ipproto', kind: 'uint' }];
37
+ }
38
+ static #schemaCache;
39
+ //Byte length of the ICV written during encode; consumed by the Payload Len derive handler.
40
+ #icvByteLength;
41
+ get SCHEMA() {
42
+ return (AH.#schemaCache ??= AH.#buildSchema());
43
+ }
44
+ /**
45
+ * The length available to AH's own header (fixed prefix + ICV), bounded by the enclosing IP
46
+ * datagram — so a lying Payload Len near the end of the IP payload does not read into a trailing
47
+ * FCS. The protected inner payload is left to the codec's recursion.
48
+ */
49
+ #available() {
50
+ let available = this.packet.length - this.startPos;
51
+ const prev = this.prevCodecModule;
52
+ if (prev && prev.id === 'ipv4') {
53
+ const ipPayload = prev.instance.length.getValue(0) - prev.length;
54
+ if (ipPayload >= 0 && ipPayload < available)
55
+ available = ipPayload;
56
+ }
57
+ else if (prev && prev.id === 'ipv6') {
58
+ const ipPayload = prev.instance.plen.getValue(0);
59
+ if (ipPayload >= 0 && ipPayload < available)
60
+ available = ipPayload;
61
+ }
62
+ return available < 0 ? 0 : available;
63
+ }
64
+ static #buildSchema() {
65
+ return {
66
+ type: 'object',
67
+ summary: 'AH spi=${spi} seq=${sequenceNumber}',
68
+ properties: {
69
+ //Next Header is an IP-protocol number (the type of the protected payload); stored as
70
+ //`nxt` — the field name IPv6 extension headers use — so the `ipproto` demux routes the
71
+ //inner layer and TCP/UDP's `nxt`-aware match() accepts AH as a parent.
72
+ nxt: this.fieldUInt('nxt', 0, 1, 'Next Header'),
73
+ //AH total length in 4-octet words minus 2. Honored-else-derived: a supplied value is
74
+ //kept verbatim, an absent (0) one is recomputed from the encoded ICV length.
75
+ payloadLen: {
76
+ type: 'integer',
77
+ label: 'Payload Length',
78
+ minimum: 0,
79
+ maximum: 255,
80
+ decode: function () {
81
+ this.instance.payloadLen.setValue((0, BufferToNumber_1.BufferToUInt8)(this.readBytes(1, 1)));
82
+ },
83
+ encode: function () {
84
+ const payloadLen = this.instance.payloadLen.getValue(0);
85
+ this.instance.payloadLen.setValue(payloadLen);
86
+ this.writeBytes(1, (0, NumberToBuffer_1.UInt8ToBuffer)(payloadLen));
87
+ if (!payloadLen) {
88
+ this.addPostSelfEncodeHandler(() => {
89
+ //Fixed prefix is 12 octets (3 words); total = 12 + ICV octets, and
90
+ //Payload Len = totalWords - 2 = (12 + icvBytes)/4 - 2 = icvBytes/4 + 1.
91
+ const derived = Math.max(0, Math.ceil((12 + this.#icvByteLength) / 4) - 2);
92
+ this.instance.payloadLen.setValue(derived);
93
+ this.writeBytes(1, (0, NumberToBuffer_1.UInt8ToBuffer)(derived));
94
+ });
95
+ }
96
+ }
97
+ },
98
+ reserved: this.fieldHex('reserved', 2, 2, 'Reserved'),
99
+ spi: this.fieldUInt('spi', 4, 4, 'Security Parameters Index'),
100
+ sequenceNumber: this.fieldUInt('sequenceNumber', 8, 4, 'Sequence Number'),
101
+ //Integrity Check Value: variable length driven by Payload Len, bounded by the IP payload
102
+ //so a lying length cannot read past the datagram. Honored verbatim — an HMAC cannot be
103
+ //rederived without the SA key.
104
+ icv: {
105
+ type: 'string',
106
+ label: 'Integrity Check Value',
107
+ contentEncoding: StringContentEncodingEnum_1.StringContentEncodingEnum.HEX,
108
+ decode: function () {
109
+ const payloadLen = this.instance.payloadLen.getValue(0);
110
+ const available = this.#available();
111
+ let icvLength = (payloadLen + 2) * 4 - 12;
112
+ if (icvLength < 0)
113
+ icvLength = 0;
114
+ if (12 + icvLength > available)
115
+ icvLength = Math.max(0, available - 12);
116
+ this.instance.icv.setValue((0, BufferToHex_1.BufferToHex)(this.readBytes(12, icvLength)));
117
+ },
118
+ encode: function () {
119
+ const icvBuffer = (0, HexToBuffer_1.HexToBuffer)(this.instance.icv.getValue(''));
120
+ this.#icvByteLength = icvBuffer.length;
121
+ this.writeBytes(12, icvBuffer);
122
+ }
123
+ }
124
+ }
125
+ };
126
+ }
127
+ match() {
128
+ //AH sits directly above IPv4 (protocol field) or IPv6 (next-header field) with protocol 51, and
129
+ //needs at least its 12-byte fixed prefix within the IP payload.
130
+ if (!this.prevCodecModule)
131
+ return false;
132
+ if (this.prevCodecModule.instance.protocol.getValue() !== 0x33 && this.prevCodecModule.instance.nxt.getValue() !== 0x33)
133
+ return false;
134
+ return this.#available() >= 12;
135
+ }
136
+ }
137
+ exports.AH = AH;
@@ -0,0 +1,31 @@
1
+ import { BaseHeader } from '../abstracts/BaseHeader';
2
+ import { ProtocolJSONSchema } from '../schema/ProtocolJSONSchema';
3
+ import { DemuxProducer } from '../types/DemuxProducer';
4
+ /**
5
+ * AMQP 0-9-1 — the Advanced Message Queuing Protocol as spoken by RabbitMQ and friends, carried over TCP
6
+ * port 5672. A connection opens with an 8-byte protocol header — the literal "AMQP" followed by four
7
+ * version octets (0 0 9 1 for 0-9-1) — sent once at connection start to negotiate the version. Everything
8
+ * after that is a stream of frames: a 1-byte type (1=METHOD, 2=HEADER, 3=BODY, 8=HEARTBEAT), a 2-byte
9
+ * channel, a 4-byte payload length, `length` payload octets, and a single 0xCE frame-end octet.
10
+ *
11
+ * This codec handles BOTH forms in one header (they are distinguished on the wire by the leading "AMQP"
12
+ * literal). The protocol-header handshake decodes to {isProtocolHeader:true, protocol:'AMQP', + the four
13
+ * version octets}; a frame decodes to type/channel/length/payload/frameEnd. The frame payload carries a
14
+ * class/method id and its arguments (METHOD), a content-header (HEADER), or opaque bytes (BODY) — decoding
15
+ * those is cross-frame, class-dependent state, so this minimal slice keeps the payload verbatim as hex
16
+ * (byte-perfect). The payload is bounded by the length field (the frame ends at offset 7+length, with the
17
+ * frame-end octet there), so a pipelined second frame or trailing bytes are left to the codec's recursion
18
+ * / RawData. Length is honored when supplied on encode (a crafted frame may lie), else derived from the
19
+ * payload bytes. A well-formed handshake or frame round-trips byte-for-byte.
20
+ */
21
+ export declare class AMQP extends BaseHeader {
22
+ #private;
23
+ get SCHEMA(): ProtocolJSONSchema;
24
+ readonly id: string;
25
+ readonly name: string;
26
+ readonly nickname: string;
27
+ readonly matchKeys: string[];
28
+ readonly heuristicFallback: boolean;
29
+ match(): boolean;
30
+ readonly demuxProducers: DemuxProducer[];
31
+ }