mediasoup 3.19.21 → 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 (649) 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 +2 -1
  44. package/node/lib/Worker.d.ts.map +1 -1
  45. package/node/lib/Worker.js +71 -25
  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 +13 -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 +13 -3
  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 +14 -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/ChannelMessageRegistrator.hpp +39 -0
  316. package/worker/include/Channel/ChannelMessageRegistratorInterface.hpp +32 -0
  317. package/worker/include/Channel/ChannelRequest.hpp +1 -1
  318. package/worker/include/Channel/ChannelSocket.hpp +1 -1
  319. package/worker/include/DepLibUV.hpp +1 -1
  320. package/worker/include/DepLibUring.hpp +3 -3
  321. package/worker/include/Logger.hpp +4 -4
  322. package/worker/include/MediaSoupErrors.hpp +1 -1
  323. package/worker/include/RTC/ActiveSpeakerObserver.hpp +11 -9
  324. package/worker/include/RTC/AudioLevelObserver.hpp +7 -7
  325. package/worker/include/RTC/Consumer.hpp +3 -3
  326. package/worker/include/RTC/DataConsumer.hpp +13 -17
  327. package/worker/include/RTC/DataProducer.hpp +6 -9
  328. package/worker/include/RTC/DirectTransport.hpp +4 -6
  329. package/worker/include/RTC/DtlsTransport.hpp +13 -11
  330. package/worker/include/RTC/ICE/IceServer.hpp +8 -5
  331. package/worker/include/RTC/ICE/StunPacket.hpp +1 -1
  332. package/worker/include/RTC/KeyFrameRequestManager.hpp +15 -12
  333. package/worker/include/RTC/NackGenerator.hpp +8 -6
  334. package/worker/include/RTC/PipeConsumer.hpp +1 -2
  335. package/worker/include/RTC/PipeTransport.hpp +4 -6
  336. package/worker/include/RTC/PlainTransport.hpp +4 -6
  337. package/worker/include/RTC/PortManager.hpp +1 -1
  338. package/worker/include/RTC/Producer.hpp +3 -3
  339. package/worker/include/RTC/RTCP/FeedbackPs.hpp +1 -1
  340. package/worker/include/RTC/RTCP/FeedbackRtp.hpp +1 -1
  341. package/worker/include/RTC/RTCP/FeedbackRtpNack.hpp +1 -1
  342. package/worker/include/RTC/RTCP/ReceiverReport.hpp +1 -1
  343. package/worker/include/RTC/RTP/Packet.hpp +2 -2
  344. package/worker/include/RTC/RTP/RtpStream.hpp +17 -12
  345. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +8 -6
  346. package/worker/include/RTC/RTP/RtpStreamSend.hpp +4 -1
  347. package/worker/include/RTC/RTP/RtxStream.hpp +3 -1
  348. package/worker/include/RTC/RTP/SharedPacket.hpp +1 -1
  349. package/worker/include/RTC/RateCalculator.hpp +5 -2
  350. package/worker/include/RTC/Router.hpp +7 -8
  351. package/worker/include/RTC/RtpObserver.hpp +3 -3
  352. package/worker/include/RTC/SCTP/association/Association.hpp +53 -19
  353. package/worker/include/RTC/SCTP/association/AssociationListenerDeferrer.hpp +14 -6
  354. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +18 -14
  355. package/worker/include/RTC/SCTP/association/PacketSender.hpp +3 -3
  356. package/worker/include/RTC/SCTP/association/StateCookie.hpp +1 -1
  357. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +49 -35
  358. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +114 -31
  359. package/worker/include/RTC/SCTP/association/{TCBContext.hpp → TransmissionControlBlockContextInterface.hpp} +14 -8
  360. package/worker/include/RTC/SCTP/packet/Chunk.hpp +3 -3
  361. package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
  362. package/worker/include/RTC/SCTP/packet/UserData.hpp +61 -17
  363. package/worker/include/RTC/SCTP/packet/chunks/AnyDataChunk.hpp +1 -1
  364. package/worker/include/RTC/SCTP/packet/chunks/AnyForwardTsnChunk.hpp +9 -9
  365. package/worker/include/RTC/SCTP/packet/chunks/AnyInitChunk.hpp +1 -1
  366. package/worker/include/RTC/SCTP/packet/chunks/DataChunk.hpp +4 -2
  367. package/worker/include/RTC/SCTP/packet/chunks/ForwardTsnChunk.hpp +3 -3
  368. package/worker/include/RTC/SCTP/packet/chunks/IDataChunk.hpp +4 -2
  369. package/worker/include/RTC/SCTP/packet/chunks/IForwardTsnChunk.hpp +3 -3
  370. package/worker/include/RTC/SCTP/packet/chunks/InitAckChunk.hpp +1 -1
  371. package/worker/include/RTC/SCTP/packet/chunks/InitChunk.hpp +1 -1
  372. package/worker/include/RTC/SCTP/packet/chunks/SackChunk.hpp +10 -3
  373. package/worker/include/RTC/SCTP/packet/chunks/ShutdownChunk.hpp +1 -1
  374. package/worker/include/RTC/SCTP/packet/errorCauses/InvalidStreamIdentifierErrorCause.hpp +1 -1
  375. package/worker/include/RTC/SCTP/packet/errorCauses/MissingMandatoryParameterErrorCause.hpp +1 -1
  376. package/worker/include/RTC/SCTP/packet/errorCauses/NoUserDataErrorCause.hpp +1 -1
  377. package/worker/include/RTC/SCTP/packet/errorCauses/StaleCookieErrorCause.hpp +1 -1
  378. package/worker/include/RTC/SCTP/packet/parameters/AddIncomingStreamsRequestParameter.hpp +1 -1
  379. package/worker/include/RTC/SCTP/packet/parameters/AddOutgoingStreamsRequestParameter.hpp +1 -1
  380. package/worker/include/RTC/SCTP/packet/parameters/CookiePreservativeParameter.hpp +1 -1
  381. package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +1 -1
  382. package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +1 -1
  383. package/worker/include/RTC/SCTP/packet/parameters/ReconfigurationResponseParameter.hpp +1 -1
  384. package/worker/include/RTC/SCTP/packet/parameters/SsnTsnResetRequestParameter.hpp +1 -1
  385. package/worker/include/RTC/SCTP/packet/parameters/SupportedAddressTypesParameter.hpp +1 -1
  386. package/worker/include/RTC/SCTP/packet/parameters/SupportedExtensionsParameter.hpp +1 -1
  387. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +1 -1
  388. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +22 -2
  389. package/worker/include/RTC/SCTP/public/{AssociationListener.hpp → AssociationListenerInterface.hpp} +5 -5
  390. package/worker/include/RTC/SCTP/public/Message.hpp +26 -10
  391. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +28 -19
  392. package/worker/include/RTC/SCTP/public/SctpTypes.hpp +21 -0
  393. package/worker/include/RTC/SCTP/rx/DataTracker.hpp +277 -0
  394. package/worker/include/RTC/SCTP/rx/InterleavedReassemblyStreams.hpp +116 -0
  395. package/worker/include/RTC/SCTP/rx/ReassemblyQueue.hpp +202 -0
  396. package/worker/include/RTC/SCTP/rx/ReassemblyStreamsInterface.hpp +83 -0
  397. package/worker/include/RTC/SCTP/rx/TraditionalReassemblyStreams.hpp +183 -0
  398. package/worker/include/RTC/SCTP/tx/OutstandingData.hpp +595 -0
  399. package/worker/include/RTC/SCTP/tx/RetransmissionErrorCounter.hpp +3 -3
  400. package/worker/include/RTC/SCTP/tx/RetransmissionQueue.hpp +329 -0
  401. package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +11 -10
  402. package/worker/include/RTC/SCTP/tx/RoundRobinSendQueue.hpp +356 -0
  403. package/worker/include/RTC/SCTP/tx/SendQueueInterface.hpp +180 -0
  404. package/worker/include/RTC/SCTP/tx/StreamScheduler.hpp +235 -0
  405. package/worker/include/RTC/SenderBandwidthEstimator.hpp +5 -1
  406. package/worker/include/RTC/Serializable.hpp +11 -3
  407. package/worker/include/RTC/SimpleConsumer.hpp +1 -2
  408. package/worker/include/RTC/SimulcastConsumer.hpp +1 -2
  409. package/worker/include/RTC/SvcConsumer.hpp +1 -2
  410. package/worker/include/RTC/TcpServer.hpp +2 -2
  411. package/worker/include/RTC/Transport.hpp +65 -86
  412. package/worker/include/RTC/TransportCongestionControlClient.hpp +8 -5
  413. package/worker/include/RTC/TransportCongestionControlServer.hpp +8 -5
  414. package/worker/include/RTC/TransportTuple.hpp +1 -1
  415. package/worker/include/RTC/UdpSocket.hpp +1 -1
  416. package/worker/include/RTC/WebRtcServer.hpp +3 -3
  417. package/worker/include/RTC/WebRtcTransport.hpp +5 -7
  418. package/worker/include/Settings.hpp +2 -3
  419. package/worker/include/Shared.hpp +64 -0
  420. package/worker/include/SharedInterface.hpp +77 -0
  421. package/worker/include/Utils/UnwrappedSequenceNumber.hpp +270 -0
  422. package/worker/include/Utils.hpp +10 -4
  423. package/worker/include/Worker.hpp +6 -6
  424. package/worker/include/common.hpp +12 -12
  425. package/worker/include/handles/BackoffTimerHandle.hpp +28 -67
  426. package/worker/include/handles/BackoffTimerHandleInterface.hpp +123 -0
  427. package/worker/include/handles/TimerHandle.hpp +29 -20
  428. package/worker/include/handles/TimerHandleInterface.hpp +43 -0
  429. package/worker/meson.build +45 -29
  430. package/worker/meson_options.txt +2 -1
  431. package/worker/mocks/include/Channel/MockChannelMessageRegistrator.hpp +45 -0
  432. package/worker/mocks/include/MockShared.hpp +90 -0
  433. package/worker/mocks/include/RTC/SCTP/association/MockAssociationListener.hpp +308 -0
  434. package/worker/mocks/include/RTC/SCTP/association/MockTransmissionControlBlockContext.hpp +183 -0
  435. package/worker/mocks/include/RTC/SCTP/tx/MockSendQueue.hpp +262 -0
  436. package/worker/mocks/include/handles/MockBackoffTimerHandle.hpp +153 -0
  437. package/worker/mocks/include/handles/MockTimerHandle.hpp +74 -0
  438. package/worker/mocks/include/mockTypes.hpp +15 -0
  439. package/worker/mocks/src/Channel/MockChannelMessageRegistrator.cpp +128 -0
  440. package/worker/mocks/src/MockShared.cpp +46 -0
  441. package/worker/mocks/src/RTC/SCTP/association/MockTransmissionControlBlockContext.cpp +39 -0
  442. package/worker/mocks/src/handles/MockBackoffTimerHandle.cpp +127 -0
  443. package/worker/scripts/clang-scripts.mjs +5 -1
  444. package/worker/scripts/package-lock.json +6 -7
  445. package/worker/src/Channel/ChannelMessageRegistrator.cpp +125 -0
  446. package/worker/src/Channel/ChannelSocket.cpp +3 -4
  447. package/worker/src/DepLibUV.cpp +1 -1
  448. package/worker/src/DepLibUring.cpp +3 -1
  449. package/worker/src/Logger.cpp +1 -1
  450. package/worker/src/MediaSoupErrors.cpp +2 -0
  451. package/worker/src/RTC/ActiveSpeakerObserver.cpp +14 -14
  452. package/worker/src/RTC/AudioLevelObserver.cpp +12 -10
  453. package/worker/src/RTC/Consumer.cpp +28 -26
  454. package/worker/src/RTC/DataConsumer.cpp +61 -71
  455. package/worker/src/RTC/DataProducer.cpp +16 -11
  456. package/worker/src/RTC/DirectTransport.cpp +21 -20
  457. package/worker/src/RTC/DtlsTransport.cpp +4 -4
  458. package/worker/src/RTC/ICE/IceServer.cpp +6 -5
  459. package/worker/src/RTC/ICE/StunPacket.cpp +1 -1
  460. package/worker/src/RTC/KeyFrameRequestManager.cpp +15 -15
  461. package/worker/src/RTC/NackGenerator.cpp +6 -6
  462. package/worker/src/RTC/PipeConsumer.cpp +6 -5
  463. package/worker/src/RTC/PipeTransport.cpp +9 -22
  464. package/worker/src/RTC/PlainTransport.cpp +16 -28
  465. package/worker/src/RTC/Producer.cpp +40 -39
  466. package/worker/src/RTC/RTCP/FeedbackPsAfb.cpp +1 -1
  467. package/worker/src/RTC/RTCP/FeedbackPsRpsi.cpp +1 -2
  468. package/worker/src/RTC/RTCP/FeedbackRtpTransport.cpp +1 -1
  469. package/worker/src/RTC/RTCP/XR.cpp +1 -1
  470. package/worker/src/RTC/RTP/Packet.cpp +3 -1
  471. package/worker/src/RTC/RTP/ProbationGenerator.cpp +4 -4
  472. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +1 -1
  473. package/worker/src/RTC/RTP/RtpStream.cpp +17 -10
  474. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +16 -14
  475. package/worker/src/RTC/RTP/RtpStreamSend.cpp +12 -9
  476. package/worker/src/RTC/RTP/RtxStream.cpp +7 -7
  477. package/worker/src/RTC/RTP/SharedPacket.cpp +3 -3
  478. package/worker/src/RTC/RateCalculator.cpp +1 -2
  479. package/worker/src/RTC/Router.cpp +61 -38
  480. package/worker/src/RTC/RtpDictionaries/RtpCodecMimeType.cpp +1 -1
  481. package/worker/src/RTC/RtpObserver.cpp +2 -1
  482. package/worker/src/RTC/SCTP/LICENSE +44 -0
  483. package/worker/src/RTC/SCTP/association/Association.cpp +417 -411
  484. package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +46 -13
  485. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +47 -43
  486. package/worker/src/RTC/SCTP/association/PacketSender.cpp +8 -8
  487. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +113 -101
  488. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +291 -62
  489. package/worker/src/RTC/SCTP/packet/Chunk.cpp +5 -1
  490. package/worker/src/RTC/SCTP/packet/Packet.cpp +8 -1
  491. package/worker/src/RTC/SCTP/packet/chunks/DataChunk.cpp +17 -0
  492. package/worker/src/RTC/SCTP/packet/chunks/ForwardTsnChunk.cpp +4 -4
  493. package/worker/src/RTC/SCTP/packet/chunks/IDataChunk.cpp +25 -0
  494. package/worker/src/RTC/SCTP/packet/chunks/IForwardTsnChunk.cpp +10 -7
  495. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +21 -4
  496. package/worker/src/RTC/SCTP/packet/chunks/ShutdownCompleteChunk.cpp +1 -1
  497. package/worker/src/RTC/SCTP/packet/errorCauses/NoUserDataErrorCause.cpp +1 -1
  498. package/worker/src/RTC/SCTP/packet/errorCauses/ProtocolViolationErrorCause.cpp +2 -2
  499. package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +1 -1
  500. package/worker/src/RTC/SCTP/public/Message.cpp +8 -0
  501. package/worker/src/RTC/SCTP/public/SctpOptions.cpp +90 -0
  502. package/worker/src/RTC/SCTP/rx/DataTracker.cpp +471 -0
  503. package/worker/src/RTC/SCTP/rx/InterleavedReassemblyStreams.cpp +327 -0
  504. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +288 -0
  505. package/worker/src/RTC/SCTP/rx/TraditionalReassemblyStreams.cpp +453 -0
  506. package/worker/src/RTC/SCTP/tx/OutstandingData.cpp +912 -0
  507. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +786 -0
  508. package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +2 -2
  509. package/worker/src/RTC/SCTP/tx/RoundRobinSendQueue.cpp +752 -0
  510. package/worker/src/RTC/SCTP/tx/StreamScheduler.cpp +257 -0
  511. package/worker/src/RTC/SenderBandwidthEstimator.cpp +7 -5
  512. package/worker/src/RTC/SimpleConsumer.cpp +11 -11
  513. package/worker/src/RTC/SimulcastConsumer.cpp +16 -16
  514. package/worker/src/RTC/SrtpSession.cpp +1 -1
  515. package/worker/src/RTC/SvcConsumer.cpp +16 -16
  516. package/worker/src/RTC/TcpConnection.cpp +1 -1
  517. package/worker/src/RTC/Transport.cpp +497 -563
  518. package/worker/src/RTC/TransportCongestionControlClient.cpp +9 -8
  519. package/worker/src/RTC/TransportCongestionControlServer.cpp +5 -5
  520. package/worker/src/RTC/WebRtcServer.cpp +5 -4
  521. package/worker/src/RTC/WebRtcTransport.cpp +44 -39
  522. package/worker/src/Settings.cpp +9 -28
  523. package/worker/src/Shared.cpp +35 -0
  524. package/worker/src/Utils/Crypto.cpp +1 -1
  525. package/worker/src/Utils/String.cpp +1 -1
  526. package/worker/src/Worker.cpp +19 -48
  527. package/worker/src/handles/BackoffTimerHandle.cpp +34 -21
  528. package/worker/src/handles/TimerHandle.cpp +5 -4
  529. package/worker/src/handles/UdpSocketHandle.cpp +1 -1
  530. package/worker/src/lib.cpp +17 -16
  531. package/worker/subprojects/catch2.wrap +6 -6
  532. package/worker/tasks.py +1 -1
  533. package/worker/test/include/RTC/ICE/iceCommon.hpp +8 -7
  534. package/worker/test/include/RTC/RTP/rtpCommon.hpp +7 -6
  535. package/worker/test/include/RTC/SCTP/sctpCommon.hpp +16 -10
  536. package/worker/test/include/catch2Macros.hpp +31 -0
  537. package/worker/test/src/RTC/ICE/TestStunPacket.cpp +3 -3
  538. package/worker/test/src/RTC/ICE/iceCommon.cpp +2 -2
  539. package/worker/test/src/RTC/RTP/Codecs/TestVP8.cpp +1 -1
  540. package/worker/test/src/RTC/RTP/Codecs/TestVP9.cpp +1 -1
  541. package/worker/test/src/RTC/RTP/TestPacket.cpp +3 -3
  542. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +16 -9
  543. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +38 -23
  544. package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
  545. package/worker/test/src/RTC/RTP/rtpCommon.cpp +2 -2
  546. package/worker/test/src/RTC/SCTP/association/TestHeartbeatHandler.cpp +292 -0
  547. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +1 -1
  548. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +1 -1
  549. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +99 -0
  550. package/worker/test/src/RTC/SCTP/packet/TestChunk.cpp +1 -1
  551. package/worker/test/src/RTC/SCTP/packet/TestPacket.cpp +1 -1
  552. package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +1 -1
  553. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieAckChunk.cpp +1 -1
  554. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieEchoChunk.cpp +1 -1
  555. package/worker/test/src/RTC/SCTP/packet/chunks/TestDataChunk.cpp +77 -7
  556. package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +35 -26
  557. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +1 -1
  558. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +1 -1
  559. package/worker/test/src/RTC/SCTP/packet/chunks/TestIDataChunk.cpp +77 -7
  560. package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +59 -27
  561. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +1 -1
  562. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +1 -1
  563. package/worker/test/src/RTC/SCTP/packet/chunks/TestOperationErrorChunk.cpp +1 -1
  564. package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +1 -1
  565. package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +73 -35
  566. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownAckChunk.cpp +1 -1
  567. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownChunk.cpp +1 -1
  568. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownCompleteChunk.cpp +1 -1
  569. package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +1 -1
  570. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestCookieReceivedWhileShuttingDownErrorCause.cpp +1 -1
  571. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidMandatoryParameterErrorCause.cpp +1 -1
  572. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidStreamIdentifierErrorCause.cpp +1 -1
  573. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestMissingMandatoryParameterErrorCause.cpp +1 -1
  574. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestNoUserDataErrorCause.cpp +1 -1
  575. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestOutOfResourceErrorCause.cpp +1 -1
  576. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestProtocolViolationErrorCause.cpp +1 -1
  577. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestRestartOfAnAssociationWithNewAddressesErrorCause.cpp +1 -1
  578. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestStaleCookieErrorCause.cpp +1 -1
  579. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +1 -1
  580. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedChunkTypeErrorCause.cpp +1 -1
  581. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedParametersErrorCause.cpp +1 -1
  582. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnresolvableAddressErrorCause.cpp +1 -1
  583. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUserInitiatedAbortErrorCause.cpp +1 -1
  584. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddIncomingStreamsRequestParameter.cpp +1 -1
  585. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddOutgoingStreamsRequestParameter.cpp +1 -1
  586. package/worker/test/src/RTC/SCTP/packet/parameters/TestCookiePreservativeParameter.cpp +1 -1
  587. package/worker/test/src/RTC/SCTP/packet/parameters/TestForwardTsnSupportedParameter.cpp +1 -1
  588. package/worker/test/src/RTC/SCTP/packet/parameters/TestHeartbeatInfoParameter.cpp +1 -1
  589. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv4AddressParameter.cpp +1 -1
  590. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +1 -1
  591. package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +1 -1
  592. package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +1 -1
  593. package/worker/test/src/RTC/SCTP/packet/parameters/TestReconfigurationResponseParameter.cpp +1 -1
  594. package/worker/test/src/RTC/SCTP/packet/parameters/TestSsnTsnResetRequestParameter.cpp +1 -1
  595. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +1 -1
  596. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedAddressTypesParameter.cpp +1 -1
  597. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +1 -1
  598. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnknownParameter.cpp +1 -1
  599. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnrecognizedParameterParameter.cpp +1 -1
  600. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +1 -1
  601. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +1117 -0
  602. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +565 -0
  603. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +557 -0
  604. package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +555 -0
  605. package/worker/test/src/RTC/SCTP/sctpCommon.cpp +2 -2
  606. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +1248 -0
  607. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionErrorCounter.cpp +4 -0
  608. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +2218 -0
  609. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +33 -33
  610. package/worker/test/src/RTC/SCTP/tx/TestRoundRobinSendQueue.cpp +1130 -0
  611. package/worker/test/src/RTC/SCTP/tx/TestStreamScheduler.cpp +721 -0
  612. package/worker/test/src/RTC/TestKeyFrameRequestManager.cpp +20 -30
  613. package/worker/test/src/RTC/TestNackGenerator.cpp +11 -8
  614. package/worker/test/src/RTC/TestRateCalculator.cpp +6 -7
  615. package/worker/test/src/RTC/TestSimpleConsumer.cpp +11 -11
  616. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +15 -3
  617. package/worker/test/src/Utils/TestByte.cpp +98 -0
  618. package/worker/test/src/{RTC/SCTP/common → Utils}/TestUnwrappedSequenceNumber.cpp +2 -2
  619. package/worker/test/src/testHelpers.cpp +1 -1
  620. package/worker/test/src/tests.cpp +0 -12
  621. package/node/lib/fbs/consumer/degrade-request.d.ts +0 -30
  622. package/node/lib/fbs/consumer/degrade-request.d.ts.map +0 -1
  623. package/node/lib/fbs/consumer/degrade-request.js +0 -91
  624. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts +0 -24
  625. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts.map +0 -1
  626. package/node/lib/fbs/consumer/enable-delay-and-loss-request.js +0 -69
  627. package/node/lib/fbs/producer/degrade-request.d.ts +0 -30
  628. package/node/lib/fbs/producer/degrade-request.d.ts.map +0 -1
  629. package/node/lib/fbs/producer/degrade-request.js +0 -91
  630. package/node/lib/fbs/worker/close-notification.d.ts +0 -18
  631. package/node/lib/fbs/worker/close-notification.d.ts.map +0 -1
  632. package/node/lib/fbs/worker/close-notification.js +0 -45
  633. package/node/lib/fbs/worker/close-request.d.ts +0 -18
  634. package/node/lib/fbs/worker/close-request.d.ts.map +0 -1
  635. package/node/lib/fbs/worker/close-request.js +0 -45
  636. package/node/lib/fbs/worker/close-worker-notification.d.ts +0 -18
  637. package/node/lib/fbs/worker/close-worker-notification.d.ts.map +0 -1
  638. package/node/lib/fbs/worker/close-worker-notification.js +0 -45
  639. package/worker/include/ChannelMessageRegistrator.hpp +0 -30
  640. package/worker/include/DepUsrSCTP.hpp +0 -48
  641. package/worker/include/RTC/SCTP/TODO_SCTP.md +0 -43
  642. package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +0 -274
  643. package/worker/include/RTC/SctpAssociation.hpp +0 -147
  644. package/worker/include/RTC/Shared.hpp +0 -23
  645. package/worker/src/ChannelMessageRegistrator.cpp +0 -119
  646. package/worker/src/DepUsrSCTP.cpp +0 -277
  647. package/worker/src/RTC/SctpAssociation.cpp +0 -1175
  648. package/worker/src/RTC/Shared.cpp +0 -23
  649. package/worker/subprojects/usrsctp.wrap +0 -8
@@ -2,13 +2,14 @@
2
2
  #define MS_RTC_TRANSPORT_CONGESTION_CONTROL_CLIENT_HPP
3
3
 
4
4
  #include "common.hpp"
5
+ #include "handles/TimerHandleInterface.hpp"
5
6
  #include "RTC/BweType.hpp"
6
7
  #include "RTC/RTCP/FeedbackRtpTransport.hpp"
7
8
  #include "RTC/RTCP/ReceiverReport.hpp"
8
9
  #include "RTC/RTP/Packet.hpp"
9
10
  #include "RTC/RTP/ProbationGenerator.hpp"
10
11
  #include "RTC/TrendCalculator.hpp"
11
- #include "handles/TimerHandle.hpp"
12
+ #include "SharedInterface.hpp"
12
13
  #include <libwebrtc/api/transport/goog_cc_factory.h>
13
14
  #include <libwebrtc/api/transport/network_types.h>
14
15
  #include <libwebrtc/call/rtp_transport_controller_send.h>
@@ -21,7 +22,7 @@ namespace RTC
21
22
 
22
23
  class TransportCongestionControlClient : public webrtc::PacketRouter,
23
24
  public webrtc::TargetTransferRateObserver,
24
- public TimerHandle::Listener
25
+ public TimerHandleInterface::Listener
25
26
  {
26
27
  public:
27
28
  struct Bitrates
@@ -54,6 +55,7 @@ namespace RTC
54
55
  public:
55
56
  TransportCongestionControlClient(
56
57
  RTC::TransportCongestionControlClient::Listener* listener,
58
+ SharedInterface* shared,
57
59
  RTC::BweType bweType,
58
60
  uint32_t initialAvailableBitrate,
59
61
  uint32_t maxOutgoingBitrate,
@@ -104,18 +106,19 @@ namespace RTC
104
106
  void SendPacket(RTC::RTP::Packet* packet, const webrtc::PacedPacketInfo& pacingInfo) override;
105
107
  RTC::RTP::Packet* GeneratePadding(size_t size) override;
106
108
 
107
- /* Pure virtual methods inherited from RTC::TimerHandle. */
109
+ /* Pure virtual methods inherited from RTC::TimerHandleInterface. */
108
110
  public:
109
- void OnTimer(TimerHandle* timer) override;
111
+ void OnTimer(TimerHandleInterface* timer) override;
110
112
 
111
113
  private:
112
114
  // Passed by argument.
113
115
  Listener* listener{ nullptr };
116
+ SharedInterface* shared{ nullptr };
114
117
  // Allocated by this.
115
118
  webrtc::NetworkControllerFactoryInterface* controllerFactory{ nullptr };
116
119
  webrtc::RtpTransportControllerSend* rtpTransportControllerSend{ nullptr };
117
120
  RTC::RTP::ProbationGenerator* probationGenerator{ nullptr };
118
- TimerHandle* processTimer{ nullptr };
121
+ TimerHandleInterface* processTimer{ nullptr };
119
122
  // Others.
120
123
  RTC::BweType bweType;
121
124
  uint32_t initialAvailableBitrate{ 0u };
@@ -2,19 +2,20 @@
2
2
  #define MS_RTC_TRANSPORT_CONGESTION_CONTROL_SERVER_HPP
3
3
 
4
4
  #include "common.hpp"
5
+ #include "handles/TimerHandleInterface.hpp"
5
6
  #include "RTC/BweType.hpp"
6
7
  #include "RTC/RTCP/FeedbackRtpTransport.hpp"
7
8
  #include "RTC/RTCP/Packet.hpp"
8
9
  #include "RTC/RTP/Packet.hpp"
9
10
  #include "RTC/SeqManager.hpp"
10
- #include "handles/TimerHandle.hpp"
11
+ #include "SharedInterface.hpp"
11
12
  #include <libwebrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h>
12
13
  #include <deque>
13
14
 
14
15
  namespace RTC
15
16
  {
16
17
  class TransportCongestionControlServer : public webrtc::RemoteBitrateEstimator::Listener,
17
- public TimerHandle::Listener
18
+ public TimerHandleInterface::Listener
18
19
  {
19
20
  public:
20
21
  class Listener
@@ -30,6 +31,7 @@ namespace RTC
30
31
  public:
31
32
  TransportCongestionControlServer(
32
33
  RTC::TransportCongestionControlServer::Listener* listener,
34
+ SharedInterface* shared,
33
35
  RTC::BweType bweType,
34
36
  size_t maxRtcpPacketLen);
35
37
  ~TransportCongestionControlServer() override;
@@ -72,15 +74,16 @@ namespace RTC
72
74
  const std::vector<uint32_t>& ssrcs,
73
75
  uint32_t availableBitrate) override;
74
76
 
75
- /* Pure virtual methods inherited from TimerHandle::Listener. */
77
+ /* Pure virtual methods inherited from TimerHandleInterface::Listener. */
76
78
  public:
77
- void OnTimer(TimerHandle* timer) override;
79
+ void OnTimer(TimerHandleInterface* timer) override;
78
80
 
79
81
  private:
80
82
  // Passed by argument.
81
83
  Listener* listener{ nullptr };
84
+ SharedInterface* shared{ nullptr };
82
85
  // Allocated by this.
83
- TimerHandle* transportCcFeedbackSendPeriodicTimer{ nullptr };
86
+ TimerHandleInterface* transportCcFeedbackSendPeriodicTimer{ nullptr };
84
87
  std::unique_ptr<RTC::RTCP::FeedbackRtpTransportPacket> transportCcFeedbackPacket;
85
88
  webrtc::RemoteBitrateEstimatorAbsSendTime* rembServer{ nullptr };
86
89
  // Others.
@@ -2,10 +2,10 @@
2
2
  #define MS_RTC_TRANSPORT_TUPLE_HPP
3
3
 
4
4
  #include "common.hpp"
5
- #include "Utils.hpp"
6
5
  #include "FBS/transport.h"
7
6
  #include "RTC/TcpConnection.hpp"
8
7
  #include "RTC/UdpSocket.hpp"
8
+ #include "Utils.hpp"
9
9
  #include <flatbuffers/flatbuffers.h>
10
10
  #include <string>
11
11
 
@@ -2,8 +2,8 @@
2
2
  #define MS_RTC_UDP_SOCKET_HPP
3
3
 
4
4
  #include "common.hpp"
5
- #include "RTC/Transport.hpp"
6
5
  #include "handles/UdpSocketHandle.hpp"
6
+ #include "RTC/Transport.hpp"
7
7
  #include <string>
8
8
 
9
9
  namespace RTC
@@ -4,12 +4,12 @@
4
4
  #include "Channel/ChannelRequest.hpp"
5
5
  #include "RTC/ICE/IceCandidate.hpp"
6
6
  #include "RTC/ICE/StunPacket.hpp"
7
- #include "RTC/Shared.hpp"
8
7
  #include "RTC/TcpConnection.hpp"
9
8
  #include "RTC/TcpServer.hpp"
10
9
  #include "RTC/TransportTuple.hpp"
11
10
  #include "RTC/UdpSocket.hpp"
12
11
  #include "RTC/WebRtcTransport.hpp"
12
+ #include "SharedInterface.hpp"
13
13
  #include <flatbuffers/flatbuffers.h>
14
14
  #include <absl/container/flat_hash_map.h>
15
15
  #include <absl/container/flat_hash_set.h>
@@ -52,7 +52,7 @@ namespace RTC
52
52
 
53
53
  public:
54
54
  WebRtcServer(
55
- RTC::Shared* shared,
55
+ SharedInterface* shared,
56
56
  const std::string& id,
57
57
  const flatbuffers::Vector<flatbuffers::Offset<FBS::Transport::ListenInfo>>* listenInfos);
58
58
  ~WebRtcServer() override;
@@ -112,7 +112,7 @@ namespace RTC
112
112
  // Passed by argument.
113
113
  std::string id;
114
114
  // Passed by argument.
115
- RTC::Shared* shared{ nullptr };
115
+ SharedInterface* shared{ nullptr };
116
116
  // Vector of UdpSockets and TcpServers in the user given order.
117
117
  std::vector<UdpSocketOrTcpServer> udpSocketOrTcpServers;
118
118
  // Set of WebRtcTransports.
@@ -5,13 +5,13 @@
5
5
  #include "RTC/ICE/IceCandidate.hpp"
6
6
  #include "RTC/ICE/IceServer.hpp"
7
7
  #include "RTC/ICE/StunPacket.hpp"
8
- #include "RTC/Shared.hpp"
9
8
  #include "RTC/SrtpSession.hpp"
10
9
  #include "RTC/TcpConnection.hpp"
11
10
  #include "RTC/TcpServer.hpp"
12
11
  #include "RTC/Transport.hpp"
13
12
  #include "RTC/TransportTuple.hpp"
14
13
  #include "RTC/UdpSocket.hpp"
14
+ #include "SharedInterface.hpp"
15
15
  #include <vector>
16
16
 
17
17
  namespace RTC
@@ -44,12 +44,12 @@ namespace RTC
44
44
 
45
45
  public:
46
46
  WebRtcTransport(
47
- RTC::Shared* shared,
47
+ SharedInterface* shared,
48
48
  const std::string& id,
49
49
  RTC::Transport::Listener* listener,
50
50
  const FBS::WebRtcTransport::WebRtcTransportOptions* options);
51
51
  WebRtcTransport(
52
- RTC::Shared* shared,
52
+ SharedInterface* shared,
53
53
  const std::string& id,
54
54
  RTC::Transport::Listener* listener,
55
55
  WebRtcTransportListener* webRtcTransportListener,
@@ -87,11 +87,9 @@ namespace RTC
87
87
  void SendRtcpCompoundPacket(RTC::RTCP::CompoundPacket* packet) override;
88
88
  void SendMessage(
89
89
  RTC::DataConsumer* dataConsumer,
90
- const uint8_t* msg,
91
- size_t len,
92
- uint32_t ppid,
90
+ RTC::SCTP::Message message,
93
91
  onQueuedCallback* cb = nullptr) override;
94
- bool SendSctpData(const uint8_t* data, size_t len) override;
92
+ bool SendData(const uint8_t* data, size_t len) override;
95
93
  void RecvStreamClosed(uint32_t ssrc) override;
96
94
  void SendStreamClosed(uint32_t ssrc) override;
97
95
  void OnPacketReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len, size_t bufferLen);
@@ -2,8 +2,8 @@
2
2
  #define MS_SETTINGS_HPP
3
3
 
4
4
  #include "common.hpp"
5
- #include "LogLevel.hpp"
6
5
  #include "Channel/ChannelRequest.hpp"
6
+ #include "LogLevel.hpp"
7
7
  #include <absl/container/flat_hash_map.h>
8
8
  #include <string>
9
9
  #include <vector>
@@ -40,7 +40,6 @@ public:
40
40
  std::string dtlsPrivateKeyFile;
41
41
  std::string libwebrtcFieldTrials{ "WebRTC-Bwe-AlrLimitedBackoff/Enabled/" };
42
42
  bool disableLiburing{ false };
43
- bool useBuiltInSctpStack{ false };
44
43
  };
45
44
 
46
45
  public:
@@ -54,7 +53,7 @@ private:
54
53
  static void SetDtlsCertificateAndPrivateKeyFiles();
55
54
 
56
55
  public:
57
- thread_local static struct Configuration configuration;
56
+ static thread_local struct Configuration configuration;
58
57
 
59
58
  private:
60
59
  static const absl::flat_hash_map<std::string, LogLevel> String2LogLevel;
@@ -0,0 +1,64 @@
1
+ #ifndef MS_SHARED_HPP
2
+ #define MS_SHARED_HPP
3
+
4
+ #include "Channel/ChannelMessageRegistrator.hpp"
5
+ #include "Channel/ChannelNotifier.hpp"
6
+ #include "DepLibUV.hpp"
7
+ #include "SharedInterface.hpp"
8
+
9
+ class Shared : public SharedInterface
10
+ {
11
+ public:
12
+ explicit Shared(
13
+ Channel::ChannelMessageRegistrator* channelMessageRegistrator,
14
+ Channel::ChannelNotifier* channelNotifier);
15
+
16
+ ~Shared() override;
17
+
18
+ public:
19
+ Channel::ChannelMessageRegistratorInterface* GetChannelMessageRegistrator() override
20
+ {
21
+ return this->channelMessageRegistrator.get();
22
+ }
23
+
24
+ Channel::ChannelNotifier* GetChannelNotifier() override
25
+ {
26
+ return this->channelNotifier.get();
27
+ }
28
+
29
+ TimerHandleInterface* CreateTimer(TimerHandleInterface::Listener* listener) override;
30
+
31
+ BackoffTimerHandleInterface* CreateBackoffTimer(
32
+ const BackoffTimerHandleInterface::BackoffTimerHandleOptions& options) override;
33
+
34
+ uint64_t GetTimeMs() override
35
+ {
36
+ return DepLibUV::GetTimeMs();
37
+ }
38
+
39
+ uint64_t GetTimeUs() override
40
+ {
41
+ return DepLibUV::GetTimeUs();
42
+ }
43
+
44
+ uint64_t GetTimeNs() override
45
+ {
46
+ return DepLibUV::GetTimeNs();
47
+ }
48
+
49
+ int64_t GetTimeMsInt64() override
50
+ {
51
+ return DepLibUV::GetTimeMsInt64();
52
+ }
53
+
54
+ int64_t GetTimeUsInt64() override
55
+ {
56
+ return DepLibUV::GetTimeUsInt64();
57
+ }
58
+
59
+ private:
60
+ std::unique_ptr<Channel::ChannelMessageRegistrator> channelMessageRegistrator;
61
+ std::unique_ptr<Channel::ChannelNotifier> channelNotifier;
62
+ };
63
+
64
+ #endif
@@ -0,0 +1,77 @@
1
+ #ifndef MS_SHARED_INTERFACE_HPP
2
+ #define MS_SHARED_INTERFACE_HPP
3
+
4
+ #include "Channel/ChannelMessageRegistratorInterface.hpp"
5
+ // TODO: We should have a ChannelNotifierInterface class instead.
6
+ #include "Channel/ChannelNotifier.hpp"
7
+ #include "handles/BackoffTimerHandleInterface.hpp"
8
+ #include "handles/TimerHandleInterface.hpp"
9
+
10
+ class SharedInterface
11
+ {
12
+ public:
13
+ virtual ~SharedInterface() = default;
14
+
15
+ public:
16
+ /**
17
+ * @todo We should have a ChannelMessageRegistratorInterface class instead.
18
+ */
19
+ virtual Channel::ChannelMessageRegistratorInterface* GetChannelMessageRegistrator() = 0;
20
+
21
+ /**
22
+ * @todo We should have a ChannelNotifierInterface class instead.
23
+ */
24
+ virtual Channel::ChannelNotifier* GetChannelNotifier() = 0;
25
+
26
+ /**
27
+ * Creates a TimerHandle timer.
28
+ *
29
+ * @remarks
30
+ * - The caller is responsible for freeing it.
31
+ */
32
+ virtual TimerHandleInterface* CreateTimer(TimerHandleInterface::Listener* listener) = 0;
33
+
34
+ /**
35
+ * Creates a BackoffTimerHandle timer.
36
+ *
37
+ * @remarks
38
+ * - The caller is responsible for freeing it.
39
+ */
40
+ virtual BackoffTimerHandleInterface* CreateBackoffTimer(
41
+ const BackoffTimerHandleInterface::BackoffTimerHandleOptions& options) = 0;
42
+
43
+ /**
44
+ * Get current time in milliseconds.
45
+ */
46
+ virtual uint64_t GetTimeMs() = 0;
47
+
48
+ /**
49
+ * Get current time in microseconds.
50
+ */
51
+ virtual uint64_t GetTimeUs() = 0;
52
+
53
+ /**
54
+ * Get current time in nanoseconds.
55
+ */
56
+ virtual uint64_t GetTimeNs() = 0;
57
+
58
+ /**
59
+ * @remarks
60
+ * - Used within libwebrtc dependency which uses int64_t values for time
61
+ * representation.
62
+ *
63
+ * @todo Remove once not needed.
64
+ */
65
+ virtual int64_t GetTimeMsInt64() = 0;
66
+
67
+ /**
68
+ * @remarks
69
+ * - Used within libwebrtc dependency which uses int64_t values for time
70
+ * representation.
71
+ *
72
+ * @todo Remove once not needed.
73
+ */
74
+ virtual int64_t GetTimeUsInt64() = 0;
75
+ };
76
+
77
+ #endif
@@ -0,0 +1,270 @@
1
+ #ifndef MS_UTILS_UNWRAPPED_SEQUENCE_NUMBER_HPP
2
+ #define MS_UTILS_UNWRAPPED_SEQUENCE_NUMBER_HPP
3
+
4
+ #include "common.hpp"
5
+ #include <limits>
6
+ #include <ostream>
7
+ #include <typeinfo>
8
+
9
+ namespace Utils
10
+ {
11
+ /**
12
+ * UnwrappedSequenceNumber handles wrapping sequence numbers and unwraps
13
+ * them to an int64_t value space, to allow wrapped sequence numbers to be
14
+ * easily compared for ordering.
15
+ *
16
+ * Sequence numbers are expected to be monotonically increasing, but they
17
+ * do not need to be unwrapped in order, as long as the difference to the
18
+ * previous one is not larger than half the range of the wrapped sequence
19
+ * number.
20
+ */
21
+ template<typename T>
22
+ class UnwrappedSequenceNumber
23
+ {
24
+ public:
25
+ static_assert(!std::numeric_limits<T>::is_signed, "the wrapped type must be unsigned");
26
+ static_assert(
27
+ std::numeric_limits<T>::max() < std::numeric_limits<int64_t>::max(),
28
+ "the wrapped type must be less than the int64_t value space");
29
+
30
+ /**
31
+ * The unwrapper is a sort of factory and converts wrapped sequence
32
+ * numbers to unwrapped ones.
33
+ */
34
+ class Unwrapper
35
+ {
36
+ public:
37
+ Unwrapper() = default;
38
+
39
+ Unwrapper(const Unwrapper&) = default;
40
+
41
+ Unwrapper& operator=(const Unwrapper&) = default;
42
+
43
+ public:
44
+ /**
45
+ * Given a wrapped `value`, and with knowledge of its current last seen
46
+ * largest number, will return a value that can be compared using normal
47
+ * operators, such as less-than, greater-than etc.
48
+ *
49
+ * This will also update the Unwrapper's state, to track the last seen
50
+ * largest value.
51
+ */
52
+ UnwrappedSequenceNumber<T> Unwrap(T value)
53
+ {
54
+ if (!this->lastValue)
55
+ {
56
+ this->lastUnwrapped = value;
57
+ }
58
+ else
59
+ {
60
+ const uint64_t prev = this->lastValue->GetValue();
61
+ const uint64_t curr = value;
62
+ auto delta = static_cast<int64_t>(curr - prev);
63
+ const auto half = static_cast<int64_t>(1) << (sizeof(T) * 8 - 1);
64
+
65
+ if (delta < -half)
66
+ {
67
+ delta += static_cast<int64_t>(1) << (sizeof(T) * 8);
68
+ }
69
+ else if (delta > half)
70
+ {
71
+ delta -= static_cast<int64_t>(1) << (sizeof(T) * 8);
72
+ }
73
+
74
+ this->lastUnwrapped += delta;
75
+ }
76
+
77
+ this->lastValue = UnwrappedSequenceNumber<T>(value);
78
+
79
+ return UnwrappedSequenceNumber<T>(this->lastUnwrapped);
80
+ }
81
+
82
+ /**
83
+ * Similar to `Unwrap()`, but will not update the Unwrappers's internal
84
+ * state.
85
+ */
86
+ UnwrappedSequenceNumber<T> PeekUnwrap(T value) const
87
+ {
88
+ if (!this->lastValue)
89
+ {
90
+ return UnwrappedSequenceNumber<T>(value);
91
+ }
92
+
93
+ const uint64_t prev = this->lastValue->GetValue();
94
+ const uint64_t curr = value;
95
+ auto delta = static_cast<int64_t>(curr - prev);
96
+ const auto half = static_cast<int64_t>(1) << (sizeof(T) * 8 - 1);
97
+
98
+ if (delta < -half)
99
+ {
100
+ delta += static_cast<int64_t>(1) << (sizeof(T) * 8);
101
+ }
102
+ else if (delta > half)
103
+ {
104
+ delta -= static_cast<int64_t>(1) << (sizeof(T) * 8);
105
+ }
106
+
107
+ return UnwrappedSequenceNumber<T>(this->lastUnwrapped + delta);
108
+ }
109
+
110
+ /**
111
+ * Resets the Unwrapper to its pristine state. Used when a sequence number
112
+ * is to be reset to zero.
113
+ */
114
+ void Reset()
115
+ {
116
+ this->lastUnwrapped = 0;
117
+ this->lastValue.reset();
118
+ }
119
+
120
+ private:
121
+ int64_t lastUnwrapped{ 0 };
122
+ std::optional<UnwrappedSequenceNumber<T>> lastValue;
123
+ };
124
+
125
+ public:
126
+ /**
127
+ * Returns a new sequence number based on `value`, and adding `delta`
128
+ * (which may be negative).
129
+ */
130
+ static UnwrappedSequenceNumber<T> AddTo(UnwrappedSequenceNumber<T> value, int64_t delta)
131
+ {
132
+ return UnwrappedSequenceNumber<T>(value.value + delta);
133
+ }
134
+
135
+ /**
136
+ * Returns the absolute difference between `lhs` and `rhs`.
137
+ */
138
+ static T Difference(UnwrappedSequenceNumber<T> lhs, UnwrappedSequenceNumber<T> rhs)
139
+ {
140
+ return (lhs.value > rhs.value) ? (lhs.value - rhs.value) : (rhs.value - lhs.value);
141
+ }
142
+
143
+ private:
144
+ static constexpr auto ValueLimit = static_cast<int64_t>(1) << std::numeric_limits<T>::digits;
145
+
146
+ public:
147
+ explicit UnwrappedSequenceNumber(int64_t value) : value(value)
148
+ {
149
+ }
150
+
151
+ public:
152
+ /**
153
+ * Returns the wrapped value this type represents.
154
+ */
155
+ T Wrap() const
156
+ {
157
+ return static_cast<T>(this->value % UnwrappedSequenceNumber::ValueLimit);
158
+ }
159
+
160
+ bool operator==(const UnwrappedSequenceNumber<T>& other) const
161
+ {
162
+ return this->value == other.value;
163
+ }
164
+
165
+ bool operator!=(const UnwrappedSequenceNumber<T>& other) const
166
+ {
167
+ return this->value != other.value;
168
+ }
169
+
170
+ bool operator<(const UnwrappedSequenceNumber<T>& other) const
171
+ {
172
+ return this->value < other.value;
173
+ }
174
+
175
+ bool operator>(const UnwrappedSequenceNumber<T>& other) const
176
+ {
177
+ return this->value > other.value;
178
+ }
179
+
180
+ bool operator>=(const UnwrappedSequenceNumber<T>& other) const
181
+ {
182
+ return this->value >= other.value;
183
+ }
184
+
185
+ bool operator<=(const UnwrappedSequenceNumber<T>& other) const
186
+ {
187
+ return this->value <= other.value;
188
+ }
189
+
190
+ // Const accessors for underlying value.
191
+
192
+ constexpr const int64_t* operator->() const
193
+ {
194
+ return std::addressof(this->value);
195
+ }
196
+
197
+ constexpr const int64_t& operator*() const&
198
+ {
199
+ return this->value;
200
+ }
201
+
202
+ constexpr const int64_t&& operator*() const&&
203
+ {
204
+ return std::move(this->value);
205
+ }
206
+
207
+ constexpr const int64_t& GetValue() const&
208
+ {
209
+ return this->value;
210
+ }
211
+
212
+ constexpr const int64_t&& GetValue() const&&
213
+ {
214
+ return std::move(this->value);
215
+ }
216
+
217
+ constexpr explicit operator const int64_t&() const&
218
+ {
219
+ return this->value;
220
+ }
221
+
222
+ /**
223
+ * Increments the value.
224
+ */
225
+ void Increment()
226
+ {
227
+ ++this->value;
228
+ }
229
+
230
+ /**
231
+ * Returns the next value relative to this sequence number.
232
+ */
233
+ UnwrappedSequenceNumber<T> GetNextValue() const
234
+ {
235
+ return UnwrappedSequenceNumber<T>(this->value + 1);
236
+ }
237
+
238
+ private:
239
+ int64_t value{ 0 };
240
+ };
241
+
242
+ /**
243
+ * For logging purposes in Catch2 tests.
244
+ */
245
+ template<typename T>
246
+ inline std::ostream& operator<<(std::ostream& os, const UnwrappedSequenceNumber<T>& s)
247
+ {
248
+ return os << "{T:" << typeid(T).name() << ", wrapped:" << s.Wrap();
249
+ }
250
+
251
+ template<>
252
+ inline std::ostream& operator<<(std::ostream& os, const UnwrappedSequenceNumber<uint8_t>& s)
253
+ {
254
+ return os << "{T:uint8_t, wrapped:" << s.Wrap() << "}";
255
+ }
256
+
257
+ template<>
258
+ inline std::ostream& operator<<(std::ostream& os, const UnwrappedSequenceNumber<uint16_t>& s)
259
+ {
260
+ return os << "{T:uint16_t, wrapped:" << s.Wrap() << "}";
261
+ }
262
+
263
+ template<>
264
+ inline std::ostream& operator<<(std::ostream& os, const UnwrappedSequenceNumber<uint32_t>& s)
265
+ {
266
+ return os << "{T:uint32_t, wrapped:" << s.Wrap() << "}";
267
+ }
268
+ } // namespace Utils
269
+
270
+ #endif
@@ -212,6 +212,12 @@ namespace Utils
212
212
  return (size + 3) & ~static_cast<T>(0x03);
213
213
  }
214
214
 
215
+ template<typename T>
216
+ typename std::enable_if<std::is_unsigned<T>::value, T>::type static PadDownTo4Bytes(T size)
217
+ {
218
+ return size & ~static_cast<T>(0x03);
219
+ }
220
+
215
221
  template<typename T>
216
222
  typename std::enable_if<std::is_unsigned<T>::value, T>::type static PadTo8Bytes(T size)
217
223
  {
@@ -259,10 +265,10 @@ namespace Utils
259
265
  static void WriteRandomBytes(uint8_t* buffer, size_t len);
260
266
 
261
267
  private:
262
- thread_local static std::mt19937_64 rng;
263
- thread_local static EVP_MAC* mac;
264
- thread_local static EVP_MAC_CTX* hmacSha1Ctx;
265
- thread_local static uint8_t hmacSha1Buffer[];
268
+ static thread_local std::mt19937_64 rng;
269
+ static thread_local EVP_MAC* mac;
270
+ static thread_local EVP_MAC_CTX* hmacSha1Ctx;
271
+ static thread_local uint8_t hmacSha1Buffer[];
266
272
  static const uint32_t Crc32Table[256];
267
273
  static const uint32_t Crc32cTable[256];
268
274
  };