Index: net/quic/core/quic_framer.cc |
diff --git a/net/quic/core/quic_framer.cc b/net/quic/core/quic_framer.cc |
index c198802389727886cf047b8fccf493241a3f216b..425ee9a88ead00d021636bfd56b423208957d4c3 100644 |
--- a/net/quic/core/quic_framer.cc |
+++ b/net/quic/core/quic_framer.cc |
@@ -91,12 +91,6 @@ const uint8_t kQuicStreamFinMask = 0x01; |
// packet number size shift used in AckFrames. |
const uint8_t kQuicSequenceNumberLengthShift = 2; |
-// Acks may be truncated. |
-const uint8_t kQuicAckTruncatedShift = 1; |
-const uint8_t kQuicAckTruncatedMask = 0x01; |
- |
-// Acks may not have any nacks. |
-const uint8_t kQuicHasNacksMask = 0x01; |
// Acks may have only one ack block. |
const uint8_t kQuicHasMultipleAckBlocksMask = 0x01; |
const uint8_t kQuicHasMultipleAckBlocksShift = 1; |
@@ -138,7 +132,6 @@ QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, |
QuicTime creation_time, |
Perspective perspective) |
: visitor_(nullptr), |
- entropy_calculator_(nullptr), |
error_(QUIC_NO_ERROR), |
last_packet_number_(0), |
largest_packet_number_(0), |
@@ -175,9 +168,6 @@ size_t QuicFramer::GetMinAckFrameSize( |
QuicPacketNumberLength largest_observed_length) { |
size_t min_size = kQuicFrameTypeSize + largest_observed_length + |
kQuicDeltaTimeLargestObservedSize; |
- if (version <= QUIC_VERSION_33) { |
- return min_size + kQuicEntropyHashSize; |
- } |
return min_size + kQuicNumTimestampsSize; |
} |
@@ -186,9 +176,6 @@ size_t QuicFramer::GetStopWaitingFrameSize( |
QuicVersion version, |
QuicPacketNumberLength packet_number_length) { |
size_t min_size = kQuicFrameTypeSize + packet_number_length; |
- if (version <= QUIC_VERSION_33) { |
- return min_size + kQuicEntropyHashSize; |
- } |
return min_size; |
} |
@@ -324,19 +311,6 @@ size_t QuicFramer::GetSerializedFrameLength( |
return 0; |
} |
-QuicFramer::AckFrameInfo::AckFrameInfo() : max_delta(0) {} |
- |
-QuicFramer::AckFrameInfo::AckFrameInfo(const AckFrameInfo& other) = default; |
- |
-QuicFramer::AckFrameInfo::~AckFrameInfo() {} |
- |
-QuicFramer::AckBlock::AckBlock(uint8_t gap, QuicPacketNumber length) |
- : gap(gap), length(length) {} |
- |
-QuicFramer::AckBlock::AckBlock(const AckBlock& other) = default; |
- |
-QuicFramer::AckBlock::~AckBlock() {} |
- |
QuicFramer::NewAckFrameInfo::NewAckFrameInfo() |
: max_block_length(0), first_block_length(0), num_ack_blocks(0) {} |
@@ -345,12 +319,6 @@ QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) = |
QuicFramer::NewAckFrameInfo::~NewAckFrameInfo() {} |
-// static |
-QuicPacketEntropyHash QuicFramer::GetPacketEntropyHash( |
- const QuicPacketHeader& header) { |
- return header.entropy_flag << (header.packet_number % 8); |
-} |
- |
size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header, |
const QuicFrames& frames, |
char* buffer, |
@@ -382,18 +350,9 @@ size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header, |
} |
break; |
case ACK_FRAME: |
- if (quic_version_ <= QUIC_VERSION_33) { |
- if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) { |
- QUIC_BUG << "AppendAckFrameAndTypeByte failed" |
- << " header: " << header |
- << " ack_fame: " << *frame.ack_frame; |
- return 0; |
- } |
- } else { |
- if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) { |
- QUIC_BUG << "AppendNewAckFrameAndTypeByte failed"; |
- return 0; |
- } |
+ if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) { |
+ QUIC_BUG << "AppendNewAckFrameAndTypeByte failed"; |
+ return 0; |
} |
break; |
case STOP_WAITING_FRAME: |
@@ -621,12 +580,6 @@ bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, |
} |
QuicDataReader reader(decrypted_buffer, decrypted_length); |
- if (quic_version_ <= QUIC_VERSION_33) { |
- if (!ProcessAuthenticatedHeader(&reader, &header)) { |
- DVLOG(1) << "Unable to process packet header. Stopping parsing."; |
- return false; |
- } |
- } |
// Set the last packet number after we have decrypted the packet |
// so we are confident is not attacker controlled. |
@@ -720,14 +673,9 @@ bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header, |
} |
break; |
case PACKET_8BYTE_CONNECTION_ID: |
- if (quic_version_ > QUIC_VERSION_32) { |
- public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID; |
- if (!FLAGS_quic_remove_v33_hacks2 && |
- perspective_ == Perspective::IS_CLIENT) { |
- public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD; |
- } |
- |
- } else { |
+ public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID; |
+ if (!FLAGS_quic_remove_v33_hacks2 && |
+ perspective_ == Perspective::IS_CLIENT) { |
public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD; |
} |
if (!writer->WriteUInt8(public_flags) || |
@@ -761,17 +709,6 @@ bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header, |
header.packet_number, writer)) { |
return false; |
} |
- if (quic_version_ > QUIC_VERSION_33) { |
- return true; |
- } |
- |
- uint8_t private_flags = 0; |
- if (header.entropy_flag) { |
- private_flags |= PACKET_PRIVATE_FLAGS_ENTROPY; |
- } |
- if (!writer->WriteUInt8(private_flags)) { |
- return false; |
- } |
return true; |
} |
@@ -926,12 +863,8 @@ bool QuicFramer::ProcessPublicHeader(QuicDataReader* reader, |
} |
// A nonce should only be present in packets from the server to the client, |
- // which are neither version negotiation nor public reset packets |
- // and only for versions after QUIC_VERSION_32. Earlier versions will |
- // set this bit when indicating an 8-byte connection ID, which should |
- // not be interpreted as indicating a nonce is present. |
- if (quic_version_ > QUIC_VERSION_32 && |
- public_flags & PACKET_PUBLIC_FLAGS_NONCE && |
+ // which are neither version negotiation nor public reset packets. |
+ if (public_flags & PACKET_PUBLIC_FLAGS_NONCE && |
!(public_flags & PACKET_PUBLIC_FLAGS_VERSION) && |
!(public_flags & PACKET_PUBLIC_FLAGS_RST) && |
// The nonce flag from a client is ignored and is assumed to be an older |
@@ -983,37 +916,6 @@ uint8_t QuicFramer::GetSequenceNumberFlags( |
} |
// static |
-QuicFramer::AckFrameInfo QuicFramer::GetAckFrameInfo( |
- const QuicAckFrame& frame) { |
- AckFrameInfo ack_info; |
- if (frame.packets.Empty()) { |
- return ack_info; |
- } |
- DCHECK_GE(frame.largest_observed, frame.packets.Max()); |
- QuicPacketNumber last_largest_missing = 0; |
- for (const Interval<QuicPacketNumber>& interval : frame.packets) { |
- for (QuicPacketNumber interval_start = interval.min(); |
- interval_start < interval.max(); |
- interval_start += (1ull + std::numeric_limits<uint8_t>::max())) { |
- uint8_t cur_range_length = |
- interval.max() - interval_start > std::numeric_limits<uint8_t>::max() |
- ? std::numeric_limits<uint8_t>::max() |
- : (interval.max() - interval_start) - 1; |
- ack_info.nack_ranges[interval_start] = cur_range_length; |
- } |
- ack_info.max_delta = |
- max(ack_info.max_delta, last_largest_missing == 0 |
- ? QuicPacketNumber{0} |
- : (interval.min() - last_largest_missing)); |
- last_largest_missing = interval.max() - 1; |
- } |
- // Include the range to the largest observed. |
- ack_info.max_delta = |
- max(ack_info.max_delta, frame.largest_observed - last_largest_missing); |
- return ack_info; |
-} |
- |
-// static |
QuicFramer::NewAckFrameInfo QuicFramer::GetNewAckFrameInfo( |
const QuicAckFrame& frame) { |
NewAckFrameInfo new_ack_info; |
@@ -1078,24 +980,6 @@ bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, |
return true; |
} |
-bool QuicFramer::ProcessAuthenticatedHeader(QuicDataReader* reader, |
- QuicPacketHeader* header) { |
- uint8_t private_flags; |
- if (!reader->ReadBytes(&private_flags, 1)) { |
- set_detailed_error("Unable to read private flags."); |
- return RaiseError(QUIC_INVALID_PACKET_HEADER); |
- } |
- |
- if (private_flags > PACKET_PRIVATE_FLAGS_MAX) { |
- set_detailed_error("Illegal private flags value."); |
- return RaiseError(QUIC_INVALID_PACKET_HEADER); |
- } |
- |
- header->entropy_flag = (private_flags & PACKET_PRIVATE_FLAGS_ENTROPY) != 0; |
- header->entropy_hash = GetPacketEntropyHash(*header); |
- return true; |
-} |
- |
bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) { |
if (!reader->ReadBytes(path_id, 1)) { |
return false; |
@@ -1152,14 +1036,8 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader, |
// Ack Frame |
if (frame_type & kQuicFrameTypeAckMask) { |
QuicAckFrame frame; |
- if (quic_version_ <= QUIC_VERSION_33) { |
- if (!ProcessAckFrame(reader, frame_type, &frame)) { |
- return RaiseError(QUIC_INVALID_ACK_DATA); |
- } |
- } else { |
- if (!ProcessNewAckFrame(reader, frame_type, &frame)) { |
- return RaiseError(QUIC_INVALID_ACK_DATA); |
- } |
+ if (!ProcessNewAckFrame(reader, frame_type, &frame)) { |
+ return RaiseError(QUIC_INVALID_ACK_DATA); |
} |
if (!visitor_->OnAckFrame(frame)) { |
DVLOG(1) << "Visitor asked to stop further processing."; |
@@ -1352,83 +1230,6 @@ bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader, |
return true; |
} |
-bool QuicFramer::ProcessAckFrame(QuicDataReader* reader, |
- uint8_t frame_type, |
- QuicAckFrame* ack_frame) { |
- // Determine the three lengths from the frame type: largest observed length, |
- // missing packet number length, and missing range length. |
- const QuicPacketNumberLength missing_packet_number_length = |
- ReadSequenceNumberLength(frame_type); |
- frame_type >>= kQuicSequenceNumberLengthShift; |
- const QuicPacketNumberLength largest_observed_packet_number_length = |
- ReadSequenceNumberLength(frame_type); |
- frame_type >>= kQuicSequenceNumberLengthShift; |
- ack_frame->is_truncated = frame_type & kQuicAckTruncatedMask; |
- frame_type >>= kQuicAckTruncatedShift; |
- bool has_nacks = frame_type & kQuicHasNacksMask; |
- |
- if (!reader->ReadBytes(&ack_frame->entropy_hash, 1)) { |
- set_detailed_error("Unable to read entropy hash for received packets."); |
- return false; |
- } |
- |
- if (!reader->ReadBytes(&ack_frame->largest_observed, |
- largest_observed_packet_number_length)) { |
- set_detailed_error("Unable to read largest observed."); |
- return false; |
- } |
- |
- uint64_t ack_delay_time_us; |
- if (!reader->ReadUFloat16(&ack_delay_time_us)) { |
- set_detailed_error("Unable to read ack delay time."); |
- return false; |
- } |
- |
- if (ack_delay_time_us == kUFloat16MaxValue) { |
- ack_frame->ack_delay_time = QuicTime::Delta::Infinite(); |
- } else { |
- ack_frame->ack_delay_time = |
- QuicTime::Delta::FromMicroseconds(ack_delay_time_us); |
- } |
- |
- if (!ProcessTimestampsInAckFrame(reader, ack_frame)) { |
- return false; |
- } |
- |
- if (!has_nacks) { |
- return true; |
- } |
- |
- uint8_t num_missing_ranges; |
- if (!reader->ReadBytes(&num_missing_ranges, 1)) { |
- set_detailed_error("Unable to read num missing packet ranges."); |
- return false; |
- } |
- |
- QuicPacketNumber last_packet_number = ack_frame->largest_observed; |
- for (size_t i = 0; i < num_missing_ranges; ++i) { |
- QuicPacketNumber missing_delta = 0; |
- if (!reader->ReadBytes(&missing_delta, missing_packet_number_length)) { |
- set_detailed_error("Unable to read missing packet number delta."); |
- return false; |
- } |
- last_packet_number -= missing_delta; |
- QuicPacketNumber range_length = 0; |
- if (!reader->ReadBytes(&range_length, PACKET_1BYTE_PACKET_NUMBER)) { |
- set_detailed_error("Unable to read missing packet number range."); |
- return false; |
- } |
- ack_frame->packets.Add(last_packet_number - range_length, |
- last_packet_number + 1); |
- // Subtract an extra 1 to ensure ranges are represented efficiently and |
- // can't overlap by 1 packet number. This allows a missing_delta of 0 |
- // to represent an adjacent nack range. |
- last_packet_number -= (range_length + 1); |
- } |
- |
- return true; |
-} |
- |
bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, |
uint8_t frame_type, |
QuicAckFrame* ack_frame) { |
@@ -1442,7 +1243,6 @@ bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, |
frame_type >>= kQuicSequenceNumberLengthShift; |
frame_type >>= kQuicHasMultipleAckBlocksShift; |
bool has_ack_blocks = frame_type & kQuicHasMultipleAckBlocksMask; |
- ack_frame->missing = false; |
if (!reader->ReadBytes(&ack_frame->largest_observed, largest_acked_length)) { |
set_detailed_error("Unable to read largest acked."); |
@@ -1508,9 +1308,6 @@ bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, |
bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader, |
QuicAckFrame* ack_frame) { |
- if (ack_frame->is_truncated) { |
- return true; |
- } |
uint8_t num_received_packets; |
if (!reader->ReadBytes(&num_received_packets, 1)) { |
set_detailed_error("Unable to read num received packets."); |
@@ -1569,13 +1366,6 @@ bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader, |
bool QuicFramer::ProcessStopWaitingFrame(QuicDataReader* reader, |
const QuicPacketHeader& header, |
QuicStopWaitingFrame* stop_waiting) { |
- if (quic_version_ <= QUIC_VERSION_33) { |
- if (!reader->ReadBytes(&stop_waiting->entropy_hash, 1)) { |
- set_detailed_error("Unable to read entropy hash for sent packets."); |
- return false; |
- } |
- } |
- |
QuicPacketNumber least_unacked_delta = 0; |
if (!reader->ReadBytes(&least_unacked_delta, |
header.public_header.packet_number_length)) { |
@@ -1843,8 +1633,7 @@ bool QuicFramer::DecryptPayload(QuicDataReader* encrypted_reader, |
} |
bool try_alternative_decryption = true; |
if (alternative_decrypter_level_ == ENCRYPTION_INITIAL) { |
- if (perspective_ == Perspective::IS_CLIENT && |
- quic_version_ > QUIC_VERSION_32) { |
+ if (perspective_ == Perspective::IS_CLIENT) { |
if (header.public_header.nonce == nullptr) { |
// Can not use INITIAL decryption without a diversification nonce. |
try_alternative_decryption = false; |
@@ -1898,30 +1687,6 @@ size_t QuicFramer::GetAckFrameSize( |
const QuicAckFrame& ack, |
QuicPacketNumberLength packet_number_length) { |
size_t ack_size = 0; |
- if (quic_version_ <= QUIC_VERSION_33) { |
- AckFrameInfo ack_info = GetAckFrameInfo(ack); |
- QuicPacketNumberLength largest_observed_length = |
- GetMinSequenceNumberLength(ack.largest_observed); |
- QuicPacketNumberLength missing_packet_number_length = |
- GetMinSequenceNumberLength(ack_info.max_delta); |
- |
- ack_size = GetMinAckFrameSize(quic_version_, largest_observed_length); |
- if (!ack_info.nack_ranges.empty()) { |
- ack_size += kNumberOfNackRangesSize; |
- ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * |
- (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); |
- } |
- |
- // In version 23, if the ack will be truncated due to too many nack ranges, |
- // then do not include the number of timestamps (1 byte). |
- if (ack_info.nack_ranges.size() <= kMaxNackRanges) { |
- // 1 byte for the number of timestamps. |
- ack_size += 1; |
- ack_size += GetAckFrameTimeStampSize(ack); |
- } |
- |
- return ack_size; |
- } |
NewAckFrameInfo ack_info = GetNewAckFrameInfo(ack); |
QuicPacketNumberLength largest_acked_length = |
@@ -2101,141 +1866,6 @@ void QuicFramer::set_version(const QuicVersion version) { |
quic_version_ = version; |
} |
-bool QuicFramer::AppendAckFrameAndTypeByte(const QuicPacketHeader& header, |
- const QuicAckFrame& frame, |
- QuicDataWriter* writer) { |
- AckFrameInfo ack_info = GetAckFrameInfo(frame); |
- QuicPacketNumber ack_largest_observed = frame.largest_observed; |
- QuicPacketNumberLength largest_observed_length = |
- GetMinSequenceNumberLength(ack_largest_observed); |
- QuicPacketNumberLength missing_packet_number_length = |
- GetMinSequenceNumberLength(ack_info.max_delta); |
- // Determine whether we need to truncate ranges. |
- size_t available_range_bytes = |
- writer->capacity() - writer->length() - kNumberOfNackRangesSize - |
- GetMinAckFrameSize(quic_version_, largest_observed_length); |
- size_t max_num_ranges = |
- available_range_bytes / |
- (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); |
- max_num_ranges = min(kMaxNackRanges, max_num_ranges); |
- bool truncated = ack_info.nack_ranges.size() > max_num_ranges; |
- DVLOG_IF(1, truncated) << "Truncating ack from " |
- << ack_info.nack_ranges.size() << " ranges to " |
- << max_num_ranges; |
- // Write out the type byte by setting the low order bits and doing shifts |
- // to make room for the next bit flags to be set. |
- // Whether there are any nacks. |
- uint8_t type_byte = ack_info.nack_ranges.empty() ? 0 : kQuicHasNacksMask; |
- |
- // truncating bit. |
- type_byte <<= kQuicAckTruncatedShift; |
- type_byte |= truncated ? kQuicAckTruncatedMask : 0; |
- |
- // Largest observed packet number length. |
- type_byte <<= kQuicSequenceNumberLengthShift; |
- type_byte |= GetSequenceNumberFlags(largest_observed_length); |
- |
- // Missing packet number length. |
- type_byte <<= kQuicSequenceNumberLengthShift; |
- type_byte |= GetSequenceNumberFlags(missing_packet_number_length); |
- |
- type_byte |= kQuicFrameTypeAckMask; |
- |
- if (!writer->WriteUInt8(type_byte)) { |
- QUIC_BUG << "type byte failed"; |
- return false; |
- } |
- |
- QuicPacketEntropyHash ack_entropy_hash = frame.entropy_hash; |
- NackRangeMap::reverse_iterator ack_iter = ack_info.nack_ranges.rbegin(); |
- if (truncated) { |
- // Skip the nack ranges which the truncated ack won't include and set |
- // a correct largest observed for the truncated ack. |
- for (size_t i = 1; i < (ack_info.nack_ranges.size() - max_num_ranges); |
- ++i) { |
- ++ack_iter; |
- } |
- // If the last range is followed by acks, include them. |
- // If the last range is followed by another range, specify the end of the |
- // range as the largest_observed. |
- ack_largest_observed = ack_iter->first - 1; |
- // Also update the entropy so it matches the largest observed. |
- ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed); |
- ++ack_iter; |
- } |
- |
- if (!writer->WriteUInt8(ack_entropy_hash)) { |
- QUIC_BUG << "hash failed."; |
- return false; |
- } |
- |
- if (!AppendPacketSequenceNumber(largest_observed_length, ack_largest_observed, |
- writer)) { |
- QUIC_BUG << "AppendPacketSequenceNumber failed. " |
- << "largest_observed_length: " << largest_observed_length |
- << " ack_largest_observed: " << ack_largest_observed; |
- return false; |
- } |
- |
- uint64_t ack_delay_time_us = kUFloat16MaxValue; |
- if (!frame.ack_delay_time.IsInfinite()) { |
- DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds()); |
- ack_delay_time_us = frame.ack_delay_time.ToMicroseconds(); |
- } |
- |
- if (!writer->WriteUFloat16(ack_delay_time_us)) { |
- QUIC_BUG << "ack delay time failed."; |
- return false; |
- } |
- |
- // Timestamp goes at the end of the required fields. |
- if (!truncated) { |
- if (!AppendTimestampToAckFrame(frame, writer)) { |
- QUIC_BUG << "AppendTimestampToAckFrame failed"; |
- return false; |
- } |
- } |
- |
- if (ack_info.nack_ranges.empty()) { |
- return true; |
- } |
- |
- const uint8_t num_missing_ranges = |
- static_cast<uint8_t>(min(ack_info.nack_ranges.size(), max_num_ranges)); |
- if (!writer->WriteBytes(&num_missing_ranges, 1)) { |
- QUIC_BUG << "num_missing_ranges failed: " |
- << static_cast<uint32_t>(num_missing_ranges); |
- return false; |
- } |
- |
- int num_ranges_written = 0; |
- QuicPacketNumber last_sequence_written = ack_largest_observed; |
- for (; ack_iter != ack_info.nack_ranges.rend(); ++ack_iter) { |
- // Calculate the delta to the last number in the range. |
- QuicPacketNumber missing_delta = |
- last_sequence_written - (ack_iter->first + ack_iter->second); |
- if (!AppendPacketSequenceNumber(missing_packet_number_length, missing_delta, |
- writer)) { |
- QUIC_BUG << "AppendPacketSequenceNumber failed: " |
- << "missing_packet_number_length: " |
- << missing_packet_number_length << " missing_delta " |
- << missing_delta; |
- return false; |
- } |
- if (!AppendPacketSequenceNumber(PACKET_1BYTE_PACKET_NUMBER, |
- ack_iter->second, writer)) { |
- QUIC_BUG << "AppendPacketSequenceNumber failed"; |
- return false; |
- } |
- // Subtract 1 so a missing_delta of 0 means an adjacent range. |
- last_sequence_written = ack_iter->first - 1; |
- ++num_ranges_written; |
- } |
- DCHECK_EQ(num_missing_ranges, num_ranges_written); |
- |
- return true; |
-} |
- |
bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, |
QuicDataWriter* writer) { |
const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame); |
@@ -2457,12 +2087,6 @@ bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header, |
header.packet_number - frame.least_unacked; |
const QuicPacketNumber length_shift = |
header.public_header.packet_number_length * 8; |
- if (quic_version_ <= QUIC_VERSION_33) { |
- if (!writer->WriteUInt8(frame.entropy_hash)) { |
- QUIC_BUG << " hash failed"; |
- return false; |
- } |
- } |
if (least_unacked_delta >> length_shift > 0) { |
QUIC_BUG << "packet_number_length " |