mediasoup 3.19.19 → 3.19.21

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 (91) 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 +10 -10
  15. package/worker/Makefile +0 -4
  16. package/worker/fuzzer/src/fuzzer.cpp +6 -5
  17. package/worker/include/RTC/DataConsumer.hpp +4 -14
  18. package/worker/include/RTC/SCTP/TODO_SCTP.md +18 -10
  19. package/worker/include/RTC/SCTP/association/Association.hpp +39 -31
  20. package/worker/include/RTC/SCTP/association/{AssociationDeferredListener.hpp → AssociationListenerDeferrer.hpp} +10 -8
  21. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +77 -0
  22. package/worker/include/RTC/SCTP/association/NegotiatedCapabilities.hpp +2 -2
  23. package/worker/include/RTC/SCTP/association/PacketSender.hpp +2 -2
  24. package/worker/include/RTC/SCTP/association/StateCookie.hpp +2 -2
  25. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +272 -0
  26. package/worker/include/RTC/SCTP/association/TCBContext.hpp +67 -0
  27. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +81 -11
  28. package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +274 -0
  29. package/worker/include/RTC/SCTP/packet/Chunk.hpp +0 -1
  30. package/worker/include/RTC/SCTP/packet/UserData.hpp +1 -0
  31. package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +14 -10
  32. package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +14 -10
  33. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +13 -2
  34. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +7 -1
  35. package/worker/include/RTC/SCTP/public/AssociationListener.hpp +11 -0
  36. package/worker/include/RTC/SCTP/public/Message.hpp +1 -0
  37. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +4 -4
  38. package/worker/include/RTC/SctpAssociation.hpp +2 -2
  39. package/worker/include/RTC/Transport.hpp +9 -13
  40. package/worker/include/Settings.hpp +2 -1
  41. package/worker/include/Utils.hpp +130 -6
  42. package/worker/meson.build +10 -39
  43. package/worker/meson_options.txt +0 -1
  44. package/worker/scripts/package-lock.json +6 -6
  45. package/worker/src/DepLibUring.cpp +1 -1
  46. package/worker/src/RTC/DataConsumer.cpp +5 -29
  47. package/worker/src/RTC/PipeTransport.cpp +15 -12
  48. package/worker/src/RTC/PlainTransport.cpp +15 -12
  49. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +5 -5
  50. package/worker/src/RTC/RTP/RtpStream.cpp +2 -2
  51. package/worker/src/RTC/RTP/RtxStream.cpp +1 -1
  52. package/worker/src/RTC/RateCalculator.cpp +5 -5
  53. package/worker/src/RTC/SCTP/association/Association.cpp +218 -148
  54. package/worker/src/RTC/SCTP/association/{AssociationDeferredListener.cpp → AssociationListenerDeferrer.cpp} +38 -30
  55. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +244 -0
  56. package/worker/src/RTC/SCTP/association/NegotiatedCapabilities.cpp +8 -6
  57. package/worker/src/RTC/SCTP/association/PacketSender.cpp +7 -2
  58. package/worker/src/RTC/SCTP/association/StateCookie.cpp +8 -8
  59. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +512 -0
  60. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +45 -39
  61. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +1 -1
  62. package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +1 -1
  63. package/worker/src/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.cpp +22 -5
  64. package/worker/src/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.cpp +22 -5
  65. package/worker/src/RTC/SCTP/tx/RetransmissionErrorCounter.cpp +1 -1
  66. package/worker/src/RTC/SctpAssociation.cpp +1 -2
  67. package/worker/src/RTC/SeqManager.cpp +4 -4
  68. package/worker/src/RTC/Transport.cpp +247 -134
  69. package/worker/src/RTC/WebRtcTransport.cpp +9 -5
  70. package/worker/src/Settings.cpp +21 -1
  71. package/worker/src/Worker.cpp +13 -10
  72. package/worker/src/lib.cpp +11 -8
  73. package/worker/tasks.py +2 -35
  74. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +13 -12
  75. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +20 -20
  76. package/worker/test/src/RTC/SCTP/common/TestUnwrappedSequenceNumber.cpp +210 -0
  77. package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +2 -2
  78. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +9 -4
  79. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +5 -0
  80. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +1 -1
  81. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +5 -5
  82. package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +19 -20
  83. package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +3 -0
  84. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +3 -0
  85. package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +24 -27
  86. package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +25 -30
  87. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +8 -6
  88. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +12 -0
  89. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +5 -8
  90. package/worker/test/src/Utils/TestNumber.cpp +119 -49
  91. package/worker/test/src/tests.cpp +11 -8
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":"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"}
1
+ {"version":3,"file":"WorkerTypes.d.ts","sourceRoot":"","sources":["../src/WorkerTypes.ts"],"names":[],"mappings":"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"}
@@ -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.19",
3
+ "version": "3.19.21",
4
4
  "description": "Cutting Edge WebRTC Video Conferencing",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -111,21 +111,21 @@
111
111
  "@types/ini": "^4.1.1",
112
112
  "@types/jest": "^30.0.0",
113
113
  "@types/node": "^24.10.1",
114
- "eslint": "^10.1.0",
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": "^6.0.4",
122
- "marked": "^17.0.5",
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.2",
128
+ "typescript-eslint": "^8.59.0",
129
129
  "werift-sctp": "^0.0.11"
130
130
  }
131
131
  }
package/worker/Makefile CHANGED
@@ -36,7 +36,6 @@ 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 \
@@ -113,9 +112,6 @@ test-asan-address: invoke
113
112
  test-asan-undefined: invoke
114
113
  "$(PYTHON)" -m invoke test-asan-undefined
115
114
 
116
- test-asan-thread: invoke
117
- "$(PYTHON)" -m invoke test-asan-thread
118
-
119
115
  fuzzer: invoke
120
116
  "$(PYTHON)" -m invoke fuzzer
121
117
 
@@ -5,9 +5,8 @@
5
5
  #include "DepLibUV.hpp"
6
6
  #include "DepLibWebRTC.hpp"
7
7
  #include "DepOpenSSL.hpp"
8
- #ifndef MS_SCTP_STACK
8
+ // TODO: Remove once we only use built-in SCTP stack.
9
9
  #include "DepUsrSCTP.hpp"
10
- #endif
11
10
  #include "FuzzerUtils.hpp"
12
11
  #include "Settings.hpp"
13
12
  #include "Utils.hpp"
@@ -147,9 +146,11 @@ namespace
147
146
  DepLibUV::ClassInit();
148
147
  DepOpenSSL::ClassInit();
149
148
  DepLibSRTP::ClassInit();
150
- #ifndef MS_SCTP_STACK
151
- DepUsrSCTP::ClassInit();
152
- #endif
149
+ // TODO: Remove once we only use built-in SCTP stack.
150
+ if (!Settings::configuration.useBuiltInSctpStack)
151
+ {
152
+ DepUsrSCTP::ClassInit();
153
+ }
153
154
  DepLibWebRTC::ClassInit();
154
155
  Utils::Crypto::ClassInit();
155
156
  RTC::DtlsTransport::ClassInit();
@@ -11,12 +11,6 @@
11
11
 
12
12
  namespace RTC
13
13
  {
14
- #ifndef MS_SCTP_STACK
15
- // Define class here such that we can use it even though we don't know what it looks like yet
16
- // (this is to avoid circular dependencies).
17
- class SctpAssociation;
18
- #endif
19
-
20
14
  class DataConsumer : public Channel::ChannelSocket::RequestHandler
21
15
  {
22
16
  protected:
@@ -34,7 +28,9 @@ namespace RTC
34
28
  const uint8_t* msg,
35
29
  size_t len,
36
30
  uint32_t ppid,
37
- onQueuedCallback* cb) = 0;
31
+ onQueuedCallback* cb) = 0;
32
+ virtual void OnDataConsumerNeedBufferedAmount(
33
+ RTC::DataConsumer* dataConsumer, uint32_t& bufferedAmount) = 0;
38
34
  virtual void OnDataConsumerDataProducerClosed(RTC::DataConsumer* dataConsumer) = 0;
39
35
  };
40
36
 
@@ -50,9 +46,6 @@ namespace RTC
50
46
  RTC::Shared* shared,
51
47
  const std::string& id,
52
48
  const std::string& dataProducerId,
53
- #ifndef MS_SCTP_STACK
54
- RTC::SctpAssociation* sctpAssociation,
55
- #endif
56
49
  RTC::DataConsumer::Listener* listener,
57
50
  const FBS::Transport::ConsumeDataRequest* data,
58
51
  size_t maxMessageSize);
@@ -99,7 +92,7 @@ namespace RTC
99
92
  void DataProducerResumed();
100
93
  void SctpAssociationConnected();
101
94
  void SctpAssociationClosed();
102
- void SctpAssociationBufferedAmount(uint32_t bufferedAmount);
95
+ void SetSctpAssociationBufferedAmount(uint32_t bufferedAmount);
103
96
  void SctpAssociationSendBufferFull();
104
97
  void DataProducerClosed();
105
98
  bool SendMessage(
@@ -122,9 +115,6 @@ namespace RTC
122
115
  private:
123
116
  // Passed by argument.
124
117
  RTC::Shared* shared{ nullptr };
125
- #ifndef MS_SCTP_STACK
126
- RTC::SctpAssociation* sctpAssociation{ nullptr };
127
- #endif
128
118
  RTC::DataConsumer::Listener* listener{ nullptr };
129
119
  size_t maxMessageSize{ 0u };
130
120
  // Others.
@@ -2,8 +2,6 @@
2
2
 
3
3
  ## Related to mediasoup SCTP implementation
4
4
 
5
- - `Association`: We should not accept transition from CLOSED to CONNECTING/CONNECTED. Technically we can but we don't want. Once closed or failed, it must be over.
6
-
7
5
  - `Association`: When transitioning to CLOSED (due to failure while connecting or closure) we should emit a new event "stcpclosed" in all `DataProducers/Consumers`.
8
6
 
9
7
  - When receiving SCTP RE-CONFIG, we should emit "streamclosed" in those `DataProducers/DataConsumers` whose stream ID have been closed.
@@ -14,11 +12,27 @@
14
12
 
15
13
  - Probably add many more fields in `SctpOptions` given to the `Association` in `Transport.cpp`.
16
14
 
15
+ - We must remove `numSctpStreams` option given to `router.createXxxTransport()` and `NumSctpStreams` type. `OS` and `MIS` in `numSctpStreams` are just the max announced number of outbound and incoming SCTP streams, but in the new SCTP stack those should always be 65535. The max number of incoming and outgoing streams will be negotiated later with the SCTP INIT and INIT_ACK and will be the minimum of our values (65535) and the OS and MIS that the peer announces in its INIT or INIT_ACK.
16
+ - This is a breaking change.
17
+ - Remove it from `sctpParameters.fbs` and other FBS types (look for `MIS` or `mis`, etc).
18
+ - Remove it in Rust layer.
19
+ - We must also remove `device.sctpCapabilities` getter from mediasoup-client because anyway we are making up those values!
20
+ - Also must update the website documentation.
21
+
22
+ - In `transport.dump()` (maybe also in `getStats()`) we must properly obtain `OS` and `MIS` according to the number of SCTP streams negotiated via INIT + INIT_ACK. And if SCTP is not yet established, then... not sure.
23
+ - In `Association::FillBuffer()` we should not pass `this->sctpOptions.negotiatedMaxOutboundStreams/negotiatedMaxInboundStreams` but the current values.
24
+
17
25
  - We need to pass `isDataChannel` to `SCTP::Association` constructor as we do in former `SctpAssociation`. Also use it in `Association::FillBuffer()`.
26
+ - Well, let's see. If it's only for when changing number of OS/MIS... then the new SCTP stack doesn't support it so...
27
+
28
+ - Instead of having a protected `sctpAssociation` member in `Transport`, let's make `Transport` subclasses invoke a new method `Transport::SendSctpMessage()` or `Transport::SendMessage()` instead of directly calling `this->sctpAssociation->SendSctpMessage()`.
18
29
 
19
- - In `Association::FillBuffer()` we should not pass `this->sctpOptions.maxOutboundStreams/maxInboundStreams` but the current values (they may have been modified via "reconfig").
30
+ - Fix `dataConsumer.getBufferedAmount()` which in usrsctp returns the data buffered for all data consumers in the transport but now it will be per `DataConsumer` (SCTP stream).
31
+ - In `DataConsumer` class rename `SetAssociationBufferedAmount()` to `SetBufferedAmount()`.
32
+ - In `DataConsumer` class revisit `SctpAssociationSendBufferFull()` method.
33
+ - Fix the documentation in the website which says: "The underlaying SCTP association uses a common send buffer for all data consumers, hence the value given by this method indicates the data buffered for all data consumers in the transport."
20
34
 
21
- - We must call `association->Connect()` somewhere when appropriate! Probably same as the `MayConnect()` in former `SctpAssociation`.
35
+ - Look for "TODO: SCTP" everywhere.
22
36
 
23
37
  - Test Chrome with I-DATA (message interleaving):
24
38
 
@@ -27,9 +41,3 @@
27
41
  --args \
28
42
  --force-fieldtrials="WebRTC-DataChannelMessageInterleaving/Enabled/"
29
43
  ```
30
-
31
- - Look for "TODO: SCTP" and `MS_SCTP_STACK`.
32
-
33
- ## Related to dcsctp
34
-
35
- - Investigate `DcSctpSocket::HandleTimeout()` which is only called from `media/sctp/dcsctp_transport.cc`.
@@ -2,7 +2,7 @@
2
2
  #define MS_RTC_SCTP_ASSOCIATION_HPP
3
3
 
4
4
  #include "common.hpp"
5
- #include "RTC/SCTP/association/AssociationDeferredListener.hpp"
5
+ #include "RTC/SCTP/association/AssociationListenerDeferrer.hpp"
6
6
  #include "RTC/SCTP/association/NegotiatedCapabilities.hpp"
7
7
  #include "RTC/SCTP/association/PacketSender.hpp"
8
8
  #include "RTC/SCTP/association/StateCookie.hpp"
@@ -178,12 +178,20 @@ namespace RTC
178
178
 
179
179
  Types::AssociationState GetAssociationState() const override;
180
180
 
181
+ /**
182
+ * May invoke `Connect()` but only if the parent transport is ready for
183
+ * SCTP transmission (e.g. the WebRtcTransport has ICE and DTLS connected).
184
+ */
185
+ void MayConnect() override;
186
+
181
187
  /**
182
188
  * Initiate the SCTP association with the remote peer. It sends an INIT
183
189
  * Chunk.
184
190
  *
185
191
  * @remarks
186
- * - The SCTP association must be in Closed state.
192
+ * - The SCTP association must be in New state.
193
+ * - Despite this method is public, it's never invoked since `MayConnect()`
194
+ * method is invoked instead.
187
195
  */
188
196
  void Connect() override;
189
197
 
@@ -366,64 +374,64 @@ namespace RTC
366
374
 
367
375
  bool ValidateReceivedPacket(const Packet* receivedPacket);
368
376
 
369
- bool ProcessReceivedChunk(const Packet* receivedPacket, const Chunk* receivedChunk);
377
+ bool HandleReceivedChunk(const Packet* receivedPacket, const Chunk* receivedChunk);
370
378
 
371
- void ProcessReceivedInitChunk(const Packet* receivedPacket, const InitChunk* receivedInitChunk);
379
+ void HandleReceivedInitChunk(const Packet* receivedPacket, const InitChunk* receivedInitChunk);
372
380
 
373
- void ProcessReceivedInitAckChunk(
381
+ void HandleReceivedInitAckChunk(
374
382
  const Packet* receivedPacket, const InitAckChunk* receivedInitAckChunk);
375
383
 
376
- void ProcessReceivedCookieEchoChunk(
384
+ void HandleReceivedCookieEchoChunk(
377
385
  const Packet* receivedPacket, const CookieEchoChunk* receivedCookieEchoChunk);
378
386
 
379
- bool ProcessReceivedCookieEchoChunkWithTcb(const Packet* receivedPacket, const StateCookie* cookie);
387
+ bool HandleReceivedCookieEchoChunkWithTcb(const Packet* receivedPacket, const StateCookie* cookie);
380
388
 
381
- void ProcessReceivedCookieAckChunk(
389
+ void HandleReceivedCookieAckChunk(
382
390
  const Packet* receivedPacket, const CookieAckChunk* receivedCookieAckChunk);
383
391
 
384
- void ProcessReceivedShutdownChunk(
392
+ void HandleReceivedShutdownChunk(
385
393
  const Packet* receivedPacket, const ShutdownChunk* receivedShutdownChunk);
386
394
 
387
- void ProcessReceivedShutdownAckChunk(
395
+ void HandleReceivedShutdownAckChunk(
388
396
  const Packet* receivedPacket, const ShutdownAckChunk* receivedShutdownAckChunk);
389
397
 
390
- void ProcessReceivedShutdownCompleteChunk(
398
+ void HandleReceivedShutdownCompleteChunk(
391
399
  const Packet* receivedPacket, const ShutdownCompleteChunk* receivedShutdownCompleteChunk);
392
400
 
393
- void ProcessReceivedOperationErrorChunk(
401
+ void HandleReceivedOperationErrorChunk(
394
402
  const Packet* receivedPacket, const OperationErrorChunk* receivedOperationErrorChunk);
395
403
 
396
- void ProcessReceivedAbortAssociationChunk(
404
+ void HandleReceivedAbortAssociationChunk(
397
405
  const Packet* receivedPacket, const AbortAssociationChunk* receivedAbortAssociationChunk);
398
406
 
399
- void ProcessReceivedHeartbeatRequestChunk(
407
+ void HandleReceivedHeartbeatRequestChunk(
400
408
  const Packet* receivedPacket, const HeartbeatRequestChunk* receivedHeartbeatRequestChunk);
401
409
 
402
- void ProcessReceivedHeartbeatAckChunk(
410
+ void HandleReceivedHeartbeatAckChunk(
403
411
  const Packet* receivedPacket, const HeartbeatAckChunk* receivedHeartbeatAckChunk);
404
412
 
405
- void ProcessReceivedReConfigChunk(
413
+ void HandleReceivedReConfigChunk(
406
414
  const Packet* receivedPacket, const ReConfigChunk* receivedReConfigChunk);
407
415
 
408
- void ProcessReceivedForwardTsnChunk(
416
+ void HandleReceivedForwardTsnChunk(
409
417
  const Packet* receivedPacket, const ForwardTsnChunk* receivedForwardTsnChunk);
410
418
 
411
- void ProcessReceivedIForwardTsnChunk(
419
+ void HandleReceivedIForwardTsnChunk(
412
420
  const Packet* receivedPacket, const IForwardTsnChunk* receivedIForwardTsnChunk);
413
421
 
414
- void ProcessReceivedAnyForwardTsnChunk(
422
+ void HandleReceivedAnyForwardTsnChunk(
415
423
  const Packet* receivedPacket, const AnyForwardTsnChunk* receivedAnyForwardTsnChunk);
416
424
 
417
- void ProcessReceivedDataChunk(const Packet* receivedPacket, const DataChunk* receivedDataChunk);
425
+ void HandleReceivedDataChunk(const Packet* receivedPacket, const DataChunk* receivedDataChunk);
418
426
 
419
- void ProcessReceivedIDataChunk(const Packet* receivedPacket, const IDataChunk* receivedIDataChunk);
427
+ void HandleReceivedIDataChunk(const Packet* receivedPacket, const IDataChunk* receivedIDataChunk);
420
428
 
421
- void ProcessReceivedAnyDataChunk(
429
+ void HandleReceivedAnyDataChunk(
422
430
  const Packet* receivedPacket, const AnyDataChunk* receivedAnyDataChunk);
423
431
 
424
- void ProcessReceivedSackChunk(const Packet* receivedPacket, const SackChunk* receivedSackChunk);
432
+ void HandleReceivedSackChunk(const Packet* receivedPacket, const SackChunk* receivedSackChunk);
425
433
 
426
- bool ProcessReceivedUnknownChunk(
434
+ bool HandleReceivedUnknownChunk(
427
435
  const Packet* receivedPacket, const UnknownChunk* receivedUnknownChunk);
428
436
 
429
437
  void OnT1InitTimer(uint64_t& baseTimeoutMs, bool& stop);
@@ -459,13 +467,13 @@ namespace RTC
459
467
  private:
460
468
  // SCTP options given in the constructor.
461
469
  SctpOptions sctpOptions;
462
- // Listener. It's not an AssociationListener but an
463
- // AssociationDeferredListener which inherits from AssociationListener.
464
- AssociationDeferredListener listener;
470
+ // Listener. It's not an `AssociationListener` but an
471
+ // `AssociationListenerDeferrer` which inherits from `AssociationListener`.
472
+ AssociationListenerDeferrer listener;
465
473
  // SCTP association internal state.
466
474
  State state{ State::NEW };
467
- // Private metrics.
468
- AssociationPrivateMetrics privateMetrics{};
475
+ // Packet sender.
476
+ PacketSender packetSender;
469
477
  // The actual send queue implementation. As data can be sent before the
470
478
  // connection is established, this component is not in the TCB.
471
479
  // TODO: Implement this class.
@@ -476,8 +484,8 @@ namespace RTC
476
484
  // Once the SCTP association is established a Transmission Control Block
477
485
  // is created.
478
486
  std::unique_ptr<TransmissionControlBlock> tcb;
479
- // Packet sender.
480
- PacketSender packetSender;
487
+ // Private metrics.
488
+ AssociationPrivateMetrics privateMetrics{};
481
489
  // T1-init timer.
482
490
  const std::unique_ptr<BackoffTimerHandle> t1InitTimer;
483
491
  // T1-cookie timer.