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 <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 21 matching lines...) Expand all Loading... |
32 using std::vector; | 32 using std::vector; |
33 using testing::Return; | 33 using testing::Return; |
34 using testing::_; | 34 using testing::_; |
35 | 35 |
36 namespace net { | 36 namespace net { |
37 namespace test { | 37 namespace test { |
38 | 38 |
39 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; | 39 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; |
40 const QuicPacketSequenceNumber kMask = kEpoch - 1; | 40 const QuicPacketSequenceNumber kMask = kEpoch - 1; |
41 | 41 |
42 // Index into the guid offset in the header. | 42 // Index into the connection_id offset in the header. |
43 const size_t kGuidOffset = kPublicFlagsSize; | 43 const size_t kConnectionIdOffset = kPublicFlagsSize; |
44 // Index into the version string in the header. (if present). | 44 // Index into the version string in the header. (if present). |
45 const size_t kVersionOffset = kGuidOffset + PACKET_8BYTE_GUID; | 45 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
46 | 46 |
47 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 47 // Size in bytes of the stream frame fields for an arbitrary StreamID and |
48 // offset and the last frame in a packet. | 48 // offset and the last frame in a packet. |
49 size_t GetMinStreamFrameSize(QuicVersion version) { | 49 size_t GetMinStreamFrameSize(QuicVersion version) { |
50 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; | 50 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; |
51 } | 51 } |
52 | 52 |
53 // Index into the sequence number offset in the header. | 53 // Index into the sequence number offset in the header. |
54 size_t GetSequenceNumberOffset(QuicGuidLength guid_length, | 54 size_t GetSequenceNumberOffset(QuicConnectionIdLength connection_id_length, |
55 bool include_version) { | 55 bool include_version) { |
56 return kGuidOffset + guid_length + | 56 return kConnectionIdOffset + connection_id_length + |
57 (include_version ? kQuicVersionSize : 0); | 57 (include_version ? kQuicVersionSize : 0); |
58 } | 58 } |
59 | 59 |
60 size_t GetSequenceNumberOffset(bool include_version) { | 60 size_t GetSequenceNumberOffset(bool include_version) { |
61 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); | 61 return GetSequenceNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version); |
62 } | 62 } |
63 | 63 |
64 // Index into the private flags offset in the data packet header. | 64 // Index into the private flags offset in the data packet header. |
65 size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) { | 65 size_t GetPrivateFlagsOffset(QuicConnectionIdLength connection_id_length, |
66 return GetSequenceNumberOffset(guid_length, include_version) + | 66 bool include_version) { |
| 67 return GetSequenceNumberOffset(connection_id_length, include_version) + |
67 PACKET_6BYTE_SEQUENCE_NUMBER; | 68 PACKET_6BYTE_SEQUENCE_NUMBER; |
68 } | 69 } |
69 | 70 |
70 size_t GetPrivateFlagsOffset(bool include_version) { | 71 size_t GetPrivateFlagsOffset(bool include_version) { |
71 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version); | 72 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version); |
72 } | 73 } |
73 | 74 |
74 size_t GetPrivateFlagsOffset(bool include_version, | 75 size_t GetPrivateFlagsOffset(bool include_version, |
75 QuicSequenceNumberLength sequence_number_length) { | 76 QuicSequenceNumberLength sequence_number_length) { |
76 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version) + | 77 return GetSequenceNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + |
77 sequence_number_length; | 78 sequence_number_length; |
78 } | 79 } |
79 | 80 |
80 // Index into the fec group offset in the header. | 81 // Index into the fec group offset in the header. |
81 size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) { | 82 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, |
82 return GetPrivateFlagsOffset(guid_length, include_version) + | 83 bool include_version) { |
| 84 return GetPrivateFlagsOffset(connection_id_length, include_version) + |
83 kPrivateFlagsSize; | 85 kPrivateFlagsSize; |
84 } | 86 } |
85 | 87 |
86 size_t GetFecGroupOffset(bool include_version) { | 88 size_t GetFecGroupOffset(bool include_version) { |
87 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version) + | 89 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + |
88 kPrivateFlagsSize; | 90 kPrivateFlagsSize; |
89 } | 91 } |
90 | 92 |
91 size_t GetFecGroupOffset(bool include_version, | 93 size_t GetFecGroupOffset(bool include_version, |
92 QuicSequenceNumberLength sequence_number_length) { | 94 QuicSequenceNumberLength sequence_number_length) { |
93 return GetPrivateFlagsOffset(include_version, sequence_number_length) + | 95 return GetPrivateFlagsOffset(include_version, sequence_number_length) + |
94 kPrivateFlagsSize; | 96 kPrivateFlagsSize; |
95 } | 97 } |
96 | 98 |
97 // Index into the message tag of the public reset packet. | 99 // Index into the message tag of the public reset packet. |
98 // Public resets always have full guids. | 100 // Public resets always have full connection_ids. |
99 const size_t kPublicResetPacketMessageTagOffset = | 101 const size_t kPublicResetPacketMessageTagOffset = |
100 kGuidOffset + PACKET_8BYTE_GUID; | 102 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
101 | 103 |
102 // TODO(wtc): remove this when we drop support for QUIC_VERSION_13. | 104 // TODO(wtc): remove this when we drop support for QUIC_VERSION_13. |
103 // Index into the nonce proof of the public reset packet. | 105 // Index into the nonce proof of the public reset packet. |
104 // Public resets always have full guids. | 106 // Public resets always have full connection_ids. |
105 const size_t kPublicResetPacketNonceProofOffset = | 107 const size_t kPublicResetPacketNonceProofOffset = |
106 kGuidOffset + PACKET_8BYTE_GUID; | 108 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
107 | 109 |
108 // TODO(wtc): remove this when we drop support for QUIC_VERSION_13. | 110 // TODO(wtc): remove this when we drop support for QUIC_VERSION_13. |
109 // Index into the rejected sequence number of the public reset packet. | 111 // Index into the rejected sequence number of the public reset packet. |
110 const size_t kPublicResetPacketRejectedSequenceNumberOffset = | 112 const size_t kPublicResetPacketRejectedSequenceNumberOffset = |
111 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; | 113 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; |
112 | 114 |
113 class TestEncrypter : public QuicEncrypter { | 115 class TestEncrypter : public QuicEncrypter { |
114 public: | 116 public: |
115 virtual ~TestEncrypter() {} | 117 virtual ~TestEncrypter() {} |
116 virtual bool SetKey(StringPiece key) OVERRIDE { | 118 virtual bool SetKey(StringPiece key) OVERRIDE { |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 bool CheckDecryption(const QuicEncryptedPacket& encrypted, | 409 bool CheckDecryption(const QuicEncryptedPacket& encrypted, |
408 bool includes_version) { | 410 bool includes_version) { |
409 if (visitor_.header_->packet_sequence_number != | 411 if (visitor_.header_->packet_sequence_number != |
410 decrypter_->sequence_number_) { | 412 decrypter_->sequence_number_) { |
411 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected " | 413 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected " |
412 << visitor_.header_->packet_sequence_number << " actual: " | 414 << visitor_.header_->packet_sequence_number << " actual: " |
413 << decrypter_->sequence_number_; | 415 << decrypter_->sequence_number_; |
414 return false; | 416 return false; |
415 } | 417 } |
416 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( | 418 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( |
417 encrypted, PACKET_8BYTE_GUID, | 419 encrypted, PACKET_8BYTE_CONNECTION_ID, |
418 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) != | 420 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) != |
419 decrypter_->associated_data_) { | 421 decrypter_->associated_data_) { |
420 LOG(ERROR) << "Decrypted incorrect associated data. expected " | 422 LOG(ERROR) << "Decrypted incorrect associated data. expected " |
421 << QuicFramer::GetAssociatedDataFromEncryptedPacket( | 423 << QuicFramer::GetAssociatedDataFromEncryptedPacket( |
422 encrypted, PACKET_8BYTE_GUID, | 424 encrypted, PACKET_8BYTE_CONNECTION_ID, |
423 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) | 425 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) |
424 << " actual: " << decrypter_->associated_data_; | 426 << " actual: " << decrypter_->associated_data_; |
425 return false; | 427 return false; |
426 } | 428 } |
427 StringPiece ciphertext(encrypted.AsStringPiece().substr( | 429 StringPiece ciphertext(encrypted.AsStringPiece().substr( |
428 GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version, | 430 GetStartOfEncryptedData(PACKET_8BYTE_CONNECTION_ID, includes_version, |
429 PACKET_6BYTE_SEQUENCE_NUMBER))); | 431 PACKET_6BYTE_SEQUENCE_NUMBER))); |
430 if (ciphertext != decrypter_->ciphertext_) { | 432 if (ciphertext != decrypter_->ciphertext_) { |
431 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " | 433 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " |
432 << ciphertext << " actual: " | 434 << ciphertext << " actual: " |
433 << decrypter_->ciphertext_; | 435 << decrypter_->ciphertext_; |
434 return false; | 436 return false; |
435 } | 437 } |
436 return true; | 438 return true; |
437 } | 439 } |
438 | 440 |
(...skipping 27 matching lines...) Expand all Loading... |
466 if (i < kQuicFrameTypeSize + stream_id_size) { | 468 if (i < kQuicFrameTypeSize + stream_id_size) { |
467 expected_error = "Unable to read stream_id."; | 469 expected_error = "Unable to read stream_id."; |
468 } else if (i < kQuicFrameTypeSize + stream_id_size + | 470 } else if (i < kQuicFrameTypeSize + stream_id_size + |
469 kQuicMaxStreamOffsetSize) { | 471 kQuicMaxStreamOffsetSize) { |
470 expected_error = "Unable to read offset."; | 472 expected_error = "Unable to read offset."; |
471 } else { | 473 } else { |
472 expected_error = "Unable to read frame data."; | 474 expected_error = "Unable to read frame data."; |
473 } | 475 } |
474 CheckProcessingFails( | 476 CheckProcessingFails( |
475 packet, | 477 packet, |
476 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, include_version, | 478 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, |
477 PACKET_6BYTE_SEQUENCE_NUMBER, | 479 PACKET_6BYTE_SEQUENCE_NUMBER, |
478 NOT_IN_FEC_GROUP), | 480 NOT_IN_FEC_GROUP), |
479 expected_error, QUIC_INVALID_STREAM_DATA); | 481 expected_error, QUIC_INVALID_STREAM_DATA); |
480 } | 482 } |
481 } | 483 } |
482 | 484 |
483 void CheckCalculatePacketSequenceNumber( | 485 void CheckCalculatePacketSequenceNumber( |
484 QuicPacketSequenceNumber expected_sequence_number, | 486 QuicPacketSequenceNumber expected_sequence_number, |
485 QuicPacketSequenceNumber last_sequence_number) { | 487 QuicPacketSequenceNumber last_sequence_number) { |
486 QuicPacketSequenceNumber wire_sequence_number = | 488 QuicPacketSequenceNumber wire_sequence_number = |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 | 612 |
611 TEST_P(QuicFramerTest, EmptyPacket) { | 613 TEST_P(QuicFramerTest, EmptyPacket) { |
612 char packet[] = { 0x00 }; | 614 char packet[] = { 0x00 }; |
613 QuicEncryptedPacket encrypted(packet, 0, false); | 615 QuicEncryptedPacket encrypted(packet, 0, false); |
614 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 616 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
615 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 617 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
616 } | 618 } |
617 | 619 |
618 TEST_P(QuicFramerTest, LargePacket) { | 620 TEST_P(QuicFramerTest, LargePacket) { |
619 unsigned char packet[kMaxPacketSize + 1] = { | 621 unsigned char packet[kMaxPacketSize + 1] = { |
620 // public flags (8 byte guid) | 622 // public flags (8 byte connection_id) |
621 0x3C, | 623 0x3C, |
622 // guid | 624 // connection_id |
623 0x10, 0x32, 0x54, 0x76, | 625 0x10, 0x32, 0x54, 0x76, |
624 0x98, 0xBA, 0xDC, 0xFE, | 626 0x98, 0xBA, 0xDC, 0xFE, |
625 // packet sequence number | 627 // packet sequence number |
626 0xBC, 0x9A, 0x78, 0x56, | 628 0xBC, 0x9A, 0x78, 0x56, |
627 0x34, 0x12, | 629 0x34, 0x12, |
628 // private flags | 630 // private flags |
629 0x00, | 631 0x00, |
630 }; | 632 }; |
631 | 633 |
632 memset(packet + GetPacketHeaderSize( | 634 memset(packet + GetPacketHeaderSize( |
633 PACKET_8BYTE_GUID, !kIncludeVersion, | 635 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
634 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, | 636 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, |
635 kMaxPacketSize - GetPacketHeaderSize( | 637 kMaxPacketSize - GetPacketHeaderSize( |
636 PACKET_8BYTE_GUID, !kIncludeVersion, | 638 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
637 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); | 639 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); |
638 | 640 |
639 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 641 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
640 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 642 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
641 | 643 |
642 ASSERT_TRUE(visitor_.header_.get()); | 644 ASSERT_TRUE(visitor_.header_.get()); |
643 // Make sure we've parsed the packet header, so we can send an error. | 645 // Make sure we've parsed the packet header, so we can send an error. |
644 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 646 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
645 visitor_.header_->public_header.guid); | 647 visitor_.header_->public_header.connection_id); |
646 // Make sure the correct error is propagated. | 648 // Make sure the correct error is propagated. |
647 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 649 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
648 } | 650 } |
649 | 651 |
650 TEST_P(QuicFramerTest, PacketHeader) { | 652 TEST_P(QuicFramerTest, PacketHeader) { |
651 unsigned char packet[] = { | 653 unsigned char packet[] = { |
652 // public flags (8 byte guid) | 654 // public flags (8 byte connection_id) |
653 0x3C, | 655 0x3C, |
654 // guid | 656 // connection_id |
655 0x10, 0x32, 0x54, 0x76, | 657 0x10, 0x32, 0x54, 0x76, |
656 0x98, 0xBA, 0xDC, 0xFE, | 658 0x98, 0xBA, 0xDC, 0xFE, |
657 // packet sequence number | 659 // packet sequence number |
658 0xBC, 0x9A, 0x78, 0x56, | 660 0xBC, 0x9A, 0x78, 0x56, |
659 0x34, 0x12, | 661 0x34, 0x12, |
660 // private flags | 662 // private flags |
661 0x00, | 663 0x00, |
662 }; | 664 }; |
663 | 665 |
664 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 666 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
665 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 667 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
666 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 668 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
667 ASSERT_TRUE(visitor_.header_.get()); | 669 ASSERT_TRUE(visitor_.header_.get()); |
668 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 670 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
669 visitor_.header_->public_header.guid); | 671 visitor_.header_->public_header.connection_id); |
670 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 672 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
671 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 673 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
672 EXPECT_FALSE(visitor_.header_->fec_flag); | 674 EXPECT_FALSE(visitor_.header_->fec_flag); |
673 EXPECT_FALSE(visitor_.header_->entropy_flag); | 675 EXPECT_FALSE(visitor_.header_->entropy_flag); |
674 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 676 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
675 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 677 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
676 visitor_.header_->packet_sequence_number); | 678 visitor_.header_->packet_sequence_number); |
677 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 679 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
678 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 680 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
679 | 681 |
680 // Now test framing boundaries | 682 // Now test framing boundaries |
681 for (size_t i = 0; | 683 for (size_t i = 0; |
682 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 684 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
683 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 685 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
684 ++i) { | 686 ++i) { |
685 string expected_error; | 687 string expected_error; |
686 if (i < kGuidOffset) { | 688 if (i < kConnectionIdOffset) { |
687 expected_error = "Unable to read public flags."; | 689 expected_error = "Unable to read public flags."; |
688 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 690 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
689 expected_error = "Unable to read GUID."; | 691 expected_error = "Unable to read ConnectionId."; |
690 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 692 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { |
691 expected_error = "Unable to read sequence number."; | 693 expected_error = "Unable to read sequence number."; |
692 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 694 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
693 expected_error = "Unable to read private flags."; | 695 expected_error = "Unable to read private flags."; |
694 } else { | 696 } else { |
695 expected_error = "Unable to read first fec protected packet offset."; | 697 expected_error = "Unable to read first fec protected packet offset."; |
696 } | 698 } |
697 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 699 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
698 } | 700 } |
699 } | 701 } |
700 | 702 |
701 TEST_P(QuicFramerTest, PacketHeaderWith4ByteGuid) { | 703 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { |
702 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 704 QuicFramerPeer::SetLastSerializedConnectionId( |
703 GG_UINT64_C(0xFEDCBA9876543210)); | 705 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); |
704 | 706 |
705 unsigned char packet[] = { | 707 unsigned char packet[] = { |
706 // public flags (4 byte guid) | 708 // public flags (4 byte connection_id) |
707 0x38, | 709 0x38, |
708 // guid | 710 // connection_id |
709 0x10, 0x32, 0x54, 0x76, | 711 0x10, 0x32, 0x54, 0x76, |
710 // packet sequence number | 712 // packet sequence number |
711 0xBC, 0x9A, 0x78, 0x56, | 713 0xBC, 0x9A, 0x78, 0x56, |
712 0x34, 0x12, | 714 0x34, 0x12, |
713 // private flags | 715 // private flags |
714 0x00, | 716 0x00, |
715 }; | 717 }; |
716 | 718 |
717 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
718 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 720 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
719 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 721 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
720 ASSERT_TRUE(visitor_.header_.get()); | 722 ASSERT_TRUE(visitor_.header_.get()); |
721 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 723 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
722 visitor_.header_->public_header.guid); | 724 visitor_.header_->public_header.connection_id); |
723 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 725 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
724 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 726 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
725 EXPECT_FALSE(visitor_.header_->fec_flag); | 727 EXPECT_FALSE(visitor_.header_->fec_flag); |
726 EXPECT_FALSE(visitor_.header_->entropy_flag); | 728 EXPECT_FALSE(visitor_.header_->entropy_flag); |
727 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 729 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
728 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 730 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
729 visitor_.header_->packet_sequence_number); | 731 visitor_.header_->packet_sequence_number); |
730 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 732 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
731 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 733 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
732 | 734 |
733 // Now test framing boundaries | 735 // Now test framing boundaries |
734 for (size_t i = 0; | 736 for (size_t i = 0; |
735 i < GetPacketHeaderSize(PACKET_4BYTE_GUID, !kIncludeVersion, | 737 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, |
736 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 738 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
737 ++i) { | 739 ++i) { |
738 string expected_error; | 740 string expected_error; |
739 if (i < kGuidOffset) { | 741 if (i < kConnectionIdOffset) { |
740 expected_error = "Unable to read public flags."; | 742 expected_error = "Unable to read public flags."; |
741 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_GUID, | 743 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_CONNECTION_ID, |
742 !kIncludeVersion)) { | 744 !kIncludeVersion)) { |
743 expected_error = "Unable to read GUID."; | 745 expected_error = "Unable to read ConnectionId."; |
744 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_GUID, | 746 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, |
745 !kIncludeVersion)) { | 747 !kIncludeVersion)) { |
746 expected_error = "Unable to read sequence number."; | 748 expected_error = "Unable to read sequence number."; |
747 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { | 749 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, |
| 750 !kIncludeVersion)) { |
748 expected_error = "Unable to read private flags."; | 751 expected_error = "Unable to read private flags."; |
749 } else { | 752 } else { |
750 expected_error = "Unable to read first fec protected packet offset."; | 753 expected_error = "Unable to read first fec protected packet offset."; |
751 } | 754 } |
752 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 755 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
753 } | 756 } |
754 } | 757 } |
755 | 758 |
756 TEST_P(QuicFramerTest, PacketHeader1ByteGuid) { | 759 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { |
757 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 760 QuicFramerPeer::SetLastSerializedConnectionId( |
758 GG_UINT64_C(0xFEDCBA9876543210)); | 761 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); |
759 | 762 |
760 unsigned char packet[] = { | 763 unsigned char packet[] = { |
761 // public flags (1 byte guid) | 764 // public flags (1 byte connection_id) |
762 0x34, | 765 0x34, |
763 // guid | 766 // connection_id |
764 0x10, | 767 0x10, |
765 // packet sequence number | 768 // packet sequence number |
766 0xBC, 0x9A, 0x78, 0x56, | 769 0xBC, 0x9A, 0x78, 0x56, |
767 0x34, 0x12, | 770 0x34, 0x12, |
768 // private flags | 771 // private flags |
769 0x00, | 772 0x00, |
770 }; | 773 }; |
771 | 774 |
772 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 775 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
773 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 776 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
774 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 777 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
775 ASSERT_TRUE(visitor_.header_.get()); | 778 ASSERT_TRUE(visitor_.header_.get()); |
776 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 779 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
777 visitor_.header_->public_header.guid); | 780 visitor_.header_->public_header.connection_id); |
778 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 781 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
779 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 782 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
780 EXPECT_FALSE(visitor_.header_->fec_flag); | 783 EXPECT_FALSE(visitor_.header_->fec_flag); |
781 EXPECT_FALSE(visitor_.header_->entropy_flag); | 784 EXPECT_FALSE(visitor_.header_->entropy_flag); |
782 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 785 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
783 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 786 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
784 visitor_.header_->packet_sequence_number); | 787 visitor_.header_->packet_sequence_number); |
785 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 788 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
786 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 789 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
787 | 790 |
788 // Now test framing boundaries | 791 // Now test framing boundaries |
789 for (size_t i = 0; | 792 for (size_t i = 0; |
790 i < GetPacketHeaderSize(PACKET_1BYTE_GUID, !kIncludeVersion, | 793 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, |
791 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 794 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
792 ++i) { | 795 ++i) { |
793 string expected_error; | 796 string expected_error; |
794 if (i < kGuidOffset) { | 797 if (i < kConnectionIdOffset) { |
795 expected_error = "Unable to read public flags."; | 798 expected_error = "Unable to read public flags."; |
796 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_GUID, | 799 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_CONNECTION_ID, |
797 !kIncludeVersion)) { | 800 !kIncludeVersion)) { |
798 expected_error = "Unable to read GUID."; | 801 expected_error = "Unable to read ConnectionId."; |
799 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 802 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, |
| 803 !kIncludeVersion)) { |
800 expected_error = "Unable to read sequence number."; | 804 expected_error = "Unable to read sequence number."; |
801 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 805 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, |
| 806 !kIncludeVersion)) { |
802 expected_error = "Unable to read private flags."; | 807 expected_error = "Unable to read private flags."; |
803 } else { | 808 } else { |
804 expected_error = "Unable to read first fec protected packet offset."; | 809 expected_error = "Unable to read first fec protected packet offset."; |
805 } | 810 } |
806 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 811 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
807 } | 812 } |
808 } | 813 } |
809 | 814 |
810 TEST_P(QuicFramerTest, PacketHeaderWith0ByteGuid) { | 815 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
811 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 816 QuicFramerPeer::SetLastSerializedConnectionId( |
812 GG_UINT64_C(0xFEDCBA9876543210)); | 817 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); |
813 | 818 |
814 unsigned char packet[] = { | 819 unsigned char packet[] = { |
815 // public flags (0 byte guid) | 820 // public flags (0 byte connection_id) |
816 0x30, | 821 0x30, |
817 // guid | 822 // connection_id |
818 // packet sequence number | 823 // packet sequence number |
819 0xBC, 0x9A, 0x78, 0x56, | 824 0xBC, 0x9A, 0x78, 0x56, |
820 0x34, 0x12, | 825 0x34, 0x12, |
821 // private flags | 826 // private flags |
822 0x00, | 827 0x00, |
823 }; | 828 }; |
824 | 829 |
825 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 830 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
826 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 831 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
827 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 832 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
828 ASSERT_TRUE(visitor_.header_.get()); | 833 ASSERT_TRUE(visitor_.header_.get()); |
829 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 834 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
830 visitor_.header_->public_header.guid); | 835 visitor_.header_->public_header.connection_id); |
831 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 836 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
832 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 837 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
833 EXPECT_FALSE(visitor_.header_->fec_flag); | 838 EXPECT_FALSE(visitor_.header_->fec_flag); |
834 EXPECT_FALSE(visitor_.header_->entropy_flag); | 839 EXPECT_FALSE(visitor_.header_->entropy_flag); |
835 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 840 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
836 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 841 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
837 visitor_.header_->packet_sequence_number); | 842 visitor_.header_->packet_sequence_number); |
838 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 843 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
839 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 844 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
840 | 845 |
841 // Now test framing boundaries | 846 // Now test framing boundaries |
842 for (size_t i = 0; | 847 for (size_t i = 0; |
843 i < GetPacketHeaderSize(PACKET_0BYTE_GUID, !kIncludeVersion, | 848 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, |
844 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 849 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
845 ++i) { | 850 ++i) { |
846 string expected_error; | 851 string expected_error; |
847 if (i < kGuidOffset) { | 852 if (i < kConnectionIdOffset) { |
848 expected_error = "Unable to read public flags."; | 853 expected_error = "Unable to read public flags."; |
849 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_GUID, | 854 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_CONNECTION_ID, |
850 !kIncludeVersion)) { | 855 !kIncludeVersion)) { |
851 expected_error = "Unable to read GUID."; | 856 expected_error = "Unable to read ConnectionId."; |
852 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 857 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_CONNECTION_ID, |
| 858 !kIncludeVersion)) { |
853 expected_error = "Unable to read sequence number."; | 859 expected_error = "Unable to read sequence number."; |
854 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 860 } else if (i < GetFecGroupOffset(PACKET_0BYTE_CONNECTION_ID, |
| 861 !kIncludeVersion)) { |
855 expected_error = "Unable to read private flags."; | 862 expected_error = "Unable to read private flags."; |
856 } else { | 863 } else { |
857 expected_error = "Unable to read first fec protected packet offset."; | 864 expected_error = "Unable to read first fec protected packet offset."; |
858 } | 865 } |
859 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 866 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
860 } | 867 } |
861 } | 868 } |
862 | 869 |
863 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { | 870 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
864 unsigned char packet[] = { | 871 unsigned char packet[] = { |
865 // public flags (version) | 872 // public flags (version) |
866 0x3D, | 873 0x3D, |
867 // guid | 874 // connection_id |
868 0x10, 0x32, 0x54, 0x76, | 875 0x10, 0x32, 0x54, 0x76, |
869 0x98, 0xBA, 0xDC, 0xFE, | 876 0x98, 0xBA, 0xDC, 0xFE, |
870 // version tag | 877 // version tag |
871 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 878 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
872 // packet sequence number | 879 // packet sequence number |
873 0xBC, 0x9A, 0x78, 0x56, | 880 0xBC, 0x9A, 0x78, 0x56, |
874 0x34, 0x12, | 881 0x34, 0x12, |
875 // private flags | 882 // private flags |
876 0x00, | 883 0x00, |
877 }; | 884 }; |
878 | 885 |
879 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 886 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
880 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 887 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
881 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 888 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
882 ASSERT_TRUE(visitor_.header_.get()); | 889 ASSERT_TRUE(visitor_.header_.get()); |
883 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 890 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
884 visitor_.header_->public_header.guid); | 891 visitor_.header_->public_header.connection_id); |
885 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 892 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
886 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 893 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
887 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 894 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
888 EXPECT_FALSE(visitor_.header_->fec_flag); | 895 EXPECT_FALSE(visitor_.header_->fec_flag); |
889 EXPECT_FALSE(visitor_.header_->entropy_flag); | 896 EXPECT_FALSE(visitor_.header_->entropy_flag); |
890 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 897 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
891 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 898 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
892 visitor_.header_->packet_sequence_number); | 899 visitor_.header_->packet_sequence_number); |
893 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 900 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
894 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 901 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
895 | 902 |
896 // Now test framing boundaries | 903 // Now test framing boundaries |
897 for (size_t i = 0; | 904 for (size_t i = 0; |
898 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, | 905 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
899 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 906 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
900 ++i) { | 907 ++i) { |
901 string expected_error; | 908 string expected_error; |
902 if (i < kGuidOffset) { | 909 if (i < kConnectionIdOffset) { |
903 expected_error = "Unable to read public flags."; | 910 expected_error = "Unable to read public flags."; |
904 } else if (i < kVersionOffset) { | 911 } else if (i < kVersionOffset) { |
905 expected_error = "Unable to read GUID."; | 912 expected_error = "Unable to read ConnectionId."; |
906 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { | 913 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { |
907 expected_error = "Unable to read protocol version."; | 914 expected_error = "Unable to read protocol version."; |
908 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 915 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { |
909 expected_error = "Unable to read sequence number."; | 916 expected_error = "Unable to read sequence number."; |
910 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 917 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
911 expected_error = "Unable to read private flags."; | 918 expected_error = "Unable to read private flags."; |
912 } else { | 919 } else { |
913 expected_error = "Unable to read first fec protected packet offset."; | 920 expected_error = "Unable to read first fec protected packet offset."; |
914 } | 921 } |
915 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 922 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
916 } | 923 } |
917 } | 924 } |
918 | 925 |
919 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { | 926 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { |
920 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 927 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
921 GG_UINT64_C(0x123456789ABA)); | 928 GG_UINT64_C(0x123456789ABA)); |
922 | 929 |
923 unsigned char packet[] = { | 930 unsigned char packet[] = { |
924 // public flags (8 byte guid and 4 byte sequence number) | 931 // public flags (8 byte connection_id and 4 byte sequence number) |
925 0x2C, | 932 0x2C, |
926 // guid | 933 // connection_id |
927 0x10, 0x32, 0x54, 0x76, | 934 0x10, 0x32, 0x54, 0x76, |
928 0x98, 0xBA, 0xDC, 0xFE, | 935 0x98, 0xBA, 0xDC, 0xFE, |
929 // packet sequence number | 936 // packet sequence number |
930 0xBC, 0x9A, 0x78, 0x56, | 937 0xBC, 0x9A, 0x78, 0x56, |
931 // private flags | 938 // private flags |
932 0x00, | 939 0x00, |
933 }; | 940 }; |
934 | 941 |
935 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 942 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
936 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 943 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
937 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 944 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
938 ASSERT_TRUE(visitor_.header_.get()); | 945 ASSERT_TRUE(visitor_.header_.get()); |
939 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 946 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
940 visitor_.header_->public_header.guid); | 947 visitor_.header_->public_header.connection_id); |
941 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 948 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
942 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 949 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
943 EXPECT_FALSE(visitor_.header_->fec_flag); | 950 EXPECT_FALSE(visitor_.header_->fec_flag); |
944 EXPECT_FALSE(visitor_.header_->entropy_flag); | 951 EXPECT_FALSE(visitor_.header_->entropy_flag); |
945 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 952 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
946 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 953 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
947 visitor_.header_->packet_sequence_number); | 954 visitor_.header_->packet_sequence_number); |
948 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 955 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
949 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 956 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
950 | 957 |
951 // Now test framing boundaries | 958 // Now test framing boundaries |
952 for (size_t i = 0; | 959 for (size_t i = 0; |
953 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 960 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
954 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 961 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
955 ++i) { | 962 ++i) { |
956 string expected_error; | 963 string expected_error; |
957 if (i < kGuidOffset) { | 964 if (i < kConnectionIdOffset) { |
958 expected_error = "Unable to read public flags."; | 965 expected_error = "Unable to read public flags."; |
959 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 966 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
960 expected_error = "Unable to read GUID."; | 967 expected_error = "Unable to read ConnectionId."; |
961 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 968 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
962 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 969 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
963 expected_error = "Unable to read sequence number."; | 970 expected_error = "Unable to read sequence number."; |
964 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 971 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
965 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 972 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
966 expected_error = "Unable to read private flags."; | 973 expected_error = "Unable to read private flags."; |
967 } else { | 974 } else { |
968 expected_error = "Unable to read first fec protected packet offset."; | 975 expected_error = "Unable to read first fec protected packet offset."; |
969 } | 976 } |
970 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 977 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
971 } | 978 } |
972 } | 979 } |
973 | 980 |
974 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { | 981 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { |
975 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 982 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
976 GG_UINT64_C(0x123456789ABA)); | 983 GG_UINT64_C(0x123456789ABA)); |
977 | 984 |
978 unsigned char packet[] = { | 985 unsigned char packet[] = { |
979 // public flags (8 byte guid and 2 byte sequence number) | 986 // public flags (8 byte connection_id and 2 byte sequence number) |
980 0x1C, | 987 0x1C, |
981 // guid | 988 // connection_id |
982 0x10, 0x32, 0x54, 0x76, | 989 0x10, 0x32, 0x54, 0x76, |
983 0x98, 0xBA, 0xDC, 0xFE, | 990 0x98, 0xBA, 0xDC, 0xFE, |
984 // packet sequence number | 991 // packet sequence number |
985 0xBC, 0x9A, | 992 0xBC, 0x9A, |
986 // private flags | 993 // private flags |
987 0x00, | 994 0x00, |
988 }; | 995 }; |
989 | 996 |
990 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 997 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
991 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 998 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
992 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 999 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
993 ASSERT_TRUE(visitor_.header_.get()); | 1000 ASSERT_TRUE(visitor_.header_.get()); |
994 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 1001 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
995 visitor_.header_->public_header.guid); | 1002 visitor_.header_->public_header.connection_id); |
996 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1003 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
997 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1004 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
998 EXPECT_FALSE(visitor_.header_->fec_flag); | 1005 EXPECT_FALSE(visitor_.header_->fec_flag); |
999 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1006 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1000 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1007 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1001 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1008 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
1002 visitor_.header_->packet_sequence_number); | 1009 visitor_.header_->packet_sequence_number); |
1003 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1010 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1004 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1011 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
1005 | 1012 |
1006 // Now test framing boundaries | 1013 // Now test framing boundaries |
1007 for (size_t i = 0; | 1014 for (size_t i = 0; |
1008 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1015 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1009 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 1016 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
1010 ++i) { | 1017 ++i) { |
1011 string expected_error; | 1018 string expected_error; |
1012 if (i < kGuidOffset) { | 1019 if (i < kConnectionIdOffset) { |
1013 expected_error = "Unable to read public flags."; | 1020 expected_error = "Unable to read public flags."; |
1014 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 1021 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
1015 expected_error = "Unable to read GUID."; | 1022 expected_error = "Unable to read ConnectionId."; |
1016 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 1023 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
1017 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 1024 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
1018 expected_error = "Unable to read sequence number."; | 1025 expected_error = "Unable to read sequence number."; |
1019 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 1026 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
1020 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 1027 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
1021 expected_error = "Unable to read private flags."; | 1028 expected_error = "Unable to read private flags."; |
1022 } else { | 1029 } else { |
1023 expected_error = "Unable to read first fec protected packet offset."; | 1030 expected_error = "Unable to read first fec protected packet offset."; |
1024 } | 1031 } |
1025 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1032 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1026 } | 1033 } |
1027 } | 1034 } |
1028 | 1035 |
1029 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { | 1036 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { |
1030 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 1037 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
1031 GG_UINT64_C(0x123456789ABA)); | 1038 GG_UINT64_C(0x123456789ABA)); |
1032 | 1039 |
1033 unsigned char packet[] = { | 1040 unsigned char packet[] = { |
1034 // public flags (8 byte guid and 1 byte sequence number) | 1041 // public flags (8 byte connection_id and 1 byte sequence number) |
1035 0x0C, | 1042 0x0C, |
1036 // guid | 1043 // connection_id |
1037 0x10, 0x32, 0x54, 0x76, | 1044 0x10, 0x32, 0x54, 0x76, |
1038 0x98, 0xBA, 0xDC, 0xFE, | 1045 0x98, 0xBA, 0xDC, 0xFE, |
1039 // packet sequence number | 1046 // packet sequence number |
1040 0xBC, | 1047 0xBC, |
1041 // private flags | 1048 // private flags |
1042 0x00, | 1049 0x00, |
1043 }; | 1050 }; |
1044 | 1051 |
1045 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1052 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1046 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1053 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1047 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1054 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
1048 ASSERT_TRUE(visitor_.header_.get()); | 1055 ASSERT_TRUE(visitor_.header_.get()); |
1049 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 1056 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
1050 visitor_.header_->public_header.guid); | 1057 visitor_.header_->public_header.connection_id); |
1051 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1058 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
1052 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1059 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
1053 EXPECT_FALSE(visitor_.header_->fec_flag); | 1060 EXPECT_FALSE(visitor_.header_->fec_flag); |
1054 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1061 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1055 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1062 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1056 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1063 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
1057 visitor_.header_->packet_sequence_number); | 1064 visitor_.header_->packet_sequence_number); |
1058 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1065 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1059 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1066 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
1060 | 1067 |
1061 // Now test framing boundaries | 1068 // Now test framing boundaries |
1062 for (size_t i = 0; | 1069 for (size_t i = 0; |
1063 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1070 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1064 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 1071 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
1065 ++i) { | 1072 ++i) { |
1066 string expected_error; | 1073 string expected_error; |
1067 if (i < kGuidOffset) { | 1074 if (i < kConnectionIdOffset) { |
1068 expected_error = "Unable to read public flags."; | 1075 expected_error = "Unable to read public flags."; |
1069 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 1076 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
1070 expected_error = "Unable to read GUID."; | 1077 expected_error = "Unable to read ConnectionId."; |
1071 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 1078 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
1072 PACKET_1BYTE_SEQUENCE_NUMBER)) { | 1079 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
1073 expected_error = "Unable to read sequence number."; | 1080 expected_error = "Unable to read sequence number."; |
1074 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 1081 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
1075 PACKET_1BYTE_SEQUENCE_NUMBER)) { | 1082 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
1076 expected_error = "Unable to read private flags."; | 1083 expected_error = "Unable to read private flags."; |
1077 } else { | 1084 } else { |
1078 expected_error = "Unable to read first fec protected packet offset."; | 1085 expected_error = "Unable to read first fec protected packet offset."; |
1079 } | 1086 } |
1080 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1087 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1081 } | 1088 } |
1082 } | 1089 } |
1083 | 1090 |
1084 TEST_P(QuicFramerTest, InvalidPublicFlag) { | 1091 TEST_P(QuicFramerTest, InvalidPublicFlag) { |
1085 unsigned char packet[] = { | 1092 unsigned char packet[] = { |
1086 // public flags, unknown flag at bit 6 | 1093 // public flags, unknown flag at bit 6 |
1087 0x40, | 1094 0x40, |
1088 // guid | 1095 // connection_id |
1089 0x10, 0x32, 0x54, 0x76, | 1096 0x10, 0x32, 0x54, 0x76, |
1090 0x98, 0xBA, 0xDC, 0xFE, | 1097 0x98, 0xBA, 0xDC, 0xFE, |
1091 // packet sequence number | 1098 // packet sequence number |
1092 0xBC, 0x9A, 0x78, 0x56, | 1099 0xBC, 0x9A, 0x78, 0x56, |
1093 0x34, 0x12, | 1100 0x34, 0x12, |
1094 // private flags | 1101 // private flags |
1095 0x00, | 1102 0x00, |
1096 | 1103 |
1097 // frame type (padding) | 1104 // frame type (padding) |
1098 0x00, | 1105 0x00, |
1099 0x00, 0x00, 0x00, 0x00 | 1106 0x00, 0x00, 0x00, 0x00 |
1100 }; | 1107 }; |
1101 CheckProcessingFails(packet, | 1108 CheckProcessingFails(packet, |
1102 arraysize(packet), | 1109 arraysize(packet), |
1103 "Illegal public flags value.", | 1110 "Illegal public flags value.", |
1104 QUIC_INVALID_PACKET_HEADER); | 1111 QUIC_INVALID_PACKET_HEADER); |
1105 }; | 1112 }; |
1106 | 1113 |
1107 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { | 1114 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { |
1108 unsigned char packet[] = { | 1115 unsigned char packet[] = { |
1109 // public flags (8 byte guid and version flag and an unknown flag) | 1116 // public flags (8 byte connection_id and version flag and an unknown flag) |
1110 0x4D, | 1117 0x4D, |
1111 // guid | 1118 // connection_id |
1112 0x10, 0x32, 0x54, 0x76, | 1119 0x10, 0x32, 0x54, 0x76, |
1113 0x98, 0xBA, 0xDC, 0xFE, | 1120 0x98, 0xBA, 0xDC, 0xFE, |
1114 // version tag | 1121 // version tag |
1115 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 1122 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
1116 // packet sequence number | 1123 // packet sequence number |
1117 0xBC, 0x9A, 0x78, 0x56, | 1124 0xBC, 0x9A, 0x78, 0x56, |
1118 0x34, 0x12, | 1125 0x34, 0x12, |
1119 // private flags | 1126 // private flags |
1120 0x00, | 1127 0x00, |
1121 | 1128 |
1122 // frame type (padding) | 1129 // frame type (padding) |
1123 0x00, | 1130 0x00, |
1124 0x00, 0x00, 0x00, 0x00 | 1131 0x00, 0x00, 0x00, 0x00 |
1125 }; | 1132 }; |
1126 CheckProcessingFails(packet, | 1133 CheckProcessingFails(packet, |
1127 arraysize(packet), | 1134 arraysize(packet), |
1128 "Illegal public flags value.", | 1135 "Illegal public flags value.", |
1129 QUIC_INVALID_PACKET_HEADER); | 1136 QUIC_INVALID_PACKET_HEADER); |
1130 }; | 1137 }; |
1131 | 1138 |
1132 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { | 1139 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
1133 unsigned char packet[] = { | 1140 unsigned char packet[] = { |
1134 // public flags (8 byte guid, version flag and an unknown flag) | 1141 // public flags (8 byte connection_id, version flag and an unknown flag) |
1135 0x7D, | 1142 0x7D, |
1136 // guid | 1143 // connection_id |
1137 0x10, 0x32, 0x54, 0x76, | 1144 0x10, 0x32, 0x54, 0x76, |
1138 0x98, 0xBA, 0xDC, 0xFE, | 1145 0x98, 0xBA, 0xDC, 0xFE, |
1139 // version tag | 1146 // version tag |
1140 'Q', '0', '0', '0', | 1147 'Q', '0', '0', '0', |
1141 // packet sequence number | 1148 // packet sequence number |
1142 0xBC, 0x9A, 0x78, 0x56, | 1149 0xBC, 0x9A, 0x78, 0x56, |
1143 0x34, 0x12, | 1150 0x34, 0x12, |
1144 // private flags | 1151 // private flags |
1145 0x00, | 1152 0x00, |
1146 | 1153 |
1147 // frame type (padding frame) | 1154 // frame type (padding frame) |
1148 0x00, | 1155 0x00, |
1149 0x00, 0x00, 0x00, 0x00 | 1156 0x00, 0x00, 0x00, 0x00 |
1150 }; | 1157 }; |
1151 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1158 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1152 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1159 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1153 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1160 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1154 ASSERT_TRUE(visitor_.header_.get()); | 1161 ASSERT_TRUE(visitor_.header_.get()); |
1155 EXPECT_EQ(0, visitor_.frame_count_); | 1162 EXPECT_EQ(0, visitor_.frame_count_); |
1156 EXPECT_EQ(1, visitor_.version_mismatch_); | 1163 EXPECT_EQ(1, visitor_.version_mismatch_); |
1157 }; | 1164 }; |
1158 | 1165 |
1159 TEST_P(QuicFramerTest, InvalidPrivateFlag) { | 1166 TEST_P(QuicFramerTest, InvalidPrivateFlag) { |
1160 unsigned char packet[] = { | 1167 unsigned char packet[] = { |
1161 // public flags (8 byte guid) | 1168 // public flags (8 byte connection_id) |
1162 0x3C, | 1169 0x3C, |
1163 // guid | 1170 // connection_id |
1164 0x10, 0x32, 0x54, 0x76, | 1171 0x10, 0x32, 0x54, 0x76, |
1165 0x98, 0xBA, 0xDC, 0xFE, | 1172 0x98, 0xBA, 0xDC, 0xFE, |
1166 // packet sequence number | 1173 // packet sequence number |
1167 0xBC, 0x9A, 0x78, 0x56, | 1174 0xBC, 0x9A, 0x78, 0x56, |
1168 0x34, 0x12, | 1175 0x34, 0x12, |
1169 // private flags | 1176 // private flags |
1170 0x10, | 1177 0x10, |
1171 | 1178 |
1172 // frame type (padding) | 1179 // frame type (padding) |
1173 0x00, | 1180 0x00, |
1174 0x00, 0x00, 0x00, 0x00 | 1181 0x00, 0x00, 0x00, 0x00 |
1175 }; | 1182 }; |
1176 CheckProcessingFails(packet, | 1183 CheckProcessingFails(packet, |
1177 arraysize(packet), | 1184 arraysize(packet), |
1178 "Illegal private flags value.", | 1185 "Illegal private flags value.", |
1179 QUIC_INVALID_PACKET_HEADER); | 1186 QUIC_INVALID_PACKET_HEADER); |
1180 }; | 1187 }; |
1181 | 1188 |
1182 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { | 1189 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { |
1183 unsigned char packet[] = { | 1190 unsigned char packet[] = { |
1184 // public flags (8 byte guid) | 1191 // public flags (8 byte connection_id) |
1185 0x3C, | 1192 0x3C, |
1186 // guid | 1193 // connection_id |
1187 0x10, 0x32, 0x54, 0x76, | 1194 0x10, 0x32, 0x54, 0x76, |
1188 0x98, 0xBA, 0xDC, 0xFE, | 1195 0x98, 0xBA, 0xDC, 0xFE, |
1189 // packet sequence number | 1196 // packet sequence number |
1190 0x01, 0x00, 0x00, 0x00, | 1197 0x01, 0x00, 0x00, 0x00, |
1191 0x00, 0x00, | 1198 0x00, 0x00, |
1192 // private flags (fec group) | 1199 // private flags (fec group) |
1193 0x02, | 1200 0x02, |
1194 // first fec protected packet offset | 1201 // first fec protected packet offset |
1195 0x10 | 1202 0x10 |
1196 }; | 1203 }; |
1197 CheckProcessingFails(packet, | 1204 CheckProcessingFails(packet, |
1198 arraysize(packet), | 1205 arraysize(packet), |
1199 "First fec protected packet offset must be less " | 1206 "First fec protected packet offset must be less " |
1200 "than the sequence number.", | 1207 "than the sequence number.", |
1201 QUIC_INVALID_PACKET_HEADER); | 1208 QUIC_INVALID_PACKET_HEADER); |
1202 }; | 1209 }; |
1203 | 1210 |
1204 TEST_P(QuicFramerTest, PaddingFrame) { | 1211 TEST_P(QuicFramerTest, PaddingFrame) { |
1205 unsigned char packet[] = { | 1212 unsigned char packet[] = { |
1206 // public flags (8 byte guid) | 1213 // public flags (8 byte connection_id) |
1207 0x3C, | 1214 0x3C, |
1208 // guid | 1215 // connection_id |
1209 0x10, 0x32, 0x54, 0x76, | 1216 0x10, 0x32, 0x54, 0x76, |
1210 0x98, 0xBA, 0xDC, 0xFE, | 1217 0x98, 0xBA, 0xDC, 0xFE, |
1211 // packet sequence number | 1218 // packet sequence number |
1212 0xBC, 0x9A, 0x78, 0x56, | 1219 0xBC, 0x9A, 0x78, 0x56, |
1213 0x34, 0x12, | 1220 0x34, 0x12, |
1214 // private flags | 1221 // private flags |
1215 0x00, | 1222 0x00, |
1216 | 1223 |
1217 // frame type (padding frame) | 1224 // frame type (padding frame) |
1218 0x00, | 1225 0x00, |
(...skipping 17 matching lines...) Expand all Loading... |
1236 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1243 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1237 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1244 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1238 ASSERT_TRUE(visitor_.header_.get()); | 1245 ASSERT_TRUE(visitor_.header_.get()); |
1239 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1246 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1240 | 1247 |
1241 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1248 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1242 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1249 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1243 // A packet with no frames is not acceptable. | 1250 // A packet with no frames is not acceptable. |
1244 CheckProcessingFails( | 1251 CheckProcessingFails( |
1245 packet, | 1252 packet, |
1246 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1253 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1247 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1254 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1248 "Packet has no frames.", QUIC_MISSING_PAYLOAD); | 1255 "Packet has no frames.", QUIC_MISSING_PAYLOAD); |
1249 } | 1256 } |
1250 | 1257 |
1251 TEST_P(QuicFramerTest, StreamFrame) { | 1258 TEST_P(QuicFramerTest, StreamFrame) { |
1252 unsigned char packet[] = { | 1259 unsigned char packet[] = { |
1253 // public flags (8 byte guid) | 1260 // public flags (8 byte connection_id) |
1254 0x3C, | 1261 0x3C, |
1255 // guid | 1262 // connection_id |
1256 0x10, 0x32, 0x54, 0x76, | 1263 0x10, 0x32, 0x54, 0x76, |
1257 0x98, 0xBA, 0xDC, 0xFE, | 1264 0x98, 0xBA, 0xDC, 0xFE, |
1258 // packet sequence number | 1265 // packet sequence number |
1259 0xBC, 0x9A, 0x78, 0x56, | 1266 0xBC, 0x9A, 0x78, 0x56, |
1260 0x34, 0x12, | 1267 0x34, 0x12, |
1261 // private flags | 1268 // private flags |
1262 0x00, | 1269 0x00, |
1263 | 1270 |
1264 // frame type (stream frame with fin) | 1271 // frame type (stream frame with fin) |
1265 0xFF, | 1272 0xFF, |
(...skipping 25 matching lines...) Expand all Loading... |
1291 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1298 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1292 visitor_.stream_frames_[0]->offset); | 1299 visitor_.stream_frames_[0]->offset); |
1293 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1300 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1294 | 1301 |
1295 // Now test framing boundaries | 1302 // Now test framing boundaries |
1296 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 1303 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); |
1297 } | 1304 } |
1298 | 1305 |
1299 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1306 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
1300 unsigned char packet[] = { | 1307 unsigned char packet[] = { |
1301 // public flags (8 byte guid) | 1308 // public flags (8 byte connection_id) |
1302 0x3C, | 1309 0x3C, |
1303 // guid | 1310 // connection_id |
1304 0x10, 0x32, 0x54, 0x76, | 1311 0x10, 0x32, 0x54, 0x76, |
1305 0x98, 0xBA, 0xDC, 0xFE, | 1312 0x98, 0xBA, 0xDC, 0xFE, |
1306 // packet sequence number | 1313 // packet sequence number |
1307 0xBC, 0x9A, 0x78, 0x56, | 1314 0xBC, 0x9A, 0x78, 0x56, |
1308 0x34, 0x12, | 1315 0x34, 0x12, |
1309 // private flags | 1316 // private flags |
1310 0x00, | 1317 0x00, |
1311 | 1318 |
1312 // frame type (stream frame with fin) | 1319 // frame type (stream frame with fin) |
1313 0xFE, | 1320 0xFE, |
(...skipping 26 matching lines...) Expand all Loading... |
1340 visitor_.stream_frames_[0]->offset); | 1347 visitor_.stream_frames_[0]->offset); |
1341 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1348 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1342 | 1349 |
1343 // Now test framing boundaries | 1350 // Now test framing boundaries |
1344 const size_t stream_id_size = 3; | 1351 const size_t stream_id_size = 3; |
1345 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1352 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1346 } | 1353 } |
1347 | 1354 |
1348 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1355 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
1349 unsigned char packet[] = { | 1356 unsigned char packet[] = { |
1350 // public flags (8 byte guid) | 1357 // public flags (8 byte connection_id) |
1351 0x3C, | 1358 0x3C, |
1352 // guid | 1359 // connection_id |
1353 0x10, 0x32, 0x54, 0x76, | 1360 0x10, 0x32, 0x54, 0x76, |
1354 0x98, 0xBA, 0xDC, 0xFE, | 1361 0x98, 0xBA, 0xDC, 0xFE, |
1355 // packet sequence number | 1362 // packet sequence number |
1356 0xBC, 0x9A, 0x78, 0x56, | 1363 0xBC, 0x9A, 0x78, 0x56, |
1357 0x34, 0x12, | 1364 0x34, 0x12, |
1358 // private flags | 1365 // private flags |
1359 0x00, | 1366 0x00, |
1360 | 1367 |
1361 // frame type (stream frame with fin) | 1368 // frame type (stream frame with fin) |
1362 0xFD, | 1369 0xFD, |
(...skipping 26 matching lines...) Expand all Loading... |
1389 visitor_.stream_frames_[0]->offset); | 1396 visitor_.stream_frames_[0]->offset); |
1390 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1397 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1391 | 1398 |
1392 // Now test framing boundaries | 1399 // Now test framing boundaries |
1393 const size_t stream_id_size = 2; | 1400 const size_t stream_id_size = 2; |
1394 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1401 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1395 } | 1402 } |
1396 | 1403 |
1397 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1404 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
1398 unsigned char packet[] = { | 1405 unsigned char packet[] = { |
1399 // public flags (8 byte guid) | 1406 // public flags (8 byte connection_id) |
1400 0x3C, | 1407 0x3C, |
1401 // guid | 1408 // connection_id |
1402 0x10, 0x32, 0x54, 0x76, | 1409 0x10, 0x32, 0x54, 0x76, |
1403 0x98, 0xBA, 0xDC, 0xFE, | 1410 0x98, 0xBA, 0xDC, 0xFE, |
1404 // packet sequence number | 1411 // packet sequence number |
1405 0xBC, 0x9A, 0x78, 0x56, | 1412 0xBC, 0x9A, 0x78, 0x56, |
1406 0x34, 0x12, | 1413 0x34, 0x12, |
1407 // private flags | 1414 // private flags |
1408 0x00, | 1415 0x00, |
1409 | 1416 |
1410 // frame type (stream frame with fin) | 1417 // frame type (stream frame with fin) |
1411 0xFC, | 1418 0xFC, |
(...skipping 26 matching lines...) Expand all Loading... |
1438 visitor_.stream_frames_[0]->offset); | 1445 visitor_.stream_frames_[0]->offset); |
1439 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1446 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1440 | 1447 |
1441 // Now test framing boundaries | 1448 // Now test framing boundaries |
1442 const size_t stream_id_size = 1; | 1449 const size_t stream_id_size = 1; |
1443 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1450 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1444 } | 1451 } |
1445 | 1452 |
1446 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1453 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
1447 unsigned char packet[] = { | 1454 unsigned char packet[] = { |
1448 // public flags (version, 8 byte guid) | 1455 // public flags (version, 8 byte connection_id) |
1449 0x3D, | 1456 0x3D, |
1450 // guid | 1457 // connection_id |
1451 0x10, 0x32, 0x54, 0x76, | 1458 0x10, 0x32, 0x54, 0x76, |
1452 0x98, 0xBA, 0xDC, 0xFE, | 1459 0x98, 0xBA, 0xDC, 0xFE, |
1453 // version tag | 1460 // version tag |
1454 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 1461 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
1455 // packet sequence number | 1462 // packet sequence number |
1456 0xBC, 0x9A, 0x78, 0x56, | 1463 0xBC, 0x9A, 0x78, 0x56, |
1457 0x34, 0x12, | 1464 0x34, 0x12, |
1458 // private flags | 1465 // private flags |
1459 0x00, | 1466 0x00, |
1460 | 1467 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1499 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1493 | 1500 |
1494 // Now test framing boundaries | 1501 // Now test framing boundaries |
1495 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 1502 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); |
1496 } | 1503 } |
1497 | 1504 |
1498 TEST_P(QuicFramerTest, RejectPacket) { | 1505 TEST_P(QuicFramerTest, RejectPacket) { |
1499 visitor_.accept_packet_ = false; | 1506 visitor_.accept_packet_ = false; |
1500 | 1507 |
1501 unsigned char packet[] = { | 1508 unsigned char packet[] = { |
1502 // public flags (8 byte guid) | 1509 // public flags (8 byte connection_id) |
1503 0x3C, | 1510 0x3C, |
1504 // guid | 1511 // connection_id |
1505 0x10, 0x32, 0x54, 0x76, | 1512 0x10, 0x32, 0x54, 0x76, |
1506 0x98, 0xBA, 0xDC, 0xFE, | 1513 0x98, 0xBA, 0xDC, 0xFE, |
1507 // packet sequence number | 1514 // packet sequence number |
1508 0xBC, 0x9A, 0x78, 0x56, | 1515 0xBC, 0x9A, 0x78, 0x56, |
1509 0x34, 0x12, | 1516 0x34, 0x12, |
1510 // private flags | 1517 // private flags |
1511 0x00, | 1518 0x00, |
1512 | 1519 |
1513 // frame type (stream frame with fin) | 1520 // frame type (stream frame with fin) |
1514 0xFF, | 1521 0xFF, |
(...skipping 18 matching lines...) Expand all Loading... |
1533 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1540 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1534 | 1541 |
1535 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1542 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1536 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1543 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1537 } | 1544 } |
1538 | 1545 |
1539 TEST_P(QuicFramerTest, RejectPublicHeader) { | 1546 TEST_P(QuicFramerTest, RejectPublicHeader) { |
1540 visitor_.accept_public_header_ = false; | 1547 visitor_.accept_public_header_ = false; |
1541 | 1548 |
1542 unsigned char packet[] = { | 1549 unsigned char packet[] = { |
1543 // public flags (8 byte guid) | 1550 // public flags (8 byte connection_id) |
1544 0x3C, | 1551 0x3C, |
1545 // guid | 1552 // connection_id |
1546 0x10, 0x32, 0x54, 0x76, | 1553 0x10, 0x32, 0x54, 0x76, |
1547 0x98, 0xBA, 0xDC, 0xFE, | 1554 0x98, 0xBA, 0xDC, 0xFE, |
1548 }; | 1555 }; |
1549 | 1556 |
1550 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1557 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1551 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1558 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1552 | 1559 |
1553 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1560 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1554 ASSERT_TRUE(visitor_.public_header_.get()); | 1561 ASSERT_TRUE(visitor_.public_header_.get()); |
1555 ASSERT_FALSE(visitor_.header_.get()); | 1562 ASSERT_FALSE(visitor_.header_.get()); |
(...skipping 10 matching lines...) Expand all Loading... |
1566 0xDC, 0xFE, 0x98, 0xBA, | 1573 0xDC, 0xFE, 0x98, 0xBA, |
1567 // data length | 1574 // data length |
1568 0x0c, 0x00, | 1575 0x0c, 0x00, |
1569 // data | 1576 // data |
1570 'h', 'e', 'l', 'l', | 1577 'h', 'e', 'l', 'l', |
1571 'o', ' ', 'w', 'o', | 1578 'o', ' ', 'w', 'o', |
1572 'r', 'l', 'd', '!', | 1579 'r', 'l', 'd', '!', |
1573 }; | 1580 }; |
1574 | 1581 |
1575 QuicPacketHeader header; | 1582 QuicPacketHeader header; |
1576 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 1583 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
1577 header.public_header.reset_flag = false; | 1584 header.public_header.reset_flag = false; |
1578 header.public_header.version_flag = false; | 1585 header.public_header.version_flag = false; |
1579 header.fec_flag = true; | 1586 header.fec_flag = true; |
1580 header.entropy_flag = true; | 1587 header.entropy_flag = true; |
1581 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 1588 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
1582 header.fec_group = 0; | 1589 header.fec_group = 0; |
1583 | 1590 |
1584 // Do not encrypt the payload because the revived payload is post-encryption. | 1591 // Do not encrypt the payload because the revived payload is post-encryption. |
1585 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 1592 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, |
1586 StringPiece(AsChars(payload), | 1593 StringPiece(AsChars(payload), |
1587 arraysize(payload)))); | 1594 arraysize(payload)))); |
1588 | 1595 |
1589 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1596 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1590 ASSERT_EQ(1, visitor_.revived_packets_); | 1597 ASSERT_EQ(1, visitor_.revived_packets_); |
1591 ASSERT_TRUE(visitor_.header_.get()); | 1598 ASSERT_TRUE(visitor_.header_.get()); |
1592 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 1599 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
1593 visitor_.header_->public_header.guid); | 1600 visitor_.header_->public_header.connection_id); |
1594 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1601 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
1595 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1602 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
1596 EXPECT_TRUE(visitor_.header_->fec_flag); | 1603 EXPECT_TRUE(visitor_.header_->fec_flag); |
1597 EXPECT_TRUE(visitor_.header_->entropy_flag); | 1604 EXPECT_TRUE(visitor_.header_->entropy_flag); |
1598 EXPECT_EQ(1 << (header.packet_sequence_number % 8), | 1605 EXPECT_EQ(1 << (header.packet_sequence_number % 8), |
1599 visitor_.header_->entropy_hash); | 1606 visitor_.header_->entropy_hash); |
1600 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1607 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
1601 visitor_.header_->packet_sequence_number); | 1608 visitor_.header_->packet_sequence_number); |
1602 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1609 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1603 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1610 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
1604 | 1611 |
1605 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1612 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1606 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1613 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1607 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1614 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1608 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1615 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1609 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1616 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1610 visitor_.stream_frames_[0]->offset); | 1617 visitor_.stream_frames_[0]->offset); |
1611 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1618 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1612 } | 1619 } |
1613 | 1620 |
1614 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 1621 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
1615 unsigned char packet[] = { | 1622 unsigned char packet[] = { |
1616 // public flags (8 byte guid) | 1623 // public flags (8 byte connection_id) |
1617 0x3C, | 1624 0x3C, |
1618 // guid | 1625 // connection_id |
1619 0x10, 0x32, 0x54, 0x76, | 1626 0x10, 0x32, 0x54, 0x76, |
1620 0x98, 0xBA, 0xDC, 0xFE, | 1627 0x98, 0xBA, 0xDC, 0xFE, |
1621 // packet sequence number | 1628 // packet sequence number |
1622 0xBC, 0x9A, 0x78, 0x56, | 1629 0xBC, 0x9A, 0x78, 0x56, |
1623 0x12, 0x34, | 1630 0x12, 0x34, |
1624 // private flags (fec group) | 1631 // private flags (fec group) |
1625 0x02, | 1632 0x02, |
1626 // first fec protected packet offset | 1633 // first fec protected packet offset |
1627 0x02, | 1634 0x02, |
1628 | 1635 |
(...skipping 14 matching lines...) Expand all Loading... |
1643 | 1650 |
1644 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1651 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1645 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1652 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1646 | 1653 |
1647 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1654 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1648 ASSERT_TRUE(visitor_.header_.get()); | 1655 ASSERT_TRUE(visitor_.header_.get()); |
1649 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1656 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1650 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1657 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1651 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), | 1658 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), |
1652 visitor_.header_->fec_group); | 1659 visitor_.header_->fec_group); |
1653 const size_t fec_offset = GetStartOfFecProtectedData( | 1660 const size_t fec_offset = |
1654 PACKET_8BYTE_GUID, !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER); | 1661 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, |
| 1662 !kIncludeVersion, |
| 1663 PACKET_6BYTE_SEQUENCE_NUMBER); |
1655 EXPECT_EQ( | 1664 EXPECT_EQ( |
1656 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 1665 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), |
1657 visitor_.fec_protected_payload_); | 1666 visitor_.fec_protected_payload_); |
1658 | 1667 |
1659 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1668 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1660 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1669 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1661 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1670 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1662 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1671 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1663 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1672 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1664 visitor_.stream_frames_[0]->offset); | 1673 visitor_.stream_frames_[0]->offset); |
1665 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1674 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1666 } | 1675 } |
1667 | 1676 |
1668 TEST_P(QuicFramerTest, AckFrameV14) { | 1677 TEST_P(QuicFramerTest, AckFrameV14) { |
1669 if (framer_.version() > QUIC_VERSION_14) { | 1678 if (framer_.version() > QUIC_VERSION_14) { |
1670 return; | 1679 return; |
1671 } | 1680 } |
1672 | 1681 |
1673 unsigned char packet[] = { | 1682 unsigned char packet[] = { |
1674 // public flags (8 byte guid) | 1683 // public flags (8 byte connection_id) |
1675 0x3C, | 1684 0x3C, |
1676 // guid | 1685 // connection_id |
1677 0x10, 0x32, 0x54, 0x76, | 1686 0x10, 0x32, 0x54, 0x76, |
1678 0x98, 0xBA, 0xDC, 0xFE, | 1687 0x98, 0xBA, 0xDC, 0xFE, |
1679 // packet sequence number | 1688 // packet sequence number |
1680 0xA8, 0x9A, 0x78, 0x56, | 1689 0xA8, 0x9A, 0x78, 0x56, |
1681 0x34, 0x12, | 1690 0x34, 0x12, |
1682 // private flags (entropy) | 1691 // private flags (entropy) |
1683 0x01, | 1692 0x01, |
1684 | 1693 |
1685 // frame type (ack frame) | 1694 // frame type (ack frame) |
1686 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 1695 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1755 expected_error = "Unable to read delta time largest observed."; | 1764 expected_error = "Unable to read delta time largest observed."; |
1756 } else if (i < kMissingPacketsOffset) { | 1765 } else if (i < kMissingPacketsOffset) { |
1757 expected_error = "Unable to read num missing packet ranges."; | 1766 expected_error = "Unable to read num missing packet ranges."; |
1758 } else if (i < kMissingPacketsRange) { | 1767 } else if (i < kMissingPacketsRange) { |
1759 expected_error = "Unable to read missing sequence number delta."; | 1768 expected_error = "Unable to read missing sequence number delta."; |
1760 } else { | 1769 } else { |
1761 expected_error = "Unable to read missing sequence number range."; | 1770 expected_error = "Unable to read missing sequence number range."; |
1762 } | 1771 } |
1763 CheckProcessingFails( | 1772 CheckProcessingFails( |
1764 packet, | 1773 packet, |
1765 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1774 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1766 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1775 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1767 expected_error, QUIC_INVALID_ACK_DATA); | 1776 expected_error, QUIC_INVALID_ACK_DATA); |
1768 } | 1777 } |
1769 } | 1778 } |
1770 | 1779 |
1771 TEST_P(QuicFramerTest, AckFrame15) { | 1780 TEST_P(QuicFramerTest, AckFrame15) { |
1772 if (framer_.version() != QUIC_VERSION_15) { | 1781 if (framer_.version() != QUIC_VERSION_15) { |
1773 return; | 1782 return; |
1774 } | 1783 } |
1775 | 1784 |
1776 unsigned char packet[] = { | 1785 unsigned char packet[] = { |
1777 // public flags (8 byte guid) | 1786 // public flags (8 byte connection_id) |
1778 0x3C, | 1787 0x3C, |
1779 // guid | 1788 // connection_id |
1780 0x10, 0x32, 0x54, 0x76, | 1789 0x10, 0x32, 0x54, 0x76, |
1781 0x98, 0xBA, 0xDC, 0xFE, | 1790 0x98, 0xBA, 0xDC, 0xFE, |
1782 // packet sequence number | 1791 // packet sequence number |
1783 0xA8, 0x9A, 0x78, 0x56, | 1792 0xA8, 0x9A, 0x78, 0x56, |
1784 0x34, 0x12, | 1793 0x34, 0x12, |
1785 // private flags (entropy) | 1794 // private flags (entropy) |
1786 0x01, | 1795 0x01, |
1787 | 1796 |
1788 // frame type (ack frame) | 1797 // frame type (ack frame) |
1789 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 1798 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 expected_error = "Unable to read num missing packet ranges."; | 1873 expected_error = "Unable to read num missing packet ranges."; |
1865 } else if (i < kMissingPacketsRange) { | 1874 } else if (i < kMissingPacketsRange) { |
1866 expected_error = "Unable to read missing sequence number delta."; | 1875 expected_error = "Unable to read missing sequence number delta."; |
1867 } else if (i < kRevivedPacketsLength) { | 1876 } else if (i < kRevivedPacketsLength) { |
1868 expected_error = "Unable to read missing sequence number range."; | 1877 expected_error = "Unable to read missing sequence number range."; |
1869 } else { | 1878 } else { |
1870 expected_error = "Unable to read num revived packets."; | 1879 expected_error = "Unable to read num revived packets."; |
1871 } | 1880 } |
1872 CheckProcessingFails( | 1881 CheckProcessingFails( |
1873 packet, | 1882 packet, |
1874 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1883 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1875 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1884 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1876 expected_error, QUIC_INVALID_ACK_DATA); | 1885 expected_error, QUIC_INVALID_ACK_DATA); |
1877 } | 1886 } |
1878 } | 1887 } |
1879 | 1888 |
1880 TEST_P(QuicFramerTest, AckFrame) { | 1889 TEST_P(QuicFramerTest, AckFrame) { |
1881 if (framer_.version() <= QUIC_VERSION_15) { | 1890 if (framer_.version() <= QUIC_VERSION_15) { |
1882 return; | 1891 return; |
1883 } | 1892 } |
1884 | 1893 |
1885 unsigned char packet[] = { | 1894 unsigned char packet[] = { |
1886 // public flags (8 byte guid) | 1895 // public flags (8 byte connection_id) |
1887 0x3C, | 1896 0x3C, |
1888 // guid | 1897 // connection_id |
1889 0x10, 0x32, 0x54, 0x76, | 1898 0x10, 0x32, 0x54, 0x76, |
1890 0x98, 0xBA, 0xDC, 0xFE, | 1899 0x98, 0xBA, 0xDC, 0xFE, |
1891 // packet sequence number | 1900 // packet sequence number |
1892 0xA8, 0x9A, 0x78, 0x56, | 1901 0xA8, 0x9A, 0x78, 0x56, |
1893 0x34, 0x12, | 1902 0x34, 0x12, |
1894 // private flags (entropy) | 1903 // private flags (entropy) |
1895 0x01, | 1904 0x01, |
1896 | 1905 |
1897 // frame type (ack frame) | 1906 // frame type (ack frame) |
1898 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 1907 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1959 expected_error = "Unable to read num missing packet ranges."; | 1968 expected_error = "Unable to read num missing packet ranges."; |
1960 } else if (i < kMissingPacketsRange) { | 1969 } else if (i < kMissingPacketsRange) { |
1961 expected_error = "Unable to read missing sequence number delta."; | 1970 expected_error = "Unable to read missing sequence number delta."; |
1962 } else if (i < kRevivedPacketsLength) { | 1971 } else if (i < kRevivedPacketsLength) { |
1963 expected_error = "Unable to read missing sequence number range."; | 1972 expected_error = "Unable to read missing sequence number range."; |
1964 } else { | 1973 } else { |
1965 expected_error = "Unable to read num revived packets."; | 1974 expected_error = "Unable to read num revived packets."; |
1966 } | 1975 } |
1967 CheckProcessingFails( | 1976 CheckProcessingFails( |
1968 packet, | 1977 packet, |
1969 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1978 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1970 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1979 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1971 expected_error, QUIC_INVALID_ACK_DATA); | 1980 expected_error, QUIC_INVALID_ACK_DATA); |
1972 } | 1981 } |
1973 } | 1982 } |
1974 | 1983 |
1975 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { | 1984 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { |
1976 if (framer_.version() <= QUIC_VERSION_15) { | 1985 if (framer_.version() <= QUIC_VERSION_15) { |
1977 return; | 1986 return; |
1978 } | 1987 } |
1979 | 1988 |
1980 unsigned char packet[] = { | 1989 unsigned char packet[] = { |
1981 // public flags (8 byte guid) | 1990 // public flags (8 byte connection_id) |
1982 0x3C, | 1991 0x3C, |
1983 // guid | 1992 // connection_id |
1984 0x10, 0x32, 0x54, 0x76, | 1993 0x10, 0x32, 0x54, 0x76, |
1985 0x98, 0xBA, 0xDC, 0xFE, | 1994 0x98, 0xBA, 0xDC, 0xFE, |
1986 // packet sequence number | 1995 // packet sequence number |
1987 0xA8, 0x9A, 0x78, 0x56, | 1996 0xA8, 0x9A, 0x78, 0x56, |
1988 0x34, 0x12, | 1997 0x34, 0x12, |
1989 // private flags (entropy) | 1998 // private flags (entropy) |
1990 0x01, | 1999 0x01, |
1991 | 2000 |
1992 // frame type (ack frame) | 2001 // frame type (ack frame) |
1993 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2002 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2063 expected_error = "Unable to read missing sequence number delta."; | 2072 expected_error = "Unable to read missing sequence number delta."; |
2064 } else if (i < kRevivedPacketsLength) { | 2073 } else if (i < kRevivedPacketsLength) { |
2065 expected_error = "Unable to read missing sequence number range."; | 2074 expected_error = "Unable to read missing sequence number range."; |
2066 } else if (i < kRevivedPacketSequenceNumberLength) { | 2075 } else if (i < kRevivedPacketSequenceNumberLength) { |
2067 expected_error = "Unable to read num revived packets."; | 2076 expected_error = "Unable to read num revived packets."; |
2068 } else { | 2077 } else { |
2069 expected_error = "Unable to read revived packet."; | 2078 expected_error = "Unable to read revived packet."; |
2070 } | 2079 } |
2071 CheckProcessingFails( | 2080 CheckProcessingFails( |
2072 packet, | 2081 packet, |
2073 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2082 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2074 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2083 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2075 expected_error, QUIC_INVALID_ACK_DATA); | 2084 expected_error, QUIC_INVALID_ACK_DATA); |
2076 } | 2085 } |
2077 } | 2086 } |
2078 | 2087 |
2079 TEST_P(QuicFramerTest, AckFrameRevivedPackets15) { | 2088 TEST_P(QuicFramerTest, AckFrameRevivedPackets15) { |
2080 if (framer_.version() != QUIC_VERSION_15) { | 2089 if (framer_.version() != QUIC_VERSION_15) { |
2081 return; | 2090 return; |
2082 } | 2091 } |
2083 | 2092 |
2084 unsigned char packet[] = { | 2093 unsigned char packet[] = { |
2085 // public flags (8 byte guid) | 2094 // public flags (8 byte connection_id) |
2086 0x3C, | 2095 0x3C, |
2087 // guid | 2096 // connection_id |
2088 0x10, 0x32, 0x54, 0x76, | 2097 0x10, 0x32, 0x54, 0x76, |
2089 0x98, 0xBA, 0xDC, 0xFE, | 2098 0x98, 0xBA, 0xDC, 0xFE, |
2090 // packet sequence number | 2099 // packet sequence number |
2091 0xA8, 0x9A, 0x78, 0x56, | 2100 0xA8, 0x9A, 0x78, 0x56, |
2092 0x34, 0x12, | 2101 0x34, 0x12, |
2093 // private flags (entropy) | 2102 // private flags (entropy) |
2094 0x01, | 2103 0x01, |
2095 | 2104 |
2096 // frame type (ack frame) | 2105 // frame type (ack frame) |
2097 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2106 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2179 expected_error = "Unable to read missing sequence number delta."; | 2188 expected_error = "Unable to read missing sequence number delta."; |
2180 } else if (i < kRevivedPacketsLength) { | 2189 } else if (i < kRevivedPacketsLength) { |
2181 expected_error = "Unable to read missing sequence number range."; | 2190 expected_error = "Unable to read missing sequence number range."; |
2182 } else if (i < kRevivedPacketSequenceNumberLength) { | 2191 } else if (i < kRevivedPacketSequenceNumberLength) { |
2183 expected_error = "Unable to read num revived packets."; | 2192 expected_error = "Unable to read num revived packets."; |
2184 } else { | 2193 } else { |
2185 expected_error = "Unable to read revived packet."; | 2194 expected_error = "Unable to read revived packet."; |
2186 } | 2195 } |
2187 CheckProcessingFails( | 2196 CheckProcessingFails( |
2188 packet, | 2197 packet, |
2189 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2198 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2190 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2199 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2191 expected_error, QUIC_INVALID_ACK_DATA); | 2200 expected_error, QUIC_INVALID_ACK_DATA); |
2192 } | 2201 } |
2193 } | 2202 } |
2194 | 2203 |
2195 TEST_P(QuicFramerTest, AckFrameNoNacks) { | 2204 TEST_P(QuicFramerTest, AckFrameNoNacks) { |
2196 if (framer_.version() <= QUIC_VERSION_15) { | 2205 if (framer_.version() <= QUIC_VERSION_15) { |
2197 return; | 2206 return; |
2198 } | 2207 } |
2199 unsigned char packet[] = { | 2208 unsigned char packet[] = { |
2200 // public flags (8 byte guid) | 2209 // public flags (8 byte connection_id) |
2201 0x3C, | 2210 0x3C, |
2202 // guid | 2211 // connection_id |
2203 0x10, 0x32, 0x54, 0x76, | 2212 0x10, 0x32, 0x54, 0x76, |
2204 0x98, 0xBA, 0xDC, 0xFE, | 2213 0x98, 0xBA, 0xDC, 0xFE, |
2205 // packet sequence number | 2214 // packet sequence number |
2206 0xA8, 0x9A, 0x78, 0x56, | 2215 0xA8, 0x9A, 0x78, 0x56, |
2207 0x34, 0x12, | 2216 0x34, 0x12, |
2208 // private flags (entropy) | 2217 // private flags (entropy) |
2209 0x01, | 2218 0x01, |
2210 | 2219 |
2211 // frame type (ack frame) | 2220 // frame type (ack frame) |
2212 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2221 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2245 test::CompareCharArraysWithHexError("constructed packet", | 2254 test::CompareCharArraysWithHexError("constructed packet", |
2246 data->data(), data->length(), | 2255 data->data(), data->length(), |
2247 AsChars(packet), arraysize(packet)); | 2256 AsChars(packet), arraysize(packet)); |
2248 } | 2257 } |
2249 | 2258 |
2250 TEST_P(QuicFramerTest, AckFrameNoNacks15) { | 2259 TEST_P(QuicFramerTest, AckFrameNoNacks15) { |
2251 if (framer_.version() > QUIC_VERSION_15) { | 2260 if (framer_.version() > QUIC_VERSION_15) { |
2252 return; | 2261 return; |
2253 } | 2262 } |
2254 unsigned char packet[] = { | 2263 unsigned char packet[] = { |
2255 // public flags (8 byte guid) | 2264 // public flags (8 byte connection_id) |
2256 0x3C, | 2265 0x3C, |
2257 // guid | 2266 // connection_id |
2258 0x10, 0x32, 0x54, 0x76, | 2267 0x10, 0x32, 0x54, 0x76, |
2259 0x98, 0xBA, 0xDC, 0xFE, | 2268 0x98, 0xBA, 0xDC, 0xFE, |
2260 // packet sequence number | 2269 // packet sequence number |
2261 0xA8, 0x9A, 0x78, 0x56, | 2270 0xA8, 0x9A, 0x78, 0x56, |
2262 0x34, 0x12, | 2271 0x34, 0x12, |
2263 // private flags (entropy) | 2272 // private flags (entropy) |
2264 0x01, | 2273 0x01, |
2265 | 2274 |
2266 // frame type (ack frame) | 2275 // frame type (ack frame) |
2267 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2276 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2307 test::CompareCharArraysWithHexError("constructed packet", | 2316 test::CompareCharArraysWithHexError("constructed packet", |
2308 data->data(), data->length(), | 2317 data->data(), data->length(), |
2309 AsChars(packet), arraysize(packet)); | 2318 AsChars(packet), arraysize(packet)); |
2310 } | 2319 } |
2311 | 2320 |
2312 TEST_P(QuicFramerTest, AckFrame500Nacks) { | 2321 TEST_P(QuicFramerTest, AckFrame500Nacks) { |
2313 if (framer_.version() <= QUIC_VERSION_15) { | 2322 if (framer_.version() <= QUIC_VERSION_15) { |
2314 return; | 2323 return; |
2315 } | 2324 } |
2316 unsigned char packet[] = { | 2325 unsigned char packet[] = { |
2317 // public flags (8 byte guid) | 2326 // public flags (8 byte connection_id) |
2318 0x3C, | 2327 0x3C, |
2319 // guid | 2328 // connection_id |
2320 0x10, 0x32, 0x54, 0x76, | 2329 0x10, 0x32, 0x54, 0x76, |
2321 0x98, 0xBA, 0xDC, 0xFE, | 2330 0x98, 0xBA, 0xDC, 0xFE, |
2322 // packet sequence number | 2331 // packet sequence number |
2323 0xA8, 0x9A, 0x78, 0x56, | 2332 0xA8, 0x9A, 0x78, 0x56, |
2324 0x34, 0x12, | 2333 0x34, 0x12, |
2325 // private flags (entropy) | 2334 // private flags (entropy) |
2326 0x01, | 2335 0x01, |
2327 | 2336 |
2328 // frame type (ack frame) | 2337 // frame type (ack frame) |
2329 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2338 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2382 test::CompareCharArraysWithHexError("constructed packet", | 2391 test::CompareCharArraysWithHexError("constructed packet", |
2383 data->data(), data->length(), | 2392 data->data(), data->length(), |
2384 AsChars(packet), arraysize(packet)); | 2393 AsChars(packet), arraysize(packet)); |
2385 } | 2394 } |
2386 | 2395 |
2387 TEST_P(QuicFramerTest, AckFrame500Nacks15) { | 2396 TEST_P(QuicFramerTest, AckFrame500Nacks15) { |
2388 if (framer_.version() != QUIC_VERSION_15) { | 2397 if (framer_.version() != QUIC_VERSION_15) { |
2389 return; | 2398 return; |
2390 } | 2399 } |
2391 unsigned char packet[] = { | 2400 unsigned char packet[] = { |
2392 // public flags (8 byte guid) | 2401 // public flags (8 byte connection_id) |
2393 0x3C, | 2402 0x3C, |
2394 // guid | 2403 // connection_id |
2395 0x10, 0x32, 0x54, 0x76, | 2404 0x10, 0x32, 0x54, 0x76, |
2396 0x98, 0xBA, 0xDC, 0xFE, | 2405 0x98, 0xBA, 0xDC, 0xFE, |
2397 // packet sequence number | 2406 // packet sequence number |
2398 0xA8, 0x9A, 0x78, 0x56, | 2407 0xA8, 0x9A, 0x78, 0x56, |
2399 0x34, 0x12, | 2408 0x34, 0x12, |
2400 // private flags (entropy) | 2409 // private flags (entropy) |
2401 0x01, | 2410 0x01, |
2402 | 2411 |
2403 // frame type (ack frame) | 2412 // frame type (ack frame) |
2404 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2413 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2464 test::CompareCharArraysWithHexError("constructed packet", | 2473 test::CompareCharArraysWithHexError("constructed packet", |
2465 data->data(), data->length(), | 2474 data->data(), data->length(), |
2466 AsChars(packet), arraysize(packet)); | 2475 AsChars(packet), arraysize(packet)); |
2467 } | 2476 } |
2468 | 2477 |
2469 TEST_P(QuicFramerTest, AckFrame500NacksV14) { | 2478 TEST_P(QuicFramerTest, AckFrame500NacksV14) { |
2470 if (framer_.version() > QUIC_VERSION_14) { | 2479 if (framer_.version() > QUIC_VERSION_14) { |
2471 return; | 2480 return; |
2472 } | 2481 } |
2473 unsigned char packet[] = { | 2482 unsigned char packet[] = { |
2474 // public flags (8 byte guid) | 2483 // public flags (8 byte connection_id) |
2475 0x3C, | 2484 0x3C, |
2476 // guid | 2485 // connection_id |
2477 0x10, 0x32, 0x54, 0x76, | 2486 0x10, 0x32, 0x54, 0x76, |
2478 0x98, 0xBA, 0xDC, 0xFE, | 2487 0x98, 0xBA, 0xDC, 0xFE, |
2479 // packet sequence number | 2488 // packet sequence number |
2480 0xA8, 0x9A, 0x78, 0x56, | 2489 0xA8, 0x9A, 0x78, 0x56, |
2481 0x34, 0x12, | 2490 0x34, 0x12, |
2482 // private flags (entropy) | 2491 // private flags (entropy) |
2483 0x01, | 2492 0x01, |
2484 | 2493 |
2485 // frame type (ack frame) | 2494 // frame type (ack frame) |
2486 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2495 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2543 test::CompareCharArraysWithHexError("constructed packet", | 2552 test::CompareCharArraysWithHexError("constructed packet", |
2544 data->data(), data->length(), | 2553 data->data(), data->length(), |
2545 AsChars(packet), arraysize(packet)); | 2554 AsChars(packet), arraysize(packet)); |
2546 } | 2555 } |
2547 | 2556 |
2548 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) { | 2557 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) { |
2549 if (framer_.version() <= QUIC_VERSION_14) { | 2558 if (framer_.version() <= QUIC_VERSION_14) { |
2550 return; | 2559 return; |
2551 } | 2560 } |
2552 unsigned char packet[] = { | 2561 unsigned char packet[] = { |
2553 // public flags (8 byte guid) | 2562 // public flags (8 byte connection_id) |
2554 0x3C, | 2563 0x3C, |
2555 // guid | 2564 // connection_id |
2556 0x10, 0x32, 0x54, 0x76, | 2565 0x10, 0x32, 0x54, 0x76, |
2557 0x98, 0xBA, 0xDC, 0xFE, | 2566 0x98, 0xBA, 0xDC, 0xFE, |
2558 // packet sequence number | 2567 // packet sequence number |
2559 0xBC, 0x9A, 0x78, 0x56, | 2568 0xBC, 0x9A, 0x78, 0x56, |
2560 0x34, 0x12, | 2569 0x34, 0x12, |
2561 // private flags | 2570 // private flags |
2562 0x00, | 2571 0x00, |
2563 | 2572 |
2564 // frame type (congestion feedback frame) | 2573 // frame type (congestion feedback frame) |
2565 0x20, | 2574 0x20, |
(...skipping 20 matching lines...) Expand all Loading... |
2586 // Now test framing boundaries | 2595 // Now test framing boundaries |
2587 for (size_t i = kQuicFrameTypeSize; i < 4; ++i) { | 2596 for (size_t i = kQuicFrameTypeSize; i < 4; ++i) { |
2588 string expected_error; | 2597 string expected_error; |
2589 if (i < 2) { | 2598 if (i < 2) { |
2590 expected_error = "Unable to read congestion feedback type."; | 2599 expected_error = "Unable to read congestion feedback type."; |
2591 } else if (i < 4) { | 2600 } else if (i < 4) { |
2592 expected_error = "Unable to read receive window."; | 2601 expected_error = "Unable to read receive window."; |
2593 } | 2602 } |
2594 CheckProcessingFails( | 2603 CheckProcessingFails( |
2595 packet, | 2604 packet, |
2596 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2605 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2597 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2606 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2598 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2607 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
2599 } | 2608 } |
2600 } | 2609 } |
2601 | 2610 |
2602 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCPV14) { | 2611 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCPV14) { |
2603 if (framer_.version() > QUIC_VERSION_14) { | 2612 if (framer_.version() > QUIC_VERSION_14) { |
2604 return; | 2613 return; |
2605 } | 2614 } |
2606 unsigned char packet[] = { | 2615 unsigned char packet[] = { |
2607 // public flags (8 byte guid) | 2616 // public flags (8 byte connection_id) |
2608 0x3C, | 2617 0x3C, |
2609 // guid | 2618 // connection_id |
2610 0x10, 0x32, 0x54, 0x76, | 2619 0x10, 0x32, 0x54, 0x76, |
2611 0x98, 0xBA, 0xDC, 0xFE, | 2620 0x98, 0xBA, 0xDC, 0xFE, |
2612 // packet sequence number | 2621 // packet sequence number |
2613 0xBC, 0x9A, 0x78, 0x56, | 2622 0xBC, 0x9A, 0x78, 0x56, |
2614 0x34, 0x12, | 2623 0x34, 0x12, |
2615 // private flags | 2624 // private flags |
2616 0x00, | 2625 0x00, |
2617 | 2626 |
2618 // frame type (congestion feedback frame) | 2627 // frame type (congestion feedback frame) |
2619 0x20, | 2628 0x20, |
(...skipping 24 matching lines...) Expand all Loading... |
2644 string expected_error; | 2653 string expected_error; |
2645 if (i < 2) { | 2654 if (i < 2) { |
2646 expected_error = "Unable to read congestion feedback type."; | 2655 expected_error = "Unable to read congestion feedback type."; |
2647 } else if (i < 4) { | 2656 } else if (i < 4) { |
2648 expected_error = "Unable to read accumulated number of lost packets."; | 2657 expected_error = "Unable to read accumulated number of lost packets."; |
2649 } else if (i < 6) { | 2658 } else if (i < 6) { |
2650 expected_error = "Unable to read receive window."; | 2659 expected_error = "Unable to read receive window."; |
2651 } | 2660 } |
2652 CheckProcessingFails( | 2661 CheckProcessingFails( |
2653 packet, | 2662 packet, |
2654 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2663 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2655 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2664 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2656 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2665 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
2657 } | 2666 } |
2658 } | 2667 } |
2659 | 2668 |
2660 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) { | 2669 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) { |
2661 if (framer_.version() <= QUIC_VERSION_14) { | 2670 if (framer_.version() <= QUIC_VERSION_14) { |
2662 return; | 2671 return; |
2663 } | 2672 } |
2664 unsigned char packet[] = { | 2673 unsigned char packet[] = { |
2665 // public flags (8 byte guid) | 2674 // public flags (8 byte connection_id) |
2666 0x3C, | 2675 0x3C, |
2667 // guid | 2676 // connection_id |
2668 0x10, 0x32, 0x54, 0x76, | 2677 0x10, 0x32, 0x54, 0x76, |
2669 0x98, 0xBA, 0xDC, 0xFE, | 2678 0x98, 0xBA, 0xDC, 0xFE, |
2670 // packet sequence number | 2679 // packet sequence number |
2671 0xBC, 0x9A, 0x78, 0x56, | 2680 0xBC, 0x9A, 0x78, 0x56, |
2672 0x34, 0x12, | 2681 0x34, 0x12, |
2673 // private flags | 2682 // private flags |
2674 0x00, | 2683 0x00, |
2675 | 2684 |
2676 // frame type (congestion feedback frame) | 2685 // frame type (congestion feedback frame) |
2677 0x20, | 2686 0x20, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2737 expected_error = "Unable to read sequence delta in received packets."; | 2746 expected_error = "Unable to read sequence delta in received packets."; |
2738 } else if (i < 23) { | 2747 } else if (i < 23) { |
2739 expected_error = "Unable to read time delta in received packets."; | 2748 expected_error = "Unable to read time delta in received packets."; |
2740 } else if (i < 25) { | 2749 } else if (i < 25) { |
2741 expected_error = "Unable to read sequence delta in received packets."; | 2750 expected_error = "Unable to read sequence delta in received packets."; |
2742 } else if (i < 29) { | 2751 } else if (i < 29) { |
2743 expected_error = "Unable to read time delta in received packets."; | 2752 expected_error = "Unable to read time delta in received packets."; |
2744 } | 2753 } |
2745 CheckProcessingFails( | 2754 CheckProcessingFails( |
2746 packet, | 2755 packet, |
2747 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2756 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2748 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2757 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2749 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2758 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
2750 } | 2759 } |
2751 } | 2760 } |
2752 | 2761 |
2753 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrivalV14) { | 2762 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrivalV14) { |
2754 if (framer_.version() > QUIC_VERSION_14) { | 2763 if (framer_.version() > QUIC_VERSION_14) { |
2755 return; | 2764 return; |
2756 } | 2765 } |
2757 unsigned char packet[] = { | 2766 unsigned char packet[] = { |
2758 // public flags (8 byte guid) | 2767 // public flags (8 byte connection_id) |
2759 0x3C, | 2768 0x3C, |
2760 // guid | 2769 // connection_id |
2761 0x10, 0x32, 0x54, 0x76, | 2770 0x10, 0x32, 0x54, 0x76, |
2762 0x98, 0xBA, 0xDC, 0xFE, | 2771 0x98, 0xBA, 0xDC, 0xFE, |
2763 // packet sequence number | 2772 // packet sequence number |
2764 0xBC, 0x9A, 0x78, 0x56, | 2773 0xBC, 0x9A, 0x78, 0x56, |
2765 0x34, 0x12, | 2774 0x34, 0x12, |
2766 // private flags | 2775 // private flags |
2767 0x00, | 2776 0x00, |
2768 | 2777 |
2769 // frame type (congestion feedback frame) | 2778 // frame type (congestion feedback frame) |
2770 0x20, | 2779 0x20, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2834 expected_error = "Unable to read sequence delta in received packets."; | 2843 expected_error = "Unable to read sequence delta in received packets."; |
2835 } else if (i < 25) { | 2844 } else if (i < 25) { |
2836 expected_error = "Unable to read time delta in received packets."; | 2845 expected_error = "Unable to read time delta in received packets."; |
2837 } else if (i < 27) { | 2846 } else if (i < 27) { |
2838 expected_error = "Unable to read sequence delta in received packets."; | 2847 expected_error = "Unable to read sequence delta in received packets."; |
2839 } else if (i < 31) { | 2848 } else if (i < 31) { |
2840 expected_error = "Unable to read time delta in received packets."; | 2849 expected_error = "Unable to read time delta in received packets."; |
2841 } | 2850 } |
2842 CheckProcessingFails( | 2851 CheckProcessingFails( |
2843 packet, | 2852 packet, |
2844 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2853 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2845 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2854 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2846 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2855 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
2847 } | 2856 } |
2848 } | 2857 } |
2849 | 2858 |
2850 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) { | 2859 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) { |
2851 unsigned char packet[] = { | 2860 unsigned char packet[] = { |
2852 // public flags (8 byte guid) | 2861 // public flags (8 byte connection_id) |
2853 0x3C, | 2862 0x3C, |
2854 // guid | 2863 // connection_id |
2855 0x10, 0x32, 0x54, 0x76, | 2864 0x10, 0x32, 0x54, 0x76, |
2856 0x98, 0xBA, 0xDC, 0xFE, | 2865 0x98, 0xBA, 0xDC, 0xFE, |
2857 // packet sequence number | 2866 // packet sequence number |
2858 0xBC, 0x9A, 0x78, 0x56, | 2867 0xBC, 0x9A, 0x78, 0x56, |
2859 0x34, 0x12, | 2868 0x34, 0x12, |
2860 // private flags | 2869 // private flags |
2861 0x00, | 2870 0x00, |
2862 | 2871 |
2863 // frame type (congestion feedback frame) | 2872 // frame type (congestion feedback frame) |
2864 0x20, | 2873 0x20, |
(...skipping 21 matching lines...) Expand all Loading... |
2886 // Now test framing boundaries | 2895 // Now test framing boundaries |
2887 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) { | 2896 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) { |
2888 string expected_error; | 2897 string expected_error; |
2889 if (i < 2) { | 2898 if (i < 2) { |
2890 expected_error = "Unable to read congestion feedback type."; | 2899 expected_error = "Unable to read congestion feedback type."; |
2891 } else if (i < 6) { | 2900 } else if (i < 6) { |
2892 expected_error = "Unable to read bitrate."; | 2901 expected_error = "Unable to read bitrate."; |
2893 } | 2902 } |
2894 CheckProcessingFails( | 2903 CheckProcessingFails( |
2895 packet, | 2904 packet, |
2896 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2905 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2897 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2906 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2898 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2907 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
2899 } | 2908 } |
2900 } | 2909 } |
2901 | 2910 |
2902 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { | 2911 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { |
2903 unsigned char packet[] = { | 2912 unsigned char packet[] = { |
2904 // public flags (8 byte guid) | 2913 // public flags (8 byte connection_id) |
2905 0x3C, | 2914 0x3C, |
2906 // guid | 2915 // connection_id |
2907 0x10, 0x32, 0x54, 0x76, | 2916 0x10, 0x32, 0x54, 0x76, |
2908 0x98, 0xBA, 0xDC, 0xFE, | 2917 0x98, 0xBA, 0xDC, 0xFE, |
2909 // packet sequence number | 2918 // packet sequence number |
2910 0xBC, 0x9A, 0x78, 0x56, | 2919 0xBC, 0x9A, 0x78, 0x56, |
2911 0x34, 0x12, | 2920 0x34, 0x12, |
2912 // private flags | 2921 // private flags |
2913 0x00, | 2922 0x00, |
2914 | 2923 |
2915 // frame type (congestion feedback frame) | 2924 // frame type (congestion feedback frame) |
2916 0x20, | 2925 0x20, |
2917 // congestion feedback type (invalid) | 2926 // congestion feedback type (invalid) |
2918 0x03, | 2927 0x03, |
2919 }; | 2928 }; |
2920 | 2929 |
2921 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2930 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2922 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 2931 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
2923 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2932 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
2924 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); | 2933 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); |
2925 } | 2934 } |
2926 | 2935 |
2927 TEST_P(QuicFramerTest, StopWaitingFrame) { | 2936 TEST_P(QuicFramerTest, StopWaitingFrame) { |
2928 if (framer_.version() <= QUIC_VERSION_15) { | 2937 if (framer_.version() <= QUIC_VERSION_15) { |
2929 return; | 2938 return; |
2930 } | 2939 } |
2931 unsigned char packet[] = { | 2940 unsigned char packet[] = { |
2932 // public flags (8 byte guid) | 2941 // public flags (8 byte connection_id) |
2933 0x3C, | 2942 0x3C, |
2934 // guid | 2943 // connection_id |
2935 0x10, 0x32, 0x54, 0x76, | 2944 0x10, 0x32, 0x54, 0x76, |
2936 0x98, 0xBA, 0xDC, 0xFE, | 2945 0x98, 0xBA, 0xDC, 0xFE, |
2937 // packet sequence number | 2946 // packet sequence number |
2938 0xA8, 0x9A, 0x78, 0x56, | 2947 0xA8, 0x9A, 0x78, 0x56, |
2939 0x34, 0x12, | 2948 0x34, 0x12, |
2940 // private flags (entropy) | 2949 // private flags (entropy) |
2941 0x01, | 2950 0x01, |
2942 | 2951 |
2943 // frame type (ack frame) | 2952 // frame type (ack frame) |
2944 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2953 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 23 matching lines...) Expand all Loading... |
2968 const size_t frame_size = 7; | 2977 const size_t frame_size = 7; |
2969 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2978 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
2970 string expected_error; | 2979 string expected_error; |
2971 if (i < kLeastUnackedOffset) { | 2980 if (i < kLeastUnackedOffset) { |
2972 expected_error = "Unable to read entropy hash for sent packets."; | 2981 expected_error = "Unable to read entropy hash for sent packets."; |
2973 } else { | 2982 } else { |
2974 expected_error = "Unable to read least unacked delta."; | 2983 expected_error = "Unable to read least unacked delta."; |
2975 } | 2984 } |
2976 CheckProcessingFails( | 2985 CheckProcessingFails( |
2977 packet, | 2986 packet, |
2978 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2987 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2979 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2988 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2980 expected_error, QUIC_INVALID_STOP_WAITING_DATA); | 2989 expected_error, QUIC_INVALID_STOP_WAITING_DATA); |
2981 } | 2990 } |
2982 } | 2991 } |
2983 | 2992 |
2984 TEST_P(QuicFramerTest, RstStreamFrameVersion13) { | 2993 TEST_P(QuicFramerTest, RstStreamFrameVersion13) { |
2985 if (version_ > QUIC_VERSION_13) { | 2994 if (version_ > QUIC_VERSION_13) { |
2986 return; | 2995 return; |
2987 } | 2996 } |
2988 | 2997 |
2989 unsigned char packet[] = { | 2998 unsigned char packet[] = { |
2990 // public flags (8 byte guid) | 2999 // public flags (8 byte connection_id) |
2991 0x3C, | 3000 0x3C, |
2992 // guid | 3001 // connection_id |
2993 0x10, 0x32, 0x54, 0x76, | 3002 0x10, 0x32, 0x54, 0x76, |
2994 0x98, 0xBA, 0xDC, 0xFE, | 3003 0x98, 0xBA, 0xDC, 0xFE, |
2995 // packet sequence number | 3004 // packet sequence number |
2996 0xBC, 0x9A, 0x78, 0x56, | 3005 0xBC, 0x9A, 0x78, 0x56, |
2997 0x34, 0x12, | 3006 0x34, 0x12, |
2998 // private flags | 3007 // private flags |
2999 0x00, | 3008 0x00, |
3000 | 3009 |
3001 // frame type (rst stream frame) | 3010 // frame type (rst stream frame) |
3002 0x01, | 3011 0x01, |
(...skipping 29 matching lines...) Expand all Loading... |
3032 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 3041 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
3033 expected_error = "Unable to read stream_id."; | 3042 expected_error = "Unable to read stream_id."; |
3034 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 3043 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
3035 kQuicErrorCodeSize) { | 3044 kQuicErrorCodeSize) { |
3036 expected_error = "Unable to read rst stream error code."; | 3045 expected_error = "Unable to read rst stream error code."; |
3037 } else { | 3046 } else { |
3038 expected_error = "Unable to read rst stream error details."; | 3047 expected_error = "Unable to read rst stream error details."; |
3039 } | 3048 } |
3040 CheckProcessingFails( | 3049 CheckProcessingFails( |
3041 packet, | 3050 packet, |
3042 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3051 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3043 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3052 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3044 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 3053 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
3045 } | 3054 } |
3046 } | 3055 } |
3047 | 3056 |
3048 TEST_P(QuicFramerTest, RstStreamFrameQuic) { | 3057 TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
3049 if (version_ <= QUIC_VERSION_13) { | 3058 if (version_ <= QUIC_VERSION_13) { |
3050 return; | 3059 return; |
3051 } | 3060 } |
3052 | 3061 |
3053 unsigned char packet[] = { | 3062 unsigned char packet[] = { |
3054 // public flags (8 byte guid) | 3063 // public flags (8 byte connection_id) |
3055 0x3C, | 3064 0x3C, |
3056 // guid | 3065 // connection_id |
3057 0x10, 0x32, 0x54, 0x76, | 3066 0x10, 0x32, 0x54, 0x76, |
3058 0x98, 0xBA, 0xDC, 0xFE, | 3067 0x98, 0xBA, 0xDC, 0xFE, |
3059 // packet sequence number | 3068 // packet sequence number |
3060 0xBC, 0x9A, 0x78, 0x56, | 3069 0xBC, 0x9A, 0x78, 0x56, |
3061 0x34, 0x12, | 3070 0x34, 0x12, |
3062 // private flags | 3071 // private flags |
3063 0x00, | 3072 0x00, |
3064 | 3073 |
3065 // frame type (rst stream frame) | 3074 // frame type (rst stream frame) |
3066 0x01, | 3075 0x01, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3106 + kQuicMaxStreamOffsetSize) { | 3115 + kQuicMaxStreamOffsetSize) { |
3107 expected_error = "Unable to read rst stream sent byte offset."; | 3116 expected_error = "Unable to read rst stream sent byte offset."; |
3108 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 3117 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
3109 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { | 3118 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { |
3110 expected_error = "Unable to read rst stream error code."; | 3119 expected_error = "Unable to read rst stream error code."; |
3111 } else { | 3120 } else { |
3112 expected_error = "Unable to read rst stream error details."; | 3121 expected_error = "Unable to read rst stream error details."; |
3113 } | 3122 } |
3114 CheckProcessingFails( | 3123 CheckProcessingFails( |
3115 packet, | 3124 packet, |
3116 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3125 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3117 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3126 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3118 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 3127 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
3119 } | 3128 } |
3120 } | 3129 } |
3121 | 3130 |
3122 TEST_P(QuicFramerTest, ConnectionCloseFrame) { | 3131 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
3123 unsigned char packet[] = { | 3132 unsigned char packet[] = { |
3124 // public flags (8 byte guid) | 3133 // public flags (8 byte connection_id) |
3125 0x3C, | 3134 0x3C, |
3126 // guid | 3135 // connection_id |
3127 0x10, 0x32, 0x54, 0x76, | 3136 0x10, 0x32, 0x54, 0x76, |
3128 0x98, 0xBA, 0xDC, 0xFE, | 3137 0x98, 0xBA, 0xDC, 0xFE, |
3129 // packet sequence number | 3138 // packet sequence number |
3130 0xBC, 0x9A, 0x78, 0x56, | 3139 0xBC, 0x9A, 0x78, 0x56, |
3131 0x34, 0x12, | 3140 0x34, 0x12, |
3132 // private flags | 3141 // private flags |
3133 0x00, | 3142 0x00, |
3134 | 3143 |
3135 // frame type (connection close frame) | 3144 // frame type (connection close frame) |
3136 0x02, | 3145 0x02, |
(...skipping 27 matching lines...) Expand all Loading... |
3164 for (size_t i = kQuicFrameTypeSize; | 3173 for (size_t i = kQuicFrameTypeSize; |
3165 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { | 3174 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { |
3166 string expected_error; | 3175 string expected_error; |
3167 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 3176 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
3168 expected_error = "Unable to read connection close error code."; | 3177 expected_error = "Unable to read connection close error code."; |
3169 } else { | 3178 } else { |
3170 expected_error = "Unable to read connection close error details."; | 3179 expected_error = "Unable to read connection close error details."; |
3171 } | 3180 } |
3172 CheckProcessingFails( | 3181 CheckProcessingFails( |
3173 packet, | 3182 packet, |
3174 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3183 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3175 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3184 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3176 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 3185 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
3177 } | 3186 } |
3178 } | 3187 } |
3179 | 3188 |
3180 TEST_P(QuicFramerTest, GoAwayFrame) { | 3189 TEST_P(QuicFramerTest, GoAwayFrame) { |
3181 unsigned char packet[] = { | 3190 unsigned char packet[] = { |
3182 // public flags (8 byte guid) | 3191 // public flags (8 byte connection_id) |
3183 0x3C, | 3192 0x3C, |
3184 // guid | 3193 // connection_id |
3185 0x10, 0x32, 0x54, 0x76, | 3194 0x10, 0x32, 0x54, 0x76, |
3186 0x98, 0xBA, 0xDC, 0xFE, | 3195 0x98, 0xBA, 0xDC, 0xFE, |
3187 // packet sequence number | 3196 // packet sequence number |
3188 0xBC, 0x9A, 0x78, 0x56, | 3197 0xBC, 0x9A, 0x78, 0x56, |
3189 0x34, 0x12, | 3198 0x34, 0x12, |
3190 // private flags | 3199 // private flags |
3191 0x00, | 3200 0x00, |
3192 | 3201 |
3193 // frame type (go away frame) | 3202 // frame type (go away frame) |
3194 0x03, | 3203 0x03, |
(...skipping 30 matching lines...) Expand all Loading... |
3225 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 3234 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
3226 expected_error = "Unable to read go away error code."; | 3235 expected_error = "Unable to read go away error code."; |
3227 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + | 3236 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + |
3228 kQuicMaxStreamIdSize) { | 3237 kQuicMaxStreamIdSize) { |
3229 expected_error = "Unable to read last good stream id."; | 3238 expected_error = "Unable to read last good stream id."; |
3230 } else { | 3239 } else { |
3231 expected_error = "Unable to read goaway reason."; | 3240 expected_error = "Unable to read goaway reason."; |
3232 } | 3241 } |
3233 CheckProcessingFails( | 3242 CheckProcessingFails( |
3234 packet, | 3243 packet, |
3235 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3244 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3236 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3245 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3237 expected_error, QUIC_INVALID_GOAWAY_DATA); | 3246 expected_error, QUIC_INVALID_GOAWAY_DATA); |
3238 } | 3247 } |
3239 } | 3248 } |
3240 | 3249 |
3241 TEST_P(QuicFramerTest, WindowUpdateFrame) { | 3250 TEST_P(QuicFramerTest, WindowUpdateFrame) { |
3242 unsigned char packet[] = { | 3251 unsigned char packet[] = { |
3243 // public flags (8 byte guid) | 3252 // public flags (8 byte connection_id) |
3244 0x3C, | 3253 0x3C, |
3245 // guid | 3254 // connection_id |
3246 0x10, 0x32, 0x54, 0x76, | 3255 0x10, 0x32, 0x54, 0x76, |
3247 0x98, 0xBA, 0xDC, 0xFE, | 3256 0x98, 0xBA, 0xDC, 0xFE, |
3248 // packet sequence number | 3257 // packet sequence number |
3249 0xBC, 0x9A, 0x78, 0x56, | 3258 0xBC, 0x9A, 0x78, 0x56, |
3250 0x34, 0x12, | 3259 0x34, 0x12, |
3251 // private flags | 3260 // private flags |
3252 0x00, | 3261 0x00, |
3253 | 3262 |
3254 // frame type (window update frame) | 3263 // frame type (window update frame) |
3255 0x04, | 3264 0x04, |
(...skipping 29 matching lines...) Expand all Loading... |
3285 for (size_t i = kQuicFrameTypeSize; | 3294 for (size_t i = kQuicFrameTypeSize; |
3286 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 3295 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
3287 string expected_error; | 3296 string expected_error; |
3288 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 3297 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
3289 expected_error = "Unable to read stream_id."; | 3298 expected_error = "Unable to read stream_id."; |
3290 } else { | 3299 } else { |
3291 expected_error = "Unable to read window byte_offset."; | 3300 expected_error = "Unable to read window byte_offset."; |
3292 } | 3301 } |
3293 CheckProcessingFails( | 3302 CheckProcessingFails( |
3294 packet, | 3303 packet, |
3295 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3304 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3296 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3305 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3297 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); | 3306 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); |
3298 } | 3307 } |
3299 } | 3308 } |
3300 | 3309 |
3301 TEST_P(QuicFramerTest, BlockedFrame) { | 3310 TEST_P(QuicFramerTest, BlockedFrame) { |
3302 unsigned char packet[] = { | 3311 unsigned char packet[] = { |
3303 // public flags (8 byte guid) | 3312 // public flags (8 byte connection_id) |
3304 0x3C, | 3313 0x3C, |
3305 // guid | 3314 // connection_id |
3306 0x10, 0x32, 0x54, 0x76, | 3315 0x10, 0x32, 0x54, 0x76, |
3307 0x98, 0xBA, 0xDC, 0xFE, | 3316 0x98, 0xBA, 0xDC, 0xFE, |
3308 // packet sequence number | 3317 // packet sequence number |
3309 0xBC, 0x9A, 0x78, 0x56, | 3318 0xBC, 0x9A, 0x78, 0x56, |
3310 0x34, 0x12, | 3319 0x34, 0x12, |
3311 // private flags | 3320 // private flags |
3312 0x00, | 3321 0x00, |
3313 | 3322 |
3314 // frame type (blocked frame) | 3323 // frame type (blocked frame) |
3315 0x05, | 3324 0x05, |
(...skipping 19 matching lines...) Expand all Loading... |
3335 | 3344 |
3336 EXPECT_EQ(GG_UINT64_C(0x01020304), | 3345 EXPECT_EQ(GG_UINT64_C(0x01020304), |
3337 visitor_.blocked_frame_.stream_id); | 3346 visitor_.blocked_frame_.stream_id); |
3338 | 3347 |
3339 // Now test framing boundaries | 3348 // Now test framing boundaries |
3340 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 3349 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
3341 ++i) { | 3350 ++i) { |
3342 string expected_error = "Unable to read stream_id."; | 3351 string expected_error = "Unable to read stream_id."; |
3343 CheckProcessingFails( | 3352 CheckProcessingFails( |
3344 packet, | 3353 packet, |
3345 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3354 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3346 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 3355 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
3347 expected_error, QUIC_INVALID_BLOCKED_DATA); | 3356 expected_error, QUIC_INVALID_BLOCKED_DATA); |
3348 } | 3357 } |
3349 } | 3358 } |
3350 | 3359 |
3351 TEST_P(QuicFramerTest, PublicResetPacket) { | 3360 TEST_P(QuicFramerTest, PublicResetPacket) { |
3352 unsigned char packet[] = { | 3361 unsigned char packet[] = { |
3353 // public flags (public reset, 8 byte guid) | 3362 // public flags (public reset, 8 byte connection_id) |
3354 0x0E, | 3363 0x0E, |
3355 // guid | 3364 // connection_id |
3356 0x10, 0x32, 0x54, 0x76, | 3365 0x10, 0x32, 0x54, 0x76, |
3357 0x98, 0xBA, 0xDC, 0xFE, | 3366 0x98, 0xBA, 0xDC, 0xFE, |
3358 // message tag (kPRST) | 3367 // message tag (kPRST) |
3359 'P', 'R', 'S', 'T', | 3368 'P', 'R', 'S', 'T', |
3360 // num_entries (2) + padding | 3369 // num_entries (2) + padding |
3361 0x02, 0x00, 0x00, 0x00, | 3370 0x02, 0x00, 0x00, 0x00, |
3362 // tag kRNON | 3371 // tag kRNON |
3363 'R', 'N', 'O', 'N', | 3372 'R', 'N', 'O', 'N', |
3364 // end offset 8 | 3373 // end offset 8 |
3365 0x08, 0x00, 0x00, 0x00, | 3374 0x08, 0x00, 0x00, 0x00, |
3366 // tag kRSEQ | 3375 // tag kRSEQ |
3367 'R', 'S', 'E', 'Q', | 3376 'R', 'S', 'E', 'Q', |
3368 // end offset 16 | 3377 // end offset 16 |
3369 0x10, 0x00, 0x00, 0x00, | 3378 0x10, 0x00, 0x00, 0x00, |
3370 // nonce proof | 3379 // nonce proof |
3371 0x89, 0x67, 0x45, 0x23, | 3380 0x89, 0x67, 0x45, 0x23, |
3372 0x01, 0xEF, 0xCD, 0xAB, | 3381 0x01, 0xEF, 0xCD, 0xAB, |
3373 // rejected sequence number | 3382 // rejected sequence number |
3374 0xBC, 0x9A, 0x78, 0x56, | 3383 0xBC, 0x9A, 0x78, 0x56, |
3375 0x34, 0x12, 0x00, 0x00, | 3384 0x34, 0x12, 0x00, 0x00, |
3376 }; | 3385 }; |
3377 | 3386 |
3378 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3387 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3379 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3388 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3380 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3389 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3381 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 3390 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
3382 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 3391 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
3383 visitor_.public_reset_packet_->public_header.guid); | 3392 visitor_.public_reset_packet_->public_header.connection_id); |
3384 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 3393 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
3385 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 3394 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
3386 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 3395 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), |
3387 visitor_.public_reset_packet_->nonce_proof); | 3396 visitor_.public_reset_packet_->nonce_proof); |
3388 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 3397 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
3389 visitor_.public_reset_packet_->rejected_sequence_number); | 3398 visitor_.public_reset_packet_->rejected_sequence_number); |
3390 EXPECT_TRUE( | 3399 EXPECT_TRUE( |
3391 visitor_.public_reset_packet_->client_address.address().empty()); | 3400 visitor_.public_reset_packet_->client_address.address().empty()); |
3392 | 3401 |
3393 // Now test framing boundaries | 3402 // Now test framing boundaries |
3394 for (size_t i = 0; i < arraysize(packet); ++i) { | 3403 for (size_t i = 0; i < arraysize(packet); ++i) { |
3395 string expected_error; | 3404 string expected_error; |
3396 DVLOG(1) << "iteration: " << i; | 3405 DVLOG(1) << "iteration: " << i; |
3397 if (i < kGuidOffset) { | 3406 if (i < kConnectionIdOffset) { |
3398 expected_error = "Unable to read public flags."; | 3407 expected_error = "Unable to read public flags."; |
3399 CheckProcessingFails(packet, i, expected_error, | 3408 CheckProcessingFails(packet, i, expected_error, |
3400 QUIC_INVALID_PACKET_HEADER); | 3409 QUIC_INVALID_PACKET_HEADER); |
3401 } else if (i < kPublicResetPacketMessageTagOffset) { | 3410 } else if (i < kPublicResetPacketMessageTagOffset) { |
3402 expected_error = "Unable to read GUID."; | 3411 expected_error = "Unable to read ConnectionId."; |
3403 CheckProcessingFails(packet, i, expected_error, | 3412 CheckProcessingFails(packet, i, expected_error, |
3404 QUIC_INVALID_PACKET_HEADER); | 3413 QUIC_INVALID_PACKET_HEADER); |
3405 } else { | 3414 } else { |
3406 expected_error = "Unable to read reset message."; | 3415 expected_error = "Unable to read reset message."; |
3407 CheckProcessingFails(packet, i, expected_error, | 3416 CheckProcessingFails(packet, i, expected_error, |
3408 QUIC_INVALID_PUBLIC_RST_PACKET); | 3417 QUIC_INVALID_PUBLIC_RST_PACKET); |
3409 } | 3418 } |
3410 } | 3419 } |
3411 } | 3420 } |
3412 | 3421 |
3413 TEST_P(QuicFramerTest, PublicResetPacketWithTrailingJunk) { | 3422 TEST_P(QuicFramerTest, PublicResetPacketWithTrailingJunk) { |
3414 unsigned char packet[] = { | 3423 unsigned char packet[] = { |
3415 // public flags (public reset, 8 byte guid) | 3424 // public flags (public reset, 8 byte connection_id) |
3416 0x0E, | 3425 0x0E, |
3417 // guid | 3426 // connection_id |
3418 0x10, 0x32, 0x54, 0x76, | 3427 0x10, 0x32, 0x54, 0x76, |
3419 0x98, 0xBA, 0xDC, 0xFE, | 3428 0x98, 0xBA, 0xDC, 0xFE, |
3420 // message tag (kPRST) | 3429 // message tag (kPRST) |
3421 'P', 'R', 'S', 'T', | 3430 'P', 'R', 'S', 'T', |
3422 // num_entries (2) + padding | 3431 // num_entries (2) + padding |
3423 0x02, 0x00, 0x00, 0x00, | 3432 0x02, 0x00, 0x00, 0x00, |
3424 // tag kRNON | 3433 // tag kRNON |
3425 'R', 'N', 'O', 'N', | 3434 'R', 'N', 'O', 'N', |
3426 // end offset 8 | 3435 // end offset 8 |
3427 0x08, 0x00, 0x00, 0x00, | 3436 0x08, 0x00, 0x00, 0x00, |
(...skipping 11 matching lines...) Expand all Loading... |
3439 'j', 'u', 'n', 'k', | 3448 'j', 'u', 'n', 'k', |
3440 }; | 3449 }; |
3441 | 3450 |
3442 string expected_error = "Unable to read reset message."; | 3451 string expected_error = "Unable to read reset message."; |
3443 CheckProcessingFails(packet, arraysize(packet), expected_error, | 3452 CheckProcessingFails(packet, arraysize(packet), expected_error, |
3444 QUIC_INVALID_PUBLIC_RST_PACKET); | 3453 QUIC_INVALID_PUBLIC_RST_PACKET); |
3445 } | 3454 } |
3446 | 3455 |
3447 TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { | 3456 TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { |
3448 unsigned char packet[] = { | 3457 unsigned char packet[] = { |
3449 // public flags (public reset, 8 byte guid) | 3458 // public flags (public reset, 8 byte connection_id) |
3450 0x0E, | 3459 0x0E, |
3451 // guid | 3460 // connection_id |
3452 0x10, 0x32, 0x54, 0x76, | 3461 0x10, 0x32, 0x54, 0x76, |
3453 0x98, 0xBA, 0xDC, 0xFE, | 3462 0x98, 0xBA, 0xDC, 0xFE, |
3454 // message tag (kPRST) | 3463 // message tag (kPRST) |
3455 'P', 'R', 'S', 'T', | 3464 'P', 'R', 'S', 'T', |
3456 // num_entries (3) + padding | 3465 // num_entries (3) + padding |
3457 0x03, 0x00, 0x00, 0x00, | 3466 0x03, 0x00, 0x00, 0x00, |
3458 // tag kRNON | 3467 // tag kRNON |
3459 'R', 'N', 'O', 'N', | 3468 'R', 'N', 'O', 'N', |
3460 // end offset 8 | 3469 // end offset 8 |
3461 0x08, 0x00, 0x00, 0x00, | 3470 0x08, 0x00, 0x00, 0x00, |
(...skipping 15 matching lines...) Expand all Loading... |
3477 0x02, 0x00, | 3486 0x02, 0x00, |
3478 0x04, 0x1F, 0xC6, 0x2C, | 3487 0x04, 0x1F, 0xC6, 0x2C, |
3479 0xBB, 0x01, | 3488 0xBB, 0x01, |
3480 }; | 3489 }; |
3481 | 3490 |
3482 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3491 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3483 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3492 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3484 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3493 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3485 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 3494 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
3486 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 3495 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
3487 visitor_.public_reset_packet_->public_header.guid); | 3496 visitor_.public_reset_packet_->public_header.connection_id); |
3488 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 3497 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
3489 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 3498 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
3490 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 3499 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), |
3491 visitor_.public_reset_packet_->nonce_proof); | 3500 visitor_.public_reset_packet_->nonce_proof); |
3492 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 3501 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
3493 visitor_.public_reset_packet_->rejected_sequence_number); | 3502 visitor_.public_reset_packet_->rejected_sequence_number); |
3494 EXPECT_EQ("4.31.198.44", | 3503 EXPECT_EQ("4.31.198.44", |
3495 IPAddressToString(visitor_.public_reset_packet_-> | 3504 IPAddressToString(visitor_.public_reset_packet_-> |
3496 client_address.address())); | 3505 client_address.address())); |
3497 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 3506 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); |
3498 | 3507 |
3499 // Now test framing boundaries | 3508 // Now test framing boundaries |
3500 for (size_t i = 0; i < arraysize(packet); ++i) { | 3509 for (size_t i = 0; i < arraysize(packet); ++i) { |
3501 string expected_error; | 3510 string expected_error; |
3502 DVLOG(1) << "iteration: " << i; | 3511 DVLOG(1) << "iteration: " << i; |
3503 if (i < kGuidOffset) { | 3512 if (i < kConnectionIdOffset) { |
3504 expected_error = "Unable to read public flags."; | 3513 expected_error = "Unable to read public flags."; |
3505 CheckProcessingFails(packet, i, expected_error, | 3514 CheckProcessingFails(packet, i, expected_error, |
3506 QUIC_INVALID_PACKET_HEADER); | 3515 QUIC_INVALID_PACKET_HEADER); |
3507 } else if (i < kPublicResetPacketMessageTagOffset) { | 3516 } else if (i < kPublicResetPacketMessageTagOffset) { |
3508 expected_error = "Unable to read GUID."; | 3517 expected_error = "Unable to read ConnectionId."; |
3509 CheckProcessingFails(packet, i, expected_error, | 3518 CheckProcessingFails(packet, i, expected_error, |
3510 QUIC_INVALID_PACKET_HEADER); | 3519 QUIC_INVALID_PACKET_HEADER); |
3511 } else { | 3520 } else { |
3512 expected_error = "Unable to read reset message."; | 3521 expected_error = "Unable to read reset message."; |
3513 CheckProcessingFails(packet, i, expected_error, | 3522 CheckProcessingFails(packet, i, expected_error, |
3514 QUIC_INVALID_PUBLIC_RST_PACKET); | 3523 QUIC_INVALID_PUBLIC_RST_PACKET); |
3515 } | 3524 } |
3516 } | 3525 } |
3517 } | 3526 } |
3518 | 3527 |
3519 // TODO(wtc): remove this test when we drop support for QUIC_VERSION_13. | 3528 // TODO(wtc): remove this test when we drop support for QUIC_VERSION_13. |
3520 TEST_P(QuicFramerTest, PublicResetPacketOld) { | 3529 TEST_P(QuicFramerTest, PublicResetPacketOld) { |
3521 unsigned char packet[] = { | 3530 unsigned char packet[] = { |
3522 // public flags (public reset, 8 byte guid) | 3531 // public flags (public reset, 8 byte connection_id) |
3523 0x3E, | 3532 0x3E, |
3524 // guid | 3533 // connection_id |
3525 0x10, 0x32, 0x54, 0x76, | 3534 0x10, 0x32, 0x54, 0x76, |
3526 0x98, 0xBA, 0xDC, 0xFE, | 3535 0x98, 0xBA, 0xDC, 0xFE, |
3527 // nonce proof | 3536 // nonce proof |
3528 0x89, 0x67, 0x45, 0x23, | 3537 0x89, 0x67, 0x45, 0x23, |
3529 0x01, 0xEF, 0xCD, 0xAB, | 3538 0x01, 0xEF, 0xCD, 0xAB, |
3530 // rejected sequence number | 3539 // rejected sequence number |
3531 0xBC, 0x9A, 0x78, 0x56, | 3540 0xBC, 0x9A, 0x78, 0x56, |
3532 0x34, 0x12, | 3541 0x34, 0x12, |
3533 }; | 3542 }; |
3534 | 3543 |
3535 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3544 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3536 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3545 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3537 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3546 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3538 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 3547 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
3539 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 3548 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
3540 visitor_.public_reset_packet_->public_header.guid); | 3549 visitor_.public_reset_packet_->public_header.connection_id); |
3541 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 3550 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
3542 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 3551 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
3543 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 3552 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), |
3544 visitor_.public_reset_packet_->nonce_proof); | 3553 visitor_.public_reset_packet_->nonce_proof); |
3545 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 3554 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
3546 visitor_.public_reset_packet_->rejected_sequence_number); | 3555 visitor_.public_reset_packet_->rejected_sequence_number); |
3547 EXPECT_TRUE( | 3556 EXPECT_TRUE( |
3548 visitor_.public_reset_packet_->client_address.address().empty()); | 3557 visitor_.public_reset_packet_->client_address.address().empty()); |
3549 | 3558 |
3550 // Now test framing boundaries | 3559 // Now test framing boundaries |
3551 for (size_t i = 0; i < arraysize(packet); ++i) { | 3560 for (size_t i = 0; i < arraysize(packet); ++i) { |
3552 string expected_error; | 3561 string expected_error; |
3553 DVLOG(1) << "iteration: " << i; | 3562 DVLOG(1) << "iteration: " << i; |
3554 if (i < kGuidOffset) { | 3563 if (i < kConnectionIdOffset) { |
3555 expected_error = "Unable to read public flags."; | 3564 expected_error = "Unable to read public flags."; |
3556 CheckProcessingFails(packet, i, expected_error, | 3565 CheckProcessingFails(packet, i, expected_error, |
3557 QUIC_INVALID_PACKET_HEADER); | 3566 QUIC_INVALID_PACKET_HEADER); |
3558 } else if (i < kPublicResetPacketNonceProofOffset) { | 3567 } else if (i < kPublicResetPacketNonceProofOffset) { |
3559 expected_error = "Unable to read GUID."; | 3568 expected_error = "Unable to read ConnectionId."; |
3560 CheckProcessingFails(packet, i, expected_error, | 3569 CheckProcessingFails(packet, i, expected_error, |
3561 QUIC_INVALID_PACKET_HEADER); | 3570 QUIC_INVALID_PACKET_HEADER); |
3562 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) { | 3571 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) { |
3563 expected_error = "Unable to read nonce proof."; | 3572 expected_error = "Unable to read nonce proof."; |
3564 CheckProcessingFails(packet, i, expected_error, | 3573 CheckProcessingFails(packet, i, expected_error, |
3565 QUIC_INVALID_PUBLIC_RST_PACKET); | 3574 QUIC_INVALID_PUBLIC_RST_PACKET); |
3566 } else { | 3575 } else { |
3567 expected_error = "Unable to read rejected sequence number."; | 3576 expected_error = "Unable to read rejected sequence number."; |
3568 CheckProcessingFails(packet, i, expected_error, | 3577 CheckProcessingFails(packet, i, expected_error, |
3569 QUIC_INVALID_PUBLIC_RST_PACKET); | 3578 QUIC_INVALID_PUBLIC_RST_PACKET); |
3570 } | 3579 } |
3571 } | 3580 } |
3572 } | 3581 } |
3573 | 3582 |
3574 TEST_P(QuicFramerTest, VersionNegotiationPacket) { | 3583 TEST_P(QuicFramerTest, VersionNegotiationPacket) { |
3575 unsigned char packet[] = { | 3584 unsigned char packet[] = { |
3576 // public flags (version, 8 byte guid) | 3585 // public flags (version, 8 byte connection_id) |
3577 0x3D, | 3586 0x3D, |
3578 // guid | 3587 // connection_id |
3579 0x10, 0x32, 0x54, 0x76, | 3588 0x10, 0x32, 0x54, 0x76, |
3580 0x98, 0xBA, 0xDC, 0xFE, | 3589 0x98, 0xBA, 0xDC, 0xFE, |
3581 // version tag | 3590 // version tag |
3582 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3591 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3583 'Q', '2', '.', '0', | 3592 'Q', '2', '.', '0', |
3584 }; | 3593 }; |
3585 | 3594 |
3586 QuicFramerPeer::SetIsServer(&framer_, false); | 3595 QuicFramerPeer::SetIsServer(&framer_, false); |
3587 | 3596 |
3588 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3597 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3589 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3598 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3590 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3599 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3591 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 3600 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
3592 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 3601 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
3593 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); | 3602 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); |
3594 | 3603 |
3595 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { | 3604 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID; ++i) { |
3596 string expected_error; | 3605 string expected_error; |
3597 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; | 3606 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; |
3598 if (i < kGuidOffset) { | 3607 if (i < kConnectionIdOffset) { |
3599 expected_error = "Unable to read public flags."; | 3608 expected_error = "Unable to read public flags."; |
3600 } else if (i < kVersionOffset) { | 3609 } else if (i < kVersionOffset) { |
3601 expected_error = "Unable to read GUID."; | 3610 expected_error = "Unable to read ConnectionId."; |
3602 } else { | 3611 } else { |
3603 expected_error = "Unable to read supported version in negotiation."; | 3612 expected_error = "Unable to read supported version in negotiation."; |
3604 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 3613 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
3605 } | 3614 } |
3606 CheckProcessingFails(packet, i, expected_error, error_code); | 3615 CheckProcessingFails(packet, i, expected_error, error_code); |
3607 } | 3616 } |
3608 } | 3617 } |
3609 | 3618 |
3610 TEST_P(QuicFramerTest, FecPacket) { | 3619 TEST_P(QuicFramerTest, FecPacket) { |
3611 unsigned char packet[] = { | 3620 unsigned char packet[] = { |
3612 // public flags (8 byte guid) | 3621 // public flags (8 byte connection_id) |
3613 0x3C, | 3622 0x3C, |
3614 // guid | 3623 // connection_id |
3615 0x10, 0x32, 0x54, 0x76, | 3624 0x10, 0x32, 0x54, 0x76, |
3616 0x98, 0xBA, 0xDC, 0xFE, | 3625 0x98, 0xBA, 0xDC, 0xFE, |
3617 // packet sequence number | 3626 // packet sequence number |
3618 0xBC, 0x9A, 0x78, 0x56, | 3627 0xBC, 0x9A, 0x78, 0x56, |
3619 0x34, 0x12, | 3628 0x34, 0x12, |
3620 // private flags (fec group & FEC) | 3629 // private flags (fec group & FEC) |
3621 0x06, | 3630 0x06, |
3622 // first fec protected packet offset | 3631 // first fec protected packet offset |
3623 0x01, | 3632 0x01, |
3624 | 3633 |
(...skipping 14 matching lines...) Expand all Loading... |
3639 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 3648 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
3640 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 3649 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
3641 ASSERT_EQ(1, visitor_.fec_count_); | 3650 ASSERT_EQ(1, visitor_.fec_count_); |
3642 const QuicFecData& fec_data = *visitor_.fec_data_[0]; | 3651 const QuicFecData& fec_data = *visitor_.fec_data_[0]; |
3643 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); | 3652 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); |
3644 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); | 3653 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); |
3645 } | 3654 } |
3646 | 3655 |
3647 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 3656 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
3648 QuicPacketHeader header; | 3657 QuicPacketHeader header; |
3649 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3658 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3650 header.public_header.reset_flag = false; | 3659 header.public_header.reset_flag = false; |
3651 header.public_header.version_flag = false; | 3660 header.public_header.version_flag = false; |
3652 header.fec_flag = false; | 3661 header.fec_flag = false; |
3653 header.entropy_flag = false; | 3662 header.entropy_flag = false; |
3654 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3663 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3655 header.fec_group = 0; | 3664 header.fec_group = 0; |
3656 | 3665 |
3657 QuicPaddingFrame padding_frame; | 3666 QuicPaddingFrame padding_frame; |
3658 | 3667 |
3659 QuicFrames frames; | 3668 QuicFrames frames; |
3660 frames.push_back(QuicFrame(&padding_frame)); | 3669 frames.push_back(QuicFrame(&padding_frame)); |
3661 | 3670 |
3662 unsigned char packet[kMaxPacketSize] = { | 3671 unsigned char packet[kMaxPacketSize] = { |
3663 // public flags (8 byte guid) | 3672 // public flags (8 byte connection_id) |
3664 0x3C, | 3673 0x3C, |
3665 // guid | 3674 // connection_id |
3666 0x10, 0x32, 0x54, 0x76, | 3675 0x10, 0x32, 0x54, 0x76, |
3667 0x98, 0xBA, 0xDC, 0xFE, | 3676 0x98, 0xBA, 0xDC, 0xFE, |
3668 // packet sequence number | 3677 // packet sequence number |
3669 0xBC, 0x9A, 0x78, 0x56, | 3678 0xBC, 0x9A, 0x78, 0x56, |
3670 0x34, 0x12, | 3679 0x34, 0x12, |
3671 // private flags | 3680 // private flags |
3672 0x00, | 3681 0x00, |
3673 | 3682 |
3674 // frame type (padding frame) | 3683 // frame type (padding frame) |
3675 0x00, | 3684 0x00, |
3676 0x00, 0x00, 0x00, 0x00 | 3685 0x00, 0x00, 0x00, 0x00 |
3677 }; | 3686 }; |
3678 | 3687 |
3679 uint64 header_size = | 3688 uint64 header_size = |
3680 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3689 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3681 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 3690 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
3682 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3691 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3683 | 3692 |
3684 scoped_ptr<QuicPacket> data( | 3693 scoped_ptr<QuicPacket> data( |
3685 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3694 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3686 ASSERT_TRUE(data != NULL); | 3695 ASSERT_TRUE(data != NULL); |
3687 | 3696 |
3688 test::CompareCharArraysWithHexError("constructed packet", | 3697 test::CompareCharArraysWithHexError("constructed packet", |
3689 data->data(), data->length(), | 3698 data->data(), data->length(), |
3690 AsChars(packet), | 3699 AsChars(packet), |
3691 arraysize(packet)); | 3700 arraysize(packet)); |
3692 } | 3701 } |
3693 | 3702 |
3694 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 3703 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
3695 QuicPacketHeader header; | 3704 QuicPacketHeader header; |
3696 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3705 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3697 header.public_header.reset_flag = false; | 3706 header.public_header.reset_flag = false; |
3698 header.public_header.version_flag = false; | 3707 header.public_header.version_flag = false; |
3699 header.fec_flag = false; | 3708 header.fec_flag = false; |
3700 header.entropy_flag = false; | 3709 header.entropy_flag = false; |
3701 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; | 3710 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; |
3702 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3711 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3703 header.fec_group = 0; | 3712 header.fec_group = 0; |
3704 | 3713 |
3705 QuicPaddingFrame padding_frame; | 3714 QuicPaddingFrame padding_frame; |
3706 | 3715 |
3707 QuicFrames frames; | 3716 QuicFrames frames; |
3708 frames.push_back(QuicFrame(&padding_frame)); | 3717 frames.push_back(QuicFrame(&padding_frame)); |
3709 | 3718 |
3710 unsigned char packet[kMaxPacketSize] = { | 3719 unsigned char packet[kMaxPacketSize] = { |
3711 // public flags (8 byte guid and 4 byte sequence number) | 3720 // public flags (8 byte connection_id and 4 byte sequence number) |
3712 0x2C, | 3721 0x2C, |
3713 // guid | 3722 // connection_id |
3714 0x10, 0x32, 0x54, 0x76, | 3723 0x10, 0x32, 0x54, 0x76, |
3715 0x98, 0xBA, 0xDC, 0xFE, | 3724 0x98, 0xBA, 0xDC, 0xFE, |
3716 // packet sequence number | 3725 // packet sequence number |
3717 0xBC, 0x9A, 0x78, 0x56, | 3726 0xBC, 0x9A, 0x78, 0x56, |
3718 // private flags | 3727 // private flags |
3719 0x00, | 3728 0x00, |
3720 | 3729 |
3721 // frame type (padding frame) | 3730 // frame type (padding frame) |
3722 0x00, | 3731 0x00, |
3723 0x00, 0x00, 0x00, 0x00 | 3732 0x00, 0x00, 0x00, 0x00 |
3724 }; | 3733 }; |
3725 | 3734 |
3726 uint64 header_size = | 3735 uint64 header_size = |
3727 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3736 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3728 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 3737 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
3729 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3738 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3730 | 3739 |
3731 scoped_ptr<QuicPacket> data( | 3740 scoped_ptr<QuicPacket> data( |
3732 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3741 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3733 ASSERT_TRUE(data != NULL); | 3742 ASSERT_TRUE(data != NULL); |
3734 | 3743 |
3735 test::CompareCharArraysWithHexError("constructed packet", | 3744 test::CompareCharArraysWithHexError("constructed packet", |
3736 data->data(), data->length(), | 3745 data->data(), data->length(), |
3737 AsChars(packet), | 3746 AsChars(packet), |
3738 arraysize(packet)); | 3747 arraysize(packet)); |
3739 } | 3748 } |
3740 | 3749 |
3741 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 3750 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
3742 QuicPacketHeader header; | 3751 QuicPacketHeader header; |
3743 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3752 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3744 header.public_header.reset_flag = false; | 3753 header.public_header.reset_flag = false; |
3745 header.public_header.version_flag = false; | 3754 header.public_header.version_flag = false; |
3746 header.fec_flag = false; | 3755 header.fec_flag = false; |
3747 header.entropy_flag = false; | 3756 header.entropy_flag = false; |
3748 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; | 3757 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; |
3749 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3758 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3750 header.fec_group = 0; | 3759 header.fec_group = 0; |
3751 | 3760 |
3752 QuicPaddingFrame padding_frame; | 3761 QuicPaddingFrame padding_frame; |
3753 | 3762 |
3754 QuicFrames frames; | 3763 QuicFrames frames; |
3755 frames.push_back(QuicFrame(&padding_frame)); | 3764 frames.push_back(QuicFrame(&padding_frame)); |
3756 | 3765 |
3757 unsigned char packet[kMaxPacketSize] = { | 3766 unsigned char packet[kMaxPacketSize] = { |
3758 // public flags (8 byte guid and 2 byte sequence number) | 3767 // public flags (8 byte connection_id and 2 byte sequence number) |
3759 0x1C, | 3768 0x1C, |
3760 // guid | 3769 // connection_id |
3761 0x10, 0x32, 0x54, 0x76, | 3770 0x10, 0x32, 0x54, 0x76, |
3762 0x98, 0xBA, 0xDC, 0xFE, | 3771 0x98, 0xBA, 0xDC, 0xFE, |
3763 // packet sequence number | 3772 // packet sequence number |
3764 0xBC, 0x9A, | 3773 0xBC, 0x9A, |
3765 // private flags | 3774 // private flags |
3766 0x00, | 3775 0x00, |
3767 | 3776 |
3768 // frame type (padding frame) | 3777 // frame type (padding frame) |
3769 0x00, | 3778 0x00, |
3770 0x00, 0x00, 0x00, 0x00 | 3779 0x00, 0x00, 0x00, 0x00 |
3771 }; | 3780 }; |
3772 | 3781 |
3773 uint64 header_size = | 3782 uint64 header_size = |
3774 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3783 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3775 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 3784 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
3776 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3785 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3777 | 3786 |
3778 scoped_ptr<QuicPacket> data( | 3787 scoped_ptr<QuicPacket> data( |
3779 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3788 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3780 ASSERT_TRUE(data != NULL); | 3789 ASSERT_TRUE(data != NULL); |
3781 | 3790 |
3782 test::CompareCharArraysWithHexError("constructed packet", | 3791 test::CompareCharArraysWithHexError("constructed packet", |
3783 data->data(), data->length(), | 3792 data->data(), data->length(), |
3784 AsChars(packet), | 3793 AsChars(packet), |
3785 arraysize(packet)); | 3794 arraysize(packet)); |
3786 } | 3795 } |
3787 | 3796 |
3788 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 3797 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
3789 QuicPacketHeader header; | 3798 QuicPacketHeader header; |
3790 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3799 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3791 header.public_header.reset_flag = false; | 3800 header.public_header.reset_flag = false; |
3792 header.public_header.version_flag = false; | 3801 header.public_header.version_flag = false; |
3793 header.fec_flag = false; | 3802 header.fec_flag = false; |
3794 header.entropy_flag = false; | 3803 header.entropy_flag = false; |
3795 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 3804 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
3796 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3805 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3797 header.fec_group = 0; | 3806 header.fec_group = 0; |
3798 | 3807 |
3799 QuicPaddingFrame padding_frame; | 3808 QuicPaddingFrame padding_frame; |
3800 | 3809 |
3801 QuicFrames frames; | 3810 QuicFrames frames; |
3802 frames.push_back(QuicFrame(&padding_frame)); | 3811 frames.push_back(QuicFrame(&padding_frame)); |
3803 | 3812 |
3804 unsigned char packet[kMaxPacketSize] = { | 3813 unsigned char packet[kMaxPacketSize] = { |
3805 // public flags (8 byte guid and 1 byte sequence number) | 3814 // public flags (8 byte connection_id and 1 byte sequence number) |
3806 0x0C, | 3815 0x0C, |
3807 // guid | 3816 // connection_id |
3808 0x10, 0x32, 0x54, 0x76, | 3817 0x10, 0x32, 0x54, 0x76, |
3809 0x98, 0xBA, 0xDC, 0xFE, | 3818 0x98, 0xBA, 0xDC, 0xFE, |
3810 // packet sequence number | 3819 // packet sequence number |
3811 0xBC, | 3820 0xBC, |
3812 // private flags | 3821 // private flags |
3813 0x00, | 3822 0x00, |
3814 | 3823 |
3815 // frame type (padding frame) | 3824 // frame type (padding frame) |
3816 0x00, | 3825 0x00, |
3817 0x00, 0x00, 0x00, 0x00 | 3826 0x00, 0x00, 0x00, 0x00 |
3818 }; | 3827 }; |
3819 | 3828 |
3820 uint64 header_size = | 3829 uint64 header_size = |
3821 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 3830 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3822 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); | 3831 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
3823 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3832 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3824 | 3833 |
3825 scoped_ptr<QuicPacket> data( | 3834 scoped_ptr<QuicPacket> data( |
3826 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3835 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3827 ASSERT_TRUE(data != NULL); | 3836 ASSERT_TRUE(data != NULL); |
3828 | 3837 |
3829 test::CompareCharArraysWithHexError("constructed packet", | 3838 test::CompareCharArraysWithHexError("constructed packet", |
3830 data->data(), data->length(), | 3839 data->data(), data->length(), |
3831 AsChars(packet), | 3840 AsChars(packet), |
3832 arraysize(packet)); | 3841 arraysize(packet)); |
3833 } | 3842 } |
3834 | 3843 |
3835 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 3844 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
3836 QuicPacketHeader header; | 3845 QuicPacketHeader header; |
3837 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3846 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3838 header.public_header.reset_flag = false; | 3847 header.public_header.reset_flag = false; |
3839 header.public_header.version_flag = false; | 3848 header.public_header.version_flag = false; |
3840 header.fec_flag = false; | 3849 header.fec_flag = false; |
3841 header.entropy_flag = true; | 3850 header.entropy_flag = true; |
3842 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 3851 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
3843 header.fec_group = 0; | 3852 header.fec_group = 0; |
3844 | 3853 |
3845 QuicStreamFrame stream_frame; | 3854 QuicStreamFrame stream_frame; |
3846 stream_frame.stream_id = 0x01020304; | 3855 stream_frame.stream_id = 0x01020304; |
3847 stream_frame.fin = true; | 3856 stream_frame.fin = true; |
3848 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 3857 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
3849 stream_frame.data = MakeIOVector("hello world!"); | 3858 stream_frame.data = MakeIOVector("hello world!"); |
3850 | 3859 |
3851 QuicFrames frames; | 3860 QuicFrames frames; |
3852 frames.push_back(QuicFrame(&stream_frame)); | 3861 frames.push_back(QuicFrame(&stream_frame)); |
3853 | 3862 |
3854 unsigned char packet[] = { | 3863 unsigned char packet[] = { |
3855 // public flags (8 byte guid) | 3864 // public flags (8 byte connection_id) |
3856 0x3C, | 3865 0x3C, |
3857 // guid | 3866 // connection_id |
3858 0x10, 0x32, 0x54, 0x76, | 3867 0x10, 0x32, 0x54, 0x76, |
3859 0x98, 0xBA, 0xDC, 0xFE, | 3868 0x98, 0xBA, 0xDC, 0xFE, |
3860 // packet sequence number | 3869 // packet sequence number |
3861 0xBC, 0x9A, 0x78, 0x56, | 3870 0xBC, 0x9A, 0x78, 0x56, |
3862 0x34, 0x12, | 3871 0x34, 0x12, |
3863 // private flags (entropy) | 3872 // private flags (entropy) |
3864 0x01, | 3873 0x01, |
3865 | 3874 |
3866 // frame type (stream frame with fin and no length) | 3875 // frame type (stream frame with fin and no length) |
3867 0xDF, | 3876 0xDF, |
(...skipping 12 matching lines...) Expand all Loading... |
3880 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3889 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3881 ASSERT_TRUE(data != NULL); | 3890 ASSERT_TRUE(data != NULL); |
3882 | 3891 |
3883 test::CompareCharArraysWithHexError("constructed packet", | 3892 test::CompareCharArraysWithHexError("constructed packet", |
3884 data->data(), data->length(), | 3893 data->data(), data->length(), |
3885 AsChars(packet), arraysize(packet)); | 3894 AsChars(packet), arraysize(packet)); |
3886 } | 3895 } |
3887 | 3896 |
3888 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3897 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
3889 QuicPacketHeader header; | 3898 QuicPacketHeader header; |
3890 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3899 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3891 header.public_header.reset_flag = false; | 3900 header.public_header.reset_flag = false; |
3892 header.public_header.version_flag = true; | 3901 header.public_header.version_flag = true; |
3893 header.fec_flag = false; | 3902 header.fec_flag = false; |
3894 header.entropy_flag = true; | 3903 header.entropy_flag = true; |
3895 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 3904 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
3896 header.fec_group = 0; | 3905 header.fec_group = 0; |
3897 | 3906 |
3898 QuicStreamFrame stream_frame; | 3907 QuicStreamFrame stream_frame; |
3899 stream_frame.stream_id = 0x01020304; | 3908 stream_frame.stream_id = 0x01020304; |
3900 stream_frame.fin = true; | 3909 stream_frame.fin = true; |
3901 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 3910 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
3902 stream_frame.data = MakeIOVector("hello world!"); | 3911 stream_frame.data = MakeIOVector("hello world!"); |
3903 | 3912 |
3904 QuicFrames frames; | 3913 QuicFrames frames; |
3905 frames.push_back(QuicFrame(&stream_frame)); | 3914 frames.push_back(QuicFrame(&stream_frame)); |
3906 | 3915 |
3907 unsigned char packet[] = { | 3916 unsigned char packet[] = { |
3908 // public flags (version, 8 byte guid) | 3917 // public flags (version, 8 byte connection_id) |
3909 0x3D, | 3918 0x3D, |
3910 // guid | 3919 // connection_id |
3911 0x10, 0x32, 0x54, 0x76, | 3920 0x10, 0x32, 0x54, 0x76, |
3912 0x98, 0xBA, 0xDC, 0xFE, | 3921 0x98, 0xBA, 0xDC, 0xFE, |
3913 // version tag | 3922 // version tag |
3914 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3923 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3915 // packet sequence number | 3924 // packet sequence number |
3916 0xBC, 0x9A, 0x78, 0x56, | 3925 0xBC, 0x9A, 0x78, 0x56, |
3917 0x34, 0x12, | 3926 0x34, 0x12, |
3918 // private flags (entropy) | 3927 // private flags (entropy) |
3919 0x01, | 3928 0x01, |
3920 | 3929 |
(...skipping 15 matching lines...) Expand all Loading... |
3936 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3945 framer_.BuildUnsizedDataPacket(header, frames).packet); |
3937 ASSERT_TRUE(data != NULL); | 3946 ASSERT_TRUE(data != NULL); |
3938 | 3947 |
3939 test::CompareCharArraysWithHexError("constructed packet", | 3948 test::CompareCharArraysWithHexError("constructed packet", |
3940 data->data(), data->length(), | 3949 data->data(), data->length(), |
3941 AsChars(packet), arraysize(packet)); | 3950 AsChars(packet), arraysize(packet)); |
3942 } | 3951 } |
3943 | 3952 |
3944 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3953 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
3945 QuicPacketPublicHeader header; | 3954 QuicPacketPublicHeader header; |
3946 header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3955 header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3947 header.reset_flag = false; | 3956 header.reset_flag = false; |
3948 header.version_flag = true; | 3957 header.version_flag = true; |
3949 | 3958 |
3950 unsigned char packet[] = { | 3959 unsigned char packet[] = { |
3951 // public flags (version, 8 byte guid) | 3960 // public flags (version, 8 byte connection_id) |
3952 0x0D, | 3961 0x0D, |
3953 // guid | 3962 // connection_id |
3954 0x10, 0x32, 0x54, 0x76, | 3963 0x10, 0x32, 0x54, 0x76, |
3955 0x98, 0xBA, 0xDC, 0xFE, | 3964 0x98, 0xBA, 0xDC, 0xFE, |
3956 // version tag | 3965 // version tag |
3957 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3966 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3958 }; | 3967 }; |
3959 | 3968 |
3960 QuicVersionVector versions; | 3969 QuicVersionVector versions; |
3961 versions.push_back(GetParam()); | 3970 versions.push_back(GetParam()); |
3962 scoped_ptr<QuicEncryptedPacket> data( | 3971 scoped_ptr<QuicEncryptedPacket> data( |
3963 framer_.BuildVersionNegotiationPacket(header, versions)); | 3972 framer_.BuildVersionNegotiationPacket(header, versions)); |
3964 | 3973 |
3965 test::CompareCharArraysWithHexError("constructed packet", | 3974 test::CompareCharArraysWithHexError("constructed packet", |
3966 data->data(), data->length(), | 3975 data->data(), data->length(), |
3967 AsChars(packet), arraysize(packet)); | 3976 AsChars(packet), arraysize(packet)); |
3968 } | 3977 } |
3969 | 3978 |
3970 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 3979 TEST_P(QuicFramerTest, BuildAckFramePacket) { |
3971 if (version_ <= QUIC_VERSION_15) { | 3980 if (version_ <= QUIC_VERSION_15) { |
3972 return; | 3981 return; |
3973 } | 3982 } |
3974 QuicPacketHeader header; | 3983 QuicPacketHeader header; |
3975 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3984 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
3976 header.public_header.reset_flag = false; | 3985 header.public_header.reset_flag = false; |
3977 header.public_header.version_flag = false; | 3986 header.public_header.version_flag = false; |
3978 header.fec_flag = false; | 3987 header.fec_flag = false; |
3979 header.entropy_flag = true; | 3988 header.entropy_flag = true; |
3980 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3989 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
3981 header.fec_group = 0; | 3990 header.fec_group = 0; |
3982 | 3991 |
3983 QuicAckFrame ack_frame; | 3992 QuicAckFrame ack_frame; |
3984 ack_frame.received_info.entropy_hash = 0x43; | 3993 ack_frame.received_info.entropy_hash = 0x43; |
3985 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); | 3994 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); |
3986 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3995 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
3987 ack_frame.received_info.missing_packets.insert( | 3996 ack_frame.received_info.missing_packets.insert( |
3988 GG_UINT64_C(0x770123456789ABE)); | 3997 GG_UINT64_C(0x770123456789ABE)); |
3989 | 3998 |
3990 QuicFrames frames; | 3999 QuicFrames frames; |
3991 frames.push_back(QuicFrame(&ack_frame)); | 4000 frames.push_back(QuicFrame(&ack_frame)); |
3992 | 4001 |
3993 unsigned char packet[] = { | 4002 unsigned char packet[] = { |
3994 // public flags (8 byte guid) | 4003 // public flags (8 byte connection_id) |
3995 0x3C, | 4004 0x3C, |
3996 // guid | 4005 // connection_id |
3997 0x10, 0x32, 0x54, 0x76, | 4006 0x10, 0x32, 0x54, 0x76, |
3998 0x98, 0xBA, 0xDC, 0xFE, | 4007 0x98, 0xBA, 0xDC, 0xFE, |
3999 // packet sequence number | 4008 // packet sequence number |
4000 0xA8, 0x9A, 0x78, 0x56, | 4009 0xA8, 0x9A, 0x78, 0x56, |
4001 0x34, 0x12, | 4010 0x34, 0x12, |
4002 // private flags (entropy) | 4011 // private flags (entropy) |
4003 0x01, | 4012 0x01, |
4004 | 4013 |
4005 // frame type (ack frame) | 4014 // frame type (ack frame) |
4006 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 4015 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 22 matching lines...) Expand all Loading... |
4029 test::CompareCharArraysWithHexError("constructed packet", | 4038 test::CompareCharArraysWithHexError("constructed packet", |
4030 data->data(), data->length(), | 4039 data->data(), data->length(), |
4031 AsChars(packet), arraysize(packet)); | 4040 AsChars(packet), arraysize(packet)); |
4032 } | 4041 } |
4033 | 4042 |
4034 TEST_P(QuicFramerTest, BuildAckFramePacket15) { | 4043 TEST_P(QuicFramerTest, BuildAckFramePacket15) { |
4035 if (version_ != QUIC_VERSION_15) { | 4044 if (version_ != QUIC_VERSION_15) { |
4036 return; | 4045 return; |
4037 } | 4046 } |
4038 QuicPacketHeader header; | 4047 QuicPacketHeader header; |
4039 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4048 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4040 header.public_header.reset_flag = false; | 4049 header.public_header.reset_flag = false; |
4041 header.public_header.version_flag = false; | 4050 header.public_header.version_flag = false; |
4042 header.fec_flag = false; | 4051 header.fec_flag = false; |
4043 header.entropy_flag = true; | 4052 header.entropy_flag = true; |
4044 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 4053 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
4045 header.fec_group = 0; | 4054 header.fec_group = 0; |
4046 | 4055 |
4047 QuicAckFrame ack_frame; | 4056 QuicAckFrame ack_frame; |
4048 ack_frame.received_info.entropy_hash = 0x43; | 4057 ack_frame.received_info.entropy_hash = 0x43; |
4049 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); | 4058 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); |
4050 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 4059 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
4051 ack_frame.received_info.missing_packets.insert( | 4060 ack_frame.received_info.missing_packets.insert( |
4052 GG_UINT64_C(0x770123456789ABE)); | 4061 GG_UINT64_C(0x770123456789ABE)); |
4053 ack_frame.sent_info.entropy_hash = 0x14; | 4062 ack_frame.sent_info.entropy_hash = 0x14; |
4054 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); | 4063 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); |
4055 | 4064 |
4056 QuicFrames frames; | 4065 QuicFrames frames; |
4057 frames.push_back(QuicFrame(&ack_frame)); | 4066 frames.push_back(QuicFrame(&ack_frame)); |
4058 | 4067 |
4059 unsigned char packet[] = { | 4068 unsigned char packet[] = { |
4060 // public flags (8 byte guid) | 4069 // public flags (8 byte connection_id) |
4061 0x3C, | 4070 0x3C, |
4062 // guid | 4071 // connection_id |
4063 0x10, 0x32, 0x54, 0x76, | 4072 0x10, 0x32, 0x54, 0x76, |
4064 0x98, 0xBA, 0xDC, 0xFE, | 4073 0x98, 0xBA, 0xDC, 0xFE, |
4065 // packet sequence number | 4074 // packet sequence number |
4066 0xA8, 0x9A, 0x78, 0x56, | 4075 0xA8, 0x9A, 0x78, 0x56, |
4067 0x34, 0x12, | 4076 0x34, 0x12, |
4068 // private flags (entropy) | 4077 // private flags (entropy) |
4069 0x01, | 4078 0x01, |
4070 | 4079 |
4071 // frame type (ack frame) | 4080 // frame type (ack frame) |
4072 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 4081 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 27 matching lines...) Expand all Loading... |
4100 test::CompareCharArraysWithHexError("constructed packet", | 4109 test::CompareCharArraysWithHexError("constructed packet", |
4101 data->data(), data->length(), | 4110 data->data(), data->length(), |
4102 AsChars(packet), arraysize(packet)); | 4111 AsChars(packet), arraysize(packet)); |
4103 } | 4112 } |
4104 | 4113 |
4105 TEST_P(QuicFramerTest, BuildAckFramePacketV14) { | 4114 TEST_P(QuicFramerTest, BuildAckFramePacketV14) { |
4106 if (version_ > QUIC_VERSION_14) { | 4115 if (version_ > QUIC_VERSION_14) { |
4107 return; | 4116 return; |
4108 } | 4117 } |
4109 QuicPacketHeader header; | 4118 QuicPacketHeader header; |
4110 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4119 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4111 header.public_header.reset_flag = false; | 4120 header.public_header.reset_flag = false; |
4112 header.public_header.version_flag = false; | 4121 header.public_header.version_flag = false; |
4113 header.fec_flag = false; | 4122 header.fec_flag = false; |
4114 header.entropy_flag = true; | 4123 header.entropy_flag = true; |
4115 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 4124 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
4116 header.fec_group = 0; | 4125 header.fec_group = 0; |
4117 | 4126 |
4118 QuicAckFrame ack_frame; | 4127 QuicAckFrame ack_frame; |
4119 ack_frame.received_info.entropy_hash = 0x43; | 4128 ack_frame.received_info.entropy_hash = 0x43; |
4120 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); | 4129 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); |
4121 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 4130 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
4122 ack_frame.received_info.missing_packets.insert( | 4131 ack_frame.received_info.missing_packets.insert( |
4123 GG_UINT64_C(0x770123456789ABE)); | 4132 GG_UINT64_C(0x770123456789ABE)); |
4124 ack_frame.sent_info.entropy_hash = 0x14; | 4133 ack_frame.sent_info.entropy_hash = 0x14; |
4125 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); | 4134 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); |
4126 | 4135 |
4127 QuicFrames frames; | 4136 QuicFrames frames; |
4128 frames.push_back(QuicFrame(&ack_frame)); | 4137 frames.push_back(QuicFrame(&ack_frame)); |
4129 | 4138 |
4130 unsigned char packet[] = { | 4139 unsigned char packet[] = { |
4131 // public flags (8 byte guid) | 4140 // public flags (8 byte connection_id) |
4132 0x3C, | 4141 0x3C, |
4133 // guid | 4142 // connection_id |
4134 0x10, 0x32, 0x54, 0x76, | 4143 0x10, 0x32, 0x54, 0x76, |
4135 0x98, 0xBA, 0xDC, 0xFE, | 4144 0x98, 0xBA, 0xDC, 0xFE, |
4136 // packet sequence number | 4145 // packet sequence number |
4137 0xA8, 0x9A, 0x78, 0x56, | 4146 0xA8, 0x9A, 0x78, 0x56, |
4138 0x34, 0x12, | 4147 0x34, 0x12, |
4139 // private flags (entropy) | 4148 // private flags (entropy) |
4140 0x01, | 4149 0x01, |
4141 | 4150 |
4142 // frame type (ack frame) | 4151 // frame type (ack frame) |
4143 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 4152 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
(...skipping 25 matching lines...) Expand all Loading... |
4169 test::CompareCharArraysWithHexError("constructed packet", | 4178 test::CompareCharArraysWithHexError("constructed packet", |
4170 data->data(), data->length(), | 4179 data->data(), data->length(), |
4171 AsChars(packet), arraysize(packet)); | 4180 AsChars(packet), arraysize(packet)); |
4172 } | 4181 } |
4173 | 4182 |
4174 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCP) { | 4183 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCP) { |
4175 if (version_ <= QUIC_VERSION_14) { | 4184 if (version_ <= QUIC_VERSION_14) { |
4176 return; | 4185 return; |
4177 } | 4186 } |
4178 QuicPacketHeader header; | 4187 QuicPacketHeader header; |
4179 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4188 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4180 header.public_header.reset_flag = false; | 4189 header.public_header.reset_flag = false; |
4181 header.public_header.version_flag = false; | 4190 header.public_header.version_flag = false; |
4182 header.fec_flag = false; | 4191 header.fec_flag = false; |
4183 header.entropy_flag = false; | 4192 header.entropy_flag = false; |
4184 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4185 header.fec_group = 0; | 4194 header.fec_group = 0; |
4186 | 4195 |
4187 QuicCongestionFeedbackFrame congestion_feedback_frame; | 4196 QuicCongestionFeedbackFrame congestion_feedback_frame; |
4188 congestion_feedback_frame.type = kTCP; | 4197 congestion_feedback_frame.type = kTCP; |
4189 congestion_feedback_frame.tcp.receive_window = 0x4030; | 4198 congestion_feedback_frame.tcp.receive_window = 0x4030; |
4190 | 4199 |
4191 QuicFrames frames; | 4200 QuicFrames frames; |
4192 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 4201 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
4193 | 4202 |
4194 unsigned char packet[] = { | 4203 unsigned char packet[] = { |
4195 // public flags (8 byte guid) | 4204 // public flags (8 byte connection_id) |
4196 0x3C, | 4205 0x3C, |
4197 // guid | 4206 // connection_id |
4198 0x10, 0x32, 0x54, 0x76, | 4207 0x10, 0x32, 0x54, 0x76, |
4199 0x98, 0xBA, 0xDC, 0xFE, | 4208 0x98, 0xBA, 0xDC, 0xFE, |
4200 // packet sequence number | 4209 // packet sequence number |
4201 0xBC, 0x9A, 0x78, 0x56, | 4210 0xBC, 0x9A, 0x78, 0x56, |
4202 0x34, 0x12, | 4211 0x34, 0x12, |
4203 // private flags | 4212 // private flags |
4204 0x00, | 4213 0x00, |
4205 | 4214 |
4206 // frame type (congestion feedback frame) | 4215 // frame type (congestion feedback frame) |
4207 0x20, | 4216 0x20, |
(...skipping 10 matching lines...) Expand all Loading... |
4218 test::CompareCharArraysWithHexError("constructed packet", | 4227 test::CompareCharArraysWithHexError("constructed packet", |
4219 data->data(), data->length(), | 4228 data->data(), data->length(), |
4220 AsChars(packet), arraysize(packet)); | 4229 AsChars(packet), arraysize(packet)); |
4221 } | 4230 } |
4222 | 4231 |
4223 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCPV14) { | 4232 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCPV14) { |
4224 if (version_ > QUIC_VERSION_14) { | 4233 if (version_ > QUIC_VERSION_14) { |
4225 return; | 4234 return; |
4226 } | 4235 } |
4227 QuicPacketHeader header; | 4236 QuicPacketHeader header; |
4228 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4237 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4229 header.public_header.reset_flag = false; | 4238 header.public_header.reset_flag = false; |
4230 header.public_header.version_flag = false; | 4239 header.public_header.version_flag = false; |
4231 header.fec_flag = false; | 4240 header.fec_flag = false; |
4232 header.entropy_flag = false; | 4241 header.entropy_flag = false; |
4233 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4242 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4234 header.fec_group = 0; | 4243 header.fec_group = 0; |
4235 | 4244 |
4236 QuicCongestionFeedbackFrame congestion_feedback_frame; | 4245 QuicCongestionFeedbackFrame congestion_feedback_frame; |
4237 congestion_feedback_frame.type = kTCP; | 4246 congestion_feedback_frame.type = kTCP; |
4238 congestion_feedback_frame.tcp.receive_window = 0x4030; | 4247 congestion_feedback_frame.tcp.receive_window = 0x4030; |
4239 | 4248 |
4240 QuicFrames frames; | 4249 QuicFrames frames; |
4241 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 4250 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
4242 | 4251 |
4243 unsigned char packet[] = { | 4252 unsigned char packet[] = { |
4244 // public flags (8 byte guid) | 4253 // public flags (8 byte connection_id) |
4245 0x3C, | 4254 0x3C, |
4246 // guid | 4255 // connection_id |
4247 0x10, 0x32, 0x54, 0x76, | 4256 0x10, 0x32, 0x54, 0x76, |
4248 0x98, 0xBA, 0xDC, 0xFE, | 4257 0x98, 0xBA, 0xDC, 0xFE, |
4249 // packet sequence number | 4258 // packet sequence number |
4250 0xBC, 0x9A, 0x78, 0x56, | 4259 0xBC, 0x9A, 0x78, 0x56, |
4251 0x34, 0x12, | 4260 0x34, 0x12, |
4252 // private flags | 4261 // private flags |
4253 0x00, | 4262 0x00, |
4254 | 4263 |
4255 // frame type (congestion feedback frame) | 4264 // frame type (congestion feedback frame) |
4256 0x20, | 4265 0x20, |
(...skipping 12 matching lines...) Expand all Loading... |
4269 test::CompareCharArraysWithHexError("constructed packet", | 4278 test::CompareCharArraysWithHexError("constructed packet", |
4270 data->data(), data->length(), | 4279 data->data(), data->length(), |
4271 AsChars(packet), arraysize(packet)); | 4280 AsChars(packet), arraysize(packet)); |
4272 } | 4281 } |
4273 | 4282 |
4274 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrival) { | 4283 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrival) { |
4275 if (version_ <= QUIC_VERSION_14) { | 4284 if (version_ <= QUIC_VERSION_14) { |
4276 return; | 4285 return; |
4277 } | 4286 } |
4278 QuicPacketHeader header; | 4287 QuicPacketHeader header; |
4279 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4288 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4280 header.public_header.reset_flag = false; | 4289 header.public_header.reset_flag = false; |
4281 header.public_header.version_flag = false; | 4290 header.public_header.version_flag = false; |
4282 header.fec_flag = false; | 4291 header.fec_flag = false; |
4283 header.entropy_flag = false; | 4292 header.entropy_flag = false; |
4284 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4293 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4285 header.fec_group = 0; | 4294 header.fec_group = 0; |
4286 | 4295 |
4287 QuicCongestionFeedbackFrame frame; | 4296 QuicCongestionFeedbackFrame frame; |
4288 frame.type = kInterArrival; | 4297 frame.type = kInterArrival; |
4289 frame.inter_arrival.received_packet_times.insert( | 4298 frame.inter_arrival.received_packet_times.insert( |
4290 make_pair(GG_UINT64_C(0x0123456789ABA), | 4299 make_pair(GG_UINT64_C(0x0123456789ABA), |
4291 start_.Add(QuicTime::Delta::FromMicroseconds( | 4300 start_.Add(QuicTime::Delta::FromMicroseconds( |
4292 GG_UINT64_C(0x07E1D2C3B4A59687))))); | 4301 GG_UINT64_C(0x07E1D2C3B4A59687))))); |
4293 frame.inter_arrival.received_packet_times.insert( | 4302 frame.inter_arrival.received_packet_times.insert( |
4294 make_pair(GG_UINT64_C(0x0123456789ABB), | 4303 make_pair(GG_UINT64_C(0x0123456789ABB), |
4295 start_.Add(QuicTime::Delta::FromMicroseconds( | 4304 start_.Add(QuicTime::Delta::FromMicroseconds( |
4296 GG_UINT64_C(0x07E1D2C3B4A59688))))); | 4305 GG_UINT64_C(0x07E1D2C3B4A59688))))); |
4297 frame.inter_arrival.received_packet_times.insert( | 4306 frame.inter_arrival.received_packet_times.insert( |
4298 make_pair(GG_UINT64_C(0x0123456789ABD), | 4307 make_pair(GG_UINT64_C(0x0123456789ABD), |
4299 start_.Add(QuicTime::Delta::FromMicroseconds( | 4308 start_.Add(QuicTime::Delta::FromMicroseconds( |
4300 GG_UINT64_C(0x07E1D2C3B4A59689))))); | 4309 GG_UINT64_C(0x07E1D2C3B4A59689))))); |
4301 QuicFrames frames; | 4310 QuicFrames frames; |
4302 frames.push_back(QuicFrame(&frame)); | 4311 frames.push_back(QuicFrame(&frame)); |
4303 | 4312 |
4304 unsigned char packet[] = { | 4313 unsigned char packet[] = { |
4305 // public flags (8 byte guid) | 4314 // public flags (8 byte connection_id) |
4306 0x3C, | 4315 0x3C, |
4307 // guid | 4316 // connection_id |
4308 0x10, 0x32, 0x54, 0x76, | 4317 0x10, 0x32, 0x54, 0x76, |
4309 0x98, 0xBA, 0xDC, 0xFE, | 4318 0x98, 0xBA, 0xDC, 0xFE, |
4310 // packet sequence number | 4319 // packet sequence number |
4311 0xBC, 0x9A, 0x78, 0x56, | 4320 0xBC, 0x9A, 0x78, 0x56, |
4312 0x34, 0x12, | 4321 0x34, 0x12, |
4313 // private flags | 4322 // private flags |
4314 0x00, | 4323 0x00, |
4315 | 4324 |
4316 // frame type (congestion feedback frame) | 4325 // frame type (congestion feedback frame) |
4317 0x20, | 4326 0x20, |
(...skipping 24 matching lines...) Expand all Loading... |
4342 test::CompareCharArraysWithHexError("constructed packet", | 4351 test::CompareCharArraysWithHexError("constructed packet", |
4343 data->data(), data->length(), | 4352 data->data(), data->length(), |
4344 AsChars(packet), arraysize(packet)); | 4353 AsChars(packet), arraysize(packet)); |
4345 } | 4354 } |
4346 | 4355 |
4347 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrivalV14) { | 4356 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrivalV14) { |
4348 if (version_ > QUIC_VERSION_14) { | 4357 if (version_ > QUIC_VERSION_14) { |
4349 return; | 4358 return; |
4350 } | 4359 } |
4351 QuicPacketHeader header; | 4360 QuicPacketHeader header; |
4352 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4361 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4353 header.public_header.reset_flag = false; | 4362 header.public_header.reset_flag = false; |
4354 header.public_header.version_flag = false; | 4363 header.public_header.version_flag = false; |
4355 header.fec_flag = false; | 4364 header.fec_flag = false; |
4356 header.entropy_flag = false; | 4365 header.entropy_flag = false; |
4357 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4366 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4358 header.fec_group = 0; | 4367 header.fec_group = 0; |
4359 | 4368 |
4360 QuicCongestionFeedbackFrame frame; | 4369 QuicCongestionFeedbackFrame frame; |
4361 frame.type = kInterArrival; | 4370 frame.type = kInterArrival; |
4362 frame.inter_arrival.received_packet_times.insert( | 4371 frame.inter_arrival.received_packet_times.insert( |
4363 make_pair(GG_UINT64_C(0x0123456789ABA), | 4372 make_pair(GG_UINT64_C(0x0123456789ABA), |
4364 start_.Add(QuicTime::Delta::FromMicroseconds( | 4373 start_.Add(QuicTime::Delta::FromMicroseconds( |
4365 GG_UINT64_C(0x07E1D2C3B4A59687))))); | 4374 GG_UINT64_C(0x07E1D2C3B4A59687))))); |
4366 frame.inter_arrival.received_packet_times.insert( | 4375 frame.inter_arrival.received_packet_times.insert( |
4367 make_pair(GG_UINT64_C(0x0123456789ABB), | 4376 make_pair(GG_UINT64_C(0x0123456789ABB), |
4368 start_.Add(QuicTime::Delta::FromMicroseconds( | 4377 start_.Add(QuicTime::Delta::FromMicroseconds( |
4369 GG_UINT64_C(0x07E1D2C3B4A59688))))); | 4378 GG_UINT64_C(0x07E1D2C3B4A59688))))); |
4370 frame.inter_arrival.received_packet_times.insert( | 4379 frame.inter_arrival.received_packet_times.insert( |
4371 make_pair(GG_UINT64_C(0x0123456789ABD), | 4380 make_pair(GG_UINT64_C(0x0123456789ABD), |
4372 start_.Add(QuicTime::Delta::FromMicroseconds( | 4381 start_.Add(QuicTime::Delta::FromMicroseconds( |
4373 GG_UINT64_C(0x07E1D2C3B4A59689))))); | 4382 GG_UINT64_C(0x07E1D2C3B4A59689))))); |
4374 QuicFrames frames; | 4383 QuicFrames frames; |
4375 frames.push_back(QuicFrame(&frame)); | 4384 frames.push_back(QuicFrame(&frame)); |
4376 | 4385 |
4377 unsigned char packet[] = { | 4386 unsigned char packet[] = { |
4378 // public flags (8 byte guid) | 4387 // public flags (8 byte connection_id) |
4379 0x3C, | 4388 0x3C, |
4380 // guid | 4389 // connection_id |
4381 0x10, 0x32, 0x54, 0x76, | 4390 0x10, 0x32, 0x54, 0x76, |
4382 0x98, 0xBA, 0xDC, 0xFE, | 4391 0x98, 0xBA, 0xDC, 0xFE, |
4383 // packet sequence number | 4392 // packet sequence number |
4384 0xBC, 0x9A, 0x78, 0x56, | 4393 0xBC, 0x9A, 0x78, 0x56, |
4385 0x34, 0x12, | 4394 0x34, 0x12, |
4386 // private flags | 4395 // private flags |
4387 0x00, | 4396 0x00, |
4388 | 4397 |
4389 // frame type (congestion feedback frame) | 4398 // frame type (congestion feedback frame) |
4390 0x20, | 4399 0x20, |
(...skipping 26 matching lines...) Expand all Loading... |
4417 test::CompareCharArraysWithHexError("constructed packet", | 4426 test::CompareCharArraysWithHexError("constructed packet", |
4418 data->data(), data->length(), | 4427 data->data(), data->length(), |
4419 AsChars(packet), arraysize(packet)); | 4428 AsChars(packet), arraysize(packet)); |
4420 } | 4429 } |
4421 | 4430 |
4422 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 4431 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
4423 if (version_ <= QUIC_VERSION_15) { | 4432 if (version_ <= QUIC_VERSION_15) { |
4424 return; | 4433 return; |
4425 } | 4434 } |
4426 QuicPacketHeader header; | 4435 QuicPacketHeader header; |
4427 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4436 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4428 header.public_header.reset_flag = false; | 4437 header.public_header.reset_flag = false; |
4429 header.public_header.version_flag = false; | 4438 header.public_header.version_flag = false; |
4430 header.fec_flag = false; | 4439 header.fec_flag = false; |
4431 header.entropy_flag = true; | 4440 header.entropy_flag = true; |
4432 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 4441 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
4433 header.fec_group = 0; | 4442 header.fec_group = 0; |
4434 | 4443 |
4435 QuicStopWaitingFrame stop_waiting_frame; | 4444 QuicStopWaitingFrame stop_waiting_frame; |
4436 stop_waiting_frame.entropy_hash = 0x14; | 4445 stop_waiting_frame.entropy_hash = 0x14; |
4437 stop_waiting_frame.least_unacked = GG_UINT64_C(0x770123456789AA0); | 4446 stop_waiting_frame.least_unacked = GG_UINT64_C(0x770123456789AA0); |
4438 | 4447 |
4439 QuicFrames frames; | 4448 QuicFrames frames; |
4440 frames.push_back(QuicFrame(&stop_waiting_frame)); | 4449 frames.push_back(QuicFrame(&stop_waiting_frame)); |
4441 | 4450 |
4442 unsigned char packet[] = { | 4451 unsigned char packet[] = { |
4443 // public flags (8 byte guid) | 4452 // public flags (8 byte connection_id) |
4444 0x3C, | 4453 0x3C, |
4445 // guid | 4454 // connection_id |
4446 0x10, 0x32, 0x54, 0x76, | 4455 0x10, 0x32, 0x54, 0x76, |
4447 0x98, 0xBA, 0xDC, 0xFE, | 4456 0x98, 0xBA, 0xDC, 0xFE, |
4448 // packet sequence number | 4457 // packet sequence number |
4449 0xA8, 0x9A, 0x78, 0x56, | 4458 0xA8, 0x9A, 0x78, 0x56, |
4450 0x34, 0x12, | 4459 0x34, 0x12, |
4451 // private flags (entropy) | 4460 // private flags (entropy) |
4452 0x01, | 4461 0x01, |
4453 | 4462 |
4454 // frame type (stop waiting frame) | 4463 // frame type (stop waiting frame) |
4455 0x06, | 4464 0x06, |
4456 // entropy hash of sent packets till least awaiting - 1. | 4465 // entropy hash of sent packets till least awaiting - 1. |
4457 0x14, | 4466 0x14, |
4458 // least packet sequence number awaiting an ack, delta from sequence number. | 4467 // least packet sequence number awaiting an ack, delta from sequence number. |
4459 0x08, 0x00, 0x00, 0x00, | 4468 0x08, 0x00, 0x00, 0x00, |
4460 0x00, 0x00, | 4469 0x00, 0x00, |
4461 }; | 4470 }; |
4462 | 4471 |
4463 scoped_ptr<QuicPacket> data( | 4472 scoped_ptr<QuicPacket> data( |
4464 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4473 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4465 ASSERT_TRUE(data != NULL); | 4474 ASSERT_TRUE(data != NULL); |
4466 | 4475 |
4467 test::CompareCharArraysWithHexError("constructed packet", | 4476 test::CompareCharArraysWithHexError("constructed packet", |
4468 data->data(), data->length(), | 4477 data->data(), data->length(), |
4469 AsChars(packet), arraysize(packet)); | 4478 AsChars(packet), arraysize(packet)); |
4470 } | 4479 } |
4471 | 4480 |
4472 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) { | 4481 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) { |
4473 QuicPacketHeader header; | 4482 QuicPacketHeader header; |
4474 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4483 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4475 header.public_header.reset_flag = false; | 4484 header.public_header.reset_flag = false; |
4476 header.public_header.version_flag = false; | 4485 header.public_header.version_flag = false; |
4477 header.fec_flag = false; | 4486 header.fec_flag = false; |
4478 header.entropy_flag = false; | 4487 header.entropy_flag = false; |
4479 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4488 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4480 header.fec_group = 0; | 4489 header.fec_group = 0; |
4481 | 4490 |
4482 QuicCongestionFeedbackFrame congestion_feedback_frame; | 4491 QuicCongestionFeedbackFrame congestion_feedback_frame; |
4483 congestion_feedback_frame.type = kFixRate; | 4492 congestion_feedback_frame.type = kFixRate; |
4484 congestion_feedback_frame.fix_rate.bitrate | 4493 congestion_feedback_frame.fix_rate.bitrate |
4485 = QuicBandwidth::FromBytesPerSecond(0x04030201); | 4494 = QuicBandwidth::FromBytesPerSecond(0x04030201); |
4486 | 4495 |
4487 QuicFrames frames; | 4496 QuicFrames frames; |
4488 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 4497 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
4489 | 4498 |
4490 unsigned char packet[] = { | 4499 unsigned char packet[] = { |
4491 // public flags (8 byte guid) | 4500 // public flags (8 byte connection_id) |
4492 0x3C, | 4501 0x3C, |
4493 // guid | 4502 // connection_id |
4494 0x10, 0x32, 0x54, 0x76, | 4503 0x10, 0x32, 0x54, 0x76, |
4495 0x98, 0xBA, 0xDC, 0xFE, | 4504 0x98, 0xBA, 0xDC, 0xFE, |
4496 // packet sequence number | 4505 // packet sequence number |
4497 0xBC, 0x9A, 0x78, 0x56, | 4506 0xBC, 0x9A, 0x78, 0x56, |
4498 0x34, 0x12, | 4507 0x34, 0x12, |
4499 // private flags | 4508 // private flags |
4500 0x00, | 4509 0x00, |
4501 | 4510 |
4502 // frame type (congestion feedback frame) | 4511 // frame type (congestion feedback frame) |
4503 0x20, | 4512 0x20, |
4504 // congestion feedback type (fix rate) | 4513 // congestion feedback type (fix rate) |
4505 0x02, | 4514 0x02, |
4506 // bitrate_in_bytes_per_second; | 4515 // bitrate_in_bytes_per_second; |
4507 0x01, 0x02, 0x03, 0x04, | 4516 0x01, 0x02, 0x03, 0x04, |
4508 }; | 4517 }; |
4509 | 4518 |
4510 scoped_ptr<QuicPacket> data( | 4519 scoped_ptr<QuicPacket> data( |
4511 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4520 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4512 ASSERT_TRUE(data != NULL); | 4521 ASSERT_TRUE(data != NULL); |
4513 | 4522 |
4514 test::CompareCharArraysWithHexError("constructed packet", | 4523 test::CompareCharArraysWithHexError("constructed packet", |
4515 data->data(), data->length(), | 4524 data->data(), data->length(), |
4516 AsChars(packet), arraysize(packet)); | 4525 AsChars(packet), arraysize(packet)); |
4517 } | 4526 } |
4518 | 4527 |
4519 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) { | 4528 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) { |
4520 QuicPacketHeader header; | 4529 QuicPacketHeader header; |
4521 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4530 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4522 header.public_header.reset_flag = false; | 4531 header.public_header.reset_flag = false; |
4523 header.public_header.version_flag = false; | 4532 header.public_header.version_flag = false; |
4524 header.fec_flag = false; | 4533 header.fec_flag = false; |
4525 header.entropy_flag = false; | 4534 header.entropy_flag = false; |
4526 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4535 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4527 header.fec_group = 0; | 4536 header.fec_group = 0; |
4528 | 4537 |
4529 QuicCongestionFeedbackFrame congestion_feedback_frame; | 4538 QuicCongestionFeedbackFrame congestion_feedback_frame; |
4530 congestion_feedback_frame.type = | 4539 congestion_feedback_frame.type = |
4531 static_cast<CongestionFeedbackType>(kFixRate + 1); | 4540 static_cast<CongestionFeedbackType>(kFixRate + 1); |
4532 | 4541 |
4533 QuicFrames frames; | 4542 QuicFrames frames; |
4534 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 4543 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
4535 | 4544 |
4536 scoped_ptr<QuicPacket> data; | 4545 scoped_ptr<QuicPacket> data; |
4537 EXPECT_DFATAL( | 4546 EXPECT_DFATAL( |
4538 data.reset(framer_.BuildUnsizedDataPacket(header, frames).packet), | 4547 data.reset(framer_.BuildUnsizedDataPacket(header, frames).packet), |
4539 "AppendCongestionFeedbackFrame failed"); | 4548 "AppendCongestionFeedbackFrame failed"); |
4540 ASSERT_TRUE(data == NULL); | 4549 ASSERT_TRUE(data == NULL); |
4541 } | 4550 } |
4542 | 4551 |
4543 TEST_P(QuicFramerTest, BuildRstFramePacketVersion13) { | 4552 TEST_P(QuicFramerTest, BuildRstFramePacketVersion13) { |
4544 if (version_ > QUIC_VERSION_13) { | 4553 if (version_ > QUIC_VERSION_13) { |
4545 return; | 4554 return; |
4546 } | 4555 } |
4547 | 4556 |
4548 QuicPacketHeader header; | 4557 QuicPacketHeader header; |
4549 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4558 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4550 header.public_header.reset_flag = false; | 4559 header.public_header.reset_flag = false; |
4551 header.public_header.version_flag = false; | 4560 header.public_header.version_flag = false; |
4552 header.fec_flag = false; | 4561 header.fec_flag = false; |
4553 header.entropy_flag = false; | 4562 header.entropy_flag = false; |
4554 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4563 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4555 header.fec_group = 0; | 4564 header.fec_group = 0; |
4556 | 4565 |
4557 QuicRstStreamFrame rst_frame; | 4566 QuicRstStreamFrame rst_frame; |
4558 rst_frame.stream_id = 0x01020304; | 4567 rst_frame.stream_id = 0x01020304; |
4559 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 4568 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
4560 rst_frame.error_details = "because I can"; | 4569 rst_frame.error_details = "because I can"; |
4561 | 4570 |
4562 unsigned char packet[] = { | 4571 unsigned char packet[] = { |
4563 // public flags (8 byte guid) | 4572 // public flags (8 byte connection_id) |
4564 0x3C, | 4573 0x3C, |
4565 // guid | 4574 // connection_id |
4566 0x10, 0x32, 0x54, 0x76, | 4575 0x10, 0x32, 0x54, 0x76, |
4567 0x98, 0xBA, 0xDC, 0xFE, | 4576 0x98, 0xBA, 0xDC, 0xFE, |
4568 // packet sequence number | 4577 // packet sequence number |
4569 0xBC, 0x9A, 0x78, 0x56, | 4578 0xBC, 0x9A, 0x78, 0x56, |
4570 0x34, 0x12, | 4579 0x34, 0x12, |
4571 // private flags | 4580 // private flags |
4572 0x00, | 4581 0x00, |
4573 | 4582 |
4574 // frame type (rst stream frame) | 4583 // frame type (rst stream frame) |
4575 0x01, | 4584 0x01, |
(...skipping 21 matching lines...) Expand all Loading... |
4597 data->data(), data->length(), | 4606 data->data(), data->length(), |
4598 AsChars(packet), arraysize(packet)); | 4607 AsChars(packet), arraysize(packet)); |
4599 } | 4608 } |
4600 | 4609 |
4601 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 4610 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
4602 if (version_ <= QUIC_VERSION_13) { | 4611 if (version_ <= QUIC_VERSION_13) { |
4603 return; | 4612 return; |
4604 } | 4613 } |
4605 | 4614 |
4606 QuicPacketHeader header; | 4615 QuicPacketHeader header; |
4607 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4616 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4608 header.public_header.reset_flag = false; | 4617 header.public_header.reset_flag = false; |
4609 header.public_header.version_flag = false; | 4618 header.public_header.version_flag = false; |
4610 header.fec_flag = false; | 4619 header.fec_flag = false; |
4611 header.entropy_flag = false; | 4620 header.entropy_flag = false; |
4612 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4621 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4613 header.fec_group = 0; | 4622 header.fec_group = 0; |
4614 | 4623 |
4615 QuicRstStreamFrame rst_frame; | 4624 QuicRstStreamFrame rst_frame; |
4616 rst_frame.stream_id = 0x01020304; | 4625 rst_frame.stream_id = 0x01020304; |
4617 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 4626 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
4618 rst_frame.error_details = "because I can"; | 4627 rst_frame.error_details = "because I can"; |
4619 rst_frame.byte_offset = 0x0807060504030201; | 4628 rst_frame.byte_offset = 0x0807060504030201; |
4620 | 4629 |
4621 unsigned char packet[] = { | 4630 unsigned char packet[] = { |
4622 // public flags (8 byte guid) | 4631 // public flags (8 byte connection_id) |
4623 0x3C, | 4632 0x3C, |
4624 // guid | 4633 // connection_id |
4625 0x10, 0x32, 0x54, 0x76, | 4634 0x10, 0x32, 0x54, 0x76, |
4626 0x98, 0xBA, 0xDC, 0xFE, | 4635 0x98, 0xBA, 0xDC, 0xFE, |
4627 // packet sequence number | 4636 // packet sequence number |
4628 0xBC, 0x9A, 0x78, 0x56, | 4637 0xBC, 0x9A, 0x78, 0x56, |
4629 0x34, 0x12, | 4638 0x34, 0x12, |
4630 // private flags | 4639 // private flags |
4631 0x00, | 4640 0x00, |
4632 | 4641 |
4633 // frame type (rst stream frame) | 4642 // frame type (rst stream frame) |
4634 0x01, | 4643 0x01, |
(...skipping 20 matching lines...) Expand all Loading... |
4655 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4664 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4656 ASSERT_TRUE(data != NULL); | 4665 ASSERT_TRUE(data != NULL); |
4657 | 4666 |
4658 test::CompareCharArraysWithHexError("constructed packet", | 4667 test::CompareCharArraysWithHexError("constructed packet", |
4659 data->data(), data->length(), | 4668 data->data(), data->length(), |
4660 AsChars(packet), arraysize(packet)); | 4669 AsChars(packet), arraysize(packet)); |
4661 } | 4670 } |
4662 | 4671 |
4663 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 4672 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
4664 QuicPacketHeader header; | 4673 QuicPacketHeader header; |
4665 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4674 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4666 header.public_header.reset_flag = false; | 4675 header.public_header.reset_flag = false; |
4667 header.public_header.version_flag = false; | 4676 header.public_header.version_flag = false; |
4668 header.fec_flag = false; | 4677 header.fec_flag = false; |
4669 header.entropy_flag = true; | 4678 header.entropy_flag = true; |
4670 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4679 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4671 header.fec_group = 0; | 4680 header.fec_group = 0; |
4672 | 4681 |
4673 QuicConnectionCloseFrame close_frame; | 4682 QuicConnectionCloseFrame close_frame; |
4674 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 4683 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
4675 close_frame.error_details = "because I can"; | 4684 close_frame.error_details = "because I can"; |
4676 | 4685 |
4677 QuicFrames frames; | 4686 QuicFrames frames; |
4678 frames.push_back(QuicFrame(&close_frame)); | 4687 frames.push_back(QuicFrame(&close_frame)); |
4679 | 4688 |
4680 unsigned char packet[] = { | 4689 unsigned char packet[] = { |
4681 // public flags (8 byte guid) | 4690 // public flags (8 byte connection_id) |
4682 0x3C, | 4691 0x3C, |
4683 // guid | 4692 // connection_id |
4684 0x10, 0x32, 0x54, 0x76, | 4693 0x10, 0x32, 0x54, 0x76, |
4685 0x98, 0xBA, 0xDC, 0xFE, | 4694 0x98, 0xBA, 0xDC, 0xFE, |
4686 // packet sequence number | 4695 // packet sequence number |
4687 0xBC, 0x9A, 0x78, 0x56, | 4696 0xBC, 0x9A, 0x78, 0x56, |
4688 0x34, 0x12, | 4697 0x34, 0x12, |
4689 // private flags (entropy) | 4698 // private flags (entropy) |
4690 0x01, | 4699 0x01, |
4691 | 4700 |
4692 // frame type (connection close frame) | 4701 // frame type (connection close frame) |
4693 0x02, | 4702 0x02, |
(...skipping 12 matching lines...) Expand all Loading... |
4706 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4715 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4707 ASSERT_TRUE(data != NULL); | 4716 ASSERT_TRUE(data != NULL); |
4708 | 4717 |
4709 test::CompareCharArraysWithHexError("constructed packet", | 4718 test::CompareCharArraysWithHexError("constructed packet", |
4710 data->data(), data->length(), | 4719 data->data(), data->length(), |
4711 AsChars(packet), arraysize(packet)); | 4720 AsChars(packet), arraysize(packet)); |
4712 } | 4721 } |
4713 | 4722 |
4714 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 4723 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
4715 QuicPacketHeader header; | 4724 QuicPacketHeader header; |
4716 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4725 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4717 header.public_header.reset_flag = false; | 4726 header.public_header.reset_flag = false; |
4718 header.public_header.version_flag = false; | 4727 header.public_header.version_flag = false; |
4719 header.fec_flag = false; | 4728 header.fec_flag = false; |
4720 header.entropy_flag = true; | 4729 header.entropy_flag = true; |
4721 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4730 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4722 header.fec_group = 0; | 4731 header.fec_group = 0; |
4723 | 4732 |
4724 QuicGoAwayFrame goaway_frame; | 4733 QuicGoAwayFrame goaway_frame; |
4725 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 4734 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
4726 goaway_frame.last_good_stream_id = 0x01020304; | 4735 goaway_frame.last_good_stream_id = 0x01020304; |
4727 goaway_frame.reason_phrase = "because I can"; | 4736 goaway_frame.reason_phrase = "because I can"; |
4728 | 4737 |
4729 QuicFrames frames; | 4738 QuicFrames frames; |
4730 frames.push_back(QuicFrame(&goaway_frame)); | 4739 frames.push_back(QuicFrame(&goaway_frame)); |
4731 | 4740 |
4732 unsigned char packet[] = { | 4741 unsigned char packet[] = { |
4733 // public flags (8 byte guid) | 4742 // public flags (8 byte connection_id) |
4734 0x3C, | 4743 0x3C, |
4735 // guid | 4744 // connection_id |
4736 0x10, 0x32, 0x54, 0x76, | 4745 0x10, 0x32, 0x54, 0x76, |
4737 0x98, 0xBA, 0xDC, 0xFE, | 4746 0x98, 0xBA, 0xDC, 0xFE, |
4738 // packet sequence number | 4747 // packet sequence number |
4739 0xBC, 0x9A, 0x78, 0x56, | 4748 0xBC, 0x9A, 0x78, 0x56, |
4740 0x34, 0x12, | 4749 0x34, 0x12, |
4741 // private flags(entropy) | 4750 // private flags(entropy) |
4742 0x01, | 4751 0x01, |
4743 | 4752 |
4744 // frame type (go away frame) | 4753 // frame type (go away frame) |
4745 0x03, | 4754 0x03, |
(...skipping 14 matching lines...) Expand all Loading... |
4760 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4769 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4761 ASSERT_TRUE(data != NULL); | 4770 ASSERT_TRUE(data != NULL); |
4762 | 4771 |
4763 test::CompareCharArraysWithHexError("constructed packet", | 4772 test::CompareCharArraysWithHexError("constructed packet", |
4764 data->data(), data->length(), | 4773 data->data(), data->length(), |
4765 AsChars(packet), arraysize(packet)); | 4774 AsChars(packet), arraysize(packet)); |
4766 } | 4775 } |
4767 | 4776 |
4768 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 4777 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
4769 QuicPacketHeader header; | 4778 QuicPacketHeader header; |
4770 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4779 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4771 header.public_header.reset_flag = false; | 4780 header.public_header.reset_flag = false; |
4772 header.public_header.version_flag = false; | 4781 header.public_header.version_flag = false; |
4773 header.fec_flag = false; | 4782 header.fec_flag = false; |
4774 header.entropy_flag = true; | 4783 header.entropy_flag = true; |
4775 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4784 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4776 header.fec_group = 0; | 4785 header.fec_group = 0; |
4777 | 4786 |
4778 QuicWindowUpdateFrame window_update_frame; | 4787 QuicWindowUpdateFrame window_update_frame; |
4779 window_update_frame.stream_id = 0x01020304; | 4788 window_update_frame.stream_id = 0x01020304; |
4780 window_update_frame.byte_offset = 0x1122334455667788; | 4789 window_update_frame.byte_offset = 0x1122334455667788; |
4781 | 4790 |
4782 QuicFrames frames; | 4791 QuicFrames frames; |
4783 frames.push_back(QuicFrame(&window_update_frame)); | 4792 frames.push_back(QuicFrame(&window_update_frame)); |
4784 | 4793 |
4785 unsigned char packet[] = { | 4794 unsigned char packet[] = { |
4786 // public flags (8 byte guid) | 4795 // public flags (8 byte connection_id) |
4787 0x3C, | 4796 0x3C, |
4788 // guid | 4797 // connection_id |
4789 0x10, 0x32, 0x54, 0x76, | 4798 0x10, 0x32, 0x54, 0x76, |
4790 0x98, 0xBA, 0xDC, 0xFE, | 4799 0x98, 0xBA, 0xDC, 0xFE, |
4791 // packet sequence number | 4800 // packet sequence number |
4792 0xBC, 0x9A, 0x78, 0x56, | 4801 0xBC, 0x9A, 0x78, 0x56, |
4793 0x34, 0x12, | 4802 0x34, 0x12, |
4794 // private flags(entropy) | 4803 // private flags(entropy) |
4795 0x01, | 4804 0x01, |
4796 | 4805 |
4797 // frame type (window update frame) | 4806 // frame type (window update frame) |
4798 0x04, | 4807 0x04, |
(...skipping 16 matching lines...) Expand all Loading... |
4815 string expected_error = "Attempt to add a WindowUpdateFrame in " + | 4824 string expected_error = "Attempt to add a WindowUpdateFrame in " + |
4816 QuicVersionToString(version_); | 4825 QuicVersionToString(version_); |
4817 EXPECT_DFATAL(framer_.BuildUnsizedDataPacket(header, frames), | 4826 EXPECT_DFATAL(framer_.BuildUnsizedDataPacket(header, frames), |
4818 expected_error); | 4827 expected_error); |
4819 return; | 4828 return; |
4820 } | 4829 } |
4821 } | 4830 } |
4822 | 4831 |
4823 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 4832 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
4824 QuicPacketHeader header; | 4833 QuicPacketHeader header; |
4825 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4834 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4826 header.public_header.reset_flag = false; | 4835 header.public_header.reset_flag = false; |
4827 header.public_header.version_flag = false; | 4836 header.public_header.version_flag = false; |
4828 header.fec_flag = false; | 4837 header.fec_flag = false; |
4829 header.entropy_flag = true; | 4838 header.entropy_flag = true; |
4830 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4839 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4831 header.fec_group = 0; | 4840 header.fec_group = 0; |
4832 | 4841 |
4833 QuicBlockedFrame blocked_frame; | 4842 QuicBlockedFrame blocked_frame; |
4834 blocked_frame.stream_id = 0x01020304; | 4843 blocked_frame.stream_id = 0x01020304; |
4835 | 4844 |
4836 QuicFrames frames; | 4845 QuicFrames frames; |
4837 frames.push_back(QuicFrame(&blocked_frame)); | 4846 frames.push_back(QuicFrame(&blocked_frame)); |
4838 | 4847 |
4839 unsigned char packet[] = { | 4848 unsigned char packet[] = { |
4840 // public flags (8 byte guid) | 4849 // public flags (8 byte connection_id) |
4841 0x3C, | 4850 0x3C, |
4842 // guid | 4851 // connection_id |
4843 0x10, 0x32, 0x54, 0x76, | 4852 0x10, 0x32, 0x54, 0x76, |
4844 0x98, 0xBA, 0xDC, 0xFE, | 4853 0x98, 0xBA, 0xDC, 0xFE, |
4845 // packet sequence number | 4854 // packet sequence number |
4846 0xBC, 0x9A, 0x78, 0x56, | 4855 0xBC, 0x9A, 0x78, 0x56, |
4847 0x34, 0x12, | 4856 0x34, 0x12, |
4848 // private flags(entropy) | 4857 // private flags(entropy) |
4849 0x01, | 4858 0x01, |
4850 | 4859 |
4851 // frame type (blocked frame) | 4860 // frame type (blocked frame) |
4852 0x05, | 4861 0x05, |
(...skipping 13 matching lines...) Expand all Loading... |
4866 string expected_error = | 4875 string expected_error = |
4867 "Attempt to add a BlockedFrame in " + QuicVersionToString(version_); | 4876 "Attempt to add a BlockedFrame in " + QuicVersionToString(version_); |
4868 EXPECT_DFATAL(framer_.BuildUnsizedDataPacket(header, frames), | 4877 EXPECT_DFATAL(framer_.BuildUnsizedDataPacket(header, frames), |
4869 expected_error); | 4878 expected_error); |
4870 return; | 4879 return; |
4871 } | 4880 } |
4872 } | 4881 } |
4873 | 4882 |
4874 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 4883 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
4875 QuicPublicResetPacket reset_packet; | 4884 QuicPublicResetPacket reset_packet; |
4876 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4885 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4877 reset_packet.public_header.reset_flag = true; | 4886 reset_packet.public_header.reset_flag = true; |
4878 reset_packet.public_header.version_flag = false; | 4887 reset_packet.public_header.version_flag = false; |
4879 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 4888 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); |
4880 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 4889 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); |
4881 | 4890 |
4882 unsigned char packet[] = { | 4891 unsigned char packet[] = { |
4883 // public flags (public reset, 8 byte GUID) | 4892 // public flags (public reset, 8 byte ConnectionId) |
4884 0x0E, | 4893 0x0E, |
4885 // guid | 4894 // connection_id |
4886 0x10, 0x32, 0x54, 0x76, | 4895 0x10, 0x32, 0x54, 0x76, |
4887 0x98, 0xBA, 0xDC, 0xFE, | 4896 0x98, 0xBA, 0xDC, 0xFE, |
4888 // message tag (kPRST) | 4897 // message tag (kPRST) |
4889 'P', 'R', 'S', 'T', | 4898 'P', 'R', 'S', 'T', |
4890 // num_entries (2) + padding | 4899 // num_entries (2) + padding |
4891 0x02, 0x00, 0x00, 0x00, | 4900 0x02, 0x00, 0x00, 0x00, |
4892 // tag kRNON | 4901 // tag kRNON |
4893 'R', 'N', 'O', 'N', | 4902 'R', 'N', 'O', 'N', |
4894 // end offset 8 | 4903 // end offset 8 |
4895 0x08, 0x00, 0x00, 0x00, | 4904 0x08, 0x00, 0x00, 0x00, |
(...skipping 13 matching lines...) Expand all Loading... |
4909 framer_.BuildPublicResetPacket(reset_packet)); | 4918 framer_.BuildPublicResetPacket(reset_packet)); |
4910 ASSERT_TRUE(data != NULL); | 4919 ASSERT_TRUE(data != NULL); |
4911 | 4920 |
4912 test::CompareCharArraysWithHexError("constructed packet", | 4921 test::CompareCharArraysWithHexError("constructed packet", |
4913 data->data(), data->length(), | 4922 data->data(), data->length(), |
4914 AsChars(packet), arraysize(packet)); | 4923 AsChars(packet), arraysize(packet)); |
4915 } | 4924 } |
4916 | 4925 |
4917 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 4926 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
4918 QuicPublicResetPacket reset_packet; | 4927 QuicPublicResetPacket reset_packet; |
4919 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4928 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4920 reset_packet.public_header.reset_flag = true; | 4929 reset_packet.public_header.reset_flag = true; |
4921 reset_packet.public_header.version_flag = false; | 4930 reset_packet.public_header.version_flag = false; |
4922 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 4931 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); |
4923 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 4932 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); |
4924 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 4933 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); |
4925 | 4934 |
4926 unsigned char packet[] = { | 4935 unsigned char packet[] = { |
4927 // public flags (public reset, 8 byte GUID) | 4936 // public flags (public reset, 8 byte ConnectionId) |
4928 0x0E, | 4937 0x0E, |
4929 // guid | 4938 // connection_id |
4930 0x10, 0x32, 0x54, 0x76, | 4939 0x10, 0x32, 0x54, 0x76, |
4931 0x98, 0xBA, 0xDC, 0xFE, | 4940 0x98, 0xBA, 0xDC, 0xFE, |
4932 // message tag (kPRST) | 4941 // message tag (kPRST) |
4933 'P', 'R', 'S', 'T', | 4942 'P', 'R', 'S', 'T', |
4934 // num_entries (3) + padding | 4943 // num_entries (3) + padding |
4935 0x03, 0x00, 0x00, 0x00, | 4944 0x03, 0x00, 0x00, 0x00, |
4936 // tag kRNON | 4945 // tag kRNON |
4937 'R', 'N', 'O', 'N', | 4946 'R', 'N', 'O', 'N', |
4938 // end offset 8 | 4947 // end offset 8 |
4939 0x08, 0x00, 0x00, 0x00, | 4948 0x08, 0x00, 0x00, 0x00, |
(...skipping 21 matching lines...) Expand all Loading... |
4961 framer_.BuildPublicResetPacket(reset_packet)); | 4970 framer_.BuildPublicResetPacket(reset_packet)); |
4962 ASSERT_TRUE(data != NULL); | 4971 ASSERT_TRUE(data != NULL); |
4963 | 4972 |
4964 test::CompareCharArraysWithHexError("constructed packet", | 4973 test::CompareCharArraysWithHexError("constructed packet", |
4965 data->data(), data->length(), | 4974 data->data(), data->length(), |
4966 AsChars(packet), arraysize(packet)); | 4975 AsChars(packet), arraysize(packet)); |
4967 } | 4976 } |
4968 | 4977 |
4969 TEST_P(QuicFramerTest, BuildFecPacket) { | 4978 TEST_P(QuicFramerTest, BuildFecPacket) { |
4970 QuicPacketHeader header; | 4979 QuicPacketHeader header; |
4971 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4980 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
4972 header.public_header.reset_flag = false; | 4981 header.public_header.reset_flag = false; |
4973 header.public_header.version_flag = false; | 4982 header.public_header.version_flag = false; |
4974 header.fec_flag = true; | 4983 header.fec_flag = true; |
4975 header.entropy_flag = true; | 4984 header.entropy_flag = true; |
4976 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); | 4985 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); |
4977 header.is_in_fec_group = IN_FEC_GROUP; | 4986 header.is_in_fec_group = IN_FEC_GROUP; |
4978 header.fec_group = GG_UINT64_C(0x123456789ABB);; | 4987 header.fec_group = GG_UINT64_C(0x123456789ABB);; |
4979 | 4988 |
4980 QuicFecData fec_data; | 4989 QuicFecData fec_data; |
4981 fec_data.fec_group = 1; | 4990 fec_data.fec_group = 1; |
4982 fec_data.redundancy = "abcdefghijklmnop"; | 4991 fec_data.redundancy = "abcdefghijklmnop"; |
4983 | 4992 |
4984 unsigned char packet[] = { | 4993 unsigned char packet[] = { |
4985 // public flags (8 byte guid) | 4994 // public flags (8 byte connection_id) |
4986 0x3C, | 4995 0x3C, |
4987 // guid | 4996 // connection_id |
4988 0x10, 0x32, 0x54, 0x76, | 4997 0x10, 0x32, 0x54, 0x76, |
4989 0x98, 0xBA, 0xDC, 0xFE, | 4998 0x98, 0xBA, 0xDC, 0xFE, |
4990 // packet sequence number | 4999 // packet sequence number |
4991 0xBC, 0x9A, 0x78, 0x56, | 5000 0xBC, 0x9A, 0x78, 0x56, |
4992 0x34, 0x12, | 5001 0x34, 0x12, |
4993 // private flags (entropy & fec group & fec packet) | 5002 // private flags (entropy & fec group & fec packet) |
4994 0x07, | 5003 0x07, |
4995 // first fec protected packet offset | 5004 // first fec protected packet offset |
4996 0x01, | 5005 0x01, |
4997 | 5006 |
4998 // redundancy | 5007 // redundancy |
4999 'a', 'b', 'c', 'd', | 5008 'a', 'b', 'c', 'd', |
5000 'e', 'f', 'g', 'h', | 5009 'e', 'f', 'g', 'h', |
5001 'i', 'j', 'k', 'l', | 5010 'i', 'j', 'k', 'l', |
5002 'm', 'n', 'o', 'p', | 5011 'm', 'n', 'o', 'p', |
5003 }; | 5012 }; |
5004 | 5013 |
5005 scoped_ptr<QuicPacket> data( | 5014 scoped_ptr<QuicPacket> data( |
5006 framer_.BuildFecPacket(header, fec_data).packet); | 5015 framer_.BuildFecPacket(header, fec_data).packet); |
5007 ASSERT_TRUE(data != NULL); | 5016 ASSERT_TRUE(data != NULL); |
5008 | 5017 |
5009 test::CompareCharArraysWithHexError("constructed packet", | 5018 test::CompareCharArraysWithHexError("constructed packet", |
5010 data->data(), data->length(), | 5019 data->data(), data->length(), |
5011 AsChars(packet), arraysize(packet)); | 5020 AsChars(packet), arraysize(packet)); |
5012 } | 5021 } |
5013 | 5022 |
5014 TEST_P(QuicFramerTest, EncryptPacket) { | 5023 TEST_P(QuicFramerTest, EncryptPacket) { |
5015 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 5024 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
5016 unsigned char packet[] = { | 5025 unsigned char packet[] = { |
5017 // public flags (8 byte guid) | 5026 // public flags (8 byte connection_id) |
5018 0x3C, | 5027 0x3C, |
5019 // guid | 5028 // connection_id |
5020 0x10, 0x32, 0x54, 0x76, | 5029 0x10, 0x32, 0x54, 0x76, |
5021 0x98, 0xBA, 0xDC, 0xFE, | 5030 0x98, 0xBA, 0xDC, 0xFE, |
5022 // packet sequence number | 5031 // packet sequence number |
5023 0xBC, 0x9A, 0x78, 0x56, | 5032 0xBC, 0x9A, 0x78, 0x56, |
5024 0x34, 0x12, | 5033 0x34, 0x12, |
5025 // private flags (fec group & fec packet) | 5034 // private flags (fec group & fec packet) |
5026 0x06, | 5035 0x06, |
5027 // first fec protected packet offset | 5036 // first fec protected packet offset |
5028 0x01, | 5037 0x01, |
5029 | 5038 |
5030 // redundancy | 5039 // redundancy |
5031 'a', 'b', 'c', 'd', | 5040 'a', 'b', 'c', 'd', |
5032 'e', 'f', 'g', 'h', | 5041 'e', 'f', 'g', 'h', |
5033 'i', 'j', 'k', 'l', | 5042 'i', 'j', 'k', 'l', |
5034 'm', 'n', 'o', 'p', | 5043 'm', 'n', 'o', 'p', |
5035 }; | 5044 }; |
5036 | 5045 |
5037 scoped_ptr<QuicPacket> raw( | 5046 scoped_ptr<QuicPacket> raw( |
5038 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 5047 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
5039 PACKET_8BYTE_GUID, !kIncludeVersion, | 5048 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
5040 PACKET_6BYTE_SEQUENCE_NUMBER)); | 5049 PACKET_6BYTE_SEQUENCE_NUMBER)); |
5041 scoped_ptr<QuicEncryptedPacket> encrypted( | 5050 scoped_ptr<QuicEncryptedPacket> encrypted( |
5042 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 5051 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
5043 | 5052 |
5044 ASSERT_TRUE(encrypted.get() != NULL); | 5053 ASSERT_TRUE(encrypted.get() != NULL); |
5045 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 5054 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
5046 } | 5055 } |
5047 | 5056 |
5048 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 5057 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
5049 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 5058 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
5050 unsigned char packet[] = { | 5059 unsigned char packet[] = { |
5051 // public flags (version, 8 byte guid) | 5060 // public flags (version, 8 byte connection_id) |
5052 0x3D, | 5061 0x3D, |
5053 // guid | 5062 // connection_id |
5054 0x10, 0x32, 0x54, 0x76, | 5063 0x10, 0x32, 0x54, 0x76, |
5055 0x98, 0xBA, 0xDC, 0xFE, | 5064 0x98, 0xBA, 0xDC, 0xFE, |
5056 // version tag | 5065 // version tag |
5057 'Q', '.', '1', '0', | 5066 'Q', '.', '1', '0', |
5058 // packet sequence number | 5067 // packet sequence number |
5059 0xBC, 0x9A, 0x78, 0x56, | 5068 0xBC, 0x9A, 0x78, 0x56, |
5060 0x34, 0x12, | 5069 0x34, 0x12, |
5061 // private flags (fec group & fec flags) | 5070 // private flags (fec group & fec flags) |
5062 0x06, | 5071 0x06, |
5063 // first fec protected packet offset | 5072 // first fec protected packet offset |
5064 0x01, | 5073 0x01, |
5065 | 5074 |
5066 // redundancy | 5075 // redundancy |
5067 'a', 'b', 'c', 'd', | 5076 'a', 'b', 'c', 'd', |
5068 'e', 'f', 'g', 'h', | 5077 'e', 'f', 'g', 'h', |
5069 'i', 'j', 'k', 'l', | 5078 'i', 'j', 'k', 'l', |
5070 'm', 'n', 'o', 'p', | 5079 'm', 'n', 'o', 'p', |
5071 }; | 5080 }; |
5072 | 5081 |
5073 scoped_ptr<QuicPacket> raw( | 5082 scoped_ptr<QuicPacket> raw( |
5074 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 5083 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
5075 PACKET_8BYTE_GUID, kIncludeVersion, | 5084 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
5076 PACKET_6BYTE_SEQUENCE_NUMBER)); | 5085 PACKET_6BYTE_SEQUENCE_NUMBER)); |
5077 scoped_ptr<QuicEncryptedPacket> encrypted( | 5086 scoped_ptr<QuicEncryptedPacket> encrypted( |
5078 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 5087 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
5079 | 5088 |
5080 ASSERT_TRUE(encrypted.get() != NULL); | 5089 ASSERT_TRUE(encrypted.get() != NULL); |
5081 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 5090 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
5082 } | 5091 } |
5083 | 5092 |
5084 TEST_P(QuicFramerTest, Truncation) { | 5093 TEST_P(QuicFramerTest, Truncation) { |
5085 if (framer_.version() <= QUIC_VERSION_15) { | 5094 if (framer_.version() <= QUIC_VERSION_15) { |
5086 return; | 5095 return; |
5087 } | 5096 } |
5088 QuicPacketHeader header; | 5097 QuicPacketHeader header; |
5089 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 5098 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
5090 header.public_header.reset_flag = false; | 5099 header.public_header.reset_flag = false; |
5091 header.public_header.version_flag = false; | 5100 header.public_header.version_flag = false; |
5092 header.fec_flag = false; | 5101 header.fec_flag = false; |
5093 header.entropy_flag = false; | 5102 header.entropy_flag = false; |
5094 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 5103 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
5095 header.fec_group = 0; | 5104 header.fec_group = 0; |
5096 | 5105 |
5097 QuicAckFrame ack_frame; | 5106 QuicAckFrame ack_frame; |
5098 ack_frame.received_info.largest_observed = 601; | 5107 ack_frame.received_info.largest_observed = 601; |
5099 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { | 5108 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { |
(...skipping 28 matching lines...) Expand all Loading... |
5128 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 5137 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
5129 processed_ack_frame.received_info.missing_packets.rbegin(); | 5138 processed_ack_frame.received_info.missing_packets.rbegin(); |
5130 EXPECT_EQ(509u, *last_missing_iter); | 5139 EXPECT_EQ(509u, *last_missing_iter); |
5131 } | 5140 } |
5132 | 5141 |
5133 TEST_P(QuicFramerTest, Truncation15) { | 5142 TEST_P(QuicFramerTest, Truncation15) { |
5134 if (framer_.version() > QUIC_VERSION_15) { | 5143 if (framer_.version() > QUIC_VERSION_15) { |
5135 return; | 5144 return; |
5136 } | 5145 } |
5137 QuicPacketHeader header; | 5146 QuicPacketHeader header; |
5138 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 5147 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
5139 header.public_header.reset_flag = false; | 5148 header.public_header.reset_flag = false; |
5140 header.public_header.version_flag = false; | 5149 header.public_header.version_flag = false; |
5141 header.fec_flag = false; | 5150 header.fec_flag = false; |
5142 header.entropy_flag = false; | 5151 header.entropy_flag = false; |
5143 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 5152 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
5144 header.fec_group = 0; | 5153 header.fec_group = 0; |
5145 | 5154 |
5146 QuicAckFrame ack_frame; | 5155 QuicAckFrame ack_frame; |
5147 ack_frame.received_info.largest_observed = 601; | 5156 ack_frame.received_info.largest_observed = 601; |
5148 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1; | 5157 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1; |
(...skipping 28 matching lines...) Expand all Loading... |
5177 SequenceNumberSet::const_iterator missing_iter = | 5186 SequenceNumberSet::const_iterator missing_iter = |
5178 processed_ack_frame.received_info.missing_packets.begin(); | 5187 processed_ack_frame.received_info.missing_packets.begin(); |
5179 EXPECT_EQ(1u, *missing_iter); | 5188 EXPECT_EQ(1u, *missing_iter); |
5180 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 5189 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
5181 processed_ack_frame.received_info.missing_packets.rbegin(); | 5190 processed_ack_frame.received_info.missing_packets.rbegin(); |
5182 EXPECT_EQ(509u, *last_missing_iter); | 5191 EXPECT_EQ(509u, *last_missing_iter); |
5183 } | 5192 } |
5184 | 5193 |
5185 TEST_P(QuicFramerTest, CleanTruncation) { | 5194 TEST_P(QuicFramerTest, CleanTruncation) { |
5186 QuicPacketHeader header; | 5195 QuicPacketHeader header; |
5187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 5196 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
5188 header.public_header.reset_flag = false; | 5197 header.public_header.reset_flag = false; |
5189 header.public_header.version_flag = false; | 5198 header.public_header.version_flag = false; |
5190 header.fec_flag = false; | 5199 header.fec_flag = false; |
5191 header.entropy_flag = true; | 5200 header.entropy_flag = true; |
5192 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 5201 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
5193 header.fec_group = 0; | 5202 header.fec_group = 0; |
5194 | 5203 |
5195 QuicAckFrame ack_frame; | 5204 QuicAckFrame ack_frame; |
5196 ack_frame.received_info.largest_observed = 201; | 5205 ack_frame.received_info.largest_observed = 201; |
5197 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 2; | 5206 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 2; |
(...skipping 29 matching lines...) Expand all Loading... |
5227 size_t original_raw_length = raw_ack_packet->length(); | 5236 size_t original_raw_length = raw_ack_packet->length(); |
5228 raw_ack_packet.reset( | 5237 raw_ack_packet.reset( |
5229 framer_.BuildUnsizedDataPacket(header, frames).packet); | 5238 framer_.BuildUnsizedDataPacket(header, frames).packet); |
5230 ASSERT_TRUE(raw_ack_packet != NULL); | 5239 ASSERT_TRUE(raw_ack_packet != NULL); |
5231 EXPECT_EQ(original_raw_length, raw_ack_packet->length()); | 5240 EXPECT_EQ(original_raw_length, raw_ack_packet->length()); |
5232 ASSERT_TRUE(raw_ack_packet != NULL); | 5241 ASSERT_TRUE(raw_ack_packet != NULL); |
5233 } | 5242 } |
5234 | 5243 |
5235 TEST_P(QuicFramerTest, EntropyFlagTest) { | 5244 TEST_P(QuicFramerTest, EntropyFlagTest) { |
5236 unsigned char packet[] = { | 5245 unsigned char packet[] = { |
5237 // public flags (8 byte guid) | 5246 // public flags (8 byte connection_id) |
5238 0x3C, | 5247 0x3C, |
5239 // guid | 5248 // connection_id |
5240 0x10, 0x32, 0x54, 0x76, | 5249 0x10, 0x32, 0x54, 0x76, |
5241 0x98, 0xBA, 0xDC, 0xFE, | 5250 0x98, 0xBA, 0xDC, 0xFE, |
5242 // packet sequence number | 5251 // packet sequence number |
5243 0xBC, 0x9A, 0x78, 0x56, | 5252 0xBC, 0x9A, 0x78, 0x56, |
5244 0x34, 0x12, | 5253 0x34, 0x12, |
5245 // private flags (Entropy) | 5254 // private flags (Entropy) |
5246 0x01, | 5255 0x01, |
5247 | 5256 |
5248 // frame type (stream frame with fin and no length) | 5257 // frame type (stream frame with fin and no length) |
5249 0xDF, | 5258 0xDF, |
(...skipping 12 matching lines...) Expand all Loading... |
5262 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5271 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
5263 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5272 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
5264 ASSERT_TRUE(visitor_.header_.get()); | 5273 ASSERT_TRUE(visitor_.header_.get()); |
5265 EXPECT_TRUE(visitor_.header_->entropy_flag); | 5274 EXPECT_TRUE(visitor_.header_->entropy_flag); |
5266 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 5275 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
5267 EXPECT_FALSE(visitor_.header_->fec_flag); | 5276 EXPECT_FALSE(visitor_.header_->fec_flag); |
5268 }; | 5277 }; |
5269 | 5278 |
5270 TEST_P(QuicFramerTest, FecEntropyTest) { | 5279 TEST_P(QuicFramerTest, FecEntropyTest) { |
5271 unsigned char packet[] = { | 5280 unsigned char packet[] = { |
5272 // public flags (8 byte guid) | 5281 // public flags (8 byte connection_id) |
5273 0x3C, | 5282 0x3C, |
5274 // guid | 5283 // connection_id |
5275 0x10, 0x32, 0x54, 0x76, | 5284 0x10, 0x32, 0x54, 0x76, |
5276 0x98, 0xBA, 0xDC, 0xFE, | 5285 0x98, 0xBA, 0xDC, 0xFE, |
5277 // packet sequence number | 5286 // packet sequence number |
5278 0xBC, 0x9A, 0x78, 0x56, | 5287 0xBC, 0x9A, 0x78, 0x56, |
5279 0x34, 0x12, | 5288 0x34, 0x12, |
5280 // private flags (Entropy & fec group & FEC) | 5289 // private flags (Entropy & fec group & FEC) |
5281 0x07, | 5290 0x07, |
5282 // first fec protected packet offset | 5291 // first fec protected packet offset |
5283 0xFF, | 5292 0xFF, |
5284 | 5293 |
(...skipping 14 matching lines...) Expand all Loading... |
5299 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5308 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
5300 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5309 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
5301 ASSERT_TRUE(visitor_.header_.get()); | 5310 ASSERT_TRUE(visitor_.header_.get()); |
5302 EXPECT_TRUE(visitor_.header_->fec_flag); | 5311 EXPECT_TRUE(visitor_.header_->fec_flag); |
5303 EXPECT_TRUE(visitor_.header_->entropy_flag); | 5312 EXPECT_TRUE(visitor_.header_->entropy_flag); |
5304 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 5313 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
5305 }; | 5314 }; |
5306 | 5315 |
5307 TEST_P(QuicFramerTest, StopPacketProcessing) { | 5316 TEST_P(QuicFramerTest, StopPacketProcessing) { |
5308 unsigned char packet[] = { | 5317 unsigned char packet[] = { |
5309 // public flags (8 byte guid) | 5318 // public flags (8 byte connection_id) |
5310 0x3C, | 5319 0x3C, |
5311 // guid | 5320 // connection_id |
5312 0x10, 0x32, 0x54, 0x76, | 5321 0x10, 0x32, 0x54, 0x76, |
5313 0x98, 0xBA, 0xDC, 0xFE, | 5322 0x98, 0xBA, 0xDC, 0xFE, |
5314 // packet sequence number | 5323 // packet sequence number |
5315 0xBC, 0x9A, 0x78, 0x56, | 5324 0xBC, 0x9A, 0x78, 0x56, |
5316 0x34, 0x12, | 5325 0x34, 0x12, |
5317 // Entropy | 5326 // Entropy |
5318 0x01, | 5327 0x01, |
5319 | 5328 |
5320 // frame type (stream frame with fin) | 5329 // frame type (stream frame with fin) |
5321 0xFF, | 5330 0xFF, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5359 EXPECT_CALL(visitor, OnPacketComplete()); | 5368 EXPECT_CALL(visitor, OnPacketComplete()); |
5360 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 5369 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
5361 | 5370 |
5362 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 5371 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
5363 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5372 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
5364 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5373 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
5365 } | 5374 } |
5366 | 5375 |
5367 } // namespace test | 5376 } // namespace test |
5368 } // namespace net | 5377 } // namespace net |
OLD | NEW |