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

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

Issue 15937012: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Small bug fixes 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
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(bool include_version) { 16 size_t GetPacketHeaderSize(QuicPacketHeader header) {
17 return kPublicFlagsSize + kQuicGuidSize + 17 return GetPacketHeaderSize(header.public_header.guid_length,
18 header.public_header.version_flag,
19 header.is_in_fec_group);
20 }
21
22 size_t GetPacketHeaderSize(QuicGuidLength guid_length,
23 bool include_version,
24 InFecGroup is_in_fec_group) {
25 return kPublicFlagsSize + guid_length +
18 (include_version ? kQuicVersionSize : 0) + kSequenceNumberSize + 26 (include_version ? kQuicVersionSize : 0) + kSequenceNumberSize +
19 kPrivateFlagsSize + kFecGroupSize; 27 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0);
20 } 28 }
21 29
22 size_t GetPublicResetPacketSize() { 30 size_t GetPublicResetPacketSize() {
23 return kPublicFlagsSize + kQuicGuidSize + kPublicResetNonceSize + 31 return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize +
24 kSequenceNumberSize; 32 kSequenceNumberSize;
25 } 33 }
26 34
27 size_t GetStartOfFecProtectedData(bool include_version) { 35 size_t GetStartOfFecProtectedData(QuicGuidLength guid_length,
28 return GetPacketHeaderSize(include_version); 36 bool include_version) {
37 return GetPacketHeaderSize(guid_length, include_version, IN_FEC_GROUP);
29 } 38 }
30 39
31 size_t GetStartOfEncryptedData(bool include_version) { 40 size_t GetStartOfEncryptedData(QuicGuidLength guid_length,
32 return GetPacketHeaderSize(include_version) - kPrivateFlagsSize - 41 bool include_version) {
33 kFecGroupSize; 42 // Don't include the fec size, since encryption starts before private flags.
43 return GetPacketHeaderSize(guid_length, include_version, NOT_IN_FEC_GROUP) -
44 kPrivateFlagsSize;
34 } 45 }
35 46
36 uint32 MakeQuicTag(char a, char b, char c, char d) { 47 uint32 MakeQuicTag(char a, char b, char c, char d) {
37 return static_cast<uint32>(a) | 48 return static_cast<uint32>(a) |
38 static_cast<uint32>(b) << 8 | 49 static_cast<uint32>(b) << 8 |
39 static_cast<uint32>(c) << 16 | 50 static_cast<uint32>(c) << 16 |
40 static_cast<uint32>(d) << 24; 51 static_cast<uint32>(d) << 24;
41 } 52 }
42 53
43 QuicPacketPublicHeader::QuicPacketPublicHeader() 54 QuicPacketPublicHeader::QuicPacketPublicHeader()
44 : guid(0), 55 : guid(0),
56 guid_length(PACKET_8BYTE_GUID),
45 reset_flag(false), 57 reset_flag(false),
46 version_flag(false) { 58 version_flag(false) {
47 } 59 }
48 60
49 QuicPacketPublicHeader::QuicPacketPublicHeader( 61 QuicPacketPublicHeader::QuicPacketPublicHeader(
50 const QuicPacketPublicHeader& other) 62 const QuicPacketPublicHeader& other)
51 : guid(other.guid), 63 : guid(other.guid),
64 guid_length(other.guid_length),
52 reset_flag(other.reset_flag), 65 reset_flag(other.reset_flag),
53 version_flag(other.version_flag), 66 version_flag(other.version_flag),
54 versions(other.versions) { 67 versions(other.versions) {
55 } 68 }
56 69
57 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} 70 QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
58 71
59 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=( 72 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=(
60 const QuicPacketPublicHeader& other) { 73 const QuicPacketPublicHeader& other) {
61 guid = other.guid; 74 guid = other.guid;
62 reset_flag = other.reset_flag; 75 reset_flag = other.reset_flag;
63 version_flag = other.version_flag; 76 version_flag = other.version_flag;
64 versions = other.versions; 77 versions = other.versions;
65 return *this; 78 return *this;
66 } 79 }
67 80
68 QuicPacketHeader::QuicPacketHeader() 81 QuicPacketHeader::QuicPacketHeader()
69 : fec_flag(false), 82 : fec_flag(false),
70 fec_entropy_flag(false),
71 entropy_flag(false), 83 entropy_flag(false),
72 entropy_hash(0), 84 entropy_hash(0),
73 packet_sequence_number(0), 85 packet_sequence_number(0),
86 is_in_fec_group(NOT_IN_FEC_GROUP),
74 fec_group(0) { 87 fec_group(0) {
75 } 88 }
76 89
77 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header) 90 QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header)
78 : public_header(header), 91 : public_header(header),
79 fec_flag(false), 92 fec_flag(false),
80 fec_entropy_flag(false),
81 entropy_flag(false), 93 entropy_flag(false),
82 entropy_hash(0), 94 entropy_hash(0),
83 packet_sequence_number(0), 95 packet_sequence_number(0),
96 is_in_fec_group(NOT_IN_FEC_GROUP),
84 fec_group(0) { 97 fec_group(0) {
85 } 98 }
86 99
87 QuicStreamFrame::QuicStreamFrame() {} 100 QuicStreamFrame::QuicStreamFrame() {}
88 101
89 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id, 102 QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
90 bool fin, 103 bool fin,
91 QuicStreamOffset offset, 104 QuicStreamOffset offset,
92 StringPiece data) 105 StringPiece data)
93 : stream_id(stream_id), 106 : stream_id(stream_id),
94 fin(fin), 107 fin(fin),
95 offset(offset), 108 offset(offset),
96 data(data) { 109 data(data) {
97 } 110 }
98 111
99 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { 112 ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
100 os << "{ guid: " << header.public_header.guid 113 os << "{ guid: " << header.public_header.guid
114 << ", guid_length:" << header.public_header.guid_length
101 << ", reset_flag: " << header.public_header.reset_flag 115 << ", reset_flag: " << header.public_header.reset_flag
102 << ", version_flag: " << header.public_header.version_flag; 116 << ", version_flag: " << header.public_header.version_flag;
103 if (header.public_header.version_flag) { 117 if (header.public_header.version_flag) {
104 os << " version: "; 118 os << " version: ";
105 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { 119 for (size_t i = 0; i < header.public_header.versions.size(); ++i) {
106 os << header.public_header.versions[0] << " "; 120 os << header.public_header.versions[0] << " ";
107 } 121 }
108 } 122 }
109 os << ", fec_flag: " << header.fec_flag 123 os << ", fec_flag: " << header.fec_flag
110 << ", entropy_flag: " << header.entropy_flag 124 << ", entropy_flag: " << header.entropy_flag
111 << ", entropy hash: " << static_cast<int>(header.entropy_hash) 125 << ", entropy hash: " << static_cast<int>(header.entropy_hash)
112 << ", sequence_number: " << header.packet_sequence_number 126 << ", sequence_number: " << header.packet_sequence_number
127 << ", is_in_fec_group:" << header.is_in_fec_group
113 << ", fec_group: " << header.fec_group<< "}\n"; 128 << ", fec_group: " << header.fec_group<< "}\n";
114 return os; 129 return os;
115 } 130 }
116 131
117 // TODO(ianswett): Initializing largest_observed to 0 should not be necessary. 132 // TODO(ianswett): Initializing largest_observed to 0 should not be necessary.
118 ReceivedPacketInfo::ReceivedPacketInfo() 133 ReceivedPacketInfo::ReceivedPacketInfo()
119 : largest_observed(0), 134 : largest_observed(0),
120 delta_time_largest_observed(QuicTime::Delta::Infinite()) { 135 delta_time_largest_observed(QuicTime::Delta::Infinite()) {
121 } 136 }
122 137
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 return true; 261 return true;
247 } 262 }
248 263
249 QuicData::~QuicData() { 264 QuicData::~QuicData() {
250 if (owns_buffer_) { 265 if (owns_buffer_) {
251 delete [] const_cast<char*>(buffer_); 266 delete [] const_cast<char*>(buffer_);
252 } 267 }
253 } 268 }
254 269
255 StringPiece QuicPacket::FecProtectedData() const { 270 StringPiece QuicPacket::FecProtectedData() const {
256 const size_t start_of_fec = GetStartOfFecProtectedData(includes_version_); 271 const size_t start_of_fec = GetStartOfFecProtectedData(guid_length_,
272 includes_version_);
257 return StringPiece(data() + start_of_fec, length() - start_of_fec); 273 return StringPiece(data() + start_of_fec, length() - start_of_fec);
258 } 274 }
259 275
260 StringPiece QuicPacket::AssociatedData() const { 276 StringPiece QuicPacket::AssociatedData() const {
261 return StringPiece(data() + kStartOfHashData, 277 return StringPiece(data() + kStartOfHashData,
262 GetStartOfEncryptedData(includes_version_) - 278 GetStartOfEncryptedData(guid_length_, includes_version_) -
263 kStartOfHashData); 279 kStartOfHashData);
264 } 280 }
265 281
266 StringPiece QuicPacket::BeforePlaintext() const { 282 StringPiece QuicPacket::BeforePlaintext() const {
267 return StringPiece(data(), GetStartOfEncryptedData(includes_version_)); 283 return StringPiece(data(), GetStartOfEncryptedData(guid_length_,
284 includes_version_));
268 } 285 }
269 286
270 StringPiece QuicPacket::Plaintext() const { 287 StringPiece QuicPacket::Plaintext() const {
271 const size_t start_of_encrypted_data = 288 const size_t start_of_encrypted_data =
272 GetStartOfEncryptedData(includes_version_); 289 GetStartOfEncryptedData(guid_length_, includes_version_);
273 return StringPiece(data() + start_of_encrypted_data, 290 return StringPiece(data() + start_of_encrypted_data,
274 length() - start_of_encrypted_data); 291 length() - start_of_encrypted_data);
275 } 292 }
276 293
277 RetransmittableFrames::RetransmittableFrames() 294 RetransmittableFrames::RetransmittableFrames()
278 : encryption_level_(NUM_ENCRYPTION_LEVELS) { 295 : encryption_level_(NUM_ENCRYPTION_LEVELS) {
279 } 296 }
280 297
281 RetransmittableFrames::~RetransmittableFrames() { 298 RetransmittableFrames::~RetransmittableFrames() {
282 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { 299 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 return os; 354 return os;
338 } 355 }
339 356
340 ostream& operator<<(ostream& os, const QuicConsumedData& s) { 357 ostream& operator<<(ostream& os, const QuicConsumedData& s) {
341 os << "bytes_consumed: " << s.bytes_consumed 358 os << "bytes_consumed: " << s.bytes_consumed
342 << " fin_consumed: " << s.fin_consumed; 359 << " fin_consumed: " << s.fin_consumed;
343 return os; 360 return os;
344 } 361 }
345 362
346 } // namespace net 363 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698