| 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, |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |