summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/net/dcsctp/packet/parameter
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/packet/parameter
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/packet/parameter')
-rw-r--r--third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.cc28
-rw-r--r--third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.h16
-rw-r--r--third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter_test.cc19
3 files changed, 48 insertions, 15 deletions
diff --git a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.cc b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.cc
index 75f7d3c487..a846d6dff3 100644
--- a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.cc
+++ b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.cc
@@ -15,32 +15,44 @@
#include "absl/types/optional.h"
#include "api/array_view.h"
+#include "rtc_base/strings/string_builder.h"
namespace dcsctp {
// https://www.ietf.org/archive/id/draft-tuexen-tsvwg-sctp-zero-checksum-00.html#section-3
-// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-// | Type = 0x8001 | Length = 4 |
-// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Type = 0x8001 (suggested) | Length = 8 |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | Error Detection Method Identifier (EDMID) |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
constexpr int ZeroChecksumAcceptableChunkParameter::kType;
absl::optional<ZeroChecksumAcceptableChunkParameter>
ZeroChecksumAcceptableChunkParameter::Parse(
rtc::ArrayView<const uint8_t> data) {
- if (!ParseTLV(data).has_value()) {
+ absl::optional<BoundedByteReader<kHeaderSize>> reader = ParseTLV(data);
+ if (!reader.has_value()) {
return absl::nullopt;
}
- return ZeroChecksumAcceptableChunkParameter();
+
+ ZeroChecksumAlternateErrorDetectionMethod method(reader->Load32<4>());
+ if (method == ZeroChecksumAlternateErrorDetectionMethod::None()) {
+ return absl::nullopt;
+ }
+ return ZeroChecksumAcceptableChunkParameter(method);
}
void ZeroChecksumAcceptableChunkParameter::SerializeTo(
std::vector<uint8_t>& out) const {
- AllocateTLV(out);
+ BoundedByteWriter<kHeaderSize> writer = AllocateTLV(out);
+ writer.Store32<4>(*error_detection_method_);
}
std::string ZeroChecksumAcceptableChunkParameter::ToString() const {
- return "Zero Checksum Acceptable";
+ rtc::StringBuilder sb;
+ sb << "Zero Checksum Acceptable (" << *error_detection_method_ << ")";
+ return sb.Release();
}
} // namespace dcsctp
diff --git a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.h b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.h
index 9ae2ec8280..18c98c95c6 100644
--- a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.h
+++ b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter.h
@@ -19,13 +19,14 @@
#include "api/array_view.h"
#include "net/dcsctp/packet/parameter/parameter.h"
#include "net/dcsctp/packet/tlv_trait.h"
+#include "net/dcsctp/public/types.h"
namespace dcsctp {
-// https://datatracker.ietf.org/doc/draft-tuexen-tsvwg-sctp-zero-checksum/
+// https://datatracker.ietf.org/doc/draft-ietf-tsvwg-sctp-zero-checksum/
struct ZeroChecksumAcceptableChunkParameterConfig : ParameterConfig {
static constexpr int kType = 0x8001;
- static constexpr size_t kHeaderSize = 4;
+ static constexpr size_t kHeaderSize = 8;
static constexpr size_t kVariableLengthAlignment = 0;
};
@@ -36,13 +37,22 @@ class ZeroChecksumAcceptableChunkParameter
static constexpr int kType =
ZeroChecksumAcceptableChunkParameterConfig::kType;
- ZeroChecksumAcceptableChunkParameter() {}
+ explicit ZeroChecksumAcceptableChunkParameter(
+ ZeroChecksumAlternateErrorDetectionMethod error_detection_method)
+ : error_detection_method_(error_detection_method) {}
static absl::optional<ZeroChecksumAcceptableChunkParameter> Parse(
rtc::ArrayView<const uint8_t> data);
void SerializeTo(std::vector<uint8_t>& out) const override;
std::string ToString() const override;
+
+ ZeroChecksumAlternateErrorDetectionMethod error_detection_method() const {
+ return error_detection_method_;
+ }
+
+ private:
+ ZeroChecksumAlternateErrorDetectionMethod error_detection_method_;
};
} // namespace dcsctp
diff --git a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter_test.cc b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter_test.cc
index 8a004e1788..861fa4d785 100644
--- a/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter_test.cc
+++ b/third_party/libwebrtc/net/dcsctp/packet/parameter/zero_checksum_acceptable_chunk_parameter_test.cc
@@ -24,18 +24,28 @@ namespace {
using ::testing::ElementsAre;
TEST(ZeroChecksumAcceptableChunkParameterTest, SerializeAndDeserialize) {
- ZeroChecksumAcceptableChunkParameter parameter;
+ ZeroChecksumAcceptableChunkParameter parameter(
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls());
std::vector<uint8_t> serialized;
parameter.SerializeTo(serialized);
- EXPECT_THAT(serialized, ElementsAre(0x80, 0x01, 0x00, 0x04));
+ EXPECT_THAT(serialized,
+ ElementsAre(0x80, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01));
ASSERT_HAS_VALUE_AND_ASSIGN(
ZeroChecksumAcceptableChunkParameter deserialized,
ZeroChecksumAcceptableChunkParameter::Parse(serialized));
}
+TEST(ZeroChecksumAcceptableChunkParameterTest, FailToDeserializePrevVersion) {
+ // This is how the draft described the chunk as, in version 00.
+ std::vector<uint8_t> invalid = {0x80, 0x01, 0x00, 0x04};
+
+ EXPECT_FALSE(
+ ZeroChecksumAcceptableChunkParameter::Parse(invalid).has_value());
+}
+
TEST(ZeroChecksumAcceptableChunkParameterTest, FailToDeserialize) {
std::vector<uint8_t> invalid = {0x00, 0x00, 0x00, 0x00};
@@ -44,9 +54,10 @@ TEST(ZeroChecksumAcceptableChunkParameterTest, FailToDeserialize) {
}
TEST(ZeroChecksumAcceptableChunkParameterTest, HasToString) {
- ZeroChecksumAcceptableChunkParameter parameter;
+ ZeroChecksumAcceptableChunkParameter parameter(
+ ZeroChecksumAlternateErrorDetectionMethod::LowerLayerDtls());
- EXPECT_EQ(parameter.ToString(), "Zero Checksum Acceptable");
+ EXPECT_EQ(parameter.ToString(), "Zero Checksum Acceptable (1)");
}
} // namespace