summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/net/dcsctp/socket
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /third_party/libwebrtc/net/dcsctp/socket
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/net/dcsctp/socket')
-rw-r--r--third_party/libwebrtc/net/dcsctp/socket/capabilities.h2
-rw-r--r--third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc25
-rw-r--r--third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc36
-rw-r--r--third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc3
4 files changed, 49 insertions, 17 deletions
diff --git a/third_party/libwebrtc/net/dcsctp/socket/capabilities.h b/third_party/libwebrtc/net/dcsctp/socket/capabilities.h
index 286509a40a..9b1bff0a90 100644
--- a/third_party/libwebrtc/net/dcsctp/socket/capabilities.h
+++ b/third_party/libwebrtc/net/dcsctp/socket/capabilities.h
@@ -21,7 +21,7 @@ struct Capabilities {
bool message_interleaving = false;
// RFC6525 Stream Reconfiguration
bool reconfig = false;
- // https://datatracker.ietf.org/doc/draft-tuexen-tsvwg-sctp-zero-checksum/
+ // https://datatracker.ietf.org/doc/draft-ietf-tsvwg-sctp-zero-checksum/
bool zero_checksum = false;
// Negotiated maximum incoming and outgoing stream count.
uint16_t negotiated_maximum_incoming_streams = 0;
diff --git a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc
index 98cd34a111..0667e6f899 100644
--- a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc
+++ b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket.cc
@@ -22,7 +22,6 @@
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "api/array_view.h"
-#include "api/task_queue/task_queue_base.h"
#include "net/dcsctp/packet/chunk/abort_chunk.h"
#include "net/dcsctp/packet/chunk/chunk.h"
#include "net/dcsctp/packet/chunk/cookie_ack_chunk.h"
@@ -120,8 +119,12 @@ Capabilities ComputeCapabilities(const DcSctpOptions& options,
capabilities.reconfig = true;
}
- if (options.enable_zero_checksum &&
- parameters.get<ZeroChecksumAcceptableChunkParameter>().has_value()) {
+ if (options.zero_checksum_alternate_error_detection_method !=
+ ZeroChecksumAlternateErrorDetectionMethod::None() &&
+ parameters.get<ZeroChecksumAcceptableChunkParameter>().has_value() &&
+ parameters.get<ZeroChecksumAcceptableChunkParameter>()
+ ->error_detection_method() ==
+ options.zero_checksum_alternate_error_detection_method) {
capabilities.zero_checksum = true;
}
@@ -134,6 +137,7 @@ Capabilities ComputeCapabilities(const DcSctpOptions& options,
}
void AddCapabilityParameters(const DcSctpOptions& options,
+ bool support_zero_checksum,
Parameters::Builder& builder) {
std::vector<uint8_t> chunk_types = {ReConfigChunk::kType};
@@ -145,8 +149,11 @@ void AddCapabilityParameters(const DcSctpOptions& options,
chunk_types.push_back(IDataChunk::kType);
chunk_types.push_back(IForwardTsnChunk::kType);
}
- if (options.enable_zero_checksum) {
- builder.Add(ZeroChecksumAcceptableChunkParameter());
+ if (support_zero_checksum) {
+ RTC_DCHECK(options.zero_checksum_alternate_error_detection_method !=
+ ZeroChecksumAlternateErrorDetectionMethod::None());
+ builder.Add(ZeroChecksumAcceptableChunkParameter(
+ options.zero_checksum_alternate_error_detection_method));
}
builder.Add(SupportedExtensionsParameter(std::move(chunk_types)));
}
@@ -282,7 +289,11 @@ void DcSctpSocket::SetState(State state, absl::string_view reason) {
void DcSctpSocket::SendInit() {
Parameters::Builder params_builder;
- AddCapabilityParameters(options_, params_builder);
+ AddCapabilityParameters(
+ options_, /*support_zero_checksum=*/
+ options_.zero_checksum_alternate_error_detection_method !=
+ ZeroChecksumAlternateErrorDetectionMethod::None(),
+ params_builder);
InitChunk init(/*initiate_tag=*/connect_params_.verification_tag,
/*a_rwnd=*/options_.max_receiver_window_buffer_size,
options_.announced_maximum_outgoing_streams,
@@ -1227,7 +1238,7 @@ void DcSctpSocket::HandleInit(const CommonHeader& header,
chunk->initial_tsn(), my_initial_tsn, chunk->a_rwnd(),
tie_tag, capabilities)
.Serialize()));
- AddCapabilityParameters(options_, params_builder);
+ AddCapabilityParameters(options_, capabilities.zero_checksum, params_builder);
InitAckChunk init_ack(/*initiate_tag=*/my_verification_tag,
options_.max_receiver_window_buffer_size,
diff --git a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc
index 413516bae0..dfe8ba60fe 100644
--- a/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc
+++ b/third_party/libwebrtc/net/dcsctp/socket/dcsctp_socket_test.cc
@@ -2887,8 +2887,16 @@ TEST_P(DcSctpSocketParametrizedTest, ZeroChecksumMetricsAreSet) {
std::vector<std::pair<bool, bool>> combinations = {
{false, false}, {false, true}, {true, false}, {true, true}};
for (const auto& [a_enable, z_enable] : combinations) {
- DcSctpOptions a_options = {.enable_zero_checksum = a_enable};
- DcSctpOptions z_options = {.enable_zero_checksum = z_enable};
+ DcSctpOptions a_options = {
+ .zero_checksum_alternate_error_detection_method =
+ a_enable
+ ? ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()
+ : ZeroChecksumAlternateErrorDetectionMethod::None()};
+ DcSctpOptions z_options = {
+ .zero_checksum_alternate_error_detection_method =
+ z_enable
+ ? ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()
+ : ZeroChecksumAlternateErrorDetectionMethod::None()};
SocketUnderTest a("A", a_options);
auto z = std::make_unique<SocketUnderTest>("Z", z_options);
@@ -2902,7 +2910,9 @@ TEST_P(DcSctpSocketParametrizedTest, ZeroChecksumMetricsAreSet) {
}
TEST(DcSctpSocketTest, AlwaysSendsInitWithNonZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
a.socket.Connect();
@@ -2916,7 +2926,9 @@ TEST(DcSctpSocketTest, AlwaysSendsInitWithNonZeroChecksum) {
}
TEST(DcSctpSocketTest, MaySendInitAckWithZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
SocketUnderTest z("Z", options);
@@ -2933,7 +2945,9 @@ TEST(DcSctpSocketTest, MaySendInitAckWithZeroChecksum) {
}
TEST(DcSctpSocketTest, AlwaysSendsCookieEchoWithNonZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
SocketUnderTest z("Z", options);
@@ -2951,7 +2965,9 @@ TEST(DcSctpSocketTest, AlwaysSendsCookieEchoWithNonZeroChecksum) {
}
TEST(DcSctpSocketTest, SendsCookieAckWithZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
SocketUnderTest z("Z", options);
@@ -2970,7 +2986,9 @@ TEST(DcSctpSocketTest, SendsCookieAckWithZeroChecksum) {
}
TEST_P(DcSctpSocketParametrizedTest, SendsDataWithZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
auto z = std::make_unique<SocketUnderTest>("Z", options);
@@ -2993,7 +3011,9 @@ TEST_P(DcSctpSocketParametrizedTest, SendsDataWithZeroChecksum) {
}
TEST_P(DcSctpSocketParametrizedTest, AllPacketsAfterConnectHaveZeroChecksum) {
- DcSctpOptions options = {.enable_zero_checksum = true};
+ DcSctpOptions options = {
+ .zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls()};
SocketUnderTest a("A", options);
auto z = std::make_unique<SocketUnderTest>("Z", options);
diff --git a/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc b/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc
index 4475527322..b7f3a60d39 100644
--- a/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc
+++ b/third_party/libwebrtc/net/dcsctp/socket/heartbeat_handler_test.cc
@@ -38,7 +38,8 @@ DcSctpOptions MakeOptions(DurationMs heartbeat_interval) {
DcSctpOptions options;
options.heartbeat_interval_include_rtt = false;
options.heartbeat_interval = heartbeat_interval;
- options.enable_zero_checksum = false;
+ options.zero_checksum_alternate_error_detection_method =
+ ZeroChecksumAlternateErrorDetectionMethod::None();
return options;
}