Add a convenient contstructor to QuicConnectionId that accepts a Span. QUIC-LB has many tests that write specific connection IDs, and a constructor that accepts array literals is way less cumbersome. PiperOrigin-RevId: 432541846
diff --git a/quic/core/quic_connection_id.cc b/quic/core/quic_connection_id.cc index a8cb4c0..19a35eb 100644 --- a/quic/core/quic_connection_id.cc +++ b/quic/core/quic_connection_id.cc
@@ -71,6 +71,10 @@ memcpy(data_long_, data, length_); } +QuicConnectionId::QuicConnectionId(const absl::Span<const uint8_t>& data) + : QuicConnectionId(reinterpret_cast<const char*>(data.data()), + data.length()) {} + QuicConnectionId::~QuicConnectionId() { if (length_ > sizeof(data_short_)) { free(data_long_); @@ -101,9 +105,7 @@ return data_long_; } -uint8_t QuicConnectionId::length() const { - return length_; -} +uint8_t QuicConnectionId::length() const { return length_; } void QuicConnectionId::set_length(uint8_t length) { char temporary_data[sizeof(data_short_)]; @@ -131,9 +133,7 @@ length_ = length; } -bool QuicConnectionId::IsEmpty() const { - return length_ == 0; -} +bool QuicConnectionId::IsEmpty() const { return length_ == 0; } size_t QuicConnectionId::Hash() const { static const QuicConnectionIdHasher hasher = QuicConnectionIdHasher(); @@ -170,9 +170,7 @@ return memcmp(data(), v.data(), length_) < 0; } -QuicConnectionId EmptyQuicConnectionId() { - return QuicConnectionId(); -} +QuicConnectionId EmptyQuicConnectionId() { return QuicConnectionId(); } static_assert(kQuicDefaultConnectionIdLength == sizeof(uint64_t), "kQuicDefaultConnectionIdLength changed");
diff --git a/quic/core/quic_connection_id.h b/quic/core/quic_connection_id.h index a0669d7..4b39ba2 100644 --- a/quic/core/quic_connection_id.h +++ b/quic/core/quic_connection_id.h
@@ -8,6 +8,7 @@ #include <string> #include <vector> +#include "absl/types/span.h" #include "quic/platform/api/quic_export.h" namespace quic { @@ -47,6 +48,7 @@ // Creates a connection ID from network order bytes. QuicConnectionId(const char* data, uint8_t length); + QuicConnectionId(const absl::Span<const uint8_t>& data); // Creates a connection ID from another connection ID. QuicConnectionId(const QuicConnectionId& other); @@ -89,8 +91,7 @@ // operator<< allows easily logging connection IDs. friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( - std::ostream& os, - const QuicConnectionId& v); + std::ostream& os, const QuicConnectionId& v); bool operator==(const QuicConnectionId& v) const; bool operator!=(const QuicConnectionId& v) const;
diff --git a/quic/core/quic_connection_id_test.cc b/quic/core/quic_connection_id_test.cc index 3effb34..3f944e3 100644 --- a/quic/core/quic_connection_id_test.cc +++ b/quic/core/quic_connection_id_test.cc
@@ -60,6 +60,33 @@ EXPECT_EQ(kNewLength, connection_id2.length()); } +TEST_F(QuicConnectionIdTest, SpanData) { + QuicConnectionId connection_id = QuicConnectionId({0x01, 0x02, 0x03}); + EXPECT_EQ(connection_id.length(), 3); + QuicConnectionId empty_connection_id = + QuicConnectionId(absl::Span<uint8_t>()); + EXPECT_EQ(empty_connection_id.length(), 0); + QuicConnectionId connection_id2 = QuicConnectionId({ + 0x01, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0a, + 0x0b, + 0x0c, + 0x0d, + 0x0e, + 0x0f, + 0x10, + }); + EXPECT_EQ(connection_id2.length(), 16); +} + TEST_F(QuicConnectionIdTest, DoubleConvert) { QuicConnectionId connection_id64_1 = test::TestConnectionId(1); QuicConnectionId connection_id64_2 = test::TestConnectionId(42);