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

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

Issue 2403193003: Landing Recent QUIC changes until 9:41 AM, Oct 10, 2016 UTC-7 (Closed)
Patch Set: git cl format Created 4 years, 2 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
« no previous file with comments | « net/quic/core/quic_protocol.h ('k') | net/quic/core/quic_protocol_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/quic/core/quic_protocol.h ('k') | net/quic/core/quic_protocol_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698