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

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

Issue 2334363002: Landing Recent QUIC changes until Sat Sep 10 00:32:41 (Closed)
Patch Set: Revase Created 4 years, 3 months 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 87ef7af79d09dd1aa256e41c585bd31bbf7f9959..a6788128624521e0c2549c0cb37014956b0ee1cb 100644
--- a/net/quic/core/quic_framer.cc
+++ b/net/quic/core/quic_framer.cc
@@ -23,6 +23,7 @@
#include "net/quic/core/quic_socket_address_coder.h"
#include "net/quic/core/quic_utils.h"
+using base::ContainsKey;
using base::StringPiece;
using std::map;
using std::max;
@@ -142,6 +143,7 @@ QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
entropy_calculator_(nullptr),
error_(QUIC_NO_ERROR),
last_packet_number_(0),
+ largest_packet_number_(0),
last_path_id_(kInvalidPathId),
last_serialized_connection_id_(0),
supported_versions_(supported_versions),
@@ -799,21 +801,34 @@ const QuicTime::Delta QuicFramer::CalculateTimestampFromWire(
}
bool QuicFramer::IsValidPath(QuicPathId path_id,
- QuicPacketNumber* last_packet_number) {
- if (base::ContainsKey(closed_paths_, path_id)) {
+ QuicPacketNumber* base_packet_number) {
+ if (ContainsKey(closed_paths_, path_id)) {
// Path is closed.
return false;
}
- if (path_id == last_path_id_) {
- *last_packet_number = last_packet_number_;
- return true;
- }
+ if (FLAGS_quic_packet_numbers_largest_received) {
+ if (path_id == last_path_id_) {
+ *base_packet_number = largest_packet_number_;
+ return true;
+ }
- if (base::ContainsKey(last_packet_numbers_, path_id)) {
- *last_packet_number = last_packet_numbers_[path_id];
+ if (ContainsKey(largest_packet_numbers_, path_id)) {
+ *base_packet_number = largest_packet_numbers_[path_id];
+ } else {
+ *base_packet_number = 0;
+ }
} else {
- *last_packet_number = 0;
+ if (path_id == last_path_id_) {
+ *base_packet_number = last_packet_number_;
+ return true;
+ }
+
+ if (ContainsKey(last_packet_numbers_, path_id)) {
+ *base_packet_number = last_packet_numbers_[path_id];
+ } else {
+ *base_packet_number = 0;
+ }
}
return true;
@@ -824,11 +839,17 @@ void QuicFramer::SetLastPacketNumber(const QuicPacketHeader& header) {
if (last_path_id_ != kInvalidPathId) {
// Save current last packet number before changing path.
last_packet_numbers_[last_path_id_] = last_packet_number_;
+ if (FLAGS_quic_packet_numbers_largest_received) {
+ largest_packet_numbers_[last_path_id_] = largest_packet_number_;
+ }
}
// Change path.
last_path_id_ = header.path_id;
}
last_packet_number_ = header.packet_number;
+ if (FLAGS_quic_packet_numbers_largest_received) {
+ largest_packet_number_ = max(header.packet_number, largest_packet_number_);
+ }
}
void QuicFramer::OnPathClosed(QuicPathId path_id) {
@@ -838,7 +859,7 @@ void QuicFramer::OnPathClosed(QuicPathId path_id) {
QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire(
QuicPacketNumberLength packet_number_length,
- QuicPacketNumber last_packet_number,
+ QuicPacketNumber base_packet_number,
QuicPacketNumber packet_number) const {
// The new packet number might have wrapped to the next epoch, or
// it might have reverse wrapped to the previous epoch, or it might
@@ -850,8 +871,8 @@ QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire(
// number or an adjacent epoch.
const QuicPacketNumber epoch_delta = UINT64_C(1)
<< (8 * packet_number_length);
- QuicPacketNumber next_packet_number = last_packet_number + 1;
- QuicPacketNumber epoch = last_packet_number & ~(epoch_delta - 1);
+ QuicPacketNumber next_packet_number = base_packet_number + 1;
+ QuicPacketNumber epoch = base_packet_number & ~(epoch_delta - 1);
QuicPacketNumber prev_epoch = epoch - epoch_delta;
QuicPacketNumber next_epoch = epoch + epoch_delta;
@@ -935,8 +956,8 @@ bool QuicFramer::ProcessPublicHeader(QuicDataReader* reader,
// The nonce flag from a client is ignored and is assumed to be an older
// client indicating an eight-byte connection ID.
perspective_ == Perspective::IS_CLIENT) {
- if (!reader->ReadBytes(reinterpret_cast<uint8_t*>(last_nonce_),
- sizeof(last_nonce_))) {
+ if (!reader->ReadBytes(reinterpret_cast<uint8_t*>(last_nonce_.data()),
+ last_nonce_.size())) {
set_detailed_error("Unable to read nonce.");
return false;
}
@@ -1051,16 +1072,18 @@ bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
return RaiseError(QUIC_INVALID_PACKET_HEADER);
}
- QuicPacketNumber last_packet_number = last_packet_number_;
+ QuicPacketNumber base_packet_number =
+ FLAGS_quic_packet_numbers_largest_received ? largest_packet_number_
+ : last_packet_number_;
if (header->public_header.multipath_flag &&
- !IsValidPath(header->path_id, &last_packet_number)) {
+ !IsValidPath(header->path_id, &base_packet_number)) {
// Stop processing because path is closed.
return false;
}
if (!ProcessPacketSequenceNumber(
encrypted_reader, header->public_header.packet_number_length,
- last_packet_number, &header->packet_number)) {
+ base_packet_number, &header->packet_number)) {
set_detailed_error("Unable to read packet number.");
return RaiseError(QUIC_INVALID_PACKET_HEADER);
}
@@ -1128,7 +1151,7 @@ bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) {
bool QuicFramer::ProcessPacketSequenceNumber(
QuicDataReader* reader,
QuicPacketNumberLength packet_number_length,
- QuicPacketNumber last_packet_number,
+ QuicPacketNumber base_packet_number,
QuicPacketNumber* packet_number) {
QuicPacketNumber wire_packet_number = 0u;
if (!reader->ReadBytes(&wire_packet_number, packet_number_length)) {
@@ -1138,7 +1161,7 @@ bool QuicFramer::ProcessPacketSequenceNumber(
// TODO(ianswett): Explore the usefulness of trying multiple packet numbers
// in case the first guess is incorrect.
*packet_number = CalculatePacketNumberFromWire(
- packet_number_length, last_packet_number, wire_packet_number);
+ packet_number_length, base_packet_number, wire_packet_number);
return true;
}
« 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