| Index: net/quic/quic_framer_test.cc
|
| diff --git a/net/quic/quic_framer_test.cc b/net/quic/quic_framer_test.cc
|
| index 9e6df0d9ac24a3c7250a07a61848dd9258d19dea..fbeb05cedacee62b9397de50e76f9be46ae43428 100644
|
| --- a/net/quic/quic_framer_test.cc
|
| +++ b/net/quic/quic_framer_test.cc
|
| @@ -57,13 +57,19 @@ size_t GetSequenceNumberOffset(bool include_version) {
|
| // Index into the private flags offset in the data packet header.
|
| size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) {
|
| return GetSequenceNumberOffset(guid_length, include_version) +
|
| - kSequenceNumberSize;
|
| + PACKET_6BYTE_SEQUENCE_NUMBER;
|
| }
|
|
|
| size_t GetPrivateFlagsOffset(bool include_version) {
|
| return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version);
|
| }
|
|
|
| +size_t GetPrivateFlagsOffset(bool include_version,
|
| + QuicSequenceNumberLength sequence_number_length) {
|
| + return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version) +
|
| + sequence_number_length;
|
| +}
|
| +
|
| // Index into the fec group offset in the header.
|
| size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) {
|
| return GetPrivateFlagsOffset(guid_length, include_version) +
|
| @@ -75,6 +81,12 @@ size_t GetFecGroupOffset(bool include_version) {
|
| kPrivateFlagsSize;
|
| }
|
|
|
| +size_t GetFecGroupOffset(bool include_version,
|
| + QuicSequenceNumberLength sequence_number_length) {
|
| + return GetPrivateFlagsOffset(include_version, sequence_number_length) +
|
| + kPrivateFlagsSize;
|
| +}
|
| +
|
| // Index into the nonce proof of the public reset packet.
|
| // Public resets always have full guids.
|
| const size_t kPublicResetPacketNonceProofOffset =
|
| @@ -171,6 +183,7 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| public:
|
| TestQuicVisitor()
|
| : error_count_(0),
|
| + version_mismatch_(0),
|
| packet_count_(0),
|
| frame_count_(0),
|
| fec_count_(0),
|
| @@ -209,7 +222,8 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| }
|
|
|
| virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE {
|
| - DCHECK(false);
|
| + DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version;
|
| + version_mismatch_++;
|
| return true;
|
| }
|
|
|
| @@ -270,6 +284,7 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
|
|
| // Counters from the visitor_ callbacks.
|
| int error_count_;
|
| + int version_mismatch_;
|
| int packet_count_;
|
| int frame_count_;
|
| int fec_count_;
|
| @@ -336,18 +351,21 @@ class QuicFramerTest : public ::testing::Test {
|
| return false;
|
| }
|
| if (QuicFramer::GetAssociatedDataFromEncryptedPacket(
|
| - encrypted, PACKET_8BYTE_GUID, includes_version) !=
|
| - decrypter_->associated_data_) {
|
| + encrypted, PACKET_8BYTE_GUID,
|
| + includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) !=
|
| + decrypter_->associated_data_) {
|
| LOG(ERROR) << "Decrypted incorrect associated data. expected "
|
| << QuicFramer::GetAssociatedDataFromEncryptedPacket(
|
| - encrypted, PACKET_8BYTE_GUID, includes_version)
|
| + encrypted, PACKET_8BYTE_GUID,
|
| + includes_version, PACKET_6BYTE_SEQUENCE_NUMBER)
|
| << " actual: " << decrypter_->associated_data_;
|
| return false;
|
| }
|
| StringPiece ciphertext(encrypted.AsStringPiece().substr(
|
| - GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version)));
|
| + GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER)));
|
| if (ciphertext != decrypter_->ciphertext_) {
|
| - LOG(ERROR) << "Decrypted incorrect chipertext data. expected "
|
| + LOG(ERROR) << "Decrypted incorrect ciphertext data. expected "
|
| << ciphertext << " actual: "
|
| << decrypter_->ciphertext_;
|
| return false;
|
| @@ -384,9 +402,9 @@ class QuicFramerTest : public ::testing::Test {
|
| QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number);
|
| EXPECT_EQ(expected_sequence_number,
|
| QuicFramerPeer::CalculatePacketSequenceNumberFromWire(
|
| - &framer_, wire_sequence_number))
|
| + &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number))
|
| << "last_sequence_number: " << last_sequence_number
|
| - << "wire_sequence_number: " << wire_sequence_number;
|
| + << " wire_sequence_number: " << wire_sequence_number;
|
| }
|
|
|
| test::TestEncrypter* encrypter_;
|
| @@ -481,9 +499,11 @@ TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) {
|
|
|
| // Cases where the last number was close to the end of the range
|
| for (uint64 i = 0; i < 10; i++) {
|
| - QuicPacketSequenceNumber last = max_number - i;
|
| + // Subtract 1, because the expected next sequence number is 1 more than the
|
| + // last sequence number.
|
| + QuicPacketSequenceNumber last = max_number - i - 1;
|
|
|
| - // Small numbers should not wrap (because they have nowhere to go.
|
| + // Small numbers should not wrap, because they have nowhere to go.
|
| for (uint64 j = 0; j < 10; j++) {
|
| CheckCalculatePacketSequenceNumber(max_epoch + j, last);
|
| }
|
| @@ -506,7 +526,7 @@ TEST_F(QuicFramerTest, EmptyPacket) {
|
| TEST_F(QuicFramerTest, LargePacket) {
|
| unsigned char packet[kMaxPacketSize + 1] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -518,9 +538,11 @@ TEST_F(QuicFramerTest, LargePacket) {
|
| };
|
|
|
| memset(packet + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 0,
|
| + PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0,
|
| kMaxPacketSize - GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP) + 1);
|
| + PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1);
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| @@ -536,7 +558,7 @@ TEST_F(QuicFramerTest, LargePacket) {
|
| TEST_F(QuicFramerTest, PacketHeader) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -565,8 +587,9 @@ TEST_F(QuicFramerTest, PacketHeader) {
|
|
|
| // Now test framing boundaries
|
| for (size_t i = 0;
|
| - i < GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) {
|
| + i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| string expected_error;
|
| if (i < kGuidOffset) {
|
| expected_error = "Unable to read public flags.";
|
| @@ -589,7 +612,7 @@ TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (4 byte guid)
|
| - 0x08,
|
| + 0x38,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| // packet sequence number
|
| @@ -617,8 +640,9 @@ TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) {
|
|
|
| // Now test framing boundaries
|
| for (size_t i = 0;
|
| - i < GetPacketHeaderSize(
|
| - PACKET_4BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) {
|
| + i < GetPacketHeaderSize(PACKET_4BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| string expected_error;
|
| if (i < kGuidOffset) {
|
| expected_error = "Unable to read public flags.";
|
| @@ -643,7 +667,7 @@ TEST_F(QuicFramerTest, PacketHeader1ByteGuid) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (1 byte guid)
|
| - 0x04,
|
| + 0x34,
|
| // guid
|
| 0x10,
|
| // packet sequence number
|
| @@ -671,8 +695,9 @@ TEST_F(QuicFramerTest, PacketHeader1ByteGuid) {
|
|
|
| // Now test framing boundaries
|
| for (size_t i = 0;
|
| - i < GetPacketHeaderSize(
|
| - PACKET_1BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) {
|
| + i < GetPacketHeaderSize(PACKET_1BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| string expected_error;
|
| if (i < kGuidOffset) {
|
| expected_error = "Unable to read public flags.";
|
| @@ -696,7 +721,7 @@ TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (0 byte guid)
|
| - 0x00,
|
| + 0x30,
|
| // guid
|
| // packet sequence number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| @@ -723,8 +748,9 @@ TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) {
|
|
|
| // Now test framing boundaries
|
| for (size_t i = 0;
|
| - i < GetPacketHeaderSize(
|
| - PACKET_0BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) {
|
| + i < GetPacketHeaderSize(PACKET_0BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| string expected_error;
|
| if (i < kGuidOffset) {
|
| expected_error = "Unable to read public flags.";
|
| @@ -745,12 +771,12 @@ TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) {
|
| TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) {
|
| unsigned char packet[] = {
|
| // public flags (version)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| // version tag
|
| - 'Q', '0', '0', '5',
|
| + 'Q', '0', '0', '6',
|
| // packet sequence number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| @@ -777,8 +803,9 @@ TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) {
|
|
|
| // Now test framing boundaries
|
| for (size_t i = 0;
|
| - i < GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, kIncludeVersion, NOT_IN_FEC_GROUP); ++i) {
|
| + i < GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| string expected_error;
|
| if (i < kGuidOffset) {
|
| expected_error = "Unable to read public flags.";
|
| @@ -797,14 +824,217 @@ TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) {
|
| }
|
| }
|
|
|
| +TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) {
|
| + QuicFramerPeer::SetLastSequenceNumber(&framer_,
|
| + GG_UINT64_C(0x123456789ABA));
|
| +
|
| + unsigned char packet[] = {
|
| + // public flags (8 byte guid and 4 byte sequence number)
|
| + 0x2C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A, 0x78, 0x56,
|
| + // private flags
|
| + 0x00,
|
| + };
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| + EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| + EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
|
| + ASSERT_TRUE(visitor_.header_.get());
|
| + EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
|
| + visitor_.header_->public_header.guid);
|
| + EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
|
| + EXPECT_FALSE(visitor_.header_->public_header.version_flag);
|
| + EXPECT_FALSE(visitor_.header_->fec_flag);
|
| + EXPECT_FALSE(visitor_.header_->entropy_flag);
|
| + EXPECT_EQ(0, visitor_.header_->entropy_hash);
|
| + EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
|
| + visitor_.header_->packet_sequence_number);
|
| + EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
|
| + EXPECT_EQ(0x00u, visitor_.header_->fec_group);
|
| +
|
| + // Now test framing boundaries
|
| + for (size_t i = 0;
|
| + i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| + string expected_error;
|
| + if (i < kGuidOffset) {
|
| + expected_error = "Unable to read public flags.";
|
| + } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
|
| + expected_error = "Unable to read GUID.";
|
| + } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
|
| + PACKET_4BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read sequence number.";
|
| + } else if (i < GetFecGroupOffset(!kIncludeVersion,
|
| + PACKET_4BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read private flags.";
|
| + } else {
|
| + expected_error = "Unable to read first fec protected packet offset.";
|
| + }
|
| + CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + }
|
| +}
|
| +
|
| +TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) {
|
| + QuicFramerPeer::SetLastSequenceNumber(&framer_,
|
| + GG_UINT64_C(0x123456789ABA));
|
| +
|
| + unsigned char packet[] = {
|
| + // public flags (8 byte guid and 2 byte sequence number)
|
| + 0x1C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A,
|
| + // private flags
|
| + 0x00,
|
| + };
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| + EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| + EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
|
| + ASSERT_TRUE(visitor_.header_.get());
|
| + EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
|
| + visitor_.header_->public_header.guid);
|
| + EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
|
| + EXPECT_FALSE(visitor_.header_->public_header.version_flag);
|
| + EXPECT_FALSE(visitor_.header_->fec_flag);
|
| + EXPECT_FALSE(visitor_.header_->entropy_flag);
|
| + EXPECT_EQ(0, visitor_.header_->entropy_hash);
|
| + EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
|
| + visitor_.header_->packet_sequence_number);
|
| + EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
|
| + EXPECT_EQ(0x00u, visitor_.header_->fec_group);
|
| +
|
| + // Now test framing boundaries
|
| + for (size_t i = 0;
|
| + i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| + string expected_error;
|
| + if (i < kGuidOffset) {
|
| + expected_error = "Unable to read public flags.";
|
| + } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
|
| + expected_error = "Unable to read GUID.";
|
| + } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
|
| + PACKET_2BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read sequence number.";
|
| + } else if (i < GetFecGroupOffset(!kIncludeVersion,
|
| + PACKET_2BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read private flags.";
|
| + } else {
|
| + expected_error = "Unable to read first fec protected packet offset.";
|
| + }
|
| + CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + }
|
| +}
|
| +
|
| +TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) {
|
| + QuicFramerPeer::SetLastSequenceNumber(&framer_,
|
| + GG_UINT64_C(0x123456789ABA));
|
| +
|
| + unsigned char packet[] = {
|
| + // public flags (8 byte guid and 1 byte sequence number)
|
| + 0x0C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC,
|
| + // private flags
|
| + 0x00,
|
| + };
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| + EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| + EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
|
| + ASSERT_TRUE(visitor_.header_.get());
|
| + EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
|
| + visitor_.header_->public_header.guid);
|
| + EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
|
| + EXPECT_FALSE(visitor_.header_->public_header.version_flag);
|
| + EXPECT_FALSE(visitor_.header_->fec_flag);
|
| + EXPECT_FALSE(visitor_.header_->entropy_flag);
|
| + EXPECT_EQ(0, visitor_.header_->entropy_hash);
|
| + EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
|
| + visitor_.header_->packet_sequence_number);
|
| + EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
|
| + EXPECT_EQ(0x00u, visitor_.header_->fec_group);
|
| +
|
| + // Now test framing boundaries
|
| + for (size_t i = 0;
|
| + i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + ++i) {
|
| + string expected_error;
|
| + if (i < kGuidOffset) {
|
| + expected_error = "Unable to read public flags.";
|
| + } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
|
| + expected_error = "Unable to read GUID.";
|
| + } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
|
| + PACKET_1BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read sequence number.";
|
| + } else if (i < GetFecGroupOffset(!kIncludeVersion,
|
| + PACKET_1BYTE_SEQUENCE_NUMBER)) {
|
| + expected_error = "Unable to read private flags.";
|
| + } else {
|
| + expected_error = "Unable to read first fec protected packet offset.";
|
| + }
|
| + CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + }
|
| +}
|
|
|
| TEST_F(QuicFramerTest, InvalidPublicFlag) {
|
| unsigned char packet[] = {
|
| - // public flags (8 byte guid)
|
| - 0x10,
|
| + // public flags
|
| + 0x40,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A, 0x78, 0x56,
|
| + 0x34, 0x12,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame count
|
| + 0x01,
|
| + // frame type (stream frame)
|
| + 0x01,
|
| + // stream id
|
| + 0x04, 0x03, 0x02, 0x01,
|
| + // fin
|
| + 0x01,
|
| + // offset
|
| + 0x54, 0x76, 0x10, 0x32,
|
| + 0xDC, 0xFE, 0x98, 0xBA,
|
| + // data length
|
| + 0x0c, 0x00,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| + CheckProcessingFails(packet,
|
| + arraysize(packet),
|
| + "Illegal public flags value.",
|
| + QUIC_INVALID_PACKET_HEADER);
|
| +};
|
| +
|
| +TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) {
|
| + unsigned char packet[] = {
|
| + // public flags (8 byte guid and version flag and an unknown flag)
|
| + 0x4D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', '0', '6',
|
| // packet sequence number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| @@ -835,10 +1065,36 @@ TEST_F(QuicFramerTest, InvalidPublicFlag) {
|
| QUIC_INVALID_PACKET_HEADER);
|
| };
|
|
|
| +TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
|
| + unsigned char packet[] = {
|
| + // public flags (8 byte guid, version flag and an unknown flag)
|
| + 0x7D,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', '0', '0',
|
| + // packet sequence number
|
| + 0xBC, 0x9A, 0x78, 0x56,
|
| + 0x34, 0x12,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + };
|
| + QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| + EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| + EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| + ASSERT_TRUE(visitor_.header_.get());
|
| + EXPECT_EQ(0, visitor_.frame_count_);
|
| + EXPECT_EQ(1, visitor_.version_mismatch_);
|
| +};
|
| +
|
| TEST_F(QuicFramerTest, InvalidPrivateFlag) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -875,7 +1131,7 @@ TEST_F(QuicFramerTest, InvalidPrivateFlag) {
|
| TEST_F(QuicFramerTest, PaddingFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -910,15 +1166,15 @@ TEST_F(QuicFramerTest, PaddingFrame) {
|
| // A packet with no frames is not acceptable.
|
| CheckProcessingFails(
|
| packet,
|
| - GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| "Unable to read frame type.", QUIC_INVALID_FRAME_DATA);
|
| }
|
|
|
| TEST_F(QuicFramerTest, StreamFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -979,8 +1235,8 @@ TEST_F(QuicFramerTest, StreamFrame) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -988,12 +1244,12 @@ TEST_F(QuicFramerTest, StreamFrame) {
|
| TEST_F(QuicFramerTest, StreamFrameWithVersion) {
|
| unsigned char packet[] = {
|
| // public flags (version, 8 byte guid)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| // version tag
|
| - 'Q', '0', '0', '5',
|
| + 'Q', '0', '0', '6',
|
| // packet sequence number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| @@ -1052,8 +1308,9 @@ TEST_F(QuicFramerTest, StreamFrameWithVersion) {
|
| expected_error = "Unable to read frame data.";
|
| }
|
| CheckProcessingFails(
|
| - packet, i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
|
| - NOT_IN_FEC_GROUP),
|
| + packet,
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1063,7 +1320,7 @@ TEST_F(QuicFramerTest, RejectPacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1162,7 +1419,7 @@ TEST_F(QuicFramerTest, RevivedStreamFrame) {
|
| TEST_F(QuicFramerTest, StreamFrameInFecGroup) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1200,11 +1457,10 @@ TEST_F(QuicFramerTest, StreamFrameInFecGroup) {
|
| EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
|
| EXPECT_EQ(GG_UINT64_C(0x341256789ABA),
|
| visitor_.header_->fec_group);
|
| + const size_t fec_offset = GetStartOfFecProtectedData(
|
| + PACKET_8BYTE_GUID, !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER);
|
| EXPECT_EQ(
|
| - string(AsChars(packet) + GetStartOfFecProtectedData(PACKET_8BYTE_GUID,
|
| - !kIncludeVersion),
|
| - arraysize(packet) - GetStartOfFecProtectedData(PACKET_8BYTE_GUID,
|
| - !kIncludeVersion)),
|
| + string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset),
|
| visitor_.fec_protected_payload_);
|
|
|
| ASSERT_EQ(1u, visitor_.stream_frames_.size());
|
| @@ -1219,7 +1475,7 @@ TEST_F(QuicFramerTest, StreamFrameInFecGroup) {
|
| TEST_F(QuicFramerTest, AckFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1272,17 +1528,17 @@ TEST_F(QuicFramerTest, AckFrame) {
|
| const size_t kSentEntropyOffset = kQuicFrameTypeSize;
|
| const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
|
| const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
|
| - kSequenceNumberSize;
|
| + PACKET_6BYTE_SEQUENCE_NUMBER;
|
| const size_t kLargestObservedOffset = kReceivedEntropyOffset +
|
| kQuicEntropyHashSize;
|
| const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
|
| - kSequenceNumberSize;
|
| + PACKET_6BYTE_SEQUENCE_NUMBER;
|
| const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
|
| kQuicDeltaTimeLargestObservedSize;
|
| const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
|
| kNumberOfMissingPacketsSize;
|
| // Now test framing boundaries
|
| - const size_t missing_packets_size = 1 * kSequenceNumberSize;
|
| + const size_t missing_packets_size = 1 * PACKET_6BYTE_SEQUENCE_NUMBER;
|
| for (size_t i = 0;
|
| i < QuicFramer::GetMinAckFrameSize() + missing_packets_size; ++i) {
|
| string expected_error;
|
| @@ -1305,8 +1561,8 @@ TEST_F(QuicFramerTest, AckFrame) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1314,7 +1570,7 @@ TEST_F(QuicFramerTest, AckFrame) {
|
| TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1364,8 +1620,8 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1373,7 +1629,7 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) {
|
| TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1462,8 +1718,8 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1471,7 +1727,7 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
|
| TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1516,8 +1772,8 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1526,7 +1782,7 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) {
|
| TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1551,7 +1807,7 @@ TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
|
| TEST_F(QuicFramerTest, RstStreamFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1601,8 +1857,8 @@ TEST_F(QuicFramerTest, RstStreamFrame) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_RST_STREAM_DATA);
|
| }
|
| }
|
| @@ -1610,7 +1866,7 @@ TEST_F(QuicFramerTest, RstStreamFrame) {
|
| TEST_F(QuicFramerTest, ConnectionCloseFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1688,8 +1944,8 @@ TEST_F(QuicFramerTest, ConnectionCloseFrame) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA);
|
| }
|
| }
|
| @@ -1697,7 +1953,7 @@ TEST_F(QuicFramerTest, ConnectionCloseFrame) {
|
| TEST_F(QuicFramerTest, GoAwayFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1749,8 +2005,8 @@ TEST_F(QuicFramerTest, GoAwayFrame) {
|
| }
|
| CheckProcessingFails(
|
| packet,
|
| - i + GetPacketHeaderSize(
|
| - PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP),
|
| + i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| expected_error, QUIC_INVALID_GOAWAY_DATA);
|
| }
|
| }
|
| @@ -1758,7 +2014,7 @@ TEST_F(QuicFramerTest, GoAwayFrame) {
|
| TEST_F(QuicFramerTest, PublicResetPacket) {
|
| unsigned char packet[] = {
|
| // public flags (public reset, 8 byte guid)
|
| - 0x0E,
|
| + 0x3E,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1810,12 +2066,12 @@ TEST_F(QuicFramerTest, PublicResetPacket) {
|
| TEST_F(QuicFramerTest, VersionNegotiationPacket) {
|
| unsigned char packet[] = {
|
| // public flags (version, 8 byte guid)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| // version tag
|
| - 'Q', '0', '0', '5',
|
| + 'Q', '0', '0', '6',
|
| 'Q', '2', '.', '0',
|
| };
|
|
|
| @@ -1847,7 +2103,7 @@ TEST_F(QuicFramerTest, VersionNegotiationPacket) {
|
| TEST_F(QuicFramerTest, FecPacket) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1898,7 +2154,7 @@ TEST_F(QuicFramerTest, ConstructPaddingFramePacket) {
|
|
|
| unsigned char packet[kMaxPacketSize] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -1912,8 +2168,144 @@ TEST_F(QuicFramerTest, ConstructPaddingFramePacket) {
|
| 0x00,
|
| };
|
|
|
| - uint64 header_size = GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| - NOT_IN_FEC_GROUP);
|
| + uint64 header_size =
|
| + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
|
| +
|
| + scoped_ptr<QuicPacket> data(
|
| + framer_.ConstructFrameDataPacket(header, frames).packet);
|
| + ASSERT_TRUE(data != NULL);
|
| +
|
| + test::CompareCharArraysWithHexError("constructed packet",
|
| + data->data(), data->length(),
|
| + AsChars(packet), arraysize(packet));
|
| +}
|
| +
|
| +TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) {
|
| + QuicPacketHeader header;
|
| + header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
|
| + header.public_header.reset_flag = false;
|
| + header.public_header.version_flag = false;
|
| + header.fec_flag = false;
|
| + header.entropy_flag = false;
|
| + header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER;
|
| + header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| + header.fec_group = 0;
|
| +
|
| + QuicPaddingFrame padding_frame;
|
| +
|
| + QuicFrames frames;
|
| + frames.push_back(QuicFrame(&padding_frame));
|
| +
|
| + unsigned char packet[kMaxPacketSize] = {
|
| + // public flags (8 byte guid and 4 byte sequence number)
|
| + 0x2C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A, 0x78, 0x56,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + };
|
| +
|
| + uint64 header_size =
|
| + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
|
| +
|
| + scoped_ptr<QuicPacket> data(
|
| + framer_.ConstructFrameDataPacket(header, frames).packet);
|
| + ASSERT_TRUE(data != NULL);
|
| +
|
| + test::CompareCharArraysWithHexError("constructed packet",
|
| + data->data(), data->length(),
|
| + AsChars(packet), arraysize(packet));
|
| +}
|
| +
|
| +TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) {
|
| + QuicPacketHeader header;
|
| + header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
|
| + header.public_header.reset_flag = false;
|
| + header.public_header.version_flag = false;
|
| + header.fec_flag = false;
|
| + header.entropy_flag = false;
|
| + header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER;
|
| + header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| + header.fec_group = 0;
|
| +
|
| + QuicPaddingFrame padding_frame;
|
| +
|
| + QuicFrames frames;
|
| + frames.push_back(QuicFrame(&padding_frame));
|
| +
|
| + unsigned char packet[kMaxPacketSize] = {
|
| + // public flags (8 byte guid and 2 byte sequence number)
|
| + 0x1C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + };
|
| +
|
| + uint64 header_size =
|
| + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| + memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
|
| +
|
| + scoped_ptr<QuicPacket> data(
|
| + framer_.ConstructFrameDataPacket(header, frames).packet);
|
| + ASSERT_TRUE(data != NULL);
|
| +
|
| + test::CompareCharArraysWithHexError("constructed packet",
|
| + data->data(), data->length(),
|
| + AsChars(packet), arraysize(packet));
|
| +}
|
| +
|
| +TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) {
|
| + QuicPacketHeader header;
|
| + header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
|
| + header.public_header.reset_flag = false;
|
| + header.public_header.version_flag = false;
|
| + header.fec_flag = false;
|
| + header.entropy_flag = false;
|
| + header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
|
| + header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| + header.fec_group = 0;
|
| +
|
| + QuicPaddingFrame padding_frame;
|
| +
|
| + QuicFrames frames;
|
| + frames.push_back(QuicFrame(&padding_frame));
|
| +
|
| + unsigned char packet[kMaxPacketSize] = {
|
| + // public flags (8 byte guid and 1 byte sequence number)
|
| + 0x0C,
|
| + // guid
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + };
|
| +
|
| + uint64 header_size =
|
| + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
|
| memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
|
|
|
| scoped_ptr<QuicPacket> data(
|
| @@ -1946,7 +2338,7 @@ TEST_F(QuicFramerTest, ConstructStreamFramePacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2003,12 +2395,12 @@ TEST_F(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (version, 8 byte guid)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| // version tag
|
| - 'Q', '0', '0', '5',
|
| + 'Q', '0', '0', '6',
|
| // packet sequence number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| @@ -2050,12 +2442,12 @@ TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (version, 8 byte guid)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| // version tag
|
| - 'Q', '0', '0', '5',
|
| + 'Q', '0', '0', '6',
|
| 'Q', '2', '.', '0',
|
| };
|
|
|
| @@ -2095,7 +2487,7 @@ TEST_F(QuicFramerTest, ConstructAckFramePacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2155,7 +2547,7 @@ TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2214,7 +2606,7 @@ TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2277,7 +2669,7 @@ TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2343,7 +2735,7 @@ TEST_F(QuicFramerTest, ConstructRstFramePacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2406,7 +2798,7 @@ TEST_F(QuicFramerTest, ConstructCloseFramePacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2477,7 +2869,7 @@ TEST_F(QuicFramerTest, ConstructGoAwayPacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2521,7 +2913,7 @@ TEST_F(QuicFramerTest, ConstructPublicResetPacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (public reset, 8 byte GUID)
|
| - 0x0E,
|
| + 0x3E,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2559,7 +2951,7 @@ TEST_F(QuicFramerTest, ConstructFecPacket) {
|
|
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2591,7 +2983,7 @@ TEST_F(QuicFramerTest, EncryptPacket) {
|
| QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2612,7 +3004,8 @@ TEST_F(QuicFramerTest, EncryptPacket) {
|
|
|
| scoped_ptr<QuicPacket> raw(
|
| QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
|
| - PACKET_8BYTE_GUID, !kIncludeVersion));
|
| + PACKET_8BYTE_GUID, !kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER));
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
|
|
|
| @@ -2624,7 +3017,7 @@ TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) {
|
| QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
|
| unsigned char packet[] = {
|
| // public flags (version, 8 byte guid)
|
| - 0x0D,
|
| + 0x3D,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2647,7 +3040,8 @@ TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) {
|
|
|
| scoped_ptr<QuicPacket> raw(
|
| QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
|
| - PACKET_8BYTE_GUID, kIncludeVersion));
|
| + PACKET_8BYTE_GUID, kIncludeVersion,
|
| + PACKET_6BYTE_SEQUENCE_NUMBER));
|
| scoped_ptr<QuicEncryptedPacket> encrypted(
|
| framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
|
|
|
| @@ -2816,7 +3210,7 @@ TEST_F(QuicFramerTest, CleanTruncation) {
|
| TEST_F(QuicFramerTest, EntropyFlagTest) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2855,7 +3249,7 @@ TEST_F(QuicFramerTest, EntropyFlagTest) {
|
| TEST_F(QuicFramerTest, FecEntropyTest) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2896,7 +3290,7 @@ TEST_F(QuicFramerTest, FecEntropyTest) {
|
| TEST_F(QuicFramerTest, StopPacketProcessing) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
| @@ -2957,7 +3351,7 @@ TEST_F(QuicFramerTest, StopPacketProcessing) {
|
| TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte guid)
|
| - 0x0C,
|
| + 0x3C,
|
| // guid
|
| 0x10, 0x32, 0x54, 0x76,
|
| 0x98, 0xBA, 0xDC, 0xFE,
|
|
|