| 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> | 7 #include <stdint.h> | 
| 8 #include <algorithm> | 8 #include <algorithm> | 
| 9 #include <map> | 9 #include <map> | 
| 10 #include <string> | 10 #include <string> | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 33 using testing::Return; | 33 using testing::Return; | 
| 34 using testing::Truly; | 34 using testing::Truly; | 
| 35 using testing::_; | 35 using testing::_; | 
| 36 | 36 | 
| 37 namespace net { | 37 namespace net { | 
| 38 namespace test { | 38 namespace test { | 
| 39 | 39 | 
| 40 const QuicPacketNumber kEpoch = UINT64_C(1) << 48; | 40 const QuicPacketNumber kEpoch = UINT64_C(1) << 48; | 
| 41 const QuicPacketNumber kMask = kEpoch - 1; | 41 const QuicPacketNumber kMask = kEpoch - 1; | 
| 42 | 42 | 
|  | 43 // Use fields in which each byte is distinct to ensure that every byte is | 
|  | 44 // framed correctly. The values are otherwise arbitrary. | 
|  | 45 const QuicConnectionId kConnectionId = UINT64_C(0xFEDCBA9876543210); | 
|  | 46 const QuicPacketNumber kPacketNumber = UINT64_C(0x123456789ABC); | 
|  | 47 const QuicPacketNumber kLargestObserved = UINT64_C(0x0123456789ABF); | 
|  | 48 const QuicPacketNumber kMissingPacket = UINT64_C(0x0123456789ABE); | 
|  | 49 const QuicPacketNumber kLeastUnacked = UINT64_C(0x0123456789AA0); | 
|  | 50 const QuicStreamId kStreamId = UINT64_C(0x01020304); | 
|  | 51 const QuicStreamOffset kStreamOffset = UINT64_C(0xBA98FEDC32107654); | 
|  | 52 const QuicPublicResetNonceProof kNonceProof = UINT64_C(0xABCDEF0123456789); | 
|  | 53 | 
| 43 // Index into the connection_id offset in the header. | 54 // Index into the connection_id offset in the header. | 
| 44 const size_t kConnectionIdOffset = kPublicFlagsSize; | 55 const size_t kConnectionIdOffset = kPublicFlagsSize; | 
| 45 // Index into the version string in the header. (if present). | 56 // Index into the version string in the header. (if present). | 
| 46 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 57 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 
| 47 | 58 | 
| 48 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 59 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 
| 49 // offset and the last frame in a packet. | 60 // offset and the last frame in a packet. | 
| 50 size_t GetMinStreamFrameSize() { | 61 size_t GetMinStreamFrameSize() { | 
| 51   return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; | 62   return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; | 
| 52 } | 63 } | 
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 606          kMaxPacketSize - GetPacketHeaderSize( | 617          kMaxPacketSize - GetPacketHeaderSize( | 
| 607              PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 618              PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 608              PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); | 619              PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); | 
| 609   // clang-format on | 620   // clang-format on | 
| 610 | 621 | 
| 611   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 622   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 612   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 623   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 613 | 624 | 
| 614   ASSERT_TRUE(visitor_.header_.get()); | 625   ASSERT_TRUE(visitor_.header_.get()); | 
| 615   // Make sure we've parsed the packet header, so we can send an error. | 626   // Make sure we've parsed the packet header, so we can send an error. | 
| 616   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 627   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 617             visitor_.header_->public_header.connection_id); |  | 
| 618   // Make sure the correct error is propagated. | 628   // Make sure the correct error is propagated. | 
| 619   EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 629   EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 
| 620 } | 630 } | 
| 621 | 631 | 
| 622 TEST_P(QuicFramerTest, PacketHeader) { | 632 TEST_P(QuicFramerTest, PacketHeader) { | 
| 623   // clang-format off | 633   // clang-format off | 
| 624   unsigned char packet[] = { | 634   unsigned char packet[] = { | 
| 625     // public flags (8 byte connection_id) | 635     // public flags (8 byte connection_id) | 
| 626     0x3C, | 636     0x3C, | 
| 627     // connection_id | 637     // connection_id | 
| 628     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 638     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 629     // packet number | 639     // packet number | 
| 630     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 640     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 631     // private flags | 641     // private flags | 
| 632     0x00, | 642     0x00, | 
| 633   }; | 643   }; | 
| 634   // clang-format on | 644   // clang-format on | 
| 635 | 645 | 
| 636   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 646   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 637   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 647   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 638   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 648   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 639   ASSERT_TRUE(visitor_.header_.get()); | 649   ASSERT_TRUE(visitor_.header_.get()); | 
| 640   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 650   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 641             visitor_.header_->public_header.connection_id); |  | 
| 642   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 651   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 643   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 652   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 644   EXPECT_FALSE(visitor_.header_->fec_flag); | 653   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 645   EXPECT_FALSE(visitor_.header_->entropy_flag); | 654   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 646   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 655   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 647   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 656   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 648   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 657   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 649   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 658   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 650 | 659 | 
| 651   // Now test framing boundaries. | 660   // Now test framing boundaries. | 
| 652   for (size_t i = 0; | 661   for (size_t i = 0; | 
| 653        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 662        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 654                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 663                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 655        ++i) { | 664        ++i) { | 
| 656     string expected_error; | 665     string expected_error; | 
| 657     if (i < kConnectionIdOffset) { | 666     if (i < kConnectionIdOffset) { | 
| 658       expected_error = "Unable to read public flags."; | 667       expected_error = "Unable to read public flags."; | 
| 659     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 668     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 
| 660       expected_error = "Unable to read ConnectionId."; | 669       expected_error = "Unable to read ConnectionId."; | 
| 661     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 670     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 
| 662       expected_error = "Unable to read packet number."; | 671       expected_error = "Unable to read packet number."; | 
| 663     } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 672     } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 
| 664       expected_error = "Unable to read private flags."; | 673       expected_error = "Unable to read private flags."; | 
| 665     } else { | 674     } else { | 
| 666       expected_error = "Unable to read first fec protected packet offset."; | 675       expected_error = "Unable to read first fec protected packet offset."; | 
| 667     } | 676     } | 
| 668     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 677     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 669   } | 678   } | 
| 670 } | 679 } | 
| 671 | 680 | 
| 672 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 681 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 
| 673   QuicFramerPeer::SetLastSerializedConnectionId( | 682   QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 
| 674       &framer_, UINT64_C(0xFEDCBA9876543210)); |  | 
| 675 | 683 | 
| 676   // clang-format off | 684   // clang-format off | 
| 677   unsigned char packet[] = { | 685   unsigned char packet[] = { | 
| 678     // public flags (4 byte connection_id) | 686     // public flags (4 byte connection_id) | 
| 679     0x38, | 687     0x38, | 
| 680     // connection_id | 688     // connection_id | 
| 681     0x10, 0x32, 0x54, 0x76, | 689     0x10, 0x32, 0x54, 0x76, | 
| 682     // packet number | 690     // packet number | 
| 683     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 691     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 684     // private flags | 692     // private flags | 
| 685     0x00, | 693     0x00, | 
| 686   }; | 694   }; | 
| 687   // clang-format on | 695   // clang-format on | 
| 688 | 696 | 
| 689   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 697   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 690   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 698   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 691   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 699   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 692   ASSERT_TRUE(visitor_.header_.get()); | 700   ASSERT_TRUE(visitor_.header_.get()); | 
| 693   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 701   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 694             visitor_.header_->public_header.connection_id); |  | 
| 695   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 702   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 696   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 703   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 697   EXPECT_FALSE(visitor_.header_->fec_flag); | 704   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 698   EXPECT_FALSE(visitor_.header_->entropy_flag); | 705   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 699   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 706   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 700   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 707   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 701   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 708   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 702   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 709   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 703 | 710 | 
| 704   // Now test framing boundaries. | 711   // Now test framing boundaries. | 
| 705   for (size_t i = 0; | 712   for (size_t i = 0; | 
| 706        i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 713        i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 707                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 714                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 708        ++i) { | 715        ++i) { | 
| 709     string expected_error; | 716     string expected_error; | 
| 710     if (i < kConnectionIdOffset) { | 717     if (i < kConnectionIdOffset) { | 
| 711       expected_error = "Unable to read public flags."; | 718       expected_error = "Unable to read public flags."; | 
| 712     } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 719     } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 
| 713                                          !kIncludeVersion)) { | 720                                          !kIncludeVersion)) { | 
| 714       expected_error = "Unable to read ConnectionId."; | 721       expected_error = "Unable to read ConnectionId."; | 
| 715     } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 722     } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 
| 716                                          !kIncludeVersion)) { | 723                                          !kIncludeVersion)) { | 
| 717       expected_error = "Unable to read packet number."; | 724       expected_error = "Unable to read packet number."; | 
| 718     } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 725     } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 
| 719                                      !kIncludeVersion)) { | 726                                      !kIncludeVersion)) { | 
| 720       expected_error = "Unable to read private flags."; | 727       expected_error = "Unable to read private flags."; | 
| 721     } else { | 728     } else { | 
| 722       expected_error = "Unable to read first fec protected packet offset."; | 729       expected_error = "Unable to read first fec protected packet offset."; | 
| 723     } | 730     } | 
| 724     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 731     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 725   } | 732   } | 
| 726 } | 733 } | 
| 727 | 734 | 
| 728 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 735 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 
| 729   QuicFramerPeer::SetLastSerializedConnectionId( | 736   QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 
| 730       &framer_, UINT64_C(0xFEDCBA9876543210)); |  | 
| 731 | 737 | 
| 732   // clang-format off | 738   // clang-format off | 
| 733   unsigned char packet[] = { | 739   unsigned char packet[] = { | 
| 734     // public flags (1 byte connection_id) | 740     // public flags (1 byte connection_id) | 
| 735     0x34, | 741     0x34, | 
| 736     // connection_id | 742     // connection_id | 
| 737     0x10, | 743     0x10, | 
| 738     // packet number | 744     // packet number | 
| 739     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 745     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 740     // private flags | 746     // private flags | 
| 741     0x00, | 747     0x00, | 
| 742   }; | 748   }; | 
| 743   // clang-format on | 749   // clang-format on | 
| 744 | 750 | 
| 745   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 751   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 746   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 752   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 747   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 753   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 748   ASSERT_TRUE(visitor_.header_.get()); | 754   ASSERT_TRUE(visitor_.header_.get()); | 
| 749   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 755   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 750             visitor_.header_->public_header.connection_id); |  | 
| 751   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 756   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 752   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 757   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 753   EXPECT_FALSE(visitor_.header_->fec_flag); | 758   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 754   EXPECT_FALSE(visitor_.header_->entropy_flag); | 759   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 755   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 760   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 756   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 761   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 757   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 762   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 758   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 763   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 759 | 764 | 
| 760   // Now test framing boundaries. | 765   // Now test framing boundaries. | 
| 761   for (size_t i = 0; | 766   for (size_t i = 0; | 
| 762        i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 767        i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 763                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 768                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 764        ++i) { | 769        ++i) { | 
| 765     string expected_error; | 770     string expected_error; | 
| 766     if (i < kConnectionIdOffset) { | 771     if (i < kConnectionIdOffset) { | 
| 767       expected_error = "Unable to read public flags."; | 772       expected_error = "Unable to read public flags."; | 
| 768     } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 773     } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 
| 769                                          !kIncludeVersion)) { | 774                                          !kIncludeVersion)) { | 
| 770       expected_error = "Unable to read ConnectionId."; | 775       expected_error = "Unable to read ConnectionId."; | 
| 771     } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 776     } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 
| 772                                          !kIncludeVersion)) { | 777                                          !kIncludeVersion)) { | 
| 773       expected_error = "Unable to read packet number."; | 778       expected_error = "Unable to read packet number."; | 
| 774     } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 779     } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 
| 775                                      !kIncludeVersion)) { | 780                                      !kIncludeVersion)) { | 
| 776       expected_error = "Unable to read private flags."; | 781       expected_error = "Unable to read private flags."; | 
| 777     } else { | 782     } else { | 
| 778       expected_error = "Unable to read first fec protected packet offset."; | 783       expected_error = "Unable to read first fec protected packet offset."; | 
| 779     } | 784     } | 
| 780     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 785     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 781   } | 786   } | 
| 782 } | 787 } | 
| 783 | 788 | 
| 784 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 789 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 
| 785   QuicFramerPeer::SetLastSerializedConnectionId( | 790   QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 
| 786       &framer_, UINT64_C(0xFEDCBA9876543210)); |  | 
| 787 | 791 | 
| 788   // clang-format off | 792   // clang-format off | 
| 789   unsigned char packet[] = { | 793   unsigned char packet[] = { | 
| 790     // public flags (0 byte connection_id) | 794     // public flags (0 byte connection_id) | 
| 791     0x30, | 795     0x30, | 
| 792     // connection_id | 796     // connection_id | 
| 793     // packet number | 797     // packet number | 
| 794     0xBC, 0x9A, 0x78, 0x56, | 798     0xBC, 0x9A, 0x78, 0x56, | 
| 795     0x34, 0x12, | 799     0x34, 0x12, | 
| 796     // private flags | 800     // private flags | 
| 797     0x00, | 801     0x00, | 
| 798   }; | 802   }; | 
| 799   // clang-format on | 803   // clang-format on | 
| 800 | 804 | 
| 801   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 805   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 802   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 806   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 803   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 807   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 804   ASSERT_TRUE(visitor_.header_.get()); | 808   ASSERT_TRUE(visitor_.header_.get()); | 
| 805   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 809   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 806             visitor_.header_->public_header.connection_id); |  | 
| 807   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 810   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 808   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 811   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 809   EXPECT_FALSE(visitor_.header_->fec_flag); | 812   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 810   EXPECT_FALSE(visitor_.header_->entropy_flag); | 813   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 811   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 814   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 812   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 815   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 813   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 816   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 814   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 817   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 815 | 818 | 
| 816   // Now test framing boundaries. | 819   // Now test framing boundaries. | 
| 817   for (size_t i = 0; | 820   for (size_t i = 0; | 
| 818        i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 821        i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 819                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 822                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 820        ++i) { | 823        ++i) { | 
| 821     string expected_error; | 824     string expected_error; | 
| 822     if (i < kConnectionIdOffset) { | 825     if (i < kConnectionIdOffset) { | 
| 823       expected_error = "Unable to read public flags."; | 826       expected_error = "Unable to read public flags."; | 
| 824     } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, | 827     } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 850     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 853     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 851     // private flags | 854     // private flags | 
| 852     0x00, | 855     0x00, | 
| 853   }; | 856   }; | 
| 854   // clang-format on | 857   // clang-format on | 
| 855 | 858 | 
| 856   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 859   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 857   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 860   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 858   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 861   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 859   ASSERT_TRUE(visitor_.header_.get()); | 862   ASSERT_TRUE(visitor_.header_.get()); | 
| 860   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 863   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 861             visitor_.header_->public_header.connection_id); |  | 
| 862   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 864   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 863   EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 865   EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 
| 864   EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 866   EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 
| 865   EXPECT_FALSE(visitor_.header_->fec_flag); | 867   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 866   EXPECT_FALSE(visitor_.header_->entropy_flag); | 868   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 867   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 869   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 868   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 870   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 869   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 871   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 870   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 872   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 871 | 873 | 
| 872   // Now test framing boundaries. | 874   // Now test framing boundaries. | 
| 873   for (size_t i = 0; | 875   for (size_t i = 0; | 
| 874        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 876        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 
| 875                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 877                                PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 876        ++i) { | 878        ++i) { | 
| 877     string expected_error; | 879     string expected_error; | 
| 878     if (i < kConnectionIdOffset) { | 880     if (i < kConnectionIdOffset) { | 
| 879       expected_error = "Unable to read public flags."; | 881       expected_error = "Unable to read public flags."; | 
| 880     } else if (i < kVersionOffset) { | 882     } else if (i < kVersionOffset) { | 
| 881       expected_error = "Unable to read ConnectionId."; | 883       expected_error = "Unable to read ConnectionId."; | 
| 882     } else if (i < GetPacketNumberOffset(kIncludeVersion)) { | 884     } else if (i < GetPacketNumberOffset(kIncludeVersion)) { | 
| 883       expected_error = "Unable to read protocol version."; | 885       expected_error = "Unable to read protocol version."; | 
| 884     } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 886     } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 
| 885       expected_error = "Unable to read packet number."; | 887       expected_error = "Unable to read packet number."; | 
| 886     } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 888     } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 
| 887       expected_error = "Unable to read private flags."; | 889       expected_error = "Unable to read private flags."; | 
| 888     } else { | 890     } else { | 
| 889       expected_error = "Unable to read first fec protected packet offset."; | 891       expected_error = "Unable to read first fec protected packet offset."; | 
| 890     } | 892     } | 
| 891     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 893     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 892   } | 894   } | 
| 893 } | 895 } | 
| 894 | 896 | 
| 895 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { | 897 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { | 
| 896   QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 898   QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 
| 897 | 899 | 
| 898   // clang-format off | 900   // clang-format off | 
| 899   unsigned char packet[] = { | 901   unsigned char packet[] = { | 
| 900     // public flags (8 byte connection_id and 4 byte packet number) | 902     // public flags (8 byte connection_id and 4 byte packet number) | 
| 901     0x2C, | 903     0x2C, | 
| 902     // connection_id | 904     // connection_id | 
| 903     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 905     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 904     // packet number | 906     // packet number | 
| 905     0xBC, 0x9A, 0x78, 0x56, | 907     0xBC, 0x9A, 0x78, 0x56, | 
| 906     // private flags | 908     // private flags | 
| 907     0x00, | 909     0x00, | 
| 908   }; | 910   }; | 
| 909   // clang-format on | 911   // clang-format on | 
| 910 | 912 | 
| 911   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 913   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 912   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 914   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 913   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 915   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 914   ASSERT_TRUE(visitor_.header_.get()); | 916   ASSERT_TRUE(visitor_.header_.get()); | 
| 915   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 917   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 916             visitor_.header_->public_header.connection_id); |  | 
| 917   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 918   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 918   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 919   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 919   EXPECT_FALSE(visitor_.header_->fec_flag); | 920   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 920   EXPECT_FALSE(visitor_.header_->entropy_flag); | 921   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 921   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 922   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 922   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 923   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 923   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 924   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 924   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 925   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 925 | 926 | 
| 926   // Now test framing boundaries. | 927   // Now test framing boundaries. | 
| 927   for (size_t i = 0; | 928   for (size_t i = 0; | 
| 928        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 929        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 929                                PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 930                                PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 930        ++i) { | 931        ++i) { | 
| 931     string expected_error; | 932     string expected_error; | 
| 932     if (i < kConnectionIdOffset) { | 933     if (i < kConnectionIdOffset) { | 
| 933       expected_error = "Unable to read public flags."; | 934       expected_error = "Unable to read public flags."; | 
| 934     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 935     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 
| 935       expected_error = "Unable to read ConnectionId."; | 936       expected_error = "Unable to read ConnectionId."; | 
| 936     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 937     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 
| 937                                          PACKET_4BYTE_PACKET_NUMBER)) { | 938                                          PACKET_4BYTE_PACKET_NUMBER)) { | 
| 938       expected_error = "Unable to read packet number."; | 939       expected_error = "Unable to read packet number."; | 
| 939     } else if (i < GetFecGroupOffset(!kIncludeVersion, | 940     } else if (i < GetFecGroupOffset(!kIncludeVersion, | 
| 940                                      PACKET_4BYTE_PACKET_NUMBER)) { | 941                                      PACKET_4BYTE_PACKET_NUMBER)) { | 
| 941       expected_error = "Unable to read private flags."; | 942       expected_error = "Unable to read private flags."; | 
| 942     } else { | 943     } else { | 
| 943       expected_error = "Unable to read first fec protected packet offset."; | 944       expected_error = "Unable to read first fec protected packet offset."; | 
| 944     } | 945     } | 
| 945     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 946     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 946   } | 947   } | 
| 947 } | 948 } | 
| 948 | 949 | 
| 949 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 950 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 
| 950   QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 951   QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 
| 951 | 952 | 
| 952   // clang-format off | 953   // clang-format off | 
| 953   unsigned char packet[] = { | 954   unsigned char packet[] = { | 
| 954     // public flags (8 byte connection_id and 2 byte packet number) | 955     // public flags (8 byte connection_id and 2 byte packet number) | 
| 955     0x1C, | 956     0x1C, | 
| 956     // connection_id | 957     // connection_id | 
| 957     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 958     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 958     // packet number | 959     // packet number | 
| 959     0xBC, 0x9A, | 960     0xBC, 0x9A, | 
| 960     // private flags | 961     // private flags | 
| 961     0x00, | 962     0x00, | 
| 962   }; | 963   }; | 
| 963   // clang-format on | 964   // clang-format on | 
| 964 | 965 | 
| 965   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 966   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 966   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 967   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 967   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 968   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 968   ASSERT_TRUE(visitor_.header_.get()); | 969   ASSERT_TRUE(visitor_.header_.get()); | 
| 969   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 970   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 970             visitor_.header_->public_header.connection_id); |  | 
| 971   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 971   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 972   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 972   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 973   EXPECT_FALSE(visitor_.header_->fec_flag); | 973   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 974   EXPECT_FALSE(visitor_.header_->entropy_flag); | 974   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 975   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 975   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 976   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 976   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 977   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 977   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 978   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 978   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 979 | 979 | 
| 980   // Now test framing boundaries. | 980   // Now test framing boundaries. | 
| 981   for (size_t i = 0; | 981   for (size_t i = 0; | 
| 982        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 982        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 983                                PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 983                                PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 984        ++i) { | 984        ++i) { | 
| 985     string expected_error; | 985     string expected_error; | 
| 986     if (i < kConnectionIdOffset) { | 986     if (i < kConnectionIdOffset) { | 
| 987       expected_error = "Unable to read public flags."; | 987       expected_error = "Unable to read public flags."; | 
| 988     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 988     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 
| 989       expected_error = "Unable to read ConnectionId."; | 989       expected_error = "Unable to read ConnectionId."; | 
| 990     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 990     } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 
| 991                                          PACKET_2BYTE_PACKET_NUMBER)) { | 991                                          PACKET_2BYTE_PACKET_NUMBER)) { | 
| 992       expected_error = "Unable to read packet number."; | 992       expected_error = "Unable to read packet number."; | 
| 993     } else if (i < GetFecGroupOffset(!kIncludeVersion, | 993     } else if (i < GetFecGroupOffset(!kIncludeVersion, | 
| 994                                      PACKET_2BYTE_PACKET_NUMBER)) { | 994                                      PACKET_2BYTE_PACKET_NUMBER)) { | 
| 995       expected_error = "Unable to read private flags."; | 995       expected_error = "Unable to read private flags."; | 
| 996     } else { | 996     } else { | 
| 997       expected_error = "Unable to read first fec protected packet offset."; | 997       expected_error = "Unable to read first fec protected packet offset."; | 
| 998     } | 998     } | 
| 999     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 999     CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 
| 1000   } | 1000   } | 
| 1001 } | 1001 } | 
| 1002 | 1002 | 
| 1003 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 1003 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 
| 1004   QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 1004   QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 
| 1005 | 1005 | 
| 1006   // clang-format off | 1006   // clang-format off | 
| 1007   unsigned char packet[] = { | 1007   unsigned char packet[] = { | 
| 1008     // public flags (8 byte connection_id and 1 byte packet number) | 1008     // public flags (8 byte connection_id and 1 byte packet number) | 
| 1009     0x0C, | 1009     0x0C, | 
| 1010     // connection_id | 1010     // connection_id | 
| 1011     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1011     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 1012     // packet number | 1012     // packet number | 
| 1013     0xBC, | 1013     0xBC, | 
| 1014     // private flags | 1014     // private flags | 
| 1015     0x00, | 1015     0x00, | 
| 1016   }; | 1016   }; | 
| 1017   // clang-format on | 1017   // clang-format on | 
| 1018 | 1018 | 
| 1019   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1019   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1020   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1020   EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 
| 1021   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1021   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 
| 1022   ASSERT_TRUE(visitor_.header_.get()); | 1022   ASSERT_TRUE(visitor_.header_.get()); | 
| 1023   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 1023   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 1024             visitor_.header_->public_header.connection_id); |  | 
| 1025   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1024   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 1026   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1025   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 1027   EXPECT_FALSE(visitor_.header_->fec_flag); | 1026   EXPECT_FALSE(visitor_.header_->fec_flag); | 
| 1028   EXPECT_FALSE(visitor_.header_->entropy_flag); | 1027   EXPECT_FALSE(visitor_.header_->entropy_flag); | 
| 1029   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1028   EXPECT_EQ(0, visitor_.header_->entropy_hash); | 
| 1030   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 1029   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 1031   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1030   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 1032   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1031   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 1033 | 1032 | 
| 1034   // Now test framing boundaries. | 1033   // Now test framing boundaries. | 
| 1035   for (size_t i = 0; | 1034   for (size_t i = 0; | 
| 1036        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1035        i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 1037                                PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 1036                                PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 
| 1038        ++i) { | 1037        ++i) { | 
| 1039     string expected_error; | 1038     string expected_error; | 
| 1040     if (i < kConnectionIdOffset) { | 1039     if (i < kConnectionIdOffset) { | 
| 1041       expected_error = "Unable to read public flags."; | 1040       expected_error = "Unable to read public flags."; | 
| 1042     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 1041     } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1267 | 1266 | 
| 1268   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1267   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1269   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1268   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1270 | 1269 | 
| 1271   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1270   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1272   ASSERT_TRUE(visitor_.header_.get()); | 1271   ASSERT_TRUE(visitor_.header_.get()); | 
| 1273   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1272   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1274 | 1273 | 
| 1275   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1274   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1276   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1275   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1277   EXPECT_EQ(static_cast<uint64>(0x01020304), | 1276   EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1278             visitor_.stream_frames_[0]->stream_id); |  | 
| 1279   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1277   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1280   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1278   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1281   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1279   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1282 | 1280 | 
| 1283   // Now test framing boundaries. | 1281   // Now test framing boundaries. | 
| 1284   CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 1282   CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 
| 1285 } | 1283 } | 
| 1286 | 1284 | 
| 1287 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1285 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 
| 1288   // clang-format off | 1286   // clang-format off | 
| 1289   unsigned char packet[] = { | 1287   unsigned char packet[] = { | 
| 1290     // public flags (8 byte connection_id) | 1288     // public flags (8 byte connection_id) | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 1316 | 1314 | 
| 1317   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1315   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1318   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1316   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1319 | 1317 | 
| 1320   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1318   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1321   ASSERT_TRUE(visitor_.header_.get()); | 1319   ASSERT_TRUE(visitor_.header_.get()); | 
| 1322   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1320   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1323 | 1321 | 
| 1324   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1322   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1325   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1323   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1326   EXPECT_EQ(UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id); | 1324   // Stream ID should be the last 3 bytes of kStreamId. | 
|  | 1325   EXPECT_EQ(0x00FFFFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1327   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1326   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1328   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1327   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1329   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1328   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1330 | 1329 | 
| 1331   // Now test framing boundaries. | 1330   // Now test framing boundaries. | 
| 1332   const size_t stream_id_size = 3; | 1331   const size_t stream_id_size = 3; | 
| 1333   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1332   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 
| 1334 } | 1333 } | 
| 1335 | 1334 | 
| 1336 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1335 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 
| 1337   // clang-format off | 1336   // clang-format off | 
| 1338   unsigned char packet[] = { | 1337   unsigned char packet[] = { | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 1365 | 1364 | 
| 1366   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1365   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1367   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1366   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1368 | 1367 | 
| 1369   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1368   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1370   ASSERT_TRUE(visitor_.header_.get()); | 1369   ASSERT_TRUE(visitor_.header_.get()); | 
| 1371   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1370   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1372 | 1371 | 
| 1373   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1372   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1374   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1373   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1375   EXPECT_EQ(static_cast<uint64>(0x00000304), | 1374   // Stream ID should be the last 2 bytes of kStreamId. | 
| 1376             visitor_.stream_frames_[0]->stream_id); | 1375   EXPECT_EQ(0x0000FFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1377   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1376   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1378   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1377   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1379   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1378   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1380 | 1379 | 
| 1381   // Now test framing boundaries. | 1380   // Now test framing boundaries. | 
| 1382   const size_t stream_id_size = 2; | 1381   const size_t stream_id_size = 2; | 
| 1383   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1382   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 
| 1384 } | 1383 } | 
| 1385 | 1384 | 
| 1386 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1385 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 
| 1387   // clang-format off | 1386   // clang-format off | 
| 1388   unsigned char packet[] = { | 1387   unsigned char packet[] = { | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 1415 | 1414 | 
| 1416   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1415   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1417   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1416   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1418 | 1417 | 
| 1419   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1418   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1420   ASSERT_TRUE(visitor_.header_.get()); | 1419   ASSERT_TRUE(visitor_.header_.get()); | 
| 1421   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1420   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1422 | 1421 | 
| 1423   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1422   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1424   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1423   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1425   EXPECT_EQ(static_cast<uint64>(0x00000004), | 1424   // Stream ID should be the last byte of kStreamId. | 
| 1426             visitor_.stream_frames_[0]->stream_id); | 1425   EXPECT_EQ(0x000000FF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1427   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1426   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1428   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1427   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1429   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1428   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1430 | 1429 | 
| 1431   // Now test framing boundaries. | 1430   // Now test framing boundaries. | 
| 1432   const size_t stream_id_size = 1; | 1431   const size_t stream_id_size = 1; | 
| 1433   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1432   CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 
| 1434 } | 1433 } | 
| 1435 | 1434 | 
| 1436 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1435 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 
| 1437   // clang-format off | 1436   // clang-format off | 
| 1438   unsigned char packet[] = { | 1437   unsigned char packet[] = { | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 1469   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1468   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1470 | 1469 | 
| 1471   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1470   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1472   ASSERT_TRUE(visitor_.header_.get()); | 1471   ASSERT_TRUE(visitor_.header_.get()); | 
| 1473   EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 1472   EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 
| 1474   EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 1473   EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 
| 1475   EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1474   EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 
| 1476 | 1475 | 
| 1477   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1476   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1478   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1477   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1479   EXPECT_EQ(static_cast<uint64>(0x01020304), | 1478   EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1480             visitor_.stream_frames_[0]->stream_id); |  | 
| 1481   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1479   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1482   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1480   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1483   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1481   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1484 | 1482 | 
| 1485   // Now test framing boundaries. | 1483   // Now test framing boundaries. | 
| 1486   CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 1484   CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 
| 1487 } | 1485 } | 
| 1488 | 1486 | 
| 1489 TEST_P(QuicFramerTest, RejectPacket) { | 1487 TEST_P(QuicFramerTest, RejectPacket) { | 
| 1490   visitor_.accept_packet_ = false; | 1488   visitor_.accept_packet_ = false; | 
| 1491 | 1489 | 
| 1492   // clang-format off | 1490   // clang-format off | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1563     // data length | 1561     // data length | 
| 1564     0x0c, 0x00, | 1562     0x0c, 0x00, | 
| 1565     // data | 1563     // data | 
| 1566     'h',  'e',  'l',  'l', | 1564     'h',  'e',  'l',  'l', | 
| 1567     'o',  ' ',  'w',  'o', | 1565     'o',  ' ',  'w',  'o', | 
| 1568     'r',  'l',  'd',  '!', | 1566     'r',  'l',  'd',  '!', | 
| 1569   }; | 1567   }; | 
| 1570   // clang-format on | 1568   // clang-format on | 
| 1571 | 1569 | 
| 1572   QuicPacketHeader header; | 1570   QuicPacketHeader header; | 
| 1573   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 1571   header.public_header.connection_id = kConnectionId; | 
| 1574   header.public_header.reset_flag = false; | 1572   header.public_header.reset_flag = false; | 
| 1575   header.public_header.version_flag = false; | 1573   header.public_header.version_flag = false; | 
| 1576   header.fec_flag = true; | 1574   header.fec_flag = true; | 
| 1577   header.entropy_flag = true; | 1575   header.entropy_flag = true; | 
| 1578   header.packet_number = UINT64_C(0x123456789ABC); | 1576   header.packet_number = kPacketNumber; | 
| 1579   header.fec_group = 0; | 1577   header.fec_group = 0; | 
| 1580 | 1578 | 
| 1581   // Do not encrypt the payload because the revived payload is post-encryption. | 1579   // Do not encrypt the payload because the revived payload is post-encryption. | 
| 1582   EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 1580   EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 
| 1583                                            StringPiece(AsChars(payload), | 1581                                            StringPiece(AsChars(payload), | 
| 1584                                                        arraysize(payload)))); | 1582                                                        arraysize(payload)))); | 
| 1585 | 1583 | 
| 1586   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1584   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1587   ASSERT_EQ(1, visitor_.revived_packets_); | 1585   ASSERT_EQ(1, visitor_.revived_packets_); | 
| 1588   ASSERT_TRUE(visitor_.header_.get()); | 1586   ASSERT_TRUE(visitor_.header_.get()); | 
| 1589   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 1587   EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 
| 1590             visitor_.header_->public_header.connection_id); |  | 
| 1591   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1588   EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 
| 1592   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1589   EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 
| 1593   EXPECT_TRUE(visitor_.header_->fec_flag); | 1590   EXPECT_TRUE(visitor_.header_->fec_flag); | 
| 1594   EXPECT_TRUE(visitor_.header_->entropy_flag); | 1591   EXPECT_TRUE(visitor_.header_->entropy_flag); | 
| 1595   EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | 1592   EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | 
| 1596   EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 1593   EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 
| 1597   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1594   EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 1598   EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1595   EXPECT_EQ(0u, visitor_.header_->fec_group); | 
| 1599 | 1596 | 
| 1600   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1597   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1601   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1598   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1602   EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1599   EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1603   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1600   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1604   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1601   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1605   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1602   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1606 } | 1603 } | 
| 1607 | 1604 | 
| 1608 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 1605 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 
| 1609   // clang-format off | 1606   // clang-format off | 
| 1610   unsigned char packet[] = { | 1607   unsigned char packet[] = { | 
| 1611     // public flags (8 byte connection_id) | 1608     // public flags (8 byte connection_id) | 
| 1612     0x3C, | 1609     0x3C, | 
| 1613     // connection_id | 1610     // connection_id | 
| 1614     0x10, 0x32, 0x54, 0x76, | 1611     0x10, 0x32, 0x54, 0x76, | 
| 1615     0x98, 0xBA, 0xDC, 0xFE, | 1612     0x98, 0xBA, 0xDC, 0xFE, | 
| 1616     // packet number | 1613     // packet number | 
| 1617     0xBC, 0x9A, 0x78, 0x56, | 1614     0xBC, 0x9A, 0x78, 0x56, | 
| 1618     0x12, 0x34, | 1615     0x34, 0x12, | 
| 1619     // private flags (fec group) | 1616     // private flags (fec group) | 
| 1620     0x02, | 1617     0x02, | 
| 1621     // first fec protected packet offset | 1618     // first fec protected packet offset | 
| 1622     0x02, | 1619     0x02, | 
| 1623 | 1620 | 
| 1624     // frame type (stream frame with fin) | 1621     // frame type (stream frame with fin) | 
| 1625     0xFF, | 1622     0xFF, | 
| 1626     // stream id | 1623     // stream id | 
| 1627     0x04, 0x03, 0x02, 0x01, | 1624     0x04, 0x03, 0x02, 0x01, | 
| 1628     // offset | 1625     // offset | 
| 1629     0x54, 0x76, 0x10, 0x32, | 1626     0x54, 0x76, 0x10, 0x32, | 
| 1630     0xDC, 0xFE, 0x98, 0xBA, | 1627     0xDC, 0xFE, 0x98, 0xBA, | 
| 1631     // data length | 1628     // data length | 
| 1632     0x0c, 0x00, | 1629     0x0c, 0x00, | 
| 1633     // data | 1630     // data | 
| 1634     'h',  'e',  'l',  'l', | 1631     'h',  'e',  'l',  'l', | 
| 1635     'o',  ' ',  'w',  'o', | 1632     'o',  ' ',  'w',  'o', | 
| 1636     'r',  'l',  'd',  '!', | 1633     'r',  'l',  'd',  '!', | 
| 1637   }; | 1634   }; | 
| 1638   // clang-format on | 1635   // clang-format on | 
| 1639 | 1636 | 
| 1640   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1637   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 1641   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1638   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1642 | 1639 | 
| 1643   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1640   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1644   ASSERT_TRUE(visitor_.header_.get()); | 1641   ASSERT_TRUE(visitor_.header_.get()); | 
| 1645   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1642   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1646   EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1643   EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 
| 1647   EXPECT_EQ(UINT64_C(0x341256789ABA), visitor_.header_->fec_group); | 1644   EXPECT_EQ(kPacketNumber - 2, visitor_.header_->fec_group); | 
| 1648   const size_t fec_offset = GetStartOfFecProtectedData( | 1645   const size_t fec_offset = GetStartOfFecProtectedData( | 
| 1649       PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER); | 1646       PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER); | 
| 1650   EXPECT_EQ( | 1647   EXPECT_EQ( | 
| 1651       string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 1648       string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 
| 1652       visitor_.fec_protected_payload_); | 1649       visitor_.fec_protected_payload_); | 
| 1653 | 1650 | 
| 1654   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1651   ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 
| 1655   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1652   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 1656   EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1653   EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 
| 1657   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1654   EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 
| 1658   EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1655   EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 
| 1659   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1656   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 
| 1660 } | 1657 } | 
| 1661 | 1658 | 
| 1662 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1659 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 
| 1663   // clang-format off | 1660   // clang-format off | 
| 1664   unsigned char packet[] = { | 1661   unsigned char packet[] = { | 
| 1665     // public flags (8 byte connection_id) | 1662     // public flags (8 byte connection_id) | 
| 1666     0x3C, | 1663     0x3C, | 
| 1667     // connection_id | 1664     // connection_id | 
| 1668     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1665     0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1705   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1702   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1706 | 1703 | 
| 1707   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1704   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1708   ASSERT_TRUE(visitor_.header_.get()); | 1705   ASSERT_TRUE(visitor_.header_.get()); | 
| 1709   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1706   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1710 | 1707 | 
| 1711   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1708   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 1712   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1709   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 1713   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1710   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 
| 1714   EXPECT_EQ(0xBA, frame.entropy_hash); | 1711   EXPECT_EQ(0xBA, frame.entropy_hash); | 
| 1715   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1712   EXPECT_EQ(kLargestObserved, frame.largest_observed); | 
| 1716   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1713   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 
| 1717   ASSERT_EQ(2u, frame.received_packet_times.size()); | 1714   ASSERT_EQ(2u, frame.received_packet_times.size()); | 
| 1718   EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1715   EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 
| 1719 | 1716 | 
| 1720   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1717   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 
| 1721   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1718   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 
| 1722       kQuicEntropyHashSize; | 1719       kQuicEntropyHashSize; | 
| 1723   const size_t kMissingDeltaTimeOffset = | 1720   const size_t kMissingDeltaTimeOffset = | 
| 1724       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1721       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 
| 1725   const size_t kNumTimestampsOffset = | 1722   const size_t kNumTimestampsOffset = | 
| 1726       kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1723       kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 
| 1727   const size_t kTimestampDeltaLargestObserved1 = | 1724   const size_t kTimestampDeltaLargestObserved1 = | 
| 1728       kNumTimestampsOffset + kQuicNumTimestampsSize; | 1725       kNumTimestampsOffset + kQuicNumTimestampsSize; | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1821   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1818   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1822 | 1819 | 
| 1823   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1820   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1824   ASSERT_TRUE(visitor_.header_.get()); | 1821   ASSERT_TRUE(visitor_.header_.get()); | 
| 1825   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1822   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1826 | 1823 | 
| 1827   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1824   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 1828   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1825   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 1829   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1826   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 
| 1830   EXPECT_EQ(0xBA, frame.entropy_hash); | 1827   EXPECT_EQ(0xBA, frame.entropy_hash); | 
| 1831   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1828   EXPECT_EQ(kLargestObserved, frame.largest_observed); | 
| 1832   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1829   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 
| 1833   ASSERT_EQ(1u, frame.received_packet_times.size()); | 1830   ASSERT_EQ(1u, frame.received_packet_times.size()); | 
| 1834   EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1831   EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 
| 1835 | 1832 | 
| 1836   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1833   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 
| 1837   const size_t kLargestObservedOffset = | 1834   const size_t kLargestObservedOffset = | 
| 1838       kReceivedEntropyOffset + kQuicEntropyHashSize; | 1835       kReceivedEntropyOffset + kQuicEntropyHashSize; | 
| 1839   const size_t kMissingDeltaTimeOffset = | 1836   const size_t kMissingDeltaTimeOffset = | 
| 1840       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1837       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 
| 1841   const size_t kNumTimestampsOffset = | 1838   const size_t kNumTimestampsOffset = | 
| 1842       kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1839       kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 
| 1843   const size_t kTimestampDeltaLargestObserved = | 1840   const size_t kTimestampDeltaLargestObserved = | 
| 1844       kNumTimestampsOffset + kQuicNumTimestampsSize; | 1841       kNumTimestampsOffset + kQuicNumTimestampsSize; | 
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1923   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1920   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 1924 | 1921 | 
| 1925   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1922   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 1926   ASSERT_TRUE(visitor_.header_.get()); | 1923   ASSERT_TRUE(visitor_.header_.get()); | 
| 1927   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1924   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 1928 | 1925 | 
| 1929   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1926   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 1930   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1927   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 1931   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1928   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 
| 1932   EXPECT_EQ(0xBA, frame.entropy_hash); | 1929   EXPECT_EQ(0xBA, frame.entropy_hash); | 
| 1933   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1930   EXPECT_EQ(kLargestObserved, frame.largest_observed); | 
| 1934   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1931   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 
| 1935   EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1932   EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 
| 1936 | 1933 | 
| 1937   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1934   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 
| 1938   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1935   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 
| 1939       kQuicEntropyHashSize; | 1936       kQuicEntropyHashSize; | 
| 1940   const size_t kMissingDeltaTimeOffset = | 1937   const size_t kMissingDeltaTimeOffset = | 
| 1941       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1938       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 
| 1942   const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1939   const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 
| 1943       kQuicDeltaTimeLargestObservedSize; | 1940       kQuicDeltaTimeLargestObservedSize; | 
| 1944   const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 1941   const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 
| 1945       kQuicNumTimestampsSize; | 1942       kQuicNumTimestampsSize; | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2021   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2018   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2022 | 2019 | 
| 2023   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2020   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2024   ASSERT_TRUE(visitor_.header_.get()); | 2021   ASSERT_TRUE(visitor_.header_.get()); | 
| 2025   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2022   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2026 | 2023 | 
| 2027   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2024   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 2028   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2025   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 2029   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2026   const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 
| 2030   EXPECT_EQ(0xBA, frame.entropy_hash); | 2027   EXPECT_EQ(0xBA, frame.entropy_hash); | 
| 2031   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 2028   EXPECT_EQ(kLargestObserved, frame.largest_observed); | 
| 2032   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 2029   ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 
| 2033   EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 2030   EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 
| 2034 | 2031 | 
| 2035   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2032   const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 
| 2036   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 2033   const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 
| 2037       kQuicEntropyHashSize; | 2034       kQuicEntropyHashSize; | 
| 2038   const size_t kMissingDeltaTimeOffset = | 2035   const size_t kMissingDeltaTimeOffset = | 
| 2039       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2036       kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 
| 2040   const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 2037   const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 
| 2041       kQuicDeltaTimeLargestObservedSize; | 2038       kQuicDeltaTimeLargestObservedSize; | 
| 2042   const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 2039   const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 
| 2043       kQuicNumTimestampsSize; | 2040       kQuicNumTimestampsSize; | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2113   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2110   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2114 | 2111 | 
| 2115   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2112   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2116   ASSERT_TRUE(visitor_.header_.get()); | 2113   ASSERT_TRUE(visitor_.header_.get()); | 
| 2117   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2114   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2118 | 2115 | 
| 2119   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2116   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 2120   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2117   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 2121   QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2118   QuicAckFrame* frame = visitor_.ack_frames_[0]; | 
| 2122   EXPECT_EQ(0xBA, frame->entropy_hash); | 2119   EXPECT_EQ(0xBA, frame->entropy_hash); | 
| 2123   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); | 2120   EXPECT_EQ(kLargestObserved, frame->largest_observed); | 
| 2124   ASSERT_TRUE(frame->missing_packets.Empty()); | 2121   ASSERT_TRUE(frame->missing_packets.Empty()); | 
| 2125 | 2122 | 
| 2126   // Verify that the packet re-serializes identically. | 2123   // Verify that the packet re-serializes identically. | 
| 2127   QuicFrames frames; | 2124   QuicFrames frames; | 
| 2128   frames.push_back(QuicFrame(frame)); | 2125   frames.push_back(QuicFrame(frame)); | 
| 2129   scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2126   scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 
| 2130   ASSERT_TRUE(data != nullptr); | 2127   ASSERT_TRUE(data != nullptr); | 
| 2131 | 2128 | 
| 2132   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2129   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 2133                                       data->length(), AsChars(packet), | 2130                                       data->length(), AsChars(packet), | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2178   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2175   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2179 | 2176 | 
| 2180   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2177   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2181   ASSERT_TRUE(visitor_.header_.get()); | 2178   ASSERT_TRUE(visitor_.header_.get()); | 
| 2182   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2179   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2183 | 2180 | 
| 2184   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2181   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 2185   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2182   ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 
| 2186   QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2183   QuicAckFrame* frame = visitor_.ack_frames_[0]; | 
| 2187   EXPECT_EQ(0xBA, frame->entropy_hash); | 2184   EXPECT_EQ(0xBA, frame->entropy_hash); | 
| 2188   EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); | 2185   EXPECT_EQ(kLargestObserved, frame->largest_observed); | 
| 2189   EXPECT_EQ(0u, frame->latest_revived_packet); | 2186   EXPECT_EQ(0u, frame->latest_revived_packet); | 
| 2190   ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); | 2187   ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); | 
| 2191   EXPECT_EQ(UINT64_C(0x0123456789ABE) - 499, frame->missing_packets.Min()); | 2188   EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min()); | 
| 2192   EXPECT_EQ(UINT64_C(0x0123456789ABE), frame->missing_packets.Max()); | 2189   EXPECT_EQ(kMissingPacket, frame->missing_packets.Max()); | 
| 2193 | 2190 | 
| 2194   // Verify that the packet re-serializes identically. | 2191   // Verify that the packet re-serializes identically. | 
| 2195   QuicFrames frames; | 2192   QuicFrames frames; | 
| 2196   frames.push_back(QuicFrame(frame)); | 2193   frames.push_back(QuicFrame(frame)); | 
| 2197   scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2194   scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 
| 2198   ASSERT_TRUE(data != nullptr); | 2195   ASSERT_TRUE(data != nullptr); | 
| 2199 | 2196 | 
| 2200   test::CompareCharArraysWithHexError("constructed packet", | 2197   test::CompareCharArraysWithHexError("constructed packet", | 
| 2201                                       data->data(), data->length(), | 2198                                       data->data(), data->length(), | 
| 2202                                       AsChars(packet), arraysize(packet)); | 2199                                       AsChars(packet), arraysize(packet)); | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 2231   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2228   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2232 | 2229 | 
| 2233   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2230   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2234   ASSERT_TRUE(visitor_.header_.get()); | 2231   ASSERT_TRUE(visitor_.header_.get()); | 
| 2235   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2232   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2236 | 2233 | 
| 2237   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2234   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 2238   ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); | 2235   ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); | 
| 2239   const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; | 2236   const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; | 
| 2240   EXPECT_EQ(0xAB, frame.entropy_hash); | 2237   EXPECT_EQ(0xAB, frame.entropy_hash); | 
| 2241   EXPECT_EQ(UINT64_C(0x0123456789AA0), frame.least_unacked); | 2238   EXPECT_EQ(kLeastUnacked, frame.least_unacked); | 
| 2242 | 2239 | 
| 2243   const size_t kSentEntropyOffset = kQuicFrameTypeSize; | 2240   const size_t kSentEntropyOffset = kQuicFrameTypeSize; | 
| 2244   const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | 2241   const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | 
| 2245   const size_t frame_size = 7; | 2242   const size_t frame_size = 7; | 
| 2246   for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2243   for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 
| 2247     string expected_error; | 2244     string expected_error; | 
| 2248     if (i < kLeastUnackedOffset) { | 2245     if (i < kLeastUnackedOffset) { | 
| 2249       expected_error = "Unable to read entropy hash for sent packets."; | 2246       expected_error = "Unable to read entropy hash for sent packets."; | 
| 2250     } else { | 2247     } else { | 
| 2251       expected_error = "Unable to read least unacked delta."; | 2248       expected_error = "Unable to read least unacked delta."; | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 2271     0x34, 0x12, | 2268     0x34, 0x12, | 
| 2272     // private flags | 2269     // private flags | 
| 2273     0x00, | 2270     0x00, | 
| 2274 | 2271 | 
| 2275     // frame type (rst stream frame) | 2272     // frame type (rst stream frame) | 
| 2276     0x01, | 2273     0x01, | 
| 2277     // stream id | 2274     // stream id | 
| 2278     0x04, 0x03, 0x02, 0x01, | 2275     0x04, 0x03, 0x02, 0x01, | 
| 2279 | 2276 | 
| 2280     // sent byte offset | 2277     // sent byte offset | 
| 2281     0x01, 0x02, 0x03, 0x04, | 2278     0x54, 0x76, 0x10, 0x32, | 
| 2282     0x05, 0x06, 0x07, 0x08, | 2279     0xDC, 0xFE, 0x98, 0xBA, | 
| 2283 | 2280 | 
| 2284     // error code | 2281     // error code | 
| 2285     0x01, 0x00, 0x00, 0x00, | 2282     0x01, 0x00, 0x00, 0x00, | 
| 2286   }; | 2283   }; | 
| 2287   // clang-format on | 2284   // clang-format on | 
| 2288 | 2285 | 
| 2289   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2286   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2290   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2287   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2291 | 2288 | 
| 2292   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2289   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2293   ASSERT_TRUE(visitor_.header_.get()); | 2290   ASSERT_TRUE(visitor_.header_.get()); | 
| 2294   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2291   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2295 | 2292 | 
| 2296   EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); | 2293   EXPECT_EQ(kStreamId, visitor_.rst_stream_frame_.stream_id); | 
| 2297   EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2294   EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 
| 2298   EXPECT_EQ(UINT64_C(0x0807060504030201), | 2295   EXPECT_EQ(kStreamOffset, visitor_.rst_stream_frame_.byte_offset); | 
| 2299             visitor_.rst_stream_frame_.byte_offset); |  | 
| 2300 | 2296 | 
| 2301   // Now test framing boundaries. | 2297   // Now test framing boundaries. | 
| 2302   for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); | 2298   for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); | 
| 2303        ++i) { | 2299        ++i) { | 
| 2304     string expected_error; | 2300     string expected_error; | 
| 2305     if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2301     if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 
| 2306       expected_error = "Unable to read stream_id."; | 2302       expected_error = "Unable to read stream_id."; | 
| 2307     } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2303     } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 
| 2308                        kQuicMaxStreamOffsetSize) { | 2304                        kQuicMaxStreamOffsetSize) { | 
| 2309       expected_error = "Unable to read rst stream sent byte offset."; | 2305       expected_error = "Unable to read rst stream sent byte offset."; | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2409   }; | 2405   }; | 
| 2410   // clang-format on | 2406   // clang-format on | 
| 2411 | 2407 | 
| 2412   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2408   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2413   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2409   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2414 | 2410 | 
| 2415   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2411   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2416   ASSERT_TRUE(visitor_.header_.get()); | 2412   ASSERT_TRUE(visitor_.header_.get()); | 
| 2417   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2413   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2418 | 2414 | 
| 2419   EXPECT_EQ(UINT64_C(0x01020304), visitor_.goaway_frame_.last_good_stream_id); | 2415   EXPECT_EQ(kStreamId, visitor_.goaway_frame_.last_good_stream_id); | 
| 2420   EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 2416   EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 
| 2421   EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 2417   EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 
| 2422 | 2418 | 
| 2423   const size_t reason_size = arraysize("because I can") - 1; | 2419   const size_t reason_size = arraysize("because I can") - 1; | 
| 2424   // Now test framing boundaries. | 2420   // Now test framing boundaries. | 
| 2425   for (size_t i = kQuicFrameTypeSize; | 2421   for (size_t i = kQuicFrameTypeSize; | 
| 2426        i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 2422        i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 
| 2427     string expected_error; | 2423     string expected_error; | 
| 2428     if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2424     if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 
| 2429       expected_error = "Unable to read go away error code."; | 2425       expected_error = "Unable to read go away error code."; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 2453     0xBC, 0x9A, 0x78, 0x56, | 2449     0xBC, 0x9A, 0x78, 0x56, | 
| 2454     0x34, 0x12, | 2450     0x34, 0x12, | 
| 2455     // private flags | 2451     // private flags | 
| 2456     0x00, | 2452     0x00, | 
| 2457 | 2453 | 
| 2458     // frame type (window update frame) | 2454     // frame type (window update frame) | 
| 2459     0x04, | 2455     0x04, | 
| 2460     // stream id | 2456     // stream id | 
| 2461     0x04, 0x03, 0x02, 0x01, | 2457     0x04, 0x03, 0x02, 0x01, | 
| 2462     // byte offset | 2458     // byte offset | 
| 2463     0x05, 0x06, 0x07, 0x08, | 2459     0x54, 0x76, 0x10, 0x32, | 
| 2464     0x09, 0x0a, 0x0b, 0x0c, | 2460     0xDC, 0xFE, 0x98, 0xBA, | 
| 2465   }; | 2461   }; | 
| 2466   // clang-format on | 2462   // clang-format on | 
| 2467 | 2463 | 
| 2468   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2464   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2469 | 2465 | 
| 2470   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2466   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2471 | 2467 | 
| 2472   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2468   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2473   ASSERT_TRUE(visitor_.header_.get()); | 2469   ASSERT_TRUE(visitor_.header_.get()); | 
| 2474   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2470   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2475 | 2471 | 
| 2476   EXPECT_EQ(UINT64_C(0x01020304), visitor_.window_update_frame_.stream_id); | 2472   EXPECT_EQ(kStreamId, visitor_.window_update_frame_.stream_id); | 
| 2477   EXPECT_EQ(UINT64_C(0x0c0b0a0908070605), | 2473   EXPECT_EQ(kStreamOffset, visitor_.window_update_frame_.byte_offset); | 
| 2478             visitor_.window_update_frame_.byte_offset); |  | 
| 2479 | 2474 | 
| 2480   // Now test framing boundaries. | 2475   // Now test framing boundaries. | 
| 2481   for (size_t i = kQuicFrameTypeSize; | 2476   for (size_t i = kQuicFrameTypeSize; | 
| 2482        i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2477        i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 
| 2483     string expected_error; | 2478     string expected_error; | 
| 2484     if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2479     if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 
| 2485       expected_error = "Unable to read stream_id."; | 2480       expected_error = "Unable to read stream_id."; | 
| 2486     } else { | 2481     } else { | 
| 2487       expected_error = "Unable to read window byte_offset."; | 2482       expected_error = "Unable to read window byte_offset."; | 
| 2488     } | 2483     } | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 2516   // clang-format on | 2511   // clang-format on | 
| 2517 | 2512 | 
| 2518   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2513   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2519 | 2514 | 
| 2520   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2515   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2521 | 2516 | 
| 2522   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2517   EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2523   ASSERT_TRUE(visitor_.header_.get()); | 2518   ASSERT_TRUE(visitor_.header_.get()); | 
| 2524   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2519   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2525 | 2520 | 
| 2526   EXPECT_EQ(UINT64_C(0x01020304), visitor_.blocked_frame_.stream_id); | 2521   EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); | 
| 2527 | 2522 | 
| 2528   // Now test framing boundaries. | 2523   // Now test framing boundaries. | 
| 2529   for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2524   for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 
| 2530        ++i) { | 2525        ++i) { | 
| 2531     string expected_error = "Unable to read stream_id."; | 2526     string expected_error = "Unable to read stream_id."; | 
| 2532     CheckProcessingFails( | 2527     CheckProcessingFails( | 
| 2533         packet, | 2528         packet, | 
| 2534         i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2529         i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 
| 2535                                 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 2530                                 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 
| 2536         expected_error, QUIC_INVALID_BLOCKED_DATA); | 2531         expected_error, QUIC_INVALID_BLOCKED_DATA); | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2594     // rejected packet number | 2589     // rejected packet number | 
| 2595     0xBC, 0x9A, 0x78, 0x56, | 2590     0xBC, 0x9A, 0x78, 0x56, | 
| 2596     0x34, 0x12, 0x00, 0x00, | 2591     0x34, 0x12, 0x00, 0x00, | 
| 2597   }; | 2592   }; | 
| 2598   // clang-format on | 2593   // clang-format on | 
| 2599 | 2594 | 
| 2600   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2595   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2601   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2596   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2602   ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2597   ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2603   ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2598   ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 
| 2604   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 2599   EXPECT_EQ(kConnectionId, | 
| 2605             visitor_.public_reset_packet_->public_header.connection_id); | 2600             visitor_.public_reset_packet_->public_header.connection_id); | 
| 2606   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2601   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 
| 2607   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2602   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 
| 2608   EXPECT_EQ(UINT64_C(0xABCDEF0123456789), | 2603   EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 
| 2609             visitor_.public_reset_packet_->nonce_proof); | 2604   EXPECT_EQ(kPacketNumber, | 
| 2610   EXPECT_EQ(UINT64_C(0x123456789ABC), |  | 
| 2611             visitor_.public_reset_packet_->rejected_packet_number); | 2605             visitor_.public_reset_packet_->rejected_packet_number); | 
| 2612   EXPECT_TRUE( | 2606   EXPECT_TRUE( | 
| 2613       visitor_.public_reset_packet_->client_address.address().empty()); | 2607       visitor_.public_reset_packet_->client_address.address().empty()); | 
| 2614 | 2608 | 
| 2615   // Now test framing boundaries. | 2609   // Now test framing boundaries. | 
| 2616   for (size_t i = 0; i < arraysize(packet); ++i) { | 2610   for (size_t i = 0; i < arraysize(packet); ++i) { | 
| 2617     string expected_error; | 2611     string expected_error; | 
| 2618     DVLOG(1) << "iteration: " << i; | 2612     DVLOG(1) << "iteration: " << i; | 
| 2619     if (i < kConnectionIdOffset) { | 2613     if (i < kConnectionIdOffset) { | 
| 2620       expected_error = "Unable to read public flags."; | 2614       expected_error = "Unable to read public flags."; | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2702     0x02, 0x00, | 2696     0x02, 0x00, | 
| 2703     0x04, 0x1F, 0xC6, 0x2C, | 2697     0x04, 0x1F, 0xC6, 0x2C, | 
| 2704     0xBB, 0x01, | 2698     0xBB, 0x01, | 
| 2705   }; | 2699   }; | 
| 2706   // clang-format on | 2700   // clang-format on | 
| 2707 | 2701 | 
| 2708   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2702   QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 
| 2709   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2703   EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 
| 2710   ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2704   ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 
| 2711   ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2705   ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 
| 2712   EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 2706   EXPECT_EQ(kConnectionId, | 
| 2713             visitor_.public_reset_packet_->public_header.connection_id); | 2707             visitor_.public_reset_packet_->public_header.connection_id); | 
| 2714   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2708   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 
| 2715   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2709   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 
| 2716   EXPECT_EQ(UINT64_C(0xABCDEF0123456789), | 2710   EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 
| 2717             visitor_.public_reset_packet_->nonce_proof); | 2711   EXPECT_EQ(kPacketNumber, | 
| 2718   EXPECT_EQ(UINT64_C(0x123456789ABC), |  | 
| 2719             visitor_.public_reset_packet_->rejected_packet_number); | 2712             visitor_.public_reset_packet_->rejected_packet_number); | 
| 2720   EXPECT_EQ("4.31.198.44", | 2713   EXPECT_EQ("4.31.198.44", | 
| 2721             IPAddressToString(visitor_.public_reset_packet_-> | 2714             IPAddressToString(visitor_.public_reset_packet_-> | 
| 2722                 client_address.address())); | 2715                 client_address.address())); | 
| 2723   EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 2716   EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 
| 2724 | 2717 | 
| 2725   // Now test framing boundaries. | 2718   // Now test framing boundaries. | 
| 2726   for (size_t i = 0; i < arraysize(packet); ++i) { | 2719   for (size_t i = 0; i < arraysize(packet); ++i) { | 
| 2727     string expected_error; | 2720     string expected_error; | 
| 2728     DVLOG(1) << "iteration: " << i; | 2721     DVLOG(1) << "iteration: " << i; | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2812   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2805   EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 
| 2813 | 2806 | 
| 2814   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2807   EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 
| 2815   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 2808   EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 
| 2816   ASSERT_EQ(1, visitor_.fec_count_); | 2809   ASSERT_EQ(1, visitor_.fec_count_); | 
| 2817   EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); | 2810   EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); | 
| 2818 } | 2811 } | 
| 2819 | 2812 | 
| 2820 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2813 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 
| 2821   QuicPacketHeader header; | 2814   QuicPacketHeader header; | 
| 2822   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2815   header.public_header.connection_id = kConnectionId; | 
| 2823   header.public_header.reset_flag = false; | 2816   header.public_header.reset_flag = false; | 
| 2824   header.public_header.version_flag = false; | 2817   header.public_header.version_flag = false; | 
| 2825   header.fec_flag = false; | 2818   header.fec_flag = false; | 
| 2826   header.entropy_flag = false; | 2819   header.entropy_flag = false; | 
| 2827   header.packet_number = UINT64_C(0x123456789ABC); | 2820   header.packet_number = kPacketNumber; | 
| 2828   header.fec_group = 0; | 2821   header.fec_group = 0; | 
| 2829 | 2822 | 
| 2830   QuicPaddingFrame padding_frame; | 2823   QuicPaddingFrame padding_frame; | 
| 2831 | 2824 | 
| 2832   QuicFrames frames; | 2825   QuicFrames frames; | 
| 2833   frames.push_back(QuicFrame(padding_frame)); | 2826   frames.push_back(QuicFrame(padding_frame)); | 
| 2834 | 2827 | 
| 2835   // clang-format off | 2828   // clang-format off | 
| 2836   unsigned char packet[kMaxPacketSize] = { | 2829   unsigned char packet[kMaxPacketSize] = { | 
| 2837     // public flags (8 byte connection_id) | 2830     // public flags (8 byte connection_id) | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 2860   ASSERT_TRUE(data != nullptr); | 2853   ASSERT_TRUE(data != nullptr); | 
| 2861 | 2854 | 
| 2862   test::CompareCharArraysWithHexError("constructed packet", | 2855   test::CompareCharArraysWithHexError("constructed packet", | 
| 2863                                       data->data(), data->length(), | 2856                                       data->data(), data->length(), | 
| 2864                                       AsChars(packet), | 2857                                       AsChars(packet), | 
| 2865                                       arraysize(packet)); | 2858                                       arraysize(packet)); | 
| 2866 } | 2859 } | 
| 2867 | 2860 | 
| 2868 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 2861 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 
| 2869   QuicPacketHeader header; | 2862   QuicPacketHeader header; | 
| 2870   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2863   header.public_header.connection_id = kConnectionId; | 
| 2871   header.public_header.reset_flag = false; | 2864   header.public_header.reset_flag = false; | 
| 2872   header.public_header.version_flag = false; | 2865   header.public_header.version_flag = false; | 
| 2873   header.fec_flag = false; | 2866   header.fec_flag = false; | 
| 2874   header.entropy_flag = false; | 2867   header.entropy_flag = false; | 
| 2875   header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 2868   header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 
| 2876   header.packet_number = UINT64_C(0x123456789ABC); | 2869   header.packet_number = kPacketNumber; | 
| 2877   header.fec_group = 0; | 2870   header.fec_group = 0; | 
| 2878 | 2871 | 
| 2879   QuicPaddingFrame padding_frame; | 2872   QuicPaddingFrame padding_frame; | 
| 2880 | 2873 | 
| 2881   QuicFrames frames; | 2874   QuicFrames frames; | 
| 2882   frames.push_back(QuicFrame(padding_frame)); | 2875   frames.push_back(QuicFrame(padding_frame)); | 
| 2883 | 2876 | 
| 2884   // clang-format off | 2877   // clang-format off | 
| 2885   unsigned char packet[kMaxPacketSize] = { | 2878   unsigned char packet[kMaxPacketSize] = { | 
| 2886     // public flags (8 byte connection_id and 4 byte packet number) | 2879     // public flags (8 byte connection_id and 4 byte packet number) | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 2908   ASSERT_TRUE(data != nullptr); | 2901   ASSERT_TRUE(data != nullptr); | 
| 2909 | 2902 | 
| 2910   test::CompareCharArraysWithHexError("constructed packet", | 2903   test::CompareCharArraysWithHexError("constructed packet", | 
| 2911                                       data->data(), data->length(), | 2904                                       data->data(), data->length(), | 
| 2912                                       AsChars(packet), | 2905                                       AsChars(packet), | 
| 2913                                       arraysize(packet)); | 2906                                       arraysize(packet)); | 
| 2914 } | 2907 } | 
| 2915 | 2908 | 
| 2916 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 2909 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 
| 2917   QuicPacketHeader header; | 2910   QuicPacketHeader header; | 
| 2918   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2911   header.public_header.connection_id = kConnectionId; | 
| 2919   header.public_header.reset_flag = false; | 2912   header.public_header.reset_flag = false; | 
| 2920   header.public_header.version_flag = false; | 2913   header.public_header.version_flag = false; | 
| 2921   header.fec_flag = false; | 2914   header.fec_flag = false; | 
| 2922   header.entropy_flag = false; | 2915   header.entropy_flag = false; | 
| 2923   header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 2916   header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 
| 2924   header.packet_number = UINT64_C(0x123456789ABC); | 2917   header.packet_number = kPacketNumber; | 
| 2925   header.fec_group = 0; | 2918   header.fec_group = 0; | 
| 2926 | 2919 | 
| 2927   QuicPaddingFrame padding_frame; | 2920   QuicPaddingFrame padding_frame; | 
| 2928 | 2921 | 
| 2929   QuicFrames frames; | 2922   QuicFrames frames; | 
| 2930   frames.push_back(QuicFrame(padding_frame)); | 2923   frames.push_back(QuicFrame(padding_frame)); | 
| 2931 | 2924 | 
| 2932   // clang-format off | 2925   // clang-format off | 
| 2933   unsigned char packet[kMaxPacketSize] = { | 2926   unsigned char packet[kMaxPacketSize] = { | 
| 2934     // public flags (8 byte connection_id and 2 byte packet number) | 2927     // public flags (8 byte connection_id and 2 byte packet number) | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 2956   ASSERT_TRUE(data != nullptr); | 2949   ASSERT_TRUE(data != nullptr); | 
| 2957 | 2950 | 
| 2958   test::CompareCharArraysWithHexError("constructed packet", | 2951   test::CompareCharArraysWithHexError("constructed packet", | 
| 2959                                       data->data(), data->length(), | 2952                                       data->data(), data->length(), | 
| 2960                                       AsChars(packet), | 2953                                       AsChars(packet), | 
| 2961                                       arraysize(packet)); | 2954                                       arraysize(packet)); | 
| 2962 } | 2955 } | 
| 2963 | 2956 | 
| 2964 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 2957 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 
| 2965   QuicPacketHeader header; | 2958   QuicPacketHeader header; | 
| 2966   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2959   header.public_header.connection_id = kConnectionId; | 
| 2967   header.public_header.reset_flag = false; | 2960   header.public_header.reset_flag = false; | 
| 2968   header.public_header.version_flag = false; | 2961   header.public_header.version_flag = false; | 
| 2969   header.fec_flag = false; | 2962   header.fec_flag = false; | 
| 2970   header.entropy_flag = false; | 2963   header.entropy_flag = false; | 
| 2971   header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 2964   header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 
| 2972   header.packet_number = UINT64_C(0x123456789ABC); | 2965   header.packet_number = kPacketNumber; | 
| 2973   header.fec_group = 0; | 2966   header.fec_group = 0; | 
| 2974 | 2967 | 
| 2975   QuicPaddingFrame padding_frame; | 2968   QuicPaddingFrame padding_frame; | 
| 2976 | 2969 | 
| 2977   QuicFrames frames; | 2970   QuicFrames frames; | 
| 2978   frames.push_back(QuicFrame(padding_frame)); | 2971   frames.push_back(QuicFrame(padding_frame)); | 
| 2979 | 2972 | 
| 2980   // clang-format off | 2973   // clang-format off | 
| 2981   unsigned char packet[kMaxPacketSize] = { | 2974   unsigned char packet[kMaxPacketSize] = { | 
| 2982     // public flags (8 byte connection_id and 1 byte packet number) | 2975     // public flags (8 byte connection_id and 1 byte packet number) | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 3004   ASSERT_TRUE(data != nullptr); | 2997   ASSERT_TRUE(data != nullptr); | 
| 3005 | 2998 | 
| 3006   test::CompareCharArraysWithHexError("constructed packet", | 2999   test::CompareCharArraysWithHexError("constructed packet", | 
| 3007                                       data->data(), data->length(), | 3000                                       data->data(), data->length(), | 
| 3008                                       AsChars(packet), | 3001                                       AsChars(packet), | 
| 3009                                       arraysize(packet)); | 3002                                       arraysize(packet)); | 
| 3010 } | 3003 } | 
| 3011 | 3004 | 
| 3012 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 3005 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 
| 3013   QuicPacketHeader header; | 3006   QuicPacketHeader header; | 
| 3014   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3007   header.public_header.connection_id = kConnectionId; | 
| 3015   header.public_header.reset_flag = false; | 3008   header.public_header.reset_flag = false; | 
| 3016   header.public_header.version_flag = false; | 3009   header.public_header.version_flag = false; | 
| 3017   header.fec_flag = false; | 3010   header.fec_flag = false; | 
| 3018   header.entropy_flag = true; | 3011   header.entropy_flag = true; | 
| 3019   header.packet_number = UINT64_C(0x77123456789ABC); | 3012   header.packet_number = kPacketNumber; | 
| 3020   header.fec_group = 0; | 3013   header.fec_group = 0; | 
| 3021 | 3014 | 
| 3022   QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3015   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 
| 3023                                StringPiece("hello world!")); | 3016                                StringPiece("hello world!")); | 
| 3024 | 3017 | 
| 3025   QuicFrames frames; | 3018   QuicFrames frames; | 
| 3026   frames.push_back(QuicFrame(&stream_frame)); | 3019   frames.push_back(QuicFrame(&stream_frame)); | 
| 3027 | 3020 | 
| 3028   // clang-format off | 3021   // clang-format off | 
| 3029   unsigned char packet[] = { | 3022   unsigned char packet[] = { | 
| 3030     // public flags (8 byte connection_id) | 3023     // public flags (8 byte connection_id) | 
| 3031     0x3C, | 3024     0x3C, | 
| 3032     // connection_id | 3025     // connection_id | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 3055   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3048   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3056   ASSERT_TRUE(data != nullptr); | 3049   ASSERT_TRUE(data != nullptr); | 
| 3057 | 3050 | 
| 3058   test::CompareCharArraysWithHexError("constructed packet", | 3051   test::CompareCharArraysWithHexError("constructed packet", | 
| 3059                                       data->data(), data->length(), | 3052                                       data->data(), data->length(), | 
| 3060                                       AsChars(packet), arraysize(packet)); | 3053                                       AsChars(packet), arraysize(packet)); | 
| 3061 } | 3054 } | 
| 3062 | 3055 | 
| 3063 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | 3056 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | 
| 3064   QuicPacketHeader header; | 3057   QuicPacketHeader header; | 
| 3065   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3058   header.public_header.connection_id = kConnectionId; | 
| 3066   header.public_header.reset_flag = false; | 3059   header.public_header.reset_flag = false; | 
| 3067   header.public_header.version_flag = false; | 3060   header.public_header.version_flag = false; | 
| 3068   header.fec_flag = false; | 3061   header.fec_flag = false; | 
| 3069   header.entropy_flag = true; | 3062   header.entropy_flag = true; | 
| 3070   header.packet_number = UINT64_C(0x77123456789ABC); | 3063   header.packet_number = kPacketNumber; | 
| 3071   header.is_in_fec_group = IN_FEC_GROUP; | 3064   header.is_in_fec_group = IN_FEC_GROUP; | 
| 3072   header.fec_group = UINT64_C(0x77123456789ABC); | 3065   header.fec_group = kPacketNumber; | 
| 3073 | 3066 | 
| 3074   QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3067   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 
| 3075                                StringPiece("hello world!")); | 3068                                StringPiece("hello world!")); | 
| 3076 | 3069 | 
| 3077   QuicFrames frames; | 3070   QuicFrames frames; | 
| 3078   frames.push_back(QuicFrame(&stream_frame)); | 3071   frames.push_back(QuicFrame(&stream_frame)); | 
| 3079   // clang-format off | 3072   // clang-format off | 
| 3080   unsigned char packet[] = { | 3073   unsigned char packet[] = { | 
| 3081       // public flags (8 byte connection_id) | 3074       // public flags (8 byte connection_id) | 
| 3082       0x3C, | 3075       0x3C, | 
| 3083       // connection_id | 3076       // connection_id | 
| 3084       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3077       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 3104   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3097   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3105   ASSERT_TRUE(data != nullptr); | 3098   ASSERT_TRUE(data != nullptr); | 
| 3106 | 3099 | 
| 3107   test::CompareCharArraysWithHexError("constructed packet", | 3100   test::CompareCharArraysWithHexError("constructed packet", | 
| 3108                                       data->data(), data->length(), | 3101                                       data->data(), data->length(), | 
| 3109                                       AsChars(packet), arraysize(packet)); | 3102                                       AsChars(packet), arraysize(packet)); | 
| 3110 } | 3103 } | 
| 3111 | 3104 | 
| 3112 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 
| 3113   QuicPacketHeader header; | 3106   QuicPacketHeader header; | 
| 3114   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3107   header.public_header.connection_id = kConnectionId; | 
| 3115   header.public_header.reset_flag = false; | 3108   header.public_header.reset_flag = false; | 
| 3116   header.public_header.version_flag = true; | 3109   header.public_header.version_flag = true; | 
| 3117   header.fec_flag = false; | 3110   header.fec_flag = false; | 
| 3118   header.entropy_flag = true; | 3111   header.entropy_flag = true; | 
| 3119   header.packet_number = UINT64_C(0x77123456789ABC); | 3112   header.packet_number = kPacketNumber; | 
| 3120   header.fec_group = 0; | 3113   header.fec_group = 0; | 
| 3121 | 3114 | 
| 3122   QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3115   QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 
| 3123                                StringPiece("hello world!")); | 3116                                StringPiece("hello world!")); | 
| 3124 | 3117 | 
| 3125   QuicFrames frames; | 3118   QuicFrames frames; | 
| 3126   frames.push_back(QuicFrame(&stream_frame)); | 3119   frames.push_back(QuicFrame(&stream_frame)); | 
| 3127 | 3120 | 
| 3128   // clang-format off | 3121   // clang-format off | 
| 3129   unsigned char packet[] = { | 3122   unsigned char packet[] = { | 
| 3130       // public flags (version, 8 byte connection_id) | 3123       // public flags (version, 8 byte connection_id) | 
| 3131       0x3D, | 3124       0x3D, | 
| 3132       // connection_id | 3125       // connection_id | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3188   QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3181   QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 
| 3189   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3182   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3190   ASSERT_TRUE(data != nullptr); | 3183   ASSERT_TRUE(data != nullptr); | 
| 3191 | 3184 | 
| 3192   test::CompareCharArraysWithHexError("constructed packet", | 3185   test::CompareCharArraysWithHexError("constructed packet", | 
| 3193                                       data->data(), data->length(), | 3186                                       data->data(), data->length(), | 
| 3194                                       AsChars(packet), arraysize(packet)); | 3187                                       AsChars(packet), arraysize(packet)); | 
| 3195 } | 3188 } | 
| 3196 | 3189 | 
| 3197 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 
| 3198   QuicPacketPublicHeader header; |  | 
| 3199   header.connection_id = UINT64_C(0xFEDCBA9876543210); |  | 
| 3200   header.reset_flag = false; |  | 
| 3201   header.version_flag = true; |  | 
| 3202 |  | 
| 3203   // clang-format off | 3191   // clang-format off | 
| 3204   unsigned char packet[] = { | 3192   unsigned char packet[] = { | 
| 3205       // public flags (version, 8 byte connection_id) | 3193       // public flags (version, 8 byte connection_id) | 
| 3206       0x0D, | 3194       0x0D, | 
| 3207       // connection_id | 3195       // connection_id | 
| 3208       0x10, | 3196       0x10, | 
| 3209       0x32, | 3197       0x32, | 
| 3210       0x54, | 3198       0x54, | 
| 3211       0x76, | 3199       0x76, | 
| 3212       0x98, | 3200       0x98, | 
| 3213       0xBA, | 3201       0xBA, | 
| 3214       0xDC, | 3202       0xDC, | 
| 3215       0xFE, | 3203       0xFE, | 
| 3216       // version tag | 3204       // version tag | 
| 3217       'Q', | 3205       'Q', | 
| 3218       '0', | 3206       '0', | 
| 3219       GetQuicVersionDigitTens(), | 3207       GetQuicVersionDigitTens(), | 
| 3220       GetQuicVersionDigitOnes(), | 3208       GetQuicVersionDigitOnes(), | 
| 3221   }; | 3209   }; | 
| 3222   // clang-format on | 3210   // clang-format on | 
| 3223 | 3211 | 
| 3224   QuicVersionVector versions; | 3212   QuicConnectionId connection_id = kConnectionId; | 
| 3225   versions.push_back(GetParam()); | 3213   scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket( | 
| 3226   scoped_ptr<QuicEncryptedPacket> data( | 3214       connection_id, SupportedVersions(GetParam()))); | 
| 3227       framer_.BuildVersionNegotiationPacket(header, versions)); |  | 
| 3228 |  | 
| 3229   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3215   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3230                                       data->length(), AsChars(packet), | 3216                                       data->length(), AsChars(packet), | 
| 3231                                       arraysize(packet)); | 3217                                       arraysize(packet)); | 
| 3232 } | 3218 } | 
| 3233 | 3219 | 
| 3234 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 3220 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 
| 3235   QuicPacketHeader header; | 3221   QuicPacketHeader header; | 
| 3236   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3222   header.public_header.connection_id = kConnectionId; | 
| 3237   header.public_header.reset_flag = false; | 3223   header.public_header.reset_flag = false; | 
| 3238   header.public_header.version_flag = false; | 3224   header.public_header.version_flag = false; | 
| 3239   header.fec_flag = false; | 3225   header.fec_flag = false; | 
| 3240   header.entropy_flag = true; | 3226   header.entropy_flag = true; | 
| 3241   header.packet_number = UINT64_C(0x770123456789AA8); | 3227   header.packet_number = kPacketNumber; | 
| 3242   header.fec_group = 0; | 3228   header.fec_group = 0; | 
| 3243 | 3229 | 
| 3244   QuicAckFrame ack_frame; | 3230   QuicAckFrame ack_frame; | 
| 3245   ack_frame.entropy_hash = 0x43; | 3231   ack_frame.entropy_hash = 0x43; | 
| 3246   ack_frame.largest_observed = UINT64_C(0x770123456789ABF); | 3232   ack_frame.largest_observed = kLargestObserved; | 
| 3247   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3233   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 
| 3248   ack_frame.missing_packets.Add(UINT64_C(0x770123456789ABE)); | 3234   ack_frame.missing_packets.Add(kMissingPacket); | 
| 3249 | 3235 | 
| 3250   QuicFrames frames; | 3236   QuicFrames frames; | 
| 3251   frames.push_back(QuicFrame(&ack_frame)); | 3237   frames.push_back(QuicFrame(&ack_frame)); | 
| 3252 | 3238 | 
| 3253   // clang-format off | 3239   // clang-format off | 
| 3254   unsigned char packet[] = { | 3240   unsigned char packet[] = { | 
| 3255       // public flags (8 byte connection_id) | 3241       // public flags (8 byte connection_id) | 
| 3256       0x3C, | 3242       0x3C, | 
| 3257       // connection_id | 3243       // connection_id | 
| 3258       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3244       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 3259       // packet number | 3245       // packet number | 
| 3260       0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3246       0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 3261       // private flags (entropy) | 3247       // private flags (entropy) | 
| 3262       0x01, | 3248       0x01, | 
| 3263 | 3249 | 
| 3264       // frame type (ack frame) | 3250       // frame type (ack frame) | 
| 3265       // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 3251       // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 
| 3266       0x6C, | 3252       0x6C, | 
| 3267       // entropy hash of all received packets. | 3253       // entropy hash of all received packets. | 
| 3268       0x43, | 3254       0x43, | 
| 3269       // largest observed packet number | 3255       // largest observed packet number | 
| 3270       0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3256       0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 3289   test::CompareCharArraysWithHexError("constructed packet", | 3275   test::CompareCharArraysWithHexError("constructed packet", | 
| 3290                                       data->data(), data->length(), | 3276                                       data->data(), data->length(), | 
| 3291                                       AsChars(packet), arraysize(packet)); | 3277                                       AsChars(packet), arraysize(packet)); | 
| 3292 } | 3278 } | 
| 3293 | 3279 | 
| 3294 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 
| 3295 // revived packets. (In both the large and small packet cases below). | 3281 // revived packets. (In both the large and small packet cases below). | 
| 3296 | 3282 | 
| 3297 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 
| 3298   QuicPacketHeader header; | 3284   QuicPacketHeader header; | 
| 3299   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3285   header.public_header.connection_id = kConnectionId; | 
| 3300   header.public_header.reset_flag = false; | 3286   header.public_header.reset_flag = false; | 
| 3301   header.public_header.version_flag = false; | 3287   header.public_header.version_flag = false; | 
| 3302   header.fec_flag = false; | 3288   header.fec_flag = false; | 
| 3303   header.entropy_flag = true; | 3289   header.entropy_flag = true; | 
| 3304   header.packet_number = UINT64_C(0x770123456789AA8); | 3290   header.packet_number = kPacketNumber; | 
| 3305   header.fec_group = 0; | 3291   header.fec_group = 0; | 
| 3306 | 3292 | 
| 3307   QuicAckFrame ack_frame; | 3293   QuicAckFrame ack_frame; | 
| 3308   // This entropy hash is different from what shows up in the packet below, | 3294   // This entropy hash is different from what shows up in the packet below, | 
| 3309   // since entropy is recomputed by the framer on ack truncation (by | 3295   // since entropy is recomputed by the framer on ack truncation (by | 
| 3310   // TestEntropyCalculator for this test.) | 3296   // TestEntropyCalculator for this test.) | 
| 3311   ack_frame.entropy_hash = 0x43; | 3297   ack_frame.entropy_hash = 0x43; | 
| 3312   ack_frame.largest_observed = 2 * 300; | 3298   ack_frame.largest_observed = 2 * 300; | 
| 3313   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3299   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 
| 3314   for (size_t i = 1; i < 2 * 300; i += 2) { | 3300   for (size_t i = 1; i < 2 * 300; i += 2) { | 
| 3315     ack_frame.missing_packets.Add(i); | 3301     ack_frame.missing_packets.Add(i); | 
| 3316   } | 3302   } | 
| 3317 | 3303 | 
| 3318   QuicFrames frames; | 3304   QuicFrames frames; | 
| 3319   frames.push_back(QuicFrame(&ack_frame)); | 3305   frames.push_back(QuicFrame(&ack_frame)); | 
| 3320 | 3306 | 
| 3321   // clang-format off | 3307   // clang-format off | 
| 3322   unsigned char packet[] = { | 3308   unsigned char packet[] = { | 
| 3323       // public flags (8 byte connection_id) | 3309       // public flags (8 byte connection_id) | 
| 3324       0x3C, | 3310       0x3C, | 
| 3325       // connection_id | 3311       // connection_id | 
| 3326       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3312       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 3327       // packet number | 3313       // packet number | 
| 3328       0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3314       0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 3329       // private flags (entropy) | 3315       // private flags (entropy) | 
| 3330       0x01, | 3316       0x01, | 
| 3331 | 3317 | 
| 3332       // frame type (ack frame) | 3318       // frame type (ack frame) | 
| 3333       // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 3319       // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 
| 3334       0x74, | 3320       0x74, | 
| 3335       // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 3321       // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 
| 3336       // since ack is truncated. | 3322       // since ack is truncated. | 
| 3337       0x01, | 3323       0x01, | 
| 3338       // 2-byte largest observed packet number. | 3324       // 2-byte largest observed packet number. | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3400   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3386   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3401   ASSERT_TRUE(data != nullptr); | 3387   ASSERT_TRUE(data != nullptr); | 
| 3402 | 3388 | 
| 3403   test::CompareCharArraysWithHexError("constructed packet", | 3389   test::CompareCharArraysWithHexError("constructed packet", | 
| 3404                                       data->data(), data->length(), | 3390                                       data->data(), data->length(), | 
| 3405                                       AsChars(packet), arraysize(packet)); | 3391                                       AsChars(packet), arraysize(packet)); | 
| 3406 } | 3392 } | 
| 3407 | 3393 | 
| 3408 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 
| 3409   QuicPacketHeader header; | 3395   QuicPacketHeader header; | 
| 3410   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3396   header.public_header.connection_id = kConnectionId; | 
| 3411   header.public_header.reset_flag = false; | 3397   header.public_header.reset_flag = false; | 
| 3412   header.public_header.version_flag = false; | 3398   header.public_header.version_flag = false; | 
| 3413   header.fec_flag = false; | 3399   header.fec_flag = false; | 
| 3414   header.entropy_flag = true; | 3400   header.entropy_flag = true; | 
| 3415   header.packet_number = UINT64_C(0x770123456789AA8); | 3401   header.packet_number = kPacketNumber; | 
| 3416   header.fec_group = 0; | 3402   header.fec_group = 0; | 
| 3417 | 3403 | 
| 3418   QuicAckFrame ack_frame; | 3404   QuicAckFrame ack_frame; | 
| 3419   // This entropy hash is different from what shows up in the packet below, | 3405   // This entropy hash is different from what shows up in the packet below, | 
| 3420   // since entropy is recomputed by the framer on ack truncation (by | 3406   // since entropy is recomputed by the framer on ack truncation (by | 
| 3421   // TestEntropyCalculator for this test.) | 3407   // TestEntropyCalculator for this test.) | 
| 3422   ack_frame.entropy_hash = 0x43; | 3408   ack_frame.entropy_hash = 0x43; | 
| 3423   ack_frame.largest_observed = 2 * 300; | 3409   ack_frame.largest_observed = 2 * 300; | 
| 3424   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3410   ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 
| 3425   for (size_t i = 1; i < 2 * 300; i += 2) { | 3411   for (size_t i = 1; i < 2 * 300; i += 2) { | 
| 3426     ack_frame.missing_packets.Add(i); | 3412     ack_frame.missing_packets.Add(i); | 
| 3427   } | 3413   } | 
| 3428 | 3414 | 
| 3429   QuicFrames frames; | 3415   QuicFrames frames; | 
| 3430   frames.push_back(QuicFrame(&ack_frame)); | 3416   frames.push_back(QuicFrame(&ack_frame)); | 
| 3431 | 3417 | 
| 3432   // clang-format off | 3418   // clang-format off | 
| 3433   unsigned char packet[] = { | 3419   unsigned char packet[] = { | 
| 3434       // public flags (8 byte connection_id) | 3420       // public flags (8 byte connection_id) | 
| 3435       0x3C, | 3421       0x3C, | 
| 3436       // connection_id | 3422       // connection_id | 
| 3437       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3423       0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 
| 3438       // packet number | 3424       // packet number | 
| 3439       0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3425       0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 3440       // private flags (entropy) | 3426       // private flags (entropy) | 
| 3441       0x01, | 3427       0x01, | 
| 3442 | 3428 | 
| 3443       // frame type (ack frame) | 3429       // frame type (ack frame) | 
| 3444       // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 3430       // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 
| 3445       0x74, | 3431       0x74, | 
| 3446       // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 3432       // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 
| 3447       // since ack is truncated. | 3433       // since ack is truncated. | 
| 3448       0x01, | 3434       0x01, | 
| 3449       // 2-byte largest observed packet number. | 3435       // 2-byte largest observed packet number. | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 3465   ASSERT_TRUE(data != nullptr); | 3451   ASSERT_TRUE(data != nullptr); | 
| 3466   // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 3452   // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 
| 3467   EXPECT_EQ(36u, data->length()); | 3453   EXPECT_EQ(36u, data->length()); | 
| 3468   test::CompareCharArraysWithHexError("constructed packet", | 3454   test::CompareCharArraysWithHexError("constructed packet", | 
| 3469                                       data->data(), data->length(), | 3455                                       data->data(), data->length(), | 
| 3470                                       AsChars(packet), arraysize(packet)); | 3456                                       AsChars(packet), arraysize(packet)); | 
| 3471 } | 3457 } | 
| 3472 | 3458 | 
| 3473 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 
| 3474   QuicPacketHeader header; | 3460   QuicPacketHeader header; | 
| 3475   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3461   header.public_header.connection_id = kConnectionId; | 
| 3476   header.public_header.reset_flag = false; | 3462   header.public_header.reset_flag = false; | 
| 3477   header.public_header.version_flag = false; | 3463   header.public_header.version_flag = false; | 
| 3478   header.fec_flag = false; | 3464   header.fec_flag = false; | 
| 3479   header.entropy_flag = true; | 3465   header.entropy_flag = true; | 
| 3480   header.packet_number = UINT64_C(0x770123456789AA8); | 3466   header.packet_number = kPacketNumber; | 
| 3481   header.fec_group = 0; | 3467   header.fec_group = 0; | 
| 3482 | 3468 | 
| 3483   QuicStopWaitingFrame stop_waiting_frame; | 3469   QuicStopWaitingFrame stop_waiting_frame; | 
| 3484   stop_waiting_frame.entropy_hash = 0x14; | 3470   stop_waiting_frame.entropy_hash = 0x14; | 
| 3485   stop_waiting_frame.least_unacked = UINT64_C(0x770123456789AA0); | 3471   stop_waiting_frame.least_unacked = kLeastUnacked; | 
| 3486 | 3472 | 
| 3487   QuicFrames frames; | 3473   QuicFrames frames; | 
| 3488   frames.push_back(QuicFrame(&stop_waiting_frame)); | 3474   frames.push_back(QuicFrame(&stop_waiting_frame)); | 
| 3489 | 3475 | 
| 3490   // clang-format off | 3476   // clang-format off | 
| 3491   unsigned char packet[] = { | 3477   unsigned char packet[] = { | 
| 3492     // public flags (8 byte connection_id) | 3478     // public flags (8 byte connection_id) | 
| 3493     0x3C, | 3479     0x3C, | 
| 3494     // connection_id | 3480     // connection_id | 
| 3495     0x10, 0x32, 0x54, 0x76, | 3481     0x10, 0x32, 0x54, 0x76, | 
| 3496     0x98, 0xBA, 0xDC, 0xFE, | 3482     0x98, 0xBA, 0xDC, 0xFE, | 
| 3497     // packet number | 3483     // packet number | 
| 3498     0xA8, 0x9A, 0x78, 0x56, | 3484     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 
| 3499     0x34, 0x12, |  | 
| 3500     // private flags (entropy) | 3485     // private flags (entropy) | 
| 3501     0x01, | 3486     0x01, | 
| 3502 | 3487 | 
| 3503     // frame type (stop waiting frame) | 3488     // frame type (stop waiting frame) | 
| 3504     0x06, | 3489     0x06, | 
| 3505     // entropy hash of sent packets till least awaiting - 1. | 3490     // entropy hash of sent packets till least awaiting - 1. | 
| 3506     0x14, | 3491     0x14, | 
| 3507     // least packet number awaiting an ack, delta from packet number. | 3492     // least packet number awaiting an ack, delta from packet number. | 
| 3508     0x08, 0x00, 0x00, 0x00, | 3493     0x1C, 0x00, 0x00, 0x00, | 
| 3509     0x00, 0x00, | 3494     0x00, 0x00, | 
| 3510   }; | 3495   }; | 
| 3511   // clang-format on | 3496   // clang-format on | 
| 3512 | 3497 | 
| 3513   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3498   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3514   ASSERT_TRUE(data != nullptr); | 3499   ASSERT_TRUE(data != nullptr); | 
| 3515 | 3500 | 
| 3516   test::CompareCharArraysWithHexError("constructed packet", | 3501   test::CompareCharArraysWithHexError("constructed packet", | 
| 3517                                       data->data(), data->length(), | 3502                                       data->data(), data->length(), | 
| 3518                                       AsChars(packet), arraysize(packet)); | 3503                                       AsChars(packet), arraysize(packet)); | 
| 3519 } | 3504 } | 
| 3520 | 3505 | 
| 3521 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 
| 3522   QuicPacketHeader header; | 3507   QuicPacketHeader header; | 
| 3523   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3508   header.public_header.connection_id = kConnectionId; | 
| 3524   header.public_header.reset_flag = false; | 3509   header.public_header.reset_flag = false; | 
| 3525   header.public_header.version_flag = false; | 3510   header.public_header.version_flag = false; | 
| 3526   header.fec_flag = false; | 3511   header.fec_flag = false; | 
| 3527   header.entropy_flag = false; | 3512   header.entropy_flag = false; | 
| 3528   header.packet_number = UINT64_C(0x123456789ABC); | 3513   header.packet_number = kPacketNumber; | 
| 3529   header.fec_group = 0; | 3514   header.fec_group = 0; | 
| 3530 | 3515 | 
| 3531   QuicRstStreamFrame rst_frame; | 3516   QuicRstStreamFrame rst_frame; | 
| 3532   rst_frame.stream_id = 0x01020304; | 3517   rst_frame.stream_id = kStreamId; | 
| 3533   rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 3518   rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 
| 3534   rst_frame.byte_offset = 0x0807060504030201; | 3519   rst_frame.byte_offset = 0x0807060504030201; | 
| 3535 | 3520 | 
| 3536   // clang-format off | 3521   // clang-format off | 
| 3537   unsigned char packet[] = { | 3522   unsigned char packet[] = { | 
| 3538     // public flags (8 byte connection_id) | 3523     // public flags (8 byte connection_id) | 
| 3539     0x3C, | 3524     0x3C, | 
| 3540     // connection_id | 3525     // connection_id | 
| 3541     0x10, 0x32, 0x54, 0x76, | 3526     0x10, 0x32, 0x54, 0x76, | 
| 3542     0x98, 0xBA, 0xDC, 0xFE, | 3527     0x98, 0xBA, 0xDC, 0xFE, | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 3564   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3549   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3565   ASSERT_TRUE(data != nullptr); | 3550   ASSERT_TRUE(data != nullptr); | 
| 3566 | 3551 | 
| 3567   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3552   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3568                                       data->length(), AsChars(packet), | 3553                                       data->length(), AsChars(packet), | 
| 3569                                       arraysize(packet)); | 3554                                       arraysize(packet)); | 
| 3570 } | 3555 } | 
| 3571 | 3556 | 
| 3572 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 3557 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 
| 3573   QuicPacketHeader header; | 3558   QuicPacketHeader header; | 
| 3574   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3559   header.public_header.connection_id = kConnectionId; | 
| 3575   header.public_header.reset_flag = false; | 3560   header.public_header.reset_flag = false; | 
| 3576   header.public_header.version_flag = false; | 3561   header.public_header.version_flag = false; | 
| 3577   header.fec_flag = false; | 3562   header.fec_flag = false; | 
| 3578   header.entropy_flag = true; | 3563   header.entropy_flag = true; | 
| 3579   header.packet_number = UINT64_C(0x123456789ABC); | 3564   header.packet_number = kPacketNumber; | 
| 3580   header.fec_group = 0; | 3565   header.fec_group = 0; | 
| 3581 | 3566 | 
| 3582   QuicConnectionCloseFrame close_frame; | 3567   QuicConnectionCloseFrame close_frame; | 
| 3583   close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3568   close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 
| 3584   close_frame.error_details = "because I can"; | 3569   close_frame.error_details = "because I can"; | 
| 3585 | 3570 | 
| 3586   QuicFrames frames; | 3571   QuicFrames frames; | 
| 3587   frames.push_back(QuicFrame(&close_frame)); | 3572   frames.push_back(QuicFrame(&close_frame)); | 
| 3588 | 3573 | 
| 3589   // clang-format off | 3574   // clang-format off | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 3616   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3601   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3617   ASSERT_TRUE(data != nullptr); | 3602   ASSERT_TRUE(data != nullptr); | 
| 3618 | 3603 | 
| 3619   test::CompareCharArraysWithHexError("constructed packet", | 3604   test::CompareCharArraysWithHexError("constructed packet", | 
| 3620                                       data->data(), data->length(), | 3605                                       data->data(), data->length(), | 
| 3621                                       AsChars(packet), arraysize(packet)); | 3606                                       AsChars(packet), arraysize(packet)); | 
| 3622 } | 3607 } | 
| 3623 | 3608 | 
| 3624 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 
| 3625   QuicPacketHeader header; | 3610   QuicPacketHeader header; | 
| 3626   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3611   header.public_header.connection_id = kConnectionId; | 
| 3627   header.public_header.reset_flag = false; | 3612   header.public_header.reset_flag = false; | 
| 3628   header.public_header.version_flag = false; | 3613   header.public_header.version_flag = false; | 
| 3629   header.fec_flag = false; | 3614   header.fec_flag = false; | 
| 3630   header.entropy_flag = true; | 3615   header.entropy_flag = true; | 
| 3631   header.packet_number = UINT64_C(0x123456789ABC); | 3616   header.packet_number = kPacketNumber; | 
| 3632   header.fec_group = 0; | 3617   header.fec_group = 0; | 
| 3633 | 3618 | 
| 3634   QuicGoAwayFrame goaway_frame; | 3619   QuicGoAwayFrame goaway_frame; | 
| 3635   goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3620   goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 
| 3636   goaway_frame.last_good_stream_id = 0x01020304; | 3621   goaway_frame.last_good_stream_id = kStreamId; | 
| 3637   goaway_frame.reason_phrase = "because I can"; | 3622   goaway_frame.reason_phrase = "because I can"; | 
| 3638 | 3623 | 
| 3639   QuicFrames frames; | 3624   QuicFrames frames; | 
| 3640   frames.push_back(QuicFrame(&goaway_frame)); | 3625   frames.push_back(QuicFrame(&goaway_frame)); | 
| 3641 | 3626 | 
| 3642   // clang-format off | 3627   // clang-format off | 
| 3643   unsigned char packet[] = { | 3628   unsigned char packet[] = { | 
| 3644     // public flags (8 byte connection_id) | 3629     // public flags (8 byte connection_id) | 
| 3645     0x3C, | 3630     0x3C, | 
| 3646     // connection_id | 3631     // connection_id | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 3671   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3656   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3672   ASSERT_TRUE(data != nullptr); | 3657   ASSERT_TRUE(data != nullptr); | 
| 3673 | 3658 | 
| 3674   test::CompareCharArraysWithHexError("constructed packet", | 3659   test::CompareCharArraysWithHexError("constructed packet", | 
| 3675                                       data->data(), data->length(), | 3660                                       data->data(), data->length(), | 
| 3676                                       AsChars(packet), arraysize(packet)); | 3661                                       AsChars(packet), arraysize(packet)); | 
| 3677 } | 3662 } | 
| 3678 | 3663 | 
| 3679 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 
| 3680   QuicPacketHeader header; | 3665   QuicPacketHeader header; | 
| 3681   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3666   header.public_header.connection_id = kConnectionId; | 
| 3682   header.public_header.reset_flag = false; | 3667   header.public_header.reset_flag = false; | 
| 3683   header.public_header.version_flag = false; | 3668   header.public_header.version_flag = false; | 
| 3684   header.fec_flag = false; | 3669   header.fec_flag = false; | 
| 3685   header.entropy_flag = true; | 3670   header.entropy_flag = true; | 
| 3686   header.packet_number = UINT64_C(0x123456789ABC); | 3671   header.packet_number = kPacketNumber; | 
| 3687   header.fec_group = 0; | 3672   header.fec_group = 0; | 
| 3688 | 3673 | 
| 3689   QuicWindowUpdateFrame window_update_frame; | 3674   QuicWindowUpdateFrame window_update_frame; | 
| 3690   window_update_frame.stream_id = 0x01020304; | 3675   window_update_frame.stream_id = kStreamId; | 
| 3691   window_update_frame.byte_offset = 0x1122334455667788; | 3676   window_update_frame.byte_offset = 0x1122334455667788; | 
| 3692 | 3677 | 
| 3693   QuicFrames frames; | 3678   QuicFrames frames; | 
| 3694   frames.push_back(QuicFrame(&window_update_frame)); | 3679   frames.push_back(QuicFrame(&window_update_frame)); | 
| 3695 | 3680 | 
| 3696   // clang-format off | 3681   // clang-format off | 
| 3697   unsigned char packet[] = { | 3682   unsigned char packet[] = { | 
| 3698     // public flags (8 byte connection_id) | 3683     // public flags (8 byte connection_id) | 
| 3699     0x3C, | 3684     0x3C, | 
| 3700     // connection_id | 3685     // connection_id | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 3719   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3704   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3720   ASSERT_TRUE(data != nullptr); | 3705   ASSERT_TRUE(data != nullptr); | 
| 3721 | 3706 | 
| 3722   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3707   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3723                                       data->length(), AsChars(packet), | 3708                                       data->length(), AsChars(packet), | 
| 3724                                       arraysize(packet)); | 3709                                       arraysize(packet)); | 
| 3725 } | 3710 } | 
| 3726 | 3711 | 
| 3727 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 3712 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 
| 3728   QuicPacketHeader header; | 3713   QuicPacketHeader header; | 
| 3729   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3714   header.public_header.connection_id = kConnectionId; | 
| 3730   header.public_header.reset_flag = false; | 3715   header.public_header.reset_flag = false; | 
| 3731   header.public_header.version_flag = false; | 3716   header.public_header.version_flag = false; | 
| 3732   header.fec_flag = false; | 3717   header.fec_flag = false; | 
| 3733   header.entropy_flag = true; | 3718   header.entropy_flag = true; | 
| 3734   header.packet_number = UINT64_C(0x123456789ABC); | 3719   header.packet_number = kPacketNumber; | 
| 3735   header.fec_group = 0; | 3720   header.fec_group = 0; | 
| 3736 | 3721 | 
| 3737   QuicBlockedFrame blocked_frame; | 3722   QuicBlockedFrame blocked_frame; | 
| 3738   blocked_frame.stream_id = 0x01020304; | 3723   blocked_frame.stream_id = kStreamId; | 
| 3739 | 3724 | 
| 3740   QuicFrames frames; | 3725   QuicFrames frames; | 
| 3741   frames.push_back(QuicFrame(&blocked_frame)); | 3726   frames.push_back(QuicFrame(&blocked_frame)); | 
| 3742 | 3727 | 
| 3743   // clang-format off | 3728   // clang-format off | 
| 3744   unsigned char packet[] = { | 3729   unsigned char packet[] = { | 
| 3745     // public flags (8 byte connection_id) | 3730     // public flags (8 byte connection_id) | 
| 3746     0x3C, | 3731     0x3C, | 
| 3747     // connection_id | 3732     // connection_id | 
| 3748     0x10, 0x32, 0x54, 0x76, | 3733     0x10, 0x32, 0x54, 0x76, | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 3763   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3748   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3764   ASSERT_TRUE(data != nullptr); | 3749   ASSERT_TRUE(data != nullptr); | 
| 3765 | 3750 | 
| 3766   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3751   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3767                                       data->length(), AsChars(packet), | 3752                                       data->length(), AsChars(packet), | 
| 3768                                       arraysize(packet)); | 3753                                       arraysize(packet)); | 
| 3769 } | 3754 } | 
| 3770 | 3755 | 
| 3771 TEST_P(QuicFramerTest, BuildPingPacket) { | 3756 TEST_P(QuicFramerTest, BuildPingPacket) { | 
| 3772   QuicPacketHeader header; | 3757   QuicPacketHeader header; | 
| 3773   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3758   header.public_header.connection_id = kConnectionId; | 
| 3774   header.public_header.reset_flag = false; | 3759   header.public_header.reset_flag = false; | 
| 3775   header.public_header.version_flag = false; | 3760   header.public_header.version_flag = false; | 
| 3776   header.fec_flag = false; | 3761   header.fec_flag = false; | 
| 3777   header.entropy_flag = true; | 3762   header.entropy_flag = true; | 
| 3778   header.packet_number = UINT64_C(0x123456789ABC); | 3763   header.packet_number = kPacketNumber; | 
| 3779   header.fec_group = 0; | 3764   header.fec_group = 0; | 
| 3780 | 3765 | 
| 3781   QuicPingFrame ping_frame; | 3766   QuicPingFrame ping_frame; | 
| 3782 | 3767 | 
| 3783   QuicFrames frames; | 3768   QuicFrames frames; | 
| 3784   frames.push_back(QuicFrame(ping_frame)); | 3769   frames.push_back(QuicFrame(ping_frame)); | 
| 3785 | 3770 | 
| 3786   // clang-format off | 3771   // clang-format off | 
| 3787   unsigned char packet[] = { | 3772   unsigned char packet[] = { | 
| 3788     // public flags (8 byte connection_id) | 3773     // public flags (8 byte connection_id) | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 3805   ASSERT_TRUE(data != nullptr); | 3790   ASSERT_TRUE(data != nullptr); | 
| 3806 | 3791 | 
| 3807   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3792   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3808                                       data->length(), AsChars(packet), | 3793                                       data->length(), AsChars(packet), | 
| 3809                                       arraysize(packet)); | 3794                                       arraysize(packet)); | 
| 3810 } | 3795 } | 
| 3811 | 3796 | 
| 3812 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 3797 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 
| 3813 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 3798 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 
| 3814   QuicPacketHeader header; | 3799   QuicPacketHeader header; | 
| 3815   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3800   header.public_header.connection_id = kConnectionId; | 
| 3816   header.public_header.reset_flag = false; | 3801   header.public_header.reset_flag = false; | 
| 3817   header.public_header.version_flag = false; | 3802   header.public_header.version_flag = false; | 
| 3818   header.fec_flag = false; | 3803   header.fec_flag = false; | 
| 3819   header.entropy_flag = true; | 3804   header.entropy_flag = true; | 
| 3820   header.packet_number = UINT64_C(0x123456789ABC); | 3805   header.packet_number = kPacketNumber; | 
| 3821   header.fec_group = 0; | 3806   header.fec_group = 0; | 
| 3822 | 3807 | 
| 3823   QuicMtuDiscoveryFrame mtu_discovery_frame; | 3808   QuicMtuDiscoveryFrame mtu_discovery_frame; | 
| 3824 | 3809 | 
| 3825   QuicFrames frames; | 3810   QuicFrames frames; | 
| 3826   frames.push_back(QuicFrame(mtu_discovery_frame)); | 3811   frames.push_back(QuicFrame(mtu_discovery_frame)); | 
| 3827 | 3812 | 
| 3828   // clang-format off | 3813   // clang-format off | 
| 3829   unsigned char packet[] = { | 3814   unsigned char packet[] = { | 
| 3830     // public flags (8 byte connection_id) | 3815     // public flags (8 byte connection_id) | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 3846   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3831   scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 
| 3847   ASSERT_TRUE(data != nullptr); | 3832   ASSERT_TRUE(data != nullptr); | 
| 3848 | 3833 | 
| 3849   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3834   test::CompareCharArraysWithHexError("constructed packet", data->data(), | 
| 3850                                       data->length(), AsChars(packet), | 3835                                       data->length(), AsChars(packet), | 
| 3851                                       arraysize(packet)); | 3836                                       arraysize(packet)); | 
| 3852 } | 3837 } | 
| 3853 | 3838 | 
| 3854 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 3839 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 
| 3855   QuicPublicResetPacket reset_packet; | 3840   QuicPublicResetPacket reset_packet; | 
| 3856   reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3841   reset_packet.public_header.connection_id = kConnectionId; | 
| 3857   reset_packet.public_header.reset_flag = true; | 3842   reset_packet.public_header.reset_flag = true; | 
| 3858   reset_packet.public_header.version_flag = false; | 3843   reset_packet.public_header.version_flag = false; | 
| 3859   reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); | 3844   reset_packet.rejected_packet_number = kPacketNumber; | 
| 3860   reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); | 3845   reset_packet.nonce_proof = kNonceProof; | 
| 3861 | 3846 | 
| 3862   // clang-format off | 3847   // clang-format off | 
| 3863   unsigned char packet[] = { | 3848   unsigned char packet[] = { | 
| 3864     // public flags (public reset, 8 byte ConnectionId) | 3849     // public flags (public reset, 8 byte ConnectionId) | 
| 3865     0x0E, | 3850     0x0E, | 
| 3866     // connection_id | 3851     // connection_id | 
| 3867     0x10, 0x32, 0x54, 0x76, | 3852     0x10, 0x32, 0x54, 0x76, | 
| 3868     0x98, 0xBA, 0xDC, 0xFE, | 3853     0x98, 0xBA, 0xDC, 0xFE, | 
| 3869     // message tag (kPRST) | 3854     // message tag (kPRST) | 
| 3870     'P', 'R', 'S', 'T', | 3855     'P', 'R', 'S', 'T', | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 3891       framer_.BuildPublicResetPacket(reset_packet)); | 3876       framer_.BuildPublicResetPacket(reset_packet)); | 
| 3892   ASSERT_TRUE(data != nullptr); | 3877   ASSERT_TRUE(data != nullptr); | 
| 3893 | 3878 | 
| 3894   test::CompareCharArraysWithHexError("constructed packet", | 3879   test::CompareCharArraysWithHexError("constructed packet", | 
| 3895                                       data->data(), data->length(), | 3880                                       data->data(), data->length(), | 
| 3896                                       AsChars(packet), arraysize(packet)); | 3881                                       AsChars(packet), arraysize(packet)); | 
| 3897 } | 3882 } | 
| 3898 | 3883 | 
| 3899 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 
| 3900   QuicPublicResetPacket reset_packet; | 3885   QuicPublicResetPacket reset_packet; | 
| 3901   reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3886   reset_packet.public_header.connection_id = kConnectionId; | 
| 3902   reset_packet.public_header.reset_flag = true; | 3887   reset_packet.public_header.reset_flag = true; | 
| 3903   reset_packet.public_header.version_flag = false; | 3888   reset_packet.public_header.version_flag = false; | 
| 3904   reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); | 3889   reset_packet.rejected_packet_number = kPacketNumber; | 
| 3905   reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); | 3890   reset_packet.nonce_proof = kNonceProof; | 
| 3906   reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 3891   reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 
| 3907 | 3892 | 
| 3908   // clang-format off | 3893   // clang-format off | 
| 3909   unsigned char packet[] = { | 3894   unsigned char packet[] = { | 
| 3910     // public flags (public reset, 8 byte ConnectionId) | 3895     // public flags (public reset, 8 byte ConnectionId) | 
| 3911     0x0E, | 3896     0x0E, | 
| 3912     // connection_id | 3897     // connection_id | 
| 3913     0x10, 0x32, 0x54, 0x76, | 3898     0x10, 0x32, 0x54, 0x76, | 
| 3914     0x98, 0xBA, 0xDC, 0xFE, | 3899     0x98, 0xBA, 0xDC, 0xFE, | 
| 3915     // message tag (kPRST) | 3900     // message tag (kPRST) | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 3945       framer_.BuildPublicResetPacket(reset_packet)); | 3930       framer_.BuildPublicResetPacket(reset_packet)); | 
| 3946   ASSERT_TRUE(data != nullptr); | 3931   ASSERT_TRUE(data != nullptr); | 
| 3947 | 3932 | 
| 3948   test::CompareCharArraysWithHexError("constructed packet", | 3933   test::CompareCharArraysWithHexError("constructed packet", | 
| 3949                                       data->data(), data->length(), | 3934                                       data->data(), data->length(), | 
| 3950                                       AsChars(packet), arraysize(packet)); | 3935                                       AsChars(packet), arraysize(packet)); | 
| 3951 } | 3936 } | 
| 3952 | 3937 | 
| 3953 TEST_P(QuicFramerTest, BuildFecPacket) { | 3938 TEST_P(QuicFramerTest, BuildFecPacket) { | 
| 3954   QuicPacketHeader header; | 3939   QuicPacketHeader header; | 
| 3955   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3940   header.public_header.connection_id = kConnectionId; | 
| 3956   header.public_header.reset_flag = false; | 3941   header.public_header.reset_flag = false; | 
| 3957   header.public_header.version_flag = false; | 3942   header.public_header.version_flag = false; | 
| 3958   header.fec_flag = true; | 3943   header.fec_flag = true; | 
| 3959   header.entropy_flag = true; | 3944   header.entropy_flag = true; | 
| 3960   header.packet_number = (UINT64_C(0x123456789ABC)); | 3945   header.packet_number = kPacketNumber; | 
| 3961   header.is_in_fec_group = IN_FEC_GROUP; | 3946   header.is_in_fec_group = IN_FEC_GROUP; | 
| 3962   header.fec_group = UINT64_C(0x123456789ABB); | 3947   header.fec_group = kPacketNumber - 1; | 
| 3963 | 3948 | 
| 3964   string redundancy = "abcdefghijklmnop"; | 3949   string redundancy = "abcdefghijklmnop"; | 
| 3965 | 3950 | 
| 3966   // clang-format off | 3951   // clang-format off | 
| 3967   unsigned char packet[] = { | 3952   unsigned char packet[] = { | 
| 3968     // public flags (8 byte connection_id) | 3953     // public flags (8 byte connection_id) | 
| 3969     0x3C, | 3954     0x3C, | 
| 3970     // connection_id | 3955     // connection_id | 
| 3971     0x10, 0x32, 0x54, 0x76, | 3956     0x10, 0x32, 0x54, 0x76, | 
| 3972     0x98, 0xBA, 0xDC, 0xFE, | 3957     0x98, 0xBA, 0xDC, 0xFE, | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 3988 | 3973 | 
| 3989   scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | 3974   scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | 
| 3990   ASSERT_TRUE(data != nullptr); | 3975   ASSERT_TRUE(data != nullptr); | 
| 3991 | 3976 | 
| 3992   test::CompareCharArraysWithHexError("constructed packet", | 3977   test::CompareCharArraysWithHexError("constructed packet", | 
| 3993                                       data->data(), data->length(), | 3978                                       data->data(), data->length(), | 
| 3994                                       AsChars(packet), arraysize(packet)); | 3979                                       AsChars(packet), arraysize(packet)); | 
| 3995 } | 3980 } | 
| 3996 | 3981 | 
| 3997 TEST_P(QuicFramerTest, EncryptPacket) { | 3982 TEST_P(QuicFramerTest, EncryptPacket) { | 
| 3998   QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); | 3983   QuicPacketNumber packet_number = kPacketNumber; | 
| 3999   // clang-format off | 3984   // clang-format off | 
| 4000   unsigned char packet[] = { | 3985   unsigned char packet[] = { | 
| 4001     // public flags (8 byte connection_id) | 3986     // public flags (8 byte connection_id) | 
| 4002     0x3C, | 3987     0x3C, | 
| 4003     // connection_id | 3988     // connection_id | 
| 4004     0x10, 0x32, 0x54, 0x76, | 3989     0x10, 0x32, 0x54, 0x76, | 
| 4005     0x98, 0xBA, 0xDC, 0xFE, | 3990     0x98, 0xBA, 0xDC, 0xFE, | 
| 4006     // packet number | 3991     // packet number | 
| 4007     0xBC, 0x9A, 0x78, 0x56, | 3992     0xBC, 0x9A, 0x78, 0x56, | 
| 4008     0x34, 0x12, | 3993     0x34, 0x12, | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 4024       !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER)); | 4009       !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER)); | 
| 4025   char buffer[kMaxPacketSize]; | 4010   char buffer[kMaxPacketSize]; | 
| 4026   size_t encrypted_length = framer_.EncryptPayload( | 4011   size_t encrypted_length = framer_.EncryptPayload( | 
| 4027       ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 4012       ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 
| 4028 | 4013 | 
| 4029   ASSERT_NE(0u, encrypted_length); | 4014   ASSERT_NE(0u, encrypted_length); | 
| 4030   EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 4015   EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 
| 4031 } | 4016 } | 
| 4032 | 4017 | 
| 4033 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 4018 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 
| 4034   QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); | 4019   QuicPacketNumber packet_number = kPacketNumber; | 
| 4035   // clang-format off | 4020   // clang-format off | 
| 4036   unsigned char packet[] = { | 4021   unsigned char packet[] = { | 
| 4037     // public flags (version, 8 byte connection_id) | 4022     // public flags (version, 8 byte connection_id) | 
| 4038     0x3D, | 4023     0x3D, | 
| 4039     // connection_id | 4024     // connection_id | 
| 4040     0x10, 0x32, 0x54, 0x76, | 4025     0x10, 0x32, 0x54, 0x76, | 
| 4041     0x98, 0xBA, 0xDC, 0xFE, | 4026     0x98, 0xBA, 0xDC, 0xFE, | 
| 4042     // version tag | 4027     // version tag | 
| 4043     'Q', '.', '1', '0', | 4028     'Q', '.', '1', '0', | 
| 4044     // packet number | 4029     // packet number | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 4063   char buffer[kMaxPacketSize]; | 4048   char buffer[kMaxPacketSize]; | 
| 4064   size_t encrypted_length = framer_.EncryptPayload( | 4049   size_t encrypted_length = framer_.EncryptPayload( | 
| 4065       ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 4050       ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 
| 4066 | 4051 | 
| 4067   ASSERT_NE(0u, encrypted_length); | 4052   ASSERT_NE(0u, encrypted_length); | 
| 4068   EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 4053   EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 
| 4069 } | 4054 } | 
| 4070 | 4055 | 
| 4071 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 4056 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 
| 4072   QuicPacketHeader header; | 4057   QuicPacketHeader header; | 
| 4073   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4058   header.public_header.connection_id = kConnectionId; | 
| 4074   header.public_header.reset_flag = false; | 4059   header.public_header.reset_flag = false; | 
| 4075   header.public_header.version_flag = false; | 4060   header.public_header.version_flag = false; | 
| 4076   header.fec_flag = false; | 4061   header.fec_flag = false; | 
| 4077   header.entropy_flag = false; | 4062   header.entropy_flag = false; | 
| 4078   header.packet_number = UINT64_C(0x123456789ABC); | 4063   header.packet_number = kPacketNumber; | 
| 4079   header.fec_group = 0; | 4064   header.fec_group = 0; | 
| 4080 | 4065 | 
| 4081   // Create a packet with just the ack. | 4066   // Create a packet with just the ack. | 
| 4082   QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4067   QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 
| 4083   QuicFrame frame; | 4068   QuicFrame frame; | 
| 4084   frame.type = ACK_FRAME; | 4069   frame.type = ACK_FRAME; | 
| 4085   frame.ack_frame = &ack_frame; | 4070   frame.ack_frame = &ack_frame; | 
| 4086   QuicFrames frames; | 4071   QuicFrames frames; | 
| 4087   frames.push_back(frame); | 4072   frames.push_back(frame); | 
| 4088 | 4073 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 4101   QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4086   QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 
| 4102   EXPECT_TRUE(processed_ack_frame.is_truncated); | 4087   EXPECT_TRUE(processed_ack_frame.is_truncated); | 
| 4103   EXPECT_EQ(510u, processed_ack_frame.largest_observed); | 4088   EXPECT_EQ(510u, processed_ack_frame.largest_observed); | 
| 4104   ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 4089   ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 
| 4105   EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 4090   EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 
| 4106   EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max()); | 4091   EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max()); | 
| 4107 } | 4092 } | 
| 4108 | 4093 | 
| 4109 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 4094 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 
| 4110   QuicPacketHeader header; | 4095   QuicPacketHeader header; | 
| 4111   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4096   header.public_header.connection_id = kConnectionId; | 
| 4112   header.public_header.reset_flag = false; | 4097   header.public_header.reset_flag = false; | 
| 4113   header.public_header.version_flag = false; | 4098   header.public_header.version_flag = false; | 
| 4114   header.fec_flag = false; | 4099   header.fec_flag = false; | 
| 4115   header.entropy_flag = false; | 4100   header.entropy_flag = false; | 
| 4116   header.packet_number = UINT64_C(0x123456789ABC); | 4101   header.packet_number = kPacketNumber; | 
| 4117   header.fec_group = 0; | 4102   header.fec_group = 0; | 
| 4118 | 4103 | 
| 4119   // Create a packet with just the ack. | 4104   // Create a packet with just the ack. | 
| 4120   QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4105   QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 
| 4121   QuicFrame frame; | 4106   QuicFrame frame; | 
| 4122   frame.type = ACK_FRAME; | 4107   frame.type = ACK_FRAME; | 
| 4123   frame.ack_frame = &ack_frame; | 4108   frame.ack_frame = &ack_frame; | 
| 4124   QuicFrames frames; | 4109   QuicFrames frames; | 
| 4125   frames.push_back(frame); | 4110   frames.push_back(frame); | 
| 4126 | 4111 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 4139   QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4124   QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 
| 4140   EXPECT_TRUE(processed_ack_frame.is_truncated); | 4125   EXPECT_TRUE(processed_ack_frame.is_truncated); | 
| 4141   EXPECT_EQ(476u, processed_ack_frame.largest_observed); | 4126   EXPECT_EQ(476u, processed_ack_frame.largest_observed); | 
| 4142   ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 4127   ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 
| 4143   EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 4128   EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 
| 4144   EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max()); | 4129   EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max()); | 
| 4145 } | 4130 } | 
| 4146 | 4131 | 
| 4147 TEST_P(QuicFramerTest, CleanTruncation) { | 4132 TEST_P(QuicFramerTest, CleanTruncation) { | 
| 4148   QuicPacketHeader header; | 4133   QuicPacketHeader header; | 
| 4149   header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4134   header.public_header.connection_id = kConnectionId; | 
| 4150   header.public_header.reset_flag = false; | 4135   header.public_header.reset_flag = false; | 
| 4151   header.public_header.version_flag = false; | 4136   header.public_header.version_flag = false; | 
| 4152   header.fec_flag = false; | 4137   header.fec_flag = false; | 
| 4153   header.entropy_flag = true; | 4138   header.entropy_flag = true; | 
| 4154   header.packet_number = UINT64_C(0x123456789ABC); | 4139   header.packet_number = kPacketNumber; | 
| 4155   header.fec_group = 0; | 4140   header.fec_group = 0; | 
| 4156 | 4141 | 
| 4157   QuicAckFrame ack_frame; | 4142   QuicAckFrame ack_frame; | 
| 4158   ack_frame.largest_observed = 201; | 4143   ack_frame.largest_observed = 201; | 
| 4159   ack_frame.missing_packets.Add(1, ack_frame.largest_observed); | 4144   ack_frame.missing_packets.Add(1, ack_frame.largest_observed); | 
| 4160 | 4145 | 
| 4161   // Create a packet with just the ack. | 4146   // Create a packet with just the ack. | 
| 4162   QuicFrame frame; | 4147   QuicFrame frame; | 
| 4163   frame.type = ACK_FRAME; | 4148   frame.type = ACK_FRAME; | 
| 4164   frame.ack_frame = &ack_frame; | 4149   frame.ack_frame = &ack_frame; | 
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4401   EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); | 4386   EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); | 
| 4402   EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 4387   EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 
| 4403   EXPECT_CALL(visitor, OnPacketComplete()).Times(0); | 4388   EXPECT_CALL(visitor, OnPacketComplete()).Times(0); | 
| 4404 | 4389 | 
| 4405   EXPECT_FALSE(framer_.ProcessPacket(*packet)); | 4390   EXPECT_FALSE(framer_.ProcessPacket(*packet)); | 
| 4406   EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 4391   EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 
| 4407 } | 4392 } | 
| 4408 | 4393 | 
| 4409 }  // namespace test | 4394 }  // namespace test | 
| 4410 }  // namespace net | 4395 }  // namespace net | 
| OLD | NEW | 
|---|