| 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 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/quic_utils.h" | 8 #include "net/quic/quic_utils.h" |
| 9 | 9 |
| 10 using base::StringPiece; | 10 using base::StringPiece; |
| 11 using std::map; | 11 using std::map; |
| 12 using std::numeric_limits; | 12 using std::numeric_limits; |
| 13 using std::ostream; | 13 using std::ostream; |
| 14 using std::string; | 14 using std::string; |
| 15 | 15 |
| 16 namespace net { | 16 namespace net { |
| 17 | 17 |
| 18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { | 18 size_t GetPacketHeaderSize(const QuicPacketHeader& header) { |
| 19 return GetPacketHeaderSize(header.public_header.guid_length, | 19 return GetPacketHeaderSize(header.public_header.connection_id_length, |
| 20 header.public_header.version_flag, | 20 header.public_header.version_flag, |
| 21 header.public_header.sequence_number_length, | 21 header.public_header.sequence_number_length, |
| 22 header.is_in_fec_group); | 22 header.is_in_fec_group); |
| 23 } | 23 } |
| 24 | 24 |
| 25 size_t GetPacketHeaderSize(QuicGuidLength guid_length, | 25 size_t GetPacketHeaderSize(QuicConnectionIdLength connection_id_length, |
| 26 bool include_version, | 26 bool include_version, |
| 27 QuicSequenceNumberLength sequence_number_length, | 27 QuicSequenceNumberLength sequence_number_length, |
| 28 InFecGroup is_in_fec_group) { | 28 InFecGroup is_in_fec_group) { |
| 29 return kPublicFlagsSize + guid_length + | 29 return kPublicFlagsSize + connection_id_length + |
| 30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + | 30 (include_version ? kQuicVersionSize : 0) + sequence_number_length + |
| 31 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); | 31 kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0); |
| 32 } | 32 } |
| 33 | 33 |
| 34 size_t GetStartOfFecProtectedData( | 34 size_t GetStartOfFecProtectedData( |
| 35 QuicGuidLength guid_length, | 35 QuicConnectionIdLength connection_id_length, |
| 36 bool include_version, | 36 bool include_version, |
| 37 QuicSequenceNumberLength sequence_number_length) { | 37 QuicSequenceNumberLength sequence_number_length) { |
| 38 return GetPacketHeaderSize( | 38 return GetPacketHeaderSize(connection_id_length, |
| 39 guid_length, include_version, sequence_number_length, IN_FEC_GROUP); | 39 include_version, |
| 40 sequence_number_length, |
| 41 IN_FEC_GROUP); |
| 40 } | 42 } |
| 41 | 43 |
| 42 size_t GetStartOfEncryptedData( | 44 size_t GetStartOfEncryptedData( |
| 43 QuicGuidLength guid_length, | 45 QuicConnectionIdLength connection_id_length, |
| 44 bool include_version, | 46 bool include_version, |
| 45 QuicSequenceNumberLength sequence_number_length) { | 47 QuicSequenceNumberLength sequence_number_length) { |
| 46 // Don't include the fec size, since encryption starts before private flags. | 48 // Don't include the fec size, since encryption starts before private flags. |
| 47 return GetPacketHeaderSize( | 49 return GetPacketHeaderSize(connection_id_length, |
| 48 guid_length, include_version, sequence_number_length, NOT_IN_FEC_GROUP) - | 50 include_version, |
| 49 kPrivateFlagsSize; | 51 sequence_number_length, |
| 52 NOT_IN_FEC_GROUP) - kPrivateFlagsSize; |
| 50 } | 53 } |
| 51 | 54 |
| 52 QuicPacketPublicHeader::QuicPacketPublicHeader() | 55 QuicPacketPublicHeader::QuicPacketPublicHeader() |
| 53 : guid(0), | 56 : connection_id(0), |
| 54 guid_length(PACKET_8BYTE_GUID), | 57 connection_id_length(PACKET_8BYTE_CONNECTION_ID), |
| 55 reset_flag(false), | 58 reset_flag(false), |
| 56 version_flag(false), | 59 version_flag(false), |
| 57 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { | 60 sequence_number_length(PACKET_6BYTE_SEQUENCE_NUMBER) { |
| 58 } | 61 } |
| 59 | 62 |
| 60 QuicPacketPublicHeader::QuicPacketPublicHeader( | 63 QuicPacketPublicHeader::QuicPacketPublicHeader( |
| 61 const QuicPacketPublicHeader& other) | 64 const QuicPacketPublicHeader& other) |
| 62 : guid(other.guid), | 65 : connection_id(other.connection_id), |
| 63 guid_length(other.guid_length), | 66 connection_id_length(other.connection_id_length), |
| 64 reset_flag(other.reset_flag), | 67 reset_flag(other.reset_flag), |
| 65 version_flag(other.version_flag), | 68 version_flag(other.version_flag), |
| 66 sequence_number_length(other.sequence_number_length), | 69 sequence_number_length(other.sequence_number_length), |
| 67 versions(other.versions) { | 70 versions(other.versions) { |
| 68 } | 71 } |
| 69 | 72 |
| 70 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} | 73 QuicPacketPublicHeader::~QuicPacketPublicHeader() {} |
| 71 | 74 |
| 72 QuicPacketHeader::QuicPacketHeader() | 75 QuicPacketHeader::QuicPacketHeader() |
| 73 : fec_flag(false), | 76 : fec_flag(false), |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 for (size_t i = 0; i < versions.size(); ++i) { | 205 for (size_t i = 0; i < versions.size(); ++i) { |
| 203 if (i != 0) { | 206 if (i != 0) { |
| 204 result.append(","); | 207 result.append(","); |
| 205 } | 208 } |
| 206 result.append(QuicVersionToString(versions[i])); | 209 result.append(QuicVersionToString(versions[i])); |
| 207 } | 210 } |
| 208 return result; | 211 return result; |
| 209 } | 212 } |
| 210 | 213 |
| 211 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { | 214 ostream& operator<<(ostream& os, const QuicPacketHeader& header) { |
| 212 os << "{ guid: " << header.public_header.guid | 215 os << "{ connection_id: " << header.public_header.connection_id |
| 213 << ", guid_length:" << header.public_header.guid_length | 216 << ", connection_id_length:" << header.public_header.connection_id_length |
| 214 << ", sequence_number_length:" | 217 << ", sequence_number_length:" |
| 215 << header.public_header.sequence_number_length | 218 << header.public_header.sequence_number_length |
| 216 << ", reset_flag: " << header.public_header.reset_flag | 219 << ", reset_flag: " << header.public_header.reset_flag |
| 217 << ", version_flag: " << header.public_header.version_flag; | 220 << ", version_flag: " << header.public_header.version_flag; |
| 218 if (header.public_header.version_flag) { | 221 if (header.public_header.version_flag) { |
| 219 os << " version: "; | 222 os << " version: "; |
| 220 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { | 223 for (size_t i = 0; i < header.public_header.versions.size(); ++i) { |
| 221 os << header.public_header.versions[0] << " "; | 224 os << header.public_header.versions[0] << " "; |
| 222 } | 225 } |
| 223 } | 226 } |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 QuicStreamOffset byte_offset) | 559 QuicStreamOffset byte_offset) |
| 557 : stream_id(stream_id), | 560 : stream_id(stream_id), |
| 558 byte_offset(byte_offset) {} | 561 byte_offset(byte_offset) {} |
| 559 | 562 |
| 560 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) | 563 QuicBlockedFrame::QuicBlockedFrame(QuicStreamId stream_id) |
| 561 : stream_id(stream_id) {} | 564 : stream_id(stream_id) {} |
| 562 | 565 |
| 563 QuicPacket::QuicPacket(char* buffer, | 566 QuicPacket::QuicPacket(char* buffer, |
| 564 size_t length, | 567 size_t length, |
| 565 bool owns_buffer, | 568 bool owns_buffer, |
| 566 QuicGuidLength guid_length, | 569 QuicConnectionIdLength connection_id_length, |
| 567 bool includes_version, | 570 bool includes_version, |
| 568 QuicSequenceNumberLength sequence_number_length, | 571 QuicSequenceNumberLength sequence_number_length, |
| 569 bool is_fec_packet) | 572 bool is_fec_packet) |
| 570 : QuicData(buffer, length, owns_buffer), | 573 : QuicData(buffer, length, owns_buffer), |
| 571 buffer_(buffer), | 574 buffer_(buffer), |
| 572 is_fec_packet_(is_fec_packet), | 575 is_fec_packet_(is_fec_packet), |
| 573 guid_length_(guid_length), | 576 connection_id_length_(connection_id_length), |
| 574 includes_version_(includes_version), | 577 includes_version_(includes_version), |
| 575 sequence_number_length_(sequence_number_length) { | 578 sequence_number_length_(sequence_number_length) { |
| 576 } | 579 } |
| 577 | 580 |
| 578 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, | 581 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, |
| 579 size_t length) | 582 size_t length) |
| 580 : QuicData(buffer, length) { | 583 : QuicData(buffer, length) { |
| 581 } | 584 } |
| 582 | 585 |
| 583 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, | 586 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, |
| 584 size_t length, | 587 size_t length, |
| 585 bool owns_buffer) | 588 bool owns_buffer) |
| 586 : QuicData(buffer, length, owns_buffer) { | 589 : QuicData(buffer, length, owns_buffer) { |
| 587 } | 590 } |
| 588 | 591 |
| 589 StringPiece QuicPacket::FecProtectedData() const { | 592 StringPiece QuicPacket::FecProtectedData() const { |
| 590 const size_t start_of_fec = GetStartOfFecProtectedData( | 593 const size_t start_of_fec = GetStartOfFecProtectedData( |
| 591 guid_length_, includes_version_, sequence_number_length_); | 594 connection_id_length_, includes_version_, sequence_number_length_); |
| 592 return StringPiece(data() + start_of_fec, length() - start_of_fec); | 595 return StringPiece(data() + start_of_fec, length() - start_of_fec); |
| 593 } | 596 } |
| 594 | 597 |
| 595 StringPiece QuicPacket::AssociatedData() const { | 598 StringPiece QuicPacket::AssociatedData() const { |
| 596 return StringPiece( | 599 return StringPiece( |
| 597 data() + kStartOfHashData, | 600 data() + kStartOfHashData, |
| 598 GetStartOfEncryptedData( | 601 GetStartOfEncryptedData( |
| 599 guid_length_, includes_version_, sequence_number_length_) - | 602 connection_id_length_, includes_version_, sequence_number_length_) - |
| 600 kStartOfHashData); | 603 kStartOfHashData); |
| 601 } | 604 } |
| 602 | 605 |
| 603 StringPiece QuicPacket::BeforePlaintext() const { | 606 StringPiece QuicPacket::BeforePlaintext() const { |
| 604 return StringPiece(data(), GetStartOfEncryptedData(guid_length_, | 607 return StringPiece(data(), GetStartOfEncryptedData(connection_id_length_, |
| 605 includes_version_, | 608 includes_version_, |
| 606 sequence_number_length_)); | 609 sequence_number_length_)); |
| 607 } | 610 } |
| 608 | 611 |
| 609 StringPiece QuicPacket::Plaintext() const { | 612 StringPiece QuicPacket::Plaintext() const { |
| 610 const size_t start_of_encrypted_data = | 613 const size_t start_of_encrypted_data = |
| 611 GetStartOfEncryptedData( | 614 GetStartOfEncryptedData( |
| 612 guid_length_, includes_version_, sequence_number_length_); | 615 connection_id_length_, includes_version_, sequence_number_length_); |
| 613 return StringPiece(data() + start_of_encrypted_data, | 616 return StringPiece(data() + start_of_encrypted_data, |
| 614 length() - start_of_encrypted_data); | 617 length() - start_of_encrypted_data); |
| 615 } | 618 } |
| 616 | 619 |
| 617 RetransmittableFrames::RetransmittableFrames() | 620 RetransmittableFrames::RetransmittableFrames() |
| 618 : encryption_level_(NUM_ENCRYPTION_LEVELS) { | 621 : encryption_level_(NUM_ENCRYPTION_LEVELS) { |
| 619 } | 622 } |
| 620 | 623 |
| 621 RetransmittableFrames::~RetransmittableFrames() { | 624 RetransmittableFrames::~RetransmittableFrames() { |
| 622 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { | 625 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 return os; | 732 return os; |
| 730 } | 733 } |
| 731 | 734 |
| 732 WriteResult::WriteResult(WriteStatus status, | 735 WriteResult::WriteResult(WriteStatus status, |
| 733 int bytes_written_or_error_code) | 736 int bytes_written_or_error_code) |
| 734 : status(status), | 737 : status(status), |
| 735 bytes_written(bytes_written_or_error_code) { | 738 bytes_written(bytes_written_or_error_code) { |
| 736 } | 739 } |
| 737 | 740 |
| 738 } // namespace net | 741 } // namespace net |
| OLD | NEW |