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/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, | |
20 header.is_in_fec_group); | 19 header.is_in_fec_group); |
21 } | 20 } |
22 | 21 |
23 size_t GetPacketHeaderSize(QuicGuidLength guid_length, | 22 size_t GetPacketHeaderSize(QuicGuidLength guid_length, |
24 bool include_version, | 23 bool include_version, |
25 QuicSequenceNumberLength sequence_number_length, | |
26 InFecGroup is_in_fec_group) { | 24 InFecGroup is_in_fec_group) { |
27 return kPublicFlagsSize + guid_length + | 25 return kPublicFlagsSize + guid_length + |
28 (include_version ? kQuicVersionSize : 0) + sequence_number_length + | 26 (include_version ? kQuicVersionSize : 0) + kSequenceNumberSize + |
29 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); | 27 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); |
30 } | 28 } |
31 | 29 |
32 size_t GetPublicResetPacketSize() { | 30 size_t GetPublicResetPacketSize() { |
33 return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize + | 31 return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize + |
34 PACKET_6BYTE_SEQUENCE_NUMBER; | 32 kSequenceNumberSize; |
35 } | 33 } |
36 | 34 |
37 size_t GetStartOfFecProtectedData( | 35 size_t GetStartOfFecProtectedData(QuicGuidLength guid_length, |
38 QuicGuidLength guid_length, | 36 bool include_version) { |
39 bool include_version, | 37 return GetPacketHeaderSize(guid_length, include_version, IN_FEC_GROUP); |
40 QuicSequenceNumberLength sequence_number_length) { | |
41 return GetPacketHeaderSize( | |
42 guid_length, include_version, sequence_number_length, IN_FEC_GROUP); | |
43 } | 38 } |
44 | 39 |
45 size_t GetStartOfEncryptedData( | 40 size_t GetStartOfEncryptedData(QuicGuidLength guid_length, |
46 QuicGuidLength guid_length, | 41 bool include_version) { |
47 bool include_version, | |
48 QuicSequenceNumberLength sequence_number_length) { | |
49 // Don't include the fec size, since encryption starts before private flags. | 42 // Don't include the fec size, since encryption starts before private flags. |
50 return GetPacketHeaderSize( | 43 return GetPacketHeaderSize(guid_length, include_version, NOT_IN_FEC_GROUP) - |
51 guid_length, include_version, sequence_number_length, NOT_IN_FEC_GROUP) - | |
52 kPrivateFlagsSize; | 44 kPrivateFlagsSize; |
53 } | 45 } |
54 | 46 |
55 uint32 MakeQuicTag(char a, char b, char c, char d) { | 47 uint32 MakeQuicTag(char a, char b, char c, char d) { |
56 return static_cast<uint32>(a) | | 48 return static_cast<uint32>(a) | |
57 static_cast<uint32>(b) << 8 | | 49 static_cast<uint32>(b) << 8 | |
58 static_cast<uint32>(c) << 16 | | 50 static_cast<uint32>(c) << 16 | |
59 static_cast<uint32>(d) << 24; | 51 static_cast<uint32>(d) << 24; |
60 } | 52 } |
61 | 53 |
62 QuicPacketPublicHeader::QuicPacketPublicHeader() | 54 QuicPacketPublicHeader::QuicPacketPublicHeader() |
63 : guid(0), | 55 : guid(0), |
64 guid_length(PACKET_8BYTE_GUID), | 56 guid_length(PACKET_8BYTE_GUID), |
65 reset_flag(false), | 57 reset_flag(false), |
66 version_flag(false), | 58 version_flag(false) { |
67 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { | |
68 } | 59 } |
69 | 60 |
70 QuicPacketPublicHeader::QuicPacketPublicHeader( | 61 QuicPacketPublicHeader::QuicPacketPublicHeader( |
71 const QuicPacketPublicHeader& other) | 62 const QuicPacketPublicHeader& other) |
72 : guid(other.guid), | 63 : guid(other.guid), |
73 guid_length(other.guid_length), | 64 guid_length(other.guid_length), |
74 reset_flag(other.reset_flag), | 65 reset_flag(other.reset_flag), |
75 version_flag(other.version_flag), | 66 version_flag(other.version_flag), |
76 sequence_number_length(other.sequence_number_length), | |
77 versions(other.versions) { | 67 versions(other.versions) { |
78 } | 68 } |
79 | 69 |
80 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 70 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
81 | 71 |
82 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=( | 72 QuicPacketPublicHeader& QuicPacketPublicHeader::operator=( |
83 const QuicPacketPublicHeader& other) { | 73 const QuicPacketPublicHeader& other) { |
84 guid = other.guid; | 74 guid = other.guid; |
85 reset_flag = other.reset_flag; | 75 reset_flag = other.reset_flag; |
86 version_flag = other.version_flag; | 76 version_flag = other.version_flag; |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 QuicStreamId last_good_stream_id, | 244 QuicStreamId last_good_stream_id, |
255 const string& reason) | 245 const string& reason) |
256 : error_code(error_code), | 246 : error_code(error_code), |
257 last_good_stream_id(last_good_stream_id), | 247 last_good_stream_id(last_good_stream_id), |
258 reason_phrase(reason) { | 248 reason_phrase(reason) { |
259 DCHECK_LE(error_code, numeric_limits<uint8>::max()); | 249 DCHECK_LE(error_code, numeric_limits<uint8>::max()); |
260 } | 250 } |
261 | 251 |
262 QuicFecData::QuicFecData() {} | 252 QuicFecData::QuicFecData() {} |
263 | 253 |
| 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( | 271 const size_t start_of_fec = GetStartOfFecProtectedData(guid_length_, |
272 guid_length_, includes_version_, sequence_number_length_); | 272 includes_version_); |
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( | 277 return StringPiece(data() + kStartOfHashData, |
278 data() + kStartOfHashData, | 278 GetStartOfEncryptedData(guid_length_, includes_version_) - |
279 GetStartOfEncryptedData( | 279 kStartOfHashData); |
280 guid_length_, includes_version_, sequence_number_length_) - | |
281 kStartOfHashData); | |
282 } | 280 } |
283 | 281 |
284 StringPiece QuicPacket::BeforePlaintext() const { | 282 StringPiece QuicPacket::BeforePlaintext() const { |
285 return StringPiece(data(), GetStartOfEncryptedData(guid_length_, | 283 return StringPiece(data(), GetStartOfEncryptedData(guid_length_, |
286 includes_version_, | 284 includes_version_)); |
287 sequence_number_length_)); | |
288 } | 285 } |
289 | 286 |
290 StringPiece QuicPacket::Plaintext() const { | 287 StringPiece QuicPacket::Plaintext() const { |
291 const size_t start_of_encrypted_data = | 288 const size_t start_of_encrypted_data = |
292 GetStartOfEncryptedData( | 289 GetStartOfEncryptedData(guid_length_, includes_version_); |
293 guid_length_, includes_version_, sequence_number_length_); | |
294 return StringPiece(data() + start_of_encrypted_data, | 290 return StringPiece(data() + start_of_encrypted_data, |
295 length() - start_of_encrypted_data); | 291 length() - start_of_encrypted_data); |
296 } | 292 } |
297 | 293 |
298 RetransmittableFrames::RetransmittableFrames() | 294 RetransmittableFrames::RetransmittableFrames() |
299 : encryption_level_(NUM_ENCRYPTION_LEVELS) { | 295 : encryption_level_(NUM_ENCRYPTION_LEVELS) { |
300 } | 296 } |
301 | 297 |
302 RetransmittableFrames::~RetransmittableFrames() { | 298 RetransmittableFrames::~RetransmittableFrames() { |
303 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 Loading... |
358 return os; | 354 return os; |
359 } | 355 } |
360 | 356 |
361 ostream& operator<<(ostream& os, const QuicConsumedData& s) { | 357 ostream& operator<<(ostream& os, const QuicConsumedData& s) { |
362 os << "bytes_consumed: " << s.bytes_consumed | 358 os << "bytes_consumed: " << s.bytes_consumed |
363 << " fin_consumed: " << s.fin_consumed; | 359 << " fin_consumed: " << s.fin_consumed; |
364 return os; | 360 return os; |
365 } | 361 } |
366 | 362 |
367 } // namespace net | 363 } // namespace net |
OLD | NEW |