mediasoup 3.21.0 → 3.21.2

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 (56) hide show
  1. package/CHANGELOG.md +1882 -0
  2. package/node/lib/test/test-Consumer.js +111 -0
  3. package/node/lib/test/test-Producer.js +54 -0
  4. package/npm-scripts.mjs +0 -5
  5. package/package.json +9 -8
  6. package/worker/fuzzer/src/RTC/SCTP/association/FuzzerStateCookie.cpp +4 -6
  7. package/worker/include/RTC/NEW_RTCP/packet/ByePacket.hpp +165 -0
  8. package/worker/include/RTC/NEW_RTCP/packet/CompoundPacket.hpp +183 -0
  9. package/worker/include/RTC/NEW_RTCP/packet/Packet.hpp +354 -0
  10. package/worker/include/RTC/NEW_RTCP/packet/TODO_NEW_RTCP.md +17 -0
  11. package/worker/include/RTC/RTP/Codecs/Tools.hpp +2 -0
  12. package/worker/include/RTC/Router.hpp +4 -4
  13. package/worker/include/RTC/SCTP/association/Capabilities.hpp +73 -0
  14. package/worker/include/RTC/SCTP/association/NegotiatedCapabilities.hpp +7 -9
  15. package/worker/include/RTC/SCTP/association/StateCookie.hpp +38 -28
  16. package/worker/include/RTC/SCTP/packet/Chunk.hpp +11 -7
  17. package/worker/include/RTC/SCTP/packet/ErrorCause.hpp +11 -4
  18. package/worker/include/RTC/SCTP/packet/Packet.hpp +1 -1
  19. package/worker/include/RTC/SCTP/packet/Parameter.hpp +11 -4
  20. package/worker/include/RTC/SCTP/packet/TLV.hpp +2 -2
  21. package/worker/include/RTC/SCTP/packet/parameters/StateCookieParameter.hpp +2 -2
  22. package/worker/include/RTC/Transport.hpp +10 -10
  23. package/worker/include/Worker.hpp +4 -4
  24. package/worker/meson.build +7 -0
  25. package/worker/scripts/clang-scripts.mjs +54 -0
  26. package/worker/src/RTC/Consumer.cpp +22 -4
  27. package/worker/src/RTC/NEW_RTCP/packet/ByePacket.cpp +266 -0
  28. package/worker/src/RTC/NEW_RTCP/packet/CompoundPacket.cpp +219 -0
  29. package/worker/src/RTC/NEW_RTCP/packet/Packet.cpp +222 -0
  30. package/worker/src/RTC/RTP/Codecs/H264.cpp +3 -0
  31. package/worker/src/RTC/RTP/Codecs/VP8.cpp +3 -0
  32. package/worker/src/RTC/Router.cpp +14 -14
  33. package/worker/src/RTC/SCTP/association/Association.cpp +23 -11
  34. package/worker/src/RTC/SCTP/association/Capabilities.cpp +87 -0
  35. package/worker/src/RTC/SCTP/association/NegotiatedCapabilities.cpp +20 -40
  36. package/worker/src/RTC/SCTP/association/StateCookie.cpp +54 -32
  37. package/worker/src/RTC/SCTP/packet/Chunk.cpp +18 -18
  38. package/worker/src/RTC/SCTP/packet/ErrorCause.cpp +18 -18
  39. package/worker/src/RTC/SCTP/packet/Packet.cpp +2 -0
  40. package/worker/src/RTC/SCTP/packet/Parameter.cpp +18 -18
  41. package/worker/src/RTC/SCTP/packet/TLV.cpp +27 -25
  42. package/worker/src/RTC/SCTP/packet/parameters/StateCookieParameter.cpp +2 -2
  43. package/worker/src/RTC/SvcProducerStreamManager.cpp +4 -1
  44. package/worker/src/RTC/Transport.cpp +42 -30
  45. package/worker/src/Worker.cpp +10 -10
  46. package/worker/test/include/RTC/ICE/iceCommon.hpp +1 -1
  47. package/worker/test/include/RTC/RTCP/rtcpCommon.hpp +58 -0
  48. package/worker/test/include/RTC/RTP/rtpCommon.hpp +1 -1
  49. package/worker/test/src/RTC/NEW_RTCP/packet/TestByePacket.cpp +302 -0
  50. package/worker/test/src/RTC/NEW_RTCP/rtcpCommon.cpp +29 -0
  51. package/worker/test/src/RTC/RTP/TestPacket.cpp +17 -15
  52. package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +3 -3
  53. package/worker/test/src/RTC/SCTP/association/TestCapabilities.cpp +99 -0
  54. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +14 -16
  55. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +198 -102
  56. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +11 -10
@@ -0,0 +1,29 @@
1
+ #include "test/include/RTC/RTCP/rtcpCommon.hpp" // in worker/test/include/
2
+ #include <cstring> // std::memset
3
+
4
+ namespace rtcpCommon
5
+ {
6
+ // NOTE: Buffers must be 4-byte aligned since RTP packet parsing casts them
7
+ // to structs (e.g. FixedHeader, HeaderExtension) that require 4-byte
8
+ // alignment. Without this, accessing multi-byte fields would be undefined
9
+ // behavior on strict-alignment architectures.
10
+ alignas(4) thread_local uint8_t FactoryBuffer[];
11
+ alignas(4) thread_local uint8_t SerializeBuffer[];
12
+ alignas(4) thread_local uint8_t CloneBuffer[];
13
+ alignas(4) thread_local uint8_t DataBuffer[];
14
+ alignas(4) thread_local uint8_t ThrowBuffer[];
15
+
16
+ void ResetBuffers()
17
+ {
18
+ std::memset(FactoryBuffer, 0xAA, sizeof(FactoryBuffer));
19
+ std::memset(SerializeBuffer, 0xBB, sizeof(SerializeBuffer));
20
+ std::memset(CloneBuffer, 0xCC, sizeof(CloneBuffer));
21
+ std::memset(DataBuffer, 0xDD, sizeof(DataBuffer));
22
+ std::memset(ThrowBuffer, 0xEE, sizeof(ThrowBuffer));
23
+
24
+ for (size_t i = 0; i < 256; ++i)
25
+ {
26
+ DataBuffer[i] = static_cast<uint8_t>(i);
27
+ }
28
+ }
29
+ } // namespace rtcpCommon
@@ -57,7 +57,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
57
57
 
58
58
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
59
59
 
60
- std::memset(buffer, 0x00, sizeof(buffer));
60
+ std::memset(buffer, 0xAA, sizeof(buffer));
61
61
 
62
62
  CHECK_RTP_PACKET(
63
63
  /*packet*/ packet.get(),
@@ -83,7 +83,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
83
83
 
84
84
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
85
85
 
86
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
86
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
87
87
 
88
88
  CHECK_RTP_PACKET(
89
89
  /*packet*/ packet.get(),
@@ -170,7 +170,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
170
170
 
171
171
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
172
172
 
173
- std::memset(buffer, 0x00, sizeof(buffer));
173
+ std::memset(buffer, 0xAA, sizeof(buffer));
174
174
 
175
175
  CHECK_RTP_PACKET(
176
176
  /*packet*/ packet.get(),
@@ -196,7 +196,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
196
196
 
197
197
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
198
198
 
199
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
199
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
200
200
 
201
201
  CHECK_RTP_PACKET(
202
202
  /*packet*/ packet.get(),
@@ -283,7 +283,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
283
283
 
284
284
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
285
285
 
286
- std::memset(buffer, 0x00, sizeof(buffer));
286
+ std::memset(buffer, 0xAA, sizeof(buffer));
287
287
 
288
288
  CHECK_RTP_PACKET(
289
289
  /*packet*/ packet.get(),
@@ -309,7 +309,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
309
309
 
310
310
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
311
311
 
312
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
312
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
313
313
 
314
314
  CHECK_RTP_PACKET(
315
315
  /*packet*/ packet.get(),
@@ -399,7 +399,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
399
399
 
400
400
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
401
401
 
402
- std::memset(buffer, 0x00, sizeof(buffer));
402
+ std::memset(buffer, 0xAA, sizeof(buffer));
403
403
 
404
404
  CHECK_RTP_PACKET(
405
405
  /*packet*/ packet.get(),
@@ -427,7 +427,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
427
427
 
428
428
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
429
429
 
430
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
430
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
431
431
 
432
432
  CHECK_RTP_PACKET(
433
433
  /*packet*/ packet.get(),
@@ -546,7 +546,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
546
546
 
547
547
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
548
548
 
549
- std::memset(buffer, 0x00, sizeof(buffer));
549
+ std::memset(buffer, 0xAA, sizeof(buffer));
550
550
 
551
551
  CHECK_RTP_PACKET(
552
552
  /*packet*/ packet.get(),
@@ -592,7 +592,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
592
592
 
593
593
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
594
594
 
595
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
595
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
596
596
 
597
597
  CHECK_RTP_PACKET(
598
598
  /*packet*/ packet.get(),
@@ -732,7 +732,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
732
732
 
733
733
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
734
734
 
735
- std::memset(buffer, 0x00, sizeof(buffer));
735
+ std::memset(buffer, 0xAA, sizeof(buffer));
736
736
 
737
737
  CHECK_RTP_PACKET(
738
738
  /*packet*/ packet.get(),
@@ -781,7 +781,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
781
781
 
782
782
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
783
783
 
784
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
784
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
785
785
 
786
786
  CHECK_RTP_PACKET(
787
787
  /*packet*/ packet.get(),
@@ -897,7 +897,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
897
897
 
898
898
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
899
899
 
900
- std::memset(buffer, 0x00, sizeof(buffer));
900
+ std::memset(buffer, 0xAA, sizeof(buffer));
901
901
 
902
902
  CHECK_RTP_PACKET(
903
903
  /*packet*/ packet.get(),
@@ -925,7 +925,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
925
925
 
926
926
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
927
927
 
928
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
928
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
929
929
 
930
930
  CHECK_RTP_PACKET(
931
931
  /*packet*/ packet.get(),
@@ -1161,6 +1161,8 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
1161
1161
 
1162
1162
  packet->Serialize(rtpCommon::SerializeBuffer, sizeof(rtpCommon::SerializeBuffer));
1163
1163
 
1164
+ std::memset(rtpCommon::FactoryBuffer, 0xAA, sizeof(rtpCommon::FactoryBuffer));
1165
+
1164
1166
  CHECK_RTP_PACKET(
1165
1167
  /*packet*/ packet.get(),
1166
1168
  /*buffer*/ rtpCommon::SerializeBuffer,
@@ -1207,7 +1209,7 @@ SCENARIO("RTP Packet", "[serializable][rtp][packet]")
1207
1209
 
1208
1210
  packet.reset(packet->Clone(rtpCommon::CloneBuffer, sizeof(rtpCommon::CloneBuffer)));
1209
1211
 
1210
- std::memset(rtpCommon::SerializeBuffer, 0x00, sizeof(rtpCommon::SerializeBuffer));
1212
+ std::memset(rtpCommon::SerializeBuffer, 0xAA, sizeof(rtpCommon::SerializeBuffer));
1211
1213
 
1212
1214
  CHECK_RTP_PACKET(
1213
1215
  /*packet*/ packet.get(),
@@ -1,6 +1,6 @@
1
1
  #include "common.hpp"
2
2
  #include "RTC/SCTP/association/Association.hpp"
3
- #include "RTC/SCTP/association/NegotiatedCapabilities.hpp"
3
+ #include "RTC/SCTP/association/Capabilities.hpp"
4
4
  #include "RTC/SCTP/association/StateCookie.hpp"
5
5
  #include "RTC/SCTP/packet/ErrorCause.hpp"
6
6
  #include "RTC/SCTP/packet/Packet.hpp"
@@ -1774,7 +1774,7 @@ SCENARIO("SCTP Association", "[sctp][association]")
1774
1774
  // Forge a plain (unauthenticated) State Cookie with attacker-chosen values,
1775
1775
  // as in the published PoC. It passes the magic checks but carries no MAC.
1776
1776
  const uint32_t forgedTag = 0xDEADBEEF;
1777
- const RTC::SCTP::NegotiatedCapabilities negotiatedCapabilities;
1777
+ const RTC::SCTP::Capabilities remoteCapabilities;
1778
1778
 
1779
1779
  std::vector<uint8_t> cookieBuffer(RTC::SCTP::StateCookie::StateCookieLength);
1780
1780
 
@@ -1787,7 +1787,7 @@ SCENARIO("SCTP Association", "[sctp][association]")
1787
1787
  /*remoteInitialTsn*/ 2000,
1788
1788
  /*remoteAdvertisedReceiverWindowCredit*/ 65535,
1789
1789
  /*tieTag*/ 0,
1790
- negotiatedCapabilities);
1790
+ remoteCapabilities);
1791
1791
 
1792
1792
  // Builds a COOKIE-ECHO packet carrying the forged cookie. `buffers` must
1793
1793
  // outlive the returned packet.
@@ -0,0 +1,99 @@
1
+ #include "common.hpp"
2
+ #include "RTC/SCTP/association/Capabilities.hpp"
3
+ #include "RTC/SCTP/packet/Chunk.hpp"
4
+ #include "RTC/SCTP/packet/chunks/InitChunk.hpp"
5
+ #include "RTC/SCTP/packet/parameters/ForwardTsnSupportedParameter.hpp"
6
+ #include "RTC/SCTP/packet/parameters/SupportedExtensionsParameter.hpp"
7
+ #include "RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp"
8
+ #include "test/include/RTC/SCTP/sctpCommon.hpp"
9
+ #include <catch2/catch_test_macros.hpp>
10
+
11
+ SCENARIO("SCTP Capabilities", "[sctp][capabilities]")
12
+ {
13
+ sctpCommon::ResetBuffers();
14
+
15
+ SECTION("Capabilities::Factory() succeeds (1)")
16
+ {
17
+ const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
18
+ sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
19
+
20
+ remoteChunk->SetNumberOfOutboundStreams(4096);
21
+ remoteChunk->SetNumberOfInboundStreams(1024);
22
+
23
+ auto* remoteSupportedExtensionsParameter =
24
+ remoteChunk->BuildParameterInPlace<RTC::SCTP::SupportedExtensionsParameter>();
25
+
26
+ remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::FORWARD_TSN);
27
+ remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG);
28
+ remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA);
29
+ remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::I_FORWARD_TSN);
30
+ remoteSupportedExtensionsParameter->Consolidate();
31
+
32
+ auto* remoteZeroChecksumAcceptableParameter =
33
+ remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
34
+
35
+ remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
36
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
37
+ remoteZeroChecksumAcceptableParameter->Consolidate();
38
+
39
+ const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
40
+
41
+ // Raw remote-announced values (no local option is applied).
42
+ REQUIRE(remoteCapabilities.maxOutboundStreams == 4096);
43
+ REQUIRE(remoteCapabilities.maxInboundStreams == 1024);
44
+ REQUIRE(remoteCapabilities.partialReliability == true);
45
+ REQUIRE(remoteCapabilities.messageInterleaving == true);
46
+ REQUIRE(remoteCapabilities.reConfig == true);
47
+ REQUIRE(
48
+ remoteCapabilities.zeroChecksumAlternateErrorDetectionMethod ==
49
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
50
+ }
51
+
52
+ SECTION("Capabilities::Factory() succeeds (2)")
53
+ {
54
+ const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
55
+ sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
56
+
57
+ remoteChunk->SetNumberOfOutboundStreams(4000);
58
+ remoteChunk->SetNumberOfInboundStreams(3000);
59
+
60
+ auto* remoteSupportedExtensionsParameter =
61
+ remoteChunk->BuildParameterInPlace<RTC::SCTP::SupportedExtensionsParameter>();
62
+
63
+ // NOTE: Missing FORWARD-TSN, but remote announces support for it via
64
+ // Forward-TSN-Supported parameter.
65
+ // NOTE: Missing RE-CONFIG (needed for Stream Re-Configuration).
66
+ // NOTE: Missing I-FORWARD-TSN (needed for Message Interleaving).
67
+ remoteSupportedExtensionsParameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA);
68
+ remoteSupportedExtensionsParameter->Consolidate();
69
+
70
+ auto* remoteForwardTsnSupportedParameter =
71
+ remoteChunk->BuildParameterInPlace<RTC::SCTP::ForwardTsnSupportedParameter>();
72
+
73
+ remoteForwardTsnSupportedParameter->Consolidate();
74
+
75
+ auto* remoteZeroChecksumAcceptableParameter =
76
+ remoteChunk->BuildParameterInPlace<RTC::SCTP::ZeroChecksumAcceptableParameter>();
77
+
78
+ remoteZeroChecksumAcceptableParameter->SetAlternateErrorDetectionMethod(
79
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
80
+ static_cast<RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod>(666));
81
+ remoteZeroChecksumAcceptableParameter->Consolidate();
82
+
83
+ const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
84
+
85
+ // Raw remote-announced values (no local option is applied).
86
+ REQUIRE(remoteCapabilities.maxOutboundStreams == 4000);
87
+ REQUIRE(remoteCapabilities.maxInboundStreams == 3000);
88
+ // Announced via Forward-TSN-Supported parameter.
89
+ REQUIRE(remoteCapabilities.partialReliability == true);
90
+ // Not announced (missing I-FORWARD-TSN).
91
+ REQUIRE(remoteCapabilities.messageInterleaving == false);
92
+ // Not announced (missing RE-CONFIG).
93
+ REQUIRE(remoteCapabilities.reConfig == false);
94
+ // Unknown/invalid method is parsed as NONE.
95
+ REQUIRE(
96
+ remoteCapabilities.zeroChecksumAlternateErrorDetectionMethod ==
97
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::NONE);
98
+ }
99
+ }
@@ -24,8 +24,8 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
24
24
  sctpOptions.zeroChecksumAlternateErrorDetectionMethod =
25
25
  RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS;
26
26
 
27
- auto* remoteChunk =
28
- RTC::SCTP::InitChunk::Factory(sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer));
27
+ const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
28
+ sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
29
29
 
30
30
  remoteChunk->SetNumberOfOutboundStreams(4096);
31
31
  remoteChunk->SetNumberOfInboundStreams(1024);
@@ -46,13 +46,12 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
46
46
  RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
47
47
  remoteZeroChecksumAcceptableParameter->Consolidate();
48
48
 
49
- auto negotiatedCapabilities =
50
- RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteChunk);
49
+ const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
50
+ const auto negotiatedCapabilities =
51
+ RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteCapabilities);
51
52
 
52
- delete remoteChunk;
53
-
54
- REQUIRE(negotiatedCapabilities.negotiatedMaxOutboundStreams == 1024);
55
- REQUIRE(negotiatedCapabilities.negotiatedMaxInboundStreams == 2048);
53
+ REQUIRE(negotiatedCapabilities.maxOutboundStreams == 1024);
54
+ REQUIRE(negotiatedCapabilities.maxInboundStreams == 2048);
56
55
  REQUIRE(negotiatedCapabilities.partialReliability == true);
57
56
  REQUIRE(negotiatedCapabilities.messageInterleaving == true);
58
57
  REQUIRE(negotiatedCapabilities.reConfig == true);
@@ -70,8 +69,8 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
70
69
  sctpOptions.zeroChecksumAlternateErrorDetectionMethod =
71
70
  RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS;
72
71
 
73
- auto* remoteChunk =
74
- RTC::SCTP::InitChunk::Factory(sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer));
72
+ const std::unique_ptr<RTC::SCTP::InitChunk> remoteChunk{ RTC::SCTP::InitChunk::Factory(
73
+ sctpCommon::FactoryBuffer, sizeof(sctpCommon::FactoryBuffer)) };
75
74
 
76
75
  remoteChunk->SetNumberOfOutboundStreams(4000);
77
76
  remoteChunk->SetNumberOfInboundStreams(3000);
@@ -100,13 +99,12 @@ SCENARIO("SCTP Negotiated Capabilities", "[sctp][negotiatedcapabilities]")
100
99
  static_cast<RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod>(666));
101
100
  remoteZeroChecksumAcceptableParameter->Consolidate();
102
101
 
103
- auto negotiatedCapabilities =
104
- RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteChunk);
105
-
106
- delete remoteChunk;
102
+ const auto remoteCapabilities = RTC::SCTP::Capabilities::Factory(remoteChunk.get());
103
+ const auto negotiatedCapabilities =
104
+ RTC::SCTP::NegotiatedCapabilities::Factory(sctpOptions, remoteCapabilities);
107
105
 
108
- REQUIRE(negotiatedCapabilities.negotiatedMaxOutboundStreams == 1000);
109
- REQUIRE(negotiatedCapabilities.negotiatedMaxInboundStreams == 2000);
106
+ REQUIRE(negotiatedCapabilities.maxOutboundStreams == 1000);
107
+ REQUIRE(negotiatedCapabilities.maxInboundStreams == 2000);
110
108
  REQUIRE(negotiatedCapabilities.partialReliability == true);
111
109
  REQUIRE(negotiatedCapabilities.messageInterleaving == false);
112
110
  REQUIRE(negotiatedCapabilities.reConfig == false);