| 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 "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "net/quic/quic_flags.h" | 9 #include "net/quic/quic_flags.h" |
| 10 #include "net/quic/quic_utils.h" | 10 #include "net/quic/quic_utils.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 : QuicStreamFrame(stream_id, | 126 : QuicStreamFrame(stream_id, |
| 127 fin, | 127 fin, |
| 128 offset, | 128 offset, |
| 129 data.data(), | 129 data.data(), |
| 130 data.length(), | 130 data.length(), |
| 131 nullptr) {} | 131 nullptr) {} |
| 132 | 132 |
| 133 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, | 133 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
| 134 bool fin, | 134 bool fin, |
| 135 QuicStreamOffset offset, | 135 QuicStreamOffset offset, |
| 136 QuicPacketLength frame_length, | 136 QuicPacketLength data_length, |
| 137 UniqueStreamBuffer buffer) | 137 UniqueStreamBuffer buffer) |
| 138 : QuicStreamFrame(stream_id, | 138 : QuicStreamFrame(stream_id, |
| 139 fin, | 139 fin, |
| 140 offset, | 140 offset, |
| 141 nullptr, | 141 nullptr, |
| 142 frame_length, | 142 data_length, |
| 143 std::move(buffer)) { | 143 std::move(buffer)) { |
| 144 DCHECK(this->buffer != nullptr); | 144 DCHECK(this->buffer != nullptr); |
| 145 DCHECK_EQ(frame_buffer, this->buffer.get()); | 145 DCHECK_EQ(data_buffer, this->buffer.get()); |
| 146 } | 146 } |
| 147 | 147 |
| 148 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, | 148 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, |
| 149 bool fin, | 149 bool fin, |
| 150 QuicStreamOffset offset, | 150 QuicStreamOffset offset, |
| 151 const char* frame_buffer, | 151 const char* data_buffer, |
| 152 QuicPacketLength frame_length, | 152 QuicPacketLength data_length, |
| 153 UniqueStreamBuffer buffer) | 153 UniqueStreamBuffer buffer) |
| 154 : stream_id(stream_id), | 154 : stream_id(stream_id), |
| 155 fin(fin), | 155 fin(fin), |
| 156 frame_length(frame_length), | 156 data_length(data_length), |
| 157 frame_buffer(frame_buffer), | 157 data_buffer(data_buffer), |
| 158 offset(offset), | 158 offset(offset), |
| 159 buffer(std::move(buffer)) { | 159 buffer(std::move(buffer)) { |
| 160 if (this->buffer != nullptr) { | 160 if (this->buffer != nullptr) { |
| 161 DCHECK(frame_buffer == nullptr); | 161 DCHECK(data_buffer == nullptr); |
| 162 this->frame_buffer = this->buffer.get(); | 162 this->data_buffer = this->buffer.get(); |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 QuicStreamFrame::~QuicStreamFrame() {} | 166 QuicStreamFrame::~QuicStreamFrame() {} |
| 167 | 167 |
| 168 uint32_t MakeQuicTag(char a, char b, char c, char d) { | 168 uint32_t MakeQuicTag(char a, char b, char c, char d) { |
| 169 return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 | | 169 return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 | |
| 170 static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24; | 170 static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24; |
| 171 } | 171 } |
| 172 | 172 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 if (s == Perspective::IS_SERVER) { | 261 if (s == Perspective::IS_SERVER) { |
| 262 os << "IS_SERVER"; | 262 os << "IS_SERVER"; |
| 263 } else { | 263 } else { |
| 264 os << "IS_CLIENT"; | 264 os << "IS_CLIENT"; |
| 265 } | 265 } |
| 266 return os; | 266 return os; |
| 267 } | 267 } |
| 268 | 268 |
| 269 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { | 269 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { |
| 270 os << "{ connection_id: " << header.public_header.connection_id | 270 os << "{ connection_id: " << header.public_header.connection_id |
| 271 << ", connection_id_length:" << header.public_header.connection_id_length | 271 << ", connection_id_length: " << header.public_header.connection_id_length |
| 272 << ", packet_number_length:" << header.public_header.packet_number_length | 272 << ", packet_number_length: " << header.public_header.packet_number_length |
| 273 << ", multipath_flag: " << header.public_header.multipath_flag | 273 << ", multipath_flag: " << header.public_header.multipath_flag |
| 274 << ", reset_flag: " << header.public_header.reset_flag | 274 << ", reset_flag: " << header.public_header.reset_flag |
| 275 << ", version_flag: " << header.public_header.version_flag; | 275 << ", version_flag: " << header.public_header.version_flag; |
| 276 if (header.public_header.version_flag) { | 276 if (header.public_header.version_flag) { |
| 277 os << " version: "; | 277 os << ", version:"; |
| 278 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 278 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
| 279 os << header.public_header.versions[i] << " "; | 279 os << " "; |
| 280 os << header.public_header.versions[i]; |
| 280 } | 281 } |
| 281 } | 282 } |
| 282 if (header.public_header.nonce != nullptr) { | 283 if (header.public_header.nonce != nullptr) { |
| 283 os << ", diversification_nonce: " | 284 os << ", diversification_nonce: " |
| 284 << QuicUtils::HexEncode(*header.public_header.nonce); | 285 << net::QuicUtils::HexDecode(*header.public_header.nonce); |
| 285 } | 286 } |
| 286 os << ", fec_flag: " << header.fec_flag | 287 os << ", fec_flag: " << header.fec_flag |
| 287 << ", entropy_flag: " << header.entropy_flag | 288 << ", entropy_flag: " << header.entropy_flag |
| 288 << ", entropy hash: " << static_cast<int>(header.entropy_hash) | 289 << ", entropy hash: " << static_cast<int>(header.entropy_hash) |
| 289 << ", path_id: " << header.path_id | 290 << ", path_id: " << static_cast<int>(header.path_id) |
| 290 << ", packet_number: " << header.packet_number | 291 << ", packet_number: " << header.packet_number |
| 291 << ", is_in_fec_group:" << header.is_in_fec_group | 292 << ", is_in_fec_group: " << header.is_in_fec_group |
| 292 << ", fec_group: " << header.fec_group << "}\n"; | 293 << ", fec_group: " << header.fec_group << " }\n"; |
| 293 return os; | 294 return os; |
| 294 } | 295 } |
| 295 | 296 |
| 296 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, | 297 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, |
| 297 QuicPacketNumber packet_number, | 298 QuicPacketNumber packet_number, |
| 298 QuicPacketNumber peer_least_packet_awaiting_ack) { | 299 QuicPacketNumber peer_least_packet_awaiting_ack) { |
| 299 if (ack_frame.missing) { | 300 if (ack_frame.missing) { |
| 300 return packet_number > ack_frame.largest_observed || | 301 return packet_number > ack_frame.largest_observed || |
| 301 ack_frame.packets.Contains(packet_number); | 302 ack_frame.packets.Contains(packet_number); |
| 302 } | 303 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) | 371 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) |
| 371 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {} | 372 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {} |
| 372 | 373 |
| 373 QuicFrame::QuicFrame(QuicBlockedFrame* frame) | 374 QuicFrame::QuicFrame(QuicBlockedFrame* frame) |
| 374 : type(BLOCKED_FRAME), blocked_frame(frame) {} | 375 : type(BLOCKED_FRAME), blocked_frame(frame) {} |
| 375 | 376 |
| 376 QuicFrame::QuicFrame(QuicPathCloseFrame* frame) | 377 QuicFrame::QuicFrame(QuicPathCloseFrame* frame) |
| 377 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} | 378 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} |
| 378 | 379 |
| 379 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { | 380 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { |
| 380 os << "entropy_hash: " << static_cast<int>(sent_info.entropy_hash) | 381 os << "{ entropy_hash: " << static_cast<int>(sent_info.entropy_hash) |
| 381 << " least_unacked: " << sent_info.least_unacked << "\n"; | 382 << ", least_unacked: " << sent_info.least_unacked << " }\n"; |
| 382 return os; | 383 return os; |
| 383 } | 384 } |
| 384 | 385 |
| 385 PacketNumberQueue::const_iterator::const_iterator( | 386 PacketNumberQueue::const_iterator::const_iterator( |
| 386 IntervalSet<QuicPacketNumber>::const_iterator interval_set_iter, | 387 IntervalSet<QuicPacketNumber>::const_iterator interval_set_iter, |
| 387 QuicPacketNumber first, | 388 QuicPacketNumber first, |
| 388 QuicPacketNumber last) | 389 QuicPacketNumber last) |
| 389 : interval_set_iter_(std::move(interval_set_iter)), | 390 : interval_set_iter_(std::move(interval_set_iter)), |
| 390 current_(first), | 391 current_(first), |
| 391 last_(last) {} | 392 last_(last) {} |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 } | 554 } |
| 554 | 555 |
| 555 ostream& operator<<(ostream& os, const PacketNumberQueue& q) { | 556 ostream& operator<<(ostream& os, const PacketNumberQueue& q) { |
| 556 for (QuicPacketNumber packet_number : q) { | 557 for (QuicPacketNumber packet_number : q) { |
| 557 os << packet_number << " "; | 558 os << packet_number << " "; |
| 558 } | 559 } |
| 559 return os; | 560 return os; |
| 560 } | 561 } |
| 561 | 562 |
| 562 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) { | 563 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) { |
| 563 os << "entropy_hash: " << static_cast<int>(ack_frame.entropy_hash) | 564 os << "{ entropy_hash: " << static_cast<int>(ack_frame.entropy_hash) |
| 564 << " largest_observed: " << ack_frame.largest_observed | 565 << ", largest_observed: " << ack_frame.largest_observed |
| 565 << " ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() | 566 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() |
| 566 << " packets: [ " << ack_frame.packets | 567 << ", packets: [ " << ack_frame.packets << " ]" |
| 567 << " ] is_truncated: " << ack_frame.is_truncated | 568 << ", is_truncated: " << ack_frame.is_truncated |
| 568 << " received_packets: [ "; | 569 << ", received_packets: [ "; |
| 569 for (const std::pair<QuicPacketNumber, QuicTime>& p : | 570 for (const std::pair<QuicPacketNumber, QuicTime>& p : |
| 570 ack_frame.received_packet_times) { | 571 ack_frame.received_packet_times) { |
| 571 os << p.first << " at " << p.second.ToDebuggingValue() << " "; | 572 os << p.first << " at " << p.second.ToDebuggingValue() << " "; |
| 572 } | 573 } |
| 573 os << " ]\n"; | 574 os << " ] }\n"; |
| 574 return os; | 575 return os; |
| 575 } | 576 } |
| 576 | 577 |
| 577 ostream& operator<<(ostream& os, const QuicFrame& frame) { | 578 ostream& operator<<(ostream& os, const QuicFrame& frame) { |
| 578 switch (frame.type) { | 579 switch (frame.type) { |
| 579 case PADDING_FRAME: { | 580 case PADDING_FRAME: { |
| 580 os << "type { PADDING_FRAME } "; | 581 os << "type { PADDING_FRAME } " << frame.padding_frame; |
| 581 break; | 582 break; |
| 582 } | 583 } |
| 583 case RST_STREAM_FRAME: { | 584 case RST_STREAM_FRAME: { |
| 584 os << "type { RST_STREAM_FRAME } " << *(frame.rst_stream_frame); | 585 os << "type { RST_STREAM_FRAME } " << *(frame.rst_stream_frame); |
| 585 break; | 586 break; |
| 586 } | 587 } |
| 587 case CONNECTION_CLOSE_FRAME: { | 588 case CONNECTION_CLOSE_FRAME: { |
| 588 os << "type { CONNECTION_CLOSE_FRAME } " | 589 os << "type { CONNECTION_CLOSE_FRAME } " |
| 589 << *(frame.connection_close_frame); | 590 << *(frame.connection_close_frame); |
| 590 break; | 591 break; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 break; | 627 break; |
| 627 } | 628 } |
| 628 default: { | 629 default: { |
| 629 LOG(ERROR) << "Unknown frame type: " << frame.type; | 630 LOG(ERROR) << "Unknown frame type: " << frame.type; |
| 630 break; | 631 break; |
| 631 } | 632 } |
| 632 } | 633 } |
| 633 return os; | 634 return os; |
| 634 } | 635 } |
| 635 | 636 |
| 637 ostream& operator<<(ostream& os, const QuicPaddingFrame& padding_frame) { |
| 638 os << "{ num_padding_bytes: " << padding_frame.num_padding_bytes << " }\n"; |
| 639 return os; |
| 640 } |
| 641 |
| 636 ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) { | 642 ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) { |
| 637 os << "stream_id { " << rst_frame.stream_id << " } " | 643 os << "{ stream_id: " << rst_frame.stream_id |
| 638 << "error_code { " << rst_frame.error_code << " }\n"; | 644 << ", error_code: " << rst_frame.error_code << " }\n"; |
| 639 return os; | 645 return os; |
| 640 } | 646 } |
| 641 | 647 |
| 642 ostream& operator<<(ostream& os, | 648 ostream& operator<<(ostream& os, |
| 643 const QuicConnectionCloseFrame& connection_close_frame) { | 649 const QuicConnectionCloseFrame& connection_close_frame) { |
| 644 os << "error_code { " << connection_close_frame.error_code << " } " | 650 os << "{ error_code: " << connection_close_frame.error_code |
| 645 << "error_details { " << connection_close_frame.error_details << " }\n"; | 651 << ", error_details: '" << connection_close_frame.error_details << "' }\n"; |
| 646 return os; | 652 return os; |
| 647 } | 653 } |
| 648 | 654 |
| 649 ostream& operator<<(ostream& os, const QuicGoAwayFrame& goaway_frame) { | 655 ostream& operator<<(ostream& os, const QuicGoAwayFrame& goaway_frame) { |
| 650 os << "error_code { " << goaway_frame.error_code << " } " | 656 os << "{ error_code: " << goaway_frame.error_code |
| 651 << "last_good_stream_id { " << goaway_frame.last_good_stream_id << " } " | 657 << ", last_good_stream_id: " << goaway_frame.last_good_stream_id |
| 652 << "reason_phrase { " << goaway_frame.reason_phrase << " }\n"; | 658 << ", reason_phrase: '" << goaway_frame.reason_phrase << "' }\n"; |
| 653 return os; | 659 return os; |
| 654 } | 660 } |
| 655 | 661 |
| 656 ostream& operator<<(ostream& os, | 662 ostream& operator<<(ostream& os, |
| 657 const QuicWindowUpdateFrame& window_update_frame) { | 663 const QuicWindowUpdateFrame& window_update_frame) { |
| 658 os << "stream_id { " << window_update_frame.stream_id << " } " | 664 os << "{ stream_id: " << window_update_frame.stream_id |
| 659 << "byte_offset { " << window_update_frame.byte_offset << " }\n"; | 665 << ", byte_offset: " << window_update_frame.byte_offset << " }\n"; |
| 660 return os; | 666 return os; |
| 661 } | 667 } |
| 662 | 668 |
| 663 ostream& operator<<(ostream& os, const QuicBlockedFrame& blocked_frame) { | 669 ostream& operator<<(ostream& os, const QuicBlockedFrame& blocked_frame) { |
| 664 os << "stream_id { " << blocked_frame.stream_id << " }\n"; | 670 os << "{ stream_id: " << blocked_frame.stream_id << " }\n"; |
| 665 return os; | 671 return os; |
| 666 } | 672 } |
| 667 | 673 |
| 668 ostream& operator<<(ostream& os, const QuicPathCloseFrame& path_close_frame) { | 674 ostream& operator<<(ostream& os, const QuicPathCloseFrame& path_close_frame) { |
| 669 os << "path_id { " << path_close_frame.path_id << " }\n"; | 675 os << "{ path_id: " << static_cast<int>(path_close_frame.path_id) << " }\n"; |
| 670 return os; | 676 return os; |
| 671 } | 677 } |
| 672 | 678 |
| 673 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) { | 679 ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) { |
| 674 os << "stream_id { " << stream_frame.stream_id << " } " | 680 os << "{ stream_id: " << stream_frame.stream_id |
| 675 << "fin { " << stream_frame.fin << " } " | 681 << ", fin: " << stream_frame.fin << ", offset: " << stream_frame.offset |
| 676 << "offset { " << stream_frame.offset << " } " | 682 << ", length: " << stream_frame.data_length << " }\n"; |
| 677 << "length { " << stream_frame.frame_length << " }\n"; | |
| 678 return os; | 683 return os; |
| 679 } | 684 } |
| 680 | 685 |
| 681 QuicGoAwayFrame::QuicGoAwayFrame() | 686 QuicGoAwayFrame::QuicGoAwayFrame() |
| 682 : error_code(QUIC_NO_ERROR), last_good_stream_id(0) {} | 687 : error_code(QUIC_NO_ERROR), last_good_stream_id(0) {} |
| 683 | 688 |
| 684 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, | 689 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, |
| 685 QuicStreamId last_good_stream_id, | 690 QuicStreamId last_good_stream_id, |
| 686 const string& reason) | 691 const string& reason) |
| 687 : error_code(error_code), | 692 : error_code(error_code), |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 encrypted_length(encrypted_length), | 811 encrypted_length(encrypted_length), |
| 807 has_crypto_handshake(NOT_HANDSHAKE), | 812 has_crypto_handshake(NOT_HANDSHAKE), |
| 808 num_padding_bytes(0), | 813 num_padding_bytes(0), |
| 809 path_id(path_id), | 814 path_id(path_id), |
| 810 packet_number(packet_number), | 815 packet_number(packet_number), |
| 811 packet_number_length(packet_number_length), | 816 packet_number_length(packet_number_length), |
| 812 encryption_level(ENCRYPTION_NONE), | 817 encryption_level(ENCRYPTION_NONE), |
| 813 entropy_hash(entropy_hash), | 818 entropy_hash(entropy_hash), |
| 814 has_ack(has_ack), | 819 has_ack(has_ack), |
| 815 has_stop_waiting(has_stop_waiting), | 820 has_stop_waiting(has_stop_waiting), |
| 821 original_path_id(kInvalidPathId), |
| 816 original_packet_number(0), | 822 original_packet_number(0), |
| 817 transmission_type(NOT_RETRANSMISSION) {} | 823 transmission_type(NOT_RETRANSMISSION) {} |
| 818 | 824 |
| 819 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; | 825 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; |
| 820 | 826 |
| 821 SerializedPacket::~SerializedPacket() {} | 827 SerializedPacket::~SerializedPacket() {} |
| 822 | 828 |
| 823 TransmissionInfo::TransmissionInfo() | 829 TransmissionInfo::TransmissionInfo() |
| 824 : encryption_level(ENCRYPTION_NONE), | 830 : encryption_level(ENCRYPTION_NONE), |
| 825 packet_number_length(PACKET_1BYTE_PACKET_NUMBER), | 831 packet_number_length(PACKET_1BYTE_PACKET_NUMBER), |
| (...skipping 24 matching lines...) Expand all Loading... |
| 850 is_unackable(false), | 856 is_unackable(false), |
| 851 has_crypto_handshake(has_crypto_handshake), | 857 has_crypto_handshake(has_crypto_handshake), |
| 852 num_padding_bytes(num_padding_bytes), | 858 num_padding_bytes(num_padding_bytes), |
| 853 retransmission(0) {} | 859 retransmission(0) {} |
| 854 | 860 |
| 855 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; | 861 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; |
| 856 | 862 |
| 857 TransmissionInfo::~TransmissionInfo() {} | 863 TransmissionInfo::~TransmissionInfo() {} |
| 858 | 864 |
| 859 } // namespace net | 865 } // namespace net |
| OLD | NEW |