mediasoup 3.19.22 → 3.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/node/lib/ActiveSpeakerObserver.js +34 -1
  2. package/node/lib/AudioLevelObserver.js +35 -2
  3. package/node/lib/Channel.d.ts.map +1 -1
  4. package/node/lib/Channel.js +37 -5
  5. package/node/lib/Consumer.js +39 -6
  6. package/node/lib/DataConsumer.d.ts.map +1 -1
  7. package/node/lib/DataConsumer.js +39 -5
  8. package/node/lib/DataConsumerTypes.d.ts +1 -0
  9. package/node/lib/DataConsumerTypes.d.ts.map +1 -1
  10. package/node/lib/DataProducer.js +37 -4
  11. package/node/lib/DirectTransport.js +37 -4
  12. package/node/lib/DirectTransportTypes.d.ts +7 -2
  13. package/node/lib/DirectTransportTypes.d.ts.map +1 -1
  14. package/node/lib/Logger.js +4 -1
  15. package/node/lib/PipeTransport.d.ts +3 -1
  16. package/node/lib/PipeTransport.d.ts.map +1 -1
  17. package/node/lib/PipeTransport.js +56 -5
  18. package/node/lib/PipeTransportTypes.d.ts +28 -8
  19. package/node/lib/PipeTransportTypes.d.ts.map +1 -1
  20. package/node/lib/PlainTransport.d.ts +3 -1
  21. package/node/lib/PlainTransport.d.ts.map +1 -1
  22. package/node/lib/PlainTransport.js +54 -3
  23. package/node/lib/PlainTransportTypes.d.ts +27 -7
  24. package/node/lib/PlainTransportTypes.d.ts.map +1 -1
  25. package/node/lib/Producer.js +40 -7
  26. package/node/lib/Router.d.ts +5 -5
  27. package/node/lib/Router.d.ts.map +1 -1
  28. package/node/lib/Router.js +81 -36
  29. package/node/lib/RouterTypes.d.ts +25 -3
  30. package/node/lib/RouterTypes.d.ts.map +1 -1
  31. package/node/lib/RtpObserver.js +36 -3
  32. package/node/lib/Transport.d.ts +3 -1
  33. package/node/lib/Transport.d.ts.map +1 -1
  34. package/node/lib/Transport.js +74 -22
  35. package/node/lib/TransportTypes.d.ts +2 -1
  36. package/node/lib/TransportTypes.d.ts.map +1 -1
  37. package/node/lib/WebRtcServer.js +36 -3
  38. package/node/lib/WebRtcTransport.d.ts +3 -1
  39. package/node/lib/WebRtcTransport.d.ts.map +1 -1
  40. package/node/lib/WebRtcTransport.js +55 -4
  41. package/node/lib/WebRtcTransportTypes.d.ts +27 -7
  42. package/node/lib/WebRtcTransportTypes.d.ts.map +1 -1
  43. package/node/lib/Worker.d.ts +1 -1
  44. package/node/lib/Worker.d.ts.map +1 -1
  45. package/node/lib/Worker.js +63 -31
  46. package/node/lib/WorkerTypes.d.ts +0 -4
  47. package/node/lib/WorkerTypes.d.ts.map +1 -1
  48. package/node/lib/enhancedEvents.d.ts +2 -2
  49. package/node/lib/enhancedEvents.d.ts.map +1 -1
  50. package/node/lib/enhancedEvents.js +0 -2
  51. package/node/lib/fbs/active-speaker-observer/active-speaker-observer-options.js +34 -1
  52. package/node/lib/fbs/active-speaker-observer/dominant-speaker-notification.js +34 -1
  53. package/node/lib/fbs/audio-level-observer/audio-level-observer-options.js +34 -1
  54. package/node/lib/fbs/audio-level-observer/volume.js +34 -1
  55. package/node/lib/fbs/audio-level-observer/volumes-notification.js +34 -1
  56. package/node/lib/fbs/common/string-string-array.js +34 -1
  57. package/node/lib/fbs/common/string-string.js +34 -1
  58. package/node/lib/fbs/common/string-uint8.js +34 -1
  59. package/node/lib/fbs/common/uint16-string.js +34 -1
  60. package/node/lib/fbs/common/uint32-string.js +34 -1
  61. package/node/lib/fbs/consumer/base-consumer-dump.js +34 -1
  62. package/node/lib/fbs/consumer/consumer-dump.js +34 -1
  63. package/node/lib/fbs/consumer/consumer-layers.js +34 -1
  64. package/node/lib/fbs/consumer/consumer-score.js +34 -1
  65. package/node/lib/fbs/consumer/dump-response.js +34 -1
  66. package/node/lib/fbs/consumer/enable-trace-event-request.js +34 -1
  67. package/node/lib/fbs/consumer/fir-trace-info.js +34 -1
  68. package/node/lib/fbs/consumer/get-stats-response.js +34 -1
  69. package/node/lib/fbs/consumer/key-frame-trace-info.js +34 -1
  70. package/node/lib/fbs/consumer/layers-change-notification.js +34 -1
  71. package/node/lib/fbs/consumer/pli-trace-info.js +34 -1
  72. package/node/lib/fbs/consumer/rtp-notification.js +34 -1
  73. package/node/lib/fbs/consumer/rtp-trace-info.js +34 -1
  74. package/node/lib/fbs/consumer/score-notification.js +34 -1
  75. package/node/lib/fbs/consumer/set-preferred-layers-request.js +34 -1
  76. package/node/lib/fbs/consumer/set-preferred-layers-response.js +34 -1
  77. package/node/lib/fbs/consumer/set-priority-request.js +34 -1
  78. package/node/lib/fbs/consumer/set-priority-response.js +34 -1
  79. package/node/lib/fbs/consumer/trace-notification.js +34 -1
  80. package/node/lib/fbs/data-consumer/add-subchannel-request.js +34 -1
  81. package/node/lib/fbs/data-consumer/add-subchannel-response.js +34 -1
  82. package/node/lib/fbs/data-consumer/buffered-amount-low-notification.js +34 -1
  83. package/node/lib/fbs/data-consumer/dump-response.d.ts +5 -2
  84. package/node/lib/fbs/data-consumer/dump-response.d.ts.map +1 -1
  85. package/node/lib/fbs/data-consumer/dump-response.js +60 -16
  86. package/node/lib/fbs/data-consumer/get-buffered-amount-response.js +34 -1
  87. package/node/lib/fbs/data-consumer/get-stats-response.js +34 -1
  88. package/node/lib/fbs/data-consumer/message-notification.js +34 -1
  89. package/node/lib/fbs/data-consumer/remove-subchannel-request.js +34 -1
  90. package/node/lib/fbs/data-consumer/remove-subchannel-response.js +34 -1
  91. package/node/lib/fbs/data-consumer/send-request.js +34 -1
  92. package/node/lib/fbs/data-consumer/set-buffered-amount-low-threshold-request.js +34 -1
  93. package/node/lib/fbs/data-consumer/set-subchannels-request.js +34 -1
  94. package/node/lib/fbs/data-consumer/set-subchannels-response.js +34 -1
  95. package/node/lib/fbs/data-consumer/type.d.ts +5 -0
  96. package/node/lib/fbs/data-consumer/type.d.ts.map +1 -0
  97. package/node/lib/fbs/data-consumer/type.js +10 -0
  98. package/node/lib/fbs/data-consumer.d.ts +1 -0
  99. package/node/lib/fbs/data-consumer.d.ts.map +1 -1
  100. package/node/lib/fbs/data-consumer.js +3 -1
  101. package/node/lib/fbs/data-producer/dump-response.js +34 -1
  102. package/node/lib/fbs/data-producer/get-stats-response.js +34 -1
  103. package/node/lib/fbs/data-producer/send-notification.js +34 -1
  104. package/node/lib/fbs/direct-transport/direct-transport-options.js +34 -1
  105. package/node/lib/fbs/direct-transport/dump-response.js +34 -1
  106. package/node/lib/fbs/direct-transport/get-stats-response.js +34 -1
  107. package/node/lib/fbs/direct-transport/rtcp-notification.js +34 -1
  108. package/node/lib/fbs/lib-uring/dump.js +34 -1
  109. package/node/lib/fbs/log/log.js +34 -1
  110. package/node/lib/fbs/message/message.js +34 -1
  111. package/node/lib/fbs/notification/body.d.ts +24 -22
  112. package/node/lib/fbs/notification/body.d.ts.map +1 -1
  113. package/node/lib/fbs/notification/body.js +24 -20
  114. package/node/lib/fbs/notification/event.d.ts +27 -26
  115. package/node/lib/fbs/notification/event.d.ts.map +1 -1
  116. package/node/lib/fbs/notification/event.js +27 -26
  117. package/node/lib/fbs/notification/notification.d.ts +3 -2
  118. package/node/lib/fbs/notification/notification.d.ts.map +1 -1
  119. package/node/lib/fbs/notification/notification.js +34 -1
  120. package/node/lib/fbs/pipe-transport/connect-request.js +34 -1
  121. package/node/lib/fbs/pipe-transport/connect-response.js +34 -1
  122. package/node/lib/fbs/pipe-transport/dump-response.js +34 -1
  123. package/node/lib/fbs/pipe-transport/get-stats-response.js +34 -1
  124. package/node/lib/fbs/pipe-transport/pipe-transport-options.js +34 -1
  125. package/node/lib/fbs/plain-transport/connect-request.js +34 -1
  126. package/node/lib/fbs/plain-transport/connect-response.js +34 -1
  127. package/node/lib/fbs/plain-transport/dump-response.js +34 -1
  128. package/node/lib/fbs/plain-transport/get-stats-response.js +34 -1
  129. package/node/lib/fbs/plain-transport/plain-transport-options.js +34 -1
  130. package/node/lib/fbs/plain-transport/rtcp-tuple-notification.js +34 -1
  131. package/node/lib/fbs/plain-transport/tuple-notification.js +34 -1
  132. package/node/lib/fbs/producer/dump-response.js +34 -1
  133. package/node/lib/fbs/producer/enable-trace-event-request.js +34 -1
  134. package/node/lib/fbs/producer/fir-trace-info.js +34 -1
  135. package/node/lib/fbs/producer/get-stats-response.js +34 -1
  136. package/node/lib/fbs/producer/key-frame-trace-info.js +34 -1
  137. package/node/lib/fbs/producer/pli-trace-info.js +34 -1
  138. package/node/lib/fbs/producer/rtp-trace-info.js +34 -1
  139. package/node/lib/fbs/producer/score-notification.js +34 -1
  140. package/node/lib/fbs/producer/score.js +34 -1
  141. package/node/lib/fbs/producer/send-notification.js +34 -1
  142. package/node/lib/fbs/producer/sr-trace-info.js +34 -1
  143. package/node/lib/fbs/producer/trace-notification.js +34 -1
  144. package/node/lib/fbs/producer/video-orientation-change-notification.js +34 -1
  145. package/node/lib/fbs/request/request.js +34 -1
  146. package/node/lib/fbs/response/response.js +34 -1
  147. package/node/lib/fbs/router/close-rtp-observer-request.js +34 -1
  148. package/node/lib/fbs/router/close-transport-request.js +34 -1
  149. package/node/lib/fbs/router/create-active-speaker-observer-request.js +34 -1
  150. package/node/lib/fbs/router/create-audio-level-observer-request.js +34 -1
  151. package/node/lib/fbs/router/create-direct-transport-request.js +34 -1
  152. package/node/lib/fbs/router/create-pipe-transport-request.js +34 -1
  153. package/node/lib/fbs/router/create-plain-transport-request.js +34 -1
  154. package/node/lib/fbs/router/create-web-rtc-transport-request.js +34 -1
  155. package/node/lib/fbs/router/dump-response.js +34 -1
  156. package/node/lib/fbs/rtp-observer/add-producer-request.js +34 -1
  157. package/node/lib/fbs/rtp-observer/remove-producer-request.js +34 -1
  158. package/node/lib/fbs/rtp-packet/dump.js +34 -1
  159. package/node/lib/fbs/rtp-parameters/boolean.js +34 -1
  160. package/node/lib/fbs/rtp-parameters/codec-mapping.js +34 -1
  161. package/node/lib/fbs/rtp-parameters/double.js +34 -1
  162. package/node/lib/fbs/rtp-parameters/encoding-mapping.js +34 -1
  163. package/node/lib/fbs/rtp-parameters/integer32-array.js +34 -1
  164. package/node/lib/fbs/rtp-parameters/integer32.js +34 -1
  165. package/node/lib/fbs/rtp-parameters/parameter.js +34 -1
  166. package/node/lib/fbs/rtp-parameters/rtcp-feedback.js +34 -1
  167. package/node/lib/fbs/rtp-parameters/rtcp-parameters.js +34 -1
  168. package/node/lib/fbs/rtp-parameters/rtp-codec-parameters.js +34 -1
  169. package/node/lib/fbs/rtp-parameters/rtp-encoding-parameters.js +34 -1
  170. package/node/lib/fbs/rtp-parameters/rtp-header-extension-parameters.js +34 -1
  171. package/node/lib/fbs/rtp-parameters/rtp-mapping.js +34 -1
  172. package/node/lib/fbs/rtp-parameters/rtp-parameters.js +34 -1
  173. package/node/lib/fbs/rtp-parameters/rtx.js +34 -1
  174. package/node/lib/fbs/rtp-parameters/string.js +34 -1
  175. package/node/lib/fbs/rtp-stream/base-stats.js +34 -1
  176. package/node/lib/fbs/rtp-stream/bitrate-by-layer.js +34 -1
  177. package/node/lib/fbs/rtp-stream/dump.js +34 -1
  178. package/node/lib/fbs/rtp-stream/params.js +34 -1
  179. package/node/lib/fbs/rtp-stream/recv-stats.js +34 -1
  180. package/node/lib/fbs/rtp-stream/send-stats.js +34 -1
  181. package/node/lib/fbs/rtp-stream/stats.js +34 -1
  182. package/node/lib/fbs/rtx-stream/params.js +34 -1
  183. package/node/lib/fbs/rtx-stream/rtx-dump.js +34 -1
  184. package/node/lib/fbs/sctp-association/sctp-negotiated-capabilities.d.ts +24 -0
  185. package/node/lib/fbs/sctp-association/sctp-negotiated-capabilities.d.ts.map +1 -0
  186. package/node/lib/fbs/sctp-association/sctp-negotiated-capabilities.js +102 -0
  187. package/node/lib/fbs/sctp-association.d.ts +1 -0
  188. package/node/lib/fbs/sctp-association.d.ts.map +1 -1
  189. package/node/lib/fbs/sctp-association.js +4 -1
  190. package/node/lib/fbs/sctp-parameters/num-sctp-streams.js +34 -1
  191. package/node/lib/fbs/sctp-parameters/sctp-parameters.d.ts +14 -14
  192. package/node/lib/fbs/sctp-parameters/sctp-parameters.d.ts.map +1 -1
  193. package/node/lib/fbs/sctp-parameters/sctp-parameters.js +73 -40
  194. package/node/lib/fbs/sctp-parameters/sctp-stream-parameters.js +34 -1
  195. package/node/lib/fbs/sctp-parameters.d.ts +0 -1
  196. package/node/lib/fbs/sctp-parameters.d.ts.map +1 -1
  197. package/node/lib/fbs/sctp-parameters.js +1 -4
  198. package/node/lib/fbs/srtp-parameters/srtp-parameters.js +34 -1
  199. package/node/lib/fbs/transport/bwe-trace-info.js +34 -1
  200. package/node/lib/fbs/transport/close-consumer-request.js +34 -1
  201. package/node/lib/fbs/transport/close-data-consumer-request.js +34 -1
  202. package/node/lib/fbs/transport/close-data-producer-request.js +34 -1
  203. package/node/lib/fbs/transport/close-producer-request.js +34 -1
  204. package/node/lib/fbs/transport/consume-data-request.d.ts +1 -1
  205. package/node/lib/fbs/transport/consume-data-request.js +35 -2
  206. package/node/lib/fbs/transport/consume-request.js +34 -1
  207. package/node/lib/fbs/transport/consume-response.js +34 -1
  208. package/node/lib/fbs/transport/dump.d.ts +7 -4
  209. package/node/lib/fbs/transport/dump.d.ts.map +1 -1
  210. package/node/lib/fbs/transport/dump.js +66 -22
  211. package/node/lib/fbs/transport/enable-trace-event-request.js +34 -1
  212. package/node/lib/fbs/transport/listen-info.js +34 -1
  213. package/node/lib/fbs/transport/options.d.ts +14 -14
  214. package/node/lib/fbs/transport/options.d.ts.map +1 -1
  215. package/node/lib/fbs/transport/options.js +92 -51
  216. package/node/lib/fbs/transport/port-range.js +34 -1
  217. package/node/lib/fbs/transport/produce-data-request.js +34 -1
  218. package/node/lib/fbs/transport/produce-request.js +34 -1
  219. package/node/lib/fbs/transport/produce-response.js +34 -1
  220. package/node/lib/fbs/transport/recv-rtp-header-extensions.js +34 -1
  221. package/node/lib/fbs/transport/restart-ice-response.js +34 -1
  222. package/node/lib/fbs/transport/rtp-listener.js +34 -1
  223. package/node/lib/fbs/transport/sctp-listener.js +34 -1
  224. package/node/lib/fbs/transport/sctp-negotiated-capabilities-notification.d.ts +22 -0
  225. package/node/lib/fbs/transport/sctp-negotiated-capabilities-notification.d.ts.map +1 -0
  226. package/node/lib/fbs/transport/sctp-negotiated-capabilities-notification.js +93 -0
  227. package/node/lib/fbs/transport/sctp-state-change-notification.js +34 -1
  228. package/node/lib/fbs/transport/send-rtcp-notification.js +34 -1
  229. package/node/lib/fbs/transport/set-max-incoming-bitrate-request.js +34 -1
  230. package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.js +34 -1
  231. package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.js +34 -1
  232. package/node/lib/fbs/transport/socket-flags.js +34 -1
  233. package/node/lib/fbs/transport/stats.js +34 -1
  234. package/node/lib/fbs/transport/trace-notification.js +34 -1
  235. package/node/lib/fbs/transport/tuple.js +34 -1
  236. package/node/lib/fbs/transport.d.ts +1 -0
  237. package/node/lib/fbs/transport.d.ts.map +1 -1
  238. package/node/lib/fbs/transport.js +5 -2
  239. package/node/lib/fbs/web-rtc-server/dump-response.js +34 -1
  240. package/node/lib/fbs/web-rtc-server/ice-user-name-fragment.js +34 -1
  241. package/node/lib/fbs/web-rtc-server/ip-port.js +34 -1
  242. package/node/lib/fbs/web-rtc-server/tuple-hash.js +34 -1
  243. package/node/lib/fbs/web-rtc-transport/connect-request.js +34 -1
  244. package/node/lib/fbs/web-rtc-transport/connect-response.js +34 -1
  245. package/node/lib/fbs/web-rtc-transport/dtls-parameters.js +34 -1
  246. package/node/lib/fbs/web-rtc-transport/dtls-state-change-notification.js +34 -1
  247. package/node/lib/fbs/web-rtc-transport/dump-response.js +34 -1
  248. package/node/lib/fbs/web-rtc-transport/fingerprint.js +34 -1
  249. package/node/lib/fbs/web-rtc-transport/get-stats-response.js +34 -1
  250. package/node/lib/fbs/web-rtc-transport/ice-candidate.js +34 -1
  251. package/node/lib/fbs/web-rtc-transport/ice-parameters.js +34 -1
  252. package/node/lib/fbs/web-rtc-transport/ice-selected-tuple-change-notification.js +34 -1
  253. package/node/lib/fbs/web-rtc-transport/ice-state-change-notification.js +34 -1
  254. package/node/lib/fbs/web-rtc-transport/listen-individual.js +34 -1
  255. package/node/lib/fbs/web-rtc-transport/listen-server.js +34 -1
  256. package/node/lib/fbs/web-rtc-transport/web-rtc-transport-options.js +34 -1
  257. package/node/lib/fbs/worker/channel-message-handlers.js +34 -1
  258. package/node/lib/fbs/worker/close-router-request.js +34 -1
  259. package/node/lib/fbs/worker/close-web-rtc-server-request.js +34 -1
  260. package/node/lib/fbs/worker/create-router-request.js +34 -1
  261. package/node/lib/fbs/worker/create-web-rtc-server-request.js +34 -1
  262. package/node/lib/fbs/worker/dump-response.js +34 -1
  263. package/node/lib/fbs/worker/resource-usage-response.js +34 -1
  264. package/node/lib/fbs/worker/update-settings-request.js +34 -1
  265. package/node/lib/index.d.ts +1 -1
  266. package/node/lib/index.d.ts.map +1 -1
  267. package/node/lib/index.js +37 -5
  268. package/node/lib/ortc.js +36 -3
  269. package/node/lib/rtpParametersFbsUtils.js +34 -1
  270. package/node/lib/rtpStreamStatsFbsUtils.js +35 -2
  271. package/node/lib/sctpParametersFbsUtils.d.ts +2 -2
  272. package/node/lib/sctpParametersFbsUtils.d.ts.map +1 -1
  273. package/node/lib/sctpParametersFbsUtils.js +44 -7
  274. package/node/lib/sctpParametersTypes.d.ts +10 -46
  275. package/node/lib/sctpParametersTypes.d.ts.map +1 -1
  276. package/node/lib/srtpParametersFbsUtils.js +34 -1
  277. package/node/lib/test/test-ActiveSpeakerObserver.js +35 -2
  278. package/node/lib/test/test-AudioLevelObserver.js +35 -2
  279. package/node/lib/test/test-Consumer.js +37 -4
  280. package/node/lib/test/test-DataConsumer.js +35 -2
  281. package/node/lib/test/test-DataProducer.js +35 -2
  282. package/node/lib/test/test-DirectTransport.js +36 -8
  283. package/node/lib/test/test-PipeTransport.js +35 -2
  284. package/node/lib/test/test-PlainTransport.js +45 -12
  285. package/node/lib/test/test-Producer.js +37 -4
  286. package/node/lib/test/test-Router.js +35 -2
  287. package/node/lib/test/test-WebRtcServer.js +34 -1
  288. package/node/lib/test/test-WebRtcTransport.js +51 -22
  289. package/node/lib/test/test-Worker.js +37 -4
  290. package/node/lib/test/test-mediasoup.js +36 -3
  291. package/node/lib/test/test-multiopus.js +35 -2
  292. package/node/lib/test/test-ortc.js +34 -1
  293. package/node/lib/test/test-werift-sctp.js +39 -5
  294. package/npm-scripts.mjs +2 -2
  295. package/package.json +11 -11
  296. package/worker/deps/libwebrtc/LICENSE +5 -0
  297. package/worker/deps/libwebrtc/README.md +3 -3
  298. package/worker/deps/libwebrtc/libwebrtc/mediasoup_helpers.h +13 -10
  299. package/worker/fbs/dataConsumer.fbs +7 -2
  300. package/worker/fbs/dataProducer.fbs +1 -0
  301. package/worker/fbs/notification.fbs +2 -0
  302. package/worker/fbs/sctpAssociation.fbs +4 -0
  303. package/worker/fbs/sctpParameters.fbs +5 -12
  304. package/worker/fbs/transport.fbs +12 -8
  305. package/worker/fuzzer/src/RTC/FuzzerDtlsTransport.cpp +5 -1
  306. package/worker/fuzzer/src/RTC/FuzzerRateCalculator.cpp +2 -2
  307. package/worker/fuzzer/src/RTC/FuzzerSeqManager.cpp +1 -1
  308. package/worker/fuzzer/src/RTC/FuzzerTrendCalculator.cpp +5 -5
  309. package/worker/fuzzer/src/RTC/ICE/FuzzerStunPacket.cpp +9 -6
  310. package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +1 -1
  311. package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +6 -2
  312. package/worker/fuzzer/src/RTC/SCTP/association/FuzzerStateCookie.cpp +1 -1
  313. package/worker/fuzzer/src/RTC/SCTP/packet/FuzzerPacket.cpp +5 -2
  314. package/worker/fuzzer/src/fuzzer.cpp +3 -10
  315. package/worker/include/Channel/ChannelRequest.hpp +1 -1
  316. package/worker/include/DepLibUV.hpp +1 -1
  317. package/worker/include/DepLibUring.hpp +3 -3
  318. package/worker/include/Logger.hpp +4 -4
  319. package/worker/include/MediaSoupErrors.hpp +1 -1
  320. package/worker/include/RTC/ActiveSpeakerObserver.hpp +6 -4
  321. package/worker/include/RTC/AudioLevelObserver.hpp +2 -2
  322. package/worker/include/RTC/Consumer.hpp +1 -1
  323. package/worker/include/RTC/DataConsumer.hpp +11 -15
  324. package/worker/include/RTC/DataProducer.hpp +4 -7
  325. package/worker/include/RTC/DirectTransport.hpp +3 -5
  326. package/worker/include/RTC/DtlsTransport.hpp +7 -7
  327. package/worker/include/RTC/ICE/IceServer.hpp +2 -2
  328. package/worker/include/RTC/ICE/StunPacket.hpp +1 -1
  329. package/worker/include/RTC/KeyFrameRequestManager.hpp +1 -1
  330. package/worker/include/RTC/NackGenerator.hpp +3 -2
  331. package/worker/include/RTC/PipeTransport.hpp +3 -5
  332. package/worker/include/RTC/PlainTransport.hpp +3 -5
  333. package/worker/include/RTC/PortManager.hpp +1 -1
  334. package/worker/include/RTC/Producer.hpp +1 -1
  335. package/worker/include/RTC/RTCP/FeedbackPs.hpp +1 -1
  336. package/worker/include/RTC/RTCP/FeedbackRtp.hpp +1 -1
  337. package/worker/include/RTC/RTCP/FeedbackRtpNack.hpp +1 -1
  338. package/worker/include/RTC/RTCP/ReceiverReport.hpp +1 -1
  339. package/worker/include/RTC/RTP/Packet.hpp +2 -2
  340. package/worker/include/RTC/RTP/RtpStream.hpp +11 -12
  341. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +3 -2
  342. package/worker/include/RTC/RTP/RtxStream.hpp +3 -1
  343. package/worker/include/RTC/RTP/SharedPacket.hpp +1 -1
  344. package/worker/include/RTC/RateCalculator.hpp +5 -2
  345. package/worker/include/RTC/Router.hpp +5 -6
  346. package/worker/include/RTC/RtpObserver.hpp +1 -1
  347. package/worker/include/RTC/SCTP/association/Association.hpp +46 -15
  348. package/worker/include/RTC/SCTP/association/AssociationListenerDeferrer.hpp +14 -6
  349. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +12 -11
  350. package/worker/include/RTC/SCTP/association/PacketSender.hpp +3 -3
  351. package/worker/include/RTC/SCTP/association/StateCookie.hpp +1 -1
  352. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +26 -26
  353. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +58 -48
  354. package/worker/include/RTC/SCTP/association/{TCBContext.hpp → TransmissionControlBlockContextInterface.hpp} +11 -6
  355. package/worker/include/RTC/SCTP/packet/Chunk.hpp +3 -3
  356. package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
  357. package/worker/include/RTC/SCTP/packet/UserData.hpp +39 -31
  358. package/worker/include/RTC/SCTP/packet/chunks/AnyDataChunk.hpp +1 -1
  359. package/worker/include/RTC/SCTP/packet/chunks/AnyForwardTsnChunk.hpp +9 -9
  360. package/worker/include/RTC/SCTP/packet/chunks/AnyInitChunk.hpp +1 -1
  361. package/worker/include/RTC/SCTP/packet/chunks/DataChunk.hpp +4 -2
  362. package/worker/include/RTC/SCTP/packet/chunks/ForwardTsnChunk.hpp +3 -3
  363. package/worker/include/RTC/SCTP/packet/chunks/IDataChunk.hpp +4 -2
  364. package/worker/include/RTC/SCTP/packet/chunks/IForwardTsnChunk.hpp +3 -3
  365. package/worker/include/RTC/SCTP/packet/chunks/InitAckChunk.hpp +1 -1
  366. package/worker/include/RTC/SCTP/packet/chunks/InitChunk.hpp +1 -1
  367. package/worker/include/RTC/SCTP/packet/chunks/SackChunk.hpp +10 -3
  368. package/worker/include/RTC/SCTP/packet/chunks/ShutdownChunk.hpp +1 -1
  369. package/worker/include/RTC/SCTP/packet/errorCauses/InvalidStreamIdentifierErrorCause.hpp +1 -1
  370. package/worker/include/RTC/SCTP/packet/errorCauses/MissingMandatoryParameterErrorCause.hpp +1 -1
  371. package/worker/include/RTC/SCTP/packet/errorCauses/NoUserDataErrorCause.hpp +1 -1
  372. package/worker/include/RTC/SCTP/packet/errorCauses/StaleCookieErrorCause.hpp +1 -1
  373. package/worker/include/RTC/SCTP/packet/parameters/AddIncomingStreamsRequestParameter.hpp +1 -1
  374. package/worker/include/RTC/SCTP/packet/parameters/AddOutgoingStreamsRequestParameter.hpp +1 -1
  375. package/worker/include/RTC/SCTP/packet/parameters/CookiePreservativeParameter.hpp +1 -1
  376. package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +1 -1
  377. package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +1 -1
  378. package/worker/include/RTC/SCTP/packet/parameters/ReconfigurationResponseParameter.hpp +1 -1
  379. package/worker/include/RTC/SCTP/packet/parameters/SsnTsnResetRequestParameter.hpp +1 -1
  380. package/worker/include/RTC/SCTP/packet/parameters/SupportedAddressTypesParameter.hpp +1 -1
  381. package/worker/include/RTC/SCTP/packet/parameters/SupportedExtensionsParameter.hpp +1 -1
  382. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +1 -1
  383. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +22 -2
  384. package/worker/include/RTC/SCTP/public/{AssociationListener.hpp → AssociationListenerInterface.hpp} +5 -5
  385. package/worker/include/RTC/SCTP/public/Message.hpp +26 -10
  386. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +29 -21
  387. package/worker/include/RTC/SCTP/public/SctpTypes.hpp +21 -0
  388. package/worker/include/RTC/SCTP/rx/DataTracker.hpp +277 -0
  389. package/worker/include/RTC/SCTP/rx/InterleavedReassemblyStreams.hpp +116 -0
  390. package/worker/include/RTC/SCTP/rx/ReassemblyQueue.hpp +202 -0
  391. package/worker/include/RTC/SCTP/rx/ReassemblyStreamsInterface.hpp +83 -0
  392. package/worker/include/RTC/SCTP/rx/TraditionalReassemblyStreams.hpp +183 -0
  393. package/worker/include/RTC/SCTP/tx/OutstandingData.hpp +48 -57
  394. package/worker/include/RTC/SCTP/tx/RetransmissionErrorCounter.hpp +3 -3
  395. package/worker/include/RTC/SCTP/tx/RetransmissionQueue.hpp +36 -43
  396. package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +6 -6
  397. package/worker/include/RTC/SCTP/tx/RoundRobinSendQueue.hpp +356 -0
  398. package/worker/include/RTC/SCTP/tx/SendQueueInterface.hpp +180 -0
  399. package/worker/include/RTC/SCTP/tx/StreamScheduler.hpp +235 -0
  400. package/worker/include/RTC/SenderBandwidthEstimator.hpp +5 -1
  401. package/worker/include/RTC/Serializable.hpp +3 -3
  402. package/worker/include/RTC/TcpServer.hpp +2 -2
  403. package/worker/include/RTC/Transport.hpp +59 -80
  404. package/worker/include/RTC/TransportCongestionControlClient.hpp +2 -2
  405. package/worker/include/RTC/TransportCongestionControlServer.hpp +2 -2
  406. package/worker/include/RTC/TransportTuple.hpp +1 -1
  407. package/worker/include/RTC/UdpSocket.hpp +1 -1
  408. package/worker/include/RTC/WebRtcServer.hpp +1 -1
  409. package/worker/include/RTC/WebRtcTransport.hpp +3 -5
  410. package/worker/include/Settings.hpp +2 -3
  411. package/worker/include/Shared.hpp +31 -7
  412. package/worker/include/SharedInterface.hpp +37 -4
  413. package/worker/include/Utils/UnwrappedSequenceNumber.hpp +270 -0
  414. package/worker/include/Utils.hpp +4 -4
  415. package/worker/include/Worker.hpp +4 -4
  416. package/worker/include/common.hpp +12 -12
  417. package/worker/include/handles/BackoffTimerHandle.hpp +8 -9
  418. package/worker/include/handles/BackoffTimerHandleInterface.hpp +10 -3
  419. package/worker/include/handles/TimerHandle.hpp +0 -7
  420. package/worker/meson.build +33 -34
  421. package/worker/mocks/include/MockShared.hpp +56 -9
  422. package/worker/mocks/include/RTC/SCTP/association/MockAssociationListener.hpp +308 -0
  423. package/worker/mocks/include/RTC/SCTP/association/MockTransmissionControlBlockContext.hpp +183 -0
  424. package/worker/mocks/include/RTC/SCTP/tx/MockSendQueue.hpp +262 -0
  425. package/worker/mocks/include/handles/MockBackoffTimerHandle.hpp +153 -0
  426. package/worker/mocks/include/handles/MockTimerHandle.hpp +74 -0
  427. package/worker/mocks/include/mockTypes.hpp +15 -0
  428. package/worker/mocks/src/MockShared.cpp +30 -10
  429. package/worker/mocks/src/RTC/SCTP/association/MockTransmissionControlBlockContext.cpp +39 -0
  430. package/worker/mocks/src/handles/MockBackoffTimerHandle.cpp +127 -0
  431. package/worker/scripts/clang-scripts.mjs +1 -0
  432. package/worker/scripts/package-lock.json +6 -7
  433. package/worker/src/Channel/ChannelSocket.cpp +2 -3
  434. package/worker/src/DepLibUV.cpp +1 -1
  435. package/worker/src/DepLibUring.cpp +3 -1
  436. package/worker/src/Logger.cpp +1 -1
  437. package/worker/src/MediaSoupErrors.cpp +2 -0
  438. package/worker/src/RTC/ActiveSpeakerObserver.cpp +7 -7
  439. package/worker/src/RTC/Consumer.cpp +5 -6
  440. package/worker/src/RTC/DataConsumer.cpp +54 -64
  441. package/worker/src/RTC/DataProducer.cpp +13 -8
  442. package/worker/src/RTC/DirectTransport.cpp +7 -6
  443. package/worker/src/RTC/ICE/IceServer.cpp +2 -2
  444. package/worker/src/RTC/ICE/StunPacket.cpp +1 -1
  445. package/worker/src/RTC/NackGenerator.cpp +3 -3
  446. package/worker/src/RTC/PipeConsumer.cpp +1 -1
  447. package/worker/src/RTC/PipeTransport.cpp +6 -19
  448. package/worker/src/RTC/PlainTransport.cpp +6 -19
  449. package/worker/src/RTC/Producer.cpp +10 -11
  450. package/worker/src/RTC/RTCP/FeedbackPsAfb.cpp +1 -1
  451. package/worker/src/RTC/RTCP/FeedbackRtpTransport.cpp +1 -1
  452. package/worker/src/RTC/RTCP/XR.cpp +1 -1
  453. package/worker/src/RTC/RTP/Packet.cpp +3 -1
  454. package/worker/src/RTC/RTP/ProbationGenerator.cpp +4 -4
  455. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +1 -1
  456. package/worker/src/RTC/RTP/RtpStream.cpp +9 -9
  457. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +11 -10
  458. package/worker/src/RTC/RTP/RtpStreamSend.cpp +7 -7
  459. package/worker/src/RTC/RTP/RtxStream.cpp +7 -7
  460. package/worker/src/RTC/RTP/SharedPacket.cpp +3 -3
  461. package/worker/src/RTC/RateCalculator.cpp +1 -2
  462. package/worker/src/RTC/Router.cpp +58 -35
  463. package/worker/src/RTC/RtpDictionaries/RtpCodecMimeType.cpp +1 -1
  464. package/worker/src/RTC/SCTP/LICENSE +44 -0
  465. package/worker/src/RTC/SCTP/association/Association.cpp +348 -322
  466. package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +46 -13
  467. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +26 -28
  468. package/worker/src/RTC/SCTP/association/PacketSender.cpp +8 -8
  469. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +71 -56
  470. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +176 -66
  471. package/worker/src/RTC/SCTP/packet/Chunk.cpp +5 -1
  472. package/worker/src/RTC/SCTP/packet/Packet.cpp +8 -1
  473. package/worker/src/RTC/SCTP/packet/chunks/DataChunk.cpp +17 -0
  474. package/worker/src/RTC/SCTP/packet/chunks/ForwardTsnChunk.cpp +4 -4
  475. package/worker/src/RTC/SCTP/packet/chunks/IDataChunk.cpp +25 -0
  476. package/worker/src/RTC/SCTP/packet/chunks/IForwardTsnChunk.cpp +10 -7
  477. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +21 -4
  478. package/worker/src/RTC/SCTP/packet/chunks/ShutdownCompleteChunk.cpp +1 -1
  479. package/worker/src/RTC/SCTP/packet/errorCauses/NoUserDataErrorCause.cpp +1 -1
  480. package/worker/src/RTC/SCTP/packet/errorCauses/ProtocolViolationErrorCause.cpp +2 -2
  481. package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +1 -1
  482. package/worker/src/RTC/SCTP/public/Message.cpp +8 -0
  483. package/worker/src/RTC/SCTP/public/SctpOptions.cpp +90 -0
  484. package/worker/src/RTC/SCTP/rx/DataTracker.cpp +471 -0
  485. package/worker/src/RTC/SCTP/rx/InterleavedReassemblyStreams.cpp +327 -0
  486. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +288 -0
  487. package/worker/src/RTC/SCTP/rx/TraditionalReassemblyStreams.cpp +453 -0
  488. package/worker/src/RTC/SCTP/tx/OutstandingData.cpp +81 -74
  489. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +85 -98
  490. package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +1 -1
  491. package/worker/src/RTC/SCTP/tx/RoundRobinSendQueue.cpp +752 -0
  492. package/worker/src/RTC/SCTP/tx/StreamScheduler.cpp +257 -0
  493. package/worker/src/RTC/SenderBandwidthEstimator.cpp +7 -5
  494. package/worker/src/RTC/SimpleConsumer.cpp +3 -4
  495. package/worker/src/RTC/SimulcastConsumer.cpp +5 -6
  496. package/worker/src/RTC/SrtpSession.cpp +1 -1
  497. package/worker/src/RTC/SvcConsumer.cpp +5 -6
  498. package/worker/src/RTC/TcpConnection.cpp +1 -1
  499. package/worker/src/RTC/Transport.cpp +475 -551
  500. package/worker/src/RTC/TransportCongestionControlClient.cpp +5 -6
  501. package/worker/src/RTC/TransportCongestionControlServer.cpp +1 -2
  502. package/worker/src/RTC/WebRtcServer.cpp +1 -1
  503. package/worker/src/RTC/WebRtcTransport.cpp +5 -13
  504. package/worker/src/Settings.cpp +9 -28
  505. package/worker/src/Shared.cpp +3 -3
  506. package/worker/src/Utils/Crypto.cpp +1 -1
  507. package/worker/src/Utils/String.cpp +1 -1
  508. package/worker/src/Worker.cpp +10 -26
  509. package/worker/src/handles/BackoffTimerHandle.cpp +24 -6
  510. package/worker/src/handles/UdpSocketHandle.cpp +1 -1
  511. package/worker/src/lib.cpp +5 -17
  512. package/worker/subprojects/catch2.wrap +6 -6
  513. package/worker/test/include/RTC/ICE/iceCommon.hpp +7 -7
  514. package/worker/test/include/RTC/RTP/rtpCommon.hpp +6 -6
  515. package/worker/test/include/RTC/SCTP/sctpCommon.hpp +10 -10
  516. package/worker/test/include/catch2Macros.hpp +31 -0
  517. package/worker/test/src/RTC/ICE/TestStunPacket.cpp +3 -3
  518. package/worker/test/src/RTC/ICE/iceCommon.cpp +2 -2
  519. package/worker/test/src/RTC/RTP/Codecs/TestVP8.cpp +1 -1
  520. package/worker/test/src/RTC/RTP/Codecs/TestVP9.cpp +1 -1
  521. package/worker/test/src/RTC/RTP/TestPacket.cpp +3 -3
  522. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +6 -6
  523. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +6 -2
  524. package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
  525. package/worker/test/src/RTC/RTP/rtpCommon.cpp +2 -2
  526. package/worker/test/src/RTC/SCTP/association/TestHeartbeatHandler.cpp +292 -0
  527. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +1 -1
  528. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +1 -1
  529. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +99 -0
  530. package/worker/test/src/RTC/SCTP/packet/TestChunk.cpp +1 -1
  531. package/worker/test/src/RTC/SCTP/packet/TestPacket.cpp +1 -1
  532. package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +1 -1
  533. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieAckChunk.cpp +1 -1
  534. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieEchoChunk.cpp +1 -1
  535. package/worker/test/src/RTC/SCTP/packet/chunks/TestDataChunk.cpp +77 -7
  536. package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +35 -26
  537. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +1 -1
  538. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +1 -1
  539. package/worker/test/src/RTC/SCTP/packet/chunks/TestIDataChunk.cpp +77 -7
  540. package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +59 -27
  541. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +1 -1
  542. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +1 -1
  543. package/worker/test/src/RTC/SCTP/packet/chunks/TestOperationErrorChunk.cpp +1 -1
  544. package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +1 -1
  545. package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +73 -35
  546. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownAckChunk.cpp +1 -1
  547. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownChunk.cpp +1 -1
  548. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownCompleteChunk.cpp +1 -1
  549. package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +1 -1
  550. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestCookieReceivedWhileShuttingDownErrorCause.cpp +1 -1
  551. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidMandatoryParameterErrorCause.cpp +1 -1
  552. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidStreamIdentifierErrorCause.cpp +1 -1
  553. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestMissingMandatoryParameterErrorCause.cpp +1 -1
  554. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestNoUserDataErrorCause.cpp +1 -1
  555. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestOutOfResourceErrorCause.cpp +1 -1
  556. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestProtocolViolationErrorCause.cpp +1 -1
  557. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestRestartOfAnAssociationWithNewAddressesErrorCause.cpp +1 -1
  558. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestStaleCookieErrorCause.cpp +1 -1
  559. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +1 -1
  560. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedChunkTypeErrorCause.cpp +1 -1
  561. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedParametersErrorCause.cpp +1 -1
  562. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnresolvableAddressErrorCause.cpp +1 -1
  563. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUserInitiatedAbortErrorCause.cpp +1 -1
  564. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddIncomingStreamsRequestParameter.cpp +1 -1
  565. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddOutgoingStreamsRequestParameter.cpp +1 -1
  566. package/worker/test/src/RTC/SCTP/packet/parameters/TestCookiePreservativeParameter.cpp +1 -1
  567. package/worker/test/src/RTC/SCTP/packet/parameters/TestForwardTsnSupportedParameter.cpp +1 -1
  568. package/worker/test/src/RTC/SCTP/packet/parameters/TestHeartbeatInfoParameter.cpp +1 -1
  569. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv4AddressParameter.cpp +1 -1
  570. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +1 -1
  571. package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +1 -1
  572. package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +1 -1
  573. package/worker/test/src/RTC/SCTP/packet/parameters/TestReconfigurationResponseParameter.cpp +1 -1
  574. package/worker/test/src/RTC/SCTP/packet/parameters/TestSsnTsnResetRequestParameter.cpp +1 -1
  575. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +1 -1
  576. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedAddressTypesParameter.cpp +1 -1
  577. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +1 -1
  578. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnknownParameter.cpp +1 -1
  579. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnrecognizedParameterParameter.cpp +1 -1
  580. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +1 -1
  581. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +1117 -0
  582. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +565 -0
  583. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +557 -0
  584. package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +555 -0
  585. package/worker/test/src/RTC/SCTP/sctpCommon.cpp +2 -2
  586. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +475 -423
  587. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionErrorCounter.cpp +4 -0
  588. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +2218 -0
  589. package/worker/test/src/RTC/SCTP/tx/TestRoundRobinSendQueue.cpp +1130 -0
  590. package/worker/test/src/RTC/SCTP/tx/TestStreamScheduler.cpp +721 -0
  591. package/worker/test/src/RTC/TestKeyFrameRequestManager.cpp +9 -27
  592. package/worker/test/src/RTC/TestNackGenerator.cpp +7 -8
  593. package/worker/test/src/RTC/TestRateCalculator.cpp +6 -7
  594. package/worker/test/src/RTC/TestSimpleConsumer.cpp +7 -3
  595. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +8 -3
  596. package/worker/test/src/{RTC/SCTP/common → Utils}/TestUnwrappedSequenceNumber.cpp +2 -2
  597. package/worker/test/src/testHelpers.cpp +1 -1
  598. package/worker/test/src/tests.cpp +0 -12
  599. package/node/lib/fbs/consumer/degrade-request.d.ts +0 -30
  600. package/node/lib/fbs/consumer/degrade-request.d.ts.map +0 -1
  601. package/node/lib/fbs/consumer/degrade-request.js +0 -91
  602. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts +0 -24
  603. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts.map +0 -1
  604. package/node/lib/fbs/consumer/enable-delay-and-loss-request.js +0 -69
  605. package/node/lib/fbs/producer/degrade-request.d.ts +0 -30
  606. package/node/lib/fbs/producer/degrade-request.d.ts.map +0 -1
  607. package/node/lib/fbs/producer/degrade-request.js +0 -91
  608. package/node/lib/fbs/worker/close-notification.d.ts +0 -18
  609. package/node/lib/fbs/worker/close-notification.d.ts.map +0 -1
  610. package/node/lib/fbs/worker/close-notification.js +0 -45
  611. package/node/lib/fbs/worker/close-request.d.ts +0 -18
  612. package/node/lib/fbs/worker/close-request.d.ts.map +0 -1
  613. package/node/lib/fbs/worker/close-request.js +0 -45
  614. package/node/lib/fbs/worker/close-worker-notification.d.ts +0 -18
  615. package/node/lib/fbs/worker/close-worker-notification.d.ts.map +0 -1
  616. package/node/lib/fbs/worker/close-worker-notification.js +0 -45
  617. package/worker/include/DepUsrSCTP.hpp +0 -49
  618. package/worker/include/RTC/SCTP/TODO_SCTP.md +0 -55
  619. package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +0 -274
  620. package/worker/include/RTC/SctpAssociation.hpp +0 -147
  621. package/worker/src/DepUsrSCTP.cpp +0 -283
  622. package/worker/src/RTC/SctpAssociation.cpp +0 -1175
  623. package/worker/subprojects/usrsctp.wrap +0 -8
@@ -1,15 +1,13 @@
1
1
  #define MS_CLASS "RTC::SCTP::TransmissionControlBlock"
2
- // TODO: SCTP: COMMENT
3
- #define MS_LOG_DEV_LEVEL 3
2
+ // #define MS_LOG_DEV_LEVEL 3
4
3
 
5
4
  #include "RTC/SCTP/association/TransmissionControlBlock.hpp"
6
- #include "DepLibUV.hpp"
7
5
  #include "Logger.hpp"
8
- #include "RTC/Consts.hpp"
6
+ #include "MediaSoupErrors.hpp"
7
+ #include "RTC/SCTP/packet/chunks/CookieAckChunk.hpp"
8
+ #include "RTC/SCTP/packet/chunks/CookieEchoChunk.hpp"
9
9
  #include "RTC/SCTP/packet/chunks/DataChunk.hpp"
10
10
  #include "RTC/SCTP/packet/chunks/IDataChunk.hpp"
11
- #include "handles/BackoffTimerHandle.hpp"
12
- #include <cmath> // std::min()
13
11
  #include <string>
14
12
 
15
13
  namespace RTC
@@ -18,17 +16,16 @@ namespace RTC
18
16
  {
19
17
  /* Static. */
20
18
 
21
- alignas(4) thread_local static uint8_t PacketFactoryBuffer[RTC::Consts::MaxSafeMtuSizeForSctp];
19
+ alignas(4) static thread_local uint8_t PacketFactoryBuffer[65536];
22
20
 
23
21
  /* Instance methods. */
24
22
 
25
23
  TransmissionControlBlock::TransmissionControlBlock(
26
- AssociationListener& associationListener,
24
+ AssociationListenerInterface& associationListener,
27
25
  const SctpOptions& sctpOptions,
28
26
  SharedInterface* shared,
27
+ SendQueueInterface& sendQueue,
29
28
  PacketSender& packetSender,
30
- // TODO: SCTP: Implement it.
31
- // SendQueue& sendQueue,
32
29
  uint32_t localVerificationTag,
33
30
  uint32_t remoteVerificationTag,
34
31
  uint32_t localInitialTsn,
@@ -36,12 +33,11 @@ namespace RTC
36
33
  uint32_t remoteAdvertisedReceiverWindowCredit,
37
34
  uint64_t tieTag,
38
35
  const NegotiatedCapabilities& negotiatedCapabilities,
36
+ size_t maxPacketLength,
39
37
  std::function<bool()> isAssociationEstablished)
40
38
  : associationListener(associationListener),
41
39
  sctpOptions(sctpOptions),
42
40
  shared(shared),
43
- // TODO: SCTP: Implement it.
44
- // sendQueue(sendQueue),
45
41
  packetSender(packetSender),
46
42
  localVerificationTag(localVerificationTag),
47
43
  remoteVerificationTag(remoteVerificationTag),
@@ -50,10 +46,12 @@ namespace RTC
50
46
  remoteAdvertisedReceiverWindowCredit(remoteAdvertisedReceiverWindowCredit),
51
47
  tieTag(tieTag),
52
48
  negotiatedCapabilities(negotiatedCapabilities),
49
+ maxPacketLength(maxPacketLength),
53
50
  isAssociationEstablished(std::move(isAssociationEstablished)),
54
51
  t3RtxTimer(this->shared->CreateBackoffTimer(
55
52
  BackoffTimerHandleInterface::BackoffTimerHandleOptions{
56
53
  .listener = this,
54
+ .label = "sctp-t3-rtx",
57
55
  .baseTimeoutMs = sctpOptions.initialRtoMs,
58
56
  .backoffAlgorithm = BackoffTimerHandleInterface::BackoffAlgorithm::EXPONENTIAL,
59
57
  .maxBackoffTimeoutMs = sctpOptions.timerMaxBackoffTimeoutMs,
@@ -61,23 +59,22 @@ namespace RTC
61
59
  delayedAckTimer(this->shared->CreateBackoffTimer(
62
60
  BackoffTimerHandleInterface::BackoffTimerHandleOptions{
63
61
  .listener = this,
62
+ .label = "sctp-delayed-ack",
64
63
  .baseTimeoutMs = sctpOptions.delayedAckMaxTimeoutMs,
65
64
  .backoffAlgorithm = BackoffTimerHandleInterface::BackoffAlgorithm::EXPONENTIAL,
66
65
  .maxBackoffTimeoutMs = std::nullopt,
67
66
  .maxRestarts = 0 })),
68
67
  rto(sctpOptions),
69
68
  txErrorCounter(sctpOptions),
70
- // TODO: SCTP: Implement.
71
- // dataTracker(),
72
- // TODO: SCTP: Implement.
73
- // reassemblyQueue(),
69
+ dataTracker(this->delayedAckTimer.get(), remoteInitialTsn),
70
+ reassemblyQueue(
71
+ sctpOptions.maxReceiverWindowBufferSize, negotiatedCapabilities.messageInterleaving),
74
72
  retransmissionQueue(
75
73
  this,
76
74
  this->associationListener,
77
75
  localInitialTsn,
78
76
  remoteAdvertisedReceiverWindowCredit,
79
- // TODO: SCTP: Implement
80
- // this->sendQueue,
77
+ sendQueue,
81
78
  this->t3RtxTimer.get(),
82
79
  sctpOptions,
83
80
  negotiatedCapabilities.partialReliability,
@@ -86,13 +83,14 @@ namespace RTC
86
83
  this->associationListener,
87
84
  this->shared,
88
85
  this,
89
- // TODO: SCTP: Implement.
90
- // std::addressof(this->dataTracker),
91
- // std::addressof(this->reassemblyQueue),
86
+ std::addressof(this->dataTracker),
87
+ std::addressof(this->reassemblyQueue),
92
88
  std::addressof(this->retransmissionQueue)),
93
89
  heartbeatHandler(this->associationListener, sctpOptions, this->shared, this)
94
90
  {
95
91
  MS_TRACE();
92
+
93
+ sendQueue.EnableMessageInterleaving(this->negotiatedCapabilities.messageInterleaving);
96
94
  }
97
95
 
98
96
  TransmissionControlBlock::~TransmissionControlBlock()
@@ -163,7 +161,7 @@ namespace RTC
163
161
  MS_TRACE();
164
162
 
165
163
  auto packet =
166
- std::unique_ptr<Packet>(Packet::Factory(PacketFactoryBuffer, sizeof(PacketFactoryBuffer)));
164
+ std::unique_ptr<Packet>{ Packet::Factory(PacketFactoryBuffer, this->maxPacketLength) };
167
165
 
168
166
  packet->SetSourcePort(this->sctpOptions.sourcePort);
169
167
  packet->SetDestinationPort(this->sctpOptions.destinationPort);
@@ -172,11 +170,11 @@ namespace RTC
172
170
  return packet;
173
171
  }
174
172
 
175
- void TransmissionControlBlock::Send(Packet* packet)
173
+ bool TransmissionControlBlock::SendPacket(Packet* packet)
176
174
  {
177
175
  MS_TRACE();
178
176
 
179
- this->packetSender.SendPacket(
177
+ return this->packetSender.SendPacket(
180
178
  packet,
181
179
  /*writeChecksum*/ !this->negotiatedCapabilities.zeroChecksum);
182
180
  }
@@ -199,22 +197,19 @@ namespace RTC
199
197
  {
200
198
  MS_TRACE();
201
199
 
202
- // TODO: SCTP: Implement it.
203
- // if (!this->dataTracker.ShouldSendAckChunk(/*alsoIfDelayed*/ false))
204
- // {
205
- // return;
206
- // }
200
+ if (!this->dataTracker.ShouldSendAck(/*alsoIfDelayed*/ false))
201
+ {
202
+ return;
203
+ }
207
204
 
208
- // auto packet = CreatePacket();
205
+ const auto packet = CreatePacket();
209
206
 
210
- // TODO: SCTP: Here we must create a SackChunk in the Packet, however the
211
- // SackChunk is in theory generated by this->dataTracker... Let's see.
212
- // builder.Add(this->dataTracker.CreateSelectiveAck(this->reassemblyQueue.GetRemainingBytes()));
207
+ this->dataTracker.AddSackSelectiveAck(packet.get(), this->reassemblyQueue.GetRemainingBytes());
213
208
 
214
- // Send(packet.get());
209
+ SendPacket(packet.get());
215
210
  }
216
211
 
217
- void TransmissionControlBlock::MaybeSendForwardTsnChunk(Packet* packet, uint64_t nowMs)
212
+ void TransmissionControlBlock::MayAddForwardTsnChunk(Packet* packet, uint64_t nowMs)
218
213
  {
219
214
  MS_TRACE();
220
215
 
@@ -222,11 +217,11 @@ namespace RTC
222
217
  {
223
218
  if (this->negotiatedCapabilities.messageInterleaving)
224
219
  {
225
- this->retransmissionQueue.CreateIForwardTsn(packet);
220
+ this->retransmissionQueue.AddIForwardTsn(packet);
226
221
  }
227
222
  else
228
223
  {
229
- this->retransmissionQueue.CreateForwardTsn(packet);
224
+ this->retransmissionQueue.AddForwardTsn(packet);
230
225
  }
231
226
 
232
227
  // https://datatracker.ietf.org/doc/html/rfc3758
@@ -259,19 +254,19 @@ namespace RTC
259
254
  // performed, the sender SHOULD ignore the value of cwnd and SHOULD NOT
260
255
  // delay retransmission for this single packet."
261
256
 
262
- auto packet = CreatePacket();
263
- const auto result =
257
+ const auto packet = CreatePacket();
258
+
259
+ auto result =
264
260
  this->retransmissionQueue.GetChunksForFastRetransmit(packet->GetAvailableLength());
265
261
 
266
- for (const auto& [tsn, data] : result)
262
+ for (auto& [tsn, data] : result)
267
263
  {
268
264
  if (this->negotiatedCapabilities.messageInterleaving)
269
265
  {
270
266
  auto* iDataChunk = packet->BuildChunkInPlace<IDataChunk>();
271
267
 
272
268
  iDataChunk->SetTsn(tsn);
273
- // TODO: SCTP: Implement.
274
- // iDataChunk->SetUserData(data);
269
+ iDataChunk->SetUserData(std::move(data));
275
270
  iDataChunk->Consolidate();
276
271
  }
277
272
  else
@@ -279,26 +274,142 @@ namespace RTC
279
274
  auto* dataChunk = packet->BuildChunkInPlace<DataChunk>();
280
275
 
281
276
  dataChunk->SetTsn(tsn);
282
- // TODO: SCTP: Implement.
283
- // dataChunk->SetUserData(data);
277
+ dataChunk->SetUserData(std::move(data));
284
278
  dataChunk->Consolidate();
285
279
  }
286
280
  }
287
281
 
288
- Send(packet.get());
282
+ SendPacket(packet.get());
289
283
  }
290
284
 
291
- void TransmissionControlBlock::OnT3RtxTimer(uint64_t& /*baseTimeoutMs*/, bool& /*stop*/)
285
+ void TransmissionControlBlock::SendBufferedPackets(uint64_t nowMs, bool addCookieAckChunk)
292
286
  {
293
287
  MS_TRACE();
294
288
 
295
- const auto maxRestarts = this->t3RtxTimer->GetMaxRestarts();
289
+ for (size_t packetIdx{ 0 }; packetIdx < this->sctpOptions.maxBurst; ++packetIdx)
290
+ {
291
+ const auto packet = CreatePacket();
296
292
 
297
- MS_DEBUG_TAG(
298
- sctp,
299
- "T3-rtx timer has expired [%zu/%s]",
300
- this->t3RtxTimer->GetExpirationCount(),
301
- maxRestarts ? std::to_string(maxRestarts.value()).c_str() : "Infinite");
293
+ // Only add control Chunks to the first Packet that is sent, if sending
294
+ // multiple Packets in one go (as allowed by the congestion window).
295
+ if (packetIdx == 0)
296
+ {
297
+ if (addCookieAckChunk)
298
+ {
299
+ MS_DEBUG_DEV("adding COOKIE_ACK Chunk to the Packet");
300
+
301
+ const auto* cookieAckChunk = packet->BuildChunkInPlace<CookieAckChunk>();
302
+
303
+ cookieAckChunk->Consolidate();
304
+ }
305
+
306
+ if (this->remoteStateCookie.has_value())
307
+ {
308
+ // https://datatracker.ietf.org/doc/html/rfc9260#section-5.1
309
+ //
310
+ // "The COOKIE ECHO chunk can be bundled with any pending outbound
311
+ // DATA chunks, but it MUST be the first chunk in the packet..."
312
+ if (packet->GetChunksCount() > 0)
313
+ {
314
+ MS_THROW_ERROR(
315
+ "Packet must have no Chunks [addCookieAckChunk:%s]",
316
+ addCookieAckChunk ? "true" : "no");
317
+ }
318
+
319
+ auto* cookieEchoChunk = packet->BuildChunkInPlace<CookieEchoChunk>();
320
+
321
+ cookieEchoChunk->SetCookie(
322
+ remoteStateCookie->data(), static_cast<uint16_t>(remoteStateCookie->size()));
323
+ cookieEchoChunk->Consolidate();
324
+ }
325
+
326
+ // https://datatracker.ietf.org/doc/html/rfc9260#section-6
327
+ //
328
+ // "Before an endpoint transmits a DATA chunk, if any received DATA
329
+ // chunks have not been acknowledged (e.g., due to delayed ack), the
330
+ // sender should create a SACK and bundle it with the outbound DATA
331
+ // chunk, as long as the size of the final SCTP packet does not exceed
332
+ // the current MTU."
333
+ if (this->dataTracker.ShouldSendAck(/*alsoIfDelayed*/ true))
334
+ {
335
+ this->dataTracker.AddSackSelectiveAck(
336
+ packet.get(), this->reassemblyQueue.GetRemainingBytes());
337
+ }
338
+
339
+ const uint64_t nowMs = this->shared->GetTimeMs();
340
+
341
+ MayAddForwardTsnChunk(packet.get(), nowMs);
342
+
343
+ if (this->streamResetHandler.ShouldSendStreamResetRequest())
344
+ {
345
+ this->streamResetHandler.AddStreamResetRequest(packet.get());
346
+ }
347
+ }
348
+
349
+ auto chunksToSend =
350
+ this->retransmissionQueue.GetChunksToSend(nowMs, packet->GetAvailableLength());
351
+
352
+ if (!chunksToSend.empty())
353
+ {
354
+ // https://datatracker.ietf.org/doc/html/rfc9260#section-8.3
355
+ //
356
+ // Sending DATA means that the path is not idle, restart heartbeat
357
+ // timer.
358
+ this->heartbeatHandler.RestartTimer();
359
+ }
360
+
361
+ const bool immediateAck =
362
+ GetCwnd() < (this->sctpOptions.immediateSackUnderCwndMtus * this->sctpOptions.mtu);
363
+
364
+ for (auto& [tsn, data] : chunksToSend)
365
+ {
366
+ if (this->negotiatedCapabilities.messageInterleaving)
367
+ {
368
+ auto* iDataChunk = packet->BuildChunkInPlace<IDataChunk>();
369
+
370
+ iDataChunk->SetTsn(tsn);
371
+ iDataChunk->SetI(immediateAck);
372
+ iDataChunk->SetUserData(std::move(data));
373
+ iDataChunk->Consolidate();
374
+ }
375
+ else
376
+ {
377
+ auto* dataChunk = packet->BuildChunkInPlace<DataChunk>();
378
+
379
+ dataChunk->SetTsn(tsn);
380
+ dataChunk->SetI(immediateAck);
381
+ dataChunk->SetUserData(std::move(data));
382
+ dataChunk->Consolidate();
383
+ }
384
+ }
385
+
386
+ // https://datatracker.ietf.org/doc/html/rfc9653#section-5.2
387
+ //
388
+ // "When an end point sends a packet containing a COOKIE ECHO chunk, it
389
+ // MUST include a correct CRC32c checksum in the packet containing the
390
+ // COOKIE ECHO chunk."
391
+ if (!this->packetSender.SendPacket(
392
+ packet.get(),
393
+ /*writeChecksum*/ !negotiatedCapabilities.zeroChecksum ||
394
+ this->remoteStateCookie.has_value()))
395
+ {
396
+ break;
397
+ }
398
+
399
+ // https://datatracker.ietf.org/doc/html/rfc9260#section-5.1
400
+ //
401
+ // "until the COOKIE ACK is returned the sender MUST NOT send any
402
+ // other packets to the peer."
403
+ if (this->remoteStateCookie.has_value())
404
+ {
405
+ break;
406
+ }
407
+ }
408
+ }
409
+
410
+ void TransmissionControlBlock::OnT3RtxTimer(uint64_t& /*baseTimeoutMs*/, bool& /*stop*/)
411
+ {
412
+ MS_TRACE();
302
413
 
303
414
  // In the COOKIE_ECHO state, let the T1-COOKIE timer trigger
304
415
  // retransmissions, to avoid having two timers doing that.
@@ -312,10 +423,9 @@ namespace RTC
312
423
  {
313
424
  this->retransmissionQueue.HandleT3RtxTimerExpiry();
314
425
 
315
- // const uint64_t nowMs = DepLibUV::GetTimeMs();
426
+ const uint64_t nowMs = this->shared->GetTimeMs();
316
427
 
317
- // TODO: SCTP: Implement
318
- // SendBufferedPackets(nowMs);
428
+ SendBufferedPackets(nowMs);
319
429
  }
320
430
  }
321
431
  }
@@ -324,25 +434,25 @@ namespace RTC
324
434
  {
325
435
  MS_TRACE();
326
436
 
327
- const auto maxRestarts = this->delayedAckTimer->GetMaxRestarts();
328
-
329
- MS_DEBUG_TAG(
330
- sctp,
331
- "delayer ack timer has expired [%zu/%s]",
332
- this->delayedAckTimer->GetExpirationCount(),
333
- maxRestarts ? std::to_string(maxRestarts.value()).c_str() : "Infinite");
334
-
335
- // TODO: SCTP: Implement it.
336
- // this->dataTracker.HandleDelayedAckTimerExpiry();
437
+ this->dataTracker.HandleDelayedAckTimerExpiry();
337
438
 
338
439
  MaySendSackChunk();
339
440
  }
340
441
 
341
- void TransmissionControlBlock::OnTimer(
442
+ void TransmissionControlBlock::OnBackoffTimer(
342
443
  BackoffTimerHandleInterface* backoffTimer, uint64_t& baseTimeoutMs, bool& stop)
343
444
  {
344
445
  MS_TRACE();
345
446
 
447
+ const auto maxRestarts = backoffTimer->GetMaxRestarts();
448
+
449
+ MS_DEBUG_TAG(
450
+ sctp,
451
+ "%s timer has expired [expìrations:%zu/%s]",
452
+ backoffTimer->GetLabel().c_str(),
453
+ backoffTimer->GetExpirationCount(),
454
+ maxRestarts ? std::to_string(maxRestarts.value()).c_str() : "Infinite");
455
+
346
456
  if (backoffTimer == this->t3RtxTimer.get())
347
457
  {
348
458
  OnT3RtxTimer(baseTimeoutMs, stop);
@@ -4,7 +4,6 @@
4
4
  #include "RTC/SCTP/packet/Chunk.hpp"
5
5
  #include "Logger.hpp"
6
6
  #include "MediaSoupErrors.hpp"
7
- #include "Utils.hpp"
8
7
  #include "RTC/SCTP/packet/errorCauses/CookieReceivedWhileShuttingDownErrorCause.hpp"
9
8
  #include "RTC/SCTP/packet/errorCauses/InvalidMandatoryParameterErrorCause.hpp"
10
9
  #include "RTC/SCTP/packet/errorCauses/InvalidStreamIdentifierErrorCause.hpp"
@@ -36,6 +35,7 @@
36
35
  #include "RTC/SCTP/packet/parameters/UnknownParameter.hpp"
37
36
  #include "RTC/SCTP/packet/parameters/UnrecognizedParameterParameter.hpp"
38
37
  #include "RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp"
38
+ #include "Utils.hpp"
39
39
 
40
40
  namespace RTC
41
41
  {
@@ -215,6 +215,10 @@ namespace RTC
215
215
  MS_DUMP_CLEAN(
216
216
  indentation, " flags: " MS_UINT8_TO_BINARY_PATTERN, MS_UINT8_TO_BINARY(GetFlags()));
217
217
  TLV::DumpCommon(indentation);
218
+ MS_DUMP_CLEAN(
219
+ indentation,
220
+ " needs consolidation of parameters or error causes: %s",
221
+ NeedsConsolidation() ? "yes" : "no");
218
222
  }
219
223
 
220
224
  void Chunk::DumpParameters(int indentation) const
@@ -4,7 +4,6 @@
4
4
  #include "RTC/SCTP/packet/Packet.hpp"
5
5
  #include "Logger.hpp"
6
6
  #include "MediaSoupErrors.hpp"
7
- #include "Utils.hpp"
8
7
  #include "RTC/SCTP/packet/chunks/AbortAssociationChunk.hpp"
9
8
  #include "RTC/SCTP/packet/chunks/CookieAckChunk.hpp"
10
9
  #include "RTC/SCTP/packet/chunks/CookieEchoChunk.hpp"
@@ -23,6 +22,7 @@
23
22
  #include "RTC/SCTP/packet/chunks/ShutdownChunk.hpp"
24
23
  #include "RTC/SCTP/packet/chunks/ShutdownCompleteChunk.hpp"
25
24
  #include "RTC/SCTP/packet/chunks/UnknownChunk.hpp"
25
+ #include "Utils.hpp"
26
26
 
27
27
  namespace RTC
28
28
  {
@@ -300,6 +300,8 @@ namespace RTC
300
300
  MS_DUMP_CLEAN(indentation, " verification tag: %" PRIu32, GetVerificationTag());
301
301
  MS_DUMP_CLEAN(indentation, " checksum: %" PRIu32, GetChecksum());
302
302
  MS_DUMP_CLEAN(indentation, " chunks count: %zu", GetChunksCount());
303
+ MS_DUMP_CLEAN(
304
+ indentation, " needs consolidation of chunks: %s", NeedsConsolidation() ? "yes" : "no");
303
305
  for (const auto* chunk : this->chunks)
304
306
  {
305
307
  chunk->Dump(indentation + 1);
@@ -440,6 +442,11 @@ namespace RTC
440
442
  {
441
443
  try
442
444
  {
445
+ if (chunk->NeedsConsolidation())
446
+ {
447
+ MS_THROW_ERROR("ongoing Chunk needs consolidation");
448
+ }
449
+
443
450
  // Fix buffer length assigned to the Chunk.
444
451
  chunk->SetBufferLength(chunk->GetLength());
445
452
 
@@ -195,6 +195,23 @@ namespace RTC
195
195
  SetVariableLengthValue(userDataPayload, userDataPayloadLength);
196
196
  }
197
197
 
198
+ void DataChunk::SetUserData(UserData userData)
199
+ {
200
+ MS_TRACE();
201
+
202
+ SetStreamId(userData.GetStreamId());
203
+ SetStreamSequenceNumber(userData.GetStreamSequenceNumber());
204
+ SetPayloadProtocolId(userData.GetPayloadProtocolId());
205
+
206
+ SetB(userData.IsBeginning());
207
+ SetE(userData.IsEnd());
208
+ SetU(userData.IsUnordered());
209
+
210
+ const auto payload = std::move(userData).ReleasePayload();
211
+
212
+ SetUserDataPayload(payload.data(), payload.size());
213
+ }
214
+
198
215
  DataChunk* DataChunk::SoftClone(const uint8_t* buffer) const
199
216
  {
200
217
  MS_TRACE();
@@ -155,13 +155,13 @@ namespace RTC
155
155
 
156
156
  for (uint16_t idx{ 0 }; idx < numSkippedStreams; ++idx)
157
157
  {
158
- skippedStreams.emplace_back(GetStreamIdAt(idx), GetStreamSequenceAt(idx));
158
+ skippedStreams.emplace_back(GetSkippedStreamIdAt(idx), GetStreamSequenceAt(idx));
159
159
  }
160
160
 
161
161
  return skippedStreams;
162
162
  }
163
163
 
164
- void ForwardTsnChunk::AddStream(uint16_t streamId, uint16_t streamSequence)
164
+ void ForwardTsnChunk::AddSkippedStream(const AnyForwardTsnChunk::SkippedStream& skippedStream)
165
165
  {
166
166
  MS_TRACE();
167
167
 
@@ -172,9 +172,9 @@ namespace RTC
172
172
 
173
173
  // Add the new stream and stream sequence.
174
174
  Utils::Byte::Set2Bytes(
175
- GetVariableLengthValuePointer(), previousVariableLengthValueLength, streamId);
175
+ GetVariableLengthValuePointer(), previousVariableLengthValueLength, skippedStream.streamId);
176
176
  Utils::Byte::Set2Bytes(
177
- GetVariableLengthValuePointer(), previousVariableLengthValueLength + 2, streamSequence);
177
+ GetVariableLengthValuePointer(), previousVariableLengthValueLength + 2, skippedStream.ssn);
178
178
  }
179
179
 
180
180
  ForwardTsnChunk* ForwardTsnChunk::SoftClone(const uint8_t* buffer) const
@@ -223,6 +223,31 @@ namespace RTC
223
223
  SetVariableLengthValue(userDataPayload, userDataPayloadLength);
224
224
  }
225
225
 
226
+ void IDataChunk::SetUserData(UserData userData)
227
+ {
228
+ MS_TRACE();
229
+
230
+ SetStreamId(userData.GetStreamId());
231
+ SetMessageId(userData.GetMessageId());
232
+
233
+ SetB(userData.IsBeginning());
234
+ SetE(userData.IsEnd());
235
+ SetU(userData.IsUnordered());
236
+
237
+ if (GetB())
238
+ {
239
+ SetPayloadProtocolId(userData.GetPayloadProtocolId());
240
+ }
241
+ else
242
+ {
243
+ SetFragmentSequenceNumber(userData.GetFragmentSequenceNumber());
244
+ }
245
+
246
+ const auto payload = std::move(userData).ReleasePayload();
247
+
248
+ SetUserDataPayload(payload.data(), payload.size());
249
+ }
250
+
226
251
  IDataChunk* IDataChunk::SoftClone(const uint8_t* buffer) const
227
252
  {
228
253
  MS_TRACE();
@@ -118,9 +118,9 @@ namespace RTC
118
118
  {
119
119
  MS_DUMP_CLEAN(
120
120
  indentation,
121
- " - stream id: %" PRIu16 ", unordered:%s, mid:%" PRIu32,
122
- skippedStream.streamId,
121
+ " - unordered:%s, stream id: %" PRIu16 ", mid:%" PRIu32,
123
122
  skippedStream.unordered ? "yes" : "no",
123
+ skippedStream.streamId,
124
124
  skippedStream.mid);
125
125
  }
126
126
  MS_DUMP_CLEAN(indentation, "</SCTP::IForwardTsnChunk>");
@@ -156,13 +156,14 @@ namespace RTC
156
156
 
157
157
  for (uint16_t idx{ 0 }; idx < numSkippedStreams; ++idx)
158
158
  {
159
- skippedStreams.emplace_back(GetStreamIdAt(idx), GetUFlagAt(idx), GetMessageIdentifierAt(idx));
159
+ skippedStreams.emplace_back(
160
+ GetUFlagAt(idx), GetSkippedStreamIdAt(idx), GetMessageIdentifierAt(idx));
160
161
  }
161
162
 
162
163
  return skippedStreams;
163
164
  }
164
165
 
165
- void IForwardTsnChunk::AddStream(uint16_t streamId, bool uFlag, uint32_t messageIdentifier)
166
+ void IForwardTsnChunk::AddSkippedStream(const AnyForwardTsnChunk::SkippedStream& skippedStream)
166
167
  {
167
168
  MS_TRACE();
168
169
 
@@ -173,11 +174,13 @@ namespace RTC
173
174
 
174
175
  // Add the new stream, flag U and message identifier.
175
176
  Utils::Byte::Set2Bytes(
176
- GetVariableLengthValuePointer(), previousVariableLengthValueLength, streamId);
177
+ GetVariableLengthValuePointer(), previousVariableLengthValueLength, skippedStream.streamId);
177
178
  Utils::Byte::Set2Bytes(
178
- GetVariableLengthValuePointer(), previousVariableLengthValueLength + 2, uFlag);
179
+ GetVariableLengthValuePointer(),
180
+ previousVariableLengthValueLength + 2,
181
+ skippedStream.unordered);
179
182
  Utils::Byte::Set4Bytes(
180
- GetVariableLengthValuePointer(), previousVariableLengthValueLength + 4, messageIdentifier);
183
+ GetVariableLengthValuePointer(), previousVariableLengthValueLength + 4, skippedStream.mid);
181
184
  }
182
185
 
183
186
  IForwardTsnChunk* IForwardTsnChunk::SoftClone(const uint8_t* buffer) const
@@ -148,18 +148,35 @@ namespace RTC
148
148
  return clonedChunk;
149
149
  }
150
150
 
151
- void SackChunk::SetCumulativeTsnAck(uint32_t value)
151
+ void SackChunk::SetCumulativeTsnAck(uint32_t tsn)
152
152
  {
153
153
  MS_TRACE();
154
154
 
155
- Utils::Byte::Set4Bytes(const_cast<uint8_t*>(GetBuffer()), 4, value);
155
+ Utils::Byte::Set4Bytes(const_cast<uint8_t*>(GetBuffer()), 4, tsn);
156
156
  }
157
157
 
158
- void SackChunk::SetAdvertisedReceiverWindowCredit(uint32_t value)
158
+ void SackChunk::SetAdvertisedReceiverWindowCredit(uint32_t aRwnd)
159
159
  {
160
160
  MS_TRACE();
161
161
 
162
- Utils::Byte::Set4Bytes(const_cast<uint8_t*>(GetBuffer()), 8, value);
162
+ Utils::Byte::Set4Bytes(const_cast<uint8_t*>(GetBuffer()), 8, aRwnd);
163
+ }
164
+
165
+ std::vector<SackChunk::GapAckBlock> SackChunk::GetGapAckBlocks() const
166
+ {
167
+ MS_TRACE();
168
+
169
+ const uint16_t numberOfGapAckBlocks = GetNumberOfGapAckBlocks();
170
+ std::vector<SackChunk::GapAckBlock> gapAckBlocks;
171
+
172
+ gapAckBlocks.reserve(numberOfGapAckBlocks);
173
+
174
+ for (uint16_t idx{ 0 }; idx < numberOfGapAckBlocks; ++idx)
175
+ {
176
+ gapAckBlocks.emplace_back(GetAckBlockStartAt(idx), GetAckBlockEndAt(idx));
177
+ }
178
+
179
+ return gapAckBlocks;
163
180
  }
164
181
 
165
182
  std::vector<SackChunk::GapAckBlock> SackChunk::GetValidatedGapAckBlocks() const
@@ -1,5 +1,5 @@
1
1
  #define MS_CLASS "RTC::SCTP::ShutdownCompleteChunk"
2
- #define MS_LOG_DEV_LEVEL 3
2
+ // #define MS_LOG_DEV_LEVEL 3
3
3
 
4
4
  #include "RTC/SCTP/packet/chunks/ShutdownCompleteChunk.hpp"
5
5
  #include "Logger.hpp"
@@ -137,7 +137,7 @@ namespace RTC
137
137
  {
138
138
  MS_TRACE();
139
139
 
140
- return "tsn:[" + std::to_string(GetTsn()) + "]";
140
+ return "tsn:\"" + std::to_string(GetTsn()) + "\"";
141
141
  }
142
142
  } // namespace SCTP
143
143
  } // namespace RTC
@@ -141,11 +141,11 @@ namespace RTC
141
141
 
142
142
  if (HasAdditionalInformation())
143
143
  {
144
- return "info:[" +
144
+ return "info::\"" +
145
145
  std::string(
146
146
  reinterpret_cast<const char*>(GetAdditionalInformation()),
147
147
  GetAdditionalInformationLength()) +
148
- "]";
148
+ "\"";
149
149
  }
150
150
  else
151
151
  {