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/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/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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 71 |
72 QuicPacketPublicHeader::QuicPacketPublicHeader( | 72 QuicPacketPublicHeader::QuicPacketPublicHeader( |
73 const QuicPacketPublicHeader& other) = default; | 73 const QuicPacketPublicHeader& other) = default; |
74 | 74 |
75 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 75 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
76 | 76 |
77 QuicPacketHeader::QuicPacketHeader() | 77 QuicPacketHeader::QuicPacketHeader() |
78 : packet_number(0), | 78 : packet_number(0), |
79 path_id(kDefaultPathId), | 79 path_id(kDefaultPathId), |
80 entropy_flag(false), | 80 entropy_flag(false), |
81 entropy_hash(0), | 81 entropy_hash(0) {} |
82 fec_flag(false) {} | |
83 | 82 |
84 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) | 83 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) |
85 : public_header(header), | 84 : public_header(header), |
86 packet_number(0), | 85 packet_number(0), |
87 path_id(kDefaultPathId), | 86 path_id(kDefaultPathId), |
88 entropy_flag(false), | 87 entropy_flag(false), |
89 entropy_hash(0), | 88 entropy_hash(0) {} |
90 fec_flag(false) {} | |
91 | 89 |
92 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; | 90 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; |
93 | 91 |
94 QuicPublicResetPacket::QuicPublicResetPacket() | 92 QuicPublicResetPacket::QuicPublicResetPacket() |
95 : nonce_proof(0), rejected_packet_number(0) {} | 93 : nonce_proof(0), rejected_packet_number(0) {} |
96 | 94 |
97 QuicPublicResetPacket::QuicPublicResetPacket( | 95 QuicPublicResetPacket::QuicPublicResetPacket( |
98 const QuicPacketPublicHeader& header) | 96 const QuicPacketPublicHeader& header) |
99 : public_header(header), nonce_proof(0), rejected_packet_number(0) {} | 97 : public_header(header), nonce_proof(0), rejected_packet_number(0) {} |
100 | 98 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 } | 178 } |
181 | 179 |
182 QuicVersionVector CurrentSupportedVersions() { | 180 QuicVersionVector CurrentSupportedVersions() { |
183 return FilterSupportedVersions(AllSupportedVersions()); | 181 return FilterSupportedVersions(AllSupportedVersions()); |
184 } | 182 } |
185 | 183 |
186 QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) { | 184 QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) { |
187 QuicVersionVector filtered_versions(versions.size()); | 185 QuicVersionVector filtered_versions(versions.size()); |
188 filtered_versions.clear(); // Guaranteed by spec not to change capacity. | 186 filtered_versions.clear(); // Guaranteed by spec not to change capacity. |
189 for (QuicVersion version : versions) { | 187 for (QuicVersion version : versions) { |
190 if (version < QUIC_VERSION_32) { | 188 if (version < QUIC_VERSION_34) { |
191 if (!FLAGS_quic_disable_pre_32 && !FLAGS_quic_disable_pre_34) { | |
192 filtered_versions.push_back(version); | |
193 } | |
194 } else if (version < QUIC_VERSION_34) { | |
195 if (!FLAGS_quic_disable_pre_34) { | 189 if (!FLAGS_quic_disable_pre_34) { |
196 filtered_versions.push_back(version); | 190 filtered_versions.push_back(version); |
197 } | 191 } |
198 } else if (version == QUIC_VERSION_35) { | 192 } else if (version == QUIC_VERSION_35) { |
199 if (FLAGS_quic_enable_version_35) { | 193 if (FLAGS_quic_enable_version_35) { |
200 filtered_versions.push_back(version); | 194 filtered_versions.push_back(version); |
201 } | 195 } |
202 } else if (version == QUIC_VERSION_36) { | 196 } else if (version == QUIC_VERSION_36) { |
203 if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) { | 197 if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) { |
204 filtered_versions.push_back(version); | 198 filtered_versions.push_back(version); |
(...skipping 11 matching lines...) Expand all Loading... |
216 if (index >= 0 && index < version_count) { | 210 if (index >= 0 && index < version_count) { |
217 version.push_back(versions[index]); | 211 version.push_back(versions[index]); |
218 } else { | 212 } else { |
219 version.push_back(QUIC_VERSION_UNSUPPORTED); | 213 version.push_back(QUIC_VERSION_UNSUPPORTED); |
220 } | 214 } |
221 return version; | 215 return version; |
222 } | 216 } |
223 | 217 |
224 QuicTag QuicVersionToQuicTag(const QuicVersion version) { | 218 QuicTag QuicVersionToQuicTag(const QuicVersion version) { |
225 switch (version) { | 219 switch (version) { |
226 case QUIC_VERSION_30: | |
227 return MakeQuicTag('Q', '0', '3', '0'); | |
228 case QUIC_VERSION_31: | |
229 return MakeQuicTag('Q', '0', '3', '1'); | |
230 case QUIC_VERSION_32: | 220 case QUIC_VERSION_32: |
231 return MakeQuicTag('Q', '0', '3', '2'); | 221 return MakeQuicTag('Q', '0', '3', '2'); |
232 case QUIC_VERSION_33: | 222 case QUIC_VERSION_33: |
233 return MakeQuicTag('Q', '0', '3', '3'); | 223 return MakeQuicTag('Q', '0', '3', '3'); |
234 case QUIC_VERSION_34: | 224 case QUIC_VERSION_34: |
235 return MakeQuicTag('Q', '0', '3', '4'); | 225 return MakeQuicTag('Q', '0', '3', '4'); |
236 case QUIC_VERSION_35: | 226 case QUIC_VERSION_35: |
237 return MakeQuicTag('Q', '0', '3', '5'); | 227 return MakeQuicTag('Q', '0', '3', '5'); |
238 case QUIC_VERSION_36: | 228 case QUIC_VERSION_36: |
239 return MakeQuicTag('Q', '0', '3', '6'); | 229 return MakeQuicTag('Q', '0', '3', '6'); |
(...skipping 16 matching lines...) Expand all Loading... |
256 << QuicUtils::TagToString(version_tag); | 246 << QuicUtils::TagToString(version_tag); |
257 return QUIC_VERSION_UNSUPPORTED; | 247 return QUIC_VERSION_UNSUPPORTED; |
258 } | 248 } |
259 | 249 |
260 #define RETURN_STRING_LITERAL(x) \ | 250 #define RETURN_STRING_LITERAL(x) \ |
261 case x: \ | 251 case x: \ |
262 return #x | 252 return #x |
263 | 253 |
264 string QuicVersionToString(const QuicVersion version) { | 254 string QuicVersionToString(const QuicVersion version) { |
265 switch (version) { | 255 switch (version) { |
266 RETURN_STRING_LITERAL(QUIC_VERSION_30); | |
267 RETURN_STRING_LITERAL(QUIC_VERSION_31); | |
268 RETURN_STRING_LITERAL(QUIC_VERSION_32); | 256 RETURN_STRING_LITERAL(QUIC_VERSION_32); |
269 RETURN_STRING_LITERAL(QUIC_VERSION_33); | 257 RETURN_STRING_LITERAL(QUIC_VERSION_33); |
270 RETURN_STRING_LITERAL(QUIC_VERSION_34); | 258 RETURN_STRING_LITERAL(QUIC_VERSION_34); |
271 RETURN_STRING_LITERAL(QUIC_VERSION_35); | 259 RETURN_STRING_LITERAL(QUIC_VERSION_35); |
272 RETURN_STRING_LITERAL(QUIC_VERSION_36); | 260 RETURN_STRING_LITERAL(QUIC_VERSION_36); |
273 default: | 261 default: |
274 return "QUIC_VERSION_UNSUPPORTED"; | 262 return "QUIC_VERSION_UNSUPPORTED"; |
275 } | 263 } |
276 } | 264 } |
277 | 265 |
(...skipping 29 matching lines...) Expand all Loading... |
307 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 295 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
308 os << " "; | 296 os << " "; |
309 os << QuicVersionToString(header.public_header.versions[i]); | 297 os << QuicVersionToString(header.public_header.versions[i]); |
310 } | 298 } |
311 } | 299 } |
312 if (header.public_header.nonce != nullptr) { | 300 if (header.public_header.nonce != nullptr) { |
313 os << ", diversification_nonce: " | 301 os << ", diversification_nonce: " |
314 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(), | 302 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(), |
315 header.public_header.nonce->size())); | 303 header.public_header.nonce->size())); |
316 } | 304 } |
317 os << ", fec_flag: " << header.fec_flag | 305 os << ", entropy_flag: " << header.entropy_flag |
318 << ", entropy_flag: " << header.entropy_flag | |
319 << ", entropy hash: " << static_cast<int>(header.entropy_hash) | 306 << ", entropy hash: " << static_cast<int>(header.entropy_hash) |
320 << ", path_id: " << static_cast<int>(header.path_id) | 307 << ", path_id: " << static_cast<int>(header.path_id) |
321 << ", packet_number: " << header.packet_number << " }\n"; | 308 << ", packet_number: " << header.packet_number << " }\n"; |
322 return os; | 309 return os; |
323 } | 310 } |
324 | 311 |
325 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, | 312 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, |
326 QuicPacketNumber packet_number, | 313 QuicPacketNumber packet_number, |
327 QuicPacketNumber peer_least_packet_awaiting_ack) { | 314 QuicPacketNumber peer_least_packet_awaiting_ack) { |
328 if (ack_frame.missing) { | 315 if (ack_frame.missing) { |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 } | 706 } |
720 | 707 |
721 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { | 708 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { |
722 os << s.length() << "-byte data"; | 709 os << s.length() << "-byte data"; |
723 return os; | 710 return os; |
724 } | 711 } |
725 | 712 |
726 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, | 713 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
727 size_t length, | 714 size_t length, |
728 QuicTime receipt_time) | 715 QuicTime receipt_time) |
729 : QuicReceivedPacket(buffer, | 716 : QuicEncryptedPacket(buffer, length), |
730 length, | 717 receipt_time_(receipt_time), |
731 receipt_time, | 718 ttl_(0) {} |
732 false /* owns_buffer */) {} | |
733 | 719 |
734 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, | 720 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
735 size_t length, | 721 size_t length, |
736 QuicTime receipt_time, | 722 QuicTime receipt_time, |
737 bool owns_buffer) | 723 bool owns_buffer) |
738 : QuicReceivedPacket(buffer, | 724 : QuicEncryptedPacket(buffer, length, owns_buffer), |
739 length, | 725 receipt_time_(receipt_time), |
740 receipt_time, | 726 ttl_(0) {} |
741 owns_buffer, | |
742 false /* potentially_small_mtu */, | |
743 -1 /* ttl */, | |
744 false /* ttl_valid */) {} | |
745 | 727 |
746 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, | 728 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
747 size_t length, | 729 size_t length, |
748 QuicTime receipt_time, | 730 QuicTime receipt_time, |
749 bool owns_buffer, | 731 bool owns_buffer, |
750 bool potentially_small_mtu, | |
751 int ttl, | 732 int ttl, |
752 bool ttl_valid) | 733 bool ttl_valid) |
753 : QuicEncryptedPacket(buffer, length, owns_buffer), | 734 : QuicEncryptedPacket(buffer, length, owns_buffer), |
754 receipt_time_(receipt_time), | 735 receipt_time_(receipt_time), |
755 ttl_(ttl_valid ? ttl : -1), | 736 ttl_(ttl_valid ? ttl : -1) {} |
756 potentially_small_mtu_(potentially_small_mtu) {} | |
757 | 737 |
758 QuicReceivedPacket* QuicReceivedPacket::Clone() const { | 738 QuicReceivedPacket* QuicReceivedPacket::Clone() const { |
759 char* buffer = new char[this->length()]; | 739 char* buffer = new char[this->length()]; |
760 memcpy(buffer, this->data(), this->length()); | 740 memcpy(buffer, this->data(), this->length()); |
761 return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true, | 741 return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true, |
762 potentially_small_mtu(), ttl(), ttl() >= 0); | 742 ttl(), ttl() >= 0); |
763 } | 743 } |
764 | 744 |
765 ostream& operator<<(ostream& os, const QuicReceivedPacket& s) { | 745 ostream& operator<<(ostream& os, const QuicReceivedPacket& s) { |
766 os << s.length() << "-byte data"; | 746 os << s.length() << "-byte data"; |
767 return os; | 747 return os; |
768 } | 748 } |
769 | 749 |
770 StringPiece QuicPacket::AssociatedData(QuicVersion version) const { | 750 StringPiece QuicPacket::AssociatedData(QuicVersion version) const { |
771 return StringPiece( | 751 return StringPiece( |
772 data(), GetStartOfEncryptedData(version, connection_id_length_, | 752 data(), GetStartOfEncryptedData(version, connection_id_length_, |
773 includes_version_, includes_path_id_, | 753 includes_version_, includes_path_id_, |
774 includes_diversification_nonce_, | 754 includes_diversification_nonce_, |
775 packet_number_length_)); | 755 packet_number_length_)); |
776 } | 756 } |
777 | 757 |
778 StringPiece QuicPacket::Plaintext(QuicVersion version) const { | 758 StringPiece QuicPacket::Plaintext(QuicVersion version) const { |
779 const size_t start_of_encrypted_data = GetStartOfEncryptedData( | 759 const size_t start_of_encrypted_data = GetStartOfEncryptedData( |
780 version, connection_id_length_, includes_version_, includes_path_id_, | 760 version, connection_id_length_, includes_version_, includes_path_id_, |
781 includes_diversification_nonce_, packet_number_length_); | 761 includes_diversification_nonce_, packet_number_length_); |
782 return StringPiece(data() + start_of_encrypted_data, | 762 return StringPiece(data() + start_of_encrypted_data, |
783 length() - start_of_encrypted_data); | 763 length() - start_of_encrypted_data); |
784 } | 764 } |
785 | 765 |
786 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) | 766 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) |
787 : disable_pre_32_(FLAGS_quic_disable_pre_32), | 767 : disable_pre_34_(FLAGS_quic_disable_pre_34), |
788 disable_pre_34_(FLAGS_quic_disable_pre_34), | |
789 enable_version_35_(FLAGS_quic_enable_version_35), | 768 enable_version_35_(FLAGS_quic_enable_version_35), |
790 enable_version_36_(FLAGS_quic_enable_version_36_v2), | 769 enable_version_36_(FLAGS_quic_enable_version_36_v2), |
791 allowed_supported_versions_(supported_versions), | 770 allowed_supported_versions_(supported_versions), |
792 filtered_supported_versions_( | 771 filtered_supported_versions_( |
793 FilterSupportedVersions(supported_versions)) {} | 772 FilterSupportedVersions(supported_versions)) {} |
794 | 773 |
795 QuicVersionManager::~QuicVersionManager() {} | 774 QuicVersionManager::~QuicVersionManager() {} |
796 | 775 |
797 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { | 776 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { |
798 if (disable_pre_32_ != FLAGS_quic_disable_pre_32 || | 777 if (disable_pre_34_ != FLAGS_quic_disable_pre_34 || |
799 disable_pre_34_ != FLAGS_quic_disable_pre_34 || | |
800 enable_version_35_ != FLAGS_quic_enable_version_35 || | 778 enable_version_35_ != FLAGS_quic_enable_version_35 || |
801 enable_version_36_ != FLAGS_quic_enable_version_36_v2) { | 779 enable_version_36_ != FLAGS_quic_enable_version_36_v2) { |
802 disable_pre_32_ = FLAGS_quic_disable_pre_32; | |
803 disable_pre_34_ = FLAGS_quic_disable_pre_34; | 780 disable_pre_34_ = FLAGS_quic_disable_pre_34; |
804 enable_version_35_ = FLAGS_quic_enable_version_35; | 781 enable_version_35_ = FLAGS_quic_enable_version_35; |
805 enable_version_36_ = FLAGS_quic_enable_version_36_v2; | 782 enable_version_36_ = FLAGS_quic_enable_version_36_v2; |
806 filtered_supported_versions_ = | 783 filtered_supported_versions_ = |
807 FilterSupportedVersions(allowed_supported_versions_); | 784 FilterSupportedVersions(allowed_supported_versions_); |
808 } | 785 } |
809 return filtered_supported_versions_; | 786 return filtered_supported_versions_; |
810 } | 787 } |
811 | 788 |
812 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, | 789 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 is_unackable(false), | 852 is_unackable(false), |
876 has_crypto_handshake(has_crypto_handshake), | 853 has_crypto_handshake(has_crypto_handshake), |
877 num_padding_bytes(num_padding_bytes), | 854 num_padding_bytes(num_padding_bytes), |
878 retransmission(0) {} | 855 retransmission(0) {} |
879 | 856 |
880 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; | 857 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; |
881 | 858 |
882 TransmissionInfo::~TransmissionInfo() {} | 859 TransmissionInfo::~TransmissionInfo() {} |
883 | 860 |
884 } // namespace net | 861 } // namespace net |
OLD | NEW |