| 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 |