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/core/quic_protocol.h" | 5 #include "net/quic/core/quic_protocol.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "net/quic/core/quic_flags.h" | 9 #include "net/quic/core/quic_flags.h" |
10 #include "net/quic/core/quic_utils.h" | 10 #include "net/quic/core/quic_utils.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 size_t GetPacketHeaderSize(QuicVersion version, | 30 size_t GetPacketHeaderSize(QuicVersion version, |
31 QuicConnectionIdLength connection_id_length, | 31 QuicConnectionIdLength connection_id_length, |
32 bool include_version, | 32 bool include_version, |
33 bool include_path_id, | 33 bool include_path_id, |
34 bool include_diversification_nonce, | 34 bool include_diversification_nonce, |
35 QuicPacketNumberLength packet_number_length) { | 35 QuicPacketNumberLength packet_number_length) { |
36 return kPublicFlagsSize + connection_id_length + | 36 return kPublicFlagsSize + connection_id_length + |
37 (include_version ? kQuicVersionSize : 0) + | 37 (include_version ? kQuicVersionSize : 0) + |
38 (include_path_id ? kQuicPathIdSize : 0) + packet_number_length + | 38 (include_path_id ? kQuicPathIdSize : 0) + packet_number_length + |
39 (include_diversification_nonce ? kDiversificationNonceSize : 0) + | 39 (include_diversification_nonce ? kDiversificationNonceSize : 0); |
40 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); | |
41 } | 40 } |
42 | 41 |
43 size_t GetStartOfEncryptedData(QuicVersion version, | 42 size_t GetStartOfEncryptedData(QuicVersion version, |
44 const QuicPacketHeader& header) { | 43 const QuicPacketHeader& header) { |
45 return GetPacketHeaderSize(version, header) - | 44 return GetPacketHeaderSize(version, header); |
46 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); | |
47 } | 45 } |
48 | 46 |
49 size_t GetStartOfEncryptedData(QuicVersion version, | 47 size_t GetStartOfEncryptedData(QuicVersion version, |
50 QuicConnectionIdLength connection_id_length, | 48 QuicConnectionIdLength connection_id_length, |
51 bool include_version, | 49 bool include_version, |
52 bool include_path_id, | 50 bool include_path_id, |
53 bool include_diversification_nonce, | 51 bool include_diversification_nonce, |
54 QuicPacketNumberLength packet_number_length) { | 52 QuicPacketNumberLength packet_number_length) { |
55 // Encryption starts before private flags. | 53 // Encryption starts before private flags. |
56 return GetPacketHeaderSize(version, connection_id_length, include_version, | 54 return GetPacketHeaderSize(version, connection_id_length, include_version, |
57 include_path_id, include_diversification_nonce, | 55 include_path_id, include_diversification_nonce, |
58 packet_number_length) - | 56 packet_number_length); |
59 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0); | |
60 } | 57 } |
61 | 58 |
62 QuicPacketPublicHeader::QuicPacketPublicHeader() | 59 QuicPacketPublicHeader::QuicPacketPublicHeader() |
63 : connection_id(0), | 60 : connection_id(0), |
64 connection_id_length(PACKET_8BYTE_CONNECTION_ID), | 61 connection_id_length(PACKET_8BYTE_CONNECTION_ID), |
65 multipath_flag(false), | 62 multipath_flag(false), |
66 reset_flag(false), | 63 reset_flag(false), |
67 version_flag(false), | 64 version_flag(false), |
68 packet_number_length(PACKET_6BYTE_PACKET_NUMBER), | 65 packet_number_length(PACKET_6BYTE_PACKET_NUMBER), |
69 nonce(nullptr) {} | 66 nonce(nullptr) {} |
70 | 67 |
71 QuicPacketPublicHeader::QuicPacketPublicHeader( | 68 QuicPacketPublicHeader::QuicPacketPublicHeader( |
72 const QuicPacketPublicHeader& other) = default; | 69 const QuicPacketPublicHeader& other) = default; |
73 | 70 |
74 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 71 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
75 | 72 |
76 QuicPacketHeader::QuicPacketHeader() | 73 QuicPacketHeader::QuicPacketHeader() |
77 : packet_number(0), | 74 : packet_number(0), path_id(kDefaultPathId) {} |
78 path_id(kDefaultPathId), | |
79 entropy_flag(false), | |
80 entropy_hash(0) {} | |
81 | 75 |
82 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) | 76 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) |
83 : public_header(header), | 77 : public_header(header), packet_number(0), path_id(kDefaultPathId) {} |
84 packet_number(0), | |
85 path_id(kDefaultPathId), | |
86 entropy_flag(false), | |
87 entropy_hash(0) {} | |
88 | 78 |
89 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; | 79 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; |
90 | 80 |
91 QuicPublicResetPacket::QuicPublicResetPacket() | 81 QuicPublicResetPacket::QuicPublicResetPacket() |
92 : nonce_proof(0), rejected_packet_number(0) {} | 82 : nonce_proof(0), rejected_packet_number(0) {} |
93 | 83 |
94 QuicPublicResetPacket::QuicPublicResetPacket( | 84 QuicPublicResetPacket::QuicPublicResetPacket( |
95 const QuicPacketPublicHeader& header) | 85 const QuicPacketPublicHeader& header) |
96 : public_header(header), nonce_proof(0), rejected_packet_number(0) {} | 86 : public_header(header), nonce_proof(0), rejected_packet_number(0) {} |
97 | 87 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 168 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
179 os << " "; | 169 os << " "; |
180 os << QuicVersionToString(header.public_header.versions[i]); | 170 os << QuicVersionToString(header.public_header.versions[i]); |
181 } | 171 } |
182 } | 172 } |
183 if (header.public_header.nonce != nullptr) { | 173 if (header.public_header.nonce != nullptr) { |
184 os << ", diversification_nonce: " | 174 os << ", diversification_nonce: " |
185 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(), | 175 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(), |
186 header.public_header.nonce->size())); | 176 header.public_header.nonce->size())); |
187 } | 177 } |
188 os << ", entropy_flag: " << header.entropy_flag | 178 os << ", path_id: " << static_cast<int>(header.path_id) |
189 << ", entropy hash: " << static_cast<int>(header.entropy_hash) | |
190 << ", path_id: " << static_cast<int>(header.path_id) | |
191 << ", packet_number: " << header.packet_number << " }\n"; | 179 << ", packet_number: " << header.packet_number << " }\n"; |
192 return os; | 180 return os; |
193 } | 181 } |
194 | 182 |
195 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, | 183 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, |
196 QuicPacketNumber packet_number, | 184 QuicPacketNumber packet_number, |
197 QuicPacketNumber peer_least_packet_awaiting_ack) { | 185 QuicPacketNumber peer_least_packet_awaiting_ack) { |
198 if (ack_frame.missing) { | |
199 return packet_number > ack_frame.largest_observed || | |
200 ack_frame.packets.Contains(packet_number); | |
201 } | |
202 return packet_number >= peer_least_packet_awaiting_ack && | 186 return packet_number >= peer_least_packet_awaiting_ack && |
203 !ack_frame.packets.Contains(packet_number); | 187 !ack_frame.packets.Contains(packet_number); |
204 } | 188 } |
205 | 189 |
206 QuicStopWaitingFrame::QuicStopWaitingFrame() | 190 QuicStopWaitingFrame::QuicStopWaitingFrame() |
207 : path_id(kDefaultPathId), entropy_hash(0), least_unacked(0) {} | 191 : path_id(kDefaultPathId), least_unacked(0) {} |
208 | 192 |
209 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} | 193 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} |
210 | 194 |
211 QuicAckFrame::QuicAckFrame() | 195 QuicAckFrame::QuicAckFrame() |
212 : largest_observed(0), | 196 : largest_observed(0), |
213 ack_delay_time(QuicTime::Delta::Infinite()), | 197 ack_delay_time(QuicTime::Delta::Infinite()), |
214 path_id(kDefaultPathId), | 198 path_id(kDefaultPathId) {} |
215 entropy_hash(0), | |
216 is_truncated(false), | |
217 missing(true) {} | |
218 | 199 |
219 QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default; | 200 QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default; |
220 | 201 |
221 QuicAckFrame::~QuicAckFrame() {} | 202 QuicAckFrame::~QuicAckFrame() {} |
222 | 203 |
223 QuicRstStreamFrame::QuicRstStreamFrame() | 204 QuicRstStreamFrame::QuicRstStreamFrame() |
224 : stream_id(0), error_code(QUIC_STREAM_NO_ERROR), byte_offset(0) {} | 205 : stream_id(0), error_code(QUIC_STREAM_NO_ERROR), byte_offset(0) {} |
225 | 206 |
226 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, | 207 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, |
227 QuicRstStreamErrorCode error_code, | 208 QuicRstStreamErrorCode error_code, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) | 245 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) |
265 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {} | 246 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {} |
266 | 247 |
267 QuicFrame::QuicFrame(QuicBlockedFrame* frame) | 248 QuicFrame::QuicFrame(QuicBlockedFrame* frame) |
268 : type(BLOCKED_FRAME), blocked_frame(frame) {} | 249 : type(BLOCKED_FRAME), blocked_frame(frame) {} |
269 | 250 |
270 QuicFrame::QuicFrame(QuicPathCloseFrame* frame) | 251 QuicFrame::QuicFrame(QuicPathCloseFrame* frame) |
271 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} | 252 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} |
272 | 253 |
273 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { | 254 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { |
274 os << "{ entropy_hash: " << static_cast<int>(sent_info.entropy_hash) | 255 os << "{ least_unacked: " << sent_info.least_unacked << " }\n"; |
275 << ", least_unacked: " << sent_info.least_unacked << " }\n"; | |
276 return os; | 256 return os; |
277 } | 257 } |
278 | 258 |
279 PacketNumberQueue::PacketNumberQueue() = default; | 259 PacketNumberQueue::PacketNumberQueue() = default; |
280 PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default; | 260 PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default; |
281 // TODO(rtenneti): on windows RValue reference gives errors. | 261 // TODO(rtenneti): on windows RValue reference gives errors. |
282 // PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default; | 262 // PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default; |
283 PacketNumberQueue::~PacketNumberQueue() {} | 263 PacketNumberQueue::~PacketNumberQueue() {} |
284 | 264 |
285 PacketNumberQueue& PacketNumberQueue::operator=( | 265 PacketNumberQueue& PacketNumberQueue::operator=( |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 for (const Interval<QuicPacketNumber>& interval : q) { | 373 for (const Interval<QuicPacketNumber>& interval : q) { |
394 for (QuicPacketNumber packet_number = interval.min(); | 374 for (QuicPacketNumber packet_number = interval.min(); |
395 packet_number < interval.max(); ++packet_number) { | 375 packet_number < interval.max(); ++packet_number) { |
396 os << packet_number << " "; | 376 os << packet_number << " "; |
397 } | 377 } |
398 } | 378 } |
399 return os; | 379 return os; |
400 } | 380 } |
401 | 381 |
402 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) { | 382 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) { |
403 os << "{ entropy_hash: " << static_cast<int>(ack_frame.entropy_hash) | 383 os << "{ largest_observed: " << ack_frame.largest_observed |
404 << ", largest_observed: " << ack_frame.largest_observed | |
405 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() | 384 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() |
406 << ", packets: [ " << ack_frame.packets << " ]" | 385 << ", packets: [ " << ack_frame.packets << " ]" |
407 << ", is_truncated: " << ack_frame.is_truncated | |
408 << ", received_packets: [ "; | 386 << ", received_packets: [ "; |
409 for (const std::pair<QuicPacketNumber, QuicTime>& p : | 387 for (const std::pair<QuicPacketNumber, QuicTime>& p : |
410 ack_frame.received_packet_times) { | 388 ack_frame.received_packet_times) { |
411 os << p.first << " at " << p.second.ToDebuggingValue() << " "; | 389 os << p.first << " at " << p.second.ToDebuggingValue() << " "; |
412 } | 390 } |
413 os << " ] }\n"; | 391 os << " ] }\n"; |
414 return os; | 392 return os; |
415 } | 393 } |
416 | 394 |
417 ostream& operator<<(ostream& os, const QuicFrame& frame) { | 395 ostream& operator<<(ostream& os, const QuicFrame& frame) { |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 | 613 |
636 StringPiece QuicPacket::Plaintext(QuicVersion version) const { | 614 StringPiece QuicPacket::Plaintext(QuicVersion version) const { |
637 const size_t start_of_encrypted_data = GetStartOfEncryptedData( | 615 const size_t start_of_encrypted_data = GetStartOfEncryptedData( |
638 version, connection_id_length_, includes_version_, includes_path_id_, | 616 version, connection_id_length_, includes_version_, includes_path_id_, |
639 includes_diversification_nonce_, packet_number_length_); | 617 includes_diversification_nonce_, packet_number_length_); |
640 return StringPiece(data() + start_of_encrypted_data, | 618 return StringPiece(data() + start_of_encrypted_data, |
641 length() - start_of_encrypted_data); | 619 length() - start_of_encrypted_data); |
642 } | 620 } |
643 | 621 |
644 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) | 622 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) |
645 : disable_pre_34_(FLAGS_quic_disable_pre_34), | 623 : enable_version_35_(FLAGS_quic_enable_version_35), |
646 enable_version_35_(FLAGS_quic_enable_version_35), | |
647 enable_version_36_(FLAGS_quic_enable_version_36_v2), | 624 enable_version_36_(FLAGS_quic_enable_version_36_v2), |
648 allowed_supported_versions_(supported_versions), | 625 allowed_supported_versions_(supported_versions), |
649 filtered_supported_versions_( | 626 filtered_supported_versions_( |
650 FilterSupportedVersions(supported_versions)) {} | 627 FilterSupportedVersions(supported_versions)) {} |
651 | 628 |
652 QuicVersionManager::~QuicVersionManager() {} | 629 QuicVersionManager::~QuicVersionManager() {} |
653 | 630 |
654 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { | 631 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { |
655 if (disable_pre_34_ != FLAGS_quic_disable_pre_34 || | 632 if (enable_version_35_ != FLAGS_quic_enable_version_35 || |
656 enable_version_35_ != FLAGS_quic_enable_version_35 || | |
657 enable_version_36_ != FLAGS_quic_enable_version_36_v2) { | 633 enable_version_36_ != FLAGS_quic_enable_version_36_v2) { |
658 disable_pre_34_ = FLAGS_quic_disable_pre_34; | |
659 enable_version_35_ = FLAGS_quic_enable_version_35; | 634 enable_version_35_ = FLAGS_quic_enable_version_35; |
660 enable_version_36_ = FLAGS_quic_enable_version_36_v2; | 635 enable_version_36_ = FLAGS_quic_enable_version_36_v2; |
661 filtered_supported_versions_ = | 636 filtered_supported_versions_ = |
662 FilterSupportedVersions(allowed_supported_versions_); | 637 FilterSupportedVersions(allowed_supported_versions_); |
663 } | 638 } |
664 return filtered_supported_versions_; | 639 return filtered_supported_versions_; |
665 } | 640 } |
666 | 641 |
667 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, | 642 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, |
668 QuicPacketLength data_length) | 643 QuicPacketLength data_length) |
669 : ack_listener(listener), length(data_length) { | 644 : ack_listener(listener), length(data_length) { |
670 DCHECK(listener != nullptr); | 645 DCHECK(listener != nullptr); |
671 } | 646 } |
672 | 647 |
673 AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) = | 648 AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) = |
674 default; | 649 default; |
675 | 650 |
676 AckListenerWrapper::~AckListenerWrapper() {} | 651 AckListenerWrapper::~AckListenerWrapper() {} |
677 | 652 |
678 SerializedPacket::SerializedPacket(QuicPathId path_id, | 653 SerializedPacket::SerializedPacket(QuicPathId path_id, |
679 QuicPacketNumber packet_number, | 654 QuicPacketNumber packet_number, |
680 QuicPacketNumberLength packet_number_length, | 655 QuicPacketNumberLength packet_number_length, |
681 const char* encrypted_buffer, | 656 const char* encrypted_buffer, |
682 QuicPacketLength encrypted_length, | 657 QuicPacketLength encrypted_length, |
683 QuicPacketEntropyHash entropy_hash, | |
684 bool has_ack, | 658 bool has_ack, |
685 bool has_stop_waiting) | 659 bool has_stop_waiting) |
686 : encrypted_buffer(encrypted_buffer), | 660 : encrypted_buffer(encrypted_buffer), |
687 encrypted_length(encrypted_length), | 661 encrypted_length(encrypted_length), |
688 has_crypto_handshake(NOT_HANDSHAKE), | 662 has_crypto_handshake(NOT_HANDSHAKE), |
689 num_padding_bytes(0), | 663 num_padding_bytes(0), |
690 path_id(path_id), | 664 path_id(path_id), |
691 packet_number(packet_number), | 665 packet_number(packet_number), |
692 packet_number_length(packet_number_length), | 666 packet_number_length(packet_number_length), |
693 encryption_level(ENCRYPTION_NONE), | 667 encryption_level(ENCRYPTION_NONE), |
694 entropy_hash(entropy_hash), | |
695 has_ack(has_ack), | 668 has_ack(has_ack), |
696 has_stop_waiting(has_stop_waiting), | 669 has_stop_waiting(has_stop_waiting), |
697 transmission_type(NOT_RETRANSMISSION), | 670 transmission_type(NOT_RETRANSMISSION), |
698 original_path_id(kInvalidPathId), | 671 original_path_id(kInvalidPathId), |
699 original_packet_number(0) {} | 672 original_packet_number(0) {} |
700 | 673 |
701 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; | 674 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; |
702 | 675 |
703 SerializedPacket::~SerializedPacket() {} | 676 SerializedPacket::~SerializedPacket() {} |
704 | 677 |
(...skipping 25 matching lines...) Expand all Loading... |
730 is_unackable(false), | 703 is_unackable(false), |
731 has_crypto_handshake(has_crypto_handshake), | 704 has_crypto_handshake(has_crypto_handshake), |
732 num_padding_bytes(num_padding_bytes), | 705 num_padding_bytes(num_padding_bytes), |
733 retransmission(0) {} | 706 retransmission(0) {} |
734 | 707 |
735 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; | 708 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; |
736 | 709 |
737 TransmissionInfo::~TransmissionInfo() {} | 710 TransmissionInfo::~TransmissionInfo() {} |
738 | 711 |
739 } // namespace net | 712 } // namespace net |
OLD | NEW |