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

Side by Side Diff: net/quic/quic_protocol.cc

Issue 420313005: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0723
Patch Set: change QUIC packet size to 1350 Created 6 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_protocol.h" 5 #include "net/quic/quic_protocol.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/quic_utils.h" 8 #include "net/quic/quic_utils.h"
9 9
10 using base::StringPiece; 10 using base::StringPiece;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 QuicVersionVector QuicSupportedVersions() { 152 QuicVersionVector QuicSupportedVersions() {
153 QuicVersionVector supported_versions; 153 QuicVersionVector supported_versions;
154 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { 154 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
155 supported_versions.push_back(kSupportedQuicVersions[i]); 155 supported_versions.push_back(kSupportedQuicVersions[i]);
156 } 156 }
157 return supported_versions; 157 return supported_versions;
158 } 158 }
159 159
160 QuicTag QuicVersionToQuicTag(const QuicVersion version) { 160 QuicTag QuicVersionToQuicTag(const QuicVersion version) {
161 switch (version) { 161 switch (version) {
162 case QUIC_VERSION_15:
163 return MakeQuicTag('Q', '0', '1', '5');
164 case QUIC_VERSION_16: 162 case QUIC_VERSION_16:
165 return MakeQuicTag('Q', '0', '1', '6'); 163 return MakeQuicTag('Q', '0', '1', '6');
166 case QUIC_VERSION_18: 164 case QUIC_VERSION_18:
167 return MakeQuicTag('Q', '0', '1', '8'); 165 return MakeQuicTag('Q', '0', '1', '8');
168 case QUIC_VERSION_19: 166 case QUIC_VERSION_19:
169 return MakeQuicTag('Q', '0', '1', '9'); 167 return MakeQuicTag('Q', '0', '1', '9');
170 case QUIC_VERSION_20: 168 case QUIC_VERSION_20:
171 return MakeQuicTag('Q', '0', '2', '0'); 169 return MakeQuicTag('Q', '0', '2', '0');
172 case QUIC_VERSION_21: 170 case QUIC_VERSION_21:
173 return MakeQuicTag('Q', '0', '2', '1'); 171 return MakeQuicTag('Q', '0', '2', '1');
(...skipping 16 matching lines...) Expand all
190 << QuicUtils::TagToString(version_tag); 188 << QuicUtils::TagToString(version_tag);
191 return QUIC_VERSION_UNSUPPORTED; 189 return QUIC_VERSION_UNSUPPORTED;
192 } 190 }
193 191
194 #define RETURN_STRING_LITERAL(x) \ 192 #define RETURN_STRING_LITERAL(x) \
195 case x: \ 193 case x: \
196 return #x 194 return #x
197 195
198 string QuicVersionToString(const QuicVersion version) { 196 string QuicVersionToString(const QuicVersion version) {
199 switch (version) { 197 switch (version) {
200 RETURN_STRING_LITERAL(QUIC_VERSION_15);
201 RETURN_STRING_LITERAL(QUIC_VERSION_16); 198 RETURN_STRING_LITERAL(QUIC_VERSION_16);
202 RETURN_STRING_LITERAL(QUIC_VERSION_18); 199 RETURN_STRING_LITERAL(QUIC_VERSION_18);
203 RETURN_STRING_LITERAL(QUIC_VERSION_19); 200 RETURN_STRING_LITERAL(QUIC_VERSION_19);
204 RETURN_STRING_LITERAL(QUIC_VERSION_20); 201 RETURN_STRING_LITERAL(QUIC_VERSION_20);
205 RETURN_STRING_LITERAL(QUIC_VERSION_21); 202 RETURN_STRING_LITERAL(QUIC_VERSION_21);
206 default: 203 default:
207 return "QUIC_VERSION_UNSUPPORTED"; 204 return "QUIC_VERSION_UNSUPPORTED";
208 } 205 }
209 } 206 }
210 207
(...skipping 23 matching lines...) Expand all
234 } 231 }
235 os << ", fec_flag: " << header.fec_flag 232 os << ", fec_flag: " << header.fec_flag
236 << ", entropy_flag: " << header.entropy_flag 233 << ", entropy_flag: " << header.entropy_flag
237 << ", entropy hash: " << static_cast<int>(header.entropy_hash) 234 << ", entropy hash: " << static_cast<int>(header.entropy_hash)
238 << ", sequence_number: " << header.packet_sequence_number 235 << ", sequence_number: " << header.packet_sequence_number
239 << ", is_in_fec_group:" << header.is_in_fec_group 236 << ", is_in_fec_group:" << header.is_in_fec_group
240 << ", fec_group: " << header.fec_group<< "}\n"; 237 << ", fec_group: " << header.fec_group<< "}\n";
241 return os; 238 return os;
242 } 239 }
243 240
244 ReceivedPacketInfo::ReceivedPacketInfo() 241 bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
245 : entropy_hash(0),
246 largest_observed(0),
247 delta_time_largest_observed(QuicTime::Delta::Infinite()),
248 is_truncated(false) {}
249
250 ReceivedPacketInfo::~ReceivedPacketInfo() {}
251
252 bool IsAwaitingPacket(const ReceivedPacketInfo& received_info,
253 QuicPacketSequenceNumber sequence_number) { 242 QuicPacketSequenceNumber sequence_number) {
254 return sequence_number > received_info.largest_observed || 243 return sequence_number > ack_frame.largest_observed ||
255 ContainsKey(received_info.missing_packets, sequence_number); 244 ContainsKey(ack_frame.missing_packets, sequence_number);
256 } 245 }
257 246
258 void InsertMissingPacketsBetween(ReceivedPacketInfo* received_info, 247 void InsertMissingPacketsBetween(QuicAckFrame* ack_frame,
259 QuicPacketSequenceNumber lower, 248 QuicPacketSequenceNumber lower,
260 QuicPacketSequenceNumber higher) { 249 QuicPacketSequenceNumber higher) {
261 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) { 250 for (QuicPacketSequenceNumber i = lower; i < higher; ++i) {
262 received_info->missing_packets.insert(i); 251 ack_frame->missing_packets.insert(i);
263 } 252 }
264 } 253 }
265 254
266 QuicStopWaitingFrame::QuicStopWaitingFrame() 255 QuicStopWaitingFrame::QuicStopWaitingFrame()
267 : entropy_hash(0), 256 : entropy_hash(0),
268 least_unacked(0) { 257 least_unacked(0) {
269 } 258 }
270 259
271 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} 260 QuicStopWaitingFrame::~QuicStopWaitingFrame() {}
272 261
273 QuicAckFrame::QuicAckFrame() {} 262 QuicAckFrame::QuicAckFrame()
263 : entropy_hash(0),
264 largest_observed(0),
265 delta_time_largest_observed(QuicTime::Delta::Infinite()),
266 is_truncated(false) {}
267
268 QuicAckFrame::~QuicAckFrame() {}
274 269
275 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP() 270 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP()
276 : receive_window(0) { 271 : receive_window(0) {
277 } 272 }
278 273
279 CongestionFeedbackMessageInterArrival::CongestionFeedbackMessageInterArrival() { 274 CongestionFeedbackMessageInterArrival::CongestionFeedbackMessageInterArrival() {
280 } 275 }
281 276
282 CongestionFeedbackMessageInterArrival:: 277 CongestionFeedbackMessageInterArrival::
283 ~CongestionFeedbackMessageInterArrival() {} 278 ~CongestionFeedbackMessageInterArrival() {}
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 } 372 }
378 373
379 QuicFecData::QuicFecData() : fec_group(0) {} 374 QuicFecData::QuicFecData() : fec_group(0) {}
380 375
381 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { 376 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) {
382 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) 377 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash)
383 << " least_unacked: " << sent_info.least_unacked; 378 << " least_unacked: " << sent_info.least_unacked;
384 return os; 379 return os;
385 } 380 }
386 381
387 ostream& operator<<(ostream& os, const ReceivedPacketInfo& received_info) { 382 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
388 os << "entropy_hash: " << static_cast<int>(received_info.entropy_hash) 383 os << "entropy_hash: " << static_cast<int>(ack_frame.entropy_hash)
389 << " is_truncated: " << received_info.is_truncated 384 << " is_truncated: " << ack_frame.is_truncated
390 << " largest_observed: " << received_info.largest_observed 385 << " largest_observed: " << ack_frame.largest_observed
391 << " delta_time_largest_observed: " 386 << " delta_time_largest_observed: "
392 << received_info.delta_time_largest_observed.ToMicroseconds() 387 << ack_frame.delta_time_largest_observed.ToMicroseconds()
393 << " missing_packets: [ "; 388 << " missing_packets: [ ";
394 for (SequenceNumberSet::const_iterator it = 389 for (SequenceNumberSet::const_iterator it = ack_frame.missing_packets.begin();
395 received_info.missing_packets.begin(); 390 it != ack_frame.missing_packets.end(); ++it) {
396 it != received_info.missing_packets.end(); ++it) {
397 os << *it << " "; 391 os << *it << " ";
398 } 392 }
399 os << " ] revived_packets: [ "; 393 os << " ] revived_packets: [ ";
400 for (SequenceNumberSet::const_iterator it = 394 for (SequenceNumberSet::const_iterator it = ack_frame.revived_packets.begin();
401 received_info.revived_packets.begin(); 395 it != ack_frame.revived_packets.end(); ++it) {
402 it != received_info.revived_packets.end(); ++it) {
403 os << *it << " "; 396 os << *it << " ";
404 } 397 }
405 os << " ]"; 398 os << " ]";
406 return os; 399 return os;
407 } 400 }
408 401
409 ostream& operator<<(ostream& os, const QuicFrame& frame) { 402 ostream& operator<<(ostream& os, const QuicFrame& frame) {
410 switch (frame.type) { 403 switch (frame.type) {
411 case PADDING_FRAME: { 404 case PADDING_FRAME: {
412 os << "type { PADDING_FRAME } "; 405 os << "type { PADDING_FRAME } ";
(...skipping 30 matching lines...) Expand all
443 } 436 }
444 case CONGESTION_FEEDBACK_FRAME: { 437 case CONGESTION_FEEDBACK_FRAME: {
445 os << "type { CONGESTION_FEEDBACK_FRAME } " 438 os << "type { CONGESTION_FEEDBACK_FRAME } "
446 << *(frame.congestion_feedback_frame); 439 << *(frame.congestion_feedback_frame);
447 break; 440 break;
448 } 441 }
449 case STOP_WAITING_FRAME: { 442 case STOP_WAITING_FRAME: {
450 os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame); 443 os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame);
451 break; 444 break;
452 } 445 }
446 case PING_FRAME: {
447 os << "type { PING_FRAME } ";
448 break;
449 }
453 default: { 450 default: {
454 LOG(ERROR) << "Unknown frame type: " << frame.type; 451 LOG(ERROR) << "Unknown frame type: " << frame.type;
455 break; 452 break;
456 } 453 }
457 } 454 }
458 return os; 455 return os;
459 } 456 }
460 457
461 ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) { 458 ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) {
462 os << "stream_id { " << rst_frame.stream_id << " } " 459 os << "stream_id { " << rst_frame.stream_id << " } "
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) { 491 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) {
495 os << "stream_id { " << stream_frame.stream_id << " } " 492 os << "stream_id { " << stream_frame.stream_id << " } "
496 << "fin { " << stream_frame.fin << " } " 493 << "fin { " << stream_frame.fin << " } "
497 << "offset { " << stream_frame.offset << " } " 494 << "offset { " << stream_frame.offset << " } "
498 << "data { " 495 << "data { "
499 << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString())) 496 << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString()))
500 << " }\n"; 497 << " }\n";
501 return os; 498 return os;
502 } 499 }
503 500
504 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
505 os << "sent info { " << ack_frame.sent_info << " } "
506 << "received info { " << ack_frame.received_info << " }\n";
507 return os;
508 }
509
510 ostream& operator<<(ostream& os, 501 ostream& operator<<(ostream& os,
511 const QuicCongestionFeedbackFrame& congestion_frame) { 502 const QuicCongestionFeedbackFrame& congestion_frame) {
512 os << "type: " << congestion_frame.type; 503 os << "type: " << congestion_frame.type;
513 switch (congestion_frame.type) { 504 switch (congestion_frame.type) {
514 case kInterArrival: { 505 case kInterArrival: {
515 const CongestionFeedbackMessageInterArrival& inter_arrival = 506 const CongestionFeedbackMessageInterArrival& inter_arrival =
516 congestion_frame.inter_arrival; 507 congestion_frame.inter_arrival;
517 os << " received packets: [ "; 508 os << " received packets: [ ";
518 for (TimeMap::const_iterator it = 509 for (TimeMap::const_iterator it =
519 inter_arrival.received_packet_times.begin(); 510 inter_arrival.received_packet_times.begin();
520 it != inter_arrival.received_packet_times.end(); ++it) { 511 it != inter_arrival.received_packet_times.end(); ++it) {
521 os << it->first << "@" << it->second.ToDebuggingValue() << " "; 512 os << it->first << "@" << it->second.ToDebuggingValue() << " ";
522 } 513 }
523 os << "]"; 514 os << "]";
524 break; 515 break;
525 } 516 }
526 case kFixRate: {
527 os << " bitrate_in_bytes_per_second: "
528 << congestion_frame.fix_rate.bitrate.ToBytesPerSecond();
529 break;
530 }
531 case kTCP: { 517 case kTCP: {
532 const CongestionFeedbackMessageTCP& tcp = congestion_frame.tcp; 518 const CongestionFeedbackMessageTCP& tcp = congestion_frame.tcp;
533 os << " receive_window: " << tcp.receive_window; 519 os << " receive_window: " << tcp.receive_window;
534 break; 520 break;
535 } 521 }
536 } 522 }
537 return os; 523 return os;
538 } 524 }
539 525
540 CongestionFeedbackMessageFixRate::CongestionFeedbackMessageFixRate()
541 : bitrate(QuicBandwidth::Zero()) {
542 }
543
544 QuicGoAwayFrame::QuicGoAwayFrame() 526 QuicGoAwayFrame::QuicGoAwayFrame()
545 : error_code(QUIC_NO_ERROR), 527 : error_code(QUIC_NO_ERROR),
546 last_good_stream_id(0) { 528 last_good_stream_id(0) {
547 } 529 }
548 530
549 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, 531 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code,
550 QuicStreamId last_good_stream_id, 532 QuicStreamId last_good_stream_id,
551 const string& reason) 533 const string& reason)
552 : error_code(error_code), 534 : error_code(error_code),
553 last_good_stream_id(last_good_stream_id), 535 last_good_stream_id(last_good_stream_id),
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 sent_time(QuicTime::Zero()), 762 sent_time(QuicTime::Zero()),
781 bytes_sent(0), 763 bytes_sent(0),
782 nack_count(0), 764 nack_count(0),
783 transmission_type(transmission_type), 765 transmission_type(transmission_type),
784 all_transmissions(all_transmissions), 766 all_transmissions(all_transmissions),
785 in_flight(false) { 767 in_flight(false) {
786 all_transmissions->insert(sequence_number); 768 all_transmissions->insert(sequence_number);
787 } 769 }
788 770
789 } // namespace net 771 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698