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.
- package/README.md +4 -4
- package/node/lib/Worker.d.ts +1 -1
- package/node/lib/Worker.d.ts.map +1 -1
- package/node/lib/Worker.js +8 -2
- package/node/lib/WorkerTypes.d.ts +8 -4
- package/node/lib/WorkerTypes.d.ts.map +1 -1
- package/node/lib/index.d.ts +1 -1
- package/node/lib/index.d.ts.map +1 -1
- package/node/lib/index.js +2 -1
- package/node/lib/sctpParametersTypes.d.ts +3 -13
- package/node/lib/sctpParametersTypes.d.ts.map +1 -1
- package/node/lib/test/test-PlainTransport.js +8 -3
- package/node/lib/test/test-WebRtcTransport.js +9 -4
- package/package.json +10 -10
- package/worker/Makefile +0 -4
- package/worker/fuzzer/src/fuzzer.cpp +6 -5
- package/worker/include/RTC/DataConsumer.hpp +4 -14
- package/worker/include/RTC/SCTP/TODO_SCTP.md +18 -10
- package/worker/include/RTC/SCTP/association/Association.hpp +39 -31
- package/worker/include/RTC/SCTP/association/{AssociationDeferredListener.hpp → AssociationListenerDeferrer.hpp} +10 -8
- package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +77 -0
- package/worker/include/RTC/SCTP/association/NegotiatedCapabilities.hpp +2 -2
- package/worker/include/RTC/SCTP/association/PacketSender.hpp +2 -2
- package/worker/include/RTC/SCTP/association/StateCookie.hpp +2 -2
- package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +272 -0
- package/worker/include/RTC/SCTP/association/TCBContext.hpp +67 -0
- package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +81 -11
- package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +274 -0
- package/worker/include/RTC/SCTP/packet/Chunk.hpp +0 -1
- package/worker/include/RTC/SCTP/packet/UserData.hpp +1 -0
- package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +14 -10
- package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +14 -10
- package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +13 -2
- package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +7 -1
- package/worker/include/RTC/SCTP/public/AssociationListener.hpp +11 -0
- package/worker/include/RTC/SCTP/public/Message.hpp +1 -0
- package/worker/include/RTC/SCTP/public/SctpOptions.hpp +4 -4
- package/worker/include/RTC/SctpAssociation.hpp +2 -2
- package/worker/include/RTC/Transport.hpp +9 -13
- package/worker/include/Settings.hpp +2 -1
- package/worker/include/Utils.hpp +130 -6
- package/worker/meson.build +10 -39
- package/worker/meson_options.txt +0 -1
- package/worker/scripts/package-lock.json +6 -6
- package/worker/src/DepLibUring.cpp +1 -1
- package/worker/src/RTC/DataConsumer.cpp +5 -29
- package/worker/src/RTC/PipeTransport.cpp +15 -12
- package/worker/src/RTC/PlainTransport.cpp +15 -12
- package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +5 -5
- package/worker/src/RTC/RTP/RtpStream.cpp +2 -2
- package/worker/src/RTC/RTP/RtxStream.cpp +1 -1
- package/worker/src/RTC/RateCalculator.cpp +5 -5
- package/worker/src/RTC/SCTP/association/Association.cpp +218 -148
- package/worker/src/RTC/SCTP/association/{AssociationDeferredListener.cpp → AssociationListenerDeferrer.cpp} +38 -30
- package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +244 -0
- package/worker/src/RTC/SCTP/association/NegotiatedCapabilities.cpp +8 -6
- package/worker/src/RTC/SCTP/association/PacketSender.cpp +7 -2
- package/worker/src/RTC/SCTP/association/StateCookie.cpp +8 -8
- package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +512 -0
- package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +45 -39
- package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +1 -1
- package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +1 -1
- package/worker/src/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.cpp +22 -5
- package/worker/src/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.cpp +22 -5
- package/worker/src/RTC/SCTP/tx/RetransmissionErrorCounter.cpp +1 -1
- package/worker/src/RTC/SctpAssociation.cpp +1 -2
- package/worker/src/RTC/SeqManager.cpp +4 -4
- package/worker/src/RTC/Transport.cpp +247 -134
- package/worker/src/RTC/WebRtcTransport.cpp +9 -5
- package/worker/src/Settings.cpp +21 -1
- package/worker/src/Worker.cpp +13 -10
- package/worker/src/lib.cpp +11 -8
- package/worker/tasks.py +2 -35
- package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +13 -12
- package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +20 -20
- package/worker/test/src/RTC/SCTP/common/TestUnwrappedSequenceNumber.cpp +210 -0
- package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +2 -2
- package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +9 -4
- package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +5 -0
- package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +1 -1
- package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +5 -5
- package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +19 -20
- package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +3 -0
- package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +3 -0
- package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +24 -27
- package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +25 -30
- package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +8 -6
- package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +12 -0
- package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +5 -8
- package/worker/test/src/Utils/TestNumber.cpp +119 -49
- 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-
|
|
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
|
package/node/lib/Worker.d.ts
CHANGED
|
@@ -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;
|
package/node/lib/Worker.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/node/lib/Worker.js
CHANGED
|
@@ -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(
|
|
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
|
-
*
|
|
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
|
|
1
|
+
{"version":3,"file":"WorkerTypes.d.ts","sourceRoot":"","sources":["../src/WorkerTypes.ts"],"names":[],"mappings":"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"}
|
package/node/lib/index.d.ts
CHANGED
|
@@ -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
|
*/
|
package/node/lib/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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).
|
|
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
|
|
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
|
-
|
|
90
|
-
|
|
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:
|
|
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
|
-
|
|
121
|
-
|
|
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.
|
|
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
|
|
114
|
+
"eslint": "^10.2.1",
|
|
115
115
|
"eslint-config-prettier": "^10.1.8",
|
|
116
|
-
"eslint-plugin-jest": "^29.15.
|
|
116
|
+
"eslint-plugin-jest": "^29.15.2",
|
|
117
117
|
"eslint-plugin-prettier": "^5.5.5",
|
|
118
|
-
"globals": "^17.
|
|
118
|
+
"globals": "^17.5.0",
|
|
119
119
|
"ini": "^6.0.0",
|
|
120
120
|
"jest": "^30.3.0",
|
|
121
|
-
"knip": "^6.
|
|
122
|
-
"marked": "^
|
|
123
|
-
"open-cli": "^
|
|
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.
|
|
126
|
-
"ts-jest": "^29.4.
|
|
125
|
+
"prettier": "^3.8.3",
|
|
126
|
+
"ts-jest": "^29.4.9",
|
|
127
127
|
"typescript": "^5.9.3",
|
|
128
|
-
"typescript-eslint": "^8.
|
|
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
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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)
|
|
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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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/
|
|
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
|
|
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
|
|
377
|
+
bool HandleReceivedChunk(const Packet* receivedPacket, const Chunk* receivedChunk);
|
|
370
378
|
|
|
371
|
-
void
|
|
379
|
+
void HandleReceivedInitChunk(const Packet* receivedPacket, const InitChunk* receivedInitChunk);
|
|
372
380
|
|
|
373
|
-
void
|
|
381
|
+
void HandleReceivedInitAckChunk(
|
|
374
382
|
const Packet* receivedPacket, const InitAckChunk* receivedInitAckChunk);
|
|
375
383
|
|
|
376
|
-
void
|
|
384
|
+
void HandleReceivedCookieEchoChunk(
|
|
377
385
|
const Packet* receivedPacket, const CookieEchoChunk* receivedCookieEchoChunk);
|
|
378
386
|
|
|
379
|
-
bool
|
|
387
|
+
bool HandleReceivedCookieEchoChunkWithTcb(const Packet* receivedPacket, const StateCookie* cookie);
|
|
380
388
|
|
|
381
|
-
void
|
|
389
|
+
void HandleReceivedCookieAckChunk(
|
|
382
390
|
const Packet* receivedPacket, const CookieAckChunk* receivedCookieAckChunk);
|
|
383
391
|
|
|
384
|
-
void
|
|
392
|
+
void HandleReceivedShutdownChunk(
|
|
385
393
|
const Packet* receivedPacket, const ShutdownChunk* receivedShutdownChunk);
|
|
386
394
|
|
|
387
|
-
void
|
|
395
|
+
void HandleReceivedShutdownAckChunk(
|
|
388
396
|
const Packet* receivedPacket, const ShutdownAckChunk* receivedShutdownAckChunk);
|
|
389
397
|
|
|
390
|
-
void
|
|
398
|
+
void HandleReceivedShutdownCompleteChunk(
|
|
391
399
|
const Packet* receivedPacket, const ShutdownCompleteChunk* receivedShutdownCompleteChunk);
|
|
392
400
|
|
|
393
|
-
void
|
|
401
|
+
void HandleReceivedOperationErrorChunk(
|
|
394
402
|
const Packet* receivedPacket, const OperationErrorChunk* receivedOperationErrorChunk);
|
|
395
403
|
|
|
396
|
-
void
|
|
404
|
+
void HandleReceivedAbortAssociationChunk(
|
|
397
405
|
const Packet* receivedPacket, const AbortAssociationChunk* receivedAbortAssociationChunk);
|
|
398
406
|
|
|
399
|
-
void
|
|
407
|
+
void HandleReceivedHeartbeatRequestChunk(
|
|
400
408
|
const Packet* receivedPacket, const HeartbeatRequestChunk* receivedHeartbeatRequestChunk);
|
|
401
409
|
|
|
402
|
-
void
|
|
410
|
+
void HandleReceivedHeartbeatAckChunk(
|
|
403
411
|
const Packet* receivedPacket, const HeartbeatAckChunk* receivedHeartbeatAckChunk);
|
|
404
412
|
|
|
405
|
-
void
|
|
413
|
+
void HandleReceivedReConfigChunk(
|
|
406
414
|
const Packet* receivedPacket, const ReConfigChunk* receivedReConfigChunk);
|
|
407
415
|
|
|
408
|
-
void
|
|
416
|
+
void HandleReceivedForwardTsnChunk(
|
|
409
417
|
const Packet* receivedPacket, const ForwardTsnChunk* receivedForwardTsnChunk);
|
|
410
418
|
|
|
411
|
-
void
|
|
419
|
+
void HandleReceivedIForwardTsnChunk(
|
|
412
420
|
const Packet* receivedPacket, const IForwardTsnChunk* receivedIForwardTsnChunk);
|
|
413
421
|
|
|
414
|
-
void
|
|
422
|
+
void HandleReceivedAnyForwardTsnChunk(
|
|
415
423
|
const Packet* receivedPacket, const AnyForwardTsnChunk* receivedAnyForwardTsnChunk);
|
|
416
424
|
|
|
417
|
-
void
|
|
425
|
+
void HandleReceivedDataChunk(const Packet* receivedPacket, const DataChunk* receivedDataChunk);
|
|
418
426
|
|
|
419
|
-
void
|
|
427
|
+
void HandleReceivedIDataChunk(const Packet* receivedPacket, const IDataChunk* receivedIDataChunk);
|
|
420
428
|
|
|
421
|
-
void
|
|
429
|
+
void HandleReceivedAnyDataChunk(
|
|
422
430
|
const Packet* receivedPacket, const AnyDataChunk* receivedAnyDataChunk);
|
|
423
431
|
|
|
424
|
-
void
|
|
432
|
+
void HandleReceivedSackChunk(const Packet* receivedPacket, const SackChunk* receivedSackChunk);
|
|
425
433
|
|
|
426
|
-
bool
|
|
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
|
-
//
|
|
464
|
-
|
|
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
|
-
//
|
|
468
|
-
|
|
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
|
-
//
|
|
480
|
-
|
|
487
|
+
// Private metrics.
|
|
488
|
+
AssociationPrivateMetrics privateMetrics{};
|
|
481
489
|
// T1-init timer.
|
|
482
490
|
const std::unique_ptr<BackoffTimerHandle> t1InitTimer;
|
|
483
491
|
// T1-cookie timer.
|