Internal change
PiperOrigin-RevId: 546338842
diff --git a/quiche/quic/core/quic_crypto_client_handshaker.cc b/quiche/quic/core/quic_crypto_client_handshaker.cc
index 0f980cb..830f9f7 100644
--- a/quiche/quic/core/quic_crypto_client_handshaker.cc
+++ b/quiche/quic/core/quic_crypto_client_handshaker.cc
@@ -115,6 +115,11 @@
return num_client_hellos_;
}
+bool QuicCryptoClientHandshaker::ResumptionAttempted() const {
+ QUICHE_DCHECK(false);
+ return false;
+}
+
bool QuicCryptoClientHandshaker::IsResumption() const {
QUIC_BUG_IF(quic_bug_12522_1, !one_rtt_keys_available_);
// While 0-RTT handshakes could be considered to be like resumption, QUIC
diff --git a/quiche/quic/core/quic_crypto_client_handshaker.h b/quiche/quic/core/quic_crypto_client_handshaker.h
index dbbd942..b046405 100644
--- a/quiche/quic/core/quic_crypto_client_handshaker.h
+++ b/quiche/quic/core/quic_crypto_client_handshaker.h
@@ -37,6 +37,7 @@
// From QuicCryptoClientStream::HandshakerInterface
bool CryptoConnect() override;
int num_sent_client_hellos() const override;
+ bool ResumptionAttempted() const override;
bool IsResumption() const override;
bool EarlyDataAccepted() const override;
ssl_early_data_reason_t EarlyDataReason() const override;
diff --git a/quiche/quic/core/quic_crypto_client_stream.cc b/quiche/quic/core/quic_crypto_client_stream.cc
index 3c6dbe7..84eb9ae 100644
--- a/quiche/quic/core/quic_crypto_client_stream.cc
+++ b/quiche/quic/core/quic_crypto_client_stream.cc
@@ -66,6 +66,10 @@
return handshaker_->num_sent_client_hellos();
}
+bool QuicCryptoClientStream::ResumptionAttempted() const {
+ return handshaker_->ResumptionAttempted();
+}
+
bool QuicCryptoClientStream::IsResumption() const {
return handshaker_->IsResumption();
}
diff --git a/quiche/quic/core/quic_crypto_client_stream.h b/quiche/quic/core/quic_crypto_client_stream.h
index 0a3e5e4..ab62b35 100644
--- a/quiche/quic/core/quic_crypto_client_stream.h
+++ b/quiche/quic/core/quic_crypto_client_stream.h
@@ -47,6 +47,9 @@
// than the number of round-trips needed for the handshake.
virtual int num_sent_client_hellos() const = 0;
+ // Whether TLS resumption was attempted by this client. IETF QUIC only.
+ virtual bool ResumptionAttempted() 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
@@ -139,6 +142,9 @@
// than the number of round-trips needed for the handshake.
virtual int num_sent_client_hellos() const = 0;
+ // Whether TLS resumption was attempted by this client. IETF QUIC only.
+ virtual bool ResumptionAttempted() 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
@@ -264,6 +270,7 @@
// From QuicCryptoClientStreamBase
bool CryptoConnect() override;
int num_sent_client_hellos() const override;
+ bool ResumptionAttempted() const override;
bool IsResumption() const override;
bool EarlyDataAccepted() const override;
ssl_early_data_reason_t EarlyDataReason() const override;
diff --git a/quiche/quic/core/tls_client_handshaker.cc b/quiche/quic/core/tls_client_handshaker.cc
index 8ae63cc..f15e932 100644
--- a/quiche/quic/core/tls_client_handshaker.cc
+++ b/quiche/quic/core/tls_client_handshaker.cc
@@ -333,6 +333,11 @@
int TlsClientHandshaker::num_sent_client_hellos() const { return 0; }
+bool TlsClientHandshaker::ResumptionAttempted() const {
+ QUIC_BUG_IF(quic_tls_client_resumption_attempted, !encryption_established_);
+ return cached_state_ != nullptr;
+}
+
bool TlsClientHandshaker::IsResumption() const {
QUIC_BUG_IF(quic_bug_12736_1, !one_rtt_keys_available());
return SSL_session_reused(ssl()) == 1;
diff --git a/quiche/quic/core/tls_client_handshaker.h b/quiche/quic/core/tls_client_handshaker.h
index 06581b5..dd7e393 100644
--- a/quiche/quic/core/tls_client_handshaker.h
+++ b/quiche/quic/core/tls_client_handshaker.h
@@ -43,6 +43,7 @@
// From QuicCryptoClientStream::HandshakerInterface
bool CryptoConnect() override;
int num_sent_client_hellos() const override;
+ bool ResumptionAttempted() const override;
bool IsResumption() const override;
bool EarlyDataAccepted() const override;
ssl_early_data_reason_t EarlyDataReason() const override;
diff --git a/quiche/quic/core/tls_client_handshaker_test.cc b/quiche/quic/core/tls_client_handshaker_test.cc
index b11dd0c..414ecf2 100644
--- a/quiche/quic/core/tls_client_handshaker_test.cc
+++ b/quiche/quic/core/tls_client_handshaker_test.cc
@@ -368,6 +368,7 @@
EXPECT_EQ(PROTOCOL_TLS1_3, stream()->handshake_protocol());
EXPECT_TRUE(stream()->encryption_established());
EXPECT_TRUE(stream()->one_rtt_keys_available());
+ EXPECT_FALSE(stream()->ResumptionAttempted());
EXPECT_FALSE(stream()->IsResumption());
// Create a second connection
@@ -377,6 +378,7 @@
EXPECT_EQ(PROTOCOL_TLS1_3, stream()->handshake_protocol());
EXPECT_TRUE(stream()->encryption_established());
EXPECT_TRUE(stream()->one_rtt_keys_available());
+ EXPECT_TRUE(stream()->ResumptionAttempted());
EXPECT_TRUE(stream()->IsResumption());
}
@@ -390,6 +392,7 @@
EXPECT_EQ(PROTOCOL_TLS1_3, stream()->handshake_protocol());
EXPECT_TRUE(stream()->encryption_established());
EXPECT_TRUE(stream()->one_rtt_keys_available());
+ EXPECT_FALSE(stream()->ResumptionAttempted());
EXPECT_FALSE(stream()->IsResumption());
// Create a second connection, but disable resumption on the server.
@@ -400,6 +403,7 @@
EXPECT_EQ(PROTOCOL_TLS1_3, stream()->handshake_protocol());
EXPECT_TRUE(stream()->encryption_established());
EXPECT_TRUE(stream()->one_rtt_keys_available());
+ EXPECT_TRUE(stream()->ResumptionAttempted());
EXPECT_FALSE(stream()->IsResumption());
EXPECT_FALSE(stream()->EarlyDataAccepted());
EXPECT_EQ(stream()->EarlyDataReason(),