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.
Files changed (155) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/node/lib/PipeTransportTypes.d.ts +6 -1
  3. package/node/lib/PipeTransportTypes.d.ts.map +1 -1
  4. package/node/lib/PlainTransportTypes.d.ts +6 -1
  5. package/node/lib/PlainTransportTypes.d.ts.map +1 -1
  6. package/node/lib/Router.d.ts +4 -4
  7. package/node/lib/Router.d.ts.map +1 -1
  8. package/node/lib/Router.js +10 -7
  9. package/node/lib/RouterTypes.d.ts +7 -1
  10. package/node/lib/RouterTypes.d.ts.map +1 -1
  11. package/node/lib/Transport.d.ts +2 -1
  12. package/node/lib/Transport.d.ts.map +1 -1
  13. package/node/lib/Transport.js +17 -6
  14. package/node/lib/TransportTypes.d.ts +12 -2
  15. package/node/lib/TransportTypes.d.ts.map +1 -1
  16. package/node/lib/WebRtcTransportTypes.d.ts +6 -1
  17. package/node/lib/WebRtcTransportTypes.d.ts.map +1 -1
  18. package/node/lib/fbs/transport/options.d.ts +6 -2
  19. package/node/lib/fbs/transport/options.d.ts.map +1 -1
  20. package/node/lib/fbs/transport/options.js +19 -7
  21. package/node/lib/fbs/transport/sctp-zero-checksum.d.ts +6 -0
  22. package/node/lib/fbs/transport/sctp-zero-checksum.d.ts.map +1 -0
  23. package/node/lib/fbs/transport/sctp-zero-checksum.js +11 -0
  24. package/node/lib/fbs/transport/stats.d.ts +2 -8
  25. package/node/lib/fbs/transport/stats.d.ts.map +1 -1
  26. package/node/lib/fbs/transport/stats.js +5 -29
  27. package/node/lib/fbs/transport.d.ts +1 -0
  28. package/node/lib/fbs/transport.d.ts.map +1 -1
  29. package/node/lib/fbs/transport.js +4 -2
  30. package/npm-scripts.mjs +35 -44
  31. package/package.json +10 -6
  32. package/worker/fbs/transport.fbs +9 -2
  33. package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +14 -1
  34. package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +17 -4
  35. package/worker/include/RTC/BWE/AimdRateControl.hpp +9 -9
  36. package/worker/include/RTC/BWE/BweTypes.hpp +54 -17
  37. package/worker/include/RTC/BWE/DelayBasedBwe.hpp +3 -3
  38. package/worker/include/RTC/BWE/FeedbackAdapter.hpp +2 -2
  39. package/worker/include/RTC/BWE/LossBasedController.hpp +4 -4
  40. package/worker/include/RTC/BWE/OveruseDetector.hpp +5 -4
  41. package/worker/include/RTC/BWE/ProbeBitrateEstimator.hpp +1 -1
  42. package/worker/include/RTC/BWE/ProbeController.hpp +6 -6
  43. package/worker/include/RTC/BWE/ProbePacketGenerator.hpp +2 -6
  44. package/worker/include/RTC/BWE/ProbingScheduler.hpp +3 -7
  45. package/worker/include/RTC/BWE/ReceiverTransportCongestionController.hpp +148 -0
  46. package/worker/include/RTC/BWE/RembGenerator.hpp +4 -3
  47. package/worker/include/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.hpp +1 -1
  48. package/worker/include/RTC/BWE/SenderTransportCongestionController.hpp +343 -0
  49. package/worker/include/RTC/BWE/TargetRateController.hpp +4 -1
  50. package/worker/include/RTC/BWE/TransportWideCcFeedbackGenerator.hpp +5 -4
  51. package/worker/include/RTC/BWE/TrendlineEstimator.hpp +3 -3
  52. package/worker/include/RTC/Consumer.hpp +8 -1
  53. package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +36 -10
  54. package/worker/include/RTC/RTP/RtpStream.hpp +21 -0
  55. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +1 -0
  56. package/worker/include/RTC/RTP/RtpStreamSend.hpp +122 -9
  57. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +12 -3
  58. package/worker/include/RTC/TransportCongestionControlClient.hpp +0 -5
  59. package/worker/include/RTC/TransportCongestionControlServer.hpp +0 -5
  60. package/worker/include/Utils.hpp +9 -2
  61. package/worker/meson.build +4 -0
  62. package/worker/src/RTC/BWE/AimdRateControl.cpp +22 -22
  63. package/worker/src/RTC/BWE/DelayBasedBwe.cpp +16 -20
  64. package/worker/src/RTC/BWE/FeedbackAdapter.cpp +1 -1
  65. package/worker/src/RTC/BWE/OveruseDetector.cpp +8 -8
  66. package/worker/src/RTC/BWE/ProbeBitrateEstimator.cpp +2 -2
  67. package/worker/src/RTC/BWE/ProbeController.cpp +1 -1
  68. package/worker/src/RTC/BWE/ProbePacketGenerator.cpp +1 -6
  69. package/worker/src/RTC/BWE/ProbingScheduler.cpp +2 -7
  70. package/worker/src/RTC/BWE/ReceiverTransportCongestionController.cpp +207 -0
  71. package/worker/src/RTC/BWE/RembGenerator.cpp +1 -1
  72. package/worker/src/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.cpp +1 -1
  73. package/worker/src/RTC/BWE/SenderTransportCongestionController.cpp +599 -0
  74. package/worker/src/RTC/BWE/TransportWideCcFeedbackGenerator.cpp +2 -3
  75. package/worker/src/RTC/BWE/TrendlineEstimator.cpp +5 -5
  76. package/worker/src/RTC/Consumer.cpp +3 -2
  77. package/worker/src/RTC/DataConsumer.cpp +2 -2
  78. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +21 -8
  79. package/worker/src/RTC/RTP/RtpStream.cpp +0 -3
  80. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +57 -71
  81. package/worker/src/RTC/RTP/RtpStreamSend.cpp +428 -244
  82. package/worker/src/RTC/RTP/RtxStream.cpp +14 -19
  83. package/worker/src/RTC/SCTP/association/Association.cpp +3 -2
  84. package/worker/src/RTC/SCTP/association/StateCookie.cpp +26 -6
  85. package/worker/src/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.cpp +4 -3
  86. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +2 -1
  87. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +4 -2
  88. package/worker/src/RTC/Transport.cpp +49 -20
  89. package/worker/src/RTC/TransportCongestionControlClient.cpp +0 -66
  90. package/worker/src/RTC/TransportCongestionControlServer.cpp +0 -55
  91. package/worker/src/Utils/Crypto.cpp +114 -98
  92. package/worker/subprojects/catch2.wrap +6 -6
  93. package/worker/subprojects/openssl.wrap +11 -12
  94. package/worker/subprojects/packagefiles/ankerl-unordered-dense/meson.build +1 -1
  95. package/worker/subprojects/unordered-dense.wrap +4 -4
  96. package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +5 -5
  97. package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +26 -23
  98. package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +8 -8
  99. package/worker/test/src/RTC/BWE/TestOveruseDetector.cpp +4 -4
  100. package/worker/test/src/RTC/BWE/TestProbeController.cpp +35 -32
  101. package/worker/test/src/RTC/BWE/TestProbePacketGenerator.cpp +2 -17
  102. package/worker/test/src/RTC/BWE/TestProbingScheduler.cpp +1 -25
  103. package/worker/test/src/RTC/BWE/TestReceiverTransportCongestionController.cpp +346 -0
  104. package/worker/test/src/RTC/BWE/TestRembGenerator.cpp +1 -1
  105. package/worker/test/src/RTC/BWE/TestRemoteBitrateEstimatorAbsSendTime.cpp +9 -9
  106. package/worker/test/src/RTC/BWE/TestSenderTransportCongestionController.cpp +510 -0
  107. package/worker/test/src/RTC/BWE/TestTransportWideCcFeedbackGenerator.cpp +16 -14
  108. package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +6 -6
  109. package/worker/test/src/RTC/BWE/helpers/RemoteBitrateEstimatorAbsSendTimeTestHelper.cpp +1 -2
  110. package/worker/test/src/RTC/RTCP/TestBye.cpp +1 -1
  111. package/worker/test/src/RTC/RTCP/TestFeedbackPsAfb.cpp +1 -1
  112. package/worker/test/src/RTC/RTCP/TestFeedbackPsFir.cpp +1 -1
  113. package/worker/test/src/RTC/RTCP/TestFeedbackPsLei.cpp +1 -1
  114. package/worker/test/src/RTC/RTCP/TestFeedbackPsPli.cpp +1 -1
  115. package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
  116. package/worker/test/src/RTC/RTCP/TestFeedbackPsRpsi.cpp +1 -1
  117. package/worker/test/src/RTC/RTCP/TestFeedbackPsSli.cpp +1 -1
  118. package/worker/test/src/RTC/RTCP/TestFeedbackPsTst.cpp +1 -1
  119. package/worker/test/src/RTC/RTCP/TestFeedbackPsVbcm.cpp +1 -1
  120. package/worker/test/src/RTC/RTCP/TestFeedbackRtpEcn.cpp +1 -1
  121. package/worker/test/src/RTC/RTCP/TestFeedbackRtpNack.cpp +1 -1
  122. package/worker/test/src/RTC/RTCP/TestFeedbackRtpSrReq.cpp +1 -1
  123. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTllei.cpp +1 -1
  124. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
  125. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +1 -1
  126. package/worker/test/src/RTC/RTCP/TestReceiverReport.cpp +1 -1
  127. package/worker/test/src/RTC/RTCP/TestSenderReport.cpp +1 -1
  128. package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +60 -28
  129. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +1 -1
  130. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +746 -24
  131. package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
  132. package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +42 -0
  133. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +54 -5
  134. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +80 -15
  135. package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +410 -3
  136. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +1 -1
  137. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +37 -5
  138. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +5 -4
  139. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +1 -1
  140. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
  141. package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +1 -1
  142. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +1 -1
  143. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +11 -10
  144. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +1 -1
  145. package/worker/test/src/RTC/TestNackGenerator.cpp +1 -1
  146. package/worker/test/src/RTC/TestPortManager.cpp +2 -2
  147. package/worker/test/src/RTC/TestRateCalculator.cpp +1 -1
  148. package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +21 -15
  149. package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +13 -13
  150. package/worker/test/src/RTC/TestRtpEncodingParameters.cpp +1 -1
  151. package/worker/test/src/RTC/TestSubchannelsCodec.cpp +2 -2
  152. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +1 -1
  153. package/worker/test/src/RTC/TestTransportTuple.cpp +3 -2
  154. package/worker/test/src/Utils/TestCrypto.cpp +71 -2
  155. 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 (1)
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 (1)
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 (1)
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 (1)
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 (1)
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 (1)
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(