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

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

Issue 2516033003: Landing Recent QUIC changes until Mon Nov 14 04:43:50 2016 +0000 (Closed)
Patch Set: Remove unused UpdatePacketGapSentHistogram() function. Created 4 years, 1 month 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/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"
11 #include "net/quic/core/quic_versions.h"
11 12
12 using base::StringPiece; 13 using base::StringPiece;
13 using std::map; 14 using std::map;
14 using std::numeric_limits; 15 using std::numeric_limits;
15 using std::ostream; 16 using std::ostream;
16 using std::string; 17 using std::string;
17 18
18 namespace net { 19 namespace net {
19 20
20 const char* const kFinalOffsetHeaderKey = ":final-offset";
21
22 size_t GetPacketHeaderSize(QuicVersion version, 21 size_t GetPacketHeaderSize(QuicVersion version,
23 const QuicPacketHeader& header) { 22 const QuicPacketHeader& header) {
24 return GetPacketHeaderSize(version, header.public_header.connection_id_length, 23 return GetPacketHeaderSize(version, header.public_header.connection_id_length,
25 header.public_header.version_flag, 24 header.public_header.version_flag,
26 header.public_header.multipath_flag, 25 header.public_header.multipath_flag,
27 header.public_header.nonce != nullptr, 26 header.public_header.nonce != nullptr,
28 header.public_header.packet_number_length); 27 header.public_header.packet_number_length);
29 } 28 }
30 29
31 size_t GetPacketHeaderSize(QuicVersion version, 30 size_t GetPacketHeaderSize(QuicVersion version,
32 QuicConnectionIdLength connection_id_length, 31 QuicConnectionIdLength connection_id_length,
33 bool include_version, 32 bool include_version,
34 bool include_path_id, 33 bool include_path_id,
35 bool include_diversification_nonce, 34 bool include_diversification_nonce,
36 QuicPacketNumberLength packet_number_length) { 35 QuicPacketNumberLength packet_number_length) {
37 return kPublicFlagsSize + connection_id_length + 36 return kPublicFlagsSize + connection_id_length +
38 (include_version ? kQuicVersionSize : 0) + 37 (include_version ? kQuicVersionSize : 0) +
39 (include_path_id ? kQuicPathIdSize : 0) + packet_number_length + 38 (include_path_id ? kQuicPathIdSize : 0) + packet_number_length +
40 (include_diversification_nonce ? kDiversificationNonceSize : 0) + 39 (include_diversification_nonce ? kDiversificationNonceSize : 0);
41 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
42 } 40 }
43 41
44 size_t GetStartOfEncryptedData(QuicVersion version, 42 size_t GetStartOfEncryptedData(QuicVersion version,
45 const QuicPacketHeader& header) { 43 const QuicPacketHeader& header) {
46 return GetPacketHeaderSize(version, header) - 44 return GetPacketHeaderSize(version, header);
47 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
48 } 45 }
49 46
50 size_t GetStartOfEncryptedData(QuicVersion version, 47 size_t GetStartOfEncryptedData(QuicVersion version,
51 QuicConnectionIdLength connection_id_length, 48 QuicConnectionIdLength connection_id_length,
52 bool include_version, 49 bool include_version,
53 bool include_path_id, 50 bool include_path_id,
54 bool include_diversification_nonce, 51 bool include_diversification_nonce,
55 QuicPacketNumberLength packet_number_length) { 52 QuicPacketNumberLength packet_number_length) {
56 // Encryption starts before private flags. 53 // Encryption starts before private flags.
57 return GetPacketHeaderSize(version, connection_id_length, include_version, 54 return GetPacketHeaderSize(version, connection_id_length, include_version,
58 include_path_id, include_diversification_nonce, 55 include_path_id, include_diversification_nonce,
59 packet_number_length) - 56 packet_number_length);
60 (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
61 } 57 }
62 58
63 QuicPacketPublicHeader::QuicPacketPublicHeader() 59 QuicPacketPublicHeader::QuicPacketPublicHeader()
64 : connection_id(0), 60 : connection_id(0),
65 connection_id_length(PACKET_8BYTE_CONNECTION_ID), 61 connection_id_length(PACKET_8BYTE_CONNECTION_ID),
66 multipath_flag(false), 62 multipath_flag(false),
67 reset_flag(false), 63 reset_flag(false),
68 version_flag(false), 64 version_flag(false),
69 packet_number_length(PACKET_6BYTE_PACKET_NUMBER), 65 packet_number_length(PACKET_6BYTE_PACKET_NUMBER),
70 nonce(nullptr) {} 66 nonce(nullptr) {}
71 67
72 QuicPacketPublicHeader::QuicPacketPublicHeader( 68 QuicPacketPublicHeader::QuicPacketPublicHeader(
73 const QuicPacketPublicHeader& other) = default; 69 const QuicPacketPublicHeader& other) = default;
74 70
75 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} 71 QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
76 72
77 QuicPacketHeader::QuicPacketHeader() 73 QuicPacketHeader::QuicPacketHeader()
78 : packet_number(0), 74 : packet_number(0), path_id(kDefaultPathId) {}
79 path_id(kDefaultPathId),
80 entropy_flag(false),
81 entropy_hash(0) {}
82 75
83 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) 76 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header)
84 : public_header(header), 77 : public_header(header), packet_number(0), path_id(kDefaultPathId) {}
85 packet_number(0),
86 path_id(kDefaultPathId),
87 entropy_flag(false),
88 entropy_hash(0) {}
89 78
90 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default; 79 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default;
91 80
92 QuicPublicResetPacket::QuicPublicResetPacket() 81 QuicPublicResetPacket::QuicPublicResetPacket()
93 : nonce_proof(0), rejected_packet_number(0) {} 82 : nonce_proof(0), rejected_packet_number(0) {}
94 83
95 QuicPublicResetPacket::QuicPublicResetPacket( 84 QuicPublicResetPacket::QuicPublicResetPacket(
96 const QuicPacketPublicHeader& header) 85 const QuicPacketPublicHeader& header)
97 : public_header(header), nonce_proof(0), rejected_packet_number(0) {} 86 : public_header(header), nonce_proof(0), rejected_packet_number(0) {}
98 87
99 QuicBufferAllocator::~QuicBufferAllocator() = default;
100
101 void StreamBufferDeleter::operator()(char* buffer) const { 88 void StreamBufferDeleter::operator()(char* buffer) const {
102 if (allocator_ != nullptr && buffer != nullptr) { 89 if (allocator_ != nullptr && buffer != nullptr) {
103 allocator_->Delete(buffer); 90 allocator_->Delete(buffer);
104 } 91 }
105 } 92 }
106 93
107 UniqueStreamBuffer NewStreamBuffer(QuicBufferAllocator* allocator, 94 UniqueStreamBuffer NewStreamBuffer(QuicBufferAllocator* allocator,
108 size_t size) { 95 size_t size) {
109 return UniqueStreamBuffer(allocator->New(size), 96 return UniqueStreamBuffer(allocator->New(size),
110 StreamBufferDeleter(allocator)); 97 StreamBufferDeleter(allocator));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 offset(offset), 139 offset(offset),
153 buffer(std::move(buffer)) { 140 buffer(std::move(buffer)) {
154 if (this->buffer != nullptr) { 141 if (this->buffer != nullptr) {
155 DCHECK(data_buffer == nullptr); 142 DCHECK(data_buffer == nullptr);
156 this->data_buffer = this->buffer.get(); 143 this->data_buffer = this->buffer.get();
157 } 144 }
158 } 145 }
159 146
160 QuicStreamFrame::~QuicStreamFrame() {} 147 QuicStreamFrame::~QuicStreamFrame() {}
161 148
162 uint32_t MakeQuicTag(char a, char b, char c, char d) {
163 return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 |
164 static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24;
165 }
166
167 bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) {
168 return std::find(tag_vector.begin(), tag_vector.end(), tag) !=
169 tag_vector.end();
170 }
171
172 QuicVersionVector AllSupportedVersions() {
173 QuicVersionVector supported_versions;
174 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
175 supported_versions.push_back(kSupportedQuicVersions[i]);
176 }
177 return supported_versions;
178 }
179
180 QuicVersionVector CurrentSupportedVersions() {
181 return FilterSupportedVersions(AllSupportedVersions());
182 }
183
184 QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) {
185 QuicVersionVector filtered_versions(versions.size());
186 filtered_versions.clear(); // Guaranteed by spec not to change capacity.
187 for (QuicVersion version : versions) {
188 if (version < QUIC_VERSION_34) {
189 if (!FLAGS_quic_disable_pre_34) {
190 filtered_versions.push_back(version);
191 }
192 } else if (version == QUIC_VERSION_35) {
193 if (FLAGS_quic_enable_version_35) {
194 filtered_versions.push_back(version);
195 }
196 } else if (version == QUIC_VERSION_36) {
197 if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) {
198 filtered_versions.push_back(version);
199 }
200 } else {
201 filtered_versions.push_back(version);
202 }
203 }
204 return filtered_versions;
205 }
206
207 QuicVersionVector VersionOfIndex(const QuicVersionVector& versions, int index) {
208 QuicVersionVector version;
209 int version_count = versions.size();
210 if (index >= 0 && index < version_count) {
211 version.push_back(versions[index]);
212 } else {
213 version.push_back(QUIC_VERSION_UNSUPPORTED);
214 }
215 return version;
216 }
217
218 QuicTag QuicVersionToQuicTag(const QuicVersion version) {
219 switch (version) {
220 case QUIC_VERSION_32:
221 return MakeQuicTag('Q', '0', '3', '2');
222 case QUIC_VERSION_33:
223 return MakeQuicTag('Q', '0', '3', '3');
224 case QUIC_VERSION_34:
225 return MakeQuicTag('Q', '0', '3', '4');
226 case QUIC_VERSION_35:
227 return MakeQuicTag('Q', '0', '3', '5');
228 case QUIC_VERSION_36:
229 return MakeQuicTag('Q', '0', '3', '6');
230 default:
231 // This shold be an ERROR because we should never attempt to convert an
232 // invalid QuicVersion to be written to the wire.
233 LOG(ERROR) << "Unsupported QuicVersion: " << version;
234 return 0;
235 }
236 }
237
238 QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) {
239 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
240 if (version_tag == QuicVersionToQuicTag(kSupportedQuicVersions[i])) {
241 return kSupportedQuicVersions[i];
242 }
243 }
244 // Reading from the client so this should not be considered an ERROR.
245 DVLOG(1) << "Unsupported QuicTag version: "
246 << QuicUtils::TagToString(version_tag);
247 return QUIC_VERSION_UNSUPPORTED;
248 }
249
250 #define RETURN_STRING_LITERAL(x) \
251 case x: \
252 return #x
253
254 string QuicVersionToString(const QuicVersion version) {
255 switch (version) {
256 RETURN_STRING_LITERAL(QUIC_VERSION_32);
257 RETURN_STRING_LITERAL(QUIC_VERSION_33);
258 RETURN_STRING_LITERAL(QUIC_VERSION_34);
259 RETURN_STRING_LITERAL(QUIC_VERSION_35);
260 RETURN_STRING_LITERAL(QUIC_VERSION_36);
261 default:
262 return "QUIC_VERSION_UNSUPPORTED";
263 }
264 }
265
266 string QuicVersionVectorToString(const QuicVersionVector& versions) {
267 string result = "";
268 for (size_t i = 0; i < versions.size(); ++i) {
269 if (i != 0) {
270 result.append(",");
271 }
272 result.append(QuicVersionToString(versions[i]));
273 }
274 return result;
275 }
276
277 ostream& operator<<(ostream& os, const Perspective& s) {
278 if (s == Perspective::IS_SERVER) {
279 os << "IS_SERVER";
280 } else {
281 os << "IS_CLIENT";
282 }
283 return os;
284 }
285
286 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { 149 ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
287 os << "{ connection_id: " << header.public_header.connection_id 150 os << "{ connection_id: " << header.public_header.connection_id
288 << ", connection_id_length: " << header.public_header.connection_id_length 151 << ", connection_id_length: " << header.public_header.connection_id_length
289 << ", packet_number_length: " << header.public_header.packet_number_length 152 << ", packet_number_length: " << header.public_header.packet_number_length
290 << ", multipath_flag: " << header.public_header.multipath_flag 153 << ", multipath_flag: " << header.public_header.multipath_flag
291 << ", reset_flag: " << header.public_header.reset_flag 154 << ", reset_flag: " << header.public_header.reset_flag
292 << ", version_flag: " << header.public_header.version_flag; 155 << ", version_flag: " << header.public_header.version_flag;
293 if (header.public_header.version_flag) { 156 if (header.public_header.version_flag) {
294 os << ", version:"; 157 os << ", version:";
295 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { 158 for (size_t i = 0; i < header.public_header.versions.size(); ++i) {
296 os << " "; 159 os << " ";
297 os << QuicVersionToString(header.public_header.versions[i]); 160 os << QuicVersionToString(header.public_header.versions[i]);
298 } 161 }
299 } 162 }
300 if (header.public_header.nonce != nullptr) { 163 if (header.public_header.nonce != nullptr) {
301 os << ", diversification_nonce: " 164 os << ", diversification_nonce: "
302 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(), 165 << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(),
303 header.public_header.nonce->size())); 166 header.public_header.nonce->size()));
304 } 167 }
305 os << ", entropy_flag: " << header.entropy_flag 168 os << ", path_id: " << static_cast<int>(header.path_id)
306 << ", entropy hash: " << static_cast<int>(header.entropy_hash)
307 << ", path_id: " << static_cast<int>(header.path_id)
308 << ", packet_number: " << header.packet_number << " }\n"; 169 << ", packet_number: " << header.packet_number << " }\n";
309 return os; 170 return os;
310 } 171 }
311 172
312 bool IsAwaitingPacket(const QuicAckFrame& ack_frame, 173 bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
313 QuicPacketNumber packet_number, 174 QuicPacketNumber packet_number,
314 QuicPacketNumber peer_least_packet_awaiting_ack) { 175 QuicPacketNumber peer_least_packet_awaiting_ack) {
315 if (ack_frame.missing) {
316 return packet_number > ack_frame.largest_observed ||
317 ack_frame.packets.Contains(packet_number);
318 }
319 return packet_number >= peer_least_packet_awaiting_ack && 176 return packet_number >= peer_least_packet_awaiting_ack &&
320 !ack_frame.packets.Contains(packet_number); 177 !ack_frame.packets.Contains(packet_number);
321 } 178 }
322 179
323 QuicStopWaitingFrame::QuicStopWaitingFrame() 180 QuicStopWaitingFrame::QuicStopWaitingFrame()
324 : path_id(kDefaultPathId), entropy_hash(0), least_unacked(0) {} 181 : path_id(kDefaultPathId), least_unacked(0) {}
325 182
326 QuicStopWaitingFrame::~QuicStopWaitingFrame() {} 183 QuicStopWaitingFrame::~QuicStopWaitingFrame() {}
327 184
328 QuicAckFrame::QuicAckFrame() 185 QuicAckFrame::QuicAckFrame()
329 : largest_observed(0), 186 : largest_observed(0),
330 ack_delay_time(QuicTime::Delta::Infinite()), 187 ack_delay_time(QuicTime::Delta::Infinite()),
331 path_id(kDefaultPathId), 188 path_id(kDefaultPathId) {}
332 entropy_hash(0),
333 is_truncated(false),
334 missing(true) {}
335 189
336 QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default; 190 QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default;
337 191
338 QuicAckFrame::~QuicAckFrame() {} 192 QuicAckFrame::~QuicAckFrame() {}
339 193
340 QuicRstStreamFrame::QuicRstStreamFrame() 194 QuicRstStreamFrame::QuicRstStreamFrame()
341 : stream_id(0), error_code(QUIC_STREAM_NO_ERROR), byte_offset(0) {} 195 : stream_id(0), error_code(QUIC_STREAM_NO_ERROR), byte_offset(0) {}
342 196
343 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id, 197 QuicRstStreamFrame::QuicRstStreamFrame(QuicStreamId stream_id,
344 QuicRstStreamErrorCode error_code, 198 QuicRstStreamErrorCode error_code,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame) 235 QuicFrame::QuicFrame(QuicWindowUpdateFrame* frame)
382 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {} 236 : type(WINDOW_UPDATE_FRAME), window_update_frame(frame) {}
383 237
384 QuicFrame::QuicFrame(QuicBlockedFrame* frame) 238 QuicFrame::QuicFrame(QuicBlockedFrame* frame)
385 : type(BLOCKED_FRAME), blocked_frame(frame) {} 239 : type(BLOCKED_FRAME), blocked_frame(frame) {}
386 240
387 QuicFrame::QuicFrame(QuicPathCloseFrame* frame) 241 QuicFrame::QuicFrame(QuicPathCloseFrame* frame)
388 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {} 242 : type(PATH_CLOSE_FRAME), path_close_frame(frame) {}
389 243
390 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) { 244 ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) {
391 os << "{ entropy_hash: " << static_cast<int>(sent_info.entropy_hash) 245 os << "{ least_unacked: " << sent_info.least_unacked << " }\n";
392 << ", least_unacked: " << sent_info.least_unacked << " }\n";
393 return os; 246 return os;
394 } 247 }
395 248
396 PacketNumberQueue::PacketNumberQueue() = default; 249 PacketNumberQueue::PacketNumberQueue() = default;
397 PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default; 250 PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default;
398 // TODO(rtenneti): on windows RValue reference gives errors. 251 // TODO(rtenneti): on windows RValue reference gives errors.
399 // PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default; 252 // PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default;
400 PacketNumberQueue::~PacketNumberQueue() {} 253 PacketNumberQueue::~PacketNumberQueue() {}
401 254
402 PacketNumberQueue& PacketNumberQueue::operator=( 255 PacketNumberQueue& PacketNumberQueue::operator=(
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 for (const Interval<QuicPacketNumber>& interval : q) { 363 for (const Interval<QuicPacketNumber>& interval : q) {
511 for (QuicPacketNumber packet_number = interval.min(); 364 for (QuicPacketNumber packet_number = interval.min();
512 packet_number < interval.max(); ++packet_number) { 365 packet_number < interval.max(); ++packet_number) {
513 os << packet_number << " "; 366 os << packet_number << " ";
514 } 367 }
515 } 368 }
516 return os; 369 return os;
517 } 370 }
518 371
519 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) { 372 ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
520 os << "{ entropy_hash: " << static_cast<int>(ack_frame.entropy_hash) 373 os << "{ largest_observed: " << ack_frame.largest_observed
521 << ", largest_observed: " << ack_frame.largest_observed
522 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds() 374 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds()
523 << ", packets: [ " << ack_frame.packets << " ]" 375 << ", packets: [ " << ack_frame.packets << " ]"
524 << ", is_truncated: " << ack_frame.is_truncated
525 << ", received_packets: [ "; 376 << ", received_packets: [ ";
526 for (const std::pair<QuicPacketNumber, QuicTime>& p : 377 for (const std::pair<QuicPacketNumber, QuicTime>& p :
527 ack_frame.received_packet_times) { 378 ack_frame.received_packet_times) {
528 os << p.first << " at " << p.second.ToDebuggingValue() << " "; 379 os << p.first << " at " << p.second.ToDebuggingValue() << " ";
529 } 380 }
530 os << " ] }\n"; 381 os << " ] }\n";
531 return os; 382 return os;
532 } 383 }
533 384
534 ostream& operator<<(ostream& os, const QuicFrame& frame) { 385 ostream& operator<<(ostream& os, const QuicFrame& frame) {
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 603
753 StringPiece QuicPacket::Plaintext(QuicVersion version) const { 604 StringPiece QuicPacket::Plaintext(QuicVersion version) const {
754 const size_t start_of_encrypted_data = GetStartOfEncryptedData( 605 const size_t start_of_encrypted_data = GetStartOfEncryptedData(
755 version, connection_id_length_, includes_version_, includes_path_id_, 606 version, connection_id_length_, includes_version_, includes_path_id_,
756 includes_diversification_nonce_, packet_number_length_); 607 includes_diversification_nonce_, packet_number_length_);
757 return StringPiece(data() + start_of_encrypted_data, 608 return StringPiece(data() + start_of_encrypted_data,
758 length() - start_of_encrypted_data); 609 length() - start_of_encrypted_data);
759 } 610 }
760 611
761 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) 612 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions)
762 : disable_pre_34_(FLAGS_quic_disable_pre_34), 613 : enable_version_36_(FLAGS_quic_enable_version_36_v3),
763 enable_version_35_(FLAGS_quic_enable_version_35),
764 enable_version_36_(FLAGS_quic_enable_version_36_v2),
765 allowed_supported_versions_(supported_versions), 614 allowed_supported_versions_(supported_versions),
766 filtered_supported_versions_( 615 filtered_supported_versions_(
767 FilterSupportedVersions(supported_versions)) {} 616 FilterSupportedVersions(supported_versions)) {}
768 617
769 QuicVersionManager::~QuicVersionManager() {} 618 QuicVersionManager::~QuicVersionManager() {}
770 619
771 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { 620 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() {
772 if (disable_pre_34_ != FLAGS_quic_disable_pre_34 || 621 MaybeRefilterSupportedVersions();
773 enable_version_35_ != FLAGS_quic_enable_version_35 || 622 return filtered_supported_versions_;
774 enable_version_36_ != FLAGS_quic_enable_version_36_v2) { 623 }
775 disable_pre_34_ = FLAGS_quic_disable_pre_34; 624
776 enable_version_35_ = FLAGS_quic_enable_version_35; 625 void QuicVersionManager::MaybeRefilterSupportedVersions() {
777 enable_version_36_ = FLAGS_quic_enable_version_36_v2; 626 if (enable_version_36_ != FLAGS_quic_enable_version_36_v3) {
778 filtered_supported_versions_ = 627 enable_version_36_ = FLAGS_quic_enable_version_36_v3;
779 FilterSupportedVersions(allowed_supported_versions_); 628 RefilterSupportedVersions();
780 } 629 }
781 return filtered_supported_versions_; 630 }
631
632 void QuicVersionManager::RefilterSupportedVersions() {
633 filtered_supported_versions_ =
634 FilterSupportedVersions(allowed_supported_versions_);
782 } 635 }
783 636
784 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, 637 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener,
785 QuicPacketLength data_length) 638 QuicPacketLength data_length)
786 : ack_listener(listener), length(data_length) { 639 : ack_listener(listener), length(data_length) {
787 DCHECK(listener != nullptr); 640 DCHECK(listener != nullptr);
788 } 641 }
789 642
790 AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) = 643 AckListenerWrapper::AckListenerWrapper(const AckListenerWrapper& other) =
791 default; 644 default;
792 645
793 AckListenerWrapper::~AckListenerWrapper() {} 646 AckListenerWrapper::~AckListenerWrapper() {}
794 647
795 SerializedPacket::SerializedPacket(QuicPathId path_id, 648 SerializedPacket::SerializedPacket(QuicPathId path_id,
796 QuicPacketNumber packet_number, 649 QuicPacketNumber packet_number,
797 QuicPacketNumberLength packet_number_length, 650 QuicPacketNumberLength packet_number_length,
798 const char* encrypted_buffer, 651 const char* encrypted_buffer,
799 QuicPacketLength encrypted_length, 652 QuicPacketLength encrypted_length,
800 QuicPacketEntropyHash entropy_hash,
801 bool has_ack, 653 bool has_ack,
802 bool has_stop_waiting) 654 bool has_stop_waiting)
803 : encrypted_buffer(encrypted_buffer), 655 : encrypted_buffer(encrypted_buffer),
804 encrypted_length(encrypted_length), 656 encrypted_length(encrypted_length),
805 has_crypto_handshake(NOT_HANDSHAKE), 657 has_crypto_handshake(NOT_HANDSHAKE),
806 num_padding_bytes(0), 658 num_padding_bytes(0),
807 path_id(path_id), 659 path_id(path_id),
808 packet_number(packet_number), 660 packet_number(packet_number),
809 packet_number_length(packet_number_length), 661 packet_number_length(packet_number_length),
810 encryption_level(ENCRYPTION_NONE), 662 encryption_level(ENCRYPTION_NONE),
811 entropy_hash(entropy_hash),
812 has_ack(has_ack), 663 has_ack(has_ack),
813 has_stop_waiting(has_stop_waiting), 664 has_stop_waiting(has_stop_waiting),
814 transmission_type(NOT_RETRANSMISSION), 665 transmission_type(NOT_RETRANSMISSION),
815 original_path_id(kInvalidPathId), 666 original_path_id(kInvalidPathId),
816 original_packet_number(0) {} 667 original_packet_number(0) {}
817 668
818 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default; 669 SerializedPacket::SerializedPacket(const SerializedPacket& other) = default;
819 670
820 SerializedPacket::~SerializedPacket() {} 671 SerializedPacket::~SerializedPacket() {}
821 672
(...skipping 25 matching lines...) Expand all
847 is_unackable(false), 698 is_unackable(false),
848 has_crypto_handshake(has_crypto_handshake), 699 has_crypto_handshake(has_crypto_handshake),
849 num_padding_bytes(num_padding_bytes), 700 num_padding_bytes(num_padding_bytes),
850 retransmission(0) {} 701 retransmission(0) {}
851 702
852 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; 703 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default;
853 704
854 TransmissionInfo::~TransmissionInfo() {} 705 TransmissionInfo::~TransmissionInfo() {}
855 706
856 } // namespace net 707 } // 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