Add IsResumption method to QUIC client handshakers gfe-relnote: no behavior change: adding unused method PiperOrigin-RevId: 279141655 Change-Id: Icfe08baf904b37a702c73c071334b11bb6cf2234
diff --git a/quic/core/quic_crypto_client_handshaker.cc b/quic/core/quic_crypto_client_handshaker.cc index 1f63042..a6f531a 100644 --- a/quic/core/quic_crypto_client_handshaker.cc +++ b/quic/core/quic_crypto_client_handshaker.cc
@@ -116,6 +116,13 @@ return num_client_hellos_; } +bool QuicCryptoClientHandshaker::IsResumption() const { + QUIC_BUG_IF(!handshake_confirmed_); + // While 0-RTT handshakes could be considered to be like resumption, QUIC + // Crypto doesn't have the same notion of a resumption like TLS does. + return false; +} + int QuicCryptoClientHandshaker::num_scup_messages_received() const { return num_scup_messages_received_; }
diff --git a/quic/core/quic_crypto_client_handshaker.h b/quic/core/quic_crypto_client_handshaker.h index f880fb3..bce4ab3 100644 --- a/quic/core/quic_crypto_client_handshaker.h +++ b/quic/core/quic_crypto_client_handshaker.h
@@ -37,6 +37,7 @@ // From QuicCryptoClientStream::HandshakerDelegate bool CryptoConnect() override; int num_sent_client_hellos() const override; + bool IsResumption() const override; int num_scup_messages_received() const override; std::string chlo_hash() const override; bool encryption_established() const override;
diff --git a/quic/core/quic_crypto_client_stream.cc b/quic/core/quic_crypto_client_stream.cc index 12b538f..354debb 100644 --- a/quic/core/quic_crypto_client_stream.cc +++ b/quic/core/quic_crypto_client_stream.cc
@@ -63,6 +63,10 @@ return handshaker_->num_sent_client_hellos(); } +bool QuicCryptoClientStream::IsResumption() const { + return handshaker_->IsResumption(); +} + int QuicCryptoClientStream::num_scup_messages_received() const { return handshaker_->num_scup_messages_received(); }
diff --git a/quic/core/quic_crypto_client_stream.h b/quic/core/quic_crypto_client_stream.h index 89f0d2e..d175ece 100644 --- a/quic/core/quic_crypto_client_stream.h +++ b/quic/core/quic_crypto_client_stream.h
@@ -35,6 +35,13 @@ // than the number of round-trips needed for the handshake. virtual int num_sent_client_hellos() const = 0; + // Returns true if the handshake performed was a resumption instead of a full + // handshake. Resumption only makes sense for TLS handshakes - there is no + // concept of resumption for QUIC crypto even though it supports a 0-RTT + // handshake. This function only returns valid results once the handshake is + // complete. + virtual bool IsResumption() const = 0; + // The number of server config update messages received by the // client. Does not count update messages that were received prior // to handshake confirmation. @@ -79,6 +86,13 @@ // than the number of round-trips needed for the handshake. virtual int num_sent_client_hellos() const = 0; + // Returns true if the handshake performed was a resumption instead of a + // full handshake. Resumption only makes sense for TLS handshakes - there is + // no concept of resumption for QUIC crypto even though it supports a 0-RTT + // handshake. This function only returns valid results once the handshake is + // complete. + virtual bool IsResumption() const = 0; + // The number of server config update messages received by the // client. Does not count update messages that were received prior // to handshake confirmation. @@ -137,6 +151,7 @@ // From QuicCryptoClientStreamBase bool CryptoConnect() override; int num_sent_client_hellos() const override; + bool IsResumption() const override; int num_scup_messages_received() const override;
diff --git a/quic/core/quic_crypto_client_stream_test.cc b/quic/core/quic_crypto_client_stream_test.cc index 8e1ef25..2622439 100644 --- a/quic/core/quic_crypto_client_stream_test.cc +++ b/quic/core/quic_crypto_client_stream_test.cc
@@ -93,6 +93,7 @@ CompleteCryptoHandshake(); EXPECT_TRUE(stream()->encryption_established()); EXPECT_TRUE(stream()->handshake_confirmed()); + EXPECT_FALSE(stream()->IsResumption()); } TEST_F(QuicCryptoClientStreamTest, ConnectedAfterTlsHandshake) { @@ -109,6 +110,7 @@ EXPECT_EQ(PROTOCOL_TLS1_3, stream()->handshake_protocol()); EXPECT_TRUE(stream()->encryption_established()); EXPECT_TRUE(stream()->handshake_confirmed()); + EXPECT_FALSE(stream()->IsResumption()); } TEST_F(QuicCryptoClientStreamTest,
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc index 749d15f..2056953 100644 --- a/quic/core/tls_client_handshaker.cc +++ b/quic/core/tls_client_handshaker.cc
@@ -197,6 +197,12 @@ return 0; } +bool TlsClientHandshaker::IsResumption() const { + QUIC_BUG_IF(!handshake_confirmed_); + // We don't support resumption (yet). + return false; +} + int TlsClientHandshaker::num_scup_messages_received() const { // SCUP messages aren't sent or received when using the TLS handshake. return 0;
diff --git a/quic/core/tls_client_handshaker.h b/quic/core/tls_client_handshaker.h index ad7939b..17b529e 100644 --- a/quic/core/tls_client_handshaker.h +++ b/quic/core/tls_client_handshaker.h
@@ -40,6 +40,7 @@ // From QuicCryptoClientStream::HandshakerDelegate bool CryptoConnect() override; int num_sent_client_hellos() const override; + bool IsResumption() const override; int num_scup_messages_received() const override; std::string chlo_hash() const override;