gfe-relnote: Neuter handshake data when 1-RTT packet gets decrypted in quic_loas_server_stream. Affecting QBONE, not protected. PiperOrigin-RevId: 305301408 Change-Id: I4e52895d86e096c54678036aefa1b1198603c1a4
diff --git a/quic/core/quic_crypto_stream.cc b/quic/core/quic_crypto_stream.cc index 73584b5..35f33c2 100644 --- a/quic/core/quic_crypto_stream.cc +++ b/quic/core/quic_crypto_stream.cc
@@ -199,16 +199,20 @@ } void QuicCryptoStream::NeuterUnencryptedStreamData() { + NeuterStreamDataOfEncryptionLevel(ENCRYPTION_INITIAL); +} + +void QuicCryptoStream::NeuterStreamDataOfEncryptionLevel( + EncryptionLevel level) { if (!QuicVersionUsesCryptoFrames(session()->transport_version())) { - for (const auto& interval : bytes_consumed_[ENCRYPTION_INITIAL]) { + for (const auto& interval : bytes_consumed_[level]) { QuicByteCount newly_acked_length = 0; send_buffer().OnStreamDataAcked( interval.min(), interval.max() - interval.min(), &newly_acked_length); } return; } - QuicStreamSendBuffer* send_buffer = - &substreams_[ENCRYPTION_INITIAL].send_buffer; + QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer; // TODO(nharper): Consider adding a Clear() method to QuicStreamSendBuffer to // replace the following code. QuicIntervalSet<QuicStreamOffset> to_ack = send_buffer->bytes_acked();
diff --git a/quic/core/quic_crypto_stream.h b/quic/core/quic_crypto_stream.h index 23f7dfc..94e4730 100644 --- a/quic/core/quic_crypto_stream.h +++ b/quic/core/quic_crypto_stream.h
@@ -104,6 +104,9 @@ // Called to cancel retransmission of unencrypted crypto stream data. void NeuterUnencryptedStreamData(); + // Called to cancel retransmission of data of encryption |level|. + void NeuterStreamDataOfEncryptionLevel(EncryptionLevel level); + // Override to record the encryption level of consumed data. void OnStreamDataConsumed(size_t bytes_consumed) override;
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc index 62a1ae3..d190b6c 100644 --- a/quic/core/quic_session.cc +++ b/quic/core/quic_session.cc
@@ -2260,5 +2260,9 @@ << "ALPN selected: " << alpn; } +void QuicSession::NeuterCryptoDataOfEncryptionLevel(EncryptionLevel level) { + GetMutableCryptoStream()->NeuterStreamDataOfEncryptionLevel(level); +} + #undef ENDPOINT // undef for jumbo builds } // namespace quic
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h index c1986e2..4c4626b 100644 --- a/quic/core/quic_session.h +++ b/quic/core/quic_session.h
@@ -462,6 +462,9 @@ max_stream + num_expected_unidirectional_static_streams_); } + // Called to neuter crypto data of encryption |level|. + void NeuterCryptoDataOfEncryptionLevel(EncryptionLevel level); + // Returns the ALPN values to negotiate on this session. virtual std::vector<std::string> GetAlpnsToOffer() const { // TODO(vasilvv): this currently sets HTTP/3 by default. Switch all