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

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

Issue 16256017: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merging with TOT Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/quic_session.h » ('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/quic_protocol.h" 5 #include "net/quic/quic_protocol.h"
6 #include "base/stl_util.h" 6 #include "base/stl_util.h"
7 7
8 using base::StringPiece; 8 using base::StringPiece;
9 using std::map; 9 using std::map;
10 using std::numeric_limits; 10 using std::numeric_limits;
11 using std::ostream; 11 using std::ostream;
12 using std::string; 12 using std::string;
13 13
14 namespace net { 14 namespace net {
15 15
16 size_t GetPacketHeaderSize(QuicPacketHeader header) { 16 size_t GetPacketHeaderSize(QuicPacketHeader header) {
17 return GetPacketHeaderSize(header.public_header.guid_length, 17 return GetPacketHeaderSize(header.public_header.guid_length,
18 header.public_header.version_flag, 18 header.public_header.version_flag,
19 header.public_header.sequence_number_length,
19 header.is_in_fec_group); 20 header.is_in_fec_group);
20 } 21 }
21 22
22 size_t GetPacketHeaderSize(QuicGuidLength guid_length, 23 size_t GetPacketHeaderSize(QuicGuidLength guid_length,
23 bool include_version, 24 bool include_version,
25 QuicSequenceNumberLength sequence_number_length,
24 InFecGroup is_in_fec_group) { 26 InFecGroup is_in_fec_group) {
25 return kPublicFlagsSize + guid_length + 27 return kPublicFlagsSize + guid_length +
26 (include_version ? kQuicVersionSize : 0) + kSequenceNumberSize + 28 (include_version ? kQuicVersionSize : 0) + sequence_number_length +
27 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); 29 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0);
28 } 30 }
29 31
30 size_t GetPublicResetPacketSize() { 32 size_t GetPublicResetPacketSize() {
31 return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize + 33 return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize +
32 kSequenceNumberSize; 34 PACKET_6BYTE_SEQUENCE_NUMBER;
33 } 35 }
34 36
35 size_t GetStartOfFecProtectedData(QuicGuidLength guid_length, 37 size_t GetStartOfFecProtectedData(
36 bool include_version) { 38 QuicGuidLength guid_length,
37 return GetPacketHeaderSize(guid_length, include_version, IN_FEC_GROUP); 39 bool include_version,
40 QuicSequenceNumberLength sequence_number_length) {
41 return GetPacketHeaderSize(
42 guid_length, include_version, sequence_number_length, IN_FEC_GROUP);
38 } 43 }
39 44
40 size_t GetStartOfEncryptedData(QuicGuidLength guid_length, 45 size_t GetStartOfEncryptedData(
41 bool include_version) { 46 QuicGuidLength guid_length,
47 bool include_version,
48 QuicSequenceNumberLength sequence_number_length) {
42 // Don't include the fec size, since encryption starts before private flags. 49 // Don't include the fec size, since encryption starts before private flags.
43 return GetPacketHeaderSize(guid_length, include_version, NOT_IN_FEC_GROUP) - 50 return GetPacketHeaderSize(
51 guid_length, include_version, sequence_number_length, NOT_IN_FEC_GROUP) -
44 kPrivateFlagsSize; 52 kPrivateFlagsSize;
45 } 53 }
46 54
47 uint32 MakeQuicTag(char a, char b, char c, char d) { 55 uint32 MakeQuicTag(char a, char b, char c, char d) {
48 return static_cast<uint32>(a) | 56 return static_cast<uint32>(a) |
49 static_cast<uint32>(b) << 8 | 57 static_cast<uint32>(b) << 8 |
50 static_cast<uint32>(c) << 16 | 58 static_cast<uint32>(c) << 16 |
51 static_cast<uint32>(d) << 24; 59 static_cast<uint32>(d) << 24;
52 } 60 }
53 61
54 QuicPacketPublicHeader::QuicPacketPublicHeader() 62 QuicPacketPublicHeader::QuicPacketPublicHeader()
55 : guid(0), 63 : guid(0),
56 guid_length(PACKET_8BYTE_GUID), 64 guid_length(PACKET_8BYTE_GUID),
57 reset_flag(false), 65 reset_flag(false),
58 version_flag(false) { 66 version_flag(false),
67 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) {
59 } 68 }
60 69
61 QuicPacketPublicHeader::QuicPacketPublicHeader( 70 QuicPacketPublicHeader::QuicPacketPublicHeader(
62 const QuicPacketPublicHeader& other) 71 const QuicPacketPublicHeader& other)
63 : guid(other.guid), 72 : guid(other.guid),
64 guid_length(other.guid_length), 73 guid_length(other.guid_length),
65 reset_flag(other.reset_flag), 74 reset_flag(other.reset_flag),
66 version_flag(other.version_flag), 75 version_flag(other.version_flag),
76 sequence_number_length(other.sequence_number_length),
67 versions(other.versions) { 77 versions(other.versions) {
68 } 78 }
69 79
70 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} 80 QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
71 81
72 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=( 82 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=(
73 const QuicPacketPublicHeader& other) { 83 const QuicPacketPublicHeader& other) {
74 guid = other.guid; 84 guid = other.guid;
75 reset_flag = other.reset_flag; 85 reset_flag = other.reset_flag;
76 version_flag = other.version_flag; 86 version_flag = other.version_flag;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 QuicStreamId last_good_stream_id, 254 QuicStreamId last_good_stream_id,
245 const string& reason) 255 const string& reason)
246 : error_code(error_code), 256 : error_code(error_code),
247 last_good_stream_id(last_good_stream_id), 257 last_good_stream_id(last_good_stream_id),
248 reason_phrase(reason) { 258 reason_phrase(reason) {
249 DCHECK_LE(error_code, numeric_limits<uint8>::max()); 259 DCHECK_LE(error_code, numeric_limits<uint8>::max());
250 } 260 }
251 261
252 QuicFecData::QuicFecData() {} 262 QuicFecData::QuicFecData() {}
253 263
254 bool QuicFecData::operator==(const QuicFecData& other) const {
255 if (fec_group != other.fec_group) {
256 return false;
257 }
258 if (redundancy != other.redundancy) {
259 return false;
260 }
261 return true;
262 }
263
264 QuicData::~QuicData() { 264 QuicData::~QuicData() {
265 if (owns_buffer_) { 265 if (owns_buffer_) {
266 delete [] const_cast<char*>(buffer_); 266 delete [] const_cast<char*>(buffer_);
267 } 267 }
268 } 268 }
269 269
270 StringPiece QuicPacket::FecProtectedData() const { 270 StringPiece QuicPacket::FecProtectedData() const {
271 const size_t start_of_fec = GetStartOfFecProtectedData(guid_length_, 271 const size_t start_of_fec = GetStartOfFecProtectedData(
272 includes_version_); 272 guid_length_, includes_version_, sequence_number_length_);
273 return StringPiece(data() + start_of_fec, length() - start_of_fec); 273 return StringPiece(data() + start_of_fec, length() - start_of_fec);
274 } 274 }
275 275
276 StringPiece QuicPacket::AssociatedData() const { 276 StringPiece QuicPacket::AssociatedData() const {
277 return StringPiece(data() + kStartOfHashData, 277 return StringPiece(
278 GetStartOfEncryptedData(guid_length_, includes_version_) - 278 data() + kStartOfHashData,
279 kStartOfHashData); 279 GetStartOfEncryptedData(
280 guid_length_, includes_version_, sequence_number_length_) -
281 kStartOfHashData);
280 } 282 }
281 283
282 StringPiece QuicPacket::BeforePlaintext() const { 284 StringPiece QuicPacket::BeforePlaintext() const {
283 return StringPiece(data(), GetStartOfEncryptedData(guid_length_, 285 return StringPiece(data(), GetStartOfEncryptedData(guid_length_,
284 includes_version_)); 286 includes_version_,
287 sequence_number_length_));
285 } 288 }
286 289
287 StringPiece QuicPacket::Plaintext() const { 290 StringPiece QuicPacket::Plaintext() const {
288 const size_t start_of_encrypted_data = 291 const size_t start_of_encrypted_data =
289 GetStartOfEncryptedData(guid_length_, includes_version_); 292 GetStartOfEncryptedData(
293 guid_length_, includes_version_, sequence_number_length_);
290 return StringPiece(data() + start_of_encrypted_data, 294 return StringPiece(data() + start_of_encrypted_data,
291 length() - start_of_encrypted_data); 295 length() - start_of_encrypted_data);
292 } 296 }
293 297
294 RetransmittableFrames::RetransmittableFrames() 298 RetransmittableFrames::RetransmittableFrames()
295 : encryption_level_(NUM_ENCRYPTION_LEVELS) { 299 : encryption_level_(NUM_ENCRYPTION_LEVELS) {
296 } 300 }
297 301
298 RetransmittableFrames::~RetransmittableFrames() { 302 RetransmittableFrames::~RetransmittableFrames() {
299 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { 303 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 return os; 358 return os;
355 } 359 }
356 360
357 ostream& operator<<(ostream& os, const QuicConsumedData& s) { 361 ostream& operator<<(ostream& os, const QuicConsumedData& s) {
358 os << "bytes_consumed: " << s.bytes_consumed 362 os << "bytes_consumed: " << s.bytes_consumed
359 << " fin_consumed: " << s.fin_consumed; 363 << " fin_consumed: " << s.fin_consumed;
360 return os; 364 return os;
361 } 365 }
362 366
363 } // namespace net 367 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_protocol.h ('k') | net/quic/quic_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698