| 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_framer.h" | 5 #include "net/quic/quic_framer.h" |
| 6 | 6 |
| 7 #include <stdint.h> |
| 8 |
| 7 #include <algorithm> | 9 #include <algorithm> |
| 8 #include <map> | 10 #include <map> |
| 9 #include <string> | 11 #include <string> |
| 10 #include <vector> | 12 #include <vector> |
| 11 | 13 |
| 12 #include "base/containers/hash_tables.h" | 14 #include "base/containers/hash_tables.h" |
| 13 #include "base/logging.h" | 15 #include "base/logging.h" |
| 14 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/port.h" | |
| 16 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
| 17 #include "net/quic/crypto/quic_decrypter.h" | 18 #include "net/quic/crypto/quic_decrypter.h" |
| 18 #include "net/quic/crypto/quic_encrypter.h" | 19 #include "net/quic/crypto/quic_encrypter.h" |
| 19 #include "net/quic/quic_protocol.h" | 20 #include "net/quic/quic_protocol.h" |
| 20 #include "net/quic/quic_utils.h" | 21 #include "net/quic/quic_utils.h" |
| 21 #include "net/quic/test_tools/quic_framer_peer.h" | 22 #include "net/quic/test_tools/quic_framer_peer.h" |
| 22 #include "net/quic/test_tools/quic_test_utils.h" | 23 #include "net/quic/test_tools/quic_test_utils.h" |
| 23 #include "net/test/gtest_util.h" | 24 #include "net/test/gtest_util.h" |
| 24 | 25 |
| 25 using base::hash_set; | 26 using base::hash_set; |
| 26 using base::StringPiece; | 27 using base::StringPiece; |
| 27 using std::make_pair; | 28 using std::make_pair; |
| 28 using std::map; | 29 using std::map; |
| 29 using std::numeric_limits; | 30 using std::numeric_limits; |
| 30 using std::pair; | 31 using std::pair; |
| 31 using std::string; | 32 using std::string; |
| 32 using std::vector; | 33 using std::vector; |
| 33 using testing::Return; | 34 using testing::Return; |
| 34 using testing::_; | 35 using testing::_; |
| 35 | 36 |
| 36 namespace net { | 37 namespace net { |
| 37 namespace test { | 38 namespace test { |
| 38 | 39 |
| 39 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; | 40 const QuicPacketSequenceNumber kEpoch = UINT64_C(1) << 48; |
| 40 const QuicPacketSequenceNumber kMask = kEpoch - 1; | 41 const QuicPacketSequenceNumber kMask = kEpoch - 1; |
| 41 | 42 |
| 42 // Index into the connection_id offset in the header. | 43 // Index into the connection_id offset in the header. |
| 43 const size_t kConnectionIdOffset = kPublicFlagsSize; | 44 const size_t kConnectionIdOffset = kPublicFlagsSize; |
| 44 // Index into the version string in the header. (if present). | 45 // Index into the version string in the header. (if present). |
| 45 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 46 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
| 46 | 47 |
| 47 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 48 // Size in bytes of the stream frame fields for an arbitrary StreamID and |
| 48 // offset and the last frame in a packet. | 49 // offset and the last frame in a packet. |
| 49 size_t GetMinStreamFrameSize() { | 50 size_t GetMinStreamFrameSize() { |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 test::TestEntropyCalculator entropy_calculator_; | 495 test::TestEntropyCalculator entropy_calculator_; |
| 495 }; | 496 }; |
| 496 | 497 |
| 497 // Run all framer tests with all supported versions of QUIC. | 498 // Run all framer tests with all supported versions of QUIC. |
| 498 INSTANTIATE_TEST_CASE_P(QuicFramerTests, | 499 INSTANTIATE_TEST_CASE_P(QuicFramerTests, |
| 499 QuicFramerTest, | 500 QuicFramerTest, |
| 500 ::testing::ValuesIn(kSupportedQuicVersions)); | 501 ::testing::ValuesIn(kSupportedQuicVersions)); |
| 501 | 502 |
| 502 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { | 503 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { |
| 503 // A few quick manual sanity checks | 504 // A few quick manual sanity checks |
| 504 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); | 505 CheckCalculatePacketSequenceNumber(UINT64_C(1), UINT64_C(0)); |
| 505 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); | 506 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); |
| 506 CheckCalculatePacketSequenceNumber(kEpoch, kMask); | 507 CheckCalculatePacketSequenceNumber(kEpoch, kMask); |
| 507 | 508 |
| 508 // Cases where the last number was close to the start of the range | 509 // Cases where the last number was close to the start of the range |
| 509 for (uint64 last = 0; last < 10; last++) { | 510 for (uint64 last = 0; last < 10; last++) { |
| 510 // Small numbers should not wrap (even if they're out of order). | 511 // Small numbers should not wrap (even if they're out of order). |
| 511 for (uint64 j = 0; j < 10; j++) { | 512 for (uint64 j = 0; j < 10; j++) { |
| 512 CheckCalculatePacketSequenceNumber(j, last); | 513 CheckCalculatePacketSequenceNumber(j, last); |
| 513 } | 514 } |
| 514 | 515 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, | 637 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, |
| 637 kMaxPacketSize - GetPacketHeaderSize( | 638 kMaxPacketSize - GetPacketHeaderSize( |
| 638 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 639 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 639 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); | 640 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); |
| 640 | 641 |
| 641 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 642 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 642 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 643 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 643 | 644 |
| 644 ASSERT_TRUE(visitor_.header_.get()); | 645 ASSERT_TRUE(visitor_.header_.get()); |
| 645 // Make sure we've parsed the packet header, so we can send an error. | 646 // Make sure we've parsed the packet header, so we can send an error. |
| 646 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 647 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 647 visitor_.header_->public_header.connection_id); | 648 visitor_.header_->public_header.connection_id); |
| 648 // Make sure the correct error is propagated. | 649 // Make sure the correct error is propagated. |
| 649 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 650 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
| 650 } | 651 } |
| 651 | 652 |
| 652 TEST_P(QuicFramerTest, PacketHeader) { | 653 TEST_P(QuicFramerTest, PacketHeader) { |
| 653 unsigned char packet[] = { | 654 unsigned char packet[] = { |
| 654 // public flags (8 byte connection_id) | 655 // public flags (8 byte connection_id) |
| 655 0x3C, | 656 0x3C, |
| 656 // connection_id | 657 // connection_id |
| 657 0x10, 0x32, 0x54, 0x76, | 658 0x10, 0x32, 0x54, 0x76, |
| 658 0x98, 0xBA, 0xDC, 0xFE, | 659 0x98, 0xBA, 0xDC, 0xFE, |
| 659 // packet sequence number | 660 // packet sequence number |
| 660 0xBC, 0x9A, 0x78, 0x56, | 661 0xBC, 0x9A, 0x78, 0x56, |
| 661 0x34, 0x12, | 662 0x34, 0x12, |
| 662 // private flags | 663 // private flags |
| 663 0x00, | 664 0x00, |
| 664 }; | 665 }; |
| 665 | 666 |
| 666 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 667 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 667 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 668 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 668 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 669 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 669 ASSERT_TRUE(visitor_.header_.get()); | 670 ASSERT_TRUE(visitor_.header_.get()); |
| 670 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 671 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 671 visitor_.header_->public_header.connection_id); | 672 visitor_.header_->public_header.connection_id); |
| 672 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 673 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 673 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 674 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 674 EXPECT_FALSE(visitor_.header_->fec_flag); | 675 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 675 EXPECT_FALSE(visitor_.header_->entropy_flag); | 676 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 676 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 677 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 677 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 678 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 678 visitor_.header_->packet_sequence_number); | |
| 679 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 679 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 680 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 680 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 681 | 681 |
| 682 // Now test framing boundaries. | 682 // Now test framing boundaries. |
| 683 for (size_t i = 0; | 683 for (size_t i = 0; |
| 684 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 684 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 685 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 685 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 686 ++i) { | 686 ++i) { |
| 687 string expected_error; | 687 string expected_error; |
| 688 if (i < kConnectionIdOffset) { | 688 if (i < kConnectionIdOffset) { |
| 689 expected_error = "Unable to read public flags."; | 689 expected_error = "Unable to read public flags."; |
| 690 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 690 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 691 expected_error = "Unable to read ConnectionId."; | 691 expected_error = "Unable to read ConnectionId."; |
| 692 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 692 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { |
| 693 expected_error = "Unable to read sequence number."; | 693 expected_error = "Unable to read sequence number."; |
| 694 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 694 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
| 695 expected_error = "Unable to read private flags."; | 695 expected_error = "Unable to read private flags."; |
| 696 } else { | 696 } else { |
| 697 expected_error = "Unable to read first fec protected packet offset."; | 697 expected_error = "Unable to read first fec protected packet offset."; |
| 698 } | 698 } |
| 699 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 699 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 700 } | 700 } |
| 701 } | 701 } |
| 702 | 702 |
| 703 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 703 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { |
| 704 QuicFramerPeer::SetLastSerializedConnectionId( | 704 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, |
| 705 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); | 705 UINT64_C(0xFEDCBA9876543210)); |
| 706 | 706 |
| 707 unsigned char packet[] = { | 707 unsigned char packet[] = { |
| 708 // public flags (4 byte connection_id) | 708 // public flags (4 byte connection_id) |
| 709 0x38, | 709 0x38, |
| 710 // connection_id | 710 // connection_id |
| 711 0x10, 0x32, 0x54, 0x76, | 711 0x10, 0x32, 0x54, 0x76, |
| 712 // packet sequence number | 712 // packet sequence number |
| 713 0xBC, 0x9A, 0x78, 0x56, | 713 0xBC, 0x9A, 0x78, 0x56, |
| 714 0x34, 0x12, | 714 0x34, 0x12, |
| 715 // private flags | 715 // private flags |
| 716 0x00, | 716 0x00, |
| 717 }; | 717 }; |
| 718 | 718 |
| 719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 720 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 720 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 721 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 721 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 722 ASSERT_TRUE(visitor_.header_.get()); | 722 ASSERT_TRUE(visitor_.header_.get()); |
| 723 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 723 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 724 visitor_.header_->public_header.connection_id); | 724 visitor_.header_->public_header.connection_id); |
| 725 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 725 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 726 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 726 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 727 EXPECT_FALSE(visitor_.header_->fec_flag); | 727 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 728 EXPECT_FALSE(visitor_.header_->entropy_flag); | 728 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 729 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 729 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 730 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 730 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 731 visitor_.header_->packet_sequence_number); | |
| 732 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 731 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 733 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 732 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 734 | 733 |
| 735 // Now test framing boundaries. | 734 // Now test framing boundaries. |
| 736 for (size_t i = 0; | 735 for (size_t i = 0; |
| 737 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 736 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, |
| 738 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 737 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 739 ++i) { | 738 ++i) { |
| 740 string expected_error; | 739 string expected_error; |
| 741 if (i < kConnectionIdOffset) { | 740 if (i < kConnectionIdOffset) { |
| 742 expected_error = "Unable to read public flags."; | 741 expected_error = "Unable to read public flags."; |
| 743 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 742 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_CONNECTION_ID, |
| 744 !kIncludeVersion)) { | 743 !kIncludeVersion)) { |
| 745 expected_error = "Unable to read ConnectionId."; | 744 expected_error = "Unable to read ConnectionId."; |
| 746 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 745 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, |
| 747 !kIncludeVersion)) { | 746 !kIncludeVersion)) { |
| 748 expected_error = "Unable to read sequence number."; | 747 expected_error = "Unable to read sequence number."; |
| 749 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 748 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, |
| 750 !kIncludeVersion)) { | 749 !kIncludeVersion)) { |
| 751 expected_error = "Unable to read private flags."; | 750 expected_error = "Unable to read private flags."; |
| 752 } else { | 751 } else { |
| 753 expected_error = "Unable to read first fec protected packet offset."; | 752 expected_error = "Unable to read first fec protected packet offset."; |
| 754 } | 753 } |
| 755 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 754 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 756 } | 755 } |
| 757 } | 756 } |
| 758 | 757 |
| 759 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 758 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { |
| 760 QuicFramerPeer::SetLastSerializedConnectionId( | 759 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, |
| 761 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); | 760 UINT64_C(0xFEDCBA9876543210)); |
| 762 | 761 |
| 763 unsigned char packet[] = { | 762 unsigned char packet[] = { |
| 764 // public flags (1 byte connection_id) | 763 // public flags (1 byte connection_id) |
| 765 0x34, | 764 0x34, |
| 766 // connection_id | 765 // connection_id |
| 767 0x10, | 766 0x10, |
| 768 // packet sequence number | 767 // packet sequence number |
| 769 0xBC, 0x9A, 0x78, 0x56, | 768 0xBC, 0x9A, 0x78, 0x56, |
| 770 0x34, 0x12, | 769 0x34, 0x12, |
| 771 // private flags | 770 // private flags |
| 772 0x00, | 771 0x00, |
| 773 }; | 772 }; |
| 774 | 773 |
| 775 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 774 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 776 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 775 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 777 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 776 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 778 ASSERT_TRUE(visitor_.header_.get()); | 777 ASSERT_TRUE(visitor_.header_.get()); |
| 779 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 778 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 780 visitor_.header_->public_header.connection_id); | 779 visitor_.header_->public_header.connection_id); |
| 781 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 780 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 782 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 781 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 783 EXPECT_FALSE(visitor_.header_->fec_flag); | 782 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 784 EXPECT_FALSE(visitor_.header_->entropy_flag); | 783 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 785 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 784 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 786 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 785 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 787 visitor_.header_->packet_sequence_number); | |
| 788 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 786 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 789 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 787 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 790 | 788 |
| 791 // Now test framing boundaries. | 789 // Now test framing boundaries. |
| 792 for (size_t i = 0; | 790 for (size_t i = 0; |
| 793 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 791 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, |
| 794 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 792 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 795 ++i) { | 793 ++i) { |
| 796 string expected_error; | 794 string expected_error; |
| 797 if (i < kConnectionIdOffset) { | 795 if (i < kConnectionIdOffset) { |
| 798 expected_error = "Unable to read public flags."; | 796 expected_error = "Unable to read public flags."; |
| 799 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 797 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_CONNECTION_ID, |
| 800 !kIncludeVersion)) { | 798 !kIncludeVersion)) { |
| 801 expected_error = "Unable to read ConnectionId."; | 799 expected_error = "Unable to read ConnectionId."; |
| 802 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 800 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, |
| 803 !kIncludeVersion)) { | 801 !kIncludeVersion)) { |
| 804 expected_error = "Unable to read sequence number."; | 802 expected_error = "Unable to read sequence number."; |
| 805 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 803 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, |
| 806 !kIncludeVersion)) { | 804 !kIncludeVersion)) { |
| 807 expected_error = "Unable to read private flags."; | 805 expected_error = "Unable to read private flags."; |
| 808 } else { | 806 } else { |
| 809 expected_error = "Unable to read first fec protected packet offset."; | 807 expected_error = "Unable to read first fec protected packet offset."; |
| 810 } | 808 } |
| 811 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 809 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 812 } | 810 } |
| 813 } | 811 } |
| 814 | 812 |
| 815 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 813 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
| 816 QuicFramerPeer::SetLastSerializedConnectionId( | 814 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, |
| 817 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); | 815 UINT64_C(0xFEDCBA9876543210)); |
| 818 | 816 |
| 819 unsigned char packet[] = { | 817 unsigned char packet[] = { |
| 820 // public flags (0 byte connection_id) | 818 // public flags (0 byte connection_id) |
| 821 0x30, | 819 0x30, |
| 822 // connection_id | 820 // connection_id |
| 823 // packet sequence number | 821 // packet sequence number |
| 824 0xBC, 0x9A, 0x78, 0x56, | 822 0xBC, 0x9A, 0x78, 0x56, |
| 825 0x34, 0x12, | 823 0x34, 0x12, |
| 826 // private flags | 824 // private flags |
| 827 0x00, | 825 0x00, |
| 828 }; | 826 }; |
| 829 | 827 |
| 830 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 828 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 831 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 829 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 832 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 830 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 833 ASSERT_TRUE(visitor_.header_.get()); | 831 ASSERT_TRUE(visitor_.header_.get()); |
| 834 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 832 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 835 visitor_.header_->public_header.connection_id); | 833 visitor_.header_->public_header.connection_id); |
| 836 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 834 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 837 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 835 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 838 EXPECT_FALSE(visitor_.header_->fec_flag); | 836 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 839 EXPECT_FALSE(visitor_.header_->entropy_flag); | 837 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 840 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 838 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 841 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 839 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 842 visitor_.header_->packet_sequence_number); | |
| 843 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 840 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 844 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 841 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 845 | 842 |
| 846 // Now test framing boundaries. | 843 // Now test framing boundaries. |
| 847 for (size_t i = 0; | 844 for (size_t i = 0; |
| 848 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 845 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, |
| 849 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 846 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 850 ++i) { | 847 ++i) { |
| 851 string expected_error; | 848 string expected_error; |
| 852 if (i < kConnectionIdOffset) { | 849 if (i < kConnectionIdOffset) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 880 0xBC, 0x9A, 0x78, 0x56, | 877 0xBC, 0x9A, 0x78, 0x56, |
| 881 0x34, 0x12, | 878 0x34, 0x12, |
| 882 // private flags | 879 // private flags |
| 883 0x00, | 880 0x00, |
| 884 }; | 881 }; |
| 885 | 882 |
| 886 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 883 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 887 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 884 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 888 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 885 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 889 ASSERT_TRUE(visitor_.header_.get()); | 886 ASSERT_TRUE(visitor_.header_.get()); |
| 890 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 887 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 891 visitor_.header_->public_header.connection_id); | 888 visitor_.header_->public_header.connection_id); |
| 892 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 889 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 893 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 890 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
| 894 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 891 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
| 895 EXPECT_FALSE(visitor_.header_->fec_flag); | 892 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 896 EXPECT_FALSE(visitor_.header_->entropy_flag); | 893 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 897 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 894 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 898 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 895 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 899 visitor_.header_->packet_sequence_number); | |
| 900 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 896 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 901 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 897 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 902 | 898 |
| 903 // Now test framing boundaries. | 899 // Now test framing boundaries. |
| 904 for (size_t i = 0; | 900 for (size_t i = 0; |
| 905 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 901 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
| 906 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 902 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 907 ++i) { | 903 ++i) { |
| 908 string expected_error; | 904 string expected_error; |
| 909 if (i < kConnectionIdOffset) { | 905 if (i < kConnectionIdOffset) { |
| 910 expected_error = "Unable to read public flags."; | 906 expected_error = "Unable to read public flags."; |
| 911 } else if (i < kVersionOffset) { | 907 } else if (i < kVersionOffset) { |
| 912 expected_error = "Unable to read ConnectionId."; | 908 expected_error = "Unable to read ConnectionId."; |
| 913 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { | 909 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { |
| 914 expected_error = "Unable to read protocol version."; | 910 expected_error = "Unable to read protocol version."; |
| 915 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 911 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { |
| 916 expected_error = "Unable to read sequence number."; | 912 expected_error = "Unable to read sequence number."; |
| 917 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 913 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
| 918 expected_error = "Unable to read private flags."; | 914 expected_error = "Unable to read private flags."; |
| 919 } else { | 915 } else { |
| 920 expected_error = "Unable to read first fec protected packet offset."; | 916 expected_error = "Unable to read first fec protected packet offset."; |
| 921 } | 917 } |
| 922 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 918 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 923 } | 919 } |
| 924 } | 920 } |
| 925 | 921 |
| 926 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { | 922 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { |
| 927 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 923 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA)); |
| 928 GG_UINT64_C(0x123456789ABA)); | |
| 929 | 924 |
| 930 unsigned char packet[] = { | 925 unsigned char packet[] = { |
| 931 // public flags (8 byte connection_id and 4 byte sequence number) | 926 // public flags (8 byte connection_id and 4 byte sequence number) |
| 932 0x2C, | 927 0x2C, |
| 933 // connection_id | 928 // connection_id |
| 934 0x10, 0x32, 0x54, 0x76, | 929 0x10, 0x32, 0x54, 0x76, |
| 935 0x98, 0xBA, 0xDC, 0xFE, | 930 0x98, 0xBA, 0xDC, 0xFE, |
| 936 // packet sequence number | 931 // packet sequence number |
| 937 0xBC, 0x9A, 0x78, 0x56, | 932 0xBC, 0x9A, 0x78, 0x56, |
| 938 // private flags | 933 // private flags |
| 939 0x00, | 934 0x00, |
| 940 }; | 935 }; |
| 941 | 936 |
| 942 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 937 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 943 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 938 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 944 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 939 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 945 ASSERT_TRUE(visitor_.header_.get()); | 940 ASSERT_TRUE(visitor_.header_.get()); |
| 946 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 941 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 947 visitor_.header_->public_header.connection_id); | 942 visitor_.header_->public_header.connection_id); |
| 948 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 943 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 949 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 944 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 950 EXPECT_FALSE(visitor_.header_->fec_flag); | 945 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 951 EXPECT_FALSE(visitor_.header_->entropy_flag); | 946 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 952 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 947 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 953 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 948 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 954 visitor_.header_->packet_sequence_number); | |
| 955 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 949 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 956 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 950 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 957 | 951 |
| 958 // Now test framing boundaries. | 952 // Now test framing boundaries. |
| 959 for (size_t i = 0; | 953 for (size_t i = 0; |
| 960 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 954 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 961 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 955 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 962 ++i) { | 956 ++i) { |
| 963 string expected_error; | 957 string expected_error; |
| 964 if (i < kConnectionIdOffset) { | 958 if (i < kConnectionIdOffset) { |
| 965 expected_error = "Unable to read public flags."; | 959 expected_error = "Unable to read public flags."; |
| 966 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 960 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 967 expected_error = "Unable to read ConnectionId."; | 961 expected_error = "Unable to read ConnectionId."; |
| 968 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 962 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 969 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 963 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
| 970 expected_error = "Unable to read sequence number."; | 964 expected_error = "Unable to read sequence number."; |
| 971 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 965 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 972 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 966 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
| 973 expected_error = "Unable to read private flags."; | 967 expected_error = "Unable to read private flags."; |
| 974 } else { | 968 } else { |
| 975 expected_error = "Unable to read first fec protected packet offset."; | 969 expected_error = "Unable to read first fec protected packet offset."; |
| 976 } | 970 } |
| 977 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 971 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 978 } | 972 } |
| 979 } | 973 } |
| 980 | 974 |
| 981 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { | 975 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { |
| 982 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 976 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA)); |
| 983 GG_UINT64_C(0x123456789ABA)); | |
| 984 | 977 |
| 985 unsigned char packet[] = { | 978 unsigned char packet[] = { |
| 986 // public flags (8 byte connection_id and 2 byte sequence number) | 979 // public flags (8 byte connection_id and 2 byte sequence number) |
| 987 0x1C, | 980 0x1C, |
| 988 // connection_id | 981 // connection_id |
| 989 0x10, 0x32, 0x54, 0x76, | 982 0x10, 0x32, 0x54, 0x76, |
| 990 0x98, 0xBA, 0xDC, 0xFE, | 983 0x98, 0xBA, 0xDC, 0xFE, |
| 991 // packet sequence number | 984 // packet sequence number |
| 992 0xBC, 0x9A, | 985 0xBC, 0x9A, |
| 993 // private flags | 986 // private flags |
| 994 0x00, | 987 0x00, |
| 995 }; | 988 }; |
| 996 | 989 |
| 997 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 990 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 998 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 991 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 999 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 992 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 1000 ASSERT_TRUE(visitor_.header_.get()); | 993 ASSERT_TRUE(visitor_.header_.get()); |
| 1001 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 994 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 1002 visitor_.header_->public_header.connection_id); | 995 visitor_.header_->public_header.connection_id); |
| 1003 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 996 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1004 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 997 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1005 EXPECT_FALSE(visitor_.header_->fec_flag); | 998 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1006 EXPECT_FALSE(visitor_.header_->entropy_flag); | 999 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1007 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1000 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1008 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1001 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 1009 visitor_.header_->packet_sequence_number); | |
| 1010 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1002 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1011 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1003 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 1012 | 1004 |
| 1013 // Now test framing boundaries. | 1005 // Now test framing boundaries. |
| 1014 for (size_t i = 0; | 1006 for (size_t i = 0; |
| 1015 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1007 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1016 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 1008 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 1017 ++i) { | 1009 ++i) { |
| 1018 string expected_error; | 1010 string expected_error; |
| 1019 if (i < kConnectionIdOffset) { | 1011 if (i < kConnectionIdOffset) { |
| 1020 expected_error = "Unable to read public flags."; | 1012 expected_error = "Unable to read public flags."; |
| 1021 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 1013 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 1022 expected_error = "Unable to read ConnectionId."; | 1014 expected_error = "Unable to read ConnectionId."; |
| 1023 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 1015 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 1024 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 1016 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
| 1025 expected_error = "Unable to read sequence number."; | 1017 expected_error = "Unable to read sequence number."; |
| 1026 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 1018 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 1027 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 1019 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
| 1028 expected_error = "Unable to read private flags."; | 1020 expected_error = "Unable to read private flags."; |
| 1029 } else { | 1021 } else { |
| 1030 expected_error = "Unable to read first fec protected packet offset."; | 1022 expected_error = "Unable to read first fec protected packet offset."; |
| 1031 } | 1023 } |
| 1032 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1024 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1033 } | 1025 } |
| 1034 } | 1026 } |
| 1035 | 1027 |
| 1036 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { | 1028 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { |
| 1037 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 1029 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA)); |
| 1038 GG_UINT64_C(0x123456789ABA)); | |
| 1039 | 1030 |
| 1040 unsigned char packet[] = { | 1031 unsigned char packet[] = { |
| 1041 // public flags (8 byte connection_id and 1 byte sequence number) | 1032 // public flags (8 byte connection_id and 1 byte sequence number) |
| 1042 0x0C, | 1033 0x0C, |
| 1043 // connection_id | 1034 // connection_id |
| 1044 0x10, 0x32, 0x54, 0x76, | 1035 0x10, 0x32, 0x54, 0x76, |
| 1045 0x98, 0xBA, 0xDC, 0xFE, | 1036 0x98, 0xBA, 0xDC, 0xFE, |
| 1046 // packet sequence number | 1037 // packet sequence number |
| 1047 0xBC, | 1038 0xBC, |
| 1048 // private flags | 1039 // private flags |
| 1049 0x00, | 1040 0x00, |
| 1050 }; | 1041 }; |
| 1051 | 1042 |
| 1052 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1043 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1053 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1044 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 1054 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1045 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 1055 ASSERT_TRUE(visitor_.header_.get()); | 1046 ASSERT_TRUE(visitor_.header_.get()); |
| 1056 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 1047 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 1057 visitor_.header_->public_header.connection_id); | 1048 visitor_.header_->public_header.connection_id); |
| 1058 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1049 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1059 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1050 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1060 EXPECT_FALSE(visitor_.header_->fec_flag); | 1051 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1061 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1052 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1062 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1053 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1063 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1054 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 1064 visitor_.header_->packet_sequence_number); | |
| 1065 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1055 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1066 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1056 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 1067 | 1057 |
| 1068 // Now test framing boundaries. | 1058 // Now test framing boundaries. |
| 1069 for (size_t i = 0; | 1059 for (size_t i = 0; |
| 1070 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1060 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1071 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 1061 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 1072 ++i) { | 1062 ++i) { |
| 1073 string expected_error; | 1063 string expected_error; |
| 1074 if (i < kConnectionIdOffset) { | 1064 if (i < kConnectionIdOffset) { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1293 | 1283 |
| 1294 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1284 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1295 ASSERT_TRUE(visitor_.header_.get()); | 1285 ASSERT_TRUE(visitor_.header_.get()); |
| 1296 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1286 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1297 | 1287 |
| 1298 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1288 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1299 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1289 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1300 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1290 EXPECT_EQ(static_cast<uint64>(0x01020304), |
| 1301 visitor_.stream_frames_[0]->stream_id); | 1291 visitor_.stream_frames_[0]->stream_id); |
| 1302 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1292 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1303 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1293 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1304 visitor_.stream_frames_[0]->offset); | |
| 1305 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1294 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1306 | 1295 |
| 1307 // Now test framing boundaries. | 1296 // Now test framing boundaries. |
| 1308 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 1297 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); |
| 1309 } | 1298 } |
| 1310 | 1299 |
| 1311 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1300 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
| 1312 unsigned char packet[] = { | 1301 unsigned char packet[] = { |
| 1313 // public flags (8 byte connection_id) | 1302 // public flags (8 byte connection_id) |
| 1314 0x3C, | 1303 0x3C, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1338 | 1327 |
| 1339 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1328 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1340 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1329 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1341 | 1330 |
| 1342 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1331 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1343 ASSERT_TRUE(visitor_.header_.get()); | 1332 ASSERT_TRUE(visitor_.header_.get()); |
| 1344 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1333 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1345 | 1334 |
| 1346 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1335 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1347 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1336 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1348 EXPECT_EQ(GG_UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id); | 1337 EXPECT_EQ(UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id); |
| 1349 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1338 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1350 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1339 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1351 visitor_.stream_frames_[0]->offset); | |
| 1352 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1340 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1353 | 1341 |
| 1354 // Now test framing boundaries. | 1342 // Now test framing boundaries. |
| 1355 const size_t stream_id_size = 3; | 1343 const size_t stream_id_size = 3; |
| 1356 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1344 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1357 } | 1345 } |
| 1358 | 1346 |
| 1359 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1347 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
| 1360 unsigned char packet[] = { | 1348 unsigned char packet[] = { |
| 1361 // public flags (8 byte connection_id) | 1349 // public flags (8 byte connection_id) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1389 | 1377 |
| 1390 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1378 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1391 ASSERT_TRUE(visitor_.header_.get()); | 1379 ASSERT_TRUE(visitor_.header_.get()); |
| 1392 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1380 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1393 | 1381 |
| 1394 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1382 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1395 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1383 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1396 EXPECT_EQ(static_cast<uint64>(0x00000304), | 1384 EXPECT_EQ(static_cast<uint64>(0x00000304), |
| 1397 visitor_.stream_frames_[0]->stream_id); | 1385 visitor_.stream_frames_[0]->stream_id); |
| 1398 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1386 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1399 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1387 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1400 visitor_.stream_frames_[0]->offset); | |
| 1401 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1388 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1402 | 1389 |
| 1403 // Now test framing boundaries. | 1390 // Now test framing boundaries. |
| 1404 const size_t stream_id_size = 2; | 1391 const size_t stream_id_size = 2; |
| 1405 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1392 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1406 } | 1393 } |
| 1407 | 1394 |
| 1408 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1395 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
| 1409 unsigned char packet[] = { | 1396 unsigned char packet[] = { |
| 1410 // public flags (8 byte connection_id) | 1397 // public flags (8 byte connection_id) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1438 | 1425 |
| 1439 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1426 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1440 ASSERT_TRUE(visitor_.header_.get()); | 1427 ASSERT_TRUE(visitor_.header_.get()); |
| 1441 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1428 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1442 | 1429 |
| 1443 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1430 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1444 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1431 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1445 EXPECT_EQ(static_cast<uint64>(0x00000004), | 1432 EXPECT_EQ(static_cast<uint64>(0x00000004), |
| 1446 visitor_.stream_frames_[0]->stream_id); | 1433 visitor_.stream_frames_[0]->stream_id); |
| 1447 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1434 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1448 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1435 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1449 visitor_.stream_frames_[0]->offset); | |
| 1450 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1436 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1451 | 1437 |
| 1452 // Now test framing boundaries. | 1438 // Now test framing boundaries. |
| 1453 const size_t stream_id_size = 1; | 1439 const size_t stream_id_size = 1; |
| 1454 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1440 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1455 } | 1441 } |
| 1456 | 1442 |
| 1457 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1443 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
| 1458 unsigned char packet[] = { | 1444 unsigned char packet[] = { |
| 1459 // public flags (version, 8 byte connection_id) | 1445 // public flags (version, 8 byte connection_id) |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1491 ASSERT_TRUE(visitor_.header_.get()); | 1477 ASSERT_TRUE(visitor_.header_.get()); |
| 1492 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 1478 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
| 1493 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 1479 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
| 1494 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1480 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); |
| 1495 | 1481 |
| 1496 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1482 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1497 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1483 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1498 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1484 EXPECT_EQ(static_cast<uint64>(0x01020304), |
| 1499 visitor_.stream_frames_[0]->stream_id); | 1485 visitor_.stream_frames_[0]->stream_id); |
| 1500 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1486 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1501 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1487 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1502 visitor_.stream_frames_[0]->offset); | |
| 1503 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1488 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1504 | 1489 |
| 1505 // Now test framing boundaries. | 1490 // Now test framing boundaries. |
| 1506 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 1491 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); |
| 1507 } | 1492 } |
| 1508 | 1493 |
| 1509 TEST_P(QuicFramerTest, RejectPacket) { | 1494 TEST_P(QuicFramerTest, RejectPacket) { |
| 1510 visitor_.accept_packet_ = false; | 1495 visitor_.accept_packet_ = false; |
| 1511 | 1496 |
| 1512 unsigned char packet[] = { | 1497 unsigned char packet[] = { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1577 0xDC, 0xFE, 0x98, 0xBA, | 1562 0xDC, 0xFE, 0x98, 0xBA, |
| 1578 // data length | 1563 // data length |
| 1579 0x0c, 0x00, | 1564 0x0c, 0x00, |
| 1580 // data | 1565 // data |
| 1581 'h', 'e', 'l', 'l', | 1566 'h', 'e', 'l', 'l', |
| 1582 'o', ' ', 'w', 'o', | 1567 'o', ' ', 'w', 'o', |
| 1583 'r', 'l', 'd', '!', | 1568 'r', 'l', 'd', '!', |
| 1584 }; | 1569 }; |
| 1585 | 1570 |
| 1586 QuicPacketHeader header; | 1571 QuicPacketHeader header; |
| 1587 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 1572 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 1588 header.public_header.reset_flag = false; | 1573 header.public_header.reset_flag = false; |
| 1589 header.public_header.version_flag = false; | 1574 header.public_header.version_flag = false; |
| 1590 header.fec_flag = true; | 1575 header.fec_flag = true; |
| 1591 header.entropy_flag = true; | 1576 header.entropy_flag = true; |
| 1592 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 1577 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 1593 header.fec_group = 0; | 1578 header.fec_group = 0; |
| 1594 | 1579 |
| 1595 // Do not encrypt the payload because the revived payload is post-encryption. | 1580 // Do not encrypt the payload because the revived payload is post-encryption. |
| 1596 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 1581 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, |
| 1597 StringPiece(AsChars(payload), | 1582 StringPiece(AsChars(payload), |
| 1598 arraysize(payload)))); | 1583 arraysize(payload)))); |
| 1599 | 1584 |
| 1600 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1585 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1601 ASSERT_EQ(1, visitor_.revived_packets_); | 1586 ASSERT_EQ(1, visitor_.revived_packets_); |
| 1602 ASSERT_TRUE(visitor_.header_.get()); | 1587 ASSERT_TRUE(visitor_.header_.get()); |
| 1603 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 1588 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 1604 visitor_.header_->public_header.connection_id); | 1589 visitor_.header_->public_header.connection_id); |
| 1605 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1590 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1606 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1591 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1607 EXPECT_TRUE(visitor_.header_->fec_flag); | 1592 EXPECT_TRUE(visitor_.header_->fec_flag); |
| 1608 EXPECT_TRUE(visitor_.header_->entropy_flag); | 1593 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 1609 EXPECT_EQ(1 << (header.packet_sequence_number % 8), | 1594 EXPECT_EQ(1 << (header.packet_sequence_number % 8), |
| 1610 visitor_.header_->entropy_hash); | 1595 visitor_.header_->entropy_hash); |
| 1611 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1596 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number); |
| 1612 visitor_.header_->packet_sequence_number); | |
| 1613 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1597 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1614 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1598 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 1615 | 1599 |
| 1616 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1600 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1617 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1601 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1618 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1602 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
| 1619 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1603 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1620 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1604 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1621 visitor_.stream_frames_[0]->offset); | |
| 1622 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1605 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1623 } | 1606 } |
| 1624 | 1607 |
| 1625 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 1608 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
| 1626 unsigned char packet[] = { | 1609 unsigned char packet[] = { |
| 1627 // public flags (8 byte connection_id) | 1610 // public flags (8 byte connection_id) |
| 1628 0x3C, | 1611 0x3C, |
| 1629 // connection_id | 1612 // connection_id |
| 1630 0x10, 0x32, 0x54, 0x76, | 1613 0x10, 0x32, 0x54, 0x76, |
| 1631 0x98, 0xBA, 0xDC, 0xFE, | 1614 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1652 'r', 'l', 'd', '!', | 1635 'r', 'l', 'd', '!', |
| 1653 }; | 1636 }; |
| 1654 | 1637 |
| 1655 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1638 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1656 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1639 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1657 | 1640 |
| 1658 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1641 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1659 ASSERT_TRUE(visitor_.header_.get()); | 1642 ASSERT_TRUE(visitor_.header_.get()); |
| 1660 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1643 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1661 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1644 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1662 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), | 1645 EXPECT_EQ(UINT64_C(0x341256789ABA), visitor_.header_->fec_group); |
| 1663 visitor_.header_->fec_group); | |
| 1664 const size_t fec_offset = | 1646 const size_t fec_offset = |
| 1665 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, | 1647 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, |
| 1666 !kIncludeVersion, | 1648 !kIncludeVersion, |
| 1667 PACKET_6BYTE_SEQUENCE_NUMBER); | 1649 PACKET_6BYTE_SEQUENCE_NUMBER); |
| 1668 EXPECT_EQ( | 1650 EXPECT_EQ( |
| 1669 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 1651 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), |
| 1670 visitor_.fec_protected_payload_); | 1652 visitor_.fec_protected_payload_); |
| 1671 | 1653 |
| 1672 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1654 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1673 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1655 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1674 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1656 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
| 1675 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1657 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1676 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1658 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); |
| 1677 visitor_.stream_frames_[0]->offset); | |
| 1678 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1659 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1679 } | 1660 } |
| 1680 | 1661 |
| 1681 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1662 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { |
| 1682 unsigned char packet[] = { | 1663 unsigned char packet[] = { |
| 1683 // public flags (8 byte connection_id) | 1664 // public flags (8 byte connection_id) |
| 1684 0x3C, | 1665 0x3C, |
| 1685 // connection_id | 1666 // connection_id |
| 1686 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1667 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 1687 // packet sequence number | 1668 // packet sequence number |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1722 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1703 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1723 | 1704 |
| 1724 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1705 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1725 ASSERT_TRUE(visitor_.header_.get()); | 1706 ASSERT_TRUE(visitor_.header_.get()); |
| 1726 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1707 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1727 | 1708 |
| 1728 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1709 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1729 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1710 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1730 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1711 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1731 EXPECT_EQ(0xBA, frame.entropy_hash); | 1712 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1732 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); | 1713 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 1733 ASSERT_EQ(1u, frame.missing_packets.size()); | 1714 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 1734 ASSERT_EQ(2u, frame.received_packet_times.size()); | 1715 ASSERT_EQ(2u, frame.received_packet_times.size()); |
| 1735 SequenceNumberSet::const_iterator missing_iter = | 1716 SequenceNumberSet::const_iterator missing_iter = |
| 1736 frame.missing_packets.begin(); | 1717 frame.missing_packets.begin(); |
| 1737 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1718 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter); |
| 1738 | 1719 |
| 1739 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1720 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1740 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1721 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1741 kQuicEntropyHashSize; | 1722 kQuicEntropyHashSize; |
| 1742 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1723 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 1743 PACKET_6BYTE_SEQUENCE_NUMBER; | 1724 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 1744 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1725 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 1745 kQuicDeltaTimeLargestObservedSize; | 1726 kQuicDeltaTimeLargestObservedSize; |
| 1746 const size_t kTimestampDeltaLargestObserved1 = kNumTimestampsOffset + | 1727 const size_t kTimestampDeltaLargestObserved1 = kNumTimestampsOffset + |
| 1747 kQuicNumTimestampsSize; | 1728 kQuicNumTimestampsSize; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1839 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1820 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1840 | 1821 |
| 1841 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1822 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1842 ASSERT_TRUE(visitor_.header_.get()); | 1823 ASSERT_TRUE(visitor_.header_.get()); |
| 1843 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1824 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1844 | 1825 |
| 1845 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1826 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1846 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1827 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1847 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1828 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1848 EXPECT_EQ(0xBA, frame.entropy_hash); | 1829 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1849 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); | 1830 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 1850 ASSERT_EQ(1u, frame.missing_packets.size()); | 1831 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 1851 ASSERT_EQ(1u, frame.received_packet_times.size()); | 1832 ASSERT_EQ(1u, frame.received_packet_times.size()); |
| 1852 SequenceNumberSet::const_iterator missing_iter = | 1833 SequenceNumberSet::const_iterator missing_iter = |
| 1853 frame.missing_packets.begin(); | 1834 frame.missing_packets.begin(); |
| 1854 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1835 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter); |
| 1855 | 1836 |
| 1856 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1837 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1857 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1838 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1858 kQuicEntropyHashSize; | 1839 kQuicEntropyHashSize; |
| 1859 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1840 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 1860 PACKET_6BYTE_SEQUENCE_NUMBER; | 1841 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 1861 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1842 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 1862 kQuicDeltaTimeLargestObservedSize; | 1843 kQuicDeltaTimeLargestObservedSize; |
| 1863 const size_t kTimestampDeltaLargestObserved = kNumTimestampsOffset + | 1844 const size_t kTimestampDeltaLargestObserved = kNumTimestampsOffset + |
| 1864 kQuicNumTimestampsSize; | 1845 kQuicNumTimestampsSize; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1942 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1923 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1943 | 1924 |
| 1944 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1925 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1945 ASSERT_TRUE(visitor_.header_.get()); | 1926 ASSERT_TRUE(visitor_.header_.get()); |
| 1946 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1927 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1947 | 1928 |
| 1948 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1929 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1949 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1930 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1950 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1931 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1951 EXPECT_EQ(0xBA, frame.entropy_hash); | 1932 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1952 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); | 1933 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 1953 ASSERT_EQ(1u, frame.missing_packets.size()); | 1934 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 1954 SequenceNumberSet::const_iterator missing_iter = | 1935 SequenceNumberSet::const_iterator missing_iter = |
| 1955 frame.missing_packets.begin(); | 1936 frame.missing_packets.begin(); |
| 1956 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1937 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter); |
| 1957 | 1938 |
| 1958 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1939 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1959 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1940 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1960 kQuicEntropyHashSize; | 1941 kQuicEntropyHashSize; |
| 1961 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1942 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 1962 PACKET_6BYTE_SEQUENCE_NUMBER; | 1943 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 1963 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1944 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 1964 kQuicDeltaTimeLargestObservedSize; | 1945 kQuicDeltaTimeLargestObservedSize; |
| 1965 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 1946 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + |
| 1966 kQuicNumTimestampsSize; | 1947 kQuicNumTimestampsSize; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2040 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2021 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2041 | 2022 |
| 2042 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2023 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2043 ASSERT_TRUE(visitor_.header_.get()); | 2024 ASSERT_TRUE(visitor_.header_.get()); |
| 2044 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2025 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2045 | 2026 |
| 2046 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2027 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2047 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2028 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2048 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2029 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 2049 EXPECT_EQ(0xBA, frame.entropy_hash); | 2030 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 2050 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); | 2031 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 2051 ASSERT_EQ(1u, frame.missing_packets.size()); | 2032 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 2052 SequenceNumberSet::const_iterator missing_iter = | 2033 SequenceNumberSet::const_iterator missing_iter = |
| 2053 frame.missing_packets.begin(); | 2034 frame.missing_packets.begin(); |
| 2054 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 2035 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter); |
| 2055 | 2036 |
| 2056 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2037 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 2057 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 2038 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 2058 kQuicEntropyHashSize; | 2039 kQuicEntropyHashSize; |
| 2059 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 2040 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 2060 PACKET_6BYTE_SEQUENCE_NUMBER; | 2041 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 2061 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 2042 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 2062 kQuicDeltaTimeLargestObservedSize; | 2043 kQuicDeltaTimeLargestObservedSize; |
| 2063 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 2044 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + |
| 2064 kQuicNumTimestampsSize; | 2045 kQuicNumTimestampsSize; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2132 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2113 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2133 | 2114 |
| 2134 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2115 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2135 ASSERT_TRUE(visitor_.header_.get()); | 2116 ASSERT_TRUE(visitor_.header_.get()); |
| 2136 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2117 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2137 | 2118 |
| 2138 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2119 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2139 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2120 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2140 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2121 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2141 EXPECT_EQ(0xBA, frame->entropy_hash); | 2122 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2142 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); | 2123 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); |
| 2143 ASSERT_EQ(0u, frame->missing_packets.size()); | 2124 ASSERT_EQ(0u, frame->missing_packets.size()); |
| 2144 | 2125 |
| 2145 // Verify that the packet re-serializes identically. | 2126 // Verify that the packet re-serializes identically. |
| 2146 QuicFrames frames; | 2127 QuicFrames frames; |
| 2147 frames.push_back(QuicFrame(frame)); | 2128 frames.push_back(QuicFrame(frame)); |
| 2148 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2129 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2149 ASSERT_TRUE(data != nullptr); | 2130 ASSERT_TRUE(data != nullptr); |
| 2150 | 2131 |
| 2151 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2132 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2152 data->length(), AsChars(packet), | 2133 data->length(), AsChars(packet), |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2195 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2176 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2196 | 2177 |
| 2197 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2178 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2198 ASSERT_TRUE(visitor_.header_.get()); | 2179 ASSERT_TRUE(visitor_.header_.get()); |
| 2199 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2180 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2200 | 2181 |
| 2201 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2182 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2202 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2183 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2203 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2184 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2204 EXPECT_EQ(0xBA, frame->entropy_hash); | 2185 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2205 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); | 2186 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); |
| 2206 EXPECT_EQ(0u, frame->revived_packets.size()); | 2187 EXPECT_EQ(0u, frame->revived_packets.size()); |
| 2207 ASSERT_EQ(500u, frame->missing_packets.size()); | 2188 ASSERT_EQ(500u, frame->missing_packets.size()); |
| 2208 SequenceNumberSet::const_iterator first_missing_iter = | 2189 SequenceNumberSet::const_iterator first_missing_iter = |
| 2209 frame->missing_packets.begin(); | 2190 frame->missing_packets.begin(); |
| 2210 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); | 2191 EXPECT_EQ(UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); |
| 2211 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 2192 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 2212 frame->missing_packets.rbegin(); | 2193 frame->missing_packets.rbegin(); |
| 2213 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); | 2194 EXPECT_EQ(UINT64_C(0x0123456789ABE), *last_missing_iter); |
| 2214 | 2195 |
| 2215 // Verify that the packet re-serializes identically. | 2196 // Verify that the packet re-serializes identically. |
| 2216 QuicFrames frames; | 2197 QuicFrames frames; |
| 2217 frames.push_back(QuicFrame(frame)); | 2198 frames.push_back(QuicFrame(frame)); |
| 2218 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2199 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2219 ASSERT_TRUE(data != nullptr); | 2200 ASSERT_TRUE(data != nullptr); |
| 2220 | 2201 |
| 2221 test::CompareCharArraysWithHexError("constructed packet", | 2202 test::CompareCharArraysWithHexError("constructed packet", |
| 2222 data->data(), data->length(), | 2203 data->data(), data->length(), |
| 2223 AsChars(packet), arraysize(packet)); | 2204 AsChars(packet), arraysize(packet)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2250 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2231 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2251 | 2232 |
| 2252 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2233 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2253 ASSERT_TRUE(visitor_.header_.get()); | 2234 ASSERT_TRUE(visitor_.header_.get()); |
| 2254 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2235 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2255 | 2236 |
| 2256 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2237 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2257 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); | 2238 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); |
| 2258 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; | 2239 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; |
| 2259 EXPECT_EQ(0xAB, frame.entropy_hash); | 2240 EXPECT_EQ(0xAB, frame.entropy_hash); |
| 2260 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.least_unacked); | 2241 EXPECT_EQ(UINT64_C(0x0123456789AA0), frame.least_unacked); |
| 2261 | 2242 |
| 2262 const size_t kSentEntropyOffset = kQuicFrameTypeSize; | 2243 const size_t kSentEntropyOffset = kQuicFrameTypeSize; |
| 2263 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | 2244 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; |
| 2264 const size_t frame_size = 7; | 2245 const size_t frame_size = 7; |
| 2265 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2246 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
| 2266 string expected_error; | 2247 string expected_error; |
| 2267 if (i < kLeastUnackedOffset) { | 2248 if (i < kLeastUnackedOffset) { |
| 2268 expected_error = "Unable to read entropy hash for sent packets."; | 2249 expected_error = "Unable to read entropy hash for sent packets."; |
| 2269 } else { | 2250 } else { |
| 2270 expected_error = "Unable to read least unacked delta."; | 2251 expected_error = "Unable to read least unacked delta."; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2316 'n', | 2297 'n', |
| 2317 }; | 2298 }; |
| 2318 | 2299 |
| 2319 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2300 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2320 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2301 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2321 | 2302 |
| 2322 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2303 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2323 ASSERT_TRUE(visitor_.header_.get()); | 2304 ASSERT_TRUE(visitor_.header_.get()); |
| 2324 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2305 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2325 | 2306 |
| 2326 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); | 2307 EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); |
| 2327 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2308 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); |
| 2328 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); | 2309 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); |
| 2329 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), | 2310 EXPECT_EQ(UINT64_C(0x0807060504030201), |
| 2330 visitor_.rst_stream_frame_.byte_offset); | 2311 visitor_.rst_stream_frame_.byte_offset); |
| 2331 | 2312 |
| 2332 // Now test framing boundaries. | 2313 // Now test framing boundaries. |
| 2333 for (size_t i = kQuicFrameTypeSize; | 2314 for (size_t i = kQuicFrameTypeSize; |
| 2334 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) { | 2315 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) { |
| 2335 string expected_error; | 2316 string expected_error; |
| 2336 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2317 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2337 expected_error = "Unable to read stream_id."; | 2318 expected_error = "Unable to read stream_id."; |
| 2338 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2319 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2339 kQuicMaxStreamOffsetSize) { | 2320 kQuicMaxStreamOffsetSize) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2385 }; | 2366 }; |
| 2386 // clang-format on | 2367 // clang-format on |
| 2387 | 2368 |
| 2388 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2369 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2389 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2370 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2390 | 2371 |
| 2391 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2372 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2392 ASSERT_TRUE(visitor_.header_.get()); | 2373 ASSERT_TRUE(visitor_.header_.get()); |
| 2393 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2374 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2394 | 2375 |
| 2395 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); | 2376 EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); |
| 2396 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2377 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); |
| 2397 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), | 2378 EXPECT_EQ(UINT64_C(0x0807060504030201), |
| 2398 visitor_.rst_stream_frame_.byte_offset); | 2379 visitor_.rst_stream_frame_.byte_offset); |
| 2399 | 2380 |
| 2400 // Now test framing boundaries. | 2381 // Now test framing boundaries. |
| 2401 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); | 2382 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); |
| 2402 ++i) { | 2383 ++i) { |
| 2403 string expected_error; | 2384 string expected_error; |
| 2404 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2385 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2405 expected_error = "Unable to read stream_id."; | 2386 expected_error = "Unable to read stream_id."; |
| 2406 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2387 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2407 kQuicMaxStreamOffsetSize) { | 2388 kQuicMaxStreamOffsetSize) { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2504 'n', | 2485 'n', |
| 2505 }; | 2486 }; |
| 2506 | 2487 |
| 2507 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2488 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2508 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2489 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2509 | 2490 |
| 2510 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2491 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2511 ASSERT_TRUE(visitor_.header_.get()); | 2492 ASSERT_TRUE(visitor_.header_.get()); |
| 2512 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2493 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2513 | 2494 |
| 2514 EXPECT_EQ(GG_UINT64_C(0x01020304), | 2495 EXPECT_EQ(UINT64_C(0x01020304), visitor_.goaway_frame_.last_good_stream_id); |
| 2515 visitor_.goaway_frame_.last_good_stream_id); | |
| 2516 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 2496 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); |
| 2517 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 2497 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); |
| 2518 | 2498 |
| 2519 const size_t reason_size = arraysize("because I can") - 1; | 2499 const size_t reason_size = arraysize("because I can") - 1; |
| 2520 // Now test framing boundaries. | 2500 // Now test framing boundaries. |
| 2521 for (size_t i = kQuicFrameTypeSize; | 2501 for (size_t i = kQuicFrameTypeSize; |
| 2522 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 2502 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { |
| 2523 string expected_error; | 2503 string expected_error; |
| 2524 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2504 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
| 2525 expected_error = "Unable to read go away error code."; | 2505 expected_error = "Unable to read go away error code."; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2560 }; | 2540 }; |
| 2561 | 2541 |
| 2562 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2542 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2563 | 2543 |
| 2564 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2544 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2565 | 2545 |
| 2566 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2546 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2567 ASSERT_TRUE(visitor_.header_.get()); | 2547 ASSERT_TRUE(visitor_.header_.get()); |
| 2568 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2548 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2569 | 2549 |
| 2570 EXPECT_EQ(GG_UINT64_C(0x01020304), | 2550 EXPECT_EQ(UINT64_C(0x01020304), visitor_.window_update_frame_.stream_id); |
| 2571 visitor_.window_update_frame_.stream_id); | 2551 EXPECT_EQ(UINT64_C(0x0c0b0a0908070605), |
| 2572 EXPECT_EQ(GG_UINT64_C(0x0c0b0a0908070605), | |
| 2573 visitor_.window_update_frame_.byte_offset); | 2552 visitor_.window_update_frame_.byte_offset); |
| 2574 | 2553 |
| 2575 // Now test framing boundaries. | 2554 // Now test framing boundaries. |
| 2576 for (size_t i = kQuicFrameTypeSize; | 2555 for (size_t i = kQuicFrameTypeSize; |
| 2577 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2556 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
| 2578 string expected_error; | 2557 string expected_error; |
| 2579 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2558 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2580 expected_error = "Unable to read stream_id."; | 2559 expected_error = "Unable to read stream_id."; |
| 2581 } else { | 2560 } else { |
| 2582 expected_error = "Unable to read window byte_offset."; | 2561 expected_error = "Unable to read window byte_offset."; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2609 }; | 2588 }; |
| 2610 | 2589 |
| 2611 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2590 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2612 | 2591 |
| 2613 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2592 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2614 | 2593 |
| 2615 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2594 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2616 ASSERT_TRUE(visitor_.header_.get()); | 2595 ASSERT_TRUE(visitor_.header_.get()); |
| 2617 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2596 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2618 | 2597 |
| 2619 EXPECT_EQ(GG_UINT64_C(0x01020304), | 2598 EXPECT_EQ(UINT64_C(0x01020304), visitor_.blocked_frame_.stream_id); |
| 2620 visitor_.blocked_frame_.stream_id); | |
| 2621 | 2599 |
| 2622 // Now test framing boundaries. | 2600 // Now test framing boundaries. |
| 2623 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2601 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
| 2624 ++i) { | 2602 ++i) { |
| 2625 string expected_error = "Unable to read stream_id."; | 2603 string expected_error = "Unable to read stream_id."; |
| 2626 CheckProcessingFails( | 2604 CheckProcessingFails( |
| 2627 packet, | 2605 packet, |
| 2628 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2606 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2629 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2607 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 2630 expected_error, QUIC_INVALID_BLOCKED_DATA); | 2608 expected_error, QUIC_INVALID_BLOCKED_DATA); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2684 0x01, 0xEF, 0xCD, 0xAB, | 2662 0x01, 0xEF, 0xCD, 0xAB, |
| 2685 // rejected sequence number | 2663 // rejected sequence number |
| 2686 0xBC, 0x9A, 0x78, 0x56, | 2664 0xBC, 0x9A, 0x78, 0x56, |
| 2687 0x34, 0x12, 0x00, 0x00, | 2665 0x34, 0x12, 0x00, 0x00, |
| 2688 }; | 2666 }; |
| 2689 | 2667 |
| 2690 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2668 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2691 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2669 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2692 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2670 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2693 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2671 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
| 2694 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 2672 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 2695 visitor_.public_reset_packet_->public_header.connection_id); | 2673 visitor_.public_reset_packet_->public_header.connection_id); |
| 2696 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2674 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
| 2697 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2675 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
| 2698 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 2676 EXPECT_EQ(UINT64_C(0xABCDEF0123456789), |
| 2699 visitor_.public_reset_packet_->nonce_proof); | 2677 visitor_.public_reset_packet_->nonce_proof); |
| 2700 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 2678 EXPECT_EQ(UINT64_C(0x123456789ABC), |
| 2701 visitor_.public_reset_packet_->rejected_sequence_number); | 2679 visitor_.public_reset_packet_->rejected_sequence_number); |
| 2702 EXPECT_TRUE( | 2680 EXPECT_TRUE( |
| 2703 visitor_.public_reset_packet_->client_address.address().empty()); | 2681 visitor_.public_reset_packet_->client_address.address().empty()); |
| 2704 | 2682 |
| 2705 // Now test framing boundaries. | 2683 // Now test framing boundaries. |
| 2706 for (size_t i = 0; i < arraysize(packet); ++i) { | 2684 for (size_t i = 0; i < arraysize(packet); ++i) { |
| 2707 string expected_error; | 2685 string expected_error; |
| 2708 DVLOG(1) << "iteration: " << i; | 2686 DVLOG(1) << "iteration: " << i; |
| 2709 if (i < kConnectionIdOffset) { | 2687 if (i < kConnectionIdOffset) { |
| 2710 expected_error = "Unable to read public flags."; | 2688 expected_error = "Unable to read public flags."; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2788 // client address: 4.31.198.44:443 | 2766 // client address: 4.31.198.44:443 |
| 2789 0x02, 0x00, | 2767 0x02, 0x00, |
| 2790 0x04, 0x1F, 0xC6, 0x2C, | 2768 0x04, 0x1F, 0xC6, 0x2C, |
| 2791 0xBB, 0x01, | 2769 0xBB, 0x01, |
| 2792 }; | 2770 }; |
| 2793 | 2771 |
| 2794 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2772 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2795 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2773 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2796 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2774 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2797 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2775 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
| 2798 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 2776 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), |
| 2799 visitor_.public_reset_packet_->public_header.connection_id); | 2777 visitor_.public_reset_packet_->public_header.connection_id); |
| 2800 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2778 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
| 2801 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2779 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
| 2802 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 2780 EXPECT_EQ(UINT64_C(0xABCDEF0123456789), |
| 2803 visitor_.public_reset_packet_->nonce_proof); | 2781 visitor_.public_reset_packet_->nonce_proof); |
| 2804 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 2782 EXPECT_EQ(UINT64_C(0x123456789ABC), |
| 2805 visitor_.public_reset_packet_->rejected_sequence_number); | 2783 visitor_.public_reset_packet_->rejected_sequence_number); |
| 2806 EXPECT_EQ("4.31.198.44", | 2784 EXPECT_EQ("4.31.198.44", |
| 2807 IPAddressToString(visitor_.public_reset_packet_-> | 2785 IPAddressToString(visitor_.public_reset_packet_-> |
| 2808 client_address.address())); | 2786 client_address.address())); |
| 2809 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 2787 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); |
| 2810 | 2788 |
| 2811 // Now test framing boundaries. | 2789 // Now test framing boundaries. |
| 2812 for (size_t i = 0; i < arraysize(packet); ++i) { | 2790 for (size_t i = 0; i < arraysize(packet); ++i) { |
| 2813 string expected_error; | 2791 string expected_error; |
| 2814 DVLOG(1) << "iteration: " << i; | 2792 DVLOG(1) << "iteration: " << i; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2890 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2868 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2891 | 2869 |
| 2892 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2870 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2893 ASSERT_TRUE(visitor_.header_.get()); | 2871 ASSERT_TRUE(visitor_.header_.get()); |
| 2894 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2872 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2895 | 2873 |
| 2896 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2874 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2897 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 2875 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 2898 ASSERT_EQ(1, visitor_.fec_count_); | 2876 ASSERT_EQ(1, visitor_.fec_count_); |
| 2899 const QuicFecData& fec_data = *visitor_.fec_data_[0]; | 2877 const QuicFecData& fec_data = *visitor_.fec_data_[0]; |
| 2900 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); | 2878 EXPECT_EQ(UINT64_C(0x0123456789ABB), fec_data.fec_group); |
| 2901 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); | 2879 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); |
| 2902 } | 2880 } |
| 2903 | 2881 |
| 2904 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2882 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
| 2905 QuicPacketHeader header; | 2883 QuicPacketHeader header; |
| 2906 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 2884 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 2907 header.public_header.reset_flag = false; | 2885 header.public_header.reset_flag = false; |
| 2908 header.public_header.version_flag = false; | 2886 header.public_header.version_flag = false; |
| 2909 header.fec_flag = false; | 2887 header.fec_flag = false; |
| 2910 header.entropy_flag = false; | 2888 header.entropy_flag = false; |
| 2911 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2889 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 2912 header.fec_group = 0; | 2890 header.fec_group = 0; |
| 2913 | 2891 |
| 2914 QuicPaddingFrame padding_frame; | 2892 QuicPaddingFrame padding_frame; |
| 2915 | 2893 |
| 2916 QuicFrames frames; | 2894 QuicFrames frames; |
| 2917 frames.push_back(QuicFrame(&padding_frame)); | 2895 frames.push_back(QuicFrame(&padding_frame)); |
| 2918 | 2896 |
| 2919 unsigned char packet[kMaxPacketSize] = { | 2897 unsigned char packet[kMaxPacketSize] = { |
| 2920 // public flags (8 byte connection_id) | 2898 // public flags (8 byte connection_id) |
| 2921 0x3C, | 2899 0x3C, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2942 ASSERT_TRUE(data != nullptr); | 2920 ASSERT_TRUE(data != nullptr); |
| 2943 | 2921 |
| 2944 test::CompareCharArraysWithHexError("constructed packet", | 2922 test::CompareCharArraysWithHexError("constructed packet", |
| 2945 data->data(), data->length(), | 2923 data->data(), data->length(), |
| 2946 AsChars(packet), | 2924 AsChars(packet), |
| 2947 arraysize(packet)); | 2925 arraysize(packet)); |
| 2948 } | 2926 } |
| 2949 | 2927 |
| 2950 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 2928 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
| 2951 QuicPacketHeader header; | 2929 QuicPacketHeader header; |
| 2952 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 2930 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 2953 header.public_header.reset_flag = false; | 2931 header.public_header.reset_flag = false; |
| 2954 header.public_header.version_flag = false; | 2932 header.public_header.version_flag = false; |
| 2955 header.fec_flag = false; | 2933 header.fec_flag = false; |
| 2956 header.entropy_flag = false; | 2934 header.entropy_flag = false; |
| 2957 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; | 2935 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; |
| 2958 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2936 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 2959 header.fec_group = 0; | 2937 header.fec_group = 0; |
| 2960 | 2938 |
| 2961 QuicPaddingFrame padding_frame; | 2939 QuicPaddingFrame padding_frame; |
| 2962 | 2940 |
| 2963 QuicFrames frames; | 2941 QuicFrames frames; |
| 2964 frames.push_back(QuicFrame(&padding_frame)); | 2942 frames.push_back(QuicFrame(&padding_frame)); |
| 2965 | 2943 |
| 2966 unsigned char packet[kMaxPacketSize] = { | 2944 unsigned char packet[kMaxPacketSize] = { |
| 2967 // public flags (8 byte connection_id and 4 byte sequence number) | 2945 // public flags (8 byte connection_id and 4 byte sequence number) |
| 2968 0x2C, | 2946 0x2C, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2988 ASSERT_TRUE(data != nullptr); | 2966 ASSERT_TRUE(data != nullptr); |
| 2989 | 2967 |
| 2990 test::CompareCharArraysWithHexError("constructed packet", | 2968 test::CompareCharArraysWithHexError("constructed packet", |
| 2991 data->data(), data->length(), | 2969 data->data(), data->length(), |
| 2992 AsChars(packet), | 2970 AsChars(packet), |
| 2993 arraysize(packet)); | 2971 arraysize(packet)); |
| 2994 } | 2972 } |
| 2995 | 2973 |
| 2996 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 2974 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
| 2997 QuicPacketHeader header; | 2975 QuicPacketHeader header; |
| 2998 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 2976 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 2999 header.public_header.reset_flag = false; | 2977 header.public_header.reset_flag = false; |
| 3000 header.public_header.version_flag = false; | 2978 header.public_header.version_flag = false; |
| 3001 header.fec_flag = false; | 2979 header.fec_flag = false; |
| 3002 header.entropy_flag = false; | 2980 header.entropy_flag = false; |
| 3003 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; | 2981 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; |
| 3004 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2982 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3005 header.fec_group = 0; | 2983 header.fec_group = 0; |
| 3006 | 2984 |
| 3007 QuicPaddingFrame padding_frame; | 2985 QuicPaddingFrame padding_frame; |
| 3008 | 2986 |
| 3009 QuicFrames frames; | 2987 QuicFrames frames; |
| 3010 frames.push_back(QuicFrame(&padding_frame)); | 2988 frames.push_back(QuicFrame(&padding_frame)); |
| 3011 | 2989 |
| 3012 unsigned char packet[kMaxPacketSize] = { | 2990 unsigned char packet[kMaxPacketSize] = { |
| 3013 // public flags (8 byte connection_id and 2 byte sequence number) | 2991 // public flags (8 byte connection_id and 2 byte sequence number) |
| 3014 0x1C, | 2992 0x1C, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3034 ASSERT_TRUE(data != nullptr); | 3012 ASSERT_TRUE(data != nullptr); |
| 3035 | 3013 |
| 3036 test::CompareCharArraysWithHexError("constructed packet", | 3014 test::CompareCharArraysWithHexError("constructed packet", |
| 3037 data->data(), data->length(), | 3015 data->data(), data->length(), |
| 3038 AsChars(packet), | 3016 AsChars(packet), |
| 3039 arraysize(packet)); | 3017 arraysize(packet)); |
| 3040 } | 3018 } |
| 3041 | 3019 |
| 3042 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 3020 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
| 3043 QuicPacketHeader header; | 3021 QuicPacketHeader header; |
| 3044 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3022 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3045 header.public_header.reset_flag = false; | 3023 header.public_header.reset_flag = false; |
| 3046 header.public_header.version_flag = false; | 3024 header.public_header.version_flag = false; |
| 3047 header.fec_flag = false; | 3025 header.fec_flag = false; |
| 3048 header.entropy_flag = false; | 3026 header.entropy_flag = false; |
| 3049 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 3027 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 3050 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3028 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3051 header.fec_group = 0; | 3029 header.fec_group = 0; |
| 3052 | 3030 |
| 3053 QuicPaddingFrame padding_frame; | 3031 QuicPaddingFrame padding_frame; |
| 3054 | 3032 |
| 3055 QuicFrames frames; | 3033 QuicFrames frames; |
| 3056 frames.push_back(QuicFrame(&padding_frame)); | 3034 frames.push_back(QuicFrame(&padding_frame)); |
| 3057 | 3035 |
| 3058 unsigned char packet[kMaxPacketSize] = { | 3036 unsigned char packet[kMaxPacketSize] = { |
| 3059 // public flags (8 byte connection_id and 1 byte sequence number) | 3037 // public flags (8 byte connection_id and 1 byte sequence number) |
| 3060 0x0C, | 3038 0x0C, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3080 ASSERT_TRUE(data != nullptr); | 3058 ASSERT_TRUE(data != nullptr); |
| 3081 | 3059 |
| 3082 test::CompareCharArraysWithHexError("constructed packet", | 3060 test::CompareCharArraysWithHexError("constructed packet", |
| 3083 data->data(), data->length(), | 3061 data->data(), data->length(), |
| 3084 AsChars(packet), | 3062 AsChars(packet), |
| 3085 arraysize(packet)); | 3063 arraysize(packet)); |
| 3086 } | 3064 } |
| 3087 | 3065 |
| 3088 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 3066 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
| 3089 QuicPacketHeader header; | 3067 QuicPacketHeader header; |
| 3090 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3068 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3091 header.public_header.reset_flag = false; | 3069 header.public_header.reset_flag = false; |
| 3092 header.public_header.version_flag = false; | 3070 header.public_header.version_flag = false; |
| 3093 header.fec_flag = false; | 3071 header.fec_flag = false; |
| 3094 header.entropy_flag = true; | 3072 header.entropy_flag = true; |
| 3095 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 3073 header.packet_sequence_number = UINT64_C(0x77123456789ABC); |
| 3096 header.fec_group = 0; | 3074 header.fec_group = 0; |
| 3097 | 3075 |
| 3098 QuicStreamFrame stream_frame; | 3076 QuicStreamFrame stream_frame; |
| 3099 stream_frame.stream_id = 0x01020304; | 3077 stream_frame.stream_id = 0x01020304; |
| 3100 stream_frame.fin = true; | 3078 stream_frame.fin = true; |
| 3101 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 3079 stream_frame.offset = UINT64_C(0xBA98FEDC32107654); |
| 3102 stream_frame.data = MakeIOVector("hello world!"); | 3080 stream_frame.data = MakeIOVector("hello world!"); |
| 3103 | 3081 |
| 3104 QuicFrames frames; | 3082 QuicFrames frames; |
| 3105 frames.push_back(QuicFrame(&stream_frame)); | 3083 frames.push_back(QuicFrame(&stream_frame)); |
| 3106 | 3084 |
| 3107 unsigned char packet[] = { | 3085 unsigned char packet[] = { |
| 3108 // public flags (8 byte connection_id) | 3086 // public flags (8 byte connection_id) |
| 3109 0x3C, | 3087 0x3C, |
| 3110 // connection_id | 3088 // connection_id |
| 3111 0x10, 0x32, 0x54, 0x76, | 3089 0x10, 0x32, 0x54, 0x76, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3132 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3110 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3133 ASSERT_TRUE(data != nullptr); | 3111 ASSERT_TRUE(data != nullptr); |
| 3134 | 3112 |
| 3135 test::CompareCharArraysWithHexError("constructed packet", | 3113 test::CompareCharArraysWithHexError("constructed packet", |
| 3136 data->data(), data->length(), | 3114 data->data(), data->length(), |
| 3137 AsChars(packet), arraysize(packet)); | 3115 AsChars(packet), arraysize(packet)); |
| 3138 } | 3116 } |
| 3139 | 3117 |
| 3140 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | 3118 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { |
| 3141 QuicPacketHeader header; | 3119 QuicPacketHeader header; |
| 3142 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3120 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3143 header.public_header.reset_flag = false; | 3121 header.public_header.reset_flag = false; |
| 3144 header.public_header.version_flag = false; | 3122 header.public_header.version_flag = false; |
| 3145 header.fec_flag = false; | 3123 header.fec_flag = false; |
| 3146 header.entropy_flag = true; | 3124 header.entropy_flag = true; |
| 3147 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 3125 header.packet_sequence_number = UINT64_C(0x77123456789ABC); |
| 3148 header.is_in_fec_group = IN_FEC_GROUP; | 3126 header.is_in_fec_group = IN_FEC_GROUP; |
| 3149 header.fec_group = GG_UINT64_C(0x77123456789ABC); | 3127 header.fec_group = UINT64_C(0x77123456789ABC); |
| 3150 | 3128 |
| 3151 QuicStreamFrame stream_frame; | 3129 QuicStreamFrame stream_frame; |
| 3152 stream_frame.stream_id = 0x01020304; | 3130 stream_frame.stream_id = 0x01020304; |
| 3153 stream_frame.fin = true; | 3131 stream_frame.fin = true; |
| 3154 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 3132 stream_frame.offset = UINT64_C(0xBA98FEDC32107654); |
| 3155 stream_frame.data = MakeIOVector("hello world!"); | 3133 stream_frame.data = MakeIOVector("hello world!"); |
| 3156 | 3134 |
| 3157 QuicFrames frames; | 3135 QuicFrames frames; |
| 3158 frames.push_back(QuicFrame(&stream_frame)); | 3136 frames.push_back(QuicFrame(&stream_frame)); |
| 3159 unsigned char packet[] = { | 3137 unsigned char packet[] = { |
| 3160 // public flags (8 byte connection_id) | 3138 // public flags (8 byte connection_id) |
| 3161 0x3C, | 3139 0x3C, |
| 3162 // connection_id | 3140 // connection_id |
| 3163 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3141 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3164 // packet sequence number | 3142 // packet sequence number |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3160 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3183 ASSERT_TRUE(data != nullptr); | 3161 ASSERT_TRUE(data != nullptr); |
| 3184 | 3162 |
| 3185 test::CompareCharArraysWithHexError("constructed packet", | 3163 test::CompareCharArraysWithHexError("constructed packet", |
| 3186 data->data(), data->length(), | 3164 data->data(), data->length(), |
| 3187 AsChars(packet), arraysize(packet)); | 3165 AsChars(packet), arraysize(packet)); |
| 3188 } | 3166 } |
| 3189 | 3167 |
| 3190 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3168 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
| 3191 QuicPacketHeader header; | 3169 QuicPacketHeader header; |
| 3192 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3170 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3193 header.public_header.reset_flag = false; | 3171 header.public_header.reset_flag = false; |
| 3194 header.public_header.version_flag = true; | 3172 header.public_header.version_flag = true; |
| 3195 header.fec_flag = false; | 3173 header.fec_flag = false; |
| 3196 header.entropy_flag = true; | 3174 header.entropy_flag = true; |
| 3197 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 3175 header.packet_sequence_number = UINT64_C(0x77123456789ABC); |
| 3198 header.fec_group = 0; | 3176 header.fec_group = 0; |
| 3199 | 3177 |
| 3200 QuicStreamFrame stream_frame; | 3178 QuicStreamFrame stream_frame; |
| 3201 stream_frame.stream_id = 0x01020304; | 3179 stream_frame.stream_id = 0x01020304; |
| 3202 stream_frame.fin = true; | 3180 stream_frame.fin = true; |
| 3203 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 3181 stream_frame.offset = UINT64_C(0xBA98FEDC32107654); |
| 3204 stream_frame.data = MakeIOVector("hello world!"); | 3182 stream_frame.data = MakeIOVector("hello world!"); |
| 3205 | 3183 |
| 3206 QuicFrames frames; | 3184 QuicFrames frames; |
| 3207 frames.push_back(QuicFrame(&stream_frame)); | 3185 frames.push_back(QuicFrame(&stream_frame)); |
| 3208 | 3186 |
| 3209 unsigned char packet[] = { | 3187 unsigned char packet[] = { |
| 3210 // public flags (version, 8 byte connection_id) | 3188 // public flags (version, 8 byte connection_id) |
| 3211 0x3D, | 3189 0x3D, |
| 3212 // connection_id | 3190 // connection_id |
| 3213 0x10, | 3191 0x10, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3268 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3246 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3269 ASSERT_TRUE(data != nullptr); | 3247 ASSERT_TRUE(data != nullptr); |
| 3270 | 3248 |
| 3271 test::CompareCharArraysWithHexError("constructed packet", | 3249 test::CompareCharArraysWithHexError("constructed packet", |
| 3272 data->data(), data->length(), | 3250 data->data(), data->length(), |
| 3273 AsChars(packet), arraysize(packet)); | 3251 AsChars(packet), arraysize(packet)); |
| 3274 } | 3252 } |
| 3275 | 3253 |
| 3276 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3254 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
| 3277 QuicPacketPublicHeader header; | 3255 QuicPacketPublicHeader header; |
| 3278 header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3256 header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3279 header.reset_flag = false; | 3257 header.reset_flag = false; |
| 3280 header.version_flag = true; | 3258 header.version_flag = true; |
| 3281 | 3259 |
| 3282 unsigned char packet[] = { | 3260 unsigned char packet[] = { |
| 3283 // public flags (version, 8 byte connection_id) | 3261 // public flags (version, 8 byte connection_id) |
| 3284 0x0D, | 3262 0x0D, |
| 3285 // connection_id | 3263 // connection_id |
| 3286 0x10, | 3264 0x10, |
| 3287 0x32, | 3265 0x32, |
| 3288 0x54, | 3266 0x54, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3303 scoped_ptr<QuicEncryptedPacket> data( | 3281 scoped_ptr<QuicEncryptedPacket> data( |
| 3304 framer_.BuildVersionNegotiationPacket(header, versions)); | 3282 framer_.BuildVersionNegotiationPacket(header, versions)); |
| 3305 | 3283 |
| 3306 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3284 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3307 data->length(), AsChars(packet), | 3285 data->length(), AsChars(packet), |
| 3308 arraysize(packet)); | 3286 arraysize(packet)); |
| 3309 } | 3287 } |
| 3310 | 3288 |
| 3311 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 3289 TEST_P(QuicFramerTest, BuildAckFramePacket) { |
| 3312 QuicPacketHeader header; | 3290 QuicPacketHeader header; |
| 3313 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3291 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3314 header.public_header.reset_flag = false; | 3292 header.public_header.reset_flag = false; |
| 3315 header.public_header.version_flag = false; | 3293 header.public_header.version_flag = false; |
| 3316 header.fec_flag = false; | 3294 header.fec_flag = false; |
| 3317 header.entropy_flag = true; | 3295 header.entropy_flag = true; |
| 3318 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3296 header.packet_sequence_number = UINT64_C(0x770123456789AA8); |
| 3319 header.fec_group = 0; | 3297 header.fec_group = 0; |
| 3320 | 3298 |
| 3321 QuicAckFrame ack_frame; | 3299 QuicAckFrame ack_frame; |
| 3322 ack_frame.entropy_hash = 0x43; | 3300 ack_frame.entropy_hash = 0x43; |
| 3323 ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF); | 3301 ack_frame.largest_observed = UINT64_C(0x770123456789ABF); |
| 3324 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3302 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3325 ack_frame.missing_packets.insert(GG_UINT64_C(0x770123456789ABE)); | 3303 ack_frame.missing_packets.insert(UINT64_C(0x770123456789ABE)); |
| 3326 | 3304 |
| 3327 QuicFrames frames; | 3305 QuicFrames frames; |
| 3328 frames.push_back(QuicFrame(&ack_frame)); | 3306 frames.push_back(QuicFrame(&ack_frame)); |
| 3329 | 3307 |
| 3330 unsigned char packet[] = { | 3308 unsigned char packet[] = { |
| 3331 // public flags (8 byte connection_id) | 3309 // public flags (8 byte connection_id) |
| 3332 0x3C, | 3310 0x3C, |
| 3333 // connection_id | 3311 // connection_id |
| 3334 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3312 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3335 // packet sequence number | 3313 // packet sequence number |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3364 test::CompareCharArraysWithHexError("constructed packet", | 3342 test::CompareCharArraysWithHexError("constructed packet", |
| 3365 data->data(), data->length(), | 3343 data->data(), data->length(), |
| 3366 AsChars(packet), arraysize(packet)); | 3344 AsChars(packet), arraysize(packet)); |
| 3367 } | 3345 } |
| 3368 | 3346 |
| 3369 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 3347 // TODO(jri): Add test for tuncated packets in which the original ack frame had |
| 3370 // revived packets. (In both the large and small packet cases below). | 3348 // revived packets. (In both the large and small packet cases below). |
| 3371 | 3349 |
| 3372 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 3350 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
| 3373 QuicPacketHeader header; | 3351 QuicPacketHeader header; |
| 3374 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3352 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3375 header.public_header.reset_flag = false; | 3353 header.public_header.reset_flag = false; |
| 3376 header.public_header.version_flag = false; | 3354 header.public_header.version_flag = false; |
| 3377 header.fec_flag = false; | 3355 header.fec_flag = false; |
| 3378 header.entropy_flag = true; | 3356 header.entropy_flag = true; |
| 3379 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3357 header.packet_sequence_number = UINT64_C(0x770123456789AA8); |
| 3380 header.fec_group = 0; | 3358 header.fec_group = 0; |
| 3381 | 3359 |
| 3382 QuicAckFrame ack_frame; | 3360 QuicAckFrame ack_frame; |
| 3383 // This entropy hash is different from what shows up in the packet below, | 3361 // This entropy hash is different from what shows up in the packet below, |
| 3384 // since entropy is recomputed by the framer on ack truncation (by | 3362 // since entropy is recomputed by the framer on ack truncation (by |
| 3385 // TestEntropyCalculator for this test.) | 3363 // TestEntropyCalculator for this test.) |
| 3386 ack_frame.entropy_hash = 0x43; | 3364 ack_frame.entropy_hash = 0x43; |
| 3387 ack_frame.largest_observed = 2 * 300; | 3365 ack_frame.largest_observed = 2 * 300; |
| 3388 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3366 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3389 for (size_t i = 1; i < 2 * 300; i += 2) { | 3367 for (size_t i = 1; i < 2 * 300; i += 2) { |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3473 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3451 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3474 ASSERT_TRUE(data != nullptr); | 3452 ASSERT_TRUE(data != nullptr); |
| 3475 | 3453 |
| 3476 test::CompareCharArraysWithHexError("constructed packet", | 3454 test::CompareCharArraysWithHexError("constructed packet", |
| 3477 data->data(), data->length(), | 3455 data->data(), data->length(), |
| 3478 AsChars(packet), arraysize(packet)); | 3456 AsChars(packet), arraysize(packet)); |
| 3479 } | 3457 } |
| 3480 | 3458 |
| 3481 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3459 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
| 3482 QuicPacketHeader header; | 3460 QuicPacketHeader header; |
| 3483 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3461 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3484 header.public_header.reset_flag = false; | 3462 header.public_header.reset_flag = false; |
| 3485 header.public_header.version_flag = false; | 3463 header.public_header.version_flag = false; |
| 3486 header.fec_flag = false; | 3464 header.fec_flag = false; |
| 3487 header.entropy_flag = true; | 3465 header.entropy_flag = true; |
| 3488 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3466 header.packet_sequence_number = UINT64_C(0x770123456789AA8); |
| 3489 header.fec_group = 0; | 3467 header.fec_group = 0; |
| 3490 | 3468 |
| 3491 QuicAckFrame ack_frame; | 3469 QuicAckFrame ack_frame; |
| 3492 // This entropy hash is different from what shows up in the packet below, | 3470 // This entropy hash is different from what shows up in the packet below, |
| 3493 // since entropy is recomputed by the framer on ack truncation (by | 3471 // since entropy is recomputed by the framer on ack truncation (by |
| 3494 // TestEntropyCalculator for this test.) | 3472 // TestEntropyCalculator for this test.) |
| 3495 ack_frame.entropy_hash = 0x43; | 3473 ack_frame.entropy_hash = 0x43; |
| 3496 ack_frame.largest_observed = 2 * 300; | 3474 ack_frame.largest_observed = 2 * 300; |
| 3497 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3475 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3498 for (size_t i = 1; i < 2 * 300; i += 2) { | 3476 for (size_t i = 1; i < 2 * 300; i += 2) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3536 ASSERT_TRUE(data != nullptr); | 3514 ASSERT_TRUE(data != nullptr); |
| 3537 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 3515 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. |
| 3538 EXPECT_EQ(36u, data->length()); | 3516 EXPECT_EQ(36u, data->length()); |
| 3539 test::CompareCharArraysWithHexError("constructed packet", | 3517 test::CompareCharArraysWithHexError("constructed packet", |
| 3540 data->data(), data->length(), | 3518 data->data(), data->length(), |
| 3541 AsChars(packet), arraysize(packet)); | 3519 AsChars(packet), arraysize(packet)); |
| 3542 } | 3520 } |
| 3543 | 3521 |
| 3544 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3522 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
| 3545 QuicPacketHeader header; | 3523 QuicPacketHeader header; |
| 3546 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3524 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3547 header.public_header.reset_flag = false; | 3525 header.public_header.reset_flag = false; |
| 3548 header.public_header.version_flag = false; | 3526 header.public_header.version_flag = false; |
| 3549 header.fec_flag = false; | 3527 header.fec_flag = false; |
| 3550 header.entropy_flag = true; | 3528 header.entropy_flag = true; |
| 3551 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3529 header.packet_sequence_number = UINT64_C(0x770123456789AA8); |
| 3552 header.fec_group = 0; | 3530 header.fec_group = 0; |
| 3553 | 3531 |
| 3554 QuicStopWaitingFrame stop_waiting_frame; | 3532 QuicStopWaitingFrame stop_waiting_frame; |
| 3555 stop_waiting_frame.entropy_hash = 0x14; | 3533 stop_waiting_frame.entropy_hash = 0x14; |
| 3556 stop_waiting_frame.least_unacked = GG_UINT64_C(0x770123456789AA0); | 3534 stop_waiting_frame.least_unacked = UINT64_C(0x770123456789AA0); |
| 3557 | 3535 |
| 3558 QuicFrames frames; | 3536 QuicFrames frames; |
| 3559 frames.push_back(QuicFrame(&stop_waiting_frame)); | 3537 frames.push_back(QuicFrame(&stop_waiting_frame)); |
| 3560 | 3538 |
| 3561 unsigned char packet[] = { | 3539 unsigned char packet[] = { |
| 3562 // public flags (8 byte connection_id) | 3540 // public flags (8 byte connection_id) |
| 3563 0x3C, | 3541 0x3C, |
| 3564 // connection_id | 3542 // connection_id |
| 3565 0x10, 0x32, 0x54, 0x76, | 3543 0x10, 0x32, 0x54, 0x76, |
| 3566 0x98, 0xBA, 0xDC, 0xFE, | 3544 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3587 AsChars(packet), arraysize(packet)); | 3565 AsChars(packet), arraysize(packet)); |
| 3588 } | 3566 } |
| 3589 | 3567 |
| 3590 TEST_P(QuicFramerTest, BuildRstFramePacketQuicVersion24) { | 3568 TEST_P(QuicFramerTest, BuildRstFramePacketQuicVersion24) { |
| 3591 if (version_ > QUIC_VERSION_24) { | 3569 if (version_ > QUIC_VERSION_24) { |
| 3592 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. | 3570 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. |
| 3593 return; | 3571 return; |
| 3594 } | 3572 } |
| 3595 | 3573 |
| 3596 QuicPacketHeader header; | 3574 QuicPacketHeader header; |
| 3597 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3575 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3598 header.public_header.reset_flag = false; | 3576 header.public_header.reset_flag = false; |
| 3599 header.public_header.version_flag = false; | 3577 header.public_header.version_flag = false; |
| 3600 header.fec_flag = false; | 3578 header.fec_flag = false; |
| 3601 header.entropy_flag = false; | 3579 header.entropy_flag = false; |
| 3602 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3580 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3603 header.fec_group = 0; | 3581 header.fec_group = 0; |
| 3604 | 3582 |
| 3605 QuicRstStreamFrame rst_frame; | 3583 QuicRstStreamFrame rst_frame; |
| 3606 rst_frame.stream_id = 0x01020304; | 3584 rst_frame.stream_id = 0x01020304; |
| 3607 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 3585 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
| 3608 rst_frame.error_details = "because I can"; | 3586 rst_frame.error_details = "because I can"; |
| 3609 rst_frame.byte_offset = 0x0807060504030201; | 3587 rst_frame.byte_offset = 0x0807060504030201; |
| 3610 | 3588 |
| 3611 unsigned char packet[] = { | 3589 unsigned char packet[] = { |
| 3612 // public flags (8 byte connection_id) | 3590 // public flags (8 byte connection_id) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3649 arraysize(packet)); | 3627 arraysize(packet)); |
| 3650 } | 3628 } |
| 3651 | 3629 |
| 3652 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 3630 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
| 3653 if (version_ <= QUIC_VERSION_24) { | 3631 if (version_ <= QUIC_VERSION_24) { |
| 3654 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. | 3632 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. |
| 3655 return; | 3633 return; |
| 3656 } | 3634 } |
| 3657 | 3635 |
| 3658 QuicPacketHeader header; | 3636 QuicPacketHeader header; |
| 3659 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3637 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3660 header.public_header.reset_flag = false; | 3638 header.public_header.reset_flag = false; |
| 3661 header.public_header.version_flag = false; | 3639 header.public_header.version_flag = false; |
| 3662 header.fec_flag = false; | 3640 header.fec_flag = false; |
| 3663 header.entropy_flag = false; | 3641 header.entropy_flag = false; |
| 3664 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3642 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3665 header.fec_group = 0; | 3643 header.fec_group = 0; |
| 3666 | 3644 |
| 3667 QuicRstStreamFrame rst_frame; | 3645 QuicRstStreamFrame rst_frame; |
| 3668 rst_frame.stream_id = 0x01020304; | 3646 rst_frame.stream_id = 0x01020304; |
| 3669 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 3647 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
| 3670 rst_frame.byte_offset = 0x0807060504030201; | 3648 rst_frame.byte_offset = 0x0807060504030201; |
| 3671 | 3649 |
| 3672 // clang-format off | 3650 // clang-format off |
| 3673 unsigned char packet[] = { | 3651 unsigned char packet[] = { |
| 3674 // public flags (8 byte connection_id) | 3652 // public flags (8 byte connection_id) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3700 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3678 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3701 ASSERT_TRUE(data != nullptr); | 3679 ASSERT_TRUE(data != nullptr); |
| 3702 | 3680 |
| 3703 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3681 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3704 data->length(), AsChars(packet), | 3682 data->length(), AsChars(packet), |
| 3705 arraysize(packet)); | 3683 arraysize(packet)); |
| 3706 } | 3684 } |
| 3707 | 3685 |
| 3708 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 3686 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
| 3709 QuicPacketHeader header; | 3687 QuicPacketHeader header; |
| 3710 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3688 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3711 header.public_header.reset_flag = false; | 3689 header.public_header.reset_flag = false; |
| 3712 header.public_header.version_flag = false; | 3690 header.public_header.version_flag = false; |
| 3713 header.fec_flag = false; | 3691 header.fec_flag = false; |
| 3714 header.entropy_flag = true; | 3692 header.entropy_flag = true; |
| 3715 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3693 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3716 header.fec_group = 0; | 3694 header.fec_group = 0; |
| 3717 | 3695 |
| 3718 QuicConnectionCloseFrame close_frame; | 3696 QuicConnectionCloseFrame close_frame; |
| 3719 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3697 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
| 3720 close_frame.error_details = "because I can"; | 3698 close_frame.error_details = "because I can"; |
| 3721 | 3699 |
| 3722 QuicFrames frames; | 3700 QuicFrames frames; |
| 3723 frames.push_back(QuicFrame(&close_frame)); | 3701 frames.push_back(QuicFrame(&close_frame)); |
| 3724 | 3702 |
| 3725 unsigned char packet[] = { | 3703 unsigned char packet[] = { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3750 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3728 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3751 ASSERT_TRUE(data != nullptr); | 3729 ASSERT_TRUE(data != nullptr); |
| 3752 | 3730 |
| 3753 test::CompareCharArraysWithHexError("constructed packet", | 3731 test::CompareCharArraysWithHexError("constructed packet", |
| 3754 data->data(), data->length(), | 3732 data->data(), data->length(), |
| 3755 AsChars(packet), arraysize(packet)); | 3733 AsChars(packet), arraysize(packet)); |
| 3756 } | 3734 } |
| 3757 | 3735 |
| 3758 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 3736 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
| 3759 QuicPacketHeader header; | 3737 QuicPacketHeader header; |
| 3760 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3738 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3761 header.public_header.reset_flag = false; | 3739 header.public_header.reset_flag = false; |
| 3762 header.public_header.version_flag = false; | 3740 header.public_header.version_flag = false; |
| 3763 header.fec_flag = false; | 3741 header.fec_flag = false; |
| 3764 header.entropy_flag = true; | 3742 header.entropy_flag = true; |
| 3765 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3743 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3766 header.fec_group = 0; | 3744 header.fec_group = 0; |
| 3767 | 3745 |
| 3768 QuicGoAwayFrame goaway_frame; | 3746 QuicGoAwayFrame goaway_frame; |
| 3769 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3747 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
| 3770 goaway_frame.last_good_stream_id = 0x01020304; | 3748 goaway_frame.last_good_stream_id = 0x01020304; |
| 3771 goaway_frame.reason_phrase = "because I can"; | 3749 goaway_frame.reason_phrase = "because I can"; |
| 3772 | 3750 |
| 3773 QuicFrames frames; | 3751 QuicFrames frames; |
| 3774 frames.push_back(QuicFrame(&goaway_frame)); | 3752 frames.push_back(QuicFrame(&goaway_frame)); |
| 3775 | 3753 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3803 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3781 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3804 ASSERT_TRUE(data != nullptr); | 3782 ASSERT_TRUE(data != nullptr); |
| 3805 | 3783 |
| 3806 test::CompareCharArraysWithHexError("constructed packet", | 3784 test::CompareCharArraysWithHexError("constructed packet", |
| 3807 data->data(), data->length(), | 3785 data->data(), data->length(), |
| 3808 AsChars(packet), arraysize(packet)); | 3786 AsChars(packet), arraysize(packet)); |
| 3809 } | 3787 } |
| 3810 | 3788 |
| 3811 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 3789 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
| 3812 QuicPacketHeader header; | 3790 QuicPacketHeader header; |
| 3813 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3791 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3814 header.public_header.reset_flag = false; | 3792 header.public_header.reset_flag = false; |
| 3815 header.public_header.version_flag = false; | 3793 header.public_header.version_flag = false; |
| 3816 header.fec_flag = false; | 3794 header.fec_flag = false; |
| 3817 header.entropy_flag = true; | 3795 header.entropy_flag = true; |
| 3818 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3796 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3819 header.fec_group = 0; | 3797 header.fec_group = 0; |
| 3820 | 3798 |
| 3821 QuicWindowUpdateFrame window_update_frame; | 3799 QuicWindowUpdateFrame window_update_frame; |
| 3822 window_update_frame.stream_id = 0x01020304; | 3800 window_update_frame.stream_id = 0x01020304; |
| 3823 window_update_frame.byte_offset = 0x1122334455667788; | 3801 window_update_frame.byte_offset = 0x1122334455667788; |
| 3824 | 3802 |
| 3825 QuicFrames frames; | 3803 QuicFrames frames; |
| 3826 frames.push_back(QuicFrame(&window_update_frame)); | 3804 frames.push_back(QuicFrame(&window_update_frame)); |
| 3827 | 3805 |
| 3828 unsigned char packet[] = { | 3806 unsigned char packet[] = { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3849 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3827 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3850 ASSERT_TRUE(data != nullptr); | 3828 ASSERT_TRUE(data != nullptr); |
| 3851 | 3829 |
| 3852 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3830 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3853 data->length(), AsChars(packet), | 3831 data->length(), AsChars(packet), |
| 3854 arraysize(packet)); | 3832 arraysize(packet)); |
| 3855 } | 3833 } |
| 3856 | 3834 |
| 3857 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 3835 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
| 3858 QuicPacketHeader header; | 3836 QuicPacketHeader header; |
| 3859 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3837 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3860 header.public_header.reset_flag = false; | 3838 header.public_header.reset_flag = false; |
| 3861 header.public_header.version_flag = false; | 3839 header.public_header.version_flag = false; |
| 3862 header.fec_flag = false; | 3840 header.fec_flag = false; |
| 3863 header.entropy_flag = true; | 3841 header.entropy_flag = true; |
| 3864 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3842 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3865 header.fec_group = 0; | 3843 header.fec_group = 0; |
| 3866 | 3844 |
| 3867 QuicBlockedFrame blocked_frame; | 3845 QuicBlockedFrame blocked_frame; |
| 3868 blocked_frame.stream_id = 0x01020304; | 3846 blocked_frame.stream_id = 0x01020304; |
| 3869 | 3847 |
| 3870 QuicFrames frames; | 3848 QuicFrames frames; |
| 3871 frames.push_back(QuicFrame(&blocked_frame)); | 3849 frames.push_back(QuicFrame(&blocked_frame)); |
| 3872 | 3850 |
| 3873 unsigned char packet[] = { | 3851 unsigned char packet[] = { |
| 3874 // public flags (8 byte connection_id) | 3852 // public flags (8 byte connection_id) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3891 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3869 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3892 ASSERT_TRUE(data != nullptr); | 3870 ASSERT_TRUE(data != nullptr); |
| 3893 | 3871 |
| 3894 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3872 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3895 data->length(), AsChars(packet), | 3873 data->length(), AsChars(packet), |
| 3896 arraysize(packet)); | 3874 arraysize(packet)); |
| 3897 } | 3875 } |
| 3898 | 3876 |
| 3899 TEST_P(QuicFramerTest, BuildPingPacket) { | 3877 TEST_P(QuicFramerTest, BuildPingPacket) { |
| 3900 QuicPacketHeader header; | 3878 QuicPacketHeader header; |
| 3901 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3879 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3902 header.public_header.reset_flag = false; | 3880 header.public_header.reset_flag = false; |
| 3903 header.public_header.version_flag = false; | 3881 header.public_header.version_flag = false; |
| 3904 header.fec_flag = false; | 3882 header.fec_flag = false; |
| 3905 header.entropy_flag = true; | 3883 header.entropy_flag = true; |
| 3906 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3884 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 3907 header.fec_group = 0; | 3885 header.fec_group = 0; |
| 3908 | 3886 |
| 3909 QuicPingFrame ping_frame; | 3887 QuicPingFrame ping_frame; |
| 3910 | 3888 |
| 3911 QuicFrames frames; | 3889 QuicFrames frames; |
| 3912 frames.push_back(QuicFrame(&ping_frame)); | 3890 frames.push_back(QuicFrame(&ping_frame)); |
| 3913 | 3891 |
| 3914 unsigned char packet[] = { | 3892 unsigned char packet[] = { |
| 3915 // public flags (8 byte connection_id) | 3893 // public flags (8 byte connection_id) |
| 3916 0x3C, | 3894 0x3C, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3930 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3908 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3931 ASSERT_TRUE(data != nullptr); | 3909 ASSERT_TRUE(data != nullptr); |
| 3932 | 3910 |
| 3933 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3911 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3934 data->length(), AsChars(packet), | 3912 data->length(), AsChars(packet), |
| 3935 arraysize(packet)); | 3913 arraysize(packet)); |
| 3936 } | 3914 } |
| 3937 | 3915 |
| 3938 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 3916 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
| 3939 QuicPublicResetPacket reset_packet; | 3917 QuicPublicResetPacket reset_packet; |
| 3940 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3918 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3941 reset_packet.public_header.reset_flag = true; | 3919 reset_packet.public_header.reset_flag = true; |
| 3942 reset_packet.public_header.version_flag = false; | 3920 reset_packet.public_header.version_flag = false; |
| 3943 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 3921 reset_packet.rejected_sequence_number = UINT64_C(0x123456789ABC); |
| 3944 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 3922 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); |
| 3945 | 3923 |
| 3946 unsigned char packet[] = { | 3924 unsigned char packet[] = { |
| 3947 // public flags (public reset, 8 byte ConnectionId) | 3925 // public flags (public reset, 8 byte ConnectionId) |
| 3948 0x0E, | 3926 0x0E, |
| 3949 // connection_id | 3927 // connection_id |
| 3950 0x10, 0x32, 0x54, 0x76, | 3928 0x10, 0x32, 0x54, 0x76, |
| 3951 0x98, 0xBA, 0xDC, 0xFE, | 3929 0x98, 0xBA, 0xDC, 0xFE, |
| 3952 // message tag (kPRST) | 3930 // message tag (kPRST) |
| 3953 'P', 'R', 'S', 'T', | 3931 'P', 'R', 'S', 'T', |
| 3954 // num_entries (2) + padding | 3932 // num_entries (2) + padding |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3973 framer_.BuildPublicResetPacket(reset_packet)); | 3951 framer_.BuildPublicResetPacket(reset_packet)); |
| 3974 ASSERT_TRUE(data != nullptr); | 3952 ASSERT_TRUE(data != nullptr); |
| 3975 | 3953 |
| 3976 test::CompareCharArraysWithHexError("constructed packet", | 3954 test::CompareCharArraysWithHexError("constructed packet", |
| 3977 data->data(), data->length(), | 3955 data->data(), data->length(), |
| 3978 AsChars(packet), arraysize(packet)); | 3956 AsChars(packet), arraysize(packet)); |
| 3979 } | 3957 } |
| 3980 | 3958 |
| 3981 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 3959 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
| 3982 QuicPublicResetPacket reset_packet; | 3960 QuicPublicResetPacket reset_packet; |
| 3983 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3961 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 3984 reset_packet.public_header.reset_flag = true; | 3962 reset_packet.public_header.reset_flag = true; |
| 3985 reset_packet.public_header.version_flag = false; | 3963 reset_packet.public_header.version_flag = false; |
| 3986 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 3964 reset_packet.rejected_sequence_number = UINT64_C(0x123456789ABC); |
| 3987 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 3965 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); |
| 3988 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 3966 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); |
| 3989 | 3967 |
| 3990 unsigned char packet[] = { | 3968 unsigned char packet[] = { |
| 3991 // public flags (public reset, 8 byte ConnectionId) | 3969 // public flags (public reset, 8 byte ConnectionId) |
| 3992 0x0E, | 3970 0x0E, |
| 3993 // connection_id | 3971 // connection_id |
| 3994 0x10, 0x32, 0x54, 0x76, | 3972 0x10, 0x32, 0x54, 0x76, |
| 3995 0x98, 0xBA, 0xDC, 0xFE, | 3973 0x98, 0xBA, 0xDC, 0xFE, |
| 3996 // message tag (kPRST) | 3974 // message tag (kPRST) |
| 3997 'P', 'R', 'S', 'T', | 3975 'P', 'R', 'S', 'T', |
| (...skipping 27 matching lines...) Expand all Loading... |
| 4025 framer_.BuildPublicResetPacket(reset_packet)); | 4003 framer_.BuildPublicResetPacket(reset_packet)); |
| 4026 ASSERT_TRUE(data != nullptr); | 4004 ASSERT_TRUE(data != nullptr); |
| 4027 | 4005 |
| 4028 test::CompareCharArraysWithHexError("constructed packet", | 4006 test::CompareCharArraysWithHexError("constructed packet", |
| 4029 data->data(), data->length(), | 4007 data->data(), data->length(), |
| 4030 AsChars(packet), arraysize(packet)); | 4008 AsChars(packet), arraysize(packet)); |
| 4031 } | 4009 } |
| 4032 | 4010 |
| 4033 TEST_P(QuicFramerTest, BuildFecPacket) { | 4011 TEST_P(QuicFramerTest, BuildFecPacket) { |
| 4034 QuicPacketHeader header; | 4012 QuicPacketHeader header; |
| 4035 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4013 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 4036 header.public_header.reset_flag = false; | 4014 header.public_header.reset_flag = false; |
| 4037 header.public_header.version_flag = false; | 4015 header.public_header.version_flag = false; |
| 4038 header.fec_flag = true; | 4016 header.fec_flag = true; |
| 4039 header.entropy_flag = true; | 4017 header.entropy_flag = true; |
| 4040 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); | 4018 header.packet_sequence_number = (UINT64_C(0x123456789ABC)); |
| 4041 header.is_in_fec_group = IN_FEC_GROUP; | 4019 header.is_in_fec_group = IN_FEC_GROUP; |
| 4042 header.fec_group = GG_UINT64_C(0x123456789ABB);; | 4020 header.fec_group = UINT64_C(0x123456789ABB); |
| 4021 ; |
| 4043 | 4022 |
| 4044 QuicFecData fec_data; | 4023 QuicFecData fec_data; |
| 4045 fec_data.fec_group = 1; | 4024 fec_data.fec_group = 1; |
| 4046 fec_data.redundancy = "abcdefghijklmnop"; | 4025 fec_data.redundancy = "abcdefghijklmnop"; |
| 4047 | 4026 |
| 4048 unsigned char packet[] = { | 4027 unsigned char packet[] = { |
| 4049 // public flags (8 byte connection_id) | 4028 // public flags (8 byte connection_id) |
| 4050 0x3C, | 4029 0x3C, |
| 4051 // connection_id | 4030 // connection_id |
| 4052 0x10, 0x32, 0x54, 0x76, | 4031 0x10, 0x32, 0x54, 0x76, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4068 | 4047 |
| 4069 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data)); | 4048 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data)); |
| 4070 ASSERT_TRUE(data != nullptr); | 4049 ASSERT_TRUE(data != nullptr); |
| 4071 | 4050 |
| 4072 test::CompareCharArraysWithHexError("constructed packet", | 4051 test::CompareCharArraysWithHexError("constructed packet", |
| 4073 data->data(), data->length(), | 4052 data->data(), data->length(), |
| 4074 AsChars(packet), arraysize(packet)); | 4053 AsChars(packet), arraysize(packet)); |
| 4075 } | 4054 } |
| 4076 | 4055 |
| 4077 TEST_P(QuicFramerTest, EncryptPacket) { | 4056 TEST_P(QuicFramerTest, EncryptPacket) { |
| 4078 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 4057 QuicPacketSequenceNumber sequence_number = UINT64_C(0x123456789ABC); |
| 4079 unsigned char packet[] = { | 4058 unsigned char packet[] = { |
| 4080 // public flags (8 byte connection_id) | 4059 // public flags (8 byte connection_id) |
| 4081 0x3C, | 4060 0x3C, |
| 4082 // connection_id | 4061 // connection_id |
| 4083 0x10, 0x32, 0x54, 0x76, | 4062 0x10, 0x32, 0x54, 0x76, |
| 4084 0x98, 0xBA, 0xDC, 0xFE, | 4063 0x98, 0xBA, 0xDC, 0xFE, |
| 4085 // packet sequence number | 4064 // packet sequence number |
| 4086 0xBC, 0x9A, 0x78, 0x56, | 4065 0xBC, 0x9A, 0x78, 0x56, |
| 4087 0x34, 0x12, | 4066 0x34, 0x12, |
| 4088 // private flags (fec group & fec packet) | 4067 // private flags (fec group & fec packet) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4102 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER)); | 4081 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 4103 char buffer[kMaxPacketSize]; | 4082 char buffer[kMaxPacketSize]; |
| 4104 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( | 4083 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
| 4105 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); | 4084 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); |
| 4106 | 4085 |
| 4107 ASSERT_TRUE(encrypted.get() != nullptr); | 4086 ASSERT_TRUE(encrypted.get() != nullptr); |
| 4108 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 4087 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 4109 } | 4088 } |
| 4110 | 4089 |
| 4111 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 4090 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
| 4112 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 4091 QuicPacketSequenceNumber sequence_number = UINT64_C(0x123456789ABC); |
| 4113 unsigned char packet[] = { | 4092 unsigned char packet[] = { |
| 4114 // public flags (version, 8 byte connection_id) | 4093 // public flags (version, 8 byte connection_id) |
| 4115 0x3D, | 4094 0x3D, |
| 4116 // connection_id | 4095 // connection_id |
| 4117 0x10, 0x32, 0x54, 0x76, | 4096 0x10, 0x32, 0x54, 0x76, |
| 4118 0x98, 0xBA, 0xDC, 0xFE, | 4097 0x98, 0xBA, 0xDC, 0xFE, |
| 4119 // version tag | 4098 // version tag |
| 4120 'Q', '.', '1', '0', | 4099 'Q', '.', '1', '0', |
| 4121 // packet sequence number | 4100 // packet sequence number |
| 4122 0xBC, 0x9A, 0x78, 0x56, | 4101 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 4139 char buffer[kMaxPacketSize]; | 4118 char buffer[kMaxPacketSize]; |
| 4140 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( | 4119 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
| 4141 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); | 4120 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); |
| 4142 | 4121 |
| 4143 ASSERT_TRUE(encrypted.get() != nullptr); | 4122 ASSERT_TRUE(encrypted.get() != nullptr); |
| 4144 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 4123 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 4145 } | 4124 } |
| 4146 | 4125 |
| 4147 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 4126 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
| 4148 QuicPacketHeader header; | 4127 QuicPacketHeader header; |
| 4149 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4128 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 4150 header.public_header.reset_flag = false; | 4129 header.public_header.reset_flag = false; |
| 4151 header.public_header.version_flag = false; | 4130 header.public_header.version_flag = false; |
| 4152 header.fec_flag = false; | 4131 header.fec_flag = false; |
| 4153 header.entropy_flag = false; | 4132 header.entropy_flag = false; |
| 4154 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4133 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 4155 header.fec_group = 0; | 4134 header.fec_group = 0; |
| 4156 | 4135 |
| 4157 // Create a packet with just the ack. | 4136 // Create a packet with just the ack. |
| 4158 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4137 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4159 QuicFrame frame; | 4138 QuicFrame frame; |
| 4160 frame.type = ACK_FRAME; | 4139 frame.type = ACK_FRAME; |
| 4161 frame.ack_frame = &ack_frame; | 4140 frame.ack_frame = &ack_frame; |
| 4162 QuicFrames frames; | 4141 QuicFrames frames; |
| 4163 frames.push_back(frame); | 4142 frames.push_back(frame); |
| 4164 | 4143 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 4179 SequenceNumberSet::const_iterator missing_iter = | 4158 SequenceNumberSet::const_iterator missing_iter = |
| 4180 processed_ack_frame.missing_packets.begin(); | 4159 processed_ack_frame.missing_packets.begin(); |
| 4181 EXPECT_EQ(1u, *missing_iter); | 4160 EXPECT_EQ(1u, *missing_iter); |
| 4182 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 4161 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 4183 processed_ack_frame.missing_packets.rbegin(); | 4162 processed_ack_frame.missing_packets.rbegin(); |
| 4184 EXPECT_EQ(509u, *last_missing_iter); | 4163 EXPECT_EQ(509u, *last_missing_iter); |
| 4185 } | 4164 } |
| 4186 | 4165 |
| 4187 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 4166 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { |
| 4188 QuicPacketHeader header; | 4167 QuicPacketHeader header; |
| 4189 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4168 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 4190 header.public_header.reset_flag = false; | 4169 header.public_header.reset_flag = false; |
| 4191 header.public_header.version_flag = false; | 4170 header.public_header.version_flag = false; |
| 4192 header.fec_flag = false; | 4171 header.fec_flag = false; |
| 4193 header.entropy_flag = false; | 4172 header.entropy_flag = false; |
| 4194 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4173 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 4195 header.fec_group = 0; | 4174 header.fec_group = 0; |
| 4196 | 4175 |
| 4197 // Create a packet with just the ack. | 4176 // Create a packet with just the ack. |
| 4198 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4177 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4199 QuicFrame frame; | 4178 QuicFrame frame; |
| 4200 frame.type = ACK_FRAME; | 4179 frame.type = ACK_FRAME; |
| 4201 frame.ack_frame = &ack_frame; | 4180 frame.ack_frame = &ack_frame; |
| 4202 QuicFrames frames; | 4181 QuicFrames frames; |
| 4203 frames.push_back(frame); | 4182 frames.push_back(frame); |
| 4204 | 4183 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 4219 SequenceNumberSet::const_iterator missing_iter = | 4198 SequenceNumberSet::const_iterator missing_iter = |
| 4220 processed_ack_frame.missing_packets.begin(); | 4199 processed_ack_frame.missing_packets.begin(); |
| 4221 EXPECT_EQ(1u, *missing_iter); | 4200 EXPECT_EQ(1u, *missing_iter); |
| 4222 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 4201 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 4223 processed_ack_frame.missing_packets.rbegin(); | 4202 processed_ack_frame.missing_packets.rbegin(); |
| 4224 EXPECT_EQ(475u, *last_missing_iter); | 4203 EXPECT_EQ(475u, *last_missing_iter); |
| 4225 } | 4204 } |
| 4226 | 4205 |
| 4227 TEST_P(QuicFramerTest, CleanTruncation) { | 4206 TEST_P(QuicFramerTest, CleanTruncation) { |
| 4228 QuicPacketHeader header; | 4207 QuicPacketHeader header; |
| 4229 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4208 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); |
| 4230 header.public_header.reset_flag = false; | 4209 header.public_header.reset_flag = false; |
| 4231 header.public_header.version_flag = false; | 4210 header.public_header.version_flag = false; |
| 4232 header.fec_flag = false; | 4211 header.fec_flag = false; |
| 4233 header.entropy_flag = true; | 4212 header.entropy_flag = true; |
| 4234 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4213 header.packet_sequence_number = UINT64_C(0x123456789ABC); |
| 4235 header.fec_group = 0; | 4214 header.fec_group = 0; |
| 4236 | 4215 |
| 4237 QuicAckFrame ack_frame; | 4216 QuicAckFrame ack_frame; |
| 4238 ack_frame.largest_observed = 201; | 4217 ack_frame.largest_observed = 201; |
| 4239 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) { | 4218 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) { |
| 4240 ack_frame.missing_packets.insert(i); | 4219 ack_frame.missing_packets.insert(i); |
| 4241 } | 4220 } |
| 4242 | 4221 |
| 4243 // Create a packet with just the ack. | 4222 // Create a packet with just the ack. |
| 4244 QuicFrame frame; | 4223 QuicFrame frame; |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4401 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); | 4380 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); |
| 4402 EXPECT_CALL(visitor, OnDecryptedPacket(_)); | 4381 EXPECT_CALL(visitor, OnDecryptedPacket(_)); |
| 4403 | 4382 |
| 4404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4383 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 4405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4384 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 4406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4385 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 4407 } | 4386 } |
| 4408 | 4387 |
| 4409 } // namespace test | 4388 } // namespace test |
| 4410 } // namespace net | 4389 } // namespace net |
| OLD | NEW |