gfe-relnote: Use encryption level instead of looking for the string "CHLO" to identify the QUIC ClientHello. Client side change only, not flag protected.
PiperOrigin-RevId: 241995962
Change-Id: I840eb7531ef55f32c7bb06bc08bcdb947459e732
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index 951fb81..224aadf 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -174,30 +174,25 @@
}
bool QuicPacketCreator::ConsumeData(QuicStreamId id,
- size_t write_length,
- size_t iov_offset,
+ size_t data_size,
QuicStreamOffset offset,
bool fin,
bool needs_full_padding,
TransmissionType transmission_type,
QuicFrame* frame) {
- // TODO(ianswett): Remove write_length once the multi-packet CHLO check is
- // done higher in the stack.
- DCHECK_GE(write_length, iov_offset);
- const size_t data_size = write_length - iov_offset;
if (!HasRoomForStreamFrame(id, offset, data_size)) {
return false;
}
CreateStreamFrame(id, data_size, offset, fin, frame);
// Explicitly disallow multi-packet CHLOs.
if (FLAGS_quic_enforce_single_packet_chlo &&
- StreamFrameStartsWithChlo(frame->stream_frame) &&
- frame->stream_frame.data_length < write_length) {
+ StreamFrameIsClientHello(frame->stream_frame) &&
+ frame->stream_frame.data_length < data_size) {
const std::string error_details =
"Client hello won't fit in a single packet.";
QUIC_BUG << error_details << " Constructed stream frame length: "
<< frame->stream_frame.data_length
- << " CHLO length: " << write_length;
+ << " CHLO length: " << data_size;
delegate_->OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, error_details,
ConnectionCloseSource::FROM_SELF);
return false;
@@ -953,15 +948,15 @@
pending_padding_bytes_ += size;
}
-bool QuicPacketCreator::StreamFrameStartsWithChlo(
+bool QuicPacketCreator::StreamFrameIsClientHello(
const QuicStreamFrame& frame) const {
if (framer_->perspective() == Perspective::IS_SERVER ||
frame.stream_id !=
- QuicUtils::GetCryptoStreamId(framer_->transport_version()) ||
- frame.data_length < sizeof(kCHLO)) {
+ QuicUtils::GetCryptoStreamId(framer_->transport_version())) {
return false;
}
- return framer_->StartsWithChlo(frame.stream_id, frame.offset);
+ // The ClientHello is always sent with INITIAL encryption.
+ return packet_.encryption_level == ENCRYPTION_INITIAL;
}
void QuicPacketCreator::SetConnectionIdIncluded(