Fix ODR violations in quic_versions.h
gfe-relnote: n/a (no functional change)
PiperOrigin-RevId: 293541130
Change-Id: I8e1ae9a4ea316f40599ebfb17110fabfbcd2e128
diff --git a/quic/core/crypto/crypto_utils.cc b/quic/core/crypto/crypto_utils.cc
index 7de442b..bb346b5 100644
--- a/quic/core/crypto/crypto_utils.cc
+++ b/quic/core/crypto/crypto_utils.cc
@@ -135,7 +135,7 @@
const uint8_t* InitialSaltForVersion(const ParsedQuicVersion& version,
size_t* out_len) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync with initial encryption salts");
switch (version.handshake_protocol) {
case PROTOCOL_QUIC_CRYPTO:
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index 44e2bb7..8e7e278 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -940,7 +940,7 @@
}
TEST_F(QuicDispatcherTest, RejectDeprecatedVersionsWithVersionNegotiation) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Please add deprecated versions to this test");
QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
CreateTimeWaitListManager();
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 35a71ae..408149e 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -23,7 +23,7 @@
disable_version_q046_(GetQuicReloadableFlag(quic_disable_version_q046)),
disable_version_q043_(GetQuicReloadableFlag(quic_disable_version_q043)),
allowed_supported_versions_(std::move(supported_versions)) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
RefilterSupportedVersions();
}
@@ -42,7 +42,7 @@
}
void QuicVersionManager::MaybeRefilterSupportedVersions() {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
if (enable_version_t099_ != GetQuicReloadableFlag(quic_enable_version_t099) ||
disable_version_q050_ !=
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index 76d74fc..90179ba 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -16,7 +16,7 @@
class QuicVersionManagerTest : public QuicTest {};
TEST_F(QuicVersionManagerTest, QuicVersionManager) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedVersions().size() == 7u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, false);
SetQuicReloadableFlag(quic_enable_version_t050, false);
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index e92f048..33c5596 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -181,7 +181,7 @@
<< parsed_version.handshake_protocol;
return 0;
}
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
switch (parsed_version.transport_version) {
case QUIC_VERSION_43:
@@ -262,16 +262,16 @@
}
QuicTransportVersionVector AllSupportedTransportVersions() {
- QuicTransportVersionVector supported_versions;
- for (QuicTransportVersion version : kSupportedTransportVersions) {
- supported_versions.push_back(version);
- }
+ constexpr auto supported_transport_versions = SupportedTransportVersions();
+ QuicTransportVersionVector supported_versions(
+ supported_transport_versions.begin(), supported_transport_versions.end());
return supported_versions;
}
ParsedQuicVersionVector AllSupportedVersions() {
- return ParsedQuicVersionVector(kSupportedVersions.begin(),
- kSupportedVersions.end());
+ constexpr auto supported_versions = SupportedVersions();
+ return ParsedQuicVersionVector(supported_versions.begin(),
+ supported_versions.end());
}
ParsedQuicVersionVector CurrentSupportedVersions() {
@@ -401,7 +401,7 @@
return #x
std::string QuicVersionToString(QuicTransportVersion transport_version) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
switch (transport_version) {
RETURN_STRING_LITERAL(QUIC_VERSION_43);
@@ -525,7 +525,7 @@
}
void QuicEnableVersion(ParsedQuicVersion parsed_version) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
if (parsed_version.transport_version == QUIC_VERSION_99) {
if (parsed_version.handshake_protocol == PROTOCOL_TLS1_3) {
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 6e514f0..1f3738e 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -124,7 +124,7 @@
QuicTransportVersion transport_version);
// IETF draft version most closely approximated by TLS + v99.
-static const int kQuicIetfDraftVersion = 25;
+enum : int { kQuicIetfDraftVersion = 25 };
// The crypto handshake protocols that can be used with QUIC.
enum HandshakeProtocol {
@@ -313,26 +313,31 @@
// skipped as necessary).
//
// See go/new-quic-version for more details on how to roll out new versions.
-static const QuicTransportVersion kSupportedTransportVersions[] = {
- QUIC_VERSION_99, QUIC_VERSION_50, QUIC_VERSION_49,
- QUIC_VERSION_48, QUIC_VERSION_46, QUIC_VERSION_43,
-};
+constexpr std::array<QuicTransportVersion, 6> SupportedTransportVersions() {
+ return std::array<QuicTransportVersion, 6>(
+ {QUIC_VERSION_99, QUIC_VERSION_50, QUIC_VERSION_49, QUIC_VERSION_48,
+ QUIC_VERSION_46, QUIC_VERSION_43});
+}
// This vector contains all crypto handshake protocols that are supported.
-static const HandshakeProtocol kSupportedHandshakeProtocols[] = {
- PROTOCOL_QUIC_CRYPTO, PROTOCOL_TLS1_3};
+constexpr std::array<HandshakeProtocol, 2> SupportedHandshakeProtocols() {
+ return std::array<HandshakeProtocol, 2>(
+ {PROTOCOL_QUIC_CRYPTO, PROTOCOL_TLS1_3});
+}
-static const std::array<ParsedQuicVersion, 7> kSupportedVersions = {
- ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50),
- ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49),
- ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48),
- ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
- ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43),
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99),
- ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),
-};
+constexpr std::array<ParsedQuicVersion, 7> SupportedVersions() {
+ return std::array<ParsedQuicVersion, 7>({
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50),
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49),
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48),
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43),
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99),
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),
+ });
+}
-typedef std::vector<QuicTransportVersion> QuicTransportVersionVector;
+using QuicTransportVersionVector = std::vector<QuicTransportVersion>;
// Returns a vector of QUIC versions in kSupportedTransportVersions.
QUIC_EXPORT_PRIVATE QuicTransportVersionVector AllSupportedTransportVersions();
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index cc7bf05..ae48f1b 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -41,8 +41,7 @@
// Loop over all supported versions and make sure that we never hit the
// default case (i.e. all supported versions should be successfully converted
// to valid QuicVersionLabels).
- for (size_t i = 0; i < QUICHE_ARRAYSIZE(kSupportedTransportVersions); ++i) {
- QuicTransportVersion transport_version = kSupportedTransportVersions[i];
+ for (QuicTransportVersion transport_version : SupportedTransportVersions()) {
if (!ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, transport_version)) {
continue;
}
@@ -85,8 +84,7 @@
EXPECT_EQ(QUIC_VERSION_43,
QuicVersionLabelToQuicVersion(MakeQuicTag('3', '4', '0', 'Q')));
- for (size_t i = 0; i < QUICHE_ARRAYSIZE(kSupportedTransportVersions); ++i) {
- QuicTransportVersion transport_version = kSupportedTransportVersions[i];
+ for (QuicTransportVersion transport_version : SupportedTransportVersions()) {
if (!ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, transport_version)) {
continue;
}
@@ -240,9 +238,9 @@
QuicTransportVersionVectorToString(versions_vector));
// Make sure that all supported versions are present in QuicVersionToString.
- for (size_t i = 0; i < QUICHE_ARRAYSIZE(kSupportedTransportVersions); ++i) {
- QuicTransportVersion version = kSupportedTransportVersions[i];
- EXPECT_NE("QUIC_VERSION_UNSUPPORTED", QuicVersionToString(version));
+ for (QuicTransportVersion transport_version : SupportedTransportVersions()) {
+ EXPECT_NE("QUIC_VERSION_UNSUPPORTED",
+ QuicVersionToString(transport_version));
}
}
@@ -269,7 +267,7 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsAllVersions) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, true);
SetQuicReloadableFlag(quic_enable_version_t050, true);
@@ -301,7 +299,7 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsNo99) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, false);
SetQuicReloadableFlag(quic_enable_version_t050, true);
@@ -330,7 +328,7 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsNoFlags) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, false);
SetQuicReloadableFlag(quic_enable_version_t050, false);
@@ -395,7 +393,7 @@
// yet a typo was made in doing the #defines and it was caught
// only in some test far removed from here... Better safe than sorry.
TEST_F(QuicVersionsTest, CheckVersionNumbersForTypos) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
EXPECT_EQ(QUIC_VERSION_43, 43);
EXPECT_EQ(QUIC_VERSION_46, 46);
@@ -406,7 +404,7 @@
}
TEST_F(QuicVersionsTest, AlpnForVersion) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
ParsedQuicVersion parsed_version_q048 =
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48);
@@ -429,7 +427,7 @@
}
TEST_F(QuicVersionsTest, QuicEnableVersion) {
- static_assert(QUICHE_ARRAYSIZE(kSupportedTransportVersions) == 6u,
+ static_assert(SupportedTransportVersions().size() == 6u,
"Supported versions out of sync");
ParsedQuicVersion parsed_version_t099 =
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99);
@@ -465,25 +463,25 @@
QuicVersionReservedForNegotiation().transport_version);
// QUIC_VERSION_RESERVED_FOR_NEGOTIATION MUST NOT be added to
// kSupportedTransportVersions.
- for (size_t i = 0; i < QUICHE_ARRAYSIZE(kSupportedTransportVersions); ++i) {
- EXPECT_NE(QUIC_VERSION_RESERVED_FOR_NEGOTIATION,
- kSupportedTransportVersions[i]);
+ for (QuicTransportVersion transport_version : SupportedTransportVersions()) {
+ EXPECT_NE(QUIC_VERSION_RESERVED_FOR_NEGOTIATION, transport_version);
}
}
TEST_F(QuicVersionsTest, SupportedVersionsHasCorrectList) {
size_t index = 0;
- for (HandshakeProtocol handshake_protocol : kSupportedHandshakeProtocols) {
- for (QuicTransportVersion transport_version : kSupportedTransportVersions) {
+ for (HandshakeProtocol handshake_protocol : SupportedHandshakeProtocols()) {
+ for (QuicTransportVersion transport_version :
+ SupportedTransportVersions()) {
SCOPED_TRACE(index);
if (ParsedQuicVersionIsValid(handshake_protocol, transport_version)) {
- EXPECT_EQ(kSupportedVersions[index],
+ EXPECT_EQ(SupportedVersions()[index],
ParsedQuicVersion(handshake_protocol, transport_version));
index++;
}
}
}
- EXPECT_EQ(kSupportedVersions.size(), index);
+ EXPECT_EQ(SupportedVersions().size(), index);
}
} // namespace
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc
index dbb4165..4a9bac5 100644
--- a/quic/test_tools/quic_test_utils.cc
+++ b/quic/test_tools/quic_test_utils.cc
@@ -1028,13 +1028,6 @@
return config;
}
-QuicTransportVersionVector SupportedTransportVersions(
- QuicTransportVersion version) {
- QuicTransportVersionVector versions;
- versions.push_back(version);
- return versions;
-}
-
ParsedQuicVersionVector SupportedVersions(ParsedQuicVersion version) {
ParsedQuicVersionVector versions;
versions.push_back(version);
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 8ca2884..8eb117f 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -168,10 +168,6 @@
// Returns QuicConfig set to default values.
QuicConfig DefaultQuicConfig();
-// Returns a version vector consisting of |version|.
-QuicTransportVersionVector SupportedTransportVersions(
- QuicTransportVersion version);
-
ParsedQuicVersionVector SupportedVersions(ParsedQuicVersion version);
struct QuicAckBlock {