Add ParsedQuicVersion::UsesTls and UsesQuicCrypto These convenience methods will make it easier to check which handshake protocol is in use. gfe-relnote: n/a, unused code PiperOrigin-RevId: 308299975 Change-Id: I28789e8ad69ccd652dcf7351b8c61808d04cd6b0
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc index 2bf7c3c..bf93e83 100644 --- a/quic/core/quic_versions.cc +++ b/quic/core/quic_versions.cc
@@ -158,6 +158,16 @@ return transport_version >= QUIC_VERSION_IETF_DRAFT_27; } +bool ParsedQuicVersion::UsesTls() const { + DCHECK(IsKnown()); + return handshake_protocol == PROTOCOL_TLS1_3; +} + +bool ParsedQuicVersion::UsesQuicCrypto() const { + DCHECK(IsKnown()); + return handshake_protocol == PROTOCOL_QUIC_CRYPTO; +} + bool VersionHasLengthPrefixedConnectionIds( QuicTransportVersion transport_version) { DCHECK(transport_version != QUIC_VERSION_UNSUPPORTED);
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h index f861f19..5f3a968 100644 --- a/quic/core/quic_versions.h +++ b/quic/core/quic_versions.h
@@ -330,6 +330,12 @@ // Returns true if this version uses variable-length integers when // encoding transport parameter types and lengths. bool HasVarIntTransportParams() const; + + // Returns whether this version uses PROTOCOL_TLS1_3. + bool UsesTls() const; + + // Returns whether this version uses PROTOCOL_QUIC_CRYPTO. + bool UsesQuicCrypto() const; }; QUIC_EXPORT_PRIVATE ParsedQuicVersion UnsupportedQuicVersion();
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc index 30a7f28..3a07221 100644 --- a/quic/core/quic_versions_test.cc +++ b/quic/core/quic_versions_test.cc
@@ -83,6 +83,65 @@ static_cast<QuicTransportVersion>(99))); } +TEST_F(QuicVersionsTest, Features) { + ParsedQuicVersion parsed_version_q043 = + ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43); + ParsedQuicVersion parsed_version_draft_27 = + ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27); + + EXPECT_TRUE(parsed_version_q043.IsKnown()); + EXPECT_FALSE(parsed_version_q043.KnowsWhichDecrypterToUse()); + EXPECT_FALSE(parsed_version_q043.UsesInitialObfuscators()); + EXPECT_FALSE(parsed_version_q043.AllowsLowFlowControlLimits()); + EXPECT_FALSE(parsed_version_q043.HasHeaderProtection()); + EXPECT_FALSE(parsed_version_q043.SupportsRetry()); + EXPECT_FALSE(parsed_version_q043.HasRetryIntegrityTag()); + EXPECT_FALSE( + parsed_version_q043.SendsVariableLengthPacketNumberInLongHeader()); + EXPECT_FALSE(parsed_version_q043.AllowsVariableLengthConnectionIds()); + EXPECT_FALSE(parsed_version_q043.SupportsClientConnectionIds()); + EXPECT_FALSE(parsed_version_q043.HasLengthPrefixedConnectionIds()); + EXPECT_FALSE(parsed_version_q043.SupportsAntiAmplificationLimit()); + EXPECT_FALSE(parsed_version_q043.CanSendCoalescedPackets()); + EXPECT_TRUE(parsed_version_q043.SupportsGoogleAltSvcFormat()); + EXPECT_FALSE(parsed_version_q043.HasIetfInvariantHeader()); + EXPECT_FALSE(parsed_version_q043.SupportsMessageFrames()); + EXPECT_FALSE(parsed_version_q043.UsesHttp3()); + EXPECT_FALSE(parsed_version_q043.HasLongHeaderLengths()); + EXPECT_FALSE(parsed_version_q043.UsesCryptoFrames()); + EXPECT_FALSE(parsed_version_q043.HasIetfQuicFrames()); + EXPECT_FALSE(parsed_version_q043.HasHandshakeDone()); + EXPECT_FALSE(parsed_version_q043.HasVarIntTransportParams()); + EXPECT_FALSE(parsed_version_q043.UsesTls()); + EXPECT_TRUE(parsed_version_q043.UsesQuicCrypto()); + + EXPECT_TRUE(parsed_version_draft_27.IsKnown()); + EXPECT_TRUE(parsed_version_draft_27.KnowsWhichDecrypterToUse()); + EXPECT_TRUE(parsed_version_draft_27.UsesInitialObfuscators()); + EXPECT_TRUE(parsed_version_draft_27.AllowsLowFlowControlLimits()); + EXPECT_TRUE(parsed_version_draft_27.HasHeaderProtection()); + EXPECT_TRUE(parsed_version_draft_27.SupportsRetry()); + EXPECT_TRUE(parsed_version_draft_27.HasRetryIntegrityTag()); + EXPECT_TRUE( + parsed_version_draft_27.SendsVariableLengthPacketNumberInLongHeader()); + EXPECT_TRUE(parsed_version_draft_27.AllowsVariableLengthConnectionIds()); + EXPECT_TRUE(parsed_version_draft_27.SupportsClientConnectionIds()); + EXPECT_TRUE(parsed_version_draft_27.HasLengthPrefixedConnectionIds()); + EXPECT_TRUE(parsed_version_draft_27.SupportsAntiAmplificationLimit()); + EXPECT_TRUE(parsed_version_draft_27.CanSendCoalescedPackets()); + EXPECT_FALSE(parsed_version_draft_27.SupportsGoogleAltSvcFormat()); + EXPECT_TRUE(parsed_version_draft_27.HasIetfInvariantHeader()); + EXPECT_TRUE(parsed_version_draft_27.SupportsMessageFrames()); + EXPECT_TRUE(parsed_version_draft_27.UsesHttp3()); + EXPECT_TRUE(parsed_version_draft_27.HasLongHeaderLengths()); + EXPECT_TRUE(parsed_version_draft_27.UsesCryptoFrames()); + EXPECT_TRUE(parsed_version_draft_27.HasIetfQuicFrames()); + EXPECT_TRUE(parsed_version_draft_27.HasHandshakeDone()); + EXPECT_TRUE(parsed_version_draft_27.HasVarIntTransportParams()); + EXPECT_TRUE(parsed_version_draft_27.UsesTls()); + EXPECT_FALSE(parsed_version_draft_27.UsesQuicCrypto()); +} + TEST_F(QuicVersionsTest, QuicVersionLabelToQuicTransportVersion) { // If you add a new version to the QuicTransportVersion enum you will need to // add a new case to QuicVersionLabelToQuicTransportVersion, otherwise this