summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_framer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/quic/quic_framer.cc')
-rw-r--r--net/quic/quic_framer.cc41
1 files changed, 28 insertions, 13 deletions
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc
index fa667f2..3d3e36f 100644
--- a/net/quic/quic_framer.cc
+++ b/net/quic/quic_framer.cc
@@ -621,12 +621,6 @@ bool QuicFramer::ProcessPublicResetPacket(
}
// TODO(satyamshekhar): validate nonce to protect against DoS.
- if (reset->GetUint64(kRSEQ, &packet.rejected_packet_number) !=
- QUIC_NO_ERROR) {
- set_detailed_error("Unable to read rejected packet number.");
- return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
- }
-
StringPiece address;
if (reset->GetStringPiece(kCADR, &address)) {
QuicSocketAddressCoder address_coder;
@@ -1009,9 +1003,16 @@ bool QuicFramer::ProcessAuthenticatedHeader(QuicDataReader* reader,
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);
+ if (quic_version_ > QUIC_VERSION_31) {
+ if (private_flags > PACKET_PRIVATE_FLAGS_MAX_VERSION_32) {
+ set_detailed_error("Illegal private flags value.");
+ return RaiseError(QUIC_INVALID_PACKET_HEADER);
+ }
+ } else {
+ 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;
@@ -1369,6 +1370,10 @@ bool QuicFramer::ProcessAckFrame(QuicDataReader* reader,
last_packet_number -= (range_length + 1);
}
+ if (quic_version_ > QUIC_VERSION_31) {
+ return true;
+ }
+
// Parse the revived packets list.
// TODO(ianswett): Change the ack frame so it only expresses one revived.
uint8_t num_revived_packets;
@@ -1753,7 +1758,10 @@ size_t QuicFramer::GetAckFrameSize(
size_t ack_size = GetMinAckFrameSize(largest_observed_length);
if (!ack_info.nack_ranges.empty()) {
- ack_size += kNumberOfNackRangesSize + kNumberOfRevivedPacketsSize;
+ ack_size += kNumberOfNackRangesSize;
+ if (quic_version_ <= QUIC_VERSION_31) {
+ ack_size += kNumberOfRevivedPacketsSize;
+ }
ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) *
(missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER);
}
@@ -1935,9 +1943,12 @@ bool QuicFramer::AppendAckFrameAndTypeByte(const QuicPacketHeader& header,
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() - kNumberOfRevivedPacketsSize -
- kNumberOfNackRangesSize - GetMinAckFrameSize(largest_observed_length);
+ size_t available_range_bytes = writer->capacity() - writer->length() -
+ kNumberOfNackRangesSize -
+ GetMinAckFrameSize(largest_observed_length);
+ if (quic_version_ <= QUIC_VERSION_31) {
+ available_range_bytes -= kNumberOfRevivedPacketsSize;
+ }
size_t max_num_ranges =
available_range_bytes /
(missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER);
@@ -2043,6 +2054,10 @@ bool QuicFramer::AppendAckFrameAndTypeByte(const QuicPacketHeader& header,
}
DCHECK_EQ(num_missing_ranges, num_ranges_written);
+ if (quic_version_ > QUIC_VERSION_31) {
+ return true;
+ }
+
// Append revived packets.
// FEC is not supported.
uint8_t num_revived_packets = 0;