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

Unified Diff: net/quic/quic_protocol.cc

Issue 12334063: Land recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more EXPECT_FALSE Created 7 years, 10 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/quic_protocol.h ('k') | net/quic/quic_protocol_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_protocol.cc
diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
index 14ad48b18ded79b20b4fb9374a4dc34b5cfe2a85..42ee6204c205668e9a5c10f0eb358e68b3c1f523 100644
--- a/net/quic/quic_protocol.cc
+++ b/net/quic/quic_protocol.cc
@@ -9,6 +9,7 @@ using base::StringPiece;
using std::map;
using std::numeric_limits;
using std::ostream;
+using std::string;
namespace net {
@@ -24,43 +25,37 @@ QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
data(data) {
}
+ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
+ os << "{ guid: " << header.public_header.guid
+ << ", reset_flag: " << header.public_header.reset_flag
+ << ", version_flag: " << header.public_header.version_flag
+ << ", fec_flag: " << header.fec_flag
+ << ", entropy_flag: " << header.entropy_flag
+ << ", entropy hash: " << static_cast<int>(header.entropy_hash)
+ << ", sequence_number: " << header.packet_sequence_number
+ << ", fec_group: " << header.fec_group<< "}\n";
+ return os;
+}
+
// TODO(ianswett): Initializing largest_observed to 0 should not be necessary.
-ReceivedPacketInfo::ReceivedPacketInfo() : largest_observed(0) {}
+ReceivedPacketInfo::ReceivedPacketInfo()
+ : largest_observed(0) {
+}
ReceivedPacketInfo::~ReceivedPacketInfo() {}
-void ReceivedPacketInfo::RecordReceived(
- QuicPacketSequenceNumber sequence_number) {
- DCHECK(IsAwaitingPacket(sequence_number));
- if (largest_observed < sequence_number) {
- DCHECK_LT(sequence_number - largest_observed,
- numeric_limits<uint16>::max());
- // We've got a new high sequence number. Note any new intermediate missing
- // packets, and update the last_ack data.
- for (QuicPacketSequenceNumber i = largest_observed + 1;
- i < sequence_number; ++i) {
- DVLOG(1) << "missing " << i;
- missing_packets.insert(i);
- }
- largest_observed = sequence_number;
- } else {
- // We've gotten one of the out of order packets - remove it from our
- // "missing packets" list.
- DVLOG(1) << "Removing " << sequence_number << " from missing list";
- missing_packets.erase(sequence_number);
- }
-}
-
-bool ReceivedPacketInfo::IsAwaitingPacket(
- QuicPacketSequenceNumber sequence_number) const {
- return sequence_number > largest_observed ||
- ContainsKey(missing_packets, sequence_number);
+bool IsAwaitingPacket(const ReceivedPacketInfo& received_info,
+ QuicPacketSequenceNumber sequence_number) {
+ return sequence_number > received_info.largest_observed ||
+ ContainsKey(received_info.missing_packets, sequence_number);
}
-void ReceivedPacketInfo::ClearMissingBefore(
- QuicPacketSequenceNumber least_unacked) {
- missing_packets.erase(missing_packets.begin(),
- missing_packets.lower_bound(least_unacked));
+void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info,
+ QuicPacketSequenceNumber lower,
+ QuicPacketSequenceNumber higher) {
+ for (QuicPacketSequenceNumber i = lower; i < higher; ++i) {
+ received_info->missing_packets.insert(i);
+ }
}
SentPacketInfo::SentPacketInfo() {}
@@ -70,24 +65,24 @@ SentPacketInfo::~SentPacketInfo() {}
// Testing convenience method.
QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_observed,
QuicPacketSequenceNumber least_unacked) {
- for (QuicPacketSequenceNumber seq_num = 1;
- seq_num <= largest_observed; ++seq_num) {
- received_info.RecordReceived(seq_num);
- }
received_info.largest_observed = largest_observed;
+ received_info.entropy_hash = 0;
sent_info.least_unacked = least_unacked;
+ sent_info.entropy_hash = 0;
}
ostream& operator<<(ostream& os, const SentPacketInfo& sent_info) {
- os << "least_unacked: " << sent_info.least_unacked;
+ os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash);
+ os << " least_unacked: " << sent_info.least_unacked;
return os;
}
ostream& operator<<(ostream& os, const ReceivedPacketInfo& received_info) {
- os << "largest_observed: "
- << received_info.largest_observed
+ os << "entropy_hash: " << static_cast<int>(received_info.entropy_hash)
+ << " largest_observed: " << received_info.largest_observed
<< " missing_packets: [ ";
- for (SequenceSet::const_iterator it = received_info.missing_packets.begin();
+ for (SequenceNumberSet::const_iterator it =
+ received_info.missing_packets.begin();
it != received_info.missing_packets.end(); ++it) {
os << *it << " ";
}
@@ -151,6 +146,15 @@ CongestionFeedbackMessageInterArrival() {}
CongestionFeedbackMessageInterArrival::
~CongestionFeedbackMessageInterArrival() {}
+QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code,
+ QuicStreamId last_good_stream_id,
+ const string& reason)
+ : error_code(error_code),
+ last_good_stream_id(last_good_stream_id),
+ reason_phrase(reason) {
+ DCHECK_LE(error_code, numeric_limits<uint8>::max());
+}
+
QuicFecData::QuicFecData() {}
bool QuicFecData::operator==(const QuicFecData& other) const {
@@ -169,6 +173,58 @@ QuicData::~QuicData() {
}
}
+RetransmittableFrames::RetransmittableFrames() {}
+
+RetransmittableFrames::~RetransmittableFrames() {
+ for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) {
+ switch (it->type) {
+ case PADDING_FRAME:
+ delete it->padding_frame;
+ break;
+ case STREAM_FRAME:
+ delete it->stream_frame;
+ break;
+ case ACK_FRAME:
+ delete it->ack_frame;
+ break;
+ case CONGESTION_FEEDBACK_FRAME:
+ delete it->congestion_feedback_frame;
+ break;
+ case RST_STREAM_FRAME:
+ delete it->rst_stream_frame;
+ break;
+ case CONNECTION_CLOSE_FRAME:
+ delete it->connection_close_frame;
+ break;
+ case GOAWAY_FRAME:
+ delete it->goaway_frame;
+ break;
+ case NUM_FRAME_TYPES:
+ DCHECK(false) << "Cannot delete type: " << it->type;
+ }
+ }
+ STLDeleteElements(&stream_data_);
+}
+
+const QuicFrame& RetransmittableFrames::AddStreamFrame(
+ QuicStreamFrame* stream_frame) {
+ // Make an owned copy of the StringPiece.
+ string* stream_data = new string(stream_frame->data.data(),
+ stream_frame->data.size());
+ // Ensure the frame's StringPiece points to the owned copy of the data.
+ stream_frame->data = StringPiece(*stream_data);
+ stream_data_.push_back(stream_data);
+ frames_.push_back(QuicFrame(stream_frame));
+ return frames_.back();
+}
+
+const QuicFrame& RetransmittableFrames::AddNonStreamFrame(
+ const QuicFrame& frame) {
+ DCHECK_NE(frame.type, STREAM_FRAME);
+ frames_.push_back(frame);
+ return frames_.back();
+}
+
ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) {
os << s.length() << "-byte data";
return os;
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/quic_protocol_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698