Move QuicCryptoClientStreamBase::EarlyDataReason to QuicCryptoStream PiperOrigin-RevId: 332301712 Change-Id: I391a8dfcd7f927d71de91355ba26a0d62bcf9e7c
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc index a3c4a52..c8fdf4c 100644 --- a/quic/core/http/quic_spdy_session_test.cc +++ b/quic/core/http/quic_spdy_session_test.cc
@@ -131,6 +131,9 @@ } // QuicCryptoStream implementation + ssl_early_data_reason_t EarlyDataReason() const override { + return ssl_early_data_unknown; + } bool encryption_established() const override { return encryption_established_; }
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc index 85e6467..1c55c96 100644 --- a/quic/core/http/quic_spdy_stream_test.cc +++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -119,6 +119,9 @@ } // QuicCryptoStream implementation + ssl_early_data_reason_t EarlyDataReason() const override { + return ssl_early_data_unknown; + } bool encryption_established() const override { return encryption_established_; }
diff --git a/quic/core/quic_crypto_client_stream.h b/quic/core/quic_crypto_client_stream.h index 4100a50..1d9b04b 100644 --- a/quic/core/quic_crypto_client_stream.h +++ b/quic/core/quic_crypto_client_stream.h
@@ -9,7 +9,6 @@ #include <memory> #include <string> -#include "third_party/boringssl/src/include/openssl/ssl.h" #include "net/third_party/quiche/src/quic/core/crypto/proof_verifier.h" #include "net/third_party/quiche/src/quic/core/crypto/quic_crypto_client_config.h" #include "net/third_party/quiche/src/quic/core/quic_config.h" @@ -54,10 +53,6 @@ // Returns true if early data (0-RTT) was accepted in the connection. virtual bool EarlyDataAccepted() const = 0; - // Returns the ssl_early_data_reason_t describing why 0-RTT was accepted or - // rejected. - virtual ssl_early_data_reason_t EarlyDataReason() const = 0; - // Returns true if the client received an inchoate REJ during the handshake, // extending the handshake by one round trip. This only applies for QUIC // crypto handshakes. The equivalent feature in IETF QUIC is a Retry packet,
diff --git a/quic/core/quic_crypto_server_stream.cc b/quic/core/quic_crypto_server_stream.cc index 665cae1..5fc6839 100644 --- a/quic/core/quic_crypto_server_stream.cc +++ b/quic/core/quic_crypto_server_stream.cc
@@ -360,6 +360,16 @@ return true; } +ssl_early_data_reason_t QuicCryptoServerStream::EarlyDataReason() const { + if (IsZeroRtt()) { + return ssl_early_data_accepted; + } + if (zero_rtt_attempted_) { + return ssl_early_data_session_not_resumed; + } + return ssl_early_data_no_session_offered; +} + bool QuicCryptoServerStream::encryption_established() const { return encryption_established_; }
diff --git a/quic/core/quic_crypto_server_stream.h b/quic/core/quic_crypto_server_stream.h index 5a4b9b1..29d680e 100644 --- a/quic/core/quic_crypto_server_stream.h +++ b/quic/core/quic_crypto_server_stream.h
@@ -51,6 +51,7 @@ const ProofSource::Details* ProofSourceDetails() const override; // From QuicCryptoStream + ssl_early_data_reason_t EarlyDataReason() const override; bool encryption_established() const override; bool one_rtt_keys_available() const override; const QuicCryptoNegotiatedParameters& crypto_negotiated_params()
diff --git a/quic/core/quic_crypto_stream.h b/quic/core/quic_crypto_stream.h index 54d1b25..d73d970 100644 --- a/quic/core/quic_crypto_stream.h +++ b/quic/core/quic_crypto_stream.h
@@ -9,6 +9,7 @@ #include <cstddef> #include <string> +#include "third_party/boringssl/src/include/openssl/ssl.h" #include "net/third_party/quiche/src/quic/core/crypto/crypto_framer.h" #include "net/third_party/quiche/src/quic/core/crypto/crypto_utils.h" #include "net/third_party/quiche/src/quic/core/quic_config.h" @@ -72,6 +73,13 @@ virtual void WriteCryptoData(EncryptionLevel level, quiche::QuicheStringPiece data); + // Returns the ssl_early_data_reason_t describing why 0-RTT was accepted or + // rejected. Note that the value returned by this function may vary during the + // handshake. Once |one_rtt_keys_available| returns true, the value returned + // by this function will not change for the rest of the lifetime of the + // QuicCryptoStream. + virtual ssl_early_data_reason_t EarlyDataReason() const = 0; + // Returns true once an encrypter has been set for the connection. virtual bool encryption_established() const = 0;
diff --git a/quic/core/quic_crypto_stream_test.cc b/quic/core/quic_crypto_stream_test.cc index f763d2d..b0f4de3 100644 --- a/quic/core/quic_crypto_stream_test.cc +++ b/quic/core/quic_crypto_stream_test.cc
@@ -46,6 +46,9 @@ std::vector<CryptoHandshakeMessage>* messages() { return &messages_; } + ssl_early_data_reason_t EarlyDataReason() const override { + return ssl_early_data_unknown; + } bool encryption_established() const override { return false; } bool one_rtt_keys_available() const override { return false; }
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc index fad4082..5da254d 100644 --- a/quic/core/quic_session_test.cc +++ b/quic/core/quic_session_test.cc
@@ -115,6 +115,9 @@ } // QuicCryptoStream implementation + ssl_early_data_reason_t EarlyDataReason() const override { + return ssl_early_data_unknown; + } bool encryption_established() const override { return encryption_established_; }
diff --git a/quic/core/tls_client_handshaker.cc b/quic/core/tls_client_handshaker.cc index d11437d..9c316a7 100644 --- a/quic/core/tls_client_handshaker.cc +++ b/quic/core/tls_client_handshaker.cc
@@ -296,7 +296,7 @@ } ssl_early_data_reason_t TlsClientHandshaker::EarlyDataReason() const { - return SSL_get_early_data_reason(ssl()); + return TlsHandshaker::EarlyDataReason(); } bool TlsClientHandshaker::ReceivedInchoateReject() const {
diff --git a/quic/core/tls_handshaker.cc b/quic/core/tls_handshaker.cc index 1b20063..04fab15 100644 --- a/quic/core/tls_handshaker.cc +++ b/quic/core/tls_handshaker.cc
@@ -57,6 +57,10 @@ ssl(), TlsConnection::BoringEncryptionLevel(level)); } +ssl_early_data_reason_t TlsHandshaker::EarlyDataReason() const { + return SSL_get_early_data_reason(ssl()); +} + const EVP_MD* TlsHandshaker::Prf(const SSL_CIPHER* cipher) { return EVP_get_digestbynid(SSL_CIPHER_get_prf_nid(cipher)); }
diff --git a/quic/core/tls_handshaker.h b/quic/core/tls_handshaker.h index 282c89d..2b3c9fc 100644 --- a/quic/core/tls_handshaker.h +++ b/quic/core/tls_handshaker.h
@@ -48,6 +48,7 @@ // TlsHandshaker which use them to implement methods of QuicCryptoStream. CryptoMessageParser* crypto_message_parser() { return this; } size_t BufferSizeLimitForLevel(EncryptionLevel level) const; + ssl_early_data_reason_t EarlyDataReason() const; protected: virtual void AdvanceHandshake() = 0;
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc index 46e4b81..85f65e2 100644 --- a/quic/core/tls_server_handshaker.cc +++ b/quic/core/tls_server_handshaker.cc
@@ -175,6 +175,10 @@ state_ = STATE_CONNECTION_CLOSED; } +ssl_early_data_reason_t TlsServerHandshaker::EarlyDataReason() const { + return TlsHandshaker::EarlyDataReason(); +} + bool TlsServerHandshaker::encryption_established() const { return encryption_established_; }
diff --git a/quic/core/tls_server_handshaker.h b/quic/core/tls_server_handshaker.h index b0212db..063e5ca 100644 --- a/quic/core/tls_server_handshaker.h +++ b/quic/core/tls_server_handshaker.h
@@ -56,6 +56,7 @@ const ProofSource::Details* ProofSourceDetails() const override; // From QuicCryptoServerStreamBase and TlsHandshaker + ssl_early_data_reason_t EarlyDataReason() const override; bool encryption_established() const override; bool one_rtt_keys_available() const override; const QuicCryptoNegotiatedParameters& crypto_negotiated_params()
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc index e6bd7e4..6e83351 100644 --- a/quic/test_tools/quic_test_utils.cc +++ b/quic/test_tools/quic_test_utils.cc
@@ -643,6 +643,10 @@ MockQuicCryptoStream::~MockQuicCryptoStream() {} +ssl_early_data_reason_t MockQuicCryptoStream::EarlyDataReason() const { + return ssl_early_data_unknown; +} + bool MockQuicCryptoStream::encryption_established() const { return false; }
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h index 86f2003..a47bdd1 100644 --- a/quic/test_tools/quic_test_utils.h +++ b/quic/test_tools/quic_test_utils.h
@@ -851,6 +851,7 @@ ~MockQuicCryptoStream() override; + ssl_early_data_reason_t EarlyDataReason() const override; bool encryption_established() const override; bool one_rtt_keys_available() const override; const QuicCryptoNegotiatedParameters& crypto_negotiated_params()