mediasoup 3.19.18 → 3.19.20

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 (310) hide show
  1. package/README.md +4 -4
  2. package/node/lib/Worker.d.ts +1 -1
  3. package/node/lib/Worker.d.ts.map +1 -1
  4. package/node/lib/Worker.js +8 -2
  5. package/node/lib/WorkerTypes.d.ts +8 -4
  6. package/node/lib/WorkerTypes.d.ts.map +1 -1
  7. package/node/lib/index.d.ts +1 -1
  8. package/node/lib/index.d.ts.map +1 -1
  9. package/node/lib/index.js +2 -1
  10. package/node/lib/sctpParametersTypes.d.ts +3 -13
  11. package/node/lib/sctpParametersTypes.d.ts.map +1 -1
  12. package/node/lib/test/test-PlainTransport.js +8 -3
  13. package/node/lib/test/test-WebRtcTransport.js +9 -4
  14. package/package.json +12 -12
  15. package/worker/Makefile +9 -5
  16. package/worker/fuzzer/src/FuzzerUtils.cpp +26 -22
  17. package/worker/fuzzer/src/RTC/ICE/FuzzerStunPacket.cpp +3 -3
  18. package/worker/fuzzer/src/RTC/RTCP/FuzzerPacket.cpp +10 -6
  19. package/worker/fuzzer/src/RTC/SCTP/{FuzzerStateCookie.cpp → association/FuzzerStateCookie.cpp} +13 -13
  20. package/worker/fuzzer/src/fuzzer.cpp +6 -1
  21. package/worker/include/RTC/DataConsumer.hpp +5 -9
  22. package/worker/include/RTC/DirectTransport.hpp +1 -1
  23. package/worker/include/RTC/DtlsTransport.hpp +2 -1
  24. package/worker/include/RTC/ICE/IceCandidate.hpp +20 -8
  25. package/worker/include/RTC/ICE/StunPacket.hpp +6 -1
  26. package/worker/include/RTC/PipeTransport.hpp +1 -1
  27. package/worker/include/RTC/PlainTransport.hpp +1 -1
  28. package/worker/include/RTC/RTCP/Feedback.hpp +6 -1
  29. package/worker/include/RTC/RTCP/FeedbackPsFir.hpp +4 -0
  30. package/worker/include/RTC/RTCP/FeedbackPsLei.hpp +4 -0
  31. package/worker/include/RTC/RTCP/FeedbackPsRpsi.hpp +4 -0
  32. package/worker/include/RTC/RTCP/FeedbackPsSli.hpp +4 -0
  33. package/worker/include/RTC/RTCP/FeedbackPsTst.hpp +5 -0
  34. package/worker/include/RTC/RTCP/FeedbackPsVbcm.hpp +4 -0
  35. package/worker/include/RTC/RTCP/FeedbackRtpEcn.hpp +4 -0
  36. package/worker/include/RTC/RTCP/FeedbackRtpNack.hpp +4 -0
  37. package/worker/include/RTC/RTCP/FeedbackRtpTllei.hpp +4 -0
  38. package/worker/include/RTC/RTCP/FeedbackRtpTmmb.hpp +4 -0
  39. package/worker/include/RTC/RTCP/Packet.hpp +6 -1
  40. package/worker/include/RTC/RTCP/ReceiverReport.hpp +6 -1
  41. package/worker/include/RTC/RTCP/Sdes.hpp +8 -0
  42. package/worker/include/RTC/RTCP/SenderReport.hpp +6 -1
  43. package/worker/include/RTC/RTCP/XR.hpp +9 -4
  44. package/worker/include/RTC/RTCP/XrDelaySinceLastRr.hpp +4 -0
  45. package/worker/include/RTC/RTCP/XrReceiverReferenceTime.hpp +4 -0
  46. package/worker/include/RTC/RTP/Codecs/DependencyDescriptor.hpp +0 -2
  47. package/worker/include/RTC/RTP/Packet.hpp +31 -0
  48. package/worker/include/RTC/RateCalculator.hpp +0 -1
  49. package/worker/include/RTC/SCTP/TODO_SCTP.md +37 -8
  50. package/worker/include/RTC/SCTP/association/Association.hpp +499 -0
  51. package/worker/include/RTC/SCTP/association/AssociationListenerDeferrer.hpp +98 -0
  52. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +77 -0
  53. package/worker/include/RTC/SCTP/{NegotiatedCapabilities.hpp → association/NegotiatedCapabilities.hpp} +17 -13
  54. package/worker/include/RTC/SCTP/association/PacketSender.hpp +51 -0
  55. package/worker/include/RTC/SCTP/{StateCookie.hpp → association/StateCookie.hpp} +4 -4
  56. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +272 -0
  57. package/worker/include/RTC/SCTP/association/TCBContext.hpp +67 -0
  58. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +248 -0
  59. package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +274 -0
  60. package/worker/include/RTC/SCTP/packet/Chunk.hpp +73 -35
  61. package/worker/include/RTC/SCTP/packet/ErrorCause.hpp +4 -1
  62. package/worker/include/RTC/SCTP/packet/Packet.hpp +53 -6
  63. package/worker/include/RTC/SCTP/packet/Parameter.hpp +4 -1
  64. package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
  65. package/worker/include/RTC/SCTP/packet/UserData.hpp +141 -0
  66. package/worker/include/RTC/SCTP/packet/chunks/AbortAssociationChunk.hpp +5 -0
  67. package/worker/include/RTC/SCTP/packet/chunks/AnyDataChunk.hpp +85 -0
  68. package/worker/include/RTC/SCTP/packet/chunks/AnyForwardTsnChunk.hpp +80 -0
  69. package/worker/include/RTC/SCTP/packet/chunks/AnyInitChunk.hpp +37 -0
  70. package/worker/include/RTC/SCTP/packet/chunks/CookieAckChunk.hpp +10 -0
  71. package/worker/include/RTC/SCTP/packet/chunks/CookieEchoChunk.hpp +10 -0
  72. package/worker/include/RTC/SCTP/packet/chunks/DataChunk.hpp +65 -18
  73. package/worker/include/RTC/SCTP/packet/chunks/ForwardTsnChunk.hpp +25 -12
  74. package/worker/include/RTC/SCTP/packet/chunks/HeartbeatAckChunk.hpp +5 -0
  75. package/worker/include/RTC/SCTP/packet/chunks/HeartbeatRequestChunk.hpp +5 -0
  76. package/worker/include/RTC/SCTP/packet/chunks/IDataChunk.hpp +58 -19
  77. package/worker/include/RTC/SCTP/packet/chunks/IForwardTsnChunk.hpp +29 -16
  78. package/worker/include/RTC/SCTP/packet/chunks/InitAckChunk.hpp +13 -8
  79. package/worker/include/RTC/SCTP/packet/chunks/InitChunk.hpp +12 -7
  80. package/worker/include/RTC/SCTP/packet/chunks/OperationErrorChunk.hpp +5 -0
  81. package/worker/include/RTC/SCTP/packet/chunks/ReConfigChunk.hpp +8 -3
  82. package/worker/include/RTC/SCTP/packet/chunks/SackChunk.hpp +67 -23
  83. package/worker/include/RTC/SCTP/packet/chunks/ShutdownAckChunk.hpp +10 -0
  84. package/worker/include/RTC/SCTP/packet/chunks/ShutdownChunk.hpp +10 -0
  85. package/worker/include/RTC/SCTP/packet/chunks/ShutdownCompleteChunk.hpp +10 -0
  86. package/worker/include/RTC/SCTP/packet/chunks/UnknownChunk.hpp +10 -0
  87. package/worker/include/RTC/SCTP/packet/errorCauses/ProtocolViolationErrorCause.hpp +0 -1
  88. package/worker/include/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.hpp +10 -7
  89. package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +14 -10
  90. package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +14 -10
  91. package/worker/include/RTC/SCTP/packet/parameters/StateCookieParameter.hpp +1 -1
  92. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +13 -2
  93. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +178 -0
  94. package/worker/include/RTC/SCTP/public/AssociationListener.hpp +255 -0
  95. package/worker/include/RTC/SCTP/public/AssociationMetrics.hpp +136 -0
  96. package/worker/include/RTC/SCTP/{Message.hpp → public/Message.hpp} +12 -3
  97. package/worker/include/RTC/SCTP/{SocketOptions.hpp → public/SctpOptions.hpp} +25 -25
  98. package/worker/include/RTC/SCTP/public/SctpTypes.hpp +338 -0
  99. package/worker/include/RTC/SCTP/tx/RetransmissionErrorCounter.hpp +63 -0
  100. package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +66 -0
  101. package/worker/include/RTC/SctpAssociation.hpp +2 -2
  102. package/worker/include/RTC/Serializable.hpp +1 -1
  103. package/worker/include/RTC/SrtpSession.hpp +0 -1
  104. package/worker/include/RTC/Transport.hpp +33 -2
  105. package/worker/include/RTC/TransportTuple.hpp +7 -3
  106. package/worker/include/RTC/WebRtcServer.hpp +3 -1
  107. package/worker/include/RTC/WebRtcTransport.hpp +1 -1
  108. package/worker/include/Settings.hpp +2 -1
  109. package/worker/include/Utils.hpp +130 -7
  110. package/worker/include/common.hpp +10 -10
  111. package/worker/include/handles/BackoffTimerHandle.hpp +21 -24
  112. package/worker/include/handles/TimerHandle.hpp +1 -0
  113. package/worker/meson.build +69 -77
  114. package/worker/meson_options.txt +1 -1
  115. package/worker/scripts/get-dep.sh +1 -25
  116. package/worker/scripts/package-lock.json +6 -6
  117. package/worker/src/Channel/ChannelSocket.cpp +5 -2
  118. package/worker/src/DepLibUring.cpp +4 -4
  119. package/worker/src/RTC/ActiveSpeakerObserver.cpp +10 -4
  120. package/worker/src/RTC/Consumer.cpp +6 -2
  121. package/worker/src/RTC/DataConsumer.cpp +17 -21
  122. package/worker/src/RTC/DirectTransport.cpp +3 -1
  123. package/worker/src/RTC/DtlsTransport.cpp +10 -8
  124. package/worker/src/RTC/ICE/StunPacket.cpp +8 -8
  125. package/worker/src/RTC/NackGenerator.cpp +3 -1
  126. package/worker/src/RTC/PipeTransport.cpp +21 -4
  127. package/worker/src/RTC/PlainTransport.cpp +20 -43
  128. package/worker/src/RTC/RTCP/FeedbackRtpNack.cpp +1 -0
  129. package/worker/src/RTC/RTCP/Packet.cpp +1 -1
  130. package/worker/src/RTC/RTP/Codecs/DependencyDescriptor.cpp +3 -1
  131. package/worker/src/RTC/RTP/Packet.cpp +2 -4
  132. package/worker/src/RTC/RTP/ProbationGenerator.cpp +2 -1
  133. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +5 -5
  134. package/worker/src/RTC/RTP/RtpStream.cpp +2 -2
  135. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +2 -1
  136. package/worker/src/RTC/RTP/RtpStreamSend.cpp +2 -1
  137. package/worker/src/RTC/RTP/RtxStream.cpp +1 -1
  138. package/worker/src/RTC/RTP/SharedPacket.cpp +8 -3
  139. package/worker/src/RTC/RateCalculator.cpp +8 -6
  140. package/worker/src/RTC/SCTP/association/Association.cpp +2828 -0
  141. package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +274 -0
  142. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +244 -0
  143. package/worker/src/RTC/SCTP/association/NegotiatedCapabilities.cpp +90 -0
  144. package/worker/src/RTC/SCTP/association/PacketSender.cpp +51 -0
  145. package/worker/src/RTC/SCTP/{StateCookie.cpp → association/StateCookie.cpp} +14 -14
  146. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +512 -0
  147. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +251 -0
  148. package/worker/src/RTC/SCTP/packet/Chunk.cpp +61 -22
  149. package/worker/src/RTC/SCTP/packet/Packet.cpp +41 -11
  150. package/worker/src/RTC/SCTP/packet/TLV.cpp +1 -1
  151. package/worker/src/RTC/SCTP/packet/UserData.cpp +56 -0
  152. package/worker/src/RTC/SCTP/packet/chunks/DataChunk.cpp +15 -15
  153. package/worker/src/RTC/SCTP/packet/chunks/ForwardTsnChunk.cpp +25 -7
  154. package/worker/src/RTC/SCTP/packet/chunks/IDataChunk.cpp +17 -18
  155. package/worker/src/RTC/SCTP/packet/chunks/IForwardTsnChunk.cpp +26 -8
  156. package/worker/src/RTC/SCTP/packet/chunks/InitAckChunk.cpp +3 -1
  157. package/worker/src/RTC/SCTP/packet/chunks/InitChunk.cpp +2 -1
  158. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +121 -10
  159. package/worker/src/RTC/SCTP/packet/errorCauses/InvalidStreamIdentifierErrorCause.cpp +1 -0
  160. package/worker/src/RTC/SCTP/packet/errorCauses/MissingMandatoryParameterErrorCause.cpp +1 -0
  161. package/worker/src/RTC/SCTP/packet/errorCauses/NoUserDataErrorCause.cpp +1 -0
  162. package/worker/src/RTC/SCTP/packet/errorCauses/StaleCookieErrorCause.cpp +1 -0
  163. package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +19 -13
  164. package/worker/src/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.cpp +22 -5
  165. package/worker/src/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.cpp +22 -5
  166. package/worker/src/RTC/SCTP/packet/parameters/StateCookieParameter.cpp +2 -2
  167. package/worker/src/RTC/SCTP/public/AssociationMetrics.cpp +45 -0
  168. package/worker/src/RTC/SCTP/{Message.cpp → public/Message.cpp} +2 -3
  169. package/worker/src/RTC/SCTP/tx/RetransmissionErrorCounter.cpp +82 -0
  170. package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +97 -0
  171. package/worker/src/RTC/SctpAssociation.cpp +7 -4
  172. package/worker/src/RTC/SenderBandwidthEstimator.cpp +5 -2
  173. package/worker/src/RTC/SeqManager.cpp +4 -4
  174. package/worker/src/RTC/Serializable.cpp +1 -1
  175. package/worker/src/RTC/SrtpSession.cpp +2 -2
  176. package/worker/src/RTC/TcpConnection.cpp +5 -1
  177. package/worker/src/RTC/TcpServer.cpp +5 -2
  178. package/worker/src/RTC/Transport.cpp +525 -92
  179. package/worker/src/RTC/TransportCongestionControlClient.cpp +4 -2
  180. package/worker/src/RTC/UdpSocket.cpp +2 -1
  181. package/worker/src/RTC/WebRtcTransport.cpp +14 -45
  182. package/worker/src/Settings.cpp +21 -1
  183. package/worker/src/Worker.cpp +13 -4
  184. package/worker/src/handles/BackoffTimerHandle.cpp +21 -27
  185. package/worker/src/handles/TimerHandle.cpp +33 -0
  186. package/worker/src/handles/UdpSocketHandle.cpp +5 -1
  187. package/worker/src/lib.cpp +11 -2
  188. package/worker/subprojects/catch2.wrap +6 -6
  189. package/worker/subprojects/liburing.wrap +10 -9
  190. package/worker/tasks.py +50 -39
  191. package/worker/test/include/RTC/SCTP/sctpCommon.hpp +1 -0
  192. package/worker/test/src/RTC/ICE/TestStunPacket.cpp +4 -4
  193. package/worker/test/src/RTC/ICE/iceCommon.cpp +8 -6
  194. package/worker/test/src/RTC/RTCP/TestBye.cpp +3 -3
  195. package/worker/test/src/RTC/RTCP/TestFeedbackPsAfb.cpp +2 -2
  196. package/worker/test/src/RTC/RTCP/TestFeedbackPsFir.cpp +7 -2
  197. package/worker/test/src/RTC/RTCP/TestFeedbackPsLei.cpp +7 -2
  198. package/worker/test/src/RTC/RTCP/TestFeedbackPsPli.cpp +2 -2
  199. package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +2 -2
  200. package/worker/test/src/RTC/RTCP/TestFeedbackPsRpsi.cpp +7 -2
  201. package/worker/test/src/RTC/RTCP/TestFeedbackPsSli.cpp +2 -2
  202. package/worker/test/src/RTC/RTCP/TestFeedbackPsTst.cpp +8 -2
  203. package/worker/test/src/RTC/RTCP/TestFeedbackPsVbcm.cpp +7 -2
  204. package/worker/test/src/RTC/RTCP/TestFeedbackRtpEcn.cpp +7 -2
  205. package/worker/test/src/RTC/RTCP/TestFeedbackRtpNack.cpp +7 -2
  206. package/worker/test/src/RTC/RTCP/TestFeedbackRtpSrReq.cpp +2 -2
  207. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTllei.cpp +7 -2
  208. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +8 -2
  209. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +17 -17
  210. package/worker/test/src/RTC/RTCP/TestPacket.cpp +10 -1
  211. package/worker/test/src/RTC/RTCP/TestReceiverReport.cpp +8 -3
  212. package/worker/test/src/RTC/RTCP/TestSdes.cpp +15 -10
  213. package/worker/test/src/RTC/RTCP/TestSenderReport.cpp +9 -4
  214. package/worker/test/src/RTC/RTCP/TestXr.cpp +17 -10
  215. package/worker/test/src/RTC/RTP/TestPacket.cpp +26 -34
  216. package/worker/test/src/RTC/RTP/rtpCommon.cpp +9 -5
  217. package/worker/test/src/RTC/SCTP/{TestNegotiatedCapabilities.cpp → association/TestNegotiatedCapabilities.cpp} +23 -22
  218. package/worker/test/src/RTC/SCTP/{TestStateCookie.cpp → association/TestStateCookie.cpp} +35 -35
  219. package/worker/test/src/RTC/SCTP/common/TestUnwrappedSequenceNumber.cpp +210 -0
  220. package/worker/test/src/RTC/SCTP/packet/TestChunk.cpp +117 -0
  221. package/worker/test/src/RTC/SCTP/packet/TestErrorCause.cpp +11 -0
  222. package/worker/test/src/RTC/SCTP/packet/TestPacket.cpp +81 -28
  223. package/worker/test/src/RTC/SCTP/packet/TestParameter.cpp +11 -0
  224. package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +3 -3
  225. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieAckChunk.cpp +1 -1
  226. package/worker/test/src/RTC/SCTP/packet/chunks/TestCookieEchoChunk.cpp +1 -1
  227. package/worker/test/src/RTC/SCTP/packet/chunks/TestDataChunk.cpp +130 -63
  228. package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +32 -32
  229. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +10 -5
  230. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +7 -2
  231. package/worker/test/src/RTC/SCTP/packet/chunks/TestIDataChunk.cpp +131 -63
  232. package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +33 -53
  233. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +2 -2
  234. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +6 -6
  235. package/worker/test/src/RTC/SCTP/packet/chunks/TestOperationErrorChunk.cpp +1 -1
  236. package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +20 -21
  237. package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +41 -58
  238. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownAckChunk.cpp +1 -1
  239. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownChunk.cpp +1 -1
  240. package/worker/test/src/RTC/SCTP/packet/chunks/TestShutdownCompleteChunk.cpp +1 -1
  241. package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +4 -1
  242. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestCookieReceivedWhileShuttingDownErrorCause.cpp +1 -1
  243. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidMandatoryParameterErrorCause.cpp +1 -1
  244. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestInvalidStreamIdentifierErrorCause.cpp +5 -5
  245. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestMissingMandatoryParameterErrorCause.cpp +4 -4
  246. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestNoUserDataErrorCause.cpp +5 -5
  247. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestOutOfResourceErrorCause.cpp +4 -4
  248. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestProtocolViolationErrorCause.cpp +3 -3
  249. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestRestartOfAnAssociationWithNewAddressesErrorCause.cpp +3 -3
  250. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestStaleCookieErrorCause.cpp +5 -5
  251. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +6 -3
  252. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedChunkTypeErrorCause.cpp +3 -3
  253. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnrecognizedParametersErrorCause.cpp +1 -1
  254. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnresolvableAddressErrorCause.cpp +3 -3
  255. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUserInitiatedAbortErrorCause.cpp +19 -64
  256. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddIncomingStreamsRequestParameter.cpp +1 -1
  257. package/worker/test/src/RTC/SCTP/packet/parameters/TestAddOutgoingStreamsRequestParameter.cpp +1 -1
  258. package/worker/test/src/RTC/SCTP/packet/parameters/TestCookiePreservativeParameter.cpp +5 -5
  259. package/worker/test/src/RTC/SCTP/packet/parameters/TestForwardTsnSupportedParameter.cpp +1 -1
  260. package/worker/test/src/RTC/SCTP/packet/parameters/TestHeartbeatInfoParameter.cpp +4 -4
  261. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv4AddressParameter.cpp +5 -5
  262. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +5 -5
  263. package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +25 -28
  264. package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +26 -31
  265. package/worker/test/src/RTC/SCTP/packet/parameters/TestReconfigurationResponseParameter.cpp +4 -4
  266. package/worker/test/src/RTC/SCTP/packet/parameters/TestSsnTsnResetRequestParameter.cpp +1 -1
  267. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +11 -9
  268. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedAddressTypesParameter.cpp +2 -2
  269. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +13 -1
  270. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnknownParameter.cpp +3 -3
  271. package/worker/test/src/RTC/SCTP/packet/parameters/TestUnrecognizedParameterParameter.cpp +1 -1
  272. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +6 -9
  273. package/worker/test/src/RTC/SCTP/sctpCommon.cpp +8 -5
  274. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionErrorCounter.cpp +74 -0
  275. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +233 -0
  276. package/worker/test/src/RTC/TestNackGenerator.cpp +7 -3
  277. package/worker/test/src/RTC/TestSimpleConsumer.cpp +3 -2
  278. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +1 -1
  279. package/worker/test/src/Utils/TestByte.cpp +25 -29
  280. package/worker/test/src/Utils/TestNumber.cpp +119 -49
  281. package/worker/test/src/tests.cpp +11 -2
  282. package/node/lib/fbs/consumer/degrade-request.d.ts +0 -30
  283. package/node/lib/fbs/consumer/degrade-request.d.ts.map +0 -1
  284. package/node/lib/fbs/consumer/degrade-request.js +0 -91
  285. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts +0 -24
  286. package/node/lib/fbs/consumer/enable-delay-and-loss-request.d.ts.map +0 -1
  287. package/node/lib/fbs/consumer/enable-delay-and-loss-request.js +0 -69
  288. package/node/lib/fbs/producer/degrade-request.d.ts +0 -30
  289. package/node/lib/fbs/producer/degrade-request.d.ts.map +0 -1
  290. package/node/lib/fbs/producer/degrade-request.js +0 -91
  291. package/node/lib/fbs/worker/close-notification.d.ts +0 -18
  292. package/node/lib/fbs/worker/close-notification.d.ts.map +0 -1
  293. package/node/lib/fbs/worker/close-notification.js +0 -45
  294. package/node/lib/fbs/worker/close-request.d.ts +0 -18
  295. package/node/lib/fbs/worker/close-request.d.ts.map +0 -1
  296. package/node/lib/fbs/worker/close-request.js +0 -45
  297. package/node/lib/fbs/worker/close-worker-notification.d.ts +0 -18
  298. package/node/lib/fbs/worker/close-worker-notification.d.ts.map +0 -1
  299. package/node/lib/fbs/worker/close-worker-notification.js +0 -45
  300. package/worker/include/RTC/SCTP/Socket.hpp +0 -194
  301. package/worker/include/RTC/SCTP/SocketDeferredListener.hpp +0 -100
  302. package/worker/include/RTC/SCTP/SocketListener.hpp +0 -242
  303. package/worker/include/RTC/SCTP/SocketMetrics.hpp +0 -78
  304. package/worker/include/RTC/SCTP/TransmissionControlBlock.hpp +0 -108
  305. package/worker/include/RTC/SCTP/Types.hpp +0 -149
  306. package/worker/src/RTC/SCTP/NegotiatedCapabilities.cpp +0 -96
  307. package/worker/src/RTC/SCTP/Socket.cpp +0 -1045
  308. package/worker/src/RTC/SCTP/SocketDeferredListener.cpp +0 -247
  309. package/worker/src/RTC/SCTP/SocketMetrics.cpp +0 -39
  310. package/worker/src/RTC/SCTP/TransmissionControlBlock.cpp +0 -52
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  [![][github-actions-shield-mediasoup-rust]][github-actions-mediasoup-rust]
14
14
  [![][github-actions-shield-mediasoup-worker-fuzzer]][github-actions-mediasoup-worker-fuzzer]
15
15
  [![][github-actions-shield-mediasoup-worker-prebuild]][github-actions-mediasoup-worker-prebuild]
16
- [![][codeql-shield-mediasoup]][codeql-mediasoup]
16
+ [![][github-actions-mediasoup-codeql-shield-mediasoup]][github-actions-mediasoup-codeql-mediasoup]
17
17
 
18
18
  ## Website and Documentation
19
19
 
@@ -104,9 +104,9 @@ You can support mediasoup by [sponsoring][sponsor] it. Thanks!
104
104
  [github-actions-mediasoup-worker-fuzzer]: https://github.com/versatica/mediasoup/actions/workflows/mediasoup-worker-fuzzer.yaml?query=branch%3Av3
105
105
  [github-actions-shield-mediasoup-worker-prebuild]: https://github.com/versatica/mediasoup/actions/workflows/mediasoup-worker-prebuild.yaml/badge.svg?event=release
106
106
  [github-actions-mediasoup-worker-prebuild]: https://github.com/versatica/mediasoup/actions/workflows/mediasoup-worker-prebuild.yaml?query=event%3Arelease
107
- [codeql-shield-mediasoup]: https://github.com/versatica/mediasoup/actions/workflows/codeql.yaml/badge.svg?branch=v3
108
- [codeql-mediasoup]: https://github.com/versatica/mediasoup/actions/workflows/codeql.yaml?query=branch%3Av3
107
+ [github-actions-mediasoup-codeql-shield-mediasoup]: https://github.com/versatica/mediasoup/actions/workflows/mediasoup-codeql.yaml/badge.svg?branch=v3
108
+ [github-actions-mediasoup-codeql-mediasoup]: https://github.com/versatica/mediasoup/actions/workflows/mediasoup-codeql.yaml?query=branch%3Av3
109
109
  [sponsor]: https://mediasoup.org/sponsor
110
- [mediasoup-architecture]: /art/mediasoup-v3-architecture-01.svg
110
+ [mediasoup-architecture]: /art/mediasoup-v3-architecture-02.png
111
111
  [mediasoup-demo-screenshot]: /art/mediasoup-v3.png
112
112
  [mediasoup-demo]: https://v3demo.mediasoup.org
@@ -6,7 +6,7 @@ import type { AppData } from './types';
6
6
  export declare const defaultWorkerBin: string;
7
7
  export declare class WorkerImpl<WorkerAppData extends AppData = AppData> extends EnhancedEventEmitter<WorkerEvents> implements Worker {
8
8
  #private;
9
- constructor({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, appData, }: WorkerSettings<WorkerAppData>);
9
+ constructor({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, useBuiltInSctpStack, appData, }: WorkerSettings<WorkerAppData>);
10
10
  get pid(): number;
11
11
  get closed(): boolean;
12
12
  get died(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACX,MAAM,EACN,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,cAAc,EAEd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWvC,eAAO,MAAM,gBAAgB,EAAE,MAA8B,CAAC;AAE9D,qBAAa,UAAU,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,CAC9D,SAAQ,oBAAoB,CAAC,YAAY,CACzC,YAAW,MAAM;;gBAiCL,EACX,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,OAAO,GACP,EAAE,cAAc,CAAC,aAAa,CAAC;IA6MhC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAEjC;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;OAEG;IACH,IAAI,uBAAuB,IAAI,GAAG,CAAC,YAAY,CAAC,CAE/C;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEnC;IAED,KAAK,IAAI,IAAI;IA+BP,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAc3B,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkChD,cAAc,CAAC,EACpB,QAAQ,EACR,OAAO,GACP,GAAE,wBAAwB,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzD,kBAAkB,CAAC,mBAAmB,SAAS,OAAO,GAAG,OAAO,EAAE,EACvE,WAAW,EACX,OAAO,GACP,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,OAAO,CACpD,YAAY,CAAC,mBAAmB,CAAC,CACjC;IA0DK,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EAAE,EAC3D,WAAW,EACX,OAAO,GACP,GAAE,aAAa,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAgDrE,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,mBAAmB;CAQ3B"}
1
+ {"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../src/Worker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACX,MAAM,EACN,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,cAAc,EAEd,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWvC,eAAO,MAAM,gBAAgB,EAAE,MAA8B,CAAC;AAE9D,qBAAa,UAAU,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,CAC9D,SAAQ,oBAAoB,CAAC,YAAY,CACzC,YAAW,MAAM;;gBAiCL,EACX,QAAQ,EACR,OAAO,EACP,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,OAAO,GACP,EAAE,cAAc,CAAC,aAAa,CAAC;IAmNhC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAEjC;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;OAEG;IACH,IAAI,uBAAuB,IAAI,GAAG,CAAC,YAAY,CAAC,CAE/C;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEnC;IAED,KAAK,IAAI,IAAI;IA+BP,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAc3B,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkChD,cAAc,CAAC,EACpB,QAAQ,EACR,OAAO,GACP,GAAE,wBAAwB,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzD,kBAAkB,CAAC,mBAAmB,SAAS,OAAO,GAAG,OAAO,EAAE,EACvE,WAAW,EACX,OAAO,GACP,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,OAAO,CACpD,YAAY,CAAC,mBAAmB,CAAC,CACjC;IA0DK,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EAAE,EAC3D,WAAW,EACX,OAAO,GACP,GAAE,aAAa,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAgDrE,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,mBAAmB;CAQ3B"}
@@ -44,7 +44,7 @@ class WorkerImpl extends enhancedEvents_1.EnhancedEventEmitter {
44
44
  #routers = new Set();
45
45
  // Observer instance.
46
46
  #observer = new enhancedEvents_1.EnhancedEventEmitter();
47
- constructor({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, appData, }) {
47
+ constructor({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, useBuiltInSctpStack, appData, }) {
48
48
  super();
49
49
  logger.debug('constructor()');
50
50
  workerBin = workerBin ?? exports.defaultWorkerBin;
@@ -81,7 +81,13 @@ class WorkerImpl extends enhancedEvents_1.EnhancedEventEmitter {
81
81
  spawnArgs.push(`--libwebrtcFieldTrials=${libwebrtcFieldTrials}`);
82
82
  }
83
83
  if (disableLiburing) {
84
- spawnArgs.push(`--disableLiburing=true`);
84
+ spawnArgs.push('--disableLiburing=true');
85
+ }
86
+ if (useBuiltInSctpStack) {
87
+ spawnArgs.push('--useBuiltInSctpStack=true');
88
+ }
89
+ else {
90
+ spawnArgs.push('--useBuiltInSctpStack=false');
85
91
  }
86
92
  logger.debug(`spawning worker process: ${spawnBin} ${spawnArgs.join(' ')}`);
87
93
  this.#child = (0, node_child_process_1.spawn)(
@@ -18,11 +18,13 @@ export type WorkerSettings<WorkerAppData extends AppData = AppData> = {
18
18
  logTags?: WorkerLogTag[];
19
19
  /**
20
20
  * Minimun RTC port for ICE, DTLS, RTP, etc. Default 10000.
21
+ *
21
22
  * @deprecated Use |portRange| in TransportListenInfo object instead.
22
23
  */
23
24
  rtcMinPort?: number;
24
25
  /**
25
26
  * Maximum RTC port for ICE, DTLS, RTP, etc. Default 59999.
27
+ *
26
28
  * @deprecated Use |portRange| in TransportListenInfo object instead.
27
29
  */
28
30
  rtcMaxPort?: number;
@@ -44,17 +46,19 @@ export type WorkerSettings<WorkerAppData extends AppData = AppData> = {
44
46
  workerBin?: string;
45
47
  /**
46
48
  * Field trials for libwebrtc.
47
- * @private
48
49
  *
49
- * NOTE: For advanced users only. An invalid value will make the worker crash.
50
- * Default value is
51
- * "WebRTC-Bwe-AlrLimitedBackoff/Enabled/".
50
+ * @remarks For advanced users only. An invalid value will make the worker
51
+ * crash. Default value is "WebRTC-Bwe-AlrLimitedBackoff/Enabled/".
52
52
  */
53
53
  libwebrtcFieldTrials?: string;
54
54
  /**
55
55
  * Disable liburing (io_uring) despite it's supported in current host.
56
56
  */
57
57
  disableLiburing?: boolean;
58
+ /**
59
+ * Use the mediasoup built-in SCTP stack instead usrsctp.
60
+ */
61
+ useBuiltInSctpStack?: boolean;
58
62
  /**
59
63
  * Custom application data.
60
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerTypes.d.ts","sourceRoot":"","sources":["../src/WorkerTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,YAAY,GACrB,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,WAAW,GACX,KAAK,GACL,MAAM,GACN,SAAS,CAAC;AAEb,MAAM,MAAM,cAAc,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,IAAI;IACrE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,IAAI,CACvE,cAAc,CAAC,CAAC,CAAC,EACjB,UAAU,GAAG,SAAS,CACtB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE;QACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,2BAA2B,EAAE,MAAM,EAAE,CAAC;KACtC,CAAC;IACF,QAAQ,CAAC,EAAE;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACd,eAAe,EAAE,EAAE,CAAC;IAEpB,UAAU,EAAE,EAAE,CAAC;IACf,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,EAAE,CAAC;IACV,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,MAAM,CACtB,aAAa,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,oBAAoB,CAAC,YAAY,CAAC;IAC3C;;OAEG;IACH,IAAI,GAAG,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAAC;IAEpB;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAAC;IAEhC;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAAC;IAE7B;;OAEG;IACH,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE;IAEpC;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAAC;IAE/B;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5B;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEjD;;OAEG;IACH,cAAc,CACb,OAAO,CAAC,EAAE,wBAAwB,CAAC,aAAa,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,kBAAkB,CAAC,mBAAmB,SAAS,OAAO,GAAG,OAAO,EAC/D,OAAO,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,GAC/C,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE9C;;OAEG;IACH,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EACnD,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,GACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;CAClC"}
1
+ {"version":3,"file":"WorkerTypes.d.ts","sourceRoot":"","sources":["../src/WorkerTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,YAAY,GACrB,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,WAAW,GACX,KAAK,GACL,MAAM,GACN,SAAS,CAAC;AAEb,MAAM,MAAM,cAAc,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,IAAI;IACrE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IAEzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,IAAI,CACvE,cAAc,CAAC,CAAC,CAAC,EACjB,UAAU,GAAG,SAAS,CACtB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE;QACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,2BAA2B,EAAE,MAAM,EAAE,CAAC;KACtC,CAAC;IACF,QAAQ,CAAC,EAAE;QACV,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACd,eAAe,EAAE,EAAE,CAAC;IAEpB,UAAU,EAAE,EAAE,CAAC;IACf,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,EAAE,CAAC;IACV,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,MAAM,CACtB,aAAa,SAAS,OAAO,GAAG,OAAO,CACtC,SAAQ,oBAAoB,CAAC,YAAY,CAAC;IAC3C;;OAEG;IACH,IAAI,GAAG,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,CAAC;IAEpB;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAAC;IAEhC;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAAC;IAE7B;;OAEG;IACH,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE;IAEpC;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAAC;IAE/B;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5B;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEjD;;OAEG;IACH,cAAc,CACb,OAAO,CAAC,EAAE,wBAAwB,CAAC,aAAa,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,kBAAkB,CAAC,mBAAmB,SAAS,OAAO,GAAG,OAAO,EAC/D,OAAO,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,GAC/C,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE9C;;OAEG;IACH,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EACnD,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,GACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;CAClC"}
@@ -44,7 +44,7 @@ export declare function setLogEventListeners(listeners?: LogEventListeners): voi
44
44
  /**
45
45
  * Create a Worker.
46
46
  */
47
- export declare function createWorker<WorkerAppData extends AppData = AppData>({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, appData, }?: WorkerSettings<WorkerAppData>): Promise<Worker<WorkerAppData>>;
47
+ export declare function createWorker<WorkerAppData extends AppData = AppData>({ logLevel, logTags, rtcMinPort, rtcMaxPort, dtlsCertificateFile, dtlsPrivateKeyFile, workerBin, libwebrtcFieldTrials, disableLiburing, useBuiltInSctpStack, appData, }?: WorkerSettings<WorkerAppData>): Promise<Worker<WorkerAppData>>;
48
48
  /**
49
49
  * Get a cloned copy of the mediasoup supported RTP capabilities.
50
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,QAAQ,EAER,iBAAiB,EAEjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC;;GAEG;AACH,YAAY,KAAK,KAAK,MAAM,SAAS,CAAC;AAEtC;;GAEG;AAEH,eAAO,MAAM,OAAO,EAAE,MAA8C,CAAC;AAErE,QAAA,MAAM,QAAQ,EAAE,QAAqD,CAAC;AAEtE;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;GAEG;AACH,OAAO,EAAE,gBAAgB,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAIzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,CA0BxE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EAAE,EAC3E,QAAkB,EAClB,OAAO,EACP,UAAkB,EAClB,UAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAElB,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,OAAO,GACP,GAAE,cAAc,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CA8BrE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAED;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,QAAQ,EAER,iBAAiB,EAEjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC;;GAEG;AACH,YAAY,KAAK,KAAK,MAAM,SAAS,CAAC;AAEtC;;GAEG;AAEH,eAAO,MAAM,OAAO,EAAE,MAA8C,CAAC;AAErE,QAAA,MAAM,QAAQ,EAAE,QAAqD,CAAC;AAEtE;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;GAEG;AACH,OAAO,EAAE,gBAAgB,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAIzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,CA0BxE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EAAE,EAC3E,QAAkB,EAClB,OAAO,EACP,UAAkB,EAClB,UAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAElB,SAAS,EACT,oBAAoB,EACpB,eAAuB,EACvB,mBAA2B,EAC3B,OAAO,GACP,GAAE,cAAc,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CA+BrE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAED;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC"}
package/node/lib/index.js CHANGED
@@ -68,7 +68,7 @@ function setLogEventListeners(listeners) {
68
68
  */
69
69
  async function createWorker({ logLevel = 'error', logTags, rtcMinPort = 10000, rtcMaxPort = 59999, dtlsCertificateFile, dtlsPrivateKeyFile,
70
70
  // eslint-disable-next-line no-shadow
71
- workerBin, libwebrtcFieldTrials, disableLiburing, appData, } = {}) {
71
+ workerBin, libwebrtcFieldTrials, disableLiburing = false, useBuiltInSctpStack = false, appData, } = {}) {
72
72
  logger.debug('createWorker()');
73
73
  if (appData && typeof appData !== 'object') {
74
74
  throw new TypeError('if given, appData must be an object');
@@ -83,6 +83,7 @@ workerBin, libwebrtcFieldTrials, disableLiburing, appData, } = {}) {
83
83
  workerBin,
84
84
  libwebrtcFieldTrials,
85
85
  disableLiburing,
86
+ useBuiltInSctpStack,
86
87
  appData,
87
88
  });
88
89
  return new Promise((resolve, reject) => {
@@ -7,21 +7,11 @@ export type SctpCapabilities = {
7
7
  * (to be used by DataConsumers), while MIS refers to the maximum number of
8
8
  * incoming SCTP streams that the server side transport can receive (to be used
9
9
  * by DataProducers). So, if the server side transport will just be used to
10
- * create data producers (but no data consumers), OS can be low (~1). However,
11
- * if data consumers are desired on the server side transport, OS must have a
12
- * proper value and such a proper value depends on whether the remote endpoint
13
- * supports SCTP_ADD_STREAMS extension or not.
14
- *
15
- * libwebrtc (Chrome, Safari, etc) does not enable SCTP_ADD_STREAMS so, if data
16
- * consumers are required, OS should be 1024 (the maximum number of DataChannels
17
- * that libwebrtc enables).
18
- *
19
- * Firefox does enable SCTP_ADD_STREAMS so, if data consumers are required, OS
20
- * can be lower (16 for instance). The mediasoup transport will allocate and
21
- * announce more outgoing SCTM streams when needed.
10
+ * create data producers (but no data consumers), OS can be low (~1).
22
11
  *
23
12
  * mediasoup-client provides specific per browser/version OS and MIS values via
24
- * the device.sctpCapabilities getter.
13
+ * the device.sctpCapabilities getter. However those values must be reversed
14
+ * when provided to the mediasoup server transport.
25
15
  */
26
16
  export type NumSctpStreams = {
27
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sctpParametersTypes.d.ts","sourceRoot":"","sources":["../src/sctpParametersTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"sctpParametersTypes.d.ts","sourceRoot":"","sources":["../src/sctpParametersTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACvB,CAAC"}
@@ -6,6 +6,7 @@ const mediasoup = require("../");
6
6
  const enhancedEvents_1 = require("../enhancedEvents");
7
7
  const utils = require("../utils");
8
8
  const IS_WINDOWS = os.platform() === 'win32';
9
+ const USE_BUILD_IN_SCTP_STACK = false;
9
10
  const ctx = {
10
11
  mediaCodecs: utils.deepFreeze([
11
12
  {
@@ -38,7 +39,9 @@ const ctx = {
38
39
  ]),
39
40
  };
40
41
  beforeEach(async () => {
41
- ctx.worker = await mediasoup.createWorker();
42
+ ctx.worker = await mediasoup.createWorker({
43
+ useBuiltInSctpStack: USE_BUILD_IN_SCTP_STACK,
44
+ });
42
45
  ctx.router = await ctx.worker.createRouter({ mediaCodecs: ctx.mediaCodecs });
43
46
  });
44
47
  afterEach(async () => {
@@ -86,8 +89,10 @@ test('router.createPlainTransport() succeeds', async () => {
86
89
  expect(plainTransport2.rtcpTuple).toBeUndefined();
87
90
  expect(plainTransport2.sctpParameters).toMatchObject({
88
91
  port: 5000,
89
- OS: 1024,
90
- MIS: 1024,
92
+ // NOTE: When using the built-in SCTP stack, `numSctpStreams` given to the
93
+ // transport is ignored.
94
+ OS: USE_BUILD_IN_SCTP_STACK ? 65535 : 1024,
95
+ MIS: USE_BUILD_IN_SCTP_STACK ? 65535 : 1024,
91
96
  maxMessageSize: 262144,
92
97
  });
93
98
  expect(plainTransport2.sctpState).toBe('new');
@@ -9,6 +9,7 @@ const utils = require("../utils");
9
9
  const notification_1 = require("../fbs/notification");
10
10
  const FbsTransport = require("../fbs/transport");
11
11
  const FbsWebRtcTransport = require("../fbs/web-rtc-transport");
12
+ const USE_BUILD_IN_SCTP_STACK = false;
12
13
  const ctx = {
13
14
  mediaCodecs: utils.deepFreeze([
14
15
  {
@@ -40,7 +41,9 @@ const ctx = {
40
41
  ]),
41
42
  };
42
43
  beforeEach(async () => {
43
- ctx.worker = await mediasoup.createWorker();
44
+ ctx.worker = await mediasoup.createWorker({
45
+ useBuiltInSctpStack: USE_BUILD_IN_SCTP_STACK,
46
+ });
44
47
  ctx.router = await ctx.worker.createRouter({ mediaCodecs: ctx.mediaCodecs });
45
48
  });
46
49
  afterEach(async () => {
@@ -97,7 +100,7 @@ test('router.createWebRtcTransport() succeeds', async () => {
97
100
  enableTcp: true,
98
101
  preferUdp: true,
99
102
  enableSctp: true,
100
- numSctpStreams: { OS: 2048, MIS: 2048 },
103
+ numSctpStreams: { OS: 2048, MIS: 4096 },
101
104
  maxSctpMessageSize: 1000000,
102
105
  appData: { foo: 'bar' },
103
106
  });
@@ -117,8 +120,10 @@ test('router.createWebRtcTransport() succeeds', async () => {
117
120
  expect(typeof webRtcTransport.iceParameters.password).toBe('string');
118
121
  expect(webRtcTransport.sctpParameters).toMatchObject({
119
122
  port: 5000,
120
- OS: 2048,
121
- MIS: 2048,
123
+ // NOTE: When using the built-in SCTP stack, `numSctpStreams` given to the
124
+ // transport is ignored.
125
+ OS: USE_BUILD_IN_SCTP_STACK ? 65535 : 2048,
126
+ MIS: USE_BUILD_IN_SCTP_STACK ? 65535 : 4096,
122
127
  maxMessageSize: 1000000,
123
128
  });
124
129
  expect(Array.isArray(webRtcTransport.iceCandidates)).toBe(true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup",
3
- "version": "3.19.18",
3
+ "version": "3.19.20",
4
4
  "description": "Cutting Edge WebRTC Video Conferencing",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -102,30 +102,30 @@
102
102
  "h264-profile-level-id": "^2.3.2",
103
103
  "node-fetch": "^3.3.2",
104
104
  "supports-color": "^10.2.2",
105
- "tar": "^7.5.11"
105
+ "tar": "^7.5.13"
106
106
  },
107
107
  "devDependencies": {
108
108
  "@eslint/js": "^10.0.1",
109
109
  "@octokit/rest": "^22.0.1",
110
- "@types/debug": "^4.1.12",
110
+ "@types/debug": "^4.1.13",
111
111
  "@types/ini": "^4.1.1",
112
112
  "@types/jest": "^30.0.0",
113
113
  "@types/node": "^24.10.1",
114
- "eslint": "^10.0.3",
114
+ "eslint": "^10.2.1",
115
115
  "eslint-config-prettier": "^10.1.8",
116
- "eslint-plugin-jest": "^29.15.0",
116
+ "eslint-plugin-jest": "^29.15.2",
117
117
  "eslint-plugin-prettier": "^5.5.5",
118
- "globals": "^17.4.0",
118
+ "globals": "^17.5.0",
119
119
  "ini": "^6.0.0",
120
120
  "jest": "^30.3.0",
121
- "knip": "^5.86.0",
122
- "marked": "^17.0.4",
123
- "open-cli": "^8.0.0",
121
+ "knip": "^6.4.1",
122
+ "marked": "^18.0.2",
123
+ "open-cli": "^9.0.0",
124
124
  "pick-port": "^2.2.0",
125
- "prettier": "^3.8.1",
126
- "ts-jest": "^29.4.6",
125
+ "prettier": "^3.8.3",
126
+ "ts-jest": "^29.4.9",
127
127
  "typescript": "^5.9.3",
128
- "typescript-eslint": "^8.57.0",
128
+ "typescript-eslint": "^8.58.2",
129
129
  "werift-sctp": "^0.0.11"
130
130
  }
131
131
  }
package/worker/Makefile CHANGED
@@ -36,13 +36,14 @@ endif
36
36
  test \
37
37
  test-asan-address \
38
38
  test-asan-undefined \
39
- test-asan-thread \
40
39
  fuzzer \
41
40
  fuzzer-run-all \
42
41
  docker \
43
42
  docker-run \
44
43
  docker-alpine \
45
- docker-alpine-run
44
+ docker-alpine-run \
45
+ docker-386 \
46
+ docker-386-run
46
47
 
47
48
  default: mediasoup-worker
48
49
 
@@ -111,9 +112,6 @@ test-asan-address: invoke
111
112
  test-asan-undefined: invoke
112
113
  "$(PYTHON)" -m invoke test-asan-undefined
113
114
 
114
- test-asan-thread: invoke
115
- "$(PYTHON)" -m invoke test-asan-thread
116
-
117
115
  fuzzer: invoke
118
116
  "$(PYTHON)" -m invoke fuzzer
119
117
 
@@ -131,3 +129,9 @@ docker-alpine: invoke
131
129
 
132
130
  docker-alpine-run: invoke
133
131
  "$(PYTHON)" -m invoke docker-alpine-run
132
+
133
+ docker-386: invoke
134
+ "$(PYTHON)" -m invoke docker-386
135
+
136
+ docker-386-run: invoke
137
+ "$(PYTHON)" -m invoke docker-386-run
@@ -1,33 +1,37 @@
1
1
  #include "FuzzerUtils.hpp"
2
2
  #include "MediaSoupErrors.hpp"
3
3
  #include "Utils.hpp"
4
- #include <cstring> // std::memory()
4
+ #include <cstring> // std::memcpy()
5
5
  #include <string>
6
6
 
7
- void FuzzerUtils::Fuzz(const uint8_t* data, size_t len)
7
+ namespace
8
8
  {
9
- // For some fuzzers below.
10
- const std::unique_ptr<uint8_t[]> data2(new uint8_t[len + (INET6_ADDRSTRLEN * 3)]);
9
+ alignas(4) thread_local uint8_t DataBuffer[65536];
10
+ }
11
11
 
12
- std::memcpy(data2.get(), data, len);
12
+ void FuzzerUtils::Fuzz(const uint8_t* data, size_t len)
13
+ {
14
+ // NOTE: We need to copy given data into another buffer because we are gonna
15
+ // write into it.
16
+ std::memcpy(DataBuffer, data, len);
13
17
 
14
18
  /* IP class. */
15
19
 
16
20
  std::string ip;
17
21
 
18
- ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN / 2);
22
+ ip = std::string(reinterpret_cast<const char*>(DataBuffer), INET6_ADDRSTRLEN / 2);
19
23
  Utils::IP::GetFamily(ip);
20
24
 
21
- ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN);
25
+ ip = std::string(reinterpret_cast<const char*>(DataBuffer), INET6_ADDRSTRLEN);
22
26
  Utils::IP::GetFamily(ip);
23
27
 
24
- ip = std::string(reinterpret_cast<const char*>(data2.get()), INET6_ADDRSTRLEN * 2);
28
+ ip = std::string(reinterpret_cast<const char*>(DataBuffer), INET6_ADDRSTRLEN * 2);
25
29
  Utils::IP::GetFamily(ip);
26
30
 
27
31
  // Protect with try/catch since throws are legit.
28
32
  try
29
33
  {
30
- auto ip = std::string(reinterpret_cast<const char*>(data2.get()), len);
34
+ auto ip = std::string(reinterpret_cast<const char*>(DataBuffer), len);
31
35
 
32
36
  Utils::IP::NormalizeIp(ip);
33
37
  }
@@ -37,16 +41,16 @@ void FuzzerUtils::Fuzz(const uint8_t* data, size_t len)
37
41
 
38
42
  /* Byte class. */
39
43
 
40
- Utils::Byte::Get1Byte(data2.get(), len);
41
- Utils::Byte::Get2Bytes(data2.get(), len);
42
- Utils::Byte::Get3Bytes(data2.get(), len);
43
- Utils::Byte::Get4Bytes(data2.get(), len);
44
- Utils::Byte::Get8Bytes(data2.get(), len);
45
- Utils::Byte::Set1Byte(data2.get(), len, uint8_t{ 6u });
46
- Utils::Byte::Set2Bytes(data2.get(), len, uint16_t{ 66u });
47
- Utils::Byte::Set3Bytes(data2.get(), len, uint32_t{ 666u });
48
- Utils::Byte::Set4Bytes(data2.get(), len, uint32_t{ 666u });
49
- Utils::Byte::Set8Bytes(data2.get(), len, uint64_t{ 6666u });
44
+ Utils::Byte::Get1Byte(DataBuffer, len);
45
+ Utils::Byte::Get2Bytes(DataBuffer, len);
46
+ Utils::Byte::Get3Bytes(DataBuffer, len);
47
+ Utils::Byte::Get4Bytes(DataBuffer, len);
48
+ Utils::Byte::Get8Bytes(DataBuffer, len);
49
+ Utils::Byte::Set1Byte(DataBuffer, len, uint8_t{ 6u });
50
+ Utils::Byte::Set2Bytes(DataBuffer, len, uint16_t{ 66u });
51
+ Utils::Byte::Set3Bytes(DataBuffer, len, uint32_t{ 666u });
52
+ Utils::Byte::Set4Bytes(DataBuffer, len, uint32_t{ 666u });
53
+ Utils::Byte::Set8Bytes(DataBuffer, len, uint64_t{ 6666u });
50
54
  Utils::Byte::PadTo4Bytes(static_cast<uint8_t>(len));
51
55
  Utils::Byte::PadTo4Bytes(static_cast<uint16_t>(len));
52
56
  Utils::Byte::PadTo4Bytes(static_cast<uint32_t>(len));
@@ -70,7 +74,7 @@ void FuzzerUtils::Fuzz(const uint8_t* data, size_t len)
70
74
  static_cast<uint64_t>(len), static_cast<uint64_t>(len + 1000000));
71
75
  Utils::Crypto::GetRandomUInt<size_t>(len, len + 1000000);
72
76
  Utils::Crypto::GetRandomString(len);
73
- Utils::Crypto::GetCRC32(data2.get(), len);
77
+ Utils::Crypto::GetCRC32(DataBuffer, len);
74
78
 
75
79
  /* String class. */
76
80
 
@@ -79,8 +83,8 @@ void FuzzerUtils::Fuzz(const uint8_t* data, size_t len)
79
83
  {
80
84
  size_t outLen;
81
85
 
82
- Utils::String::Base64Encode(data2.get(), len);
83
- Utils::String::Base64Decode(data2.get(), len, outLen);
86
+ Utils::String::Base64Encode(DataBuffer, len);
87
+ Utils::String::Base64Decode(DataBuffer, len, outLen);
84
88
  }
85
89
  catch (const MediaSoupError& error) // NOLINT(bugprone-empty-catch)
86
90
  {
@@ -3,11 +3,11 @@
3
3
  #include <string_view>
4
4
 
5
5
  static constexpr size_t ResponseFactoryBufferLength{ 65536 };
6
- thread_local uint8_t ResponseFactoryBuffer[ResponseFactoryBufferLength];
6
+ alignas(4) thread_local uint8_t ResponseFactoryBuffer[ResponseFactoryBufferLength];
7
7
  static constexpr size_t SerializeBufferLength{ 65536 };
8
- thread_local uint8_t SerializeBuffer[SerializeBufferLength];
8
+ alignas(4) thread_local uint8_t SerializeBuffer[SerializeBufferLength];
9
9
  static constexpr size_t CloneBufferLength{ 65536 };
10
- thread_local uint8_t CloneBuffer[CloneBufferLength];
10
+ alignas(4) thread_local uint8_t CloneBuffer[CloneBufferLength];
11
11
 
12
12
  void FuzzerRtcIceStunPacket::Fuzz(const uint8_t* data, size_t len)
13
13
  {
@@ -7,6 +7,12 @@
7
7
  #include "RTC/RTCP/FuzzerSenderReport.hpp"
8
8
  #include "RTC/RTCP/FuzzerXr.hpp"
9
9
  #include "RTC/RTCP/Packet.hpp"
10
+ #include <cstring> // std::memcpy()
11
+
12
+ namespace
13
+ {
14
+ alignas(4) thread_local uint8_t DataBuffer[65536];
15
+ } // namespace
10
16
 
11
17
  void FuzzerRtcRtcpPacket::Fuzz(const uint8_t* data, size_t len)
12
18
  {
@@ -15,13 +21,11 @@ void FuzzerRtcRtcpPacket::Fuzz(const uint8_t* data, size_t len)
15
21
  return;
16
22
  }
17
23
 
18
- // We need to clone the given data into a separate buffer because setters
19
- // below will try to write into packet memory.
20
- const std::unique_ptr<uint8_t[]> data2(new uint8_t[len]);
21
-
22
- std::memcpy(data2.get(), data, len);
24
+ // NOTE: We need to copy given data into another buffer because we are gonna
25
+ // write into it.
26
+ std::memcpy(DataBuffer, data, len);
23
27
 
24
- RTC::RTCP::Packet* packet = RTC::RTCP::Packet::Parse(data2.get(), len);
28
+ RTC::RTCP::Packet* packet = RTC::RTCP::Packet::Parse(DataBuffer, len);
25
29
 
26
30
  if (!packet)
27
31
  {
@@ -1,17 +1,20 @@
1
1
  #include "RTC/SCTP/FuzzerStateCookie.hpp"
2
2
  #include "Utils.hpp"
3
- #include "RTC/SCTP/StateCookie.hpp"
4
- #include <cstdlib> // std::malloc(), std::free()
3
+ #include "RTC/SCTP/association/StateCookie.hpp"
5
4
  #include <cstring> // std::memcpy()
6
5
 
7
- thread_local uint8_t StateCookieSerializeBuffer[65536];
8
- thread_local uint8_t StateCookieCloneBuffer[65536];
6
+ namespace
7
+ {
8
+ alignas(4) thread_local uint8_t DataBuffer[65536];
9
+ alignas(4) thread_local uint8_t StateCookieSerializeBuffer[65536];
10
+ alignas(4) thread_local uint8_t StateCookieCloneBuffer[65536];
11
+ } // namespace
9
12
 
10
13
  void FuzzerRtcSctpStateCookie::Fuzz(const uint8_t* data, size_t len)
11
14
  {
12
- auto* clonedData = static_cast<uint8_t*>(std::malloc(len));
13
-
14
- std::memcpy(clonedData, data, len);
15
+ // NOTE: We need to copy given data into another buffer because we are gonna
16
+ // write into it.
17
+ std::memcpy(DataBuffer, data, len);
15
18
 
16
19
  // We need to force `data` to be a StateCookie since it's too hard that
17
20
  // random data matches it.
@@ -22,20 +25,18 @@ void FuzzerRtcSctpStateCookie::Fuzz(const uint8_t* data, size_t len)
22
25
 
23
26
  if (len < RTC::SCTP::StateCookie::StateCookieLength + 5)
24
27
  {
25
- Utils::Byte::Set8Bytes(clonedData, 0, RTC::SCTP::StateCookie::Magic1);
28
+ Utils::Byte::Set8Bytes(DataBuffer, 0, RTC::SCTP::StateCookie::Magic1);
26
29
  Utils::Byte::Set2Bytes(
27
- clonedData,
30
+ DataBuffer,
28
31
  RTC::SCTP::StateCookie::NegotiatedCapabilitiesOffset,
29
32
  RTC::SCTP::StateCookie::Magic2);
30
33
  }
31
34
  }
32
35
 
33
- RTC::SCTP::StateCookie* stateCookie = RTC::SCTP::StateCookie::Parse(clonedData, len);
36
+ RTC::SCTP::StateCookie* stateCookie = RTC::SCTP::StateCookie::Parse(DataBuffer, len);
34
37
 
35
38
  if (!stateCookie)
36
39
  {
37
- std::free(clonedData);
38
-
39
40
  return;
40
41
  }
41
42
 
@@ -71,6 +72,5 @@ void FuzzerRtcSctpStateCookie::Fuzz(const uint8_t* data, size_t len)
71
72
 
72
73
  clonedStateCookie->Serialize(StateCookieSerializeBuffer, len);
73
74
 
74
- std::free(clonedData);
75
75
  delete clonedStateCookie;
76
76
  }
@@ -5,6 +5,7 @@
5
5
  #include "DepLibUV.hpp"
6
6
  #include "DepLibWebRTC.hpp"
7
7
  #include "DepOpenSSL.hpp"
8
+ // TODO: Remove once we only use built-in SCTP stack.
8
9
  #include "DepUsrSCTP.hpp"
9
10
  #include "FuzzerUtils.hpp"
10
11
  #include "Settings.hpp"
@@ -145,7 +146,11 @@ namespace
145
146
  DepLibUV::ClassInit();
146
147
  DepOpenSSL::ClassInit();
147
148
  DepLibSRTP::ClassInit();
148
- DepUsrSCTP::ClassInit();
149
+ // TODO: Remove once we only use built-in SCTP stack.
150
+ if (!Settings::configuration.useBuiltInSctpStack)
151
+ {
152
+ DepUsrSCTP::ClassInit();
153
+ }
149
154
  DepLibWebRTC::ClassInit();
150
155
  Utils::Crypto::ClassInit();
151
156
  RTC::DtlsTransport::ClassInit();
@@ -11,10 +11,6 @@
11
11
 
12
12
  namespace RTC
13
13
  {
14
- // Define class here such that we can use it even though we don't know what it looks like yet
15
- // (this is to avoid circular dependencies).
16
- class SctpAssociation;
17
-
18
14
  class DataConsumer : public Channel::ChannelSocket::RequestHandler
19
15
  {
20
16
  protected:
@@ -32,7 +28,9 @@ namespace RTC
32
28
  const uint8_t* msg,
33
29
  size_t len,
34
30
  uint32_t ppid,
35
- onQueuedCallback* cb) = 0;
31
+ onQueuedCallback* cb) = 0;
32
+ virtual void OnDataConsumerNeedBufferedAmount(
33
+ RTC::DataConsumer* dataConsumer, uint32_t& bufferedAmount) = 0;
36
34
  virtual void OnDataConsumerDataProducerClosed(RTC::DataConsumer* dataConsumer) = 0;
37
35
  };
38
36
 
@@ -48,7 +46,6 @@ namespace RTC
48
46
  RTC::Shared* shared,
49
47
  const std::string& id,
50
48
  const std::string& dataProducerId,
51
- RTC::SctpAssociation* sctpAssociation,
52
49
  RTC::DataConsumer::Listener* listener,
53
50
  const FBS::Transport::ConsumeDataRequest* data,
54
51
  size_t maxMessageSize);
@@ -95,10 +92,10 @@ namespace RTC
95
92
  void DataProducerResumed();
96
93
  void SctpAssociationConnected();
97
94
  void SctpAssociationClosed();
98
- void SctpAssociationBufferedAmount(uint32_t bufferedAmount);
95
+ void SetSctpAssociationBufferedAmount(uint32_t bufferedAmount);
99
96
  void SctpAssociationSendBufferFull();
100
97
  void DataProducerClosed();
101
- void SendMessage(
98
+ bool SendMessage(
102
99
  const uint8_t* msg,
103
100
  size_t len,
104
101
  uint32_t ppid,
@@ -118,7 +115,6 @@ namespace RTC
118
115
  private:
119
116
  // Passed by argument.
120
117
  RTC::Shared* shared{ nullptr };
121
- RTC::SctpAssociation* sctpAssociation{ nullptr };
122
118
  RTC::DataConsumer::Listener* listener{ nullptr };
123
119
  size_t maxMessageSize{ 0u };
124
120
  // Others.
@@ -36,7 +36,7 @@ namespace RTC
36
36
  size_t len,
37
37
  uint32_t ppid,
38
38
  onQueuedCallback* cb = nullptr) override;
39
- void SendSctpData(const uint8_t* data, size_t len) override;
39
+ bool SendSctpData(const uint8_t* data, size_t len) override;
40
40
  void RecvStreamClosed(uint32_t ssrc) override;
41
41
  void SendStreamClosed(uint32_t ssrc) override;
42
42
 
@@ -151,7 +151,8 @@ namespace RTC
151
151
  {
152
152
  return this->localRole;
153
153
  }
154
- void SendApplicationData(const uint8_t* data, size_t len);
154
+ // Returns a boolean indicating whether the data could be sent.
155
+ bool SendApplicationData(const uint8_t* data, size_t len);
155
156
  // This method must be public since it's called within an OpenSSL callback.
156
157
  void SendDtlsData(const uint8_t* data, size_t len);
157
158