werift 0.18.13 → 0.18.15

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 (252) hide show
  1. package/lib/common/src/binary.js.map +1 -1
  2. package/lib/common/src/index.d.ts +0 -1
  3. package/lib/common/src/index.js +0 -1
  4. package/lib/common/src/index.js.map +1 -1
  5. package/lib/dtls/src/client.js.map +1 -1
  6. package/lib/dtls/src/context/cipher.js +1 -1
  7. package/lib/dtls/src/context/cipher.js.map +1 -1
  8. package/lib/dtls/src/context/dtls.js.map +1 -1
  9. package/lib/dtls/src/context/transport.js.map +1 -1
  10. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  11. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  12. package/lib/dtls/src/flight/flight.js +1 -1
  13. package/lib/dtls/src/flight/flight.js.map +1 -1
  14. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  15. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  16. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
  17. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  18. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  19. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  20. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
  21. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  22. package/lib/dtls/src/handshake/extensions/signature.js +1 -1
  23. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  24. package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
  25. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  26. package/lib/dtls/src/handshake/message/alert.js +1 -1
  27. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  28. package/lib/dtls/src/handshake/message/certificate.js +1 -1
  29. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  30. package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
  31. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  32. package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
  33. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  34. package/lib/dtls/src/handshake/message/client/hello.js +1 -1
  35. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  36. package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
  37. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  38. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  39. package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
  40. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  41. package/lib/dtls/src/handshake/message/server/hello.js +1 -1
  42. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  43. package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
  44. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  45. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
  46. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  47. package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
  48. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  49. package/lib/dtls/src/handshake/random.js +1 -1
  50. package/lib/dtls/src/handshake/random.js.map +1 -1
  51. package/lib/dtls/src/record/message/fragment.js +1 -1
  52. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  53. package/lib/dtls/src/record/message/header.js +2 -2
  54. package/lib/dtls/src/record/message/header.js.map +1 -1
  55. package/lib/dtls/src/record/message/plaintext.js +1 -1
  56. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  57. package/lib/dtls/src/server.js.map +1 -1
  58. package/lib/dtls/src/socket.js.map +1 -1
  59. package/lib/dtls/src/transport.js.map +1 -1
  60. package/lib/ice/src/candidate.js.map +1 -1
  61. package/lib/ice/src/exceptions.js.map +1 -1
  62. package/lib/ice/src/helper.js.map +1 -1
  63. package/lib/ice/src/ice.js.map +1 -1
  64. package/lib/ice/src/stun/attributes.js.map +1 -1
  65. package/lib/ice/src/stun/message.js.map +1 -1
  66. package/lib/ice/src/stun/protocol.js.map +1 -1
  67. package/lib/ice/src/stun/transaction.js.map +1 -1
  68. package/lib/ice/src/transport.js.map +1 -1
  69. package/lib/ice/src/turn/protocol.js.map +1 -1
  70. package/lib/rtp/src/codec/av1.js +1 -1
  71. package/lib/rtp/src/codec/av1.js.map +1 -1
  72. package/lib/rtp/src/container/index.d.ts +2 -1
  73. package/lib/rtp/src/container/index.js +2 -1
  74. package/lib/rtp/src/container/index.js.map +1 -1
  75. package/lib/rtp/src/container/mp4/container.d.ts +66 -0
  76. package/lib/rtp/src/container/mp4/container.js +262 -0
  77. package/lib/rtp/src/container/mp4/container.js.map +1 -0
  78. package/lib/rtp/src/container/mp4/exp-golomb.d.ts +20 -0
  79. package/lib/rtp/src/container/mp4/exp-golomb.js +144 -0
  80. package/lib/rtp/src/container/mp4/exp-golomb.js.map +1 -0
  81. package/lib/rtp/src/container/mp4/h264.d.ts +42 -0
  82. package/lib/rtp/src/container/mp4/h264.js +240 -0
  83. package/lib/rtp/src/container/mp4/h264.js.map +1 -0
  84. package/lib/rtp/src/container/mp4/index.d.ts +2 -0
  85. package/lib/rtp/src/container/mp4/index.js +19 -0
  86. package/lib/rtp/src/container/mp4/index.js.map +1 -0
  87. package/lib/rtp/src/container/mp4/mp4box.d.ts +5 -0
  88. package/lib/rtp/src/container/mp4/mp4box.js +32 -0
  89. package/lib/rtp/src/container/mp4/mp4box.js.map +1 -0
  90. package/lib/rtp/src/container/mp4/sps-parser.d.ts +40 -0
  91. package/lib/rtp/src/container/mp4/sps-parser.js +291 -0
  92. package/lib/rtp/src/container/mp4/sps-parser.js.map +1 -0
  93. package/lib/rtp/src/container/ogg/index.d.ts +1 -0
  94. package/lib/rtp/src/container/ogg/index.js +18 -0
  95. package/lib/rtp/src/container/ogg/index.js.map +1 -0
  96. package/lib/rtp/src/container/ogg/parser.d.ts +12 -0
  97. package/lib/rtp/src/container/ogg/parser.js +100 -0
  98. package/lib/rtp/src/container/ogg/parser.js.map +1 -0
  99. package/lib/rtp/src/container/{webm.d.ts → webm/container.d.ts} +1 -1
  100. package/lib/rtp/src/container/{webm.js → webm/container.js} +6 -6
  101. package/lib/rtp/src/container/webm/container.js.map +1 -0
  102. package/lib/rtp/src/container/webm/ebml/ebml.js.map +1 -0
  103. package/lib/rtp/src/container/webm/ebml/id.js.map +1 -0
  104. package/lib/rtp/src/container/webm/ebml/index.js.map +1 -0
  105. package/lib/rtp/src/container/webm/ebml/typedArrayUtils.js.map +1 -0
  106. package/lib/rtp/src/container/webm/index.d.ts +2 -0
  107. package/lib/rtp/src/container/webm/index.js +19 -0
  108. package/lib/rtp/src/container/webm/index.js.map +1 -0
  109. package/lib/rtp/src/processor/depacketizer.js.map +1 -1
  110. package/lib/rtp/src/processor/dtx.d.ts +1 -1
  111. package/lib/rtp/src/processor/dtx.js.map +1 -1
  112. package/lib/rtp/src/processor/index.d.ts +2 -0
  113. package/lib/rtp/src/processor/index.js +2 -0
  114. package/lib/rtp/src/processor/index.js.map +1 -1
  115. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  116. package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
  117. package/lib/rtp/src/processor/lipsync.js.map +1 -1
  118. package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -1
  119. package/lib/rtp/src/processor/mp4.d.ts +50 -0
  120. package/lib/rtp/src/processor/mp4.js +162 -0
  121. package/lib/rtp/src/processor/mp4.js.map +1 -0
  122. package/lib/rtp/src/processor/mp4Callback.d.ts +12 -0
  123. package/lib/rtp/src/processor/mp4Callback.js +83 -0
  124. package/lib/rtp/src/processor/mp4Callback.js.map +1 -0
  125. package/lib/rtp/src/processor/mute.d.ts +1 -1
  126. package/lib/rtp/src/processor/mute.js +6 -3
  127. package/lib/rtp/src/processor/mute.js.map +1 -1
  128. package/lib/rtp/src/processor/muteCallback.js.map +1 -1
  129. package/lib/rtp/src/processor/nack.js +2 -3
  130. package/lib/rtp/src/processor/nack.js.map +1 -1
  131. package/lib/rtp/src/processor/ntpTime.d.ts +1 -1
  132. package/lib/rtp/src/processor/ntpTime.js.map +1 -1
  133. package/lib/rtp/src/processor/rtcpCallback.js.map +1 -1
  134. package/lib/rtp/src/processor/rtpCallback.js.map +1 -1
  135. package/lib/rtp/src/processor/rtpStream.js.map +1 -1
  136. package/lib/rtp/src/processor/rtpTime.js.map +1 -1
  137. package/lib/rtp/src/processor/webm.d.ts +1 -1
  138. package/lib/rtp/src/processor/webm.js +1 -1
  139. package/lib/rtp/src/processor/webm.js.map +1 -1
  140. package/lib/rtp/src/processor/webmCallback.d.ts +1 -1
  141. package/lib/rtp/src/processor/webmCallback.js.map +1 -1
  142. package/lib/rtp/src/processor/webmStream.d.ts +1 -1
  143. package/lib/rtp/src/processor/webmStream.js.map +1 -1
  144. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  145. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  146. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  147. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  148. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  149. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  150. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  151. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  152. package/lib/rtp/src/rtcp/rr.js +3 -7
  153. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  154. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  155. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  156. package/lib/rtp/src/rtcp/rtpfb/nack.js +6 -13
  157. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  158. package/lib/rtp/src/rtcp/rtpfb/twcc.js +12 -8
  159. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  160. package/lib/rtp/src/rtcp/sdes.js +1 -1
  161. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  162. package/lib/rtp/src/rtcp/sr.js +2 -6
  163. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  164. package/lib/rtp/src/rtp/headerExtension.d.ts +5 -0
  165. package/lib/rtp/src/rtp/headerExtension.js +35 -9
  166. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  167. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  168. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  169. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  170. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  171. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  172. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  173. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  174. package/lib/rtp/src/srtp/session.js.map +1 -1
  175. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  176. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  177. package/lib/rtp/src/util.js.map +1 -1
  178. package/lib/sctp/src/chunk.js +17 -17
  179. package/lib/sctp/src/chunk.js.map +1 -1
  180. package/lib/sctp/src/param.js +3 -3
  181. package/lib/sctp/src/param.js.map +1 -1
  182. package/lib/sctp/src/sctp.js.map +1 -1
  183. package/lib/sctp/src/transport.js.map +1 -1
  184. package/lib/webrtc/src/const.js.map +1 -1
  185. package/lib/webrtc/src/dataChannel.js.map +1 -1
  186. package/lib/webrtc/src/media/parameters.js.map +1 -1
  187. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  188. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  189. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  190. package/lib/webrtc/src/media/router.js.map +1 -1
  191. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  192. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  193. package/lib/webrtc/src/media/rtpTransceiver.d.ts +1 -1
  194. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  195. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  196. package/lib/webrtc/src/media/track.js.map +1 -1
  197. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  198. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  199. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  200. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  201. package/lib/webrtc/src/peerConnection.js.map +1 -1
  202. package/lib/webrtc/src/sdp.js.map +1 -1
  203. package/lib/webrtc/src/transport/dtls.d.ts +1 -1
  204. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  205. package/lib/webrtc/src/transport/ice.d.ts +2 -2
  206. package/lib/webrtc/src/transport/ice.js.map +1 -1
  207. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  208. package/lib/webrtc/src/types/domain.d.ts +2 -2
  209. package/lib/webrtc/src/types/domain.js.map +1 -1
  210. package/lib/webrtc/src/utils.d.ts +1 -0
  211. package/lib/webrtc/src/utils.js +9 -1
  212. package/lib/webrtc/src/utils.js.map +1 -1
  213. package/package.json +5 -3
  214. package/src/const.ts +1 -1
  215. package/src/dataChannel.ts +3 -3
  216. package/src/media/parameters.ts +3 -3
  217. package/src/media/receiver/nack.ts +7 -4
  218. package/src/media/receiver/receiverTwcc.ts +5 -5
  219. package/src/media/receiver/statistics.ts +1 -1
  220. package/src/media/router.ts +5 -5
  221. package/src/media/rtpReceiver.ts +9 -9
  222. package/src/media/rtpSender.ts +8 -8
  223. package/src/media/rtpTransceiver.ts +3 -3
  224. package/src/media/sender/senderBWE.ts +2 -2
  225. package/src/media/track.ts +1 -1
  226. package/src/nonstandard/recorder/index.ts +1 -1
  227. package/src/nonstandard/recorder/writer/index.ts +1 -1
  228. package/src/nonstandard/recorder/writer/webm.ts +2 -2
  229. package/src/nonstandard/userMedia.ts +1 -1
  230. package/src/peerConnection.ts +52 -52
  231. package/src/sdp.ts +27 -21
  232. package/src/transport/dtls.ts +13 -10
  233. package/src/transport/ice.ts +6 -6
  234. package/src/transport/sctp.ts +4 -4
  235. package/src/types/domain.ts +2 -2
  236. package/src/utils.ts +11 -2
  237. package/lib/common/src/array.d.ts +0 -1
  238. package/lib/common/src/array.js +0 -15
  239. package/lib/common/src/array.js.map +0 -1
  240. package/lib/rtp/src/container/ebml/ebml.js.map +0 -1
  241. package/lib/rtp/src/container/ebml/id.js.map +0 -1
  242. package/lib/rtp/src/container/ebml/index.js.map +0 -1
  243. package/lib/rtp/src/container/ebml/typedArrayUtils.js.map +0 -1
  244. package/lib/rtp/src/container/webm.js.map +0 -1
  245. /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.d.ts +0 -0
  246. /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.js +0 -0
  247. /package/lib/rtp/src/container/{ebml → webm/ebml}/id.d.ts +0 -0
  248. /package/lib/rtp/src/container/{ebml → webm/ebml}/id.js +0 -0
  249. /package/lib/rtp/src/container/{ebml → webm/ebml}/index.d.ts +0 -0
  250. /package/lib/rtp/src/container/{ebml → webm/ebml}/index.js +0 -0
  251. /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.d.ts +0 -0
  252. /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"gcm.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/gcm.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv } from \"crypto\";\n\nimport { createBufferWriter } from \"../../../../common/src\";\nimport { growBufferSize } from \"../../helper\";\nimport { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\nimport { CipherAesBase } from \".\";\n\nexport class CipherAesGcm extends CipherAesBase {\n readonly aeadAuthTagLen = 16;\n readonly rtpIvWriter = createBufferWriter([2, 4, 4, 2], true);\n readonly rtcpIvWriter = createBufferWriter([2, 4, 2, 4], true);\n readonly aadWriter = createBufferWriter([4], true);\n\n constructor(\n srtpSessionKey: Buffer,\n srtpSessionSalt: Buffer,\n srtcpSessionKey: Buffer,\n srtcpSessionSalt: Buffer\n ) {\n super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);\n }\n\n encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number) {\n const hdr = header.serialize(header.serializeSize);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n cipher.setAAD(hdr);\n const enc = cipher.update(payload);\n cipher.final();\n\n const authTag = cipher.getAuthTag();\n\n const dst = Buffer.concat([hdr, enc, authTag]);\n return dst;\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, cipherText.length - this.aeadAuthTagLen);\n cipherText.slice(0, header.payloadOffset).copy(dst);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const enc = cipherText.slice(\n header.payloadOffset,\n cipherText.length - this.aeadAuthTagLen\n );\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n const dec = cipher.update(enc);\n\n dec.copy(dst, header.payloadOffset);\n\n return [dst, header];\n }\n\n encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer {\n const ssrc = rtcpPacket.readUInt32BE(4);\n\n const addPos = rtcpPacket.length + this.aeadAuthTagLen;\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, addPos + srtcpIndexSize);\n rtcpPacket.slice(0, 8).copy(dst);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(rtcpPacket, srtcpIndex);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const enc = cipher.update(rtcpPacket.slice(8));\n cipher.final();\n enc.copy(dst, 8);\n\n const authTag = cipher.getAuthTag();\n authTag.copy(dst, 8 + enc.length);\n aad.slice(8, 12).copy(dst, addPos);\n\n return dst;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const header = RtcpHeader.deSerialize(encrypted);\n const aadPos = encrypted.length - srtcpIndexSize;\n\n const dst = Buffer.alloc(aadPos - this.aeadAuthTagLen);\n encrypted.slice(0, 8).copy(dst);\n\n const ssrc = encrypted.readUInt32BE(4);\n\n let srtcpIndex = encrypted.readUInt32BE(encrypted.length - 4);\n srtcpIndex &= ~(rtcpEncryptionFlag << 24);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(encrypted, srtcpIndex);\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const dec = cipher.update(encrypted.slice(8, aadPos));\n\n dec.copy(dst, 8);\n\n return [dst, header];\n }\n\n // https://tools.ietf.org/html/rfc7714#section-8.1\n private rtpInitializationVector(header: RtpHeader, rolloverCounter: number) {\n const iv = this.rtpIvWriter([\n 0,\n header.ssrc,\n rolloverCounter,\n header.sequenceNumber,\n ]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtpSessionSalt[i];\n }\n return iv;\n }\n\n // https://tools.ietf.org/html/rfc7714#section-9.1\n private rtcpInitializationVector(ssrc: number, srtcpIndex: number) {\n const iv = this.rtcpIvWriter([0, ssrc, 0, srtcpIndex]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtcpSessionSalt[i];\n }\n return iv;\n }\n\n // https://datatracker.ietf.org/doc/html/rfc7714#section-17\n private rtcpAdditionalAuthenticatedData(\n rtcpPacket: Buffer,\n srtcpIndex: number\n ) {\n const aad = Buffer.concat([\n rtcpPacket.subarray(0, 8),\n this.aadWriter([srtcpIndex]),\n ]);\n aad[8] |= rtcpEncryptionFlag;\n return aad;\n }\n}\n\nconst srtcpIndexSize = 4;\nconst rtcpEncryptionFlag = 0x80;\n"]}
1
+ {"version":3,"file":"gcm.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/gcm.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv } from \"crypto\";\n\nimport { createBufferWriter } from \"../../../../common/src\";\nimport { growBufferSize } from \"../../helper\";\nimport { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\nimport { CipherAesBase } from \".\";\n\nexport class CipherAesGcm extends CipherAesBase {\n readonly aeadAuthTagLen = 16;\n readonly rtpIvWriter = createBufferWriter([2, 4, 4, 2], true);\n readonly rtcpIvWriter = createBufferWriter([2, 4, 2, 4], true);\n readonly aadWriter = createBufferWriter([4], true);\n\n constructor(\n srtpSessionKey: Buffer,\n srtpSessionSalt: Buffer,\n srtcpSessionKey: Buffer,\n srtcpSessionSalt: Buffer\n ) {\n super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);\n }\n\n encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number) {\n const hdr = header.serialize(header.serializeSize);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n cipher.setAAD(hdr);\n const enc = cipher.update(payload);\n cipher.final();\n\n const authTag = cipher.getAuthTag();\n\n const dst = Buffer.concat([hdr, enc, authTag]);\n return dst;\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, cipherText.length - this.aeadAuthTagLen);\n cipherText.slice(0, header.payloadOffset).copy(dst);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const enc = cipherText.slice(\n header.payloadOffset,\n cipherText.length - this.aeadAuthTagLen\n );\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n const dec = cipher.update(enc);\n\n dec.copy(dst, header.payloadOffset);\n\n return [dst, header];\n }\n\n encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer {\n const ssrc = rtcpPacket.readUInt32BE(4);\n\n const addPos = rtcpPacket.length + this.aeadAuthTagLen;\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, addPos + srtcpIndexSize);\n rtcpPacket.slice(0, 8).copy(dst);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(rtcpPacket, srtcpIndex);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const enc = cipher.update(rtcpPacket.slice(8));\n cipher.final();\n enc.copy(dst, 8);\n\n const authTag = cipher.getAuthTag();\n authTag.copy(dst, 8 + enc.length);\n aad.slice(8, 12).copy(dst, addPos);\n\n return dst;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const header = RtcpHeader.deSerialize(encrypted);\n const aadPos = encrypted.length - srtcpIndexSize;\n\n const dst = Buffer.alloc(aadPos - this.aeadAuthTagLen);\n encrypted.slice(0, 8).copy(dst);\n\n const ssrc = encrypted.readUInt32BE(4);\n\n let srtcpIndex = encrypted.readUInt32BE(encrypted.length - 4);\n srtcpIndex &= ~(rtcpEncryptionFlag << 24);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(encrypted, srtcpIndex);\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const dec = cipher.update(encrypted.slice(8, aadPos));\n\n dec.copy(dst, 8);\n\n return [dst, header];\n }\n\n // https://tools.ietf.org/html/rfc7714#section-8.1\n private rtpInitializationVector(header: RtpHeader, rolloverCounter: number) {\n const iv = this.rtpIvWriter([\n 0,\n header.ssrc,\n rolloverCounter,\n header.sequenceNumber,\n ]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtpSessionSalt[i];\n }\n return iv;\n }\n\n // https://tools.ietf.org/html/rfc7714#section-9.1\n private rtcpInitializationVector(ssrc: number, srtcpIndex: number) {\n const iv = this.rtcpIvWriter([0, ssrc, 0, srtcpIndex]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtcpSessionSalt[i];\n }\n return iv;\n }\n\n // https://datatracker.ietf.org/doc/html/rfc7714#section-17\n private rtcpAdditionalAuthenticatedData(\n rtcpPacket: Buffer,\n srtcpIndex: number\n ) {\n const aad = Buffer.concat([\n rtcpPacket.subarray(0, 8),\n this.aadWriter([srtcpIndex]),\n ]);\n aad[8] |= rtcpEncryptionFlag;\n return aad;\n }\n}\n\nconst srtcpIndexSize = 4;\nconst rtcpEncryptionFlag = 0x80;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB;;;;;mBAHxB;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;IACN,CAAC;IAEJ,UAAU,CACR,MAAiB,EACjB,OAAe,EACf,eAAuB;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,EAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,UAAkB;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,EAAS,CAAC;IACnB,CAAC;CACF;AA3BD,sCA2BC","sourcesContent":["import { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\n\nexport abstract class CipherAesBase {\n constructor(\n public srtpSessionKey: Buffer,\n public srtpSessionSalt: Buffer,\n public srtcpSessionKey: Buffer,\n public srtcpSessionSalt: Buffer\n ) {}\n\n encryptRtp(\n header: RtpHeader,\n payload: Buffer,\n rolloverCounter: number\n ): Buffer {\n return Buffer.from([]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n return [] as any;\n }\n\n encryptRTCP(rawRtcp: Buffer, srtcpIndex: number): Buffer {\n return Buffer.from([]);\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n return [] as any;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB;QAH/B;;;;mBAAO,cAAc;WAAQ;QAC7B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,gBAAgB;WAAQ;IAC9B,CAAC;IAEJ,UAAU,CACR,MAAiB,EACjB,OAAe,EACf,eAAuB;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,EAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,UAAkB;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,EAAS,CAAC;IACnB,CAAC;CACF;AA3BD,sCA2BC","sourcesContent":["import { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\n\nexport abstract class CipherAesBase {\n constructor(\n public srtpSessionKey: Buffer,\n public srtpSessionSalt: Buffer,\n public srtcpSessionKey: Buffer,\n public srtcpSessionSalt: Buffer\n ) {}\n\n encryptRtp(\n header: RtpHeader,\n payload: Buffer,\n rolloverCounter: number\n ): Buffer {\n return Buffer.from([]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n return [] as any;\n }\n\n encryptRTCP(rawRtcp: Buffer, srtcpIndex: number): Buffer {\n return Buffer.from([]);\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n return [] as any;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AES } from \"aes-js\";\nimport { createHmac, Hmac } from \"crypto\";\n\nimport { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n Profile,\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: Hmac;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: Hmac;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: Profile\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.slice(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);\n let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);\n const block = new AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.slice(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AES } from \"aes-js\";\nimport { createHmac, Hmac } from \"crypto\";\n\nimport { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n Profile,\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: Hmac;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: Hmac;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: Profile\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.slice(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);\n let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);\n const block = new AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.slice(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/session.ts"],"names":[],"mappings":";;;AAcA,MAAa,OAAO;IAKlB,YAAoB,UAAe;;;;;mBAAf;;QAJpB;;;;;WAAiB;QACjB;;;;;WAAkB;QAClB;;;;;WAA+B;IAEO,CAAC;IAEvC,KAAK,CACH,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB,EACxB,OAAe;QAEf,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CACrC,cAAc,EACd,eAAe,EACf,OAAO,CACR,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CACtC,eAAe,EACf,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;CACF;AAzBD,0BAyBC","sourcesContent":["import { Context } from \"./context/context\";\n\nexport type SessionKeys = {\n localMasterKey: Buffer;\n localMasterSalt: Buffer;\n remoteMasterKey: Buffer;\n remoteMasterSalt: Buffer;\n};\n\nexport type Config = {\n keys: SessionKeys;\n profile: number;\n};\n\nexport class Session<T extends Context> {\n localContext!: T;\n remoteContext!: T;\n onData?: (buf: Buffer) => void;\n\n constructor(private ContextCls: any) {}\n\n start(\n localMasterKey: Buffer,\n localMasterSalt: Buffer,\n remoteMasterKey: Buffer,\n remoteMasterSalt: Buffer,\n profile: number\n ) {\n this.localContext = new this.ContextCls(\n localMasterKey,\n localMasterSalt,\n profile\n );\n this.remoteContext = new this.ContextCls(\n remoteMasterKey,\n remoteMasterSalt,\n profile\n );\n }\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/session.ts"],"names":[],"mappings":";;;AAcA,MAAa,OAAO;IAKlB,YAAoB,UAAe;QAAvB;;;;mBAAQ,UAAU;WAAK;QAJnC;;;;;WAAiB;QACjB;;;;;WAAkB;QAClB;;;;;WAA+B;IAEO,CAAC;IAEvC,KAAK,CACH,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB,EACxB,OAAe;QAEf,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CACrC,cAAc,EACd,eAAe,EACf,OAAO,CACR,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CACtC,eAAe,EACf,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;CACF;AAzBD,0BAyBC","sourcesContent":["import { Context } from \"./context/context\";\n\nexport type SessionKeys = {\n localMasterKey: Buffer;\n localMasterSalt: Buffer;\n remoteMasterKey: Buffer;\n remoteMasterSalt: Buffer;\n};\n\nexport type Config = {\n keys: SessionKeys;\n profile: number;\n};\n\nexport class Session<T extends Context> {\n localContext!: T;\n remoteContext!: T;\n onData?: (buf: Buffer) => void;\n\n constructor(private ContextCls: any) {}\n\n start(\n localMasterKey: Buffer,\n localMasterSalt: Buffer,\n remoteMasterKey: Buffer,\n remoteMasterSalt: Buffer,\n profile: number\n ) {\n this.localContext = new this.ContextCls(\n localMasterKey,\n localMasterSalt,\n profile\n );\n this.remoteContext = new this.ContextCls(\n remoteMasterKey,\n remoteMasterSalt,\n profile\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtcp.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,uCAA4C;AAE5C,MAAa,YAAa,SAAQ,iBAAqB;IACrD,YAAmB,MAAc;QAC/B,KAAK,CAAC,oBAAY,CAAC,CAAC;;;;;mBADH;;QAYnB;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC;YACnB,CAAC;WAAC;QAZA,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAC5B,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAOD,OAAO,CAAC,OAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,oCAsBC","sourcesContent":["import { SrtcpContext } from \"./context/srtcp\";\nimport { Config, Session } from \"./session\";\n\nexport class SrtcpSession extends Session<SrtcpContext> {\n constructor(public config: Config) {\n super(SrtcpContext);\n\n this.start(\n config.keys.localMasterKey,\n config.keys.localMasterSalt,\n config.keys.remoteMasterKey,\n config.keys.remoteMasterSalt,\n config.profile\n );\n }\n\n decrypt = (buf: Buffer) => {\n const [decrypted] = this.remoteContext.decryptRTCP(buf);\n return decrypted;\n };\n\n encrypt(rawRtcp: Buffer) {\n const enc = this.localContext.encryptRTCP(rawRtcp);\n return enc;\n }\n}\n"]}
1
+ {"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtcp.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,uCAA4C;AAE5C,MAAa,YAAa,SAAQ,iBAAqB;IACrD,YAAmB,MAAc;QAC/B,KAAK,CAAC,oBAAY,CAAC,CAAC;QADV;;;;mBAAO,MAAM;WAAQ;QAYjC;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC;YACnB,CAAC;WAAC;QAZA,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAC5B,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAOD,OAAO,CAAC,OAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,oCAsBC","sourcesContent":["import { SrtcpContext } from \"./context/srtcp\";\nimport { Config, Session } from \"./session\";\n\nexport class SrtcpSession extends Session<SrtcpContext> {\n constructor(public config: Config) {\n super(SrtcpContext);\n\n this.start(\n config.keys.localMasterKey,\n config.keys.localMasterSalt,\n config.keys.remoteMasterKey,\n config.keys.remoteMasterSalt,\n config.profile\n );\n }\n\n decrypt = (buf: Buffer) => {\n const [decrypted] = this.remoteContext.decryptRTCP(buf);\n return decrypted;\n };\n\n encrypt(rawRtcp: Buffer) {\n const enc = this.localContext.encryptRTCP(rawRtcp);\n return enc;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtp.ts"],"names":[],"mappings":";;;AACA,yCAA6C;AAC7C,uCAA4C;AAE5C,MAAa,WAAY,SAAQ,iBAAoB;IACnD,YAAmB,MAAc;QAC/B,KAAK,CAAC,kBAAW,CAAC,CAAC;;;;;mBADF;;QAWnB;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACvD,OAAO,SAAS,CAAC;YACnB,CAAC;WAAC;QAZA,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAC5B,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAOD,OAAO,CAAC,OAAe,EAAE,MAAiB;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;CACF;AApBD,kCAoBC","sourcesContent":["import { RtpHeader } from \"../rtp/rtp\";\nimport { SrtpContext } from \"./context/srtp\";\nimport { Config, Session } from \"./session\";\n\nexport class SrtpSession extends Session<SrtpContext> {\n constructor(public config: Config) {\n super(SrtpContext);\n this.start(\n config.keys.localMasterKey,\n config.keys.localMasterSalt,\n config.keys.remoteMasterKey,\n config.keys.remoteMasterSalt,\n config.profile\n );\n }\n\n decrypt = (buf: Buffer) => {\n const [decrypted] = this.remoteContext.decryptRtp(buf);\n return decrypted;\n };\n\n encrypt(payload: Buffer, header: RtpHeader) {\n return this.localContext.encryptRtp(payload, header);\n }\n}\n"]}
1
+ {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtp.ts"],"names":[],"mappings":";;;AACA,yCAA6C;AAC7C,uCAA4C;AAE5C,MAAa,WAAY,SAAQ,iBAAoB;IACnD,YAAmB,MAAc;QAC/B,KAAK,CAAC,kBAAW,CAAC,CAAC;QADT;;;;mBAAO,MAAM;WAAQ;QAWjC;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACvD,OAAO,SAAS,CAAC;YACnB,CAAC;WAAC;QAZA,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAC5B,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAOD,OAAO,CAAC,OAAe,EAAE,MAAiB;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;CACF;AApBD,kCAoBC","sourcesContent":["import { RtpHeader } from \"../rtp/rtp\";\nimport { SrtpContext } from \"./context/srtp\";\nimport { Config, Session } from \"./session\";\n\nexport class SrtpSession extends Session<SrtpContext> {\n constructor(public config: Config) {\n super(SrtpContext);\n this.start(\n config.keys.localMasterKey,\n config.keys.localMasterSalt,\n config.keys.remoteMasterKey,\n config.keys.remoteMasterSalt,\n config.profile\n );\n }\n\n decrypt = (buf: Buffer) => {\n const [decrypted] = this.remoteContext.decryptRtp(buf);\n return decrypted;\n };\n\n encrypt(payload: Buffer, header: RtpHeader) {\n return this.localContext.encryptRtp(payload, header);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../rtp/src/util.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;AAC5E,mCAAiD;AAEjD,MAAa,UAAU;IAIrB,YACU,KAGP;;;;;mBAHO;;QAJV;;;;mBAAiB,IAAA,cAAQ,GAAE;WAAC;QAC5B;;;;mBAAY,IAAA,cAAQ,GAAE;WAAC;IAOpB,CAAC;IAEJ,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,cAAc,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,eAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3BD,gCA2BC","sourcesContent":["import { random16, random32, uint16Add, uint32Add } from \"../../common/src\";\nimport { RtpHeader, RtpPacket } from \"./rtp/rtp\";\n\nexport class RtpBuilder {\n sequenceNumber = random16();\n timestamp = random32();\n\n constructor(\n private props: {\n between: number;\n clockRate: number;\n }\n ) {}\n\n create(payload: Buffer) {\n this.sequenceNumber = uint16Add(this.sequenceNumber, 1);\n const elapsed = (this.props.between * this.props.clockRate) / 1000;\n this.timestamp = uint32Add(this.timestamp, elapsed);\n\n const header = new RtpHeader({\n sequenceNumber: this.sequenceNumber,\n timestamp: Number(this.timestamp),\n payloadType: 96,\n extension: true,\n marker: false,\n padding: false,\n });\n const rtp = new RtpPacket(header, payload);\n return rtp;\n }\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../rtp/src/util.ts"],"names":[],"mappings":";;;AAAA,0CAA4E;AAC5E,mCAAiD;AAEjD,MAAa,UAAU;IAIrB,YACU,KAGP;QAHD;;;;mBAAQ,KAAK;WAGZ;QAPH;;;;mBAAiB,IAAA,cAAQ,GAAE;WAAC;QAC5B;;;;mBAAY,IAAA,cAAQ,GAAE;WAAC;IAOpB,CAAC;IAEJ,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,cAAc,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,IAAA,eAAS,EAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,eAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA3BD,gCA2BC","sourcesContent":["import { random16, random32, uint16Add, uint32Add } from \"../../common/src\";\nimport { RtpHeader, RtpPacket } from \"./rtp/rtp\";\n\nexport class RtpBuilder {\n sequenceNumber = random16();\n timestamp = random32();\n\n constructor(\n private props: {\n between: number;\n clockRate: number;\n }\n ) {}\n\n create(payload: Buffer) {\n this.sequenceNumber = uint16Add(this.sequenceNumber, 1);\n const elapsed = (this.props.between * this.props.clockRate) / 1000;\n this.timestamp = uint32Add(this.timestamp, elapsed);\n\n const header = new RtpHeader({\n sequenceNumber: this.sequenceNumber,\n timestamp: Number(this.timestamp),\n payloadType: 96,\n extension: true,\n marker: false,\n padding: false,\n });\n const rtp = new RtpPacket(header, payload);\n return rtp;\n }\n}\n"]}
@@ -64,13 +64,13 @@ class Chunk {
64
64
  return data;
65
65
  }
66
66
  }
67
- exports.Chunk = Chunk;
68
67
  Object.defineProperty(Chunk, "type", {
69
68
  enumerable: true,
70
69
  configurable: true,
71
70
  writable: true,
72
71
  value: -1
73
72
  });
73
+ exports.Chunk = Chunk;
74
74
  class BaseInitChunk extends Chunk {
75
75
  constructor(flags = 0, body) {
76
76
  super(flags, body);
@@ -153,37 +153,37 @@ class InitChunk extends BaseInitChunk {
153
153
  return InitChunk.type;
154
154
  }
155
155
  }
156
- exports.InitChunk = InitChunk;
157
156
  Object.defineProperty(InitChunk, "type", {
158
157
  enumerable: true,
159
158
  configurable: true,
160
159
  writable: true,
161
160
  value: 1
162
161
  });
162
+ exports.InitChunk = InitChunk;
163
163
  class InitAckChunk extends BaseInitChunk {
164
164
  get type() {
165
165
  return InitAckChunk.type;
166
166
  }
167
167
  }
168
- exports.InitAckChunk = InitAckChunk;
169
168
  Object.defineProperty(InitAckChunk, "type", {
170
169
  enumerable: true,
171
170
  configurable: true,
172
171
  writable: true,
173
172
  value: 2
174
173
  });
174
+ exports.InitAckChunk = InitAckChunk;
175
175
  class ReConfigChunk extends BaseInitChunk {
176
176
  get type() {
177
177
  return ReConfigChunk.type;
178
178
  }
179
179
  }
180
- exports.ReConfigChunk = ReConfigChunk;
181
180
  Object.defineProperty(ReConfigChunk, "type", {
182
181
  enumerable: true,
183
182
  configurable: true,
184
183
  writable: true,
185
184
  value: 130
186
185
  });
186
+ exports.ReConfigChunk = ReConfigChunk;
187
187
  class ForwardTsnChunk extends Chunk {
188
188
  constructor(flags = 0, body) {
189
189
  super(flags, body);
@@ -229,13 +229,13 @@ class ForwardTsnChunk extends Chunk {
229
229
  ]);
230
230
  }
231
231
  }
232
- exports.ForwardTsnChunk = ForwardTsnChunk;
233
232
  Object.defineProperty(ForwardTsnChunk, "type", {
234
233
  enumerable: true,
235
234
  configurable: true,
236
235
  writable: true,
237
236
  value: 192
238
237
  });
238
+ exports.ForwardTsnChunk = ForwardTsnChunk;
239
239
  class DataChunk extends Chunk {
240
240
  get type() {
241
241
  return DataChunk.type;
@@ -361,37 +361,37 @@ class DataChunk extends Chunk {
361
361
  return data;
362
362
  }
363
363
  }
364
- exports.DataChunk = DataChunk;
365
364
  Object.defineProperty(DataChunk, "type", {
366
365
  enumerable: true,
367
366
  configurable: true,
368
367
  writable: true,
369
368
  value: 0
370
369
  });
370
+ exports.DataChunk = DataChunk;
371
371
  class CookieEchoChunk extends Chunk {
372
372
  get type() {
373
373
  return CookieEchoChunk.type;
374
374
  }
375
375
  }
376
- exports.CookieEchoChunk = CookieEchoChunk;
377
376
  Object.defineProperty(CookieEchoChunk, "type", {
378
377
  enumerable: true,
379
378
  configurable: true,
380
379
  writable: true,
381
380
  value: 10
382
381
  });
382
+ exports.CookieEchoChunk = CookieEchoChunk;
383
383
  class CookieAckChunk extends Chunk {
384
384
  get type() {
385
385
  return CookieAckChunk.type;
386
386
  }
387
387
  }
388
- exports.CookieAckChunk = CookieAckChunk;
389
388
  Object.defineProperty(CookieAckChunk, "type", {
390
389
  enumerable: true,
391
390
  configurable: true,
392
391
  writable: true,
393
392
  value: 11
394
393
  });
394
+ exports.CookieAckChunk = CookieAckChunk;
395
395
  class BaseParamsChunk extends Chunk {
396
396
  constructor(flags = 0, body = undefined) {
397
397
  super(flags, body);
@@ -421,13 +421,13 @@ class AbortChunk extends BaseParamsChunk {
421
421
  return AbortChunk.type;
422
422
  }
423
423
  }
424
- exports.AbortChunk = AbortChunk;
425
424
  Object.defineProperty(AbortChunk, "type", {
426
425
  enumerable: true,
427
426
  configurable: true,
428
427
  writable: true,
429
428
  value: 6
430
429
  });
430
+ exports.AbortChunk = AbortChunk;
431
431
  class ErrorChunk extends BaseParamsChunk {
432
432
  get type() {
433
433
  return ErrorChunk.type;
@@ -439,7 +439,6 @@ class ErrorChunk extends BaseParamsChunk {
439
439
  });
440
440
  }
441
441
  }
442
- exports.ErrorChunk = ErrorChunk;
443
442
  Object.defineProperty(ErrorChunk, "type", {
444
443
  enumerable: true,
445
444
  configurable: true,
@@ -466,30 +465,31 @@ Object.defineProperty(ErrorChunk, "CODE", {
466
465
  ProtocolViolation: 13,
467
466
  }
468
467
  });
468
+ exports.ErrorChunk = ErrorChunk;
469
469
  class HeartbeatChunk extends BaseParamsChunk {
470
470
  get type() {
471
471
  return HeartbeatChunk.type;
472
472
  }
473
473
  }
474
- exports.HeartbeatChunk = HeartbeatChunk;
475
474
  Object.defineProperty(HeartbeatChunk, "type", {
476
475
  enumerable: true,
477
476
  configurable: true,
478
477
  writable: true,
479
478
  value: 4
480
479
  });
480
+ exports.HeartbeatChunk = HeartbeatChunk;
481
481
  class HeartbeatAckChunk extends BaseParamsChunk {
482
482
  get type() {
483
483
  return HeartbeatAckChunk.type;
484
484
  }
485
485
  }
486
- exports.HeartbeatAckChunk = HeartbeatAckChunk;
487
486
  Object.defineProperty(HeartbeatAckChunk, "type", {
488
487
  enumerable: true,
489
488
  configurable: true,
490
489
  writable: true,
491
490
  value: 5
492
491
  });
492
+ exports.HeartbeatAckChunk = HeartbeatAckChunk;
493
493
  // https://tools.ietf.org/html/rfc6525#section-3.1
494
494
  // chunkReconfig represents an SCTP Chunk used to reconfigure streams.
495
495
  //
@@ -511,13 +511,13 @@ class ReconfigChunk extends BaseParamsChunk {
511
511
  return ReconfigChunk.type;
512
512
  }
513
513
  }
514
- exports.ReconfigChunk = ReconfigChunk;
515
514
  Object.defineProperty(ReconfigChunk, "type", {
516
515
  enumerable: true,
517
516
  configurable: true,
518
517
  writable: true,
519
518
  value: 130
520
519
  });
520
+ exports.ReconfigChunk = ReconfigChunk;
521
521
  class SackChunk extends Chunk {
522
522
  get type() {
523
523
  return SackChunk.type;
@@ -591,13 +591,13 @@ class SackChunk extends Chunk {
591
591
  return data;
592
592
  }
593
593
  }
594
- exports.SackChunk = SackChunk;
595
594
  Object.defineProperty(SackChunk, "type", {
596
595
  enumerable: true,
597
596
  configurable: true,
598
597
  writable: true,
599
598
  value: 3
600
599
  });
600
+ exports.SackChunk = SackChunk;
601
601
  class ShutdownChunk extends Chunk {
602
602
  get type() {
603
603
  return ShutdownChunk.type;
@@ -624,37 +624,37 @@ class ShutdownChunk extends Chunk {
624
624
  return Buffer.from(jspack_1.jspack.Pack("!L", [this.cumulativeTsn]));
625
625
  }
626
626
  }
627
- exports.ShutdownChunk = ShutdownChunk;
628
627
  Object.defineProperty(ShutdownChunk, "type", {
629
628
  enumerable: true,
630
629
  configurable: true,
631
630
  writable: true,
632
631
  value: 7
633
632
  });
633
+ exports.ShutdownChunk = ShutdownChunk;
634
634
  class ShutdownAckChunk extends Chunk {
635
635
  get type() {
636
636
  return ShutdownAckChunk.type;
637
637
  }
638
638
  }
639
- exports.ShutdownAckChunk = ShutdownAckChunk;
640
639
  Object.defineProperty(ShutdownAckChunk, "type", {
641
640
  enumerable: true,
642
641
  configurable: true,
643
642
  writable: true,
644
643
  value: 8
645
644
  });
645
+ exports.ShutdownAckChunk = ShutdownAckChunk;
646
646
  class ShutdownCompleteChunk extends Chunk {
647
647
  get type() {
648
648
  return ShutdownCompleteChunk.type;
649
649
  }
650
650
  }
651
- exports.ShutdownCompleteChunk = ShutdownCompleteChunk;
652
651
  Object.defineProperty(ShutdownCompleteChunk, "type", {
653
652
  enumerable: true,
654
653
  configurable: true,
655
654
  writable: true,
656
655
  value: 14
657
656
  });
657
+ exports.ShutdownCompleteChunk = ShutdownCompleteChunk;
658
658
  const CHUNK_CLASSES = [
659
659
  DataChunk,
660
660
  InitChunk,
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../../sctp/src/chunk.ts"],"names":[],"mappings":"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","sourcesContent":["// ID Value Chunk Type\n// ----- ----------\n// 0 - Payload Data (DATA)\n// 1 - Initiation (INIT)\n// 2 - Initiation Acknowledgement (INIT ACK)\n// 3 - Selective Acknowledgement (SACK)\n// 4 - Heartbeat Request (HEARTBEAT)\n// 5 - Heartbeat Acknowledgement (HEARTBEAT ACK)\n// 6 - Abort (ABORT)\n// 7 - Shutdown (SHUTDOWN)\n// 8 - Shutdown Acknowledgement (SHUTDOWN ACK)\n// 9 - Operation Error (ERROR)\n// 10 - State Cookie (COOKIE ECHO)\n// 11 - Cookie Acknowledgement (COOKIE ACK)\n// 12 - Reserved for Explicit Congestion Notification Echo\n// (ECNE)\n// 13 - Reserved for Congestion Window Reduced (CWR)\n// 14 - Shutdown Complete (SHUTDOWN COMPLETE)\n// 15 to 62 - available\n// 63 - reserved for IETF-defined Chunk Extensions\n// 64 to 126 - available\n// 127 - reserved for IETF-defined Chunk Extensions\n// 128 to 190 - available\n// 191 - reserved for IETF-defined Chunk Extensions\n// 192 to 254 - available\n// 255 - reserved for IETF-defined Chunk Extensions\n\nimport { jspack } from \"jspack\";\nconst crc32c = require(\"turbo-crc32/crc32c\");\n\nexport class Chunk {\n public get body(): Buffer | undefined {\n return this._body;\n }\n public set body(value: Buffer | undefined) {\n this._body = value;\n }\n static type = -1;\n\n constructor(\n public flags = 0,\n private _body: Buffer | undefined = Buffer.from(\"\")\n ) {}\n\n get type() {\n return Chunk.type;\n }\n\n get bytes() {\n if (!this.body) throw new Error();\n\n const data = Buffer.concat([\n Buffer.from(\n jspack.Pack(\"!BBH\", [this.type, this.flags, this.body.length + 4])\n ),\n this.body,\n ...[...Array(padL(this.body.length))].map(() => Buffer.from(\"\\x00\")),\n ]);\n return data;\n }\n}\n\nexport class BaseInitChunk extends Chunk {\n initiateTag: number;\n advertisedRwnd: number;\n outboundStreams: number;\n inboundStreams: number;\n initialTsn: number;\n params: [number, Buffer][];\n constructor(public flags = 0, body?: Buffer) {\n super(flags, body);\n\n if (body) {\n [\n this.initiateTag,\n this.advertisedRwnd,\n this.outboundStreams,\n this.inboundStreams,\n this.initialTsn,\n ] = jspack.Unpack(\"!LLHHL\", body);\n this.params = decodeParams(body.slice(16));\n } else {\n this.initiateTag = 0;\n this.advertisedRwnd = 0;\n this.outboundStreams = 0;\n this.inboundStreams = 0;\n this.initialTsn = 0;\n this.params = [];\n }\n }\n\n get body() {\n let body = Buffer.from(\n jspack.Pack(\"!LLHHL\", [\n this.initiateTag,\n this.advertisedRwnd,\n this.outboundStreams,\n this.inboundStreams,\n this.initialTsn,\n ])\n );\n body = Buffer.concat([body, encodeParams(this.params)]);\n return body;\n }\n}\n\nexport class InitChunk extends BaseInitChunk {\n static type = 1 as const;\n\n get type() {\n return InitChunk.type;\n }\n}\n\nexport class InitAckChunk extends BaseInitChunk {\n static type = 2 as const;\n\n get type() {\n return InitAckChunk.type;\n }\n}\n\nexport class ReConfigChunk extends BaseInitChunk {\n static type = 130 as const;\n\n get type() {\n return ReConfigChunk.type;\n }\n}\n\nexport class ForwardTsnChunk extends Chunk {\n static type = 192 as const;\n streams: [number, number][] = [];\n cumulativeTsn: number;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n this.cumulativeTsn = jspack.Unpack(\"!L\", body)[0];\n let pos = 4;\n while (pos < body.length) {\n this.streams.push(\n jspack.Unpack(\"!HH\", body.slice(pos)) as [number, number]\n );\n pos += 4;\n }\n } else {\n this.cumulativeTsn = 0;\n }\n }\n\n get type() {\n return ForwardTsnChunk.type;\n }\n\n set body(_: Buffer) {}\n\n get body() {\n const body = Buffer.from(jspack.Pack(\"!L\", [this.cumulativeTsn]));\n return Buffer.concat([\n body,\n ...this.streams.map(([id, seq]) =>\n Buffer.from(jspack.Pack(\"!HH\", [id, seq]))\n ),\n ]);\n }\n}\n\nexport class DataChunk extends Chunk {\n static type = 0 as const;\n get type() {\n return DataChunk.type;\n }\n tsn: number = 0;\n streamId: number = 0;\n streamSeqNum: number = 0;\n protocol: number = 0;\n userData: Buffer = Buffer.from(\"\");\n abandoned: boolean = false;\n acked: boolean = false;\n misses: number = 0;\n retransmit: boolean = false;\n sentCount: number = 0;\n bookSize: number = 0;\n expiry?: number;\n maxRetransmits?: number;\n sentTime?: number;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n if (body) {\n [this.tsn, this.streamId, this.streamSeqNum, this.protocol] =\n jspack.Unpack(\"!LHHL\", body);\n this.userData = body.slice(12);\n }\n }\n\n get bytes() {\n const length = 16 + this.userData.length;\n let data = Buffer.concat([\n Buffer.from(\n jspack.Pack(\"!BBHLHHL\", [\n this.type,\n this.flags,\n length,\n this.tsn,\n this.streamId,\n this.streamSeqNum,\n this.protocol,\n ])\n ),\n this.userData,\n ]);\n if (length % 4) {\n data = Buffer.concat([\n data,\n ...[...Array(padL(length))].map(() => Buffer.from(\"\\x00\")),\n ]);\n }\n return data;\n }\n}\n\nexport class CookieEchoChunk extends Chunk {\n static type = 10 as const;\n\n get type() {\n return CookieEchoChunk.type;\n }\n}\n\nexport class CookieAckChunk extends Chunk {\n static type = 11 as const;\n\n get type() {\n return CookieAckChunk.type;\n }\n}\n\nexport class BaseParamsChunk extends Chunk {\n params: [number, Buffer][] = [];\n constructor(public flags = 0, body: Buffer | undefined = undefined) {\n super(flags, body);\n if (body) {\n this.params = decodeParams(body);\n }\n }\n\n get body() {\n return encodeParams(this.params);\n }\n}\n\nexport class AbortChunk extends BaseParamsChunk {\n static type = 6 as const;\n\n get type() {\n return AbortChunk.type;\n }\n}\n\nexport class ErrorChunk extends BaseParamsChunk {\n static type = 9 as const;\n static readonly CODE = {\n InvalidStreamIdentifier: 1,\n MissingMandatoryParameter: 2,\n StaleCookieError: 3,\n OutofResource: 4,\n UnresolvableAddress: 5,\n UnrecognizedChunkType: 6,\n InvalidMandatoryParameter: 7,\n UnrecognizedParameters: 8,\n NoUserData: 9,\n CookieReceivedWhileShuttingDown: 10,\n RestartofanAssociationwithNewAddresses: 11,\n UserInitiatedAbort: 12,\n ProtocolViolation: 13,\n } as const;\n\n get type() {\n return ErrorChunk.type;\n }\n\n get descriptions() {\n return this.params.map(([code, body]) => {\n const name = (Object.entries(ErrorChunk.CODE).find(\n ([, num]) => num === code\n ) || [])[0];\n return { name, body };\n });\n }\n}\n\nexport class HeartbeatChunk extends BaseParamsChunk {\n static type = 4 as const;\n\n get type() {\n return HeartbeatChunk.type;\n }\n}\n\nexport class HeartbeatAckChunk extends BaseParamsChunk {\n static type = 5 as const;\n\n get type() {\n return HeartbeatAckChunk.type;\n }\n}\n\n// https://tools.ietf.org/html/rfc6525#section-3.1\n// chunkReconfig represents an SCTP Chunk used to reconfigure streams.\n//\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Type = 130 | Chunk Flags | Chunk Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// \\ \\\n// / Re-configuration Parameter /\n// \\ \\\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// \\ \\\n// / Re-configuration Parameter (optional) /\n// \\ \\\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class ReconfigChunk extends BaseParamsChunk {\n static type = 130 as const;\n\n get type() {\n return ReconfigChunk.type;\n }\n}\n\nexport class SackChunk extends Chunk {\n static type = 3;\n get type() {\n return SackChunk.type;\n }\n\n gaps: [number, number][] = [];\n duplicates: number[] = [];\n cumulativeTsn = 0;\n advertisedRwnd = 0;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n const [cumulativeTsn, advertisedRwnd, nbGaps, nbDuplicates] =\n jspack.Unpack(\"!LLHH\", body);\n this.cumulativeTsn = cumulativeTsn;\n this.advertisedRwnd = advertisedRwnd;\n\n let pos = 12;\n\n [...Array(nbGaps)].forEach(() => {\n this.gaps.push(\n jspack.Unpack(\"!HH\", body.slice(pos)) as [number, number]\n );\n pos += 4;\n });\n\n [...Array(nbDuplicates)].forEach(() => {\n this.duplicates.push(jspack.Unpack(\"!L\", body.slice(pos))[0]);\n pos += 4;\n });\n }\n }\n\n get bytes() {\n const length = 16 + 4 * (this.gaps.length + this.duplicates.length);\n let data = Buffer.from(\n jspack.Pack(\"!BBHLLHH\", [\n this.type,\n this.flags,\n length,\n this.cumulativeTsn,\n this.advertisedRwnd,\n this.gaps.length,\n this.duplicates.length,\n ])\n );\n data = Buffer.concat([\n data,\n ...this.gaps.map((gap) => Buffer.from(jspack.Pack(\"!HH\", gap))),\n ]);\n data = Buffer.concat([\n data,\n ...this.duplicates.map((tsn) => Buffer.from(jspack.Pack(\"!L\", [tsn]))),\n ]);\n return data;\n }\n}\n\nexport class ShutdownChunk extends Chunk {\n static type = 7;\n get type() {\n return ShutdownChunk.type;\n }\n\n cumulativeTsn = 0;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n this.cumulativeTsn = jspack.Unpack(\"!L\", body)[0];\n }\n }\n\n get body() {\n return Buffer.from(jspack.Pack(\"!L\", [this.cumulativeTsn]));\n }\n}\n\nexport class ShutdownAckChunk extends Chunk {\n static type = 8;\n get type() {\n return ShutdownAckChunk.type;\n }\n}\n\nexport class ShutdownCompleteChunk extends Chunk {\n static type = 14;\n get type() {\n return ShutdownCompleteChunk.type;\n }\n}\n\nconst CHUNK_CLASSES: typeof Chunk[] = [\n DataChunk,\n InitChunk,\n InitAckChunk,\n SackChunk,\n HeartbeatChunk,\n HeartbeatAckChunk,\n AbortChunk,\n ShutdownChunk,\n ShutdownAckChunk,\n ErrorChunk,\n CookieEchoChunk,\n CookieAckChunk,\n ShutdownCompleteChunk,\n ReconfigChunk,\n ForwardTsnChunk,\n];\n\nexport const CHUNK_BY_TYPE = CHUNK_CLASSES.reduce(\n (acc: { [key: string]: typeof Chunk }, cur) => {\n acc[cur.type] = cur;\n return acc;\n },\n {}\n);\n\nfunction padL(l: number) {\n const m = l % 4;\n return m ? 4 - m : 0;\n}\n\nfunction encodeParams(params: [number, Buffer][]) {\n let body = Buffer.from(\"\");\n let padding = Buffer.from(\"\");\n params.forEach(([type, value]) => {\n const length = value.length + 4;\n body = Buffer.concat([\n body,\n padding,\n Buffer.from(jspack.Pack(\"!HH\", [type, length])),\n value,\n ]);\n padding = Buffer.concat(\n [...Array(padL(length))].map(() => Buffer.from(\"\\x00\"))\n );\n });\n return body;\n}\n\nexport function decodeParams(body: Buffer): [number, Buffer][] {\n const params: [number, Buffer][] = [];\n let pos = 0;\n while (pos <= body.length - 4) {\n const [type, length] = jspack.Unpack(\"!HH\", body.slice(pos));\n params.push([type, body.slice(pos + 4, pos + length)]);\n pos += length + padL(length);\n }\n return params;\n}\n\nexport function parsePacket(data: Buffer): [number, number, number, Chunk[]] {\n if (data.length < 12)\n throw new Error(\"SCTP packet length is less than 12 bytes\");\n\n const [sourcePort, destinationPort, verificationTag] = jspack.Unpack(\n \"!HHL\",\n data\n );\n\n const checkSum = data.readUInt32LE(8);\n\n const expect = crc32c(\n Buffer.concat([\n data.slice(0, 8),\n Buffer.from(\"\\x00\\x00\\x00\\x00\"),\n data.slice(12),\n ])\n );\n\n if (checkSum !== expect) throw new Error(\"SCTP packet has invalid checksum\");\n\n const chunks: Chunk[] = [];\n let pos = 12;\n while (pos + 4 <= data.length) {\n const [chunkType, chunkFlags, chunkLength] = jspack.Unpack(\n \"!BBH\",\n data.slice(pos)\n );\n const chunkBody = data.slice(pos + 4, pos + chunkLength);\n const ChunkClass = CHUNK_BY_TYPE[chunkType.toString()];\n if (ChunkClass) {\n chunks.push(new ChunkClass(chunkFlags, chunkBody));\n } else {\n throw new Error(\"unknown\");\n }\n pos += chunkLength + padL(chunkLength);\n }\n return [sourcePort, destinationPort, verificationTag, chunks];\n}\n\nexport function serializePacket(\n sourcePort: number,\n destinationPort: number,\n verificationTag: number,\n chunk: Chunk\n) {\n const header = Buffer.from(\n jspack.Pack(\"!HHL\", [sourcePort, destinationPort, verificationTag])\n );\n const body = chunk.bytes;\n\n const checksum: number = crc32c(\n Buffer.concat([header, Buffer.from(\"\\x00\\x00\\x00\\x00\"), body])\n );\n const checkSumBuf = Buffer.alloc(4);\n checkSumBuf.writeUInt32LE(checksum, 0);\n\n const packet = Buffer.concat([header, checkSumBuf, body]);\n\n return packet;\n}\n"]}
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../../sctp/src/chunk.ts"],"names":[],"mappings":"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","sourcesContent":["// ID Value Chunk Type\n// ----- ----------\n// 0 - Payload Data (DATA)\n// 1 - Initiation (INIT)\n// 2 - Initiation Acknowledgement (INIT ACK)\n// 3 - Selective Acknowledgement (SACK)\n// 4 - Heartbeat Request (HEARTBEAT)\n// 5 - Heartbeat Acknowledgement (HEARTBEAT ACK)\n// 6 - Abort (ABORT)\n// 7 - Shutdown (SHUTDOWN)\n// 8 - Shutdown Acknowledgement (SHUTDOWN ACK)\n// 9 - Operation Error (ERROR)\n// 10 - State Cookie (COOKIE ECHO)\n// 11 - Cookie Acknowledgement (COOKIE ACK)\n// 12 - Reserved for Explicit Congestion Notification Echo\n// (ECNE)\n// 13 - Reserved for Congestion Window Reduced (CWR)\n// 14 - Shutdown Complete (SHUTDOWN COMPLETE)\n// 15 to 62 - available\n// 63 - reserved for IETF-defined Chunk Extensions\n// 64 to 126 - available\n// 127 - reserved for IETF-defined Chunk Extensions\n// 128 to 190 - available\n// 191 - reserved for IETF-defined Chunk Extensions\n// 192 to 254 - available\n// 255 - reserved for IETF-defined Chunk Extensions\n\nimport { jspack } from \"jspack\";\nconst crc32c = require(\"turbo-crc32/crc32c\");\n\nexport class Chunk {\n public get body(): Buffer | undefined {\n return this._body;\n }\n public set body(value: Buffer | undefined) {\n this._body = value;\n }\n static type = -1;\n\n constructor(\n public flags = 0,\n private _body: Buffer | undefined = Buffer.from(\"\")\n ) {}\n\n get type() {\n return Chunk.type;\n }\n\n get bytes() {\n if (!this.body) throw new Error();\n\n const data = Buffer.concat([\n Buffer.from(\n jspack.Pack(\"!BBH\", [this.type, this.flags, this.body.length + 4])\n ),\n this.body,\n ...[...Array(padL(this.body.length))].map(() => Buffer.from(\"\\x00\")),\n ]);\n return data;\n }\n}\n\nexport class BaseInitChunk extends Chunk {\n initiateTag: number;\n advertisedRwnd: number;\n outboundStreams: number;\n inboundStreams: number;\n initialTsn: number;\n params: [number, Buffer][];\n constructor(public flags = 0, body?: Buffer) {\n super(flags, body);\n\n if (body) {\n [\n this.initiateTag,\n this.advertisedRwnd,\n this.outboundStreams,\n this.inboundStreams,\n this.initialTsn,\n ] = jspack.Unpack(\"!LLHHL\", body);\n this.params = decodeParams(body.slice(16));\n } else {\n this.initiateTag = 0;\n this.advertisedRwnd = 0;\n this.outboundStreams = 0;\n this.inboundStreams = 0;\n this.initialTsn = 0;\n this.params = [];\n }\n }\n\n get body() {\n let body = Buffer.from(\n jspack.Pack(\"!LLHHL\", [\n this.initiateTag,\n this.advertisedRwnd,\n this.outboundStreams,\n this.inboundStreams,\n this.initialTsn,\n ])\n );\n body = Buffer.concat([body, encodeParams(this.params)]);\n return body;\n }\n}\n\nexport class InitChunk extends BaseInitChunk {\n static type = 1 as const;\n\n get type() {\n return InitChunk.type;\n }\n}\n\nexport class InitAckChunk extends BaseInitChunk {\n static type = 2 as const;\n\n get type() {\n return InitAckChunk.type;\n }\n}\n\nexport class ReConfigChunk extends BaseInitChunk {\n static type = 130 as const;\n\n get type() {\n return ReConfigChunk.type;\n }\n}\n\nexport class ForwardTsnChunk extends Chunk {\n static type = 192 as const;\n streams: [number, number][] = [];\n cumulativeTsn: number;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n this.cumulativeTsn = jspack.Unpack(\"!L\", body)[0];\n let pos = 4;\n while (pos < body.length) {\n this.streams.push(\n jspack.Unpack(\"!HH\", body.slice(pos)) as [number, number]\n );\n pos += 4;\n }\n } else {\n this.cumulativeTsn = 0;\n }\n }\n\n get type() {\n return ForwardTsnChunk.type;\n }\n\n set body(_: Buffer) {}\n\n get body() {\n const body = Buffer.from(jspack.Pack(\"!L\", [this.cumulativeTsn]));\n return Buffer.concat([\n body,\n ...this.streams.map(([id, seq]) =>\n Buffer.from(jspack.Pack(\"!HH\", [id, seq]))\n ),\n ]);\n }\n}\n\nexport class DataChunk extends Chunk {\n static type = 0 as const;\n get type() {\n return DataChunk.type;\n }\n tsn: number = 0;\n streamId: number = 0;\n streamSeqNum: number = 0;\n protocol: number = 0;\n userData: Buffer = Buffer.from(\"\");\n abandoned: boolean = false;\n acked: boolean = false;\n misses: number = 0;\n retransmit: boolean = false;\n sentCount: number = 0;\n bookSize: number = 0;\n expiry?: number;\n maxRetransmits?: number;\n sentTime?: number;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n if (body) {\n [this.tsn, this.streamId, this.streamSeqNum, this.protocol] =\n jspack.Unpack(\"!LHHL\", body);\n this.userData = body.slice(12);\n }\n }\n\n get bytes() {\n const length = 16 + this.userData.length;\n let data = Buffer.concat([\n Buffer.from(\n jspack.Pack(\"!BBHLHHL\", [\n this.type,\n this.flags,\n length,\n this.tsn,\n this.streamId,\n this.streamSeqNum,\n this.protocol,\n ])\n ),\n this.userData,\n ]);\n if (length % 4) {\n data = Buffer.concat([\n data,\n ...[...Array(padL(length))].map(() => Buffer.from(\"\\x00\")),\n ]);\n }\n return data;\n }\n}\n\nexport class CookieEchoChunk extends Chunk {\n static type = 10 as const;\n\n get type() {\n return CookieEchoChunk.type;\n }\n}\n\nexport class CookieAckChunk extends Chunk {\n static type = 11 as const;\n\n get type() {\n return CookieAckChunk.type;\n }\n}\n\nexport class BaseParamsChunk extends Chunk {\n params: [number, Buffer][] = [];\n constructor(public flags = 0, body: Buffer | undefined = undefined) {\n super(flags, body);\n if (body) {\n this.params = decodeParams(body);\n }\n }\n\n get body() {\n return encodeParams(this.params);\n }\n}\n\nexport class AbortChunk extends BaseParamsChunk {\n static type = 6 as const;\n\n get type() {\n return AbortChunk.type;\n }\n}\n\nexport class ErrorChunk extends BaseParamsChunk {\n static type = 9 as const;\n static readonly CODE = {\n InvalidStreamIdentifier: 1,\n MissingMandatoryParameter: 2,\n StaleCookieError: 3,\n OutofResource: 4,\n UnresolvableAddress: 5,\n UnrecognizedChunkType: 6,\n InvalidMandatoryParameter: 7,\n UnrecognizedParameters: 8,\n NoUserData: 9,\n CookieReceivedWhileShuttingDown: 10,\n RestartofanAssociationwithNewAddresses: 11,\n UserInitiatedAbort: 12,\n ProtocolViolation: 13,\n } as const;\n\n get type() {\n return ErrorChunk.type;\n }\n\n get descriptions() {\n return this.params.map(([code, body]) => {\n const name = (Object.entries(ErrorChunk.CODE).find(\n ([, num]) => num === code\n ) || [])[0];\n return { name, body };\n });\n }\n}\n\nexport class HeartbeatChunk extends BaseParamsChunk {\n static type = 4 as const;\n\n get type() {\n return HeartbeatChunk.type;\n }\n}\n\nexport class HeartbeatAckChunk extends BaseParamsChunk {\n static type = 5 as const;\n\n get type() {\n return HeartbeatAckChunk.type;\n }\n}\n\n// https://tools.ietf.org/html/rfc6525#section-3.1\n// chunkReconfig represents an SCTP Chunk used to reconfigure streams.\n//\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Type = 130 | Chunk Flags | Chunk Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// \\ \\\n// / Re-configuration Parameter /\n// \\ \\\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// \\ \\\n// / Re-configuration Parameter (optional) /\n// \\ \\\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class ReconfigChunk extends BaseParamsChunk {\n static type = 130 as const;\n\n get type() {\n return ReconfigChunk.type;\n }\n}\n\nexport class SackChunk extends Chunk {\n static type = 3;\n get type() {\n return SackChunk.type;\n }\n\n gaps: [number, number][] = [];\n duplicates: number[] = [];\n cumulativeTsn = 0;\n advertisedRwnd = 0;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n const [cumulativeTsn, advertisedRwnd, nbGaps, nbDuplicates] =\n jspack.Unpack(\"!LLHH\", body);\n this.cumulativeTsn = cumulativeTsn;\n this.advertisedRwnd = advertisedRwnd;\n\n let pos = 12;\n\n [...Array(nbGaps)].forEach(() => {\n this.gaps.push(\n jspack.Unpack(\"!HH\", body.slice(pos)) as [number, number]\n );\n pos += 4;\n });\n\n [...Array(nbDuplicates)].forEach(() => {\n this.duplicates.push(jspack.Unpack(\"!L\", body.slice(pos))[0]);\n pos += 4;\n });\n }\n }\n\n get bytes() {\n const length = 16 + 4 * (this.gaps.length + this.duplicates.length);\n let data = Buffer.from(\n jspack.Pack(\"!BBHLLHH\", [\n this.type,\n this.flags,\n length,\n this.cumulativeTsn,\n this.advertisedRwnd,\n this.gaps.length,\n this.duplicates.length,\n ])\n );\n data = Buffer.concat([\n data,\n ...this.gaps.map((gap) => Buffer.from(jspack.Pack(\"!HH\", gap))),\n ]);\n data = Buffer.concat([\n data,\n ...this.duplicates.map((tsn) => Buffer.from(jspack.Pack(\"!L\", [tsn]))),\n ]);\n return data;\n }\n}\n\nexport class ShutdownChunk extends Chunk {\n static type = 7;\n get type() {\n return ShutdownChunk.type;\n }\n\n cumulativeTsn = 0;\n\n constructor(public flags = 0, body: Buffer | undefined) {\n super(flags, body);\n\n if (body) {\n this.cumulativeTsn = jspack.Unpack(\"!L\", body)[0];\n }\n }\n\n get body() {\n return Buffer.from(jspack.Pack(\"!L\", [this.cumulativeTsn]));\n }\n}\n\nexport class ShutdownAckChunk extends Chunk {\n static type = 8;\n get type() {\n return ShutdownAckChunk.type;\n }\n}\n\nexport class ShutdownCompleteChunk extends Chunk {\n static type = 14;\n get type() {\n return ShutdownCompleteChunk.type;\n }\n}\n\nconst CHUNK_CLASSES: typeof Chunk[] = [\n DataChunk,\n InitChunk,\n InitAckChunk,\n SackChunk,\n HeartbeatChunk,\n HeartbeatAckChunk,\n AbortChunk,\n ShutdownChunk,\n ShutdownAckChunk,\n ErrorChunk,\n CookieEchoChunk,\n CookieAckChunk,\n ShutdownCompleteChunk,\n ReconfigChunk,\n ForwardTsnChunk,\n];\n\nexport const CHUNK_BY_TYPE = CHUNK_CLASSES.reduce(\n (acc: { [key: string]: typeof Chunk }, cur) => {\n acc[cur.type] = cur;\n return acc;\n },\n {}\n);\n\nfunction padL(l: number) {\n const m = l % 4;\n return m ? 4 - m : 0;\n}\n\nfunction encodeParams(params: [number, Buffer][]) {\n let body = Buffer.from(\"\");\n let padding = Buffer.from(\"\");\n params.forEach(([type, value]) => {\n const length = value.length + 4;\n body = Buffer.concat([\n body,\n padding,\n Buffer.from(jspack.Pack(\"!HH\", [type, length])),\n value,\n ]);\n padding = Buffer.concat(\n [...Array(padL(length))].map(() => Buffer.from(\"\\x00\"))\n );\n });\n return body;\n}\n\nexport function decodeParams(body: Buffer): [number, Buffer][] {\n const params: [number, Buffer][] = [];\n let pos = 0;\n while (pos <= body.length - 4) {\n const [type, length] = jspack.Unpack(\"!HH\", body.slice(pos));\n params.push([type, body.slice(pos + 4, pos + length)]);\n pos += length + padL(length);\n }\n return params;\n}\n\nexport function parsePacket(data: Buffer): [number, number, number, Chunk[]] {\n if (data.length < 12)\n throw new Error(\"SCTP packet length is less than 12 bytes\");\n\n const [sourcePort, destinationPort, verificationTag] = jspack.Unpack(\n \"!HHL\",\n data\n );\n\n const checkSum = data.readUInt32LE(8);\n\n const expect = crc32c(\n Buffer.concat([\n data.slice(0, 8),\n Buffer.from(\"\\x00\\x00\\x00\\x00\"),\n data.slice(12),\n ])\n );\n\n if (checkSum !== expect) throw new Error(\"SCTP packet has invalid checksum\");\n\n const chunks: Chunk[] = [];\n let pos = 12;\n while (pos + 4 <= data.length) {\n const [chunkType, chunkFlags, chunkLength] = jspack.Unpack(\n \"!BBH\",\n data.slice(pos)\n );\n const chunkBody = data.slice(pos + 4, pos + chunkLength);\n const ChunkClass = CHUNK_BY_TYPE[chunkType.toString()];\n if (ChunkClass) {\n chunks.push(new ChunkClass(chunkFlags, chunkBody));\n } else {\n throw new Error(\"unknown\");\n }\n pos += chunkLength + padL(chunkLength);\n }\n return [sourcePort, destinationPort, verificationTag, chunks];\n}\n\nexport function serializePacket(\n sourcePort: number,\n destinationPort: number,\n verificationTag: number,\n chunk: Chunk\n) {\n const header = Buffer.from(\n jspack.Pack(\"!HHL\", [sourcePort, destinationPort, verificationTag])\n );\n const body = chunk.bytes;\n\n const checksum: number = crc32c(\n Buffer.concat([header, Buffer.from(\"\\x00\\x00\\x00\\x00\"), body])\n );\n const checkSumBuf = Buffer.alloc(4);\n checkSumBuf.writeUInt32LE(checksum, 0);\n\n const packet = Buffer.concat([header, checkSumBuf, body]);\n\n return packet;\n}\n"]}
@@ -72,13 +72,13 @@ class OutgoingSSNResetRequestParam {
72
72
  return new OutgoingSSNResetRequestParam(requestSequence, responseSequence, lastTsn, stream);
73
73
  }
74
74
  }
75
- exports.OutgoingSSNResetRequestParam = OutgoingSSNResetRequestParam;
76
75
  Object.defineProperty(OutgoingSSNResetRequestParam, "type", {
77
76
  enumerable: true,
78
77
  configurable: true,
79
78
  writable: true,
80
79
  value: 13
81
80
  }); // Outgoing SSN Reset Request Parameter
81
+ exports.OutgoingSSNResetRequestParam = OutgoingSSNResetRequestParam;
82
82
  class StreamAddOutgoingParam {
83
83
  constructor(requestSequence, newStreams) {
84
84
  Object.defineProperty(this, "requestSequence", {
@@ -105,13 +105,13 @@ class StreamAddOutgoingParam {
105
105
  return new StreamAddOutgoingParam(requestSequence, newStreams);
106
106
  }
107
107
  }
108
- exports.StreamAddOutgoingParam = StreamAddOutgoingParam;
109
108
  Object.defineProperty(StreamAddOutgoingParam, "type", {
110
109
  enumerable: true,
111
110
  configurable: true,
112
111
  writable: true,
113
112
  value: 17
114
113
  }); // Add Outgoing Streams Request Parameter
114
+ exports.StreamAddOutgoingParam = StreamAddOutgoingParam;
115
115
  // This parameter is used by the receiver of a Re-configuration Request
116
116
  // Parameter to respond to the request.
117
117
  //
@@ -158,13 +158,13 @@ class ReconfigResponseParam {
158
158
  return new ReconfigResponseParam(requestSequence, result);
159
159
  }
160
160
  }
161
- exports.ReconfigResponseParam = ReconfigResponseParam;
162
161
  Object.defineProperty(ReconfigResponseParam, "type", {
163
162
  enumerable: true,
164
163
  configurable: true,
165
164
  writable: true,
166
165
  value: 16
167
166
  }); // Re-configuration Response Parameter
167
+ exports.ReconfigResponseParam = ReconfigResponseParam;
168
168
  exports.RECONFIG_PARAM_BY_TYPES = {
169
169
  13: OutgoingSSNResetRequestParam,
170
170
  16: ReconfigResponseParam,
@@ -1 +1 @@
1
- {"version":3,"file":"param.js","sourceRoot":"","sources":["../../../../sctp/src/param.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAgC;AAChC,yDAAiC;AAEjC,uEAAuE;AACvE,wBAAwB;AACxB,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,MAAa,4BAA4B;IAGvC,YACS,eAAuB,EACvB,gBAAwB,EACxB,OAAe,EACf,OAAiB;;;;;mBAHjB;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;IACN,CAAC;IAEJ,IAAI,IAAI;QACN,OAAO,4BAA4B,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK;QACP,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,OAAO;SACb,CAAC,CACH,CAAC;QAEF,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI;YACJ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,eAAM,CAAC,MAAM,CAChE,MAAM,EACN,IAAI,CACL,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;QAEF,OAAO,IAAI,4BAA4B,CACrC,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,MAAM,CACP,CAAC;IACJ,CAAC;;AA5CH,oEA6CC;AA5CQ;;;;WAAO,EAAE;GAAC,CAAC,uCAAuC;AA8C3D,MAAa,sBAAsB;IAGjC,YAAmB,eAAuB,EAAS,UAAkB;;;;;mBAAlD;;;;;;mBAAgC;;IAAqB,CAAC;IAEzE,IAAI,IAAI;QACN,OAAO,sBAAsB,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,MAAM,CAAC,IAAI,CAChB,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,eAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,IAAI,sBAAsB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;;AAlBH,wDAmBC;AAlBQ;;;;WAAO,EAAE;GAAC,CAAC,yCAAyC;AAoB7D,uEAAuE;AACvE,uCAAuC;AACvC,EAAE;AACF,gEAAgE;AAChE,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEvD,QAAA,cAAc,GAAG;IAC5B,8BAA8B,EAAE,CAAC;IACjC,iBAAiB,EAAE,CAAC;CACZ,CAAC;AAGX,MAAa,qBAAqB;IAEhC,YAAmB,gBAAwB,EAAS,MAAsB;;;;;mBAAvD;;;;;;mBAAiC;;IAAyB,CAAC;IAE9E,IAAI,IAAI;QACN,OAAO,qBAAqB,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,MAAM,CAAC,IAAI,CAChB,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,eAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,IAAI,qBAAqB,CAAC,eAAe,EAAE,MAAwB,CAAC,CAAC;IAC9E,CAAC;;AAjBH,sDAkBC;AAjBQ;;;;WAAO,EAAE;GAAC,CAAC,sCAAsC;AA6B7C,QAAA,uBAAuB,GAAwC;IAC1E,EAAE,EAAE,4BAA4B;IAChC,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,sBAAsB,EAAE,yCAAyC;CACtE,CAAC","sourcesContent":["import { jspack } from \"jspack\";\nimport range from \"lodash/range\";\n\n// This parameter is used by the sender to request the reset of some or\n// all outgoing streams.\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Parameter Type = 13 | Parameter Length = 16 + 2 * N |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Request Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Response Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Sender's Last Assigned TSN |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Stream Number 1 (optional) | Stream Number 2 (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// / ...... /\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Stream Number N-1 (optional) | Stream Number N (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport class OutgoingSSNResetRequestParam {\n static type = 13; // Outgoing SSN Reset Request Parameter\n\n constructor(\n public requestSequence: number,\n public responseSequence: number,\n public lastTsn: number,\n public streams: number[]\n ) {}\n\n get type() {\n return OutgoingSSNResetRequestParam.type;\n }\n\n get bytes() {\n const data = Buffer.from(\n jspack.Pack(\"!LLL\", [\n this.requestSequence,\n this.responseSequence,\n this.lastTsn,\n ])\n );\n\n return Buffer.concat([\n data,\n ...this.streams.map((stream) => Buffer.from(jspack.Pack(\"!H\", [stream]))),\n ]);\n }\n\n static parse(data: Buffer) {\n const [requestSequence, responseSequence, lastTsn] = jspack.Unpack(\n \"!LLL\",\n data\n );\n const stream = range(12, data.length, 2).map(\n (pos) => jspack.Unpack(\"!H\", data.slice(pos))[0]\n );\n\n return new OutgoingSSNResetRequestParam(\n requestSequence,\n responseSequence,\n lastTsn,\n stream\n );\n }\n}\n\nexport class StreamAddOutgoingParam {\n static type = 17; // Add Outgoing Streams Request Parameter\n\n constructor(public requestSequence: number, public newStreams: number) {}\n\n get type() {\n return StreamAddOutgoingParam.type;\n }\n\n get bytes() {\n return Buffer.from(\n jspack.Pack(\"!LHH\", [this.requestSequence, this.newStreams, 0])\n );\n }\n\n static parse(data: Buffer) {\n const [requestSequence, newStreams] = jspack.Unpack(\"!LHH\", data);\n return new StreamAddOutgoingParam(requestSequence, newStreams);\n }\n}\n\n// This parameter is used by the receiver of a Re-configuration Request\n// Parameter to respond to the request.\n//\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Parameter Type = 16 | Parameter Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Response Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Result |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Sender's Next TSN (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Receiver's Next TSN (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport const reconfigResult = {\n ReconfigResultSuccessPerformed: 1,\n BadSequenceNumber: 5,\n} as const;\ntype ReconfigResult = typeof reconfigResult[keyof typeof reconfigResult];\n\nexport class ReconfigResponseParam {\n static type = 16; // Re-configuration Response Parameter\n constructor(public responseSequence: number, public result: ReconfigResult) {}\n\n get type() {\n return ReconfigResponseParam.type;\n }\n\n get bytes() {\n return Buffer.from(\n jspack.Pack(\"!LL\", [this.responseSequence, this.result])\n );\n }\n\n static parse(data: Buffer) {\n const [requestSequence, result] = jspack.Unpack(\"!LL\", data);\n return new ReconfigResponseParam(requestSequence, result as ReconfigResult);\n }\n}\n\nexport type StreamParam =\n | OutgoingSSNResetRequestParam\n | StreamAddOutgoingParam\n | ReconfigResponseParam;\n\nexport type StreamParamType =\n | typeof OutgoingSSNResetRequestParam\n | typeof StreamAddOutgoingParam\n | typeof ReconfigResponseParam;\n\nexport const RECONFIG_PARAM_BY_TYPES: { [type: number]: StreamParamType } = {\n 13: OutgoingSSNResetRequestParam, // Outgoing SSN Reset Request Parameter\n 16: ReconfigResponseParam, // Re-configuration Response Parameter\n 17: StreamAddOutgoingParam, // Add Outgoing Streams Request Parameter\n};\n"]}
1
+ {"version":3,"file":"param.js","sourceRoot":"","sources":["../../../../sctp/src/param.ts"],"names":[],"mappings":"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","sourcesContent":["import { jspack } from \"jspack\";\nimport range from \"lodash/range\";\n\n// This parameter is used by the sender to request the reset of some or\n// all outgoing streams.\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Parameter Type = 13 | Parameter Length = 16 + 2 * N |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Request Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Response Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Sender's Last Assigned TSN |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Stream Number 1 (optional) | Stream Number 2 (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// / ...... /\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Stream Number N-1 (optional) | Stream Number N (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport class OutgoingSSNResetRequestParam {\n static type = 13; // Outgoing SSN Reset Request Parameter\n\n constructor(\n public requestSequence: number,\n public responseSequence: number,\n public lastTsn: number,\n public streams: number[]\n ) {}\n\n get type() {\n return OutgoingSSNResetRequestParam.type;\n }\n\n get bytes() {\n const data = Buffer.from(\n jspack.Pack(\"!LLL\", [\n this.requestSequence,\n this.responseSequence,\n this.lastTsn,\n ])\n );\n\n return Buffer.concat([\n data,\n ...this.streams.map((stream) => Buffer.from(jspack.Pack(\"!H\", [stream]))),\n ]);\n }\n\n static parse(data: Buffer) {\n const [requestSequence, responseSequence, lastTsn] = jspack.Unpack(\n \"!LLL\",\n data\n );\n const stream = range(12, data.length, 2).map(\n (pos) => jspack.Unpack(\"!H\", data.slice(pos))[0]\n );\n\n return new OutgoingSSNResetRequestParam(\n requestSequence,\n responseSequence,\n lastTsn,\n stream\n );\n }\n}\n\nexport class StreamAddOutgoingParam {\n static type = 17; // Add Outgoing Streams Request Parameter\n\n constructor(public requestSequence: number, public newStreams: number) {}\n\n get type() {\n return StreamAddOutgoingParam.type;\n }\n\n get bytes() {\n return Buffer.from(\n jspack.Pack(\"!LHH\", [this.requestSequence, this.newStreams, 0])\n );\n }\n\n static parse(data: Buffer) {\n const [requestSequence, newStreams] = jspack.Unpack(\"!LHH\", data);\n return new StreamAddOutgoingParam(requestSequence, newStreams);\n }\n}\n\n// This parameter is used by the receiver of a Re-configuration Request\n// Parameter to respond to the request.\n//\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Parameter Type = 16 | Parameter Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Re-configuration Response Sequence Number |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Result |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Sender's Next TSN (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | Receiver's Next TSN (optional) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport const reconfigResult = {\n ReconfigResultSuccessPerformed: 1,\n BadSequenceNumber: 5,\n} as const;\ntype ReconfigResult = typeof reconfigResult[keyof typeof reconfigResult];\n\nexport class ReconfigResponseParam {\n static type = 16; // Re-configuration Response Parameter\n constructor(public responseSequence: number, public result: ReconfigResult) {}\n\n get type() {\n return ReconfigResponseParam.type;\n }\n\n get bytes() {\n return Buffer.from(\n jspack.Pack(\"!LL\", [this.responseSequence, this.result])\n );\n }\n\n static parse(data: Buffer) {\n const [requestSequence, result] = jspack.Unpack(\"!LL\", data);\n return new ReconfigResponseParam(requestSequence, result as ReconfigResult);\n }\n}\n\nexport type StreamParam =\n | OutgoingSSNResetRequestParam\n | StreamAddOutgoingParam\n | ReconfigResponseParam;\n\nexport type StreamParamType =\n | typeof OutgoingSSNResetRequestParam\n | typeof StreamAddOutgoingParam\n | typeof ReconfigResponseParam;\n\nexport const RECONFIG_PARAM_BY_TYPES: { [type: number]: StreamParamType } = {\n 13: OutgoingSSNResetRequestParam, // Outgoing SSN Reset Request Parameter\n 16: ReconfigResponseParam, // Re-configuration Response Parameter\n 17: StreamAddOutgoingParam, // Add Outgoing Streams Request Parameter\n};\n"]}