mediasoup 3.19.19 → 3.19.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +4 -4
  2. package/node/lib/Worker.d.ts +1 -1
  3. package/node/lib/Worker.d.ts.map +1 -1
  4. package/node/lib/Worker.js +8 -2
  5. package/node/lib/WorkerTypes.d.ts +8 -4
  6. package/node/lib/WorkerTypes.d.ts.map +1 -1
  7. package/node/lib/index.d.ts +1 -1
  8. package/node/lib/index.d.ts.map +1 -1
  9. package/node/lib/index.js +2 -1
  10. package/node/lib/sctpParametersTypes.d.ts +3 -13
  11. package/node/lib/sctpParametersTypes.d.ts.map +1 -1
  12. package/node/lib/test/test-PlainTransport.js +8 -3
  13. package/node/lib/test/test-WebRtcTransport.js +9 -4
  14. package/package.json +10 -10
  15. package/worker/Makefile +0 -4
  16. package/worker/fuzzer/src/fuzzer.cpp +6 -5
  17. package/worker/include/RTC/DataConsumer.hpp +4 -14
  18. package/worker/include/RTC/SCTP/TODO_SCTP.md +18 -10
  19. package/worker/include/RTC/SCTP/association/Association.hpp +39 -31
  20. package/worker/include/RTC/SCTP/association/{AssociationDeferredListener.hpp → AssociationListenerDeferrer.hpp} +10 -8
  21. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +77 -0
  22. package/worker/include/RTC/SCTP/association/NegotiatedCapabilities.hpp +2 -2
  23. package/worker/include/RTC/SCTP/association/PacketSender.hpp +2 -2
  24. package/worker/include/RTC/SCTP/association/StateCookie.hpp +2 -2
  25. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +272 -0
  26. package/worker/include/RTC/SCTP/association/TCBContext.hpp +67 -0
  27. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +81 -11
  28. package/worker/include/RTC/SCTP/common/UnwrappedSequenceNumber.hpp +274 -0
  29. package/worker/include/RTC/SCTP/packet/Chunk.hpp +0 -1
  30. package/worker/include/RTC/SCTP/packet/UserData.hpp +1 -0
  31. package/worker/include/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.hpp +14 -10
  32. package/worker/include/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.hpp +14 -10
  33. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +13 -2
  34. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +7 -1
  35. package/worker/include/RTC/SCTP/public/AssociationListener.hpp +11 -0
  36. package/worker/include/RTC/SCTP/public/Message.hpp +1 -0
  37. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +4 -4
  38. package/worker/include/RTC/SctpAssociation.hpp +2 -2
  39. package/worker/include/RTC/Transport.hpp +9 -13
  40. package/worker/include/Settings.hpp +2 -1
  41. package/worker/include/Utils.hpp +130 -6
  42. package/worker/meson.build +10 -39
  43. package/worker/meson_options.txt +0 -1
  44. package/worker/scripts/package-lock.json +6 -6
  45. package/worker/src/DepLibUring.cpp +1 -1
  46. package/worker/src/RTC/DataConsumer.cpp +5 -29
  47. package/worker/src/RTC/PipeTransport.cpp +15 -12
  48. package/worker/src/RTC/PlainTransport.cpp +15 -12
  49. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +5 -5
  50. package/worker/src/RTC/RTP/RtpStream.cpp +2 -2
  51. package/worker/src/RTC/RTP/RtxStream.cpp +1 -1
  52. package/worker/src/RTC/RateCalculator.cpp +5 -5
  53. package/worker/src/RTC/SCTP/association/Association.cpp +218 -148
  54. package/worker/src/RTC/SCTP/association/{AssociationDeferredListener.cpp → AssociationListenerDeferrer.cpp} +38 -30
  55. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +244 -0
  56. package/worker/src/RTC/SCTP/association/NegotiatedCapabilities.cpp +8 -6
  57. package/worker/src/RTC/SCTP/association/PacketSender.cpp +7 -2
  58. package/worker/src/RTC/SCTP/association/StateCookie.cpp +8 -8
  59. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +512 -0
  60. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +45 -39
  61. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +1 -1
  62. package/worker/src/RTC/SCTP/packet/errorCauses/UserInitiatedAbortErrorCause.cpp +1 -1
  63. package/worker/src/RTC/SCTP/packet/parameters/IncomingSsnResetRequestParameter.cpp +22 -5
  64. package/worker/src/RTC/SCTP/packet/parameters/OutgoingSsnResetRequestParameter.cpp +22 -5
  65. package/worker/src/RTC/SCTP/tx/RetransmissionErrorCounter.cpp +1 -1
  66. package/worker/src/RTC/SctpAssociation.cpp +1 -2
  67. package/worker/src/RTC/SeqManager.cpp +4 -4
  68. package/worker/src/RTC/Transport.cpp +247 -134
  69. package/worker/src/RTC/WebRtcTransport.cpp +9 -5
  70. package/worker/src/Settings.cpp +21 -1
  71. package/worker/src/Worker.cpp +13 -10
  72. package/worker/src/lib.cpp +11 -8
  73. package/worker/tasks.py +2 -35
  74. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +13 -12
  75. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +20 -20
  76. package/worker/test/src/RTC/SCTP/common/TestUnwrappedSequenceNumber.cpp +210 -0
  77. package/worker/test/src/RTC/SCTP/packet/chunks/TestAbortAssociationChunk.cpp +2 -2
  78. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatAckChunk.cpp +9 -4
  79. package/worker/test/src/RTC/SCTP/packet/chunks/TestHeartbeatRequestChunk.cpp +5 -0
  80. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitAckChunk.cpp +1 -1
  81. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +5 -5
  82. package/worker/test/src/RTC/SCTP/packet/chunks/TestReConfigChunk.cpp +19 -20
  83. package/worker/test/src/RTC/SCTP/packet/chunks/TestUnknownChunk.cpp +3 -0
  84. package/worker/test/src/RTC/SCTP/packet/errorCauses/TestUnknownErrorCause.cpp +3 -0
  85. package/worker/test/src/RTC/SCTP/packet/parameters/TestIncomingSsnResetRequestParameter.cpp +24 -27
  86. package/worker/test/src/RTC/SCTP/packet/parameters/TestOutgoingSsnResetRequestParameter.cpp +25 -30
  87. package/worker/test/src/RTC/SCTP/packet/parameters/TestStateCookieParameter.cpp +8 -6
  88. package/worker/test/src/RTC/SCTP/packet/parameters/TestSupportedExtensionsParameter.cpp +12 -0
  89. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +5 -8
  90. package/worker/test/src/Utils/TestNumber.cpp +119 -49
  91. package/worker/test/src/tests.cpp +11 -8
@@ -61,7 +61,7 @@ SCENARIO("SCTP Init Acknowledgement (2)", "[serializable][sctp][chunk]")
61
61
  REQUIRE(chunk->GetNumberOfInboundStreams() == 22136);
62
62
  REQUIRE(chunk->GetInitialTsn() == 2882339074);
63
63
 
64
- auto* parameter1 =
64
+ const auto* parameter1 =
65
65
  reinterpret_cast<const RTC::SCTP::IPv4AddressParameter*>(chunk->GetParameterAt(0));
66
66
 
67
67
  CHECK_SCTP_PARAMETER(
@@ -72,7 +72,7 @@ SCENARIO("SCTP Init Chunk (1)", "[serializable][sctp][chunk]")
72
72
  REQUIRE(chunk->GetNumberOfInboundStreams() == 22136);
73
73
  REQUIRE(chunk->GetInitialTsn() == 2882339074);
74
74
 
75
- auto* parameter1 =
75
+ const auto* parameter1 =
76
76
  reinterpret_cast<const RTC::SCTP::IPv4AddressParameter*>(chunk->GetParameterAt(0));
77
77
 
78
78
  CHECK_SCTP_PARAMETER(
@@ -89,7 +89,7 @@ SCENARIO("SCTP Init Chunk (1)", "[serializable][sctp][chunk]")
89
89
  REQUIRE(parameter1->GetIPv4Address()[2] == 0x04);
90
90
  REQUIRE(parameter1->GetIPv4Address()[3] == 0x05);
91
91
 
92
- auto* parameter2 =
92
+ const auto* parameter2 =
93
93
  reinterpret_cast<const RTC::SCTP::IPv6AddressParameter*>(chunk->GetParameterAt(1));
94
94
 
95
95
  CHECK_SCTP_PARAMETER(
@@ -107,7 +107,7 @@ SCENARIO("SCTP Init Chunk (1)", "[serializable][sctp][chunk]")
107
107
  REQUIRE(parameter2->GetIPv6Address()[3] == 0xB8);
108
108
  REQUIRE(parameter2->GetIPv6Address()[15] == 0x34);
109
109
 
110
- auto* parameter3 =
110
+ const auto* parameter3 =
111
111
  reinterpret_cast<const RTC::SCTP::CookiePreservativeParameter*>(chunk->GetParameterAt(2));
112
112
 
113
113
  CHECK_SCTP_PARAMETER(
@@ -517,7 +517,7 @@ SCENARIO("SCTP Init Chunk (1)", "[serializable][sctp][chunk]")
517
517
  /*canHaveErrorCauses*/ false,
518
518
  /*errorCausesCount*/ 0);
519
519
 
520
- auto* obtainedParameter1 =
520
+ const auto* obtainedParameter1 =
521
521
  reinterpret_cast<const RTC::SCTP::CookiePreservativeParameter*>(chunk->GetParameterAt(0));
522
522
 
523
523
  CHECK_SCTP_PARAMETER(
@@ -565,7 +565,7 @@ SCENARIO("SCTP Init Chunk (1)", "[serializable][sctp][chunk]")
565
565
  /*canHaveErrorCauses*/ false,
566
566
  /*errorCausesCount*/ 0);
567
567
 
568
- auto* obtainedParameter2 =
568
+ const auto* obtainedParameter2 =
569
569
  reinterpret_cast<const RTC::SCTP::SupportedAddressTypesParameter*>(chunk->GetParameterAt(1));
570
570
 
571
571
  CHECK_SCTP_PARAMETER(
@@ -9,6 +9,7 @@
9
9
  #include "RTC/SCTP/sctpCommon.hpp"
10
10
  #include <catch2/catch_test_macros.hpp>
11
11
  #include <cstring> // std::memset()
12
+ #include <vector>
12
13
 
13
14
  SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
14
15
  {
@@ -62,7 +63,7 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
62
63
  /*canHaveErrorCauses*/ false,
63
64
  /*errorCausesCount*/ 0);
64
65
 
65
- auto* parameter1 =
66
+ const auto* parameter1 =
66
67
  reinterpret_cast<const RTC::SCTP::OutgoingSsnResetRequestParameter*>(chunk->GetParameterAt(0));
67
68
 
68
69
  CHECK_SCTP_PARAMETER(
@@ -77,12 +78,14 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
77
78
  REQUIRE(parameter1->GetReconfigurationRequestSequenceNumber() == 0x11223344);
78
79
  REQUIRE(parameter1->GetReconfigurationResponseSequenceNumber() == 0x55667788);
79
80
  REQUIRE(parameter1->GetSenderLastAssignedTsn() == 0xAABBCCDD);
80
- REQUIRE(parameter1->GetNumberOfStreams() == 3);
81
- REQUIRE(parameter1->GetStreamAt(0) == 0x5001);
82
- REQUIRE(parameter1->GetStreamAt(1) == 0x5002);
83
- REQUIRE(parameter1->GetStreamAt(2) == 0x5003);
84
81
 
85
- auto* parameter2 =
82
+ const std::vector<uint16_t> expectedStreamIds1{
83
+ { 0x5001, 0x5002, 0x5003 },
84
+ };
85
+
86
+ REQUIRE(parameter1->GetStreamIds() == expectedStreamIds1);
87
+
88
+ const auto* parameter2 =
86
89
  reinterpret_cast<const RTC::SCTP::IncomingSsnResetRequestParameter*>(chunk->GetParameterAt(1));
87
90
 
88
91
  CHECK_SCTP_PARAMETER(
@@ -96,8 +99,12 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
96
99
  RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
97
100
 
98
101
  REQUIRE(parameter2->GetReconfigurationRequestSequenceNumber() == 0x44332211);
99
- REQUIRE(parameter2->GetNumberOfStreams() == 1);
100
- REQUIRE(parameter2->GetStreamAt(0) == 0x6001);
102
+
103
+ const std::vector<uint16_t> expectedStreamIds2{
104
+ 0x6001,
105
+ };
106
+
107
+ REQUIRE(parameter2->GetStreamIds() == expectedStreamIds2);
101
108
 
102
109
  /* Serialize it. */
103
110
 
@@ -134,10 +141,7 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
134
141
  REQUIRE(parameter1->GetReconfigurationRequestSequenceNumber() == 0x11223344);
135
142
  REQUIRE(parameter1->GetReconfigurationResponseSequenceNumber() == 0x55667788);
136
143
  REQUIRE(parameter1->GetSenderLastAssignedTsn() == 0xAABBCCDD);
137
- REQUIRE(parameter1->GetNumberOfStreams() == 3);
138
- REQUIRE(parameter1->GetStreamAt(0) == 0x5001);
139
- REQUIRE(parameter1->GetStreamAt(1) == 0x5002);
140
- REQUIRE(parameter1->GetStreamAt(2) == 0x5003);
144
+ REQUIRE(parameter1->GetStreamIds() == expectedStreamIds1);
141
145
 
142
146
  parameter2 =
143
147
  reinterpret_cast<const RTC::SCTP::IncomingSsnResetRequestParameter*>(chunk->GetParameterAt(1));
@@ -153,8 +157,7 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
153
157
  RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
154
158
 
155
159
  REQUIRE(parameter2->GetReconfigurationRequestSequenceNumber() == 0x44332211);
156
- REQUIRE(parameter2->GetNumberOfStreams() == 1);
157
- REQUIRE(parameter2->GetStreamAt(0) == 0x6001);
160
+ REQUIRE(parameter2->GetStreamIds() == expectedStreamIds2);
158
161
 
159
162
  /* Clone it. */
160
163
 
@@ -193,10 +196,7 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
193
196
  REQUIRE(parameter1->GetReconfigurationRequestSequenceNumber() == 0x11223344);
194
197
  REQUIRE(parameter1->GetReconfigurationResponseSequenceNumber() == 0x55667788);
195
198
  REQUIRE(parameter1->GetSenderLastAssignedTsn() == 0xAABBCCDD);
196
- REQUIRE(parameter1->GetNumberOfStreams() == 3);
197
- REQUIRE(parameter1->GetStreamAt(0) == 0x5001);
198
- REQUIRE(parameter1->GetStreamAt(1) == 0x5002);
199
- REQUIRE(parameter1->GetStreamAt(2) == 0x5003);
199
+ REQUIRE(parameter1->GetStreamIds() == expectedStreamIds1);
200
200
 
201
201
  parameter2 = reinterpret_cast<const RTC::SCTP::IncomingSsnResetRequestParameter*>(
202
202
  clonedChunk->GetParameterAt(1));
@@ -212,8 +212,7 @@ SCENARIO("SCTP Re-Config Chunk (130)", "[serializable][sctp][chunk]")
212
212
  RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
213
213
 
214
214
  REQUIRE(parameter2->GetReconfigurationRequestSequenceNumber() == 0x44332211);
215
- REQUIRE(parameter2->GetNumberOfStreams() == 1);
216
- REQUIRE(parameter2->GetStreamAt(0) == 0x6001);
215
+ REQUIRE(parameter2->GetStreamIds() == expectedStreamIds2);
217
216
 
218
217
  delete clonedChunk;
219
218
  }
@@ -33,6 +33,7 @@ SCENARIO("SCTP Unknown Chunk", "[serializable][sctp][chunk]")
33
33
  /*buffer*/ buffer,
34
34
  /*bufferLength*/ sizeof(buffer),
35
35
  /*length*/ 8,
36
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
36
37
  /*chunkType*/ static_cast<RTC::SCTP::Chunk::ChunkType>(0xEE),
37
38
  /*unknownType*/ true,
38
39
  /*actionForUnknownChunkType*/ RTC::SCTP::Chunk::ActionForUnknownChunkType::SKIP_AND_REPORT,
@@ -59,6 +60,7 @@ SCENARIO("SCTP Unknown Chunk", "[serializable][sctp][chunk]")
59
60
  /*buffer*/ sctpCommon::SerializeBuffer,
60
61
  /*bufferLength*/ sizeof(sctpCommon::SerializeBuffer),
61
62
  /*length*/ 8,
63
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
62
64
  /*chunkType*/ static_cast<RTC::SCTP::Chunk::ChunkType>(0xEE),
63
65
  /*unknownType*/ true,
64
66
  /*actionForUnknownChunkType*/ RTC::SCTP::Chunk::ActionForUnknownChunkType::SKIP_AND_REPORT,
@@ -87,6 +89,7 @@ SCENARIO("SCTP Unknown Chunk", "[serializable][sctp][chunk]")
87
89
  /*buffer*/ sctpCommon::CloneBuffer,
88
90
  /*bufferLength*/ sizeof(sctpCommon::CloneBuffer),
89
91
  /*length*/ 8,
92
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
90
93
  /*chunkType*/ static_cast<RTC::SCTP::Chunk::ChunkType>(0xEE),
91
94
  /*unknownType*/ true,
92
95
  /*actionForUnknownChunkType*/ RTC::SCTP::Chunk::ActionForUnknownChunkType::SKIP_AND_REPORT,
@@ -33,6 +33,7 @@ SCENARIO("Unknown Error Cause", "[serializable][sctp][errorcause]")
33
33
  /*buffer*/ buffer,
34
34
  /*bufferLength*/ sizeof(buffer),
35
35
  /*length*/ 12,
36
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
36
37
  /*causeCode*/ static_cast<RTC::SCTP::ErrorCause::ErrorCauseCode>(999),
37
38
  /*unknownCode*/ true);
38
39
 
@@ -60,6 +61,7 @@ SCENARIO("Unknown Error Cause", "[serializable][sctp][errorcause]")
60
61
  /*buffer*/ sctpCommon::SerializeBuffer,
61
62
  /*bufferLength*/ sizeof(sctpCommon::SerializeBuffer),
62
63
  /*length*/ 12,
64
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
63
65
  /*causeCode*/ static_cast<RTC::SCTP::ErrorCause::ErrorCauseCode>(999),
64
66
  /*unknownCode*/ true);
65
67
 
@@ -90,6 +92,7 @@ SCENARIO("Unknown Error Cause", "[serializable][sctp][errorcause]")
90
92
  /*buffer*/ sctpCommon::CloneBuffer,
91
93
  /*bufferLength*/ sizeof(sctpCommon::CloneBuffer),
92
94
  /*length*/ 12,
95
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
93
96
  /*causeCode*/ static_cast<RTC::SCTP::ErrorCause::ErrorCauseCode>(999),
94
97
  /*unknownCode*/ true);
95
98
 
@@ -5,6 +5,7 @@
5
5
  #include "RTC/SCTP/sctpCommon.hpp"
6
6
  #include <catch2/catch_test_macros.hpp>
7
7
  #include <cstring> // std::memset()
8
+ #include <vector>
8
9
 
9
10
  SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][parameter]")
10
11
  {
@@ -40,10 +41,12 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
40
41
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
41
42
 
42
43
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
43
- REQUIRE(parameter->GetNumberOfStreams() == 3);
44
- REQUIRE(parameter->GetStreamAt(0) == 0x5001);
45
- REQUIRE(parameter->GetStreamAt(1) == 0x5002);
46
- REQUIRE(parameter->GetStreamAt(2) == 0x5003);
44
+
45
+ const std::vector<uint16_t> expectedStreamIds{
46
+ { 0x5001, 0x5002, 0x5003 },
47
+ };
48
+
49
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
47
50
 
48
51
  /* Serialize it. */
49
52
 
@@ -61,10 +64,7 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
61
64
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
62
65
 
63
66
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
64
- REQUIRE(parameter->GetNumberOfStreams() == 3);
65
- REQUIRE(parameter->GetStreamAt(0) == 0x5001);
66
- REQUIRE(parameter->GetStreamAt(1) == 0x5002);
67
- REQUIRE(parameter->GetStreamAt(2) == 0x5003);
67
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
68
68
 
69
69
  /* Clone it. */
70
70
 
@@ -85,10 +85,7 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
85
85
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
86
86
 
87
87
  REQUIRE(clonedParameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
88
- REQUIRE(clonedParameter->GetNumberOfStreams() == 3);
89
- REQUIRE(clonedParameter->GetStreamAt(0) == 0x5001);
90
- REQUIRE(clonedParameter->GetStreamAt(1) == 0x5002);
91
- REQUIRE(clonedParameter->GetStreamAt(2) == 0x5003);
88
+ REQUIRE(clonedParameter->GetStreamIds() == expectedStreamIds);
92
89
 
93
90
  delete clonedParameter;
94
91
  }
@@ -108,15 +105,18 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
108
105
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
109
106
 
110
107
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0);
111
- REQUIRE(parameter->GetNumberOfStreams() == 0);
108
+
109
+ std::vector<uint16_t> expectedStreamIds{};
110
+
111
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
112
112
 
113
113
  /* Modify it. */
114
114
 
115
115
  parameter->SetReconfigurationRequestSequenceNumber(111000);
116
- parameter->AddStream(4444);
117
- parameter->AddStream(4445);
118
- parameter->AddStream(4446);
119
- parameter->AddStream(4447);
116
+ parameter->AddStreamId(4444);
117
+ parameter->AddStreamId(4445);
118
+ parameter->AddStreamId(4446);
119
+ parameter->AddStreamId(4447);
120
120
 
121
121
  CHECK_SCTP_PARAMETER(
122
122
  /*parameter*/ parameter,
@@ -128,11 +128,12 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
128
128
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
129
129
 
130
130
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 111000);
131
- REQUIRE(parameter->GetNumberOfStreams() == 4);
132
- REQUIRE(parameter->GetStreamAt(0) == 4444);
133
- REQUIRE(parameter->GetStreamAt(1) == 4445);
134
- REQUIRE(parameter->GetStreamAt(2) == 4446);
135
- REQUIRE(parameter->GetStreamAt(3) == 4447);
131
+
132
+ expectedStreamIds = {
133
+ { 4444, 4445, 4446, 4447 },
134
+ };
135
+
136
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
136
137
 
137
138
  /* Parse itself and compare. */
138
139
 
@@ -151,11 +152,7 @@ SCENARIO("Incoming SSN Reset Request Parameter (14)", "[serializable][sctp][para
151
152
  /*actionForUnknownParameterType*/ RTC::SCTP::Parameter::ActionForUnknownParameterType::STOP);
152
153
 
153
154
  REQUIRE(parsedParameter->GetReconfigurationRequestSequenceNumber() == 111000);
154
- REQUIRE(parsedParameter->GetNumberOfStreams() == 4);
155
- REQUIRE(parsedParameter->GetStreamAt(0) == 4444);
156
- REQUIRE(parsedParameter->GetStreamAt(1) == 4445);
157
- REQUIRE(parsedParameter->GetStreamAt(2) == 4446);
158
- REQUIRE(parsedParameter->GetStreamAt(3) == 4447);
155
+ REQUIRE(parsedParameter->GetStreamIds() == expectedStreamIds);
159
156
 
160
157
  delete parsedParameter;
161
158
  }
@@ -5,6 +5,7 @@
5
5
  #include "RTC/SCTP/sctpCommon.hpp"
6
6
  #include <catch2/catch_test_macros.hpp>
7
7
  #include <cstring> // std::memset()
8
+ #include <vector>
8
9
 
9
10
  SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][parameter]")
10
11
  {
@@ -46,10 +47,12 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
46
47
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
47
48
  REQUIRE(parameter->GetReconfigurationResponseSequenceNumber() == 0x55667788);
48
49
  REQUIRE(parameter->GetSenderLastAssignedTsn() == 0xAABBCCDD);
49
- REQUIRE(parameter->GetNumberOfStreams() == 3);
50
- REQUIRE(parameter->GetStreamAt(0) == 0x5001);
51
- REQUIRE(parameter->GetStreamAt(1) == 0x5002);
52
- REQUIRE(parameter->GetStreamAt(2) == 0x5003);
50
+
51
+ const std::vector<uint16_t> expectedStreamIds{
52
+ { 0x5001, 0x5002, 0x5003 },
53
+ };
54
+
55
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
53
56
 
54
57
  /* Serialize it. */
55
58
 
@@ -69,10 +72,7 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
69
72
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
70
73
  REQUIRE(parameter->GetReconfigurationResponseSequenceNumber() == 0x55667788);
71
74
  REQUIRE(parameter->GetSenderLastAssignedTsn() == 0xAABBCCDD);
72
- REQUIRE(parameter->GetNumberOfStreams() == 3);
73
- REQUIRE(parameter->GetStreamAt(0) == 0x5001);
74
- REQUIRE(parameter->GetStreamAt(1) == 0x5002);
75
- REQUIRE(parameter->GetStreamAt(2) == 0x5003);
75
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
76
76
 
77
77
  /* Clone it. */
78
78
 
@@ -95,10 +95,7 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
95
95
  REQUIRE(clonedParameter->GetReconfigurationRequestSequenceNumber() == 0x11223344);
96
96
  REQUIRE(clonedParameter->GetReconfigurationResponseSequenceNumber() == 0x55667788);
97
97
  REQUIRE(clonedParameter->GetSenderLastAssignedTsn() == 0xAABBCCDD);
98
- REQUIRE(clonedParameter->GetNumberOfStreams() == 3);
99
- REQUIRE(clonedParameter->GetStreamAt(0) == 0x5001);
100
- REQUIRE(clonedParameter->GetStreamAt(1) == 0x5002);
101
- REQUIRE(clonedParameter->GetStreamAt(2) == 0x5003);
98
+ REQUIRE(clonedParameter->GetStreamIds() == expectedStreamIds);
102
99
 
103
100
  delete clonedParameter;
104
101
  }
@@ -120,18 +117,21 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
120
117
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 0);
121
118
  REQUIRE(parameter->GetReconfigurationResponseSequenceNumber() == 0);
122
119
  REQUIRE(parameter->GetSenderLastAssignedTsn() == 0);
123
- REQUIRE(parameter->GetNumberOfStreams() == 0);
120
+
121
+ std::vector<uint16_t> expectedStreamIds{};
122
+
123
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
124
124
 
125
125
  /* Modify it. */
126
126
 
127
127
  parameter->SetReconfigurationRequestSequenceNumber(111000);
128
128
  parameter->SetReconfigurationResponseSequenceNumber(222000);
129
129
  parameter->SetSenderLastAssignedTsn(333000);
130
- parameter->AddStream(4444);
131
- parameter->AddStream(4445);
132
- parameter->AddStream(4446);
133
- parameter->AddStream(4447);
134
- parameter->AddStream(4448);
130
+ parameter->AddStreamId(4444);
131
+ parameter->AddStreamId(4445);
132
+ parameter->AddStreamId(4446);
133
+ parameter->AddStreamId(4447);
134
+ parameter->AddStreamId(4448);
135
135
 
136
136
  CHECK_SCTP_PARAMETER(
137
137
  /*parameter*/ parameter,
@@ -145,12 +145,12 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
145
145
  REQUIRE(parameter->GetReconfigurationRequestSequenceNumber() == 111000);
146
146
  REQUIRE(parameter->GetReconfigurationResponseSequenceNumber() == 222000);
147
147
  REQUIRE(parameter->GetSenderLastAssignedTsn() == 333000);
148
- REQUIRE(parameter->GetNumberOfStreams() == 5);
149
- REQUIRE(parameter->GetStreamAt(0) == 4444);
150
- REQUIRE(parameter->GetStreamAt(1) == 4445);
151
- REQUIRE(parameter->GetStreamAt(2) == 4446);
152
- REQUIRE(parameter->GetStreamAt(3) == 4447);
153
- REQUIRE(parameter->GetStreamAt(4) == 4448);
148
+
149
+ expectedStreamIds = {
150
+ { 4444, 4445, 4446, 4447, 4448 },
151
+ };
152
+
153
+ REQUIRE(parameter->GetStreamIds() == expectedStreamIds);
154
154
 
155
155
  /* Parse itself and compare. */
156
156
 
@@ -171,12 +171,7 @@ SCENARIO("Outgoing SSN Reset Request Parameter (13)", "[serializable][sctp][para
171
171
  REQUIRE(parsedParameter->GetReconfigurationRequestSequenceNumber() == 111000);
172
172
  REQUIRE(parsedParameter->GetReconfigurationResponseSequenceNumber() == 222000);
173
173
  REQUIRE(parsedParameter->GetSenderLastAssignedTsn() == 333000);
174
- REQUIRE(parsedParameter->GetNumberOfStreams() == 5);
175
- REQUIRE(parsedParameter->GetStreamAt(0) == 4444);
176
- REQUIRE(parsedParameter->GetStreamAt(1) == 4445);
177
- REQUIRE(parsedParameter->GetStreamAt(2) == 4446);
178
- REQUIRE(parsedParameter->GetStreamAt(3) == 4447);
179
- REQUIRE(parsedParameter->GetStreamAt(4) == 4448);
174
+ REQUIRE(parsedParameter->GetStreamIds() == expectedStreamIds);
180
175
 
181
176
  delete parsedParameter;
182
177
  }
@@ -183,12 +183,14 @@ SCENARIO("State Cookie Parameter (7)", "[serializable][sctp][parameter]")
183
183
  /* Modify it. */
184
184
 
185
185
  // Create a StateCookie.
186
- RTC::SCTP::NegotiatedCapabilities negotiatedCapabilities = { .maxOutboundStreams = 62000,
187
- .maxInboundStreams = 55555,
188
- .partialReliability = true,
189
- .messageInterleaving = true,
190
- .reConfig = true,
191
- .zeroChecksum = false };
186
+ const RTC::SCTP::NegotiatedCapabilities negotiatedCapabilities = {
187
+ .negotiatedMaxOutboundStreams = 62000,
188
+ .negotiatedMaxInboundStreams = 55555,
189
+ .partialReliability = true,
190
+ .messageInterleaving = true,
191
+ .reConfig = true,
192
+ .zeroChecksum = false
193
+ };
192
194
 
193
195
  // Build the StateCookie in place within the StateCookieParameter.
194
196
  parameter->WriteStateCookieInPlace(
@@ -40,9 +40,11 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
40
40
  REQUIRE(parameter->GetNumberOfChunkTypes() == 3);
41
41
  REQUIRE(parameter->GetChunkTypeAt(0) == RTC::SCTP::Chunk::ChunkType::RE_CONFIG);
42
42
  REQUIRE(parameter->GetChunkTypeAt(1) == RTC::SCTP::Chunk::ChunkType::ECNE);
43
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
43
44
  REQUIRE(parameter->GetChunkTypeAt(2) == static_cast<RTC::SCTP::Chunk::ChunkType>(0x42));
44
45
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == true);
45
46
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::ECNE) == true);
47
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
46
48
  REQUIRE(parameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(0x42)) == true);
47
49
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA) == false);
48
50
 
@@ -64,9 +66,11 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
64
66
  REQUIRE(parameter->GetNumberOfChunkTypes() == 3);
65
67
  REQUIRE(parameter->GetChunkTypeAt(0) == RTC::SCTP::Chunk::ChunkType::RE_CONFIG);
66
68
  REQUIRE(parameter->GetChunkTypeAt(1) == RTC::SCTP::Chunk::ChunkType::ECNE);
69
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
67
70
  REQUIRE(parameter->GetChunkTypeAt(2) == static_cast<RTC::SCTP::Chunk::ChunkType>(0x42));
68
71
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == true);
69
72
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::ECNE) == true);
73
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
70
74
  REQUIRE(parameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(0x42)) == true);
71
75
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA) == false);
72
76
 
@@ -91,10 +95,12 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
91
95
  REQUIRE(clonedParameter->GetNumberOfChunkTypes() == 3);
92
96
  REQUIRE(clonedParameter->GetChunkTypeAt(0) == RTC::SCTP::Chunk::ChunkType::RE_CONFIG);
93
97
  REQUIRE(clonedParameter->GetChunkTypeAt(1) == RTC::SCTP::Chunk::ChunkType::ECNE);
98
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
94
99
  REQUIRE(clonedParameter->GetChunkTypeAt(2) == static_cast<RTC::SCTP::Chunk::ChunkType>(0x42));
95
100
  REQUIRE(clonedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == true);
96
101
  REQUIRE(clonedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::ECNE) == true);
97
102
  REQUIRE(
103
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
98
104
  clonedParameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(0x42)) == true);
99
105
  REQUIRE(clonedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::I_DATA) == false);
100
106
 
@@ -118,6 +124,7 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
118
124
  REQUIRE(parameter->GetNumberOfChunkTypes() == 0);
119
125
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == false);
120
126
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::ECNE) == false);
127
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
121
128
  REQUIRE(parameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(0x42)) == false);
122
129
 
123
130
  /* Modify it. */
@@ -142,6 +149,7 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
142
149
 
143
150
  parameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::OPERATION_ERROR);
144
151
  parameter->AddChunkType(RTC::SCTP::Chunk::ChunkType::COOKIE_ACK);
152
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
145
153
  parameter->AddChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(99));
146
154
 
147
155
  CHECK_SCTP_PARAMETER(
@@ -158,11 +166,13 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
158
166
  REQUIRE(parameter->GetChunkTypeAt(1) == RTC::SCTP::Chunk::ChunkType::CWR);
159
167
  REQUIRE(parameter->GetChunkTypeAt(2) == RTC::SCTP::Chunk::ChunkType::OPERATION_ERROR);
160
168
  REQUIRE(parameter->GetChunkTypeAt(3) == RTC::SCTP::Chunk::ChunkType::COOKIE_ACK);
169
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
161
170
  REQUIRE(parameter->GetChunkTypeAt(4) == static_cast<RTC::SCTP::Chunk::ChunkType>(99));
162
171
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == true);
163
172
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::CWR) == true);
164
173
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::OPERATION_ERROR) == true);
165
174
  REQUIRE(parameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::COOKIE_ACK) == true);
175
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
166
176
  REQUIRE(parameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(99)) == true);
167
177
 
168
178
  /* Parse itself and compare. */
@@ -186,11 +196,13 @@ SCENARIO("Supported Extensions Parameter (32776)", "[serializable][sctp][paramet
186
196
  REQUIRE(parsedParameter->GetChunkTypeAt(1) == RTC::SCTP::Chunk::ChunkType::CWR);
187
197
  REQUIRE(parsedParameter->GetChunkTypeAt(2) == RTC::SCTP::Chunk::ChunkType::OPERATION_ERROR);
188
198
  REQUIRE(parsedParameter->GetChunkTypeAt(3) == RTC::SCTP::Chunk::ChunkType::COOKIE_ACK);
199
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
189
200
  REQUIRE(parsedParameter->GetChunkTypeAt(4) == static_cast<RTC::SCTP::Chunk::ChunkType>(99));
190
201
  REQUIRE(parsedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::RE_CONFIG) == true);
191
202
  REQUIRE(parsedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::CWR) == true);
192
203
  REQUIRE(parsedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::OPERATION_ERROR) == true);
193
204
  REQUIRE(parsedParameter->IncludesChunkType(RTC::SCTP::Chunk::ChunkType::COOKIE_ACK) == true);
205
+ // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
194
206
  REQUIRE(parsedParameter->IncludesChunkType(static_cast<RTC::SCTP::Chunk::ChunkType>(99)) == true);
195
207
 
196
208
  delete parsedParameter;
@@ -17,8 +17,8 @@ SCENARIO("Zero Checksum Acceptable Parameter (32769)", "[serializable][sctp][par
17
17
  {
18
18
  // Type:32769 (ZERO_CHECKSUM_ACCEPTABLE), Length: 8
19
19
  0x80, 0x01, 0x00, 0x08,
20
- // Alternate Error Detection Method (EDMID) : 666777888
21
- 0x27, 0xBE, 0x39, 0x20,
20
+ // Alternate Error Detection Method (EDMID) : 0x0001
21
+ 0x00, 0x00, 0x00, 0x01,
22
22
  // Extra bytes that should be ignored
23
23
  0xAA, 0xBB, 0xCC, 0xDD,
24
24
  0xAA, 0xBB, 0xCC
@@ -38,8 +38,7 @@ SCENARIO("Zero Checksum Acceptable Parameter (32769)", "[serializable][sctp][par
38
38
 
39
39
  REQUIRE(
40
40
  parameter->GetAlternateErrorDetectionMethod() ==
41
- static_cast<RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod>(
42
- 666777888));
41
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
43
42
 
44
43
  /* Serialize it. */
45
44
 
@@ -58,8 +57,7 @@ SCENARIO("Zero Checksum Acceptable Parameter (32769)", "[serializable][sctp][par
58
57
 
59
58
  REQUIRE(
60
59
  parameter->GetAlternateErrorDetectionMethod() ==
61
- static_cast<RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod>(
62
- 666777888));
60
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
63
61
 
64
62
  /* Clone it. */
65
63
 
@@ -81,8 +79,7 @@ SCENARIO("Zero Checksum Acceptable Parameter (32769)", "[serializable][sctp][par
81
79
 
82
80
  REQUIRE(
83
81
  clonedParameter->GetAlternateErrorDetectionMethod() ==
84
- static_cast<RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod>(
85
- 666777888));
82
+ RTC::SCTP::ZeroChecksumAcceptableParameter::AlternateErrorDetectionMethod::SCTP_OVER_DTLS);
86
83
 
87
84
  delete clonedParameter;
88
85
  }