mediasoup 3.28.0 → 3.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/node/lib/PipeTransportTypes.d.ts +6 -1
- package/node/lib/PipeTransportTypes.d.ts.map +1 -1
- package/node/lib/PlainTransportTypes.d.ts +6 -1
- package/node/lib/PlainTransportTypes.d.ts.map +1 -1
- package/node/lib/Router.d.ts +4 -4
- package/node/lib/Router.d.ts.map +1 -1
- package/node/lib/Router.js +10 -7
- package/node/lib/RouterTypes.d.ts +7 -1
- package/node/lib/RouterTypes.d.ts.map +1 -1
- package/node/lib/Transport.d.ts +2 -1
- package/node/lib/Transport.d.ts.map +1 -1
- package/node/lib/Transport.js +17 -6
- package/node/lib/TransportTypes.d.ts +12 -2
- package/node/lib/TransportTypes.d.ts.map +1 -1
- package/node/lib/WebRtcTransportTypes.d.ts +6 -1
- package/node/lib/WebRtcTransportTypes.d.ts.map +1 -1
- package/node/lib/fbs/transport/options.d.ts +6 -2
- package/node/lib/fbs/transport/options.d.ts.map +1 -1
- package/node/lib/fbs/transport/options.js +19 -7
- package/node/lib/fbs/transport/sctp-zero-checksum.d.ts +6 -0
- package/node/lib/fbs/transport/sctp-zero-checksum.d.ts.map +1 -0
- package/node/lib/fbs/transport/sctp-zero-checksum.js +11 -0
- package/node/lib/fbs/transport/stats.d.ts +2 -8
- package/node/lib/fbs/transport/stats.d.ts.map +1 -1
- package/node/lib/fbs/transport/stats.js +5 -29
- package/node/lib/fbs/transport.d.ts +1 -0
- package/node/lib/fbs/transport.d.ts.map +1 -1
- package/node/lib/fbs/transport.js +4 -2
- package/npm-scripts.mjs +35 -44
- package/package.json +10 -6
- package/worker/fbs/transport.fbs +9 -2
- package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +14 -1
- package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +17 -4
- package/worker/include/RTC/BWE/AimdRateControl.hpp +9 -9
- package/worker/include/RTC/BWE/BweTypes.hpp +54 -17
- package/worker/include/RTC/BWE/DelayBasedBwe.hpp +3 -3
- package/worker/include/RTC/BWE/FeedbackAdapter.hpp +2 -2
- package/worker/include/RTC/BWE/LossBasedController.hpp +4 -4
- package/worker/include/RTC/BWE/OveruseDetector.hpp +5 -4
- package/worker/include/RTC/BWE/ProbeBitrateEstimator.hpp +1 -1
- package/worker/include/RTC/BWE/ProbeController.hpp +6 -6
- package/worker/include/RTC/BWE/ProbePacketGenerator.hpp +2 -6
- package/worker/include/RTC/BWE/ProbingScheduler.hpp +3 -7
- package/worker/include/RTC/BWE/ReceiverTransportCongestionController.hpp +148 -0
- package/worker/include/RTC/BWE/RembGenerator.hpp +4 -3
- package/worker/include/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.hpp +1 -1
- package/worker/include/RTC/BWE/SenderTransportCongestionController.hpp +343 -0
- package/worker/include/RTC/BWE/TargetRateController.hpp +4 -1
- package/worker/include/RTC/BWE/TransportWideCcFeedbackGenerator.hpp +5 -4
- package/worker/include/RTC/BWE/TrendlineEstimator.hpp +3 -3
- package/worker/include/RTC/Consumer.hpp +8 -1
- package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +36 -10
- package/worker/include/RTC/RTP/RtpStream.hpp +21 -0
- package/worker/include/RTC/RTP/RtpStreamRecv.hpp +1 -0
- package/worker/include/RTC/RTP/RtpStreamSend.hpp +122 -9
- package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +12 -3
- package/worker/include/RTC/TransportCongestionControlClient.hpp +0 -5
- package/worker/include/RTC/TransportCongestionControlServer.hpp +0 -5
- package/worker/include/Utils.hpp +9 -2
- package/worker/meson.build +4 -0
- package/worker/src/RTC/BWE/AimdRateControl.cpp +22 -22
- package/worker/src/RTC/BWE/DelayBasedBwe.cpp +16 -20
- package/worker/src/RTC/BWE/FeedbackAdapter.cpp +1 -1
- package/worker/src/RTC/BWE/OveruseDetector.cpp +8 -8
- package/worker/src/RTC/BWE/ProbeBitrateEstimator.cpp +2 -2
- package/worker/src/RTC/BWE/ProbeController.cpp +1 -1
- package/worker/src/RTC/BWE/ProbePacketGenerator.cpp +1 -6
- package/worker/src/RTC/BWE/ProbingScheduler.cpp +2 -7
- package/worker/src/RTC/BWE/ReceiverTransportCongestionController.cpp +207 -0
- package/worker/src/RTC/BWE/RembGenerator.cpp +1 -1
- package/worker/src/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.cpp +1 -1
- package/worker/src/RTC/BWE/SenderTransportCongestionController.cpp +599 -0
- package/worker/src/RTC/BWE/TransportWideCcFeedbackGenerator.cpp +2 -3
- package/worker/src/RTC/BWE/TrendlineEstimator.cpp +5 -5
- package/worker/src/RTC/Consumer.cpp +3 -2
- package/worker/src/RTC/DataConsumer.cpp +2 -2
- package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +21 -8
- package/worker/src/RTC/RTP/RtpStream.cpp +0 -3
- package/worker/src/RTC/RTP/RtpStreamRecv.cpp +57 -71
- package/worker/src/RTC/RTP/RtpStreamSend.cpp +428 -244
- package/worker/src/RTC/RTP/RtxStream.cpp +14 -19
- package/worker/src/RTC/SCTP/association/Association.cpp +3 -2
- package/worker/src/RTC/SCTP/association/StateCookie.cpp +26 -6
- package/worker/src/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.cpp +4 -3
- package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +2 -1
- package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +4 -2
- package/worker/src/RTC/Transport.cpp +49 -20
- package/worker/src/RTC/TransportCongestionControlClient.cpp +0 -66
- package/worker/src/RTC/TransportCongestionControlServer.cpp +0 -55
- package/worker/src/Utils/Crypto.cpp +114 -98
- package/worker/subprojects/catch2.wrap +6 -6
- package/worker/subprojects/openssl.wrap +11 -12
- package/worker/subprojects/packagefiles/ankerl-unordered-dense/meson.build +1 -1
- package/worker/subprojects/unordered-dense.wrap +4 -4
- package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +5 -5
- package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +26 -23
- package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +8 -8
- package/worker/test/src/RTC/BWE/TestOveruseDetector.cpp +4 -4
- package/worker/test/src/RTC/BWE/TestProbeController.cpp +35 -32
- package/worker/test/src/RTC/BWE/TestProbePacketGenerator.cpp +2 -17
- package/worker/test/src/RTC/BWE/TestProbingScheduler.cpp +1 -25
- package/worker/test/src/RTC/BWE/TestReceiverTransportCongestionController.cpp +346 -0
- package/worker/test/src/RTC/BWE/TestRembGenerator.cpp +1 -1
- package/worker/test/src/RTC/BWE/TestRemoteBitrateEstimatorAbsSendTime.cpp +9 -9
- package/worker/test/src/RTC/BWE/TestSenderTransportCongestionController.cpp +510 -0
- package/worker/test/src/RTC/BWE/TestTransportWideCcFeedbackGenerator.cpp +16 -14
- package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +6 -6
- package/worker/test/src/RTC/BWE/helpers/RemoteBitrateEstimatorAbsSendTimeTestHelper.cpp +1 -2
- package/worker/test/src/RTC/RTCP/TestBye.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsAfb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsFir.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsLei.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsPli.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsRpsi.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsSli.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsTst.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsVbcm.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpEcn.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpNack.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpSrReq.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTllei.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestReceiverReport.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestSenderReport.cpp +1 -1
- package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +60 -28
- package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +1 -1
- package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +746 -24
- package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
- package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +42 -0
- package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +54 -5
- package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +80 -15
- package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +410 -3
- package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +1 -1
- package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +37 -5
- package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +5 -4
- package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +1 -1
- package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
- package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +1 -1
- package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +1 -1
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +11 -10
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +1 -1
- package/worker/test/src/RTC/TestNackGenerator.cpp +1 -1
- package/worker/test/src/RTC/TestPortManager.cpp +2 -2
- package/worker/test/src/RTC/TestRateCalculator.cpp +1 -1
- package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +21 -15
- package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +13 -13
- package/worker/test/src/RTC/TestRtpEncodingParameters.cpp +1 -1
- package/worker/test/src/RTC/TestSubchannelsCodec.cpp +2 -2
- package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +1 -1
- package/worker/test/src/RTC/TestTransportTuple.cpp +3 -2
- package/worker/test/src/Utils/TestCrypto.cpp +71 -2
- package/worker/test/src/Utils/TestTime.cpp +2 -2
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
SCENARIO("RTP SharedPacket", "[rtp][sharedpacket]")
|
|
8
8
|
{
|
|
9
|
-
auto compareRtpPackets = [](const RTC::RTP::Packet* packet1, const RTC::RTP::Packet* packet2)
|
|
9
|
+
const auto compareRtpPackets = [](const RTC::RTP::Packet* packet1, const RTC::RTP::Packet* packet2)
|
|
10
10
|
{
|
|
11
11
|
REQUIRE(packet1->GetSsrc() == packet2->GetSsrc());
|
|
12
12
|
REQUIRE(packet1->GetSequenceNumber() == packet2->GetSequenceNumber());
|
|
@@ -1263,6 +1263,48 @@ SCENARIO("SCTP Association", "[sctp][association]")
|
|
|
1263
1263
|
REQUIRE(parsePacket(buffer)->GetChecksum() == 0);
|
|
1264
1264
|
}
|
|
1265
1265
|
|
|
1266
|
+
SECTION("both sides send DATA with zero checksum with TRUSTED_NETWORK")
|
|
1267
|
+
{
|
|
1268
|
+
auto sctpOptions = makeSctpOptions();
|
|
1269
|
+
|
|
1270
|
+
sctpOptions.zeroChecksumAlternateErrorDetectionMethod =
|
|
1271
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::TRUSTED_NETWORK;
|
|
1272
|
+
|
|
1273
|
+
AssociationUnderTest a(sctpOptions);
|
|
1274
|
+
AssociationUnderTest z(sctpOptions);
|
|
1275
|
+
|
|
1276
|
+
connectAssociations(a, z);
|
|
1277
|
+
|
|
1278
|
+
const auto metricsA = a.association.MakeMetrics();
|
|
1279
|
+
const auto metricsZ = z.association.MakeMetrics();
|
|
1280
|
+
|
|
1281
|
+
REQUIRE(metricsA.has_value());
|
|
1282
|
+
REQUIRE(metricsZ.has_value());
|
|
1283
|
+
|
|
1284
|
+
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
1285
|
+
const auto& metricsAValue = metricsA.value();
|
|
1286
|
+
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
1287
|
+
const auto& metricsZValue = metricsZ.value();
|
|
1288
|
+
|
|
1289
|
+
REQUIRE(metricsAValue.usesZeroChecksum == true);
|
|
1290
|
+
// Z negotiated it from the State Cookie it generated.
|
|
1291
|
+
REQUIRE(metricsZValue.usesZeroChecksum == true);
|
|
1292
|
+
|
|
1293
|
+
sendMessage(a, 1, 53, std::vector<uint8_t>(a.sctpOptions.mtu - 100));
|
|
1294
|
+
|
|
1295
|
+
const auto bufferA = a.listener.ConsumeFirstSentPacket();
|
|
1296
|
+
|
|
1297
|
+
REQUIRE(packetHasDataChunk(bufferA) == true);
|
|
1298
|
+
REQUIRE(parsePacket(bufferA)->GetChecksum() == 0);
|
|
1299
|
+
|
|
1300
|
+
sendMessage(z, 1, 53, std::vector<uint8_t>(z.sctpOptions.mtu - 100));
|
|
1301
|
+
|
|
1302
|
+
const auto bufferZ = z.listener.ConsumeFirstSentPacket();
|
|
1303
|
+
|
|
1304
|
+
REQUIRE(packetHasDataChunk(bufferZ) == true);
|
|
1305
|
+
REQUIRE(parsePacket(bufferZ)->GetChecksum() == 0);
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1266
1308
|
SECTION("both sides send heartbeats")
|
|
1267
1309
|
{
|
|
1268
1310
|
// Make them have slightly different heartbeat intervals, to validate that
|
|
@@ -30,7 +30,7 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
|
|
|
30
30
|
remoteChunk->SetNumberOfOutboundStreams(4096);
|
|
31
31
|
remoteChunk->SetNumberOfInboundStreams(1024);
|
|
32
32
|
|
|
33
|
-
auto* remoteSupportedExtensionsParameter =
|
|
33
|
+
auto* const remoteSupportedExtensionsParameter =
|
|
34
34
|
remoteChunk->BuildParameterInPlace<RTC::SCTP::SupportedExtensionsParameter>();
|
|
35
35
|
|
|
36
36
|
remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::FORWARD_TSN);
|
|
@@ -39,7 +39,7 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
|
|
|
39
39
|
remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::I_FORWARD_TSN);
|
|
40
40
|
remoteSupportedExtensionsParameter->Consolidate();
|
|
41
41
|
|
|
42
|
-
auto* remoteZeroChecksumAcceptableParameter =
|
|
42
|
+
auto* const remoteZeroChecksumAcceptableParameter =
|
|
43
43
|
remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
|
|
44
44
|
|
|
45
45
|
remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
|
|
@@ -75,7 +75,7 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
|
|
|
75
75
|
remoteChunk->SetNumberOfOutboundStreams(4000);
|
|
76
76
|
remoteChunk->SetNumberOfInboundStreams(3000);
|
|
77
77
|
|
|
78
|
-
auto* remoteSupportedExtensionsParameter =
|
|
78
|
+
auto* const remoteSupportedExtensionsParameter =
|
|
79
79
|
remoteChunk->BuildParameterInPlace<RTC::SCTP::SupportedExtensionsParameter>();
|
|
80
80
|
|
|
81
81
|
// NOTE: Missing FORWARD-TSN, but peer announced support for it via
|
|
@@ -86,12 +86,12 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
|
|
|
86
86
|
remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA);
|
|
87
87
|
remoteSupportedExtensionsParameter->Consolidate();
|
|
88
88
|
|
|
89
|
-
auto* remoteForwardTsnSupportedParameter =
|
|
89
|
+
auto* const remoteForwardTsnSupportedParameter =
|
|
90
90
|
remoteChunk->BuildParameterInPlace<RTC::SCTP::ForwardTsnSupportedParameter>();
|
|
91
91
|
|
|
92
92
|
remoteForwardTsnSupportedParameter->Consolidate();
|
|
93
93
|
|
|
94
|
-
auto* remoteZeroChecksumAcceptableParameter =
|
|
94
|
+
auto* const remoteZeroChecksumAcceptableParameter =
|
|
95
95
|
remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
|
|
96
96
|
|
|
97
97
|
remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
|
|
@@ -110,4 +110,53 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
|
|
|
110
110
|
REQUIRE(negotiatedCapabilities.reConfig == false);
|
|
111
111
|
REQUIRE(negotiatedCapabilities.zeroChecksum == false);
|
|
112
112
|
}
|
|
113
|
+
|
|
114
|
+
SECTION("NegotiatedCapabilities::Factory() succeeds (3)")
|
|
115
|
+
{
|
|
116
|
+
RTC::SCTP::SctpOptions sctpOptions{};
|
|
117
|
+
|
|
118
|
+
sctpOptions.zeroChecksumAlternateErrorDetectionMethod =
|
|
119
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::TRUSTED_NETWORK;
|
|
120
|
+
|
|
121
|
+
const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
|
|
122
|
+
sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
|
|
123
|
+
|
|
124
|
+
auto* const remoteZeroChecksumAcceptableParameter =
|
|
125
|
+
remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
|
|
126
|
+
|
|
127
|
+
remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
|
|
128
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::TRUSTED_NETWORK);
|
|
129
|
+
remoteZeroChecksumAcceptableParameter->Consolidate();
|
|
130
|
+
|
|
131
|
+
const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
|
|
132
|
+
const auto negotiatedCapabilities =
|
|
133
|
+
RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteCapabilities);
|
|
134
|
+
|
|
135
|
+
REQUIRE(negotiatedCapabilities.zeroChecksum == true);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
SECTION("NegotiatedCapabilities::Factory() succeeds (4)")
|
|
139
|
+
{
|
|
140
|
+
RTC::SCTP::SctpOptions sctpOptions{};
|
|
141
|
+
|
|
142
|
+
sctpOptions.zeroChecksumAlternateErrorDetectionMethod =
|
|
143
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS;
|
|
144
|
+
|
|
145
|
+
const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
|
|
146
|
+
sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
|
|
147
|
+
|
|
148
|
+
// NOTE: Peer announces a different method than ours.
|
|
149
|
+
auto* const remoteZeroChecksumAcceptableParameter =
|
|
150
|
+
remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
|
|
151
|
+
|
|
152
|
+
remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
|
|
153
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::TRUSTED_NETWORK);
|
|
154
|
+
remoteZeroChecksumAcceptableParameter->Consolidate();
|
|
155
|
+
|
|
156
|
+
const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
|
|
157
|
+
const auto negotiatedCapabilities =
|
|
158
|
+
RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteCapabilities);
|
|
159
|
+
|
|
160
|
+
REQUIRE(negotiatedCapabilities.zeroChecksum == false);
|
|
161
|
+
}
|
|
113
162
|
}
|
|
@@ -38,7 +38,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
38
38
|
// - re-config: 1
|
|
39
39
|
// Magic 2: 0xAD81
|
|
40
40
|
0x00, 0b00000101, 0xAD, 0x81,
|
|
41
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
41
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
42
42
|
0x00, 0x00, 0x00, 0x01,
|
|
43
43
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
44
44
|
0x3A, 0x98, 0x09, 0xC4
|
|
@@ -50,7 +50,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
50
50
|
RTC::SCTP::StateCookie::DetermineSctpImplementation(buffer, sizeof(buffer)) ==
|
|
51
51
|
RTC::SCTP::Types::SctpImplementation::MEDIASOUP);
|
|
52
52
|
|
|
53
|
-
auto* stateCookie = RTC::SCTP::StateCookie::Parse(buffer, sizeof(buffer));
|
|
53
|
+
auto* const stateCookie = RTC::SCTP::StateCookie::Parse(buffer, sizeof(buffer));
|
|
54
54
|
|
|
55
55
|
REQUIRE(stateCookie);
|
|
56
56
|
REQUIRE(stateCookie->GetBuffer() == buffer);
|
|
@@ -118,7 +118,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
118
118
|
|
|
119
119
|
/* Clone it. */
|
|
120
120
|
|
|
121
|
-
auto* clonedStateCookie =
|
|
121
|
+
auto* const clonedStateCookie =
|
|
122
122
|
stateCookie->Clone(sctpCommon::CloneBuffer, sizeof(sctpCommon::CloneBuffer));
|
|
123
123
|
|
|
124
124
|
std::memset(sctpCommon::SerializeBuffer, 0x00, sizeof(sctpCommon::SerializeBuffer));
|
|
@@ -185,7 +185,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
185
185
|
// - re-config: 1
|
|
186
186
|
// Magic 2: 0xAD81
|
|
187
187
|
0x00, 0b00000101, 0xAD, 0x81,
|
|
188
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
188
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
189
189
|
0x00, 0x00, 0x00, 0x01,
|
|
190
190
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
191
191
|
0x3A, 0x98, 0x09, 0xC4
|
|
@@ -224,7 +224,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
224
224
|
// - re-config: 1
|
|
225
225
|
// Magic 2: 0xAD82 (instead of 0xAD81)
|
|
226
226
|
0x00, 0b00000101, 0xAD, 0x82,
|
|
227
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
227
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
228
228
|
0x00, 0x00, 0x00, 0x01,
|
|
229
229
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
230
230
|
0x3A, 0x98, 0x09, 0xC4
|
|
@@ -263,7 +263,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
263
263
|
// - re-config: 1
|
|
264
264
|
// Magic 2: 0xAD81
|
|
265
265
|
0x00, 0b00000101, 0xAD, 0x81,
|
|
266
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
266
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
267
267
|
0x00, 0x00, 0x00, 0x01,
|
|
268
268
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
269
269
|
0x3A, 0x98, 0x09, 0xC4,
|
|
@@ -304,7 +304,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
304
304
|
// Remote Capabilities
|
|
305
305
|
// Magic 2: 0xAD81
|
|
306
306
|
0x00, 0b00000101, 0xAD, 0x81,
|
|
307
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
307
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
308
308
|
0x00, 0x00, 0x00, 0x01,
|
|
309
309
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
310
310
|
0x3A, 0x98, 0x09, 0xC4
|
|
@@ -339,7 +339,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
339
339
|
// Remote Capabilities
|
|
340
340
|
// Magic 2: 0xAD81
|
|
341
341
|
0x00, 0b00000101, 0xAD, 0x81,
|
|
342
|
-
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (
|
|
342
|
+
// Zero Checksum Alternate Error Detection Method: SCTP_OVER_DTLS (0x00000001)
|
|
343
343
|
0x00, 0x00, 0x00, 0x01,
|
|
344
344
|
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
345
345
|
0x3A, 0x98, 0x09, 0xC4
|
|
@@ -362,7 +362,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
362
362
|
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::NONE
|
|
363
363
|
};
|
|
364
364
|
|
|
365
|
-
auto* stateCookie = RTC::SCTP::StateCookie::Factory(
|
|
365
|
+
auto* const stateCookie = RTC::SCTP::StateCookie::Factory(
|
|
366
366
|
/*buffer*/ sctpCommon::FactoryBuffer,
|
|
367
367
|
/*bufferLength*/ sizeof(sctpCommon::FactoryBuffer),
|
|
368
368
|
/*localVerificationTag*/ 6660666,
|
|
@@ -409,7 +409,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
409
409
|
|
|
410
410
|
/* Parse itself and compare. */
|
|
411
411
|
|
|
412
|
-
auto* parsedStateCookie =
|
|
412
|
+
auto* const parsedStateCookie =
|
|
413
413
|
RTC::SCTP::StateCookie::Parse(stateCookie->GetBuffer(), stateCookie->GetLength());
|
|
414
414
|
|
|
415
415
|
delete stateCookie;
|
|
@@ -458,7 +458,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
458
458
|
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::NONE
|
|
459
459
|
};
|
|
460
460
|
|
|
461
|
-
auto* buffer = sctpCommon::FactoryBuffer;
|
|
461
|
+
auto* const buffer = sctpCommon::FactoryBuffer;
|
|
462
462
|
|
|
463
463
|
RTC::SCTP::StateCookie::Write(
|
|
464
464
|
/*buffer*/ buffer,
|
|
@@ -478,7 +478,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
478
478
|
|
|
479
479
|
/* Parse the buffer. */
|
|
480
480
|
|
|
481
|
-
auto* stateCookie =
|
|
481
|
+
auto* const stateCookie =
|
|
482
482
|
RTC::SCTP::StateCookie::Parse(buffer, RTC::SCTP::StateCookie::StateCookieLength);
|
|
483
483
|
|
|
484
484
|
REQUIRE(stateCookie);
|
|
@@ -513,6 +513,71 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
513
513
|
delete stateCookie;
|
|
514
514
|
}
|
|
515
515
|
|
|
516
|
+
SECTION("StateCookie keeps known Zero Checksum Alternate Error Detection Methods only")
|
|
517
|
+
{
|
|
518
|
+
// clang-format off
|
|
519
|
+
alignas(4) uint8_t buffer[] =
|
|
520
|
+
{
|
|
521
|
+
// Magic 1: 0x6D73776F726B6572
|
|
522
|
+
0x6D, 0x73, 0x77, 0x6F,
|
|
523
|
+
0x72, 0x6B, 0x65, 0x72,
|
|
524
|
+
// Local Verification Tag: 11223344
|
|
525
|
+
0x00, 0xAB, 0x41, 0x30,
|
|
526
|
+
// Remote Verification Tag: 55667788
|
|
527
|
+
0x03, 0x51, 0x6C, 0x4C,
|
|
528
|
+
// Local Initial TSN: 12345678
|
|
529
|
+
0x00, 0xBC, 0x61, 0x4E,
|
|
530
|
+
// Remote Initial TSN: 87654321
|
|
531
|
+
0x05, 0x39, 0x7F, 0xB1,
|
|
532
|
+
// Remote Advertised Receiver Window Credit (a_rwnd): 66666666
|
|
533
|
+
0x03, 0xF9, 0x40, 0xAA,
|
|
534
|
+
// Tie-Tag: 0xABCDEF0011223344
|
|
535
|
+
0xAB, 0xCD, 0xEF, 0x00,
|
|
536
|
+
0x11, 0x22, 0x33, 0x44,
|
|
537
|
+
// Remote Capabilities
|
|
538
|
+
// - partialReliability: 1
|
|
539
|
+
// - messageInterleaving: 0
|
|
540
|
+
// - re-config: 1
|
|
541
|
+
// Magic 2: 0xAD81
|
|
542
|
+
0x00, 0b00000101, 0xAD, 0x81,
|
|
543
|
+
// Zero Checksum Alternate Error Detection Method: TRUSTED_NETWORK (0xFFFFFFFE)
|
|
544
|
+
0xFF, 0xFF, 0xFF, 0xFE,
|
|
545
|
+
// Max Outbound Streams: 15000, Max Inbound Streams: 2500
|
|
546
|
+
0x3A, 0x98, 0x09, 0xC4
|
|
547
|
+
};
|
|
548
|
+
// clang-format on
|
|
549
|
+
|
|
550
|
+
auto* stateCookie = RTC::SCTP::StateCookie::Parse(buffer, sizeof(buffer));
|
|
551
|
+
|
|
552
|
+
REQUIRE(stateCookie);
|
|
553
|
+
|
|
554
|
+
auto remoteCapabilities = stateCookie->GetRemoteCapabilities();
|
|
555
|
+
|
|
556
|
+
REQUIRE(
|
|
557
|
+
remoteCapabilities.zeroChecksumAlternateErrorDetectionMethod ==
|
|
558
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::TRUSTED_NETWORK);
|
|
559
|
+
|
|
560
|
+
delete stateCookie;
|
|
561
|
+
|
|
562
|
+
// Unknown Zero Checksum Alternate Error Detection Method (0x00000002).
|
|
563
|
+
buffer[40] = 0x00;
|
|
564
|
+
buffer[41] = 0x00;
|
|
565
|
+
buffer[42] = 0x00;
|
|
566
|
+
buffer[43] = 0x02;
|
|
567
|
+
|
|
568
|
+
stateCookie = RTC::SCTP::StateCookie::Parse(buffer, sizeof(buffer));
|
|
569
|
+
|
|
570
|
+
REQUIRE(stateCookie);
|
|
571
|
+
|
|
572
|
+
remoteCapabilities = stateCookie->GetRemoteCapabilities();
|
|
573
|
+
|
|
574
|
+
REQUIRE(
|
|
575
|
+
remoteCapabilities.zeroChecksumAlternateErrorDetectionMethod ==
|
|
576
|
+
RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::NONE);
|
|
577
|
+
|
|
578
|
+
delete stateCookie;
|
|
579
|
+
}
|
|
580
|
+
|
|
516
581
|
SECTION("StateCookie::DetermineSctpImplementation() succeeds")
|
|
517
582
|
{
|
|
518
583
|
// usrsctp generated State Cookie.
|
|
@@ -618,7 +683,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
618
683
|
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
|
|
619
684
|
const int64_t creationTimestampUs = 1234567890;
|
|
620
685
|
|
|
621
|
-
auto* buffer = sctpCommon::FactoryBuffer;
|
|
686
|
+
auto* const buffer = sctpCommon::FactoryBuffer;
|
|
622
687
|
|
|
623
688
|
RTC::SCTP::StateCookie::Write(
|
|
624
689
|
/*buffer*/ buffer,
|
|
@@ -642,7 +707,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
642
707
|
|
|
643
708
|
/* Parse it. */
|
|
644
709
|
|
|
645
|
-
auto* stateCookie =
|
|
710
|
+
auto* const stateCookie =
|
|
646
711
|
RTC::SCTP::StateCookie::Parse(buffer, RTC::SCTP::StateCookie::AuthenticatedStateCookieLength);
|
|
647
712
|
|
|
648
713
|
REQUIRE(stateCookie);
|
|
@@ -706,7 +771,7 @@ SCENARIO("SCTP State Cookie", "[sctp][statecookie]")
|
|
|
706
771
|
|
|
707
772
|
const uint8_t macKey[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
|
|
708
773
|
|
|
709
|
-
auto* buffer = sctpCommon::FactoryBuffer;
|
|
774
|
+
auto* const buffer = sctpCommon::FactoryBuffer;
|
|
710
775
|
|
|
711
776
|
// Write a plain (48 bytes) cookie.
|
|
712
777
|
RTC::SCTP::StateCookie::Write(
|