OLD | NEW |
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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 QuicVersionVector QuicSupportedVersions() { | 151 QuicVersionVector QuicSupportedVersions() { |
152 QuicVersionVector supported_versions; | 152 QuicVersionVector supported_versions; |
153 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 153 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
154 supported_versions.push_back(kSupportedQuicVersions[i]); | 154 supported_versions.push_back(kSupportedQuicVersions[i]); |
155 } | 155 } |
156 return supported_versions; | 156 return supported_versions; |
157 } | 157 } |
158 | 158 |
159 QuicTag QuicVersionToQuicTag(const QuicVersion version) { | 159 QuicTag QuicVersionToQuicTag(const QuicVersion version) { |
160 switch (version) { | 160 switch (version) { |
161 case QUIC_VERSION_21: | |
162 return MakeQuicTag('Q', '0', '2', '1'); | |
163 case QUIC_VERSION_22: | |
164 return MakeQuicTag('Q', '0', '2', '2'); | |
165 case QUIC_VERSION_23: | 161 case QUIC_VERSION_23: |
166 return MakeQuicTag('Q', '0', '2', '3'); | 162 return MakeQuicTag('Q', '0', '2', '3'); |
| 163 case QUIC_VERSION_24: |
| 164 return MakeQuicTag('Q', '0', '2', '4'); |
167 default: | 165 default: |
168 // This shold be an ERROR because we should never attempt to convert an | 166 // This shold be an ERROR because we should never attempt to convert an |
169 // invalid QuicVersion to be written to the wire. | 167 // invalid QuicVersion to be written to the wire. |
170 LOG(ERROR) << "Unsupported QuicVersion: " << version; | 168 LOG(ERROR) << "Unsupported QuicVersion: " << version; |
171 return 0; | 169 return 0; |
172 } | 170 } |
173 } | 171 } |
174 | 172 |
175 QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) { | 173 QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) { |
176 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 174 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
177 if (version_tag == QuicVersionToQuicTag(kSupportedQuicVersions[i])) { | 175 if (version_tag == QuicVersionToQuicTag(kSupportedQuicVersions[i])) { |
178 return kSupportedQuicVersions[i]; | 176 return kSupportedQuicVersions[i]; |
179 } | 177 } |
180 } | 178 } |
181 // Reading from the client so this should not be considered an ERROR. | 179 // Reading from the client so this should not be considered an ERROR. |
182 DVLOG(1) << "Unsupported QuicTag version: " | 180 DVLOG(1) << "Unsupported QuicTag version: " |
183 << QuicUtils::TagToString(version_tag); | 181 << QuicUtils::TagToString(version_tag); |
184 return QUIC_VERSION_UNSUPPORTED; | 182 return QUIC_VERSION_UNSUPPORTED; |
185 } | 183 } |
186 | 184 |
187 #define RETURN_STRING_LITERAL(x) \ | 185 #define RETURN_STRING_LITERAL(x) \ |
188 case x: \ | 186 case x: \ |
189 return #x | 187 return #x |
190 | 188 |
191 string QuicVersionToString(const QuicVersion version) { | 189 string QuicVersionToString(const QuicVersion version) { |
192 switch (version) { | 190 switch (version) { |
193 RETURN_STRING_LITERAL(QUIC_VERSION_21); | |
194 RETURN_STRING_LITERAL(QUIC_VERSION_22); | |
195 RETURN_STRING_LITERAL(QUIC_VERSION_23); | 191 RETURN_STRING_LITERAL(QUIC_VERSION_23); |
| 192 RETURN_STRING_LITERAL(QUIC_VERSION_24); |
196 default: | 193 default: |
197 return "QUIC_VERSION_UNSUPPORTED"; | 194 return "QUIC_VERSION_UNSUPPORTED"; |
198 } | 195 } |
199 } | 196 } |
200 | 197 |
201 string QuicVersionVectorToString(const QuicVersionVector& versions) { | 198 string QuicVersionVectorToString(const QuicVersionVector& versions) { |
202 string result = ""; | 199 string result = ""; |
203 for (size_t i = 0; i < versions.size(); ++i) { | 200 for (size_t i = 0; i < versions.size(); ++i) { |
204 if (i != 0) { | 201 if (i != 0) { |
205 result.append(","); | 202 result.append(","); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} | 250 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} |
254 | 251 |
255 QuicAckFrame::QuicAckFrame() | 252 QuicAckFrame::QuicAckFrame() |
256 : entropy_hash(0), | 253 : entropy_hash(0), |
257 largest_observed(0), | 254 largest_observed(0), |
258 delta_time_largest_observed(QuicTime::Delta::Infinite()), | 255 delta_time_largest_observed(QuicTime::Delta::Infinite()), |
259 is_truncated(false) {} | 256 is_truncated(false) {} |
260 | 257 |
261 QuicAckFrame::~QuicAckFrame() {} | 258 QuicAckFrame::~QuicAckFrame() {} |
262 | 259 |
263 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP() | |
264 : receive_window(0) { | |
265 } | |
266 | |
267 QuicCongestionFeedbackFrame::QuicCongestionFeedbackFrame() : type(kTCP) {} | |
268 | |
269 QuicCongestionFeedbackFrame::~QuicCongestionFeedbackFrame() {} | |
270 | |
271 QuicRstStreamErrorCode AdjustErrorForVersion( | 260 QuicRstStreamErrorCode AdjustErrorForVersion( |
272 QuicRstStreamErrorCode error_code, | 261 QuicRstStreamErrorCode error_code, |
273 QuicVersion version) { | 262 QuicVersion version) { |
274 return error_code; | 263 return error_code; |
275 } | 264 } |
276 | 265 |
277 QuicRstStreamFrame::QuicRstStreamFrame() | 266 QuicRstStreamFrame::QuicRstStreamFrame() |
278 : stream_id(0), | 267 : stream_id(0), |
279 error_code(QUIC_STREAM_NO_ERROR) { | 268 error_code(QUIC_STREAM_NO_ERROR) { |
280 } | 269 } |
(...skipping 21 matching lines...) Expand all Loading... |
302 QuicFrame::QuicFrame(QuicStreamFrame* stream_frame) | 291 QuicFrame::QuicFrame(QuicStreamFrame* stream_frame) |
303 : type(STREAM_FRAME), | 292 : type(STREAM_FRAME), |
304 stream_frame(stream_frame) { | 293 stream_frame(stream_frame) { |
305 } | 294 } |
306 | 295 |
307 QuicFrame::QuicFrame(QuicAckFrame* frame) | 296 QuicFrame::QuicFrame(QuicAckFrame* frame) |
308 : type(ACK_FRAME), | 297 : type(ACK_FRAME), |
309 ack_frame(frame) { | 298 ack_frame(frame) { |
310 } | 299 } |
311 | 300 |
312 QuicFrame::QuicFrame(QuicCongestionFeedbackFrame* frame) | |
313 : type(CONGESTION_FEEDBACK_FRAME), | |
314 congestion_feedback_frame(frame) { | |
315 } | |
316 | |
317 QuicFrame::QuicFrame(QuicStopWaitingFrame* frame) | 301 QuicFrame::QuicFrame(QuicStopWaitingFrame* frame) |
318 : type(STOP_WAITING_FRAME), | 302 : type(STOP_WAITING_FRAME), |
319 stop_waiting_frame(frame) { | 303 stop_waiting_frame(frame) { |
320 } | 304 } |
321 | 305 |
322 QuicFrame::QuicFrame(QuicPingFrame* frame) | 306 QuicFrame::QuicFrame(QuicPingFrame* frame) |
323 : type(PING_FRAME), | 307 : type(PING_FRAME), |
324 ping_frame(frame) { | 308 ping_frame(frame) { |
325 } | 309 } |
326 | 310 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 break; | 395 break; |
412 } | 396 } |
413 case STREAM_FRAME: { | 397 case STREAM_FRAME: { |
414 os << "type { STREAM_FRAME } " << *(frame.stream_frame); | 398 os << "type { STREAM_FRAME } " << *(frame.stream_frame); |
415 break; | 399 break; |
416 } | 400 } |
417 case ACK_FRAME: { | 401 case ACK_FRAME: { |
418 os << "type { ACK_FRAME } " << *(frame.ack_frame); | 402 os << "type { ACK_FRAME } " << *(frame.ack_frame); |
419 break; | 403 break; |
420 } | 404 } |
421 case CONGESTION_FEEDBACK_FRAME: { | |
422 os << "type { CONGESTION_FEEDBACK_FRAME } " | |
423 << *(frame.congestion_feedback_frame); | |
424 break; | |
425 } | |
426 case STOP_WAITING_FRAME: { | 405 case STOP_WAITING_FRAME: { |
427 os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame); | 406 os << "type { STOP_WAITING_FRAME } " << *(frame.stop_waiting_frame); |
428 break; | 407 break; |
429 } | 408 } |
430 case PING_FRAME: { | 409 case PING_FRAME: { |
431 os << "type { PING_FRAME } "; | 410 os << "type { PING_FRAME } "; |
432 break; | 411 break; |
433 } | 412 } |
434 default: { | 413 default: { |
435 LOG(ERROR) << "Unknown frame type: " << frame.type; | 414 LOG(ERROR) << "Unknown frame type: " << frame.type; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) { | 454 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) { |
476 os << "stream_id { " << stream_frame.stream_id << " } " | 455 os << "stream_id { " << stream_frame.stream_id << " } " |
477 << "fin { " << stream_frame.fin << " } " | 456 << "fin { " << stream_frame.fin << " } " |
478 << "offset { " << stream_frame.offset << " } " | 457 << "offset { " << stream_frame.offset << " } " |
479 << "data { " | 458 << "data { " |
480 << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString())) | 459 << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString())) |
481 << " }\n"; | 460 << " }\n"; |
482 return os; | 461 return os; |
483 } | 462 } |
484 | 463 |
485 ostream& operator<<(ostream& os, | |
486 const QuicCongestionFeedbackFrame& congestion_frame) { | |
487 os << "type: " << congestion_frame.type; | |
488 switch (congestion_frame.type) { | |
489 case kTCP: { | |
490 const CongestionFeedbackMessageTCP& tcp = congestion_frame.tcp; | |
491 os << " receive_window: " << tcp.receive_window; | |
492 break; | |
493 } | |
494 } | |
495 return os; | |
496 } | |
497 | |
498 QuicGoAwayFrame::QuicGoAwayFrame() | 464 QuicGoAwayFrame::QuicGoAwayFrame() |
499 : error_code(QUIC_NO_ERROR), | 465 : error_code(QUIC_NO_ERROR), |
500 last_good_stream_id(0) { | 466 last_good_stream_id(0) { |
501 } | 467 } |
502 | 468 |
503 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, | 469 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, |
504 QuicStreamId last_good_stream_id, | 470 QuicStreamId last_good_stream_id, |
505 const string& reason) | 471 const string& reason) |
506 : error_code(error_code), | 472 : error_code(error_code), |
507 last_good_stream_id(last_good_stream_id), | 473 last_good_stream_id(last_good_stream_id), |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 switch (it->type) { | 568 switch (it->type) { |
603 case PADDING_FRAME: | 569 case PADDING_FRAME: |
604 delete it->padding_frame; | 570 delete it->padding_frame; |
605 break; | 571 break; |
606 case STREAM_FRAME: | 572 case STREAM_FRAME: |
607 delete it->stream_frame; | 573 delete it->stream_frame; |
608 break; | 574 break; |
609 case ACK_FRAME: | 575 case ACK_FRAME: |
610 delete it->ack_frame; | 576 delete it->ack_frame; |
611 break; | 577 break; |
612 case CONGESTION_FEEDBACK_FRAME: | |
613 delete it->congestion_feedback_frame; | |
614 break; | |
615 case STOP_WAITING_FRAME: | 578 case STOP_WAITING_FRAME: |
616 delete it->stop_waiting_frame; | 579 delete it->stop_waiting_frame; |
617 break; | 580 break; |
618 case PING_FRAME: | 581 case PING_FRAME: |
619 delete it->ping_frame; | 582 delete it->ping_frame; |
620 break; | 583 break; |
621 case RST_STREAM_FRAME: | 584 case RST_STREAM_FRAME: |
622 delete it->rst_stream_frame; | 585 delete it->rst_stream_frame; |
623 break; | 586 break; |
624 case CONNECTION_CLOSE_FRAME: | 587 case CONNECTION_CLOSE_FRAME: |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 sent_time(sent_time), | 677 sent_time(sent_time), |
715 bytes_sent(0), | 678 bytes_sent(0), |
716 nack_count(0), | 679 nack_count(0), |
717 transmission_type(transmission_type), | 680 transmission_type(transmission_type), |
718 all_transmissions(nullptr), | 681 all_transmissions(nullptr), |
719 in_flight(false), | 682 in_flight(false), |
720 is_unackable(false), | 683 is_unackable(false), |
721 is_fec_packet(false) {} | 684 is_fec_packet(false) {} |
722 | 685 |
723 } // namespace net | 686 } // namespace net |
OLD | NEW |