Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(474)

Unified Diff: net/quic/core/quic_framer.cc

Issue 2515613002: deprecate FLAGS_quic_disable_pre_34 (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698