| Index: net/quic/quic_protocol.cc
|
| diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
|
| index 4c0c88c9aac5a4896672901046f8d6e73e9c911e..2293076fa7c3bda4203b248bba0cd36607793aba 100644
|
| --- a/net/quic/quic_protocol.cc
|
| +++ b/net/quic/quic_protocol.cc
|
| @@ -13,24 +13,35 @@ using std::string;
|
|
|
| namespace net {
|
|
|
| -size_t GetPacketHeaderSize(bool include_version) {
|
| - return kPublicFlagsSize + kQuicGuidSize +
|
| +size_t GetPacketHeaderSize(QuicPacketHeader header) {
|
| + return GetPacketHeaderSize(header.public_header.guid_length,
|
| + header.public_header.version_flag,
|
| + header.is_in_fec_group);
|
| +}
|
| +
|
| +size_t GetPacketHeaderSize(QuicGuidLength guid_length,
|
| + bool include_version,
|
| + InFecGroup is_in_fec_group) {
|
| + return kPublicFlagsSize + guid_length +
|
| (include_version ? kQuicVersionSize : 0) + kSequenceNumberSize +
|
| - kPrivateFlagsSize + kFecGroupSize;
|
| + kPrivateFlagsSize + (is_in_fec_group == IN_FEC_GROUP ? kFecGroupSize : 0);
|
| }
|
|
|
| size_t GetPublicResetPacketSize() {
|
| - return kPublicFlagsSize + kQuicGuidSize + kPublicResetNonceSize +
|
| + return kPublicFlagsSize + PACKET_8BYTE_GUID + kPublicResetNonceSize +
|
| kSequenceNumberSize;
|
| }
|
|
|
| -size_t GetStartOfFecProtectedData(bool include_version) {
|
| - return GetPacketHeaderSize(include_version);
|
| +size_t GetStartOfFecProtectedData(QuicGuidLength guid_length,
|
| + bool include_version) {
|
| + return GetPacketHeaderSize(guid_length, include_version, IN_FEC_GROUP);
|
| }
|
|
|
| -size_t GetStartOfEncryptedData(bool include_version) {
|
| - return GetPacketHeaderSize(include_version) - kPrivateFlagsSize -
|
| - kFecGroupSize;
|
| +size_t GetStartOfEncryptedData(QuicGuidLength guid_length,
|
| + bool include_version) {
|
| + // Don't include the fec size, since encryption starts before private flags.
|
| + return GetPacketHeaderSize(guid_length, include_version, NOT_IN_FEC_GROUP) -
|
| + kPrivateFlagsSize;
|
| }
|
|
|
| uint32 MakeQuicTag(char a, char b, char c, char d) {
|
| @@ -42,6 +53,7 @@ uint32 MakeQuicTag(char a, char b, char c, char d) {
|
|
|
| QuicPacketPublicHeader::QuicPacketPublicHeader()
|
| : guid(0),
|
| + guid_length(PACKET_8BYTE_GUID),
|
| reset_flag(false),
|
| version_flag(false) {
|
| }
|
| @@ -49,6 +61,7 @@ QuicPacketPublicHeader::QuicPacketPublicHeader()
|
| QuicPacketPublicHeader::QuicPacketPublicHeader(
|
| const QuicPacketPublicHeader& other)
|
| : guid(other.guid),
|
| + guid_length(other.guid_length),
|
| reset_flag(other.reset_flag),
|
| version_flag(other.version_flag),
|
| versions(other.versions) {
|
| @@ -67,20 +80,20 @@ QuicPacketPublicHeader& QuicPacketPublicHeader::operator=(
|
|
|
| QuicPacketHeader::QuicPacketHeader()
|
| : fec_flag(false),
|
| - fec_entropy_flag(false),
|
| entropy_flag(false),
|
| entropy_hash(0),
|
| packet_sequence_number(0),
|
| + is_in_fec_group(NOT_IN_FEC_GROUP),
|
| fec_group(0) {
|
| }
|
|
|
| QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header)
|
| : public_header(header),
|
| fec_flag(false),
|
| - fec_entropy_flag(false),
|
| entropy_flag(false),
|
| entropy_hash(0),
|
| packet_sequence_number(0),
|
| + is_in_fec_group(NOT_IN_FEC_GROUP),
|
| fec_group(0) {
|
| }
|
|
|
| @@ -98,6 +111,7 @@ QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
|
|
|
| ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
|
| os << "{ guid: " << header.public_header.guid
|
| + << ", guid_length:" << header.public_header.guid_length
|
| << ", reset_flag: " << header.public_header.reset_flag
|
| << ", version_flag: " << header.public_header.version_flag;
|
| if (header.public_header.version_flag) {
|
| @@ -110,6 +124,7 @@ ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
|
| << ", entropy_flag: " << header.entropy_flag
|
| << ", entropy hash: " << static_cast<int>(header.entropy_hash)
|
| << ", sequence_number: " << header.packet_sequence_number
|
| + << ", is_in_fec_group:" << header.is_in_fec_group
|
| << ", fec_group: " << header.fec_group<< "}\n";
|
| return os;
|
| }
|
| @@ -253,23 +268,25 @@ QuicData::~QuicData() {
|
| }
|
|
|
| StringPiece QuicPacket::FecProtectedData() const {
|
| - const size_t start_of_fec = GetStartOfFecProtectedData(includes_version_);
|
| + const size_t start_of_fec = GetStartOfFecProtectedData(guid_length_,
|
| + includes_version_);
|
| return StringPiece(data() + start_of_fec, length() - start_of_fec);
|
| }
|
|
|
| StringPiece QuicPacket::AssociatedData() const {
|
| return StringPiece(data() + kStartOfHashData,
|
| - GetStartOfEncryptedData(includes_version_) -
|
| + GetStartOfEncryptedData(guid_length_, includes_version_) -
|
| kStartOfHashData);
|
| }
|
|
|
| StringPiece QuicPacket::BeforePlaintext() const {
|
| - return StringPiece(data(), GetStartOfEncryptedData(includes_version_));
|
| + return StringPiece(data(), GetStartOfEncryptedData(guid_length_,
|
| + includes_version_));
|
| }
|
|
|
| StringPiece QuicPacket::Plaintext() const {
|
| const size_t start_of_encrypted_data =
|
| - GetStartOfEncryptedData(includes_version_);
|
| + GetStartOfEncryptedData(guid_length_, includes_version_);
|
| return StringPiece(data() + start_of_encrypted_data,
|
| length() - start_of_encrypted_data);
|
| }
|
|
|