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/core/quic_framer.h" | 5 #include "net/quic/core/quic_framer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstdint> | 8 #include <cstdint> |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 }; | 584 }; |
585 // clang-format on | 585 // clang-format on |
586 | 586 |
587 const size_t header_size = GetPacketHeaderSize( | 587 const size_t header_size = GetPacketHeaderSize( |
588 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 588 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
589 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER); | 589 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER); |
590 | 590 |
591 memset(packet + header_size, 0, kMaxPacketSize - header_size); | 591 memset(packet + header_size, 0, kMaxPacketSize - header_size); |
592 | 592 |
593 QuicEncryptedPacket encrypted( | 593 QuicEncryptedPacket encrypted( |
594 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 594 AsChars( |
595 ? packet_cid_be | 595 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
596 : packet), | 596 ? packet_cid_be |
597 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 597 : packet), |
| 598 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
598 ? arraysize(packet_cid_be) | 599 ? arraysize(packet_cid_be) |
599 : arraysize(packet), | 600 : arraysize(packet), |
600 false); | 601 false); |
601 EXPECT_QUIC_BUG(framer_.ProcessPacket(encrypted), "Packet too large:1"); | 602 EXPECT_QUIC_BUG(framer_.ProcessPacket(encrypted), "Packet too large:1"); |
602 | 603 |
603 ASSERT_TRUE(visitor_.header_.get()); | 604 ASSERT_TRUE(visitor_.header_.get()); |
604 // Make sure we've parsed the packet header, so we can send an error. | 605 // Make sure we've parsed the packet header, so we can send an error. |
605 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 606 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
606 // Make sure the correct error is propagated. | 607 // Make sure the correct error is propagated. |
607 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 608 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
(...skipping 14 matching lines...) Expand all Loading... |
622 // public flags (8 byte connection_id) | 623 // public flags (8 byte connection_id) |
623 0x38, | 624 0x38, |
624 // connection_id | 625 // connection_id |
625 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 626 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
626 // packet number | 627 // packet number |
627 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 628 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
628 }; | 629 }; |
629 // clang-format on | 630 // clang-format on |
630 | 631 |
631 QuicEncryptedPacket encrypted( | 632 QuicEncryptedPacket encrypted( |
632 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 633 AsChars( |
633 ? packet_cid_be | 634 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
634 : packet), | 635 ? packet_cid_be |
635 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 636 : packet), |
| 637 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
636 ? arraysize(packet_cid_be) | 638 ? arraysize(packet_cid_be) |
637 : arraysize(packet), | 639 : arraysize(packet), |
638 false); | 640 false); |
639 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 641 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
640 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 642 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
641 ASSERT_TRUE(visitor_.header_.get()); | 643 ASSERT_TRUE(visitor_.header_.get()); |
642 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 644 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
643 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 645 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
644 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 646 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
645 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 647 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
646 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 648 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
647 | 649 |
648 // Now test framing boundaries. | 650 // Now test framing boundaries. |
649 for (size_t i = 0; | 651 for (size_t i = 0; |
650 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 652 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
651 !kIncludeVersion, !kIncludeDiversificationNonce, | 653 !kIncludeVersion, !kIncludeDiversificationNonce, |
652 PACKET_6BYTE_PACKET_NUMBER); | 654 PACKET_6BYTE_PACKET_NUMBER); |
653 ++i) { | 655 ++i) { |
654 string expected_error; | 656 string expected_error; |
655 if (i < kConnectionIdOffset) { | 657 if (i < kConnectionIdOffset) { |
656 expected_error = "Unable to read public flags."; | 658 expected_error = "Unable to read public flags."; |
657 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 659 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
658 expected_error = "Unable to read ConnectionId."; | 660 expected_error = "Unable to read ConnectionId."; |
659 } else { | 661 } else { |
660 expected_error = "Unable to read packet number."; | 662 expected_error = "Unable to read packet number."; |
661 } | 663 } |
662 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 664 CheckProcessingFails( |
663 ? packet_cid_be | 665 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
664 : packet, | 666 ? packet_cid_be |
665 i, expected_error, QUIC_INVALID_PACKET_HEADER); | 667 : packet, |
| 668 i, expected_error, QUIC_INVALID_PACKET_HEADER); |
666 } | 669 } |
667 } | 670 } |
668 | 671 |
669 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 672 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
670 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 673 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
671 | 674 |
672 // clang-format off | 675 // clang-format off |
673 unsigned char packet[] = { | 676 unsigned char packet[] = { |
674 // public flags (0 byte connection_id) | 677 // public flags (0 byte connection_id) |
675 0x30, | 678 0x30, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 // connection_id | 731 // connection_id |
729 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 732 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
730 // version tag | 733 // version tag |
731 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 734 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
732 // packet number | 735 // packet number |
733 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 736 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
734 }; | 737 }; |
735 // clang-format on | 738 // clang-format on |
736 | 739 |
737 QuicEncryptedPacket encrypted( | 740 QuicEncryptedPacket encrypted( |
738 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 741 AsChars( |
739 ? packet_cid_be | 742 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
740 : packet), | 743 ? packet_cid_be |
741 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 744 : packet), |
| 745 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
742 ? arraysize(packet_cid_be) | 746 ? arraysize(packet_cid_be) |
743 : arraysize(packet), | 747 : arraysize(packet), |
744 false); | 748 false); |
745 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 749 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
746 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 750 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
747 ASSERT_TRUE(visitor_.header_.get()); | 751 ASSERT_TRUE(visitor_.header_.get()); |
748 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 752 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
749 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 753 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
750 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 754 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
751 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 755 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
752 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 756 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
753 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 757 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
754 | 758 |
755 // Now test framing boundaries. | 759 // Now test framing boundaries. |
756 for (size_t i = 0; | 760 for (size_t i = 0; |
757 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 761 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
758 kIncludeVersion, !kIncludeDiversificationNonce, | 762 kIncludeVersion, !kIncludeDiversificationNonce, |
759 PACKET_6BYTE_PACKET_NUMBER); | 763 PACKET_6BYTE_PACKET_NUMBER); |
760 ++i) { | 764 ++i) { |
761 string expected_error; | 765 string expected_error; |
762 if (i < kConnectionIdOffset) { | 766 if (i < kConnectionIdOffset) { |
763 expected_error = "Unable to read public flags."; | 767 expected_error = "Unable to read public flags."; |
764 } else if (i < kVersionOffset) { | 768 } else if (i < kVersionOffset) { |
765 expected_error = "Unable to read ConnectionId."; | 769 expected_error = "Unable to read ConnectionId."; |
766 } else if (i < GetPacketNumberOffset(kIncludeVersion)) { | 770 } else if (i < GetPacketNumberOffset(kIncludeVersion)) { |
767 expected_error = "Unable to read protocol version."; | 771 expected_error = "Unable to read protocol version."; |
768 } else { | 772 } else { |
769 expected_error = "Unable to read packet number."; | 773 expected_error = "Unable to read packet number."; |
770 } | 774 } |
771 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 775 CheckProcessingFails( |
772 ? packet_cid_be | 776 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
773 : packet, | 777 ? packet_cid_be |
774 i, expected_error, QUIC_INVALID_PACKET_HEADER); | 778 : packet, |
| 779 i, expected_error, QUIC_INVALID_PACKET_HEADER); |
775 } | 780 } |
776 } | 781 } |
777 | 782 |
778 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { | 783 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { |
779 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); | 784 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); |
780 | 785 |
781 // clang-format off | 786 // clang-format off |
782 unsigned char packet[] = { | 787 unsigned char packet[] = { |
783 // public flags (8 byte connection_id and 4 byte packet number) | 788 // public flags (8 byte connection_id and 4 byte packet number) |
784 0x28, | 789 0x28, |
785 // connection_id | 790 // connection_id |
786 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 791 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
787 // packet number | 792 // packet number |
788 0xBC, 0x9A, 0x78, 0x56, | 793 0xBC, 0x9A, 0x78, 0x56, |
789 }; | 794 }; |
790 | 795 |
791 unsigned char packet_cid_be[] = { | 796 unsigned char packet_cid_be[] = { |
792 // public flags (8 byte connection_id and 4 byte packet number) | 797 // public flags (8 byte connection_id and 4 byte packet number) |
793 0x28, | 798 0x28, |
794 // connection_id | 799 // connection_id |
795 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 800 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
796 // packet number | 801 // packet number |
797 0xBC, 0x9A, 0x78, 0x56, | 802 0xBC, 0x9A, 0x78, 0x56, |
798 }; | 803 }; |
799 // clang-format on | 804 // clang-format on |
800 | 805 |
801 QuicEncryptedPacket encrypted( | 806 QuicEncryptedPacket encrypted( |
802 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 807 AsChars( |
803 ? packet_cid_be | 808 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
804 : packet), | 809 ? packet_cid_be |
805 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 810 : packet), |
| 811 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
806 ? arraysize(packet_cid_be) | 812 ? arraysize(packet_cid_be) |
807 : arraysize(packet), | 813 : arraysize(packet), |
808 false); | 814 false); |
809 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 815 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
810 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 816 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
811 ASSERT_TRUE(visitor_.header_.get()); | 817 ASSERT_TRUE(visitor_.header_.get()); |
812 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 818 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
813 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 819 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
814 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 820 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
815 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 821 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
816 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 822 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
817 | 823 |
818 // Now test framing boundaries. | 824 // Now test framing boundaries. |
819 for (size_t i = 0; | 825 for (size_t i = 0; |
820 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 826 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
821 !kIncludeVersion, !kIncludeDiversificationNonce, | 827 !kIncludeVersion, !kIncludeDiversificationNonce, |
822 PACKET_4BYTE_PACKET_NUMBER); | 828 PACKET_4BYTE_PACKET_NUMBER); |
823 ++i) { | 829 ++i) { |
824 string expected_error; | 830 string expected_error; |
825 if (i < kConnectionIdOffset) { | 831 if (i < kConnectionIdOffset) { |
826 expected_error = "Unable to read public flags."; | 832 expected_error = "Unable to read public flags."; |
827 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 833 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
828 expected_error = "Unable to read ConnectionId."; | 834 expected_error = "Unable to read ConnectionId."; |
829 } else { | 835 } else { |
830 expected_error = "Unable to read packet number."; | 836 expected_error = "Unable to read packet number."; |
831 } | 837 } |
832 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 838 CheckProcessingFails( |
833 ? packet_cid_be | 839 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
834 : packet, | 840 ? packet_cid_be |
835 i, expected_error, QUIC_INVALID_PACKET_HEADER); | 841 : packet, |
| 842 i, expected_error, QUIC_INVALID_PACKET_HEADER); |
836 } | 843 } |
837 } | 844 } |
838 | 845 |
839 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 846 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
840 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); | 847 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); |
841 | 848 |
842 // clang-format off | 849 // clang-format off |
843 unsigned char packet[] = { | 850 unsigned char packet[] = { |
844 // public flags (8 byte connection_id and 2 byte packet number) | 851 // public flags (8 byte connection_id and 2 byte packet number) |
845 0x18, | 852 0x18, |
846 // connection_id | 853 // connection_id |
847 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 854 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
848 // packet number | 855 // packet number |
849 0xBC, 0x9A, | 856 0xBC, 0x9A, |
850 }; | 857 }; |
851 | 858 |
852 unsigned char packet_cid_be[] = { | 859 unsigned char packet_cid_be[] = { |
853 // public flags (8 byte connection_id and 2 byte packet number) | 860 // public flags (8 byte connection_id and 2 byte packet number) |
854 0x18, | 861 0x18, |
855 // connection_id | 862 // connection_id |
856 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 863 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
857 // packet number | 864 // packet number |
858 0xBC, 0x9A, | 865 0xBC, 0x9A, |
859 }; | 866 }; |
860 // clang-format on | 867 // clang-format on |
861 | 868 |
862 QuicEncryptedPacket encrypted( | 869 QuicEncryptedPacket encrypted( |
863 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 870 AsChars( |
864 ? packet_cid_be | 871 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
865 : packet), | 872 ? packet_cid_be |
866 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 873 : packet), |
| 874 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
867 ? arraysize(packet_cid_be) | 875 ? arraysize(packet_cid_be) |
868 : arraysize(packet), | 876 : arraysize(packet), |
869 false); | 877 false); |
870 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 878 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
871 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 879 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
872 ASSERT_TRUE(visitor_.header_.get()); | 880 ASSERT_TRUE(visitor_.header_.get()); |
873 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 881 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
874 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 882 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
875 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 883 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
876 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 884 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
877 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 885 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
878 visitor_.header_->public_header.packet_number_length); | 886 visitor_.header_->public_header.packet_number_length); |
879 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 887 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
880 | 888 |
881 // Now test framing boundaries. | 889 // Now test framing boundaries. |
882 for (size_t i = 0; | 890 for (size_t i = 0; |
883 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 891 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
884 !kIncludeVersion, !kIncludeDiversificationNonce, | 892 !kIncludeVersion, !kIncludeDiversificationNonce, |
885 PACKET_2BYTE_PACKET_NUMBER); | 893 PACKET_2BYTE_PACKET_NUMBER); |
886 ++i) { | 894 ++i) { |
887 string expected_error; | 895 string expected_error; |
888 if (i < kConnectionIdOffset) { | 896 if (i < kConnectionIdOffset) { |
889 expected_error = "Unable to read public flags."; | 897 expected_error = "Unable to read public flags."; |
890 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 898 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
891 expected_error = "Unable to read ConnectionId."; | 899 expected_error = "Unable to read ConnectionId."; |
892 } else { | 900 } else { |
893 expected_error = "Unable to read packet number."; | 901 expected_error = "Unable to read packet number."; |
894 } | 902 } |
895 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 903 CheckProcessingFails( |
896 ? packet_cid_be | 904 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
897 : packet, | 905 ? packet_cid_be |
898 i, expected_error, QUIC_INVALID_PACKET_HEADER); | 906 : packet, |
| 907 i, expected_error, QUIC_INVALID_PACKET_HEADER); |
899 } | 908 } |
900 } | 909 } |
901 | 910 |
902 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 911 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
903 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); | 912 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2); |
904 | 913 |
905 // clang-format off | 914 // clang-format off |
906 unsigned char packet[] = { | 915 unsigned char packet[] = { |
907 // public flags (8 byte connection_id and 1 byte packet number) | 916 // public flags (8 byte connection_id and 1 byte packet number) |
908 0x08, | 917 0x08, |
909 // connection_id | 918 // connection_id |
910 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 919 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
911 // packet number | 920 // packet number |
912 0xBC, | 921 0xBC, |
913 }; | 922 }; |
914 | 923 |
915 unsigned char packet_cid_be[] = { | 924 unsigned char packet_cid_be[] = { |
916 // public flags (8 byte connection_id and 1 byte packet number) | 925 // public flags (8 byte connection_id and 1 byte packet number) |
917 0x08, | 926 0x08, |
918 // connection_id | 927 // connection_id |
919 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 928 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
920 // packet number | 929 // packet number |
921 0xBC, | 930 0xBC, |
922 }; | 931 }; |
923 // clang-format on | 932 // clang-format on |
924 | 933 |
925 QuicEncryptedPacket encrypted( | 934 QuicEncryptedPacket encrypted( |
926 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 935 AsChars( |
927 ? packet_cid_be | 936 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
928 : packet), | 937 ? packet_cid_be |
929 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 938 : packet), |
| 939 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
930 ? arraysize(packet_cid_be) | 940 ? arraysize(packet_cid_be) |
931 : arraysize(packet), | 941 : arraysize(packet), |
932 false); | 942 false); |
933 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 943 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
934 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 944 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
935 ASSERT_TRUE(visitor_.header_.get()); | 945 ASSERT_TRUE(visitor_.header_.get()); |
936 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 946 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
937 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 947 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
938 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 948 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
939 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 949 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
940 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 950 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
941 visitor_.header_->public_header.packet_number_length); | 951 visitor_.header_->public_header.packet_number_length); |
942 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 952 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
943 | 953 |
944 // Now test framing boundaries. | 954 // Now test framing boundaries. |
945 for (size_t i = 0; | 955 for (size_t i = 0; |
946 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 956 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
947 !kIncludeVersion, !kIncludeDiversificationNonce, | 957 !kIncludeVersion, !kIncludeDiversificationNonce, |
948 PACKET_1BYTE_PACKET_NUMBER); | 958 PACKET_1BYTE_PACKET_NUMBER); |
949 ++i) { | 959 ++i) { |
950 string expected_error; | 960 string expected_error; |
951 if (i < kConnectionIdOffset) { | 961 if (i < kConnectionIdOffset) { |
952 expected_error = "Unable to read public flags."; | 962 expected_error = "Unable to read public flags."; |
953 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 963 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
954 expected_error = "Unable to read ConnectionId."; | 964 expected_error = "Unable to read ConnectionId."; |
955 } else { | 965 } else { |
956 expected_error = "Unable to read packet number."; | 966 expected_error = "Unable to read packet number."; |
957 } | 967 } |
958 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 968 CheckProcessingFails( |
959 ? packet_cid_be | 969 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
960 : packet, | 970 ? packet_cid_be |
961 i, expected_error, QUIC_INVALID_PACKET_HEADER); | 971 : packet, |
| 972 i, expected_error, QUIC_INVALID_PACKET_HEADER); |
962 } | 973 } |
963 } | 974 } |
964 | 975 |
965 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { | 976 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { |
966 // Test the case when a packet is received from the past and future packet | 977 // Test the case when a packet is received from the past and future packet |
967 // numbers are still calculated relative to the largest received packet. | 978 // numbers are still calculated relative to the largest received packet. |
968 QuicPacketHeader header; | 979 QuicPacketHeader header; |
969 header.public_header.connection_id = kConnectionId; | 980 header.public_header.connection_id = kConnectionId; |
970 header.public_header.reset_flag = false; | 981 header.public_header.reset_flag = false; |
971 header.public_header.version_flag = false; | 982 header.public_header.version_flag = false; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1055 // packet number | 1066 // packet number |
1056 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1067 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
1057 | 1068 |
1058 // frame type (padding) | 1069 // frame type (padding) |
1059 0x00, | 1070 0x00, |
1060 0x00, 0x00, 0x00, 0x00 | 1071 0x00, 0x00, 0x00, 0x00 |
1061 }; | 1072 }; |
1062 // clang-format on | 1073 // clang-format on |
1063 | 1074 |
1064 QuicEncryptedPacket encrypted( | 1075 QuicEncryptedPacket encrypted( |
1065 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1076 AsChars( |
1066 ? packet_cid_be | 1077 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1067 : packet), | 1078 ? packet_cid_be |
1068 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1079 : packet), |
| 1080 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1069 ? arraysize(packet_cid_be) | 1081 ? arraysize(packet_cid_be) |
1070 : arraysize(packet), | 1082 : arraysize(packet), |
1071 false); | 1083 false); |
1072 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 1084 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
1073 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1085 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1074 ASSERT_TRUE(visitor_.public_header_->nonce != nullptr); | 1086 ASSERT_TRUE(visitor_.public_header_->nonce != nullptr); |
1075 for (char i = 0; i < 32; ++i) { | 1087 for (char i = 0; i < 32; ++i) { |
1076 EXPECT_EQ(i, (*visitor_.public_header_->nonce)[static_cast<size_t>(i)]); | 1088 EXPECT_EQ(i, (*visitor_.public_header_->nonce)[static_cast<size_t>(i)]); |
1077 } | 1089 } |
1078 EXPECT_EQ(1u, visitor_.padding_frames_.size()); | 1090 EXPECT_EQ(1u, visitor_.padding_frames_.size()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 // packet number | 1122 // packet number |
1111 0xBC, 0x9A, 0x78, 0x56, | 1123 0xBC, 0x9A, 0x78, 0x56, |
1112 0x34, 0x12, | 1124 0x34, 0x12, |
1113 | 1125 |
1114 // frame type (padding frame) | 1126 // frame type (padding frame) |
1115 0x00, | 1127 0x00, |
1116 0x00, 0x00, 0x00, 0x00 | 1128 0x00, 0x00, 0x00, 0x00 |
1117 }; | 1129 }; |
1118 // clang-format on | 1130 // clang-format on |
1119 QuicEncryptedPacket encrypted( | 1131 QuicEncryptedPacket encrypted( |
1120 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1132 AsChars( |
1121 ? packet_cid_be | 1133 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1122 : packet), | 1134 ? packet_cid_be |
1123 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1135 : packet), |
| 1136 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1124 ? arraysize(packet_cid_be) | 1137 ? arraysize(packet_cid_be) |
1125 : arraysize(packet), | 1138 : arraysize(packet), |
1126 false); | 1139 false); |
1127 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1140 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1128 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1141 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1129 ASSERT_TRUE(visitor_.header_.get()); | 1142 ASSERT_TRUE(visitor_.header_.get()); |
1130 EXPECT_EQ(0, visitor_.frame_count_); | 1143 EXPECT_EQ(0, visitor_.frame_count_); |
1131 EXPECT_EQ(1, visitor_.version_mismatch_); | 1144 EXPECT_EQ(1, visitor_.version_mismatch_); |
1132 EXPECT_EQ(1u, visitor_.padding_frames_.size()); | 1145 EXPECT_EQ(1u, visitor_.padding_frames_.size()); |
1133 EXPECT_EQ(5, visitor_.padding_frames_[0]->num_padding_bytes); | 1146 EXPECT_EQ(5, visitor_.padding_frames_[0]->num_padding_bytes); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1189 'o', ' ', 'w', 'o', | 1202 'o', ' ', 'w', 'o', |
1190 'r', 'l', 'd', '!', | 1203 'r', 'l', 'd', '!', |
1191 }; | 1204 }; |
1192 // clang-format on | 1205 // clang-format on |
1193 | 1206 |
1194 if (framer_.version() > QUIC_VERSION_37) { | 1207 if (framer_.version() > QUIC_VERSION_37) { |
1195 return; | 1208 return; |
1196 } | 1209 } |
1197 | 1210 |
1198 QuicEncryptedPacket encrypted( | 1211 QuicEncryptedPacket encrypted( |
1199 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1212 AsChars( |
1200 ? packet_cid_be | 1213 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1201 : packet), | 1214 ? packet_cid_be |
1202 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1215 : packet), |
| 1216 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1203 ? arraysize(packet_cid_be) | 1217 ? arraysize(packet_cid_be) |
1204 : arraysize(packet), | 1218 : arraysize(packet), |
1205 false); | 1219 false); |
1206 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1220 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1207 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1221 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1208 ASSERT_TRUE(visitor_.header_.get()); | 1222 ASSERT_TRUE(visitor_.header_.get()); |
1209 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1223 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1210 !kIncludeDiversificationNonce)); | 1224 !kIncludeDiversificationNonce)); |
1211 | 1225 |
1212 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1226 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1213 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1227 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1214 EXPECT_EQ(1u, visitor_.padding_frames_.size()); | 1228 EXPECT_EQ(1u, visitor_.padding_frames_.size()); |
1215 EXPECT_EQ(28, visitor_.padding_frames_[0]->num_padding_bytes); | 1229 EXPECT_EQ(28, visitor_.padding_frames_[0]->num_padding_bytes); |
1216 // A packet with no frames is not acceptable. | 1230 // A packet with no frames is not acceptable. |
1217 CheckProcessingFails( | 1231 CheckProcessingFails( |
1218 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1232 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1219 : packet, | 1233 ? packet_cid_be |
| 1234 : packet, |
1220 GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 1235 GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1221 !kIncludeVersion, !kIncludeDiversificationNonce, | 1236 !kIncludeVersion, !kIncludeDiversificationNonce, |
1222 PACKET_6BYTE_PACKET_NUMBER), | 1237 PACKET_6BYTE_PACKET_NUMBER), |
1223 "Packet has no frames.", QUIC_MISSING_PAYLOAD); | 1238 "Packet has no frames.", QUIC_MISSING_PAYLOAD); |
1224 } | 1239 } |
1225 | 1240 |
1226 TEST_P(QuicFramerTest, NewPaddingFrame) { | 1241 TEST_P(QuicFramerTest, NewPaddingFrame) { |
1227 // clang-format off | 1242 // clang-format off |
1228 unsigned char packet[] = { | 1243 unsigned char packet[] = { |
1229 // public flags (8 byte connection_id) | 1244 // public flags (8 byte connection_id) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1281 // paddings | 1296 // paddings |
1282 0x00, 0x00, | 1297 0x00, 0x00, |
1283 }; | 1298 }; |
1284 // clang-format on | 1299 // clang-format on |
1285 | 1300 |
1286 if (framer_.version() <= QUIC_VERSION_37) { | 1301 if (framer_.version() <= QUIC_VERSION_37) { |
1287 return; | 1302 return; |
1288 } | 1303 } |
1289 | 1304 |
1290 QuicEncryptedPacket encrypted( | 1305 QuicEncryptedPacket encrypted( |
1291 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1306 AsChars( |
1292 ? packet_cid_be | 1307 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1293 : packet), | 1308 ? packet_cid_be |
1294 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1309 : packet), |
| 1310 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1295 ? arraysize(packet_cid_be) | 1311 ? arraysize(packet_cid_be) |
1296 : arraysize(packet), | 1312 : arraysize(packet), |
1297 false); | 1313 false); |
1298 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1314 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1299 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1315 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1300 ASSERT_TRUE(visitor_.header_.get()); | 1316 ASSERT_TRUE(visitor_.header_.get()); |
1301 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1317 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1302 !kIncludeDiversificationNonce)); | 1318 !kIncludeDiversificationNonce)); |
1303 | 1319 |
1304 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1320 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1358 // data length | 1374 // data length |
1359 0x0c, 0x00, | 1375 0x0c, 0x00, |
1360 // data | 1376 // data |
1361 'h', 'e', 'l', 'l', | 1377 'h', 'e', 'l', 'l', |
1362 'o', ' ', 'w', 'o', | 1378 'o', ' ', 'w', 'o', |
1363 'r', 'l', 'd', '!', | 1379 'r', 'l', 'd', '!', |
1364 }; | 1380 }; |
1365 // clang-format on | 1381 // clang-format on |
1366 | 1382 |
1367 QuicEncryptedPacket encrypted( | 1383 QuicEncryptedPacket encrypted( |
1368 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1384 AsChars( |
1369 ? packet_cid_be | 1385 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1370 : packet), | 1386 ? packet_cid_be |
1371 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1387 : packet), |
| 1388 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1372 ? arraysize(packet_cid_be) | 1389 ? arraysize(packet_cid_be) |
1373 : arraysize(packet), | 1390 : arraysize(packet), |
1374 false); | 1391 false); |
1375 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1392 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1376 | 1393 |
1377 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1394 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1378 ASSERT_TRUE(visitor_.header_.get()); | 1395 ASSERT_TRUE(visitor_.header_.get()); |
1379 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1396 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1380 !kIncludeDiversificationNonce)); | 1397 !kIncludeDiversificationNonce)); |
1381 | 1398 |
1382 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1399 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1383 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1400 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1384 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 1401 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
1385 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1402 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1386 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 1403 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
1387 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); | 1404 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
1388 | 1405 |
1389 // Now test framing boundaries. | 1406 // Now test framing boundaries. |
1390 CheckStreamFrameBoundaries( | 1407 CheckStreamFrameBoundaries( |
1391 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1408 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1392 : packet, | 1409 ? packet_cid_be |
| 1410 : packet, |
1393 kQuicMaxStreamIdSize, !kIncludeVersion); | 1411 kQuicMaxStreamIdSize, !kIncludeVersion); |
1394 } | 1412 } |
1395 | 1413 |
1396 TEST_P(QuicFramerTest, MissingDiversificationNonce) { | 1414 TEST_P(QuicFramerTest, MissingDiversificationNonce) { |
1397 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 1415 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
1398 framer_.SetDecrypter(ENCRYPTION_NONE, | 1416 framer_.SetDecrypter(ENCRYPTION_NONE, |
1399 new NullDecrypter(Perspective::IS_CLIENT)); | 1417 new NullDecrypter(Perspective::IS_CLIENT)); |
1400 decrypter_ = new test::TestDecrypter(); | 1418 decrypter_ = new test::TestDecrypter(); |
1401 framer_.SetAlternativeDecrypter(ENCRYPTION_INITIAL, decrypter_, false); | 1419 framer_.SetAlternativeDecrypter(ENCRYPTION_INITIAL, decrypter_, false); |
1402 | 1420 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1445 // data length | 1463 // data length |
1446 0x0c, 0x00, | 1464 0x0c, 0x00, |
1447 // data | 1465 // data |
1448 'h', 'e', 'l', 'l', | 1466 'h', 'e', 'l', 'l', |
1449 'o', ' ', 'w', 'o', | 1467 'o', ' ', 'w', 'o', |
1450 'r', 'l', 'd', '!', | 1468 'r', 'l', 'd', '!', |
1451 }; | 1469 }; |
1452 // clang-format on | 1470 // clang-format on |
1453 | 1471 |
1454 QuicEncryptedPacket encrypted( | 1472 QuicEncryptedPacket encrypted( |
1455 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1473 AsChars( |
1456 ? packet_cid_be | 1474 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1457 : packet), | 1475 ? packet_cid_be |
1458 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1476 : packet), |
| 1477 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1459 ? arraysize(packet_cid_be) | 1478 ? arraysize(packet_cid_be) |
1460 : arraysize(packet), | 1479 : arraysize(packet), |
1461 false); | 1480 false); |
1462 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1481 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1463 EXPECT_EQ(QUIC_DECRYPTION_FAILURE, framer_.error()); | 1482 EXPECT_EQ(QUIC_DECRYPTION_FAILURE, framer_.error()); |
1464 } | 1483 } |
1465 | 1484 |
1466 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1485 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
1467 // clang-format off | 1486 // clang-format off |
1468 unsigned char packet[] = { | 1487 unsigned char packet[] = { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 // data length | 1528 // data length |
1510 0x0c, 0x00, | 1529 0x0c, 0x00, |
1511 // data | 1530 // data |
1512 'h', 'e', 'l', 'l', | 1531 'h', 'e', 'l', 'l', |
1513 'o', ' ', 'w', 'o', | 1532 'o', ' ', 'w', 'o', |
1514 'r', 'l', 'd', '!', | 1533 'r', 'l', 'd', '!', |
1515 }; | 1534 }; |
1516 // clang-format on | 1535 // clang-format on |
1517 | 1536 |
1518 QuicEncryptedPacket encrypted( | 1537 QuicEncryptedPacket encrypted( |
1519 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1538 AsChars( |
1520 ? packet_cid_be | 1539 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1521 : packet), | 1540 ? packet_cid_be |
1522 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1541 : packet), |
| 1542 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1523 ? arraysize(packet_cid_be) | 1543 ? arraysize(packet_cid_be) |
1524 : arraysize(packet), | 1544 : arraysize(packet), |
1525 false); | 1545 false); |
1526 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1546 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1527 | 1547 |
1528 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1548 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1529 ASSERT_TRUE(visitor_.header_.get()); | 1549 ASSERT_TRUE(visitor_.header_.get()); |
1530 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1550 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1531 !kIncludeDiversificationNonce)); | 1551 !kIncludeDiversificationNonce)); |
1532 | 1552 |
1533 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1553 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1534 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1554 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1535 // Stream ID should be the last 3 bytes of kStreamId. | 1555 // Stream ID should be the last 3 bytes of kStreamId. |
1536 EXPECT_EQ(0x00FFFFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 1556 EXPECT_EQ(0x00FFFFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
1537 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1557 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1538 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 1558 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
1539 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); | 1559 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
1540 | 1560 |
1541 // Now test framing boundaries. | 1561 // Now test framing boundaries. |
1542 const size_t stream_id_size = 3; | 1562 const size_t stream_id_size = 3; |
1543 CheckStreamFrameBoundaries( | 1563 CheckStreamFrameBoundaries( |
1544 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1564 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1545 : packet, | 1565 ? packet_cid_be |
| 1566 : packet, |
1546 stream_id_size, !kIncludeVersion); | 1567 stream_id_size, !kIncludeVersion); |
1547 } | 1568 } |
1548 | 1569 |
1549 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1570 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
1550 // clang-format off | 1571 // clang-format off |
1551 unsigned char packet[] = { | 1572 unsigned char packet[] = { |
1552 // public flags (8 byte connection_id) | 1573 // public flags (8 byte connection_id) |
1553 0x38, | 1574 0x38, |
1554 // connection_id | 1575 // connection_id |
1555 0x10, 0x32, 0x54, 0x76, | 1576 0x10, 0x32, 0x54, 0x76, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1592 // data length | 1613 // data length |
1593 0x0c, 0x00, | 1614 0x0c, 0x00, |
1594 // data | 1615 // data |
1595 'h', 'e', 'l', 'l', | 1616 'h', 'e', 'l', 'l', |
1596 'o', ' ', 'w', 'o', | 1617 'o', ' ', 'w', 'o', |
1597 'r', 'l', 'd', '!', | 1618 'r', 'l', 'd', '!', |
1598 }; | 1619 }; |
1599 // clang-format on | 1620 // clang-format on |
1600 | 1621 |
1601 QuicEncryptedPacket encrypted( | 1622 QuicEncryptedPacket encrypted( |
1602 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1623 AsChars( |
1603 ? packet_cid_be | 1624 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1604 : packet), | 1625 ? packet_cid_be |
1605 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1626 : packet), |
| 1627 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1606 ? arraysize(packet_cid_be) | 1628 ? arraysize(packet_cid_be) |
1607 : arraysize(packet), | 1629 : arraysize(packet), |
1608 false); | 1630 false); |
1609 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1631 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1610 | 1632 |
1611 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1633 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1612 ASSERT_TRUE(visitor_.header_.get()); | 1634 ASSERT_TRUE(visitor_.header_.get()); |
1613 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1635 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1614 !kIncludeDiversificationNonce)); | 1636 !kIncludeDiversificationNonce)); |
1615 | 1637 |
1616 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1638 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1617 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1639 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1618 // Stream ID should be the last 2 bytes of kStreamId. | 1640 // Stream ID should be the last 2 bytes of kStreamId. |
1619 EXPECT_EQ(0x0000FFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 1641 EXPECT_EQ(0x0000FFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
1620 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1642 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1621 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 1643 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
1622 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); | 1644 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
1623 | 1645 |
1624 // Now test framing boundaries. | 1646 // Now test framing boundaries. |
1625 const size_t stream_id_size = 2; | 1647 const size_t stream_id_size = 2; |
1626 CheckStreamFrameBoundaries( | 1648 CheckStreamFrameBoundaries( |
1627 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1649 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1628 : packet, | 1650 ? packet_cid_be |
| 1651 : packet, |
1629 stream_id_size, !kIncludeVersion); | 1652 stream_id_size, !kIncludeVersion); |
1630 } | 1653 } |
1631 | 1654 |
1632 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1655 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
1633 // clang-format off | 1656 // clang-format off |
1634 unsigned char packet[] = { | 1657 unsigned char packet[] = { |
1635 // public flags (8 byte connection_id) | 1658 // public flags (8 byte connection_id) |
1636 0x38, | 1659 0x38, |
1637 // connection_id | 1660 // connection_id |
1638 0x10, 0x32, 0x54, 0x76, | 1661 0x10, 0x32, 0x54, 0x76, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1675 // data length | 1698 // data length |
1676 0x0c, 0x00, | 1699 0x0c, 0x00, |
1677 // data | 1700 // data |
1678 'h', 'e', 'l', 'l', | 1701 'h', 'e', 'l', 'l', |
1679 'o', ' ', 'w', 'o', | 1702 'o', ' ', 'w', 'o', |
1680 'r', 'l', 'd', '!', | 1703 'r', 'l', 'd', '!', |
1681 }; | 1704 }; |
1682 // clang-format on | 1705 // clang-format on |
1683 | 1706 |
1684 QuicEncryptedPacket encrypted( | 1707 QuicEncryptedPacket encrypted( |
1685 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1708 AsChars( |
1686 ? packet_cid_be | 1709 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1687 : packet), | 1710 ? packet_cid_be |
1688 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1711 : packet), |
| 1712 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1689 ? arraysize(packet_cid_be) | 1713 ? arraysize(packet_cid_be) |
1690 : arraysize(packet), | 1714 : arraysize(packet), |
1691 false); | 1715 false); |
1692 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1716 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1693 | 1717 |
1694 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1718 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1695 ASSERT_TRUE(visitor_.header_.get()); | 1719 ASSERT_TRUE(visitor_.header_.get()); |
1696 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1720 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1697 !kIncludeDiversificationNonce)); | 1721 !kIncludeDiversificationNonce)); |
1698 | 1722 |
1699 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1723 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1700 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1724 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1701 // Stream ID should be the last byte of kStreamId. | 1725 // Stream ID should be the last byte of kStreamId. |
1702 EXPECT_EQ(0x000000FF & kStreamId, visitor_.stream_frames_[0]->stream_id); | 1726 EXPECT_EQ(0x000000FF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
1703 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1727 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1704 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 1728 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
1705 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); | 1729 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
1706 | 1730 |
1707 // Now test framing boundaries. | 1731 // Now test framing boundaries. |
1708 const size_t stream_id_size = 1; | 1732 const size_t stream_id_size = 1; |
1709 CheckStreamFrameBoundaries( | 1733 CheckStreamFrameBoundaries( |
1710 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1734 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1711 : packet, | 1735 ? packet_cid_be |
| 1736 : packet, |
1712 stream_id_size, !kIncludeVersion); | 1737 stream_id_size, !kIncludeVersion); |
1713 } | 1738 } |
1714 | 1739 |
1715 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1740 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
1716 // clang-format off | 1741 // clang-format off |
1717 unsigned char packet[] = { | 1742 unsigned char packet[] = { |
1718 // public flags (version, 8 byte connection_id) | 1743 // public flags (version, 8 byte connection_id) |
1719 0x39, | 1744 0x39, |
1720 // connection_id | 1745 // connection_id |
1721 0x10, 0x32, 0x54, 0x76, | 1746 0x10, 0x32, 0x54, 0x76, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1762 // data length | 1787 // data length |
1763 0x0c, 0x00, | 1788 0x0c, 0x00, |
1764 // data | 1789 // data |
1765 'h', 'e', 'l', 'l', | 1790 'h', 'e', 'l', 'l', |
1766 'o', ' ', 'w', 'o', | 1791 'o', ' ', 'w', 'o', |
1767 'r', 'l', 'd', '!', | 1792 'r', 'l', 'd', '!', |
1768 }; | 1793 }; |
1769 // clang-format on | 1794 // clang-format on |
1770 | 1795 |
1771 QuicEncryptedPacket encrypted( | 1796 QuicEncryptedPacket encrypted( |
1772 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1797 AsChars( |
1773 ? packet_cid_be | 1798 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1774 : packet), | 1799 ? packet_cid_be |
1775 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1800 : packet), |
| 1801 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1776 ? arraysize(packet_cid_be) | 1802 ? arraysize(packet_cid_be) |
1777 : arraysize(packet), | 1803 : arraysize(packet), |
1778 false); | 1804 false); |
1779 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1805 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1780 | 1806 |
1781 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1807 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1782 ASSERT_TRUE(visitor_.header_.get()); | 1808 ASSERT_TRUE(visitor_.header_.get()); |
1783 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 1809 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
1784 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 1810 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
1785 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, | 1811 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, |
1786 !kIncludeDiversificationNonce)); | 1812 !kIncludeDiversificationNonce)); |
1787 | 1813 |
1788 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1814 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1789 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1815 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1790 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | 1816 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
1791 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1817 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1792 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | 1818 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
1793 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); | 1819 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
1794 | 1820 |
1795 // Now test framing boundaries. | 1821 // Now test framing boundaries. |
1796 CheckStreamFrameBoundaries( | 1822 CheckStreamFrameBoundaries( |
1797 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 1823 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1798 : packet, | 1824 ? packet_cid_be |
| 1825 : packet, |
1799 kQuicMaxStreamIdSize, kIncludeVersion); | 1826 kQuicMaxStreamIdSize, kIncludeVersion); |
1800 } | 1827 } |
1801 | 1828 |
1802 TEST_P(QuicFramerTest, RejectPacket) { | 1829 TEST_P(QuicFramerTest, RejectPacket) { |
1803 visitor_.accept_packet_ = false; | 1830 visitor_.accept_packet_ = false; |
1804 | 1831 |
1805 // clang-format off | 1832 // clang-format off |
1806 unsigned char packet[] = { | 1833 unsigned char packet[] = { |
1807 // public flags (8 byte connection_id) | 1834 // public flags (8 byte connection_id) |
1808 0x38, | 1835 0x38, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1847 // data length | 1874 // data length |
1848 0x0c, 0x00, | 1875 0x0c, 0x00, |
1849 // data | 1876 // data |
1850 'h', 'e', 'l', 'l', | 1877 'h', 'e', 'l', 'l', |
1851 'o', ' ', 'w', 'o', | 1878 'o', ' ', 'w', 'o', |
1852 'r', 'l', 'd', '!', | 1879 'r', 'l', 'd', '!', |
1853 }; | 1880 }; |
1854 // clang-format on | 1881 // clang-format on |
1855 | 1882 |
1856 QuicEncryptedPacket encrypted( | 1883 QuicEncryptedPacket encrypted( |
1857 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1884 AsChars( |
1858 ? packet_cid_be | 1885 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1859 : packet), | 1886 ? packet_cid_be |
1860 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1887 : packet), |
| 1888 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1861 ? arraysize(packet_cid_be) | 1889 ? arraysize(packet_cid_be) |
1862 : arraysize(packet), | 1890 : arraysize(packet), |
1863 false); | 1891 false); |
1864 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1892 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1865 | 1893 |
1866 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1894 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1867 ASSERT_TRUE(visitor_.header_.get()); | 1895 ASSERT_TRUE(visitor_.header_.get()); |
1868 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1896 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1869 !kIncludeDiversificationNonce)); | 1897 !kIncludeDiversificationNonce)); |
1870 | 1898 |
(...skipping 14 matching lines...) Expand all Loading... |
1885 | 1913 |
1886 unsigned char packet_cid_be[] = { | 1914 unsigned char packet_cid_be[] = { |
1887 // public flags (8 byte connection_id) | 1915 // public flags (8 byte connection_id) |
1888 0x38, | 1916 0x38, |
1889 // connection_id | 1917 // connection_id |
1890 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 1918 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
1891 }; | 1919 }; |
1892 // clang-format on | 1920 // clang-format on |
1893 | 1921 |
1894 QuicEncryptedPacket encrypted( | 1922 QuicEncryptedPacket encrypted( |
1895 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1923 AsChars( |
1896 ? packet_cid_be | 1924 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1897 : packet), | 1925 ? packet_cid_be |
1898 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1926 : packet), |
| 1927 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1899 ? arraysize(packet_cid_be) | 1928 ? arraysize(packet_cid_be) |
1900 : arraysize(packet), | 1929 : arraysize(packet), |
1901 false); | 1930 false); |
1902 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1931 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1903 | 1932 |
1904 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1933 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1905 ASSERT_TRUE(visitor_.public_header_.get()); | 1934 ASSERT_TRUE(visitor_.public_header_.get()); |
1906 ASSERT_FALSE(visitor_.header_.get()); | 1935 ASSERT_FALSE(visitor_.header_.get()); |
1907 } | 1936 } |
1908 | 1937 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1945 // Zero delta time. | 1974 // Zero delta time. |
1946 0x00, 0x00, | 1975 0x00, 0x00, |
1947 // first ack block length. | 1976 // first ack block length. |
1948 0x34, 0x12, | 1977 0x34, 0x12, |
1949 // num timestamps. | 1978 // num timestamps. |
1950 0x00, | 1979 0x00, |
1951 }; | 1980 }; |
1952 // clang-format on | 1981 // clang-format on |
1953 | 1982 |
1954 QuicEncryptedPacket encrypted( | 1983 QuicEncryptedPacket encrypted( |
1955 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1984 AsChars( |
1956 ? packet_cid_be | 1985 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1957 : packet), | 1986 ? packet_cid_be |
1958 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 1987 : packet), |
| 1988 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1959 ? arraysize(packet_cid_be) | 1989 ? arraysize(packet_cid_be) |
1960 : arraysize(packet), | 1990 : arraysize(packet), |
1961 false); | 1991 false); |
1962 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1992 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1963 | 1993 |
1964 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1994 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1965 ASSERT_TRUE(visitor_.header_.get()); | 1995 ASSERT_TRUE(visitor_.header_.get()); |
1966 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 1996 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
1967 !kIncludeDiversificationNonce)); | 1997 !kIncludeDiversificationNonce)); |
1968 | 1998 |
(...skipping 18 matching lines...) Expand all Loading... |
1987 if (i < kLargestAckedDeltaTimeOffset) { | 2017 if (i < kLargestAckedDeltaTimeOffset) { |
1988 expected_error = "Unable to read largest acked."; | 2018 expected_error = "Unable to read largest acked."; |
1989 } else if (i < kFirstAckBlockLengthOffset) { | 2019 } else if (i < kFirstAckBlockLengthOffset) { |
1990 expected_error = "Unable to read ack delay time."; | 2020 expected_error = "Unable to read ack delay time."; |
1991 } else if (i < kNumTimestampsOffset) { | 2021 } else if (i < kNumTimestampsOffset) { |
1992 expected_error = "Unable to read first ack block length."; | 2022 expected_error = "Unable to read first ack block length."; |
1993 } else { | 2023 } else { |
1994 expected_error = "Unable to read num received packets."; | 2024 expected_error = "Unable to read num received packets."; |
1995 } | 2025 } |
1996 CheckProcessingFails( | 2026 CheckProcessingFails( |
1997 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2027 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
1998 : packet, | 2028 ? packet_cid_be |
| 2029 : packet, |
1999 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2030 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2000 !kIncludeVersion, !kIncludeDiversificationNonce, | 2031 !kIncludeVersion, !kIncludeDiversificationNonce, |
2001 PACKET_6BYTE_PACKET_NUMBER), | 2032 PACKET_6BYTE_PACKET_NUMBER), |
2002 expected_error, QUIC_INVALID_ACK_DATA); | 2033 expected_error, QUIC_INVALID_ACK_DATA); |
2003 } | 2034 } |
2004 } | 2035 } |
2005 | 2036 |
2006 TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) { | 2037 TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) { |
2007 // clang-format off | 2038 // clang-format off |
2008 unsigned char packet[] = { | 2039 unsigned char packet[] = { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2094 // Delta time. | 2125 // Delta time. |
2095 0x10, 0x32, 0x54, 0x76, | 2126 0x10, 0x32, 0x54, 0x76, |
2096 // Delta from largest observed. | 2127 // Delta from largest observed. |
2097 0x02, | 2128 0x02, |
2098 // Delta time. | 2129 // Delta time. |
2099 0x10, 0x32, | 2130 0x10, 0x32, |
2100 }; | 2131 }; |
2101 // clang-format on | 2132 // clang-format on |
2102 | 2133 |
2103 QuicEncryptedPacket encrypted( | 2134 QuicEncryptedPacket encrypted( |
2104 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2135 AsChars( |
2105 ? packet_cid_be | 2136 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2106 : packet), | 2137 ? packet_cid_be |
2107 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2138 : packet), |
| 2139 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2108 ? arraysize(packet_cid_be) | 2140 ? arraysize(packet_cid_be) |
2109 : arraysize(packet), | 2141 : arraysize(packet), |
2110 false); | 2142 false); |
2111 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2143 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2112 | 2144 |
2113 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2145 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2114 ASSERT_TRUE(visitor_.header_.get()); | 2146 ASSERT_TRUE(visitor_.header_.get()); |
2115 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2147 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2116 !kIncludeDiversificationNonce)); | 2148 !kIncludeDiversificationNonce)); |
2117 | 2149 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2187 } else if (i < kTimestampDeltaLargestObserved2) { | 2219 } else if (i < kTimestampDeltaLargestObserved2) { |
2188 expected_error = "Unable to read time delta in received packets."; | 2220 expected_error = "Unable to read time delta in received packets."; |
2189 } else if (i < kTimestampTimeDeltaLargestObserved2) { | 2221 } else if (i < kTimestampTimeDeltaLargestObserved2) { |
2190 expected_error = "Unable to read sequence delta in received packets."; | 2222 expected_error = "Unable to read sequence delta in received packets."; |
2191 } else { | 2223 } else { |
2192 expected_error = | 2224 expected_error = |
2193 "Unable to read incremental time delta in received packets."; | 2225 "Unable to read incremental time delta in received packets."; |
2194 } | 2226 } |
2195 | 2227 |
2196 CheckProcessingFails( | 2228 CheckProcessingFails( |
2197 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2229 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2198 : packet, | 2230 ? packet_cid_be |
| 2231 : packet, |
2199 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2232 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2200 !kIncludeVersion, !kIncludeDiversificationNonce, | 2233 !kIncludeVersion, !kIncludeDiversificationNonce, |
2201 PACKET_6BYTE_PACKET_NUMBER), | 2234 PACKET_6BYTE_PACKET_NUMBER), |
2202 expected_error, QUIC_INVALID_ACK_DATA); | 2235 expected_error, QUIC_INVALID_ACK_DATA); |
2203 } | 2236 } |
2204 } | 2237 } |
2205 | 2238 |
2206 TEST_P(QuicFramerTest, NewStopWaitingFrame) { | 2239 TEST_P(QuicFramerTest, NewStopWaitingFrame) { |
2207 // clang-format off | 2240 // clang-format off |
2208 unsigned char packet[] = { | 2241 unsigned char packet[] = { |
(...skipping 22 matching lines...) Expand all Loading... |
2231 0x34, 0x12, | 2264 0x34, 0x12, |
2232 // frame type (stop waiting frame) | 2265 // frame type (stop waiting frame) |
2233 0x06, | 2266 0x06, |
2234 // least packet number awaiting an ack, delta from packet number. | 2267 // least packet number awaiting an ack, delta from packet number. |
2235 0x08, 0x00, 0x00, 0x00, | 2268 0x08, 0x00, 0x00, 0x00, |
2236 0x00, 0x00, | 2269 0x00, 0x00, |
2237 }; | 2270 }; |
2238 // clang-format on | 2271 // clang-format on |
2239 | 2272 |
2240 QuicEncryptedPacket encrypted( | 2273 QuicEncryptedPacket encrypted( |
2241 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2274 AsChars( |
2242 ? packet_cid_be | 2275 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2243 : packet), | 2276 ? packet_cid_be |
2244 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2277 : packet), |
| 2278 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2245 ? arraysize(packet_cid_be) | 2279 ? arraysize(packet_cid_be) |
2246 : arraysize(packet), | 2280 : arraysize(packet), |
2247 false); | 2281 false); |
2248 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2282 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2249 | 2283 |
2250 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2284 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2251 ASSERT_TRUE(visitor_.header_.get()); | 2285 ASSERT_TRUE(visitor_.header_.get()); |
2252 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2286 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2253 !kIncludeDiversificationNonce)); | 2287 !kIncludeDiversificationNonce)); |
2254 | 2288 |
2255 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2289 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
2256 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); | 2290 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); |
2257 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; | 2291 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; |
2258 EXPECT_EQ(kLeastUnacked, frame.least_unacked); | 2292 EXPECT_EQ(kLeastUnacked, frame.least_unacked); |
2259 | 2293 |
2260 const size_t frame_size = 7; | 2294 const size_t frame_size = 7; |
2261 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2295 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
2262 string expected_error; | 2296 string expected_error; |
2263 expected_error = "Unable to read least unacked delta."; | 2297 expected_error = "Unable to read least unacked delta."; |
2264 CheckProcessingFails( | 2298 CheckProcessingFails( |
2265 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2299 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2266 : packet, | 2300 ? packet_cid_be |
| 2301 : packet, |
2267 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2302 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2268 !kIncludeVersion, !kIncludeDiversificationNonce, | 2303 !kIncludeVersion, !kIncludeDiversificationNonce, |
2269 PACKET_6BYTE_PACKET_NUMBER), | 2304 PACKET_6BYTE_PACKET_NUMBER), |
2270 expected_error, QUIC_INVALID_STOP_WAITING_DATA); | 2305 expected_error, QUIC_INVALID_STOP_WAITING_DATA); |
2271 } | 2306 } |
2272 } | 2307 } |
2273 | 2308 |
2274 TEST_P(QuicFramerTest, RstStreamFrameQuic) { | 2309 TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
2275 // clang-format off | 2310 // clang-format off |
2276 unsigned char packet[] = { | 2311 unsigned char packet[] = { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2313 // sent byte offset | 2348 // sent byte offset |
2314 0x54, 0x76, 0x10, 0x32, | 2349 0x54, 0x76, 0x10, 0x32, |
2315 0xDC, 0xFE, 0x98, 0xBA, | 2350 0xDC, 0xFE, 0x98, 0xBA, |
2316 | 2351 |
2317 // error code | 2352 // error code |
2318 0x01, 0x00, 0x00, 0x00, | 2353 0x01, 0x00, 0x00, 0x00, |
2319 }; | 2354 }; |
2320 // clang-format on | 2355 // clang-format on |
2321 | 2356 |
2322 QuicEncryptedPacket encrypted( | 2357 QuicEncryptedPacket encrypted( |
2323 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2358 AsChars( |
2324 ? packet_cid_be | 2359 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2325 : packet), | 2360 ? packet_cid_be |
2326 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2361 : packet), |
| 2362 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2327 ? arraysize(packet_cid_be) | 2363 ? arraysize(packet_cid_be) |
2328 : arraysize(packet), | 2364 : arraysize(packet), |
2329 false); | 2365 false); |
2330 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2366 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2331 | 2367 |
2332 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2368 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2333 ASSERT_TRUE(visitor_.header_.get()); | 2369 ASSERT_TRUE(visitor_.header_.get()); |
2334 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2370 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2335 !kIncludeDiversificationNonce)); | 2371 !kIncludeDiversificationNonce)); |
2336 | 2372 |
2337 EXPECT_EQ(kStreamId, visitor_.rst_stream_frame_.stream_id); | 2373 EXPECT_EQ(kStreamId, visitor_.rst_stream_frame_.stream_id); |
2338 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2374 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); |
2339 EXPECT_EQ(kStreamOffset, visitor_.rst_stream_frame_.byte_offset); | 2375 EXPECT_EQ(kStreamOffset, visitor_.rst_stream_frame_.byte_offset); |
2340 | 2376 |
2341 // Now test framing boundaries. | 2377 // Now test framing boundaries. |
2342 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); | 2378 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); |
2343 ++i) { | 2379 ++i) { |
2344 string expected_error; | 2380 string expected_error; |
2345 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2381 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
2346 expected_error = "Unable to read stream_id."; | 2382 expected_error = "Unable to read stream_id."; |
2347 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2383 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
2348 kQuicMaxStreamOffsetSize) { | 2384 kQuicMaxStreamOffsetSize) { |
2349 expected_error = "Unable to read rst stream sent byte offset."; | 2385 expected_error = "Unable to read rst stream sent byte offset."; |
2350 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2386 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
2351 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { | 2387 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { |
2352 expected_error = "Unable to read rst stream error code."; | 2388 expected_error = "Unable to read rst stream error code."; |
2353 } | 2389 } |
2354 CheckProcessingFails( | 2390 CheckProcessingFails( |
2355 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2391 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2356 : packet, | 2392 ? packet_cid_be |
| 2393 : packet, |
2357 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2394 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2358 !kIncludeVersion, !kIncludeDiversificationNonce, | 2395 !kIncludeVersion, !kIncludeDiversificationNonce, |
2359 PACKET_6BYTE_PACKET_NUMBER), | 2396 PACKET_6BYTE_PACKET_NUMBER), |
2360 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 2397 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
2361 } | 2398 } |
2362 } | 2399 } |
2363 | 2400 |
2364 TEST_P(QuicFramerTest, ConnectionCloseFrame) { | 2401 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
2365 // clang-format off | 2402 // clang-format off |
2366 unsigned char packet[] = { | 2403 unsigned char packet[] = { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2405 0x0d, 0x00, | 2442 0x0d, 0x00, |
2406 // error details | 2443 // error details |
2407 'b', 'e', 'c', 'a', | 2444 'b', 'e', 'c', 'a', |
2408 'u', 's', 'e', ' ', | 2445 'u', 's', 'e', ' ', |
2409 'I', ' ', 'c', 'a', | 2446 'I', ' ', 'c', 'a', |
2410 'n', | 2447 'n', |
2411 }; | 2448 }; |
2412 // clang-format on | 2449 // clang-format on |
2413 | 2450 |
2414 QuicEncryptedPacket encrypted( | 2451 QuicEncryptedPacket encrypted( |
2415 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2452 AsChars( |
2416 ? packet_cid_be | 2453 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2417 : packet), | 2454 ? packet_cid_be |
2418 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2455 : packet), |
| 2456 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2419 ? arraysize(packet_cid_be) | 2457 ? arraysize(packet_cid_be) |
2420 : arraysize(packet), | 2458 : arraysize(packet), |
2421 false); | 2459 false); |
2422 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2460 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2423 | 2461 |
2424 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2462 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2425 ASSERT_TRUE(visitor_.header_.get()); | 2463 ASSERT_TRUE(visitor_.header_.get()); |
2426 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2464 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2427 !kIncludeDiversificationNonce)); | 2465 !kIncludeDiversificationNonce)); |
2428 | 2466 |
2429 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2467 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
2430 | 2468 |
2431 EXPECT_EQ(0x11, visitor_.connection_close_frame_.error_code); | 2469 EXPECT_EQ(0x11, visitor_.connection_close_frame_.error_code); |
2432 EXPECT_EQ("because I can", visitor_.connection_close_frame_.error_details); | 2470 EXPECT_EQ("because I can", visitor_.connection_close_frame_.error_details); |
2433 | 2471 |
2434 ASSERT_EQ(0u, visitor_.ack_frames_.size()); | 2472 ASSERT_EQ(0u, visitor_.ack_frames_.size()); |
2435 | 2473 |
2436 // Now test framing boundaries. | 2474 // Now test framing boundaries. |
2437 for (size_t i = kQuicFrameTypeSize; | 2475 for (size_t i = kQuicFrameTypeSize; |
2438 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { | 2476 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { |
2439 string expected_error; | 2477 string expected_error; |
2440 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2478 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
2441 expected_error = "Unable to read connection close error code."; | 2479 expected_error = "Unable to read connection close error code."; |
2442 } else { | 2480 } else { |
2443 expected_error = "Unable to read connection close error details."; | 2481 expected_error = "Unable to read connection close error details."; |
2444 } | 2482 } |
2445 CheckProcessingFails( | 2483 CheckProcessingFails( |
2446 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2484 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2447 : packet, | 2485 ? packet_cid_be |
| 2486 : packet, |
2448 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2487 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2449 !kIncludeVersion, !kIncludeDiversificationNonce, | 2488 !kIncludeVersion, !kIncludeDiversificationNonce, |
2450 PACKET_6BYTE_PACKET_NUMBER), | 2489 PACKET_6BYTE_PACKET_NUMBER), |
2451 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 2490 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
2452 } | 2491 } |
2453 } | 2492 } |
2454 | 2493 |
2455 TEST_P(QuicFramerTest, GoAwayFrame) { | 2494 TEST_P(QuicFramerTest, GoAwayFrame) { |
2456 // clang-format off | 2495 // clang-format off |
2457 unsigned char packet[] = { | 2496 unsigned char packet[] = { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2498 0x0d, 0x00, | 2537 0x0d, 0x00, |
2499 // error details | 2538 // error details |
2500 'b', 'e', 'c', 'a', | 2539 'b', 'e', 'c', 'a', |
2501 'u', 's', 'e', ' ', | 2540 'u', 's', 'e', ' ', |
2502 'I', ' ', 'c', 'a', | 2541 'I', ' ', 'c', 'a', |
2503 'n', | 2542 'n', |
2504 }; | 2543 }; |
2505 // clang-format on | 2544 // clang-format on |
2506 | 2545 |
2507 QuicEncryptedPacket encrypted( | 2546 QuicEncryptedPacket encrypted( |
2508 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2547 AsChars( |
2509 ? packet_cid_be | 2548 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2510 : packet), | 2549 ? packet_cid_be |
2511 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2550 : packet), |
| 2551 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2512 ? arraysize(packet_cid_be) | 2552 ? arraysize(packet_cid_be) |
2513 : arraysize(packet), | 2553 : arraysize(packet), |
2514 false); | 2554 false); |
2515 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2555 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2516 | 2556 |
2517 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2557 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2518 ASSERT_TRUE(visitor_.header_.get()); | 2558 ASSERT_TRUE(visitor_.header_.get()); |
2519 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2559 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2520 !kIncludeDiversificationNonce)); | 2560 !kIncludeDiversificationNonce)); |
2521 | 2561 |
2522 EXPECT_EQ(kStreamId, visitor_.goaway_frame_.last_good_stream_id); | 2562 EXPECT_EQ(kStreamId, visitor_.goaway_frame_.last_good_stream_id); |
2523 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 2563 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); |
2524 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 2564 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); |
2525 | 2565 |
2526 const size_t reason_size = arraysize("because I can") - 1; | 2566 const size_t reason_size = arraysize("because I can") - 1; |
2527 // Now test framing boundaries. | 2567 // Now test framing boundaries. |
2528 for (size_t i = kQuicFrameTypeSize; | 2568 for (size_t i = kQuicFrameTypeSize; |
2529 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 2569 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { |
2530 string expected_error; | 2570 string expected_error; |
2531 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2571 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
2532 expected_error = "Unable to read go away error code."; | 2572 expected_error = "Unable to read go away error code."; |
2533 } else if (i < | 2573 } else if (i < |
2534 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { | 2574 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { |
2535 expected_error = "Unable to read last good stream id."; | 2575 expected_error = "Unable to read last good stream id."; |
2536 } else { | 2576 } else { |
2537 expected_error = "Unable to read goaway reason."; | 2577 expected_error = "Unable to read goaway reason."; |
2538 } | 2578 } |
2539 CheckProcessingFails( | 2579 CheckProcessingFails( |
2540 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2580 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2541 : packet, | 2581 ? packet_cid_be |
| 2582 : packet, |
2542 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2583 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2543 !kIncludeVersion, !kIncludeDiversificationNonce, | 2584 !kIncludeVersion, !kIncludeDiversificationNonce, |
2544 PACKET_6BYTE_PACKET_NUMBER), | 2585 PACKET_6BYTE_PACKET_NUMBER), |
2545 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2586 expected_error, QUIC_INVALID_GOAWAY_DATA); |
2546 } | 2587 } |
2547 } | 2588 } |
2548 | 2589 |
2549 TEST_P(QuicFramerTest, WindowUpdateFrame) { | 2590 TEST_P(QuicFramerTest, WindowUpdateFrame) { |
2550 // clang-format off | 2591 // clang-format off |
2551 unsigned char packet[] = { | 2592 unsigned char packet[] = { |
(...skipping 28 matching lines...) Expand all Loading... |
2580 0x04, | 2621 0x04, |
2581 // stream id | 2622 // stream id |
2582 0x04, 0x03, 0x02, 0x01, | 2623 0x04, 0x03, 0x02, 0x01, |
2583 // byte offset | 2624 // byte offset |
2584 0x54, 0x76, 0x10, 0x32, | 2625 0x54, 0x76, 0x10, 0x32, |
2585 0xDC, 0xFE, 0x98, 0xBA, | 2626 0xDC, 0xFE, 0x98, 0xBA, |
2586 }; | 2627 }; |
2587 // clang-format on | 2628 // clang-format on |
2588 | 2629 |
2589 QuicEncryptedPacket encrypted( | 2630 QuicEncryptedPacket encrypted( |
2590 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2631 AsChars( |
2591 ? packet_cid_be | 2632 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2592 : packet), | 2633 ? packet_cid_be |
2593 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2634 : packet), |
| 2635 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2594 ? arraysize(packet_cid_be) | 2636 ? arraysize(packet_cid_be) |
2595 : arraysize(packet), | 2637 : arraysize(packet), |
2596 false); | 2638 false); |
2597 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2639 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2598 | 2640 |
2599 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2641 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2600 ASSERT_TRUE(visitor_.header_.get()); | 2642 ASSERT_TRUE(visitor_.header_.get()); |
2601 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2643 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2602 !kIncludeDiversificationNonce)); | 2644 !kIncludeDiversificationNonce)); |
2603 | 2645 |
2604 EXPECT_EQ(kStreamId, visitor_.window_update_frame_.stream_id); | 2646 EXPECT_EQ(kStreamId, visitor_.window_update_frame_.stream_id); |
2605 EXPECT_EQ(kStreamOffset, visitor_.window_update_frame_.byte_offset); | 2647 EXPECT_EQ(kStreamOffset, visitor_.window_update_frame_.byte_offset); |
2606 | 2648 |
2607 // Now test framing boundaries. | 2649 // Now test framing boundaries. |
2608 for (size_t i = kQuicFrameTypeSize; | 2650 for (size_t i = kQuicFrameTypeSize; |
2609 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2651 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
2610 string expected_error; | 2652 string expected_error; |
2611 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2653 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
2612 expected_error = "Unable to read stream_id."; | 2654 expected_error = "Unable to read stream_id."; |
2613 } else { | 2655 } else { |
2614 expected_error = "Unable to read window byte_offset."; | 2656 expected_error = "Unable to read window byte_offset."; |
2615 } | 2657 } |
2616 CheckProcessingFails( | 2658 CheckProcessingFails( |
2617 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2659 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2618 : packet, | 2660 ? packet_cid_be |
| 2661 : packet, |
2619 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2662 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2620 !kIncludeVersion, !kIncludeDiversificationNonce, | 2663 !kIncludeVersion, !kIncludeDiversificationNonce, |
2621 PACKET_6BYTE_PACKET_NUMBER), | 2664 PACKET_6BYTE_PACKET_NUMBER), |
2622 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); | 2665 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); |
2623 } | 2666 } |
2624 } | 2667 } |
2625 | 2668 |
2626 TEST_P(QuicFramerTest, BlockedFrame) { | 2669 TEST_P(QuicFramerTest, BlockedFrame) { |
2627 // clang-format off | 2670 // clang-format off |
2628 unsigned char packet[] = { | 2671 unsigned char packet[] = { |
(...skipping 22 matching lines...) Expand all Loading... |
2651 0x34, 0x12, | 2694 0x34, 0x12, |
2652 | 2695 |
2653 // frame type (blocked frame) | 2696 // frame type (blocked frame) |
2654 0x05, | 2697 0x05, |
2655 // stream id | 2698 // stream id |
2656 0x04, 0x03, 0x02, 0x01, | 2699 0x04, 0x03, 0x02, 0x01, |
2657 }; | 2700 }; |
2658 // clang-format on | 2701 // clang-format on |
2659 | 2702 |
2660 QuicEncryptedPacket encrypted( | 2703 QuicEncryptedPacket encrypted( |
2661 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2704 AsChars( |
2662 ? packet_cid_be | 2705 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2663 : packet), | 2706 ? packet_cid_be |
2664 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2707 : packet), |
| 2708 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2665 ? arraysize(packet_cid_be) | 2709 ? arraysize(packet_cid_be) |
2666 : arraysize(packet), | 2710 : arraysize(packet), |
2667 false); | 2711 false); |
2668 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2712 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2669 | 2713 |
2670 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2714 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2671 ASSERT_TRUE(visitor_.header_.get()); | 2715 ASSERT_TRUE(visitor_.header_.get()); |
2672 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2716 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2673 !kIncludeDiversificationNonce)); | 2717 !kIncludeDiversificationNonce)); |
2674 | 2718 |
2675 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); | 2719 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); |
2676 | 2720 |
2677 // Now test framing boundaries. | 2721 // Now test framing boundaries. |
2678 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2722 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
2679 ++i) { | 2723 ++i) { |
2680 string expected_error = "Unable to read stream_id."; | 2724 string expected_error = "Unable to read stream_id."; |
2681 CheckProcessingFails( | 2725 CheckProcessingFails( |
2682 FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 2726 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2683 : packet, | 2727 ? packet_cid_be |
| 2728 : packet, |
2684 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2729 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2685 !kIncludeVersion, !kIncludeDiversificationNonce, | 2730 !kIncludeVersion, !kIncludeDiversificationNonce, |
2686 PACKET_6BYTE_PACKET_NUMBER), | 2731 PACKET_6BYTE_PACKET_NUMBER), |
2687 expected_error, QUIC_INVALID_BLOCKED_DATA); | 2732 expected_error, QUIC_INVALID_BLOCKED_DATA); |
2688 } | 2733 } |
2689 } | 2734 } |
2690 | 2735 |
2691 TEST_P(QuicFramerTest, PingFrame) { | 2736 TEST_P(QuicFramerTest, PingFrame) { |
2692 // clang-format off | 2737 // clang-format off |
2693 unsigned char packet[] = { | 2738 unsigned char packet[] = { |
(...skipping 18 matching lines...) Expand all Loading... |
2712 // packet number | 2757 // packet number |
2713 0xBC, 0x9A, 0x78, 0x56, | 2758 0xBC, 0x9A, 0x78, 0x56, |
2714 0x34, 0x12, | 2759 0x34, 0x12, |
2715 | 2760 |
2716 // frame type (ping frame) | 2761 // frame type (ping frame) |
2717 0x07, | 2762 0x07, |
2718 }; | 2763 }; |
2719 // clang-format on | 2764 // clang-format on |
2720 | 2765 |
2721 QuicEncryptedPacket encrypted( | 2766 QuicEncryptedPacket encrypted( |
2722 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2767 AsChars( |
2723 ? packet_cid_be | 2768 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2724 : packet), | 2769 ? packet_cid_be |
2725 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2770 : packet), |
| 2771 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2726 ? arraysize(packet_cid_be) | 2772 ? arraysize(packet_cid_be) |
2727 : arraysize(packet), | 2773 : arraysize(packet), |
2728 false); | 2774 false); |
2729 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2775 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2730 | 2776 |
2731 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2777 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2732 ASSERT_TRUE(visitor_.header_.get()); | 2778 ASSERT_TRUE(visitor_.header_.get()); |
2733 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, | 2779 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, |
2734 !kIncludeDiversificationNonce)); | 2780 !kIncludeDiversificationNonce)); |
2735 | 2781 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2786 // nonce proof | 2832 // nonce proof |
2787 0x89, 0x67, 0x45, 0x23, | 2833 0x89, 0x67, 0x45, 0x23, |
2788 0x01, 0xEF, 0xCD, 0xAB, | 2834 0x01, 0xEF, 0xCD, 0xAB, |
2789 // rejected packet number | 2835 // rejected packet number |
2790 0xBC, 0x9A, 0x78, 0x56, | 2836 0xBC, 0x9A, 0x78, 0x56, |
2791 0x34, 0x12, 0x00, 0x00, | 2837 0x34, 0x12, 0x00, 0x00, |
2792 }; | 2838 }; |
2793 // clang-format on | 2839 // clang-format on |
2794 | 2840 |
2795 QuicEncryptedPacket encrypted( | 2841 QuicEncryptedPacket encrypted( |
2796 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2842 AsChars( |
2797 ? packet_cid_be | 2843 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2798 : packet), | 2844 ? packet_cid_be |
2799 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2845 : packet), |
| 2846 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2800 ? arraysize(packet_cid_be) | 2847 ? arraysize(packet_cid_be) |
2801 : arraysize(packet), | 2848 : arraysize(packet), |
2802 false); | 2849 false); |
2803 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2850 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2804 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2851 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
2805 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2852 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
2806 EXPECT_EQ(kConnectionId, | 2853 EXPECT_EQ(kConnectionId, |
2807 visitor_.public_reset_packet_->public_header.connection_id); | 2854 visitor_.public_reset_packet_->public_header.connection_id); |
2808 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2855 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
2809 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2856 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
2810 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 2857 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
2811 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); | 2858 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); |
2812 EXPECT_EQ( | 2859 EXPECT_EQ( |
2813 IpAddressFamily::IP_UNSPEC, | 2860 IpAddressFamily::IP_UNSPEC, |
2814 visitor_.public_reset_packet_->client_address.host().address_family()); | 2861 visitor_.public_reset_packet_->client_address.host().address_family()); |
2815 | 2862 |
2816 // Now test framing boundaries. | 2863 // Now test framing boundaries. |
2817 if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { | 2864 if (!QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())) { |
2818 for (size_t i = 0; i < arraysize(packet); ++i) { | 2865 for (size_t i = 0; i < arraysize(packet); ++i) { |
2819 string expected_error; | 2866 string expected_error; |
2820 QUIC_DLOG(INFO) << "iteration: " << i; | 2867 QUIC_DLOG(INFO) << "iteration: " << i; |
2821 if (i < kConnectionIdOffset) { | 2868 if (i < kConnectionIdOffset) { |
2822 expected_error = "Unable to read public flags."; | 2869 expected_error = "Unable to read public flags."; |
2823 CheckProcessingFails(packet, i, expected_error, | 2870 CheckProcessingFails(packet, i, expected_error, |
2824 QUIC_INVALID_PACKET_HEADER); | 2871 QUIC_INVALID_PACKET_HEADER); |
2825 } else if (i < kPublicResetPacketMessageTagOffset) { | 2872 } else if (i < kPublicResetPacketMessageTagOffset) { |
2826 expected_error = "Unable to read ConnectionId."; | 2873 expected_error = "Unable to read ConnectionId."; |
2827 CheckProcessingFails(packet, i, expected_error, | 2874 CheckProcessingFails(packet, i, expected_error, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2904 // nonce proof | 2951 // nonce proof |
2905 0x89, 0x67, 0x45, 0x23, | 2952 0x89, 0x67, 0x45, 0x23, |
2906 0x01, 0xEF, 0xCD, 0xAB, | 2953 0x01, 0xEF, 0xCD, 0xAB, |
2907 // rejected packet number | 2954 // rejected packet number |
2908 0xBC, 0x9A, 0x78, 0x56, | 2955 0xBC, 0x9A, 0x78, 0x56, |
2909 0x34, 0x12, 0x00, 0x00, | 2956 0x34, 0x12, 0x00, 0x00, |
2910 }; | 2957 }; |
2911 // clang-format on | 2958 // clang-format on |
2912 | 2959 |
2913 QuicEncryptedPacket encrypted( | 2960 QuicEncryptedPacket encrypted( |
2914 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2961 AsChars( |
2915 ? packet_cid_be | 2962 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2916 : packet), | 2963 ? packet_cid_be |
2917 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 2964 : packet), |
| 2965 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
2918 ? arraysize(packet_cid_be) | 2966 ? arraysize(packet_cid_be) |
2919 : arraysize(packet), | 2967 : arraysize(packet), |
2920 false); | 2968 false); |
2921 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2969 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2922 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2970 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
2923 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2971 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
2924 EXPECT_EQ(kConnectionId, | 2972 EXPECT_EQ(kConnectionId, |
2925 visitor_.public_reset_packet_->public_header.connection_id); | 2973 visitor_.public_reset_packet_->public_header.connection_id); |
2926 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2974 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
2927 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2975 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
2928 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 2976 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
2929 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); | 2977 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); |
2930 EXPECT_EQ( | 2978 EXPECT_EQ( |
2931 IpAddressFamily::IP_UNSPEC, | 2979 IpAddressFamily::IP_UNSPEC, |
2932 visitor_.public_reset_packet_->client_address.host().address_family()); | 2980 visitor_.public_reset_packet_->client_address.host().address_family()); |
2933 | 2981 |
2934 // Now test framing boundaries. | 2982 // Now test framing boundaries. |
2935 if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { | 2983 if (!QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())) { |
2936 for (size_t i = 0; i < arraysize(packet); ++i) { | 2984 for (size_t i = 0; i < arraysize(packet); ++i) { |
2937 string expected_error; | 2985 string expected_error; |
2938 QUIC_DLOG(INFO) << "iteration: " << i; | 2986 QUIC_DLOG(INFO) << "iteration: " << i; |
2939 if (i < kConnectionIdOffset) { | 2987 if (i < kConnectionIdOffset) { |
2940 expected_error = "Unable to read public flags."; | 2988 expected_error = "Unable to read public flags."; |
2941 CheckProcessingFails(packet, i, expected_error, | 2989 CheckProcessingFails(packet, i, expected_error, |
2942 QUIC_INVALID_PACKET_HEADER); | 2990 QUIC_INVALID_PACKET_HEADER); |
2943 } else if (i < kPublicResetPacketMessageTagOffset) { | 2991 } else if (i < kPublicResetPacketMessageTagOffset) { |
2944 expected_error = "Unable to read ConnectionId."; | 2992 expected_error = "Unable to read ConnectionId."; |
2945 CheckProcessingFails(packet, i, expected_error, | 2993 CheckProcessingFails(packet, i, expected_error, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3024 0x01, 0xEF, 0xCD, 0xAB, | 3072 0x01, 0xEF, 0xCD, 0xAB, |
3025 // rejected packet number | 3073 // rejected packet number |
3026 0xBC, 0x9A, 0x78, 0x56, | 3074 0xBC, 0x9A, 0x78, 0x56, |
3027 0x34, 0x12, 0x00, 0x00, | 3075 0x34, 0x12, 0x00, 0x00, |
3028 // trailing junk | 3076 // trailing junk |
3029 'j', 'u', 'n', 'k', | 3077 'j', 'u', 'n', 'k', |
3030 }; | 3078 }; |
3031 // clang-format on | 3079 // clang-format on |
3032 | 3080 |
3033 string expected_error = "Unable to read reset message."; | 3081 string expected_error = "Unable to read reset message."; |
3034 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3082 CheckProcessingFails( |
3035 ? packet_cid_be | 3083 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3036 : packet, | 3084 ? packet_cid_be |
3037 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3085 : packet, |
3038 ? arraysize(packet_cid_be) | 3086 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3039 : arraysize(packet), | 3087 ? arraysize(packet_cid_be) |
3040 expected_error, QUIC_INVALID_PUBLIC_RST_PACKET); | 3088 : arraysize(packet), |
| 3089 expected_error, QUIC_INVALID_PUBLIC_RST_PACKET); |
3041 } | 3090 } |
3042 | 3091 |
3043 TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { | 3092 TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { |
3044 // clang-format off | 3093 // clang-format off |
3045 unsigned char packet[] = { | 3094 unsigned char packet[] = { |
3046 // public flags (public reset, 8 byte connection_id) | 3095 // public flags (public reset, 8 byte connection_id) |
3047 0x0A, | 3096 0x0A, |
3048 // connection_id | 3097 // connection_id |
3049 0x10, 0x32, 0x54, 0x76, | 3098 0x10, 0x32, 0x54, 0x76, |
3050 0x98, 0xBA, 0xDC, 0xFE, | 3099 0x98, 0xBA, 0xDC, 0xFE, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3104 0xBC, 0x9A, 0x78, 0x56, | 3153 0xBC, 0x9A, 0x78, 0x56, |
3105 0x34, 0x12, 0x00, 0x00, | 3154 0x34, 0x12, 0x00, 0x00, |
3106 // client address: 4.31.198.44:443 | 3155 // client address: 4.31.198.44:443 |
3107 0x02, 0x00, | 3156 0x02, 0x00, |
3108 0x04, 0x1F, 0xC6, 0x2C, | 3157 0x04, 0x1F, 0xC6, 0x2C, |
3109 0xBB, 0x01, | 3158 0xBB, 0x01, |
3110 }; | 3159 }; |
3111 // clang-format on | 3160 // clang-format on |
3112 | 3161 |
3113 QuicEncryptedPacket encrypted( | 3162 QuicEncryptedPacket encrypted( |
3114 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3163 AsChars( |
3115 ? packet_cid_be | 3164 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3116 : packet), | 3165 ? packet_cid_be |
3117 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3166 : packet), |
| 3167 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3118 ? arraysize(packet_cid_be) | 3168 ? arraysize(packet_cid_be) |
3119 : arraysize(packet), | 3169 : arraysize(packet), |
3120 false); | 3170 false); |
3121 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3171 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3122 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3172 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3123 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 3173 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
3124 EXPECT_EQ(kConnectionId, | 3174 EXPECT_EQ(kConnectionId, |
3125 visitor_.public_reset_packet_->public_header.connection_id); | 3175 visitor_.public_reset_packet_->public_header.connection_id); |
3126 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 3176 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
3127 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 3177 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
3128 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 3178 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
3129 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); | 3179 EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); |
3130 EXPECT_EQ("4.31.198.44", | 3180 EXPECT_EQ("4.31.198.44", |
3131 visitor_.public_reset_packet_->client_address.host().ToString()); | 3181 visitor_.public_reset_packet_->client_address.host().ToString()); |
3132 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 3182 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); |
3133 | 3183 |
3134 // Now test framing boundaries. | 3184 // Now test framing boundaries. |
3135 if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { | 3185 if (!QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())) { |
3136 for (size_t i = 0; i < arraysize(packet); ++i) { | 3186 for (size_t i = 0; i < arraysize(packet); ++i) { |
3137 string expected_error; | 3187 string expected_error; |
3138 QUIC_DLOG(INFO) << "iteration: " << i; | 3188 QUIC_DLOG(INFO) << "iteration: " << i; |
3139 if (i < kConnectionIdOffset) { | 3189 if (i < kConnectionIdOffset) { |
3140 expected_error = "Unable to read public flags."; | 3190 expected_error = "Unable to read public flags."; |
3141 CheckProcessingFails(packet, i, expected_error, | 3191 CheckProcessingFails(packet, i, expected_error, |
3142 QUIC_INVALID_PACKET_HEADER); | 3192 QUIC_INVALID_PACKET_HEADER); |
3143 } else if (i < kPublicResetPacketMessageTagOffset) { | 3193 } else if (i < kPublicResetPacketMessageTagOffset) { |
3144 expected_error = "Unable to read ConnectionId."; | 3194 expected_error = "Unable to read ConnectionId."; |
3145 CheckProcessingFails(packet, i, expected_error, | 3195 CheckProcessingFails(packet, i, expected_error, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3192 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 3242 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
3193 // version tag | 3243 // version tag |
3194 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3244 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3195 'Q', '2', '.', '0', | 3245 'Q', '2', '.', '0', |
3196 }; | 3246 }; |
3197 // clang-format on | 3247 // clang-format on |
3198 | 3248 |
3199 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3249 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
3200 | 3250 |
3201 QuicEncryptedPacket encrypted( | 3251 QuicEncryptedPacket encrypted( |
3202 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3252 AsChars( |
3203 ? packet_cid_be | 3253 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3204 : packet), | 3254 ? packet_cid_be |
3205 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3255 : packet), |
| 3256 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3206 ? arraysize(packet_cid_be) | 3257 ? arraysize(packet_cid_be) |
3207 : arraysize(packet), | 3258 : arraysize(packet), |
3208 false); | 3259 false); |
3209 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3260 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3210 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3261 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3211 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 3262 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
3212 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 3263 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
3213 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); | 3264 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); |
3214 | 3265 |
3215 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID; ++i) { | 3266 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID; ++i) { |
3216 string expected_error; | 3267 string expected_error; |
3217 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; | 3268 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; |
3218 if (i < kConnectionIdOffset) { | 3269 if (i < kConnectionIdOffset) { |
3219 expected_error = "Unable to read public flags."; | 3270 expected_error = "Unable to read public flags."; |
3220 } else if (i < kVersionOffset) { | 3271 } else if (i < kVersionOffset) { |
3221 expected_error = "Unable to read ConnectionId."; | 3272 expected_error = "Unable to read ConnectionId."; |
3222 } else { | 3273 } else { |
3223 expected_error = "Unable to read supported version in negotiation."; | 3274 expected_error = "Unable to read supported version in negotiation."; |
3224 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 3275 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
3225 } | 3276 } |
3226 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3277 CheckProcessingFails( |
3227 ? packet_cid_be | 3278 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3228 : packet, | 3279 ? packet_cid_be |
3229 i, expected_error, error_code); | 3280 : packet, |
| 3281 i, expected_error, error_code); |
3230 } | 3282 } |
3231 } | 3283 } |
3232 | 3284 |
3233 TEST_P(QuicFramerTest, OldVersionNegotiationPacket) { | 3285 TEST_P(QuicFramerTest, OldVersionNegotiationPacket) { |
3234 // clang-format off | 3286 // clang-format off |
3235 unsigned char packet[] = { | 3287 unsigned char packet[] = { |
3236 // public flags (version, 8 byte connection_id) | 3288 // public flags (version, 8 byte connection_id) |
3237 0x3D, | 3289 0x3D, |
3238 // connection_id | 3290 // connection_id |
3239 0x10, 0x32, 0x54, 0x76, | 3291 0x10, 0x32, 0x54, 0x76, |
(...skipping 10 matching lines...) Expand all Loading... |
3250 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, | 3302 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
3251 // version tag | 3303 // version tag |
3252 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3304 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3253 'Q', '2', '.', '0', | 3305 'Q', '2', '.', '0', |
3254 }; | 3306 }; |
3255 // clang-format on | 3307 // clang-format on |
3256 | 3308 |
3257 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3309 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
3258 | 3310 |
3259 QuicEncryptedPacket encrypted( | 3311 QuicEncryptedPacket encrypted( |
3260 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3312 AsChars( |
3261 ? packet_cid_be | 3313 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3262 : packet), | 3314 ? packet_cid_be |
3263 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3315 : packet), |
| 3316 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3264 ? arraysize(packet_cid_be) | 3317 ? arraysize(packet_cid_be) |
3265 : arraysize(packet), | 3318 : arraysize(packet), |
3266 false); | 3319 false); |
3267 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3320 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3268 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 3321 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
3269 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 3322 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
3270 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 3323 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
3271 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); | 3324 EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]); |
3272 | 3325 |
3273 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID; ++i) { | 3326 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID; ++i) { |
3274 string expected_error; | 3327 string expected_error; |
3275 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; | 3328 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; |
3276 if (i < kConnectionIdOffset) { | 3329 if (i < kConnectionIdOffset) { |
3277 expected_error = "Unable to read public flags."; | 3330 expected_error = "Unable to read public flags."; |
3278 } else if (i < kVersionOffset) { | 3331 } else if (i < kVersionOffset) { |
3279 expected_error = "Unable to read ConnectionId."; | 3332 expected_error = "Unable to read ConnectionId."; |
3280 } else { | 3333 } else { |
3281 expected_error = "Unable to read supported version in negotiation."; | 3334 expected_error = "Unable to read supported version in negotiation."; |
3282 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 3335 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
3283 } | 3336 } |
3284 CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3337 CheckProcessingFails( |
3285 ? packet_cid_be | 3338 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3286 : packet, | 3339 ? packet_cid_be |
3287 i, expected_error, error_code); | 3340 : packet, |
| 3341 i, expected_error, error_code); |
3288 } | 3342 } |
3289 } | 3343 } |
3290 | 3344 |
3291 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 3345 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
3292 QuicPacketHeader header; | 3346 QuicPacketHeader header; |
3293 header.public_header.connection_id = kConnectionId; | 3347 header.public_header.connection_id = kConnectionId; |
3294 header.public_header.reset_flag = false; | 3348 header.public_header.reset_flag = false; |
3295 header.public_header.version_flag = false; | 3349 header.public_header.version_flag = false; |
3296 header.packet_number = kPacketNumber; | 3350 header.packet_number = kPacketNumber; |
3297 | 3351 |
(...skipping 26 matching lines...) Expand all Loading... |
3324 | 3378 |
3325 // frame type (padding frame) | 3379 // frame type (padding frame) |
3326 0x00, | 3380 0x00, |
3327 0x00, 0x00, 0x00, 0x00 | 3381 0x00, 0x00, 0x00, 0x00 |
3328 }; | 3382 }; |
3329 // clang-format on | 3383 // clang-format on |
3330 | 3384 |
3331 uint64_t header_size = GetPacketHeaderSize( | 3385 uint64_t header_size = GetPacketHeaderSize( |
3332 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 3386 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3333 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER); | 3387 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER); |
3334 memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 3388 memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3335 : packet) + | 3389 ? packet_cid_be |
| 3390 : packet) + |
3336 header_size + 1, | 3391 header_size + 1, |
3337 0x00, kMaxPacketSize - header_size - 1); | 3392 0x00, kMaxPacketSize - header_size - 1); |
3338 | 3393 |
3339 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3394 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3340 ASSERT_TRUE(data != nullptr); | 3395 ASSERT_TRUE(data != nullptr); |
3341 | 3396 |
3342 test::CompareCharArraysWithHexError( | 3397 test::CompareCharArraysWithHexError( |
3343 "constructed packet", data->data(), data->length(), | 3398 "constructed packet", data->data(), data->length(), |
3344 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3399 AsChars( |
3345 ? packet_cid_be | 3400 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3346 : packet), | 3401 ? packet_cid_be |
3347 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3402 : packet), |
| 3403 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3348 ? arraysize(packet_cid_be) | 3404 ? arraysize(packet_cid_be) |
3349 : arraysize(packet)); | 3405 : arraysize(packet)); |
3350 } | 3406 } |
3351 | 3407 |
3352 TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) { | 3408 TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) { |
3353 if (framer_.version() <= QUIC_VERSION_37) { | 3409 if (framer_.version() <= QUIC_VERSION_37) { |
3354 return; | 3410 return; |
3355 } | 3411 } |
3356 QuicPacketHeader header; | 3412 QuicPacketHeader header; |
3357 header.public_header.connection_id = kConnectionId; | 3413 header.public_header.connection_id = kConnectionId; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3422 // paddings | 3478 // paddings |
3423 0x00, 0x00, | 3479 0x00, 0x00, |
3424 }; | 3480 }; |
3425 // clang-format on | 3481 // clang-format on |
3426 | 3482 |
3427 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3483 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3428 ASSERT_TRUE(data != nullptr); | 3484 ASSERT_TRUE(data != nullptr); |
3429 | 3485 |
3430 test::CompareCharArraysWithHexError( | 3486 test::CompareCharArraysWithHexError( |
3431 "constructed packet", data->data(), data->length(), | 3487 "constructed packet", data->data(), data->length(), |
3432 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3488 AsChars( |
3433 ? packet_cid_be | 3489 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3434 : packet), | 3490 ? packet_cid_be |
3435 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3491 : packet), |
| 3492 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3436 ? arraysize(packet_cid_be) | 3493 ? arraysize(packet_cid_be) |
3437 : arraysize(packet)); | 3494 : arraysize(packet)); |
3438 } | 3495 } |
3439 | 3496 |
3440 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 3497 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
3441 QuicPacketHeader header; | 3498 QuicPacketHeader header; |
3442 header.public_header.connection_id = kConnectionId; | 3499 header.public_header.connection_id = kConnectionId; |
3443 header.public_header.reset_flag = false; | 3500 header.public_header.reset_flag = false; |
3444 header.public_header.version_flag = false; | 3501 header.public_header.version_flag = false; |
3445 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 3502 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; |
(...skipping 26 matching lines...) Expand all Loading... |
3472 | 3529 |
3473 // frame type (padding frame) | 3530 // frame type (padding frame) |
3474 0x00, | 3531 0x00, |
3475 0x00, 0x00, 0x00, 0x00 | 3532 0x00, 0x00, 0x00, 0x00 |
3476 }; | 3533 }; |
3477 // clang-format on | 3534 // clang-format on |
3478 | 3535 |
3479 uint64_t header_size = GetPacketHeaderSize( | 3536 uint64_t header_size = GetPacketHeaderSize( |
3480 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 3537 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3481 !kIncludeDiversificationNonce, PACKET_4BYTE_PACKET_NUMBER); | 3538 !kIncludeDiversificationNonce, PACKET_4BYTE_PACKET_NUMBER); |
3482 memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 3539 memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3483 : packet) + | 3540 ? packet_cid_be |
| 3541 : packet) + |
3484 header_size + 1, | 3542 header_size + 1, |
3485 0x00, kMaxPacketSize - header_size - 1); | 3543 0x00, kMaxPacketSize - header_size - 1); |
3486 | 3544 |
3487 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3545 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3488 ASSERT_TRUE(data != nullptr); | 3546 ASSERT_TRUE(data != nullptr); |
3489 | 3547 |
3490 test::CompareCharArraysWithHexError( | 3548 test::CompareCharArraysWithHexError( |
3491 "constructed packet", data->data(), data->length(), | 3549 "constructed packet", data->data(), data->length(), |
3492 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3550 AsChars( |
3493 ? packet_cid_be | 3551 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3494 : packet), | 3552 ? packet_cid_be |
3495 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3553 : packet), |
| 3554 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3496 ? arraysize(packet_cid_be) | 3555 ? arraysize(packet_cid_be) |
3497 : arraysize(packet)); | 3556 : arraysize(packet)); |
3498 } | 3557 } |
3499 | 3558 |
3500 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 3559 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
3501 QuicPacketHeader header; | 3560 QuicPacketHeader header; |
3502 header.public_header.connection_id = kConnectionId; | 3561 header.public_header.connection_id = kConnectionId; |
3503 header.public_header.reset_flag = false; | 3562 header.public_header.reset_flag = false; |
3504 header.public_header.version_flag = false; | 3563 header.public_header.version_flag = false; |
3505 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 3564 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; |
(...skipping 26 matching lines...) Expand all Loading... |
3532 | 3591 |
3533 // frame type (padding frame) | 3592 // frame type (padding frame) |
3534 0x00, | 3593 0x00, |
3535 0x00, 0x00, 0x00, 0x00 | 3594 0x00, 0x00, 0x00, 0x00 |
3536 }; | 3595 }; |
3537 // clang-format on | 3596 // clang-format on |
3538 | 3597 |
3539 uint64_t header_size = GetPacketHeaderSize( | 3598 uint64_t header_size = GetPacketHeaderSize( |
3540 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 3599 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3541 !kIncludeDiversificationNonce, PACKET_2BYTE_PACKET_NUMBER); | 3600 !kIncludeDiversificationNonce, PACKET_2BYTE_PACKET_NUMBER); |
3542 memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 3601 memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3543 : packet) + | 3602 ? packet_cid_be |
| 3603 : packet) + |
3544 header_size + 1, | 3604 header_size + 1, |
3545 0x00, kMaxPacketSize - header_size - 1); | 3605 0x00, kMaxPacketSize - header_size - 1); |
3546 | 3606 |
3547 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3607 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3548 ASSERT_TRUE(data != nullptr); | 3608 ASSERT_TRUE(data != nullptr); |
3549 | 3609 |
3550 test::CompareCharArraysWithHexError( | 3610 test::CompareCharArraysWithHexError( |
3551 "constructed packet", data->data(), data->length(), | 3611 "constructed packet", data->data(), data->length(), |
3552 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3612 AsChars( |
3553 ? packet_cid_be | 3613 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3554 : packet), | 3614 ? packet_cid_be |
3555 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3615 : packet), |
| 3616 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3556 ? arraysize(packet_cid_be) | 3617 ? arraysize(packet_cid_be) |
3557 : arraysize(packet)); | 3618 : arraysize(packet)); |
3558 } | 3619 } |
3559 | 3620 |
3560 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 3621 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
3561 QuicPacketHeader header; | 3622 QuicPacketHeader header; |
3562 header.public_header.connection_id = kConnectionId; | 3623 header.public_header.connection_id = kConnectionId; |
3563 header.public_header.reset_flag = false; | 3624 header.public_header.reset_flag = false; |
3564 header.public_header.version_flag = false; | 3625 header.public_header.version_flag = false; |
3565 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 3626 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; |
(...skipping 26 matching lines...) Expand all Loading... |
3592 | 3653 |
3593 // frame type (padding frame) | 3654 // frame type (padding frame) |
3594 0x00, | 3655 0x00, |
3595 0x00, 0x00, 0x00, 0x00 | 3656 0x00, 0x00, 0x00, 0x00 |
3596 }; | 3657 }; |
3597 // clang-format on | 3658 // clang-format on |
3598 | 3659 |
3599 uint64_t header_size = GetPacketHeaderSize( | 3660 uint64_t header_size = GetPacketHeaderSize( |
3600 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 3661 framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3601 !kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER); | 3662 !kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER); |
3602 memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be | 3663 memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3603 : packet) + | 3664 ? packet_cid_be |
| 3665 : packet) + |
3604 header_size + 1, | 3666 header_size + 1, |
3605 0x00, kMaxPacketSize - header_size - 1); | 3667 0x00, kMaxPacketSize - header_size - 1); |
3606 | 3668 |
3607 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3669 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3608 ASSERT_TRUE(data != nullptr); | 3670 ASSERT_TRUE(data != nullptr); |
3609 | 3671 |
3610 test::CompareCharArraysWithHexError( | 3672 test::CompareCharArraysWithHexError( |
3611 "constructed packet", data->data(), data->length(), | 3673 "constructed packet", data->data(), data->length(), |
3612 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3674 AsChars( |
3613 ? packet_cid_be | 3675 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3614 : packet), | 3676 ? packet_cid_be |
3615 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3677 : packet), |
| 3678 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3616 ? arraysize(packet_cid_be) | 3679 ? arraysize(packet_cid_be) |
3617 : arraysize(packet)); | 3680 : arraysize(packet)); |
3618 } | 3681 } |
3619 | 3682 |
3620 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 3683 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
3621 QuicPacketHeader header; | 3684 QuicPacketHeader header; |
3622 header.public_header.connection_id = kConnectionId; | 3685 header.public_header.connection_id = kConnectionId; |
3623 header.public_header.reset_flag = false; | 3686 header.public_header.reset_flag = false; |
3624 header.public_header.version_flag = false; | 3687 header.public_header.version_flag = false; |
3625 header.packet_number = kPacketNumber; | 3688 header.packet_number = kPacketNumber; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3674 'o', ' ', 'w', 'o', | 3737 'o', ' ', 'w', 'o', |
3675 'r', 'l', 'd', '!', | 3738 'r', 'l', 'd', '!', |
3676 }; | 3739 }; |
3677 // clang-format on | 3740 // clang-format on |
3678 | 3741 |
3679 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3742 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3680 ASSERT_TRUE(data != nullptr); | 3743 ASSERT_TRUE(data != nullptr); |
3681 | 3744 |
3682 test::CompareCharArraysWithHexError( | 3745 test::CompareCharArraysWithHexError( |
3683 "constructed packet", data->data(), data->length(), | 3746 "constructed packet", data->data(), data->length(), |
3684 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3747 AsChars( |
3685 ? packet_cid_be | 3748 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3686 : packet), | 3749 ? packet_cid_be |
3687 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3750 : packet), |
| 3751 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3688 ? arraysize(packet_cid_be) | 3752 ? arraysize(packet_cid_be) |
3689 : arraysize(packet)); | 3753 : arraysize(packet)); |
3690 } | 3754 } |
3691 | 3755 |
3692 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3756 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
3693 QuicPacketHeader header; | 3757 QuicPacketHeader header; |
3694 header.public_header.connection_id = kConnectionId; | 3758 header.public_header.connection_id = kConnectionId; |
3695 header.public_header.reset_flag = false; | 3759 header.public_header.reset_flag = false; |
3696 header.public_header.version_flag = true; | 3760 header.public_header.version_flag = true; |
3697 header.packet_number = kPacketNumber; | 3761 header.packet_number = kPacketNumber; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3743 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', | 3807 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', |
3744 }; | 3808 }; |
3745 // clang-format on | 3809 // clang-format on |
3746 | 3810 |
3747 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3811 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
3748 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3812 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3749 ASSERT_TRUE(data != nullptr); | 3813 ASSERT_TRUE(data != nullptr); |
3750 | 3814 |
3751 test::CompareCharArraysWithHexError( | 3815 test::CompareCharArraysWithHexError( |
3752 "constructed packet", data->data(), data->length(), | 3816 "constructed packet", data->data(), data->length(), |
3753 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3817 AsChars( |
3754 ? packet_cid_be | 3818 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3755 : packet), | 3819 ? packet_cid_be |
3756 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3820 : packet), |
| 3821 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3757 ? arraysize(packet_cid_be) | 3822 ? arraysize(packet_cid_be) |
3758 : arraysize(packet)); | 3823 : arraysize(packet)); |
3759 } | 3824 } |
3760 | 3825 |
3761 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3826 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
3762 // clang-format off | 3827 // clang-format off |
3763 unsigned char packet[] = { | 3828 unsigned char packet[] = { |
3764 // public flags (version, 8 byte connection_id) | 3829 // public flags (version, 8 byte connection_id) |
3765 0x0D, | 3830 0x0D, |
3766 // connection_id | 3831 // connection_id |
(...skipping 11 matching lines...) Expand all Loading... |
3778 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 3843 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
3779 }; | 3844 }; |
3780 // clang-format on | 3845 // clang-format on |
3781 | 3846 |
3782 QuicConnectionId connection_id = kConnectionId; | 3847 QuicConnectionId connection_id = kConnectionId; |
3783 std::unique_ptr<QuicEncryptedPacket> data( | 3848 std::unique_ptr<QuicEncryptedPacket> data( |
3784 framer_.BuildVersionNegotiationPacket(connection_id, | 3849 framer_.BuildVersionNegotiationPacket(connection_id, |
3785 SupportedVersions(GetParam()))); | 3850 SupportedVersions(GetParam()))); |
3786 test::CompareCharArraysWithHexError( | 3851 test::CompareCharArraysWithHexError( |
3787 "constructed packet", data->data(), data->length(), | 3852 "constructed packet", data->data(), data->length(), |
3788 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3853 AsChars( |
3789 ? packet_cid_be | 3854 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3790 : packet), | 3855 ? packet_cid_be |
3791 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3856 : packet), |
| 3857 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3792 ? arraysize(packet_cid_be) | 3858 ? arraysize(packet_cid_be) |
3793 : arraysize(packet)); | 3859 : arraysize(packet)); |
3794 } | 3860 } |
3795 | 3861 |
3796 TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) { | 3862 TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) { |
3797 QuicPacketHeader header; | 3863 QuicPacketHeader header; |
3798 header.public_header.connection_id = kConnectionId; | 3864 header.public_header.connection_id = kConnectionId; |
3799 header.public_header.reset_flag = false; | 3865 header.public_header.reset_flag = false; |
3800 header.public_header.version_flag = false; | 3866 header.public_header.version_flag = false; |
3801 header.packet_number = kPacketNumber; | 3867 header.packet_number = kPacketNumber; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3850 // num timestamps. | 3916 // num timestamps. |
3851 0x00, | 3917 0x00, |
3852 }; | 3918 }; |
3853 // clang-format on | 3919 // clang-format on |
3854 | 3920 |
3855 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3921 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3856 ASSERT_TRUE(data != nullptr); | 3922 ASSERT_TRUE(data != nullptr); |
3857 | 3923 |
3858 test::CompareCharArraysWithHexError( | 3924 test::CompareCharArraysWithHexError( |
3859 "constructed packet", data->data(), data->length(), | 3925 "constructed packet", data->data(), data->length(), |
3860 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3926 AsChars( |
3861 ? packet_cid_be | 3927 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3862 : packet), | 3928 ? packet_cid_be |
3863 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 3929 : packet), |
| 3930 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3864 ? arraysize(packet_cid_be) | 3931 ? arraysize(packet_cid_be) |
3865 : arraysize(packet)); | 3932 : arraysize(packet)); |
3866 } | 3933 } |
3867 | 3934 |
3868 TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) { | 3935 TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) { |
3869 QuicPacketHeader header; | 3936 QuicPacketHeader header; |
3870 header.public_header.connection_id = kConnectionId; | 3937 header.public_header.connection_id = kConnectionId; |
3871 header.public_header.reset_flag = false; | 3938 header.public_header.reset_flag = false; |
3872 header.public_header.version_flag = false; | 3939 header.public_header.version_flag = false; |
3873 header.packet_number = kPacketNumber; | 3940 header.packet_number = kPacketNumber; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3961 // num timestamps. | 4028 // num timestamps. |
3962 0x00, | 4029 0x00, |
3963 }; | 4030 }; |
3964 // clang-format on | 4031 // clang-format on |
3965 | 4032 |
3966 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4033 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3967 ASSERT_TRUE(data != nullptr); | 4034 ASSERT_TRUE(data != nullptr); |
3968 | 4035 |
3969 test::CompareCharArraysWithHexError( | 4036 test::CompareCharArraysWithHexError( |
3970 "constructed packet", data->data(), data->length(), | 4037 "constructed packet", data->data(), data->length(), |
3971 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4038 AsChars( |
3972 ? packet_cid_be | 4039 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3973 : packet), | 4040 ? packet_cid_be |
3974 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4041 : packet), |
| 4042 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
3975 ? arraysize(packet_cid_be) | 4043 ? arraysize(packet_cid_be) |
3976 : arraysize(packet)); | 4044 : arraysize(packet)); |
3977 } | 4045 } |
3978 | 4046 |
3979 TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) { | 4047 TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) { |
3980 QuicPacketHeader header; | 4048 QuicPacketHeader header; |
3981 header.public_header.connection_id = kConnectionId; | 4049 header.public_header.connection_id = kConnectionId; |
3982 header.public_header.reset_flag = false; | 4050 header.public_header.reset_flag = false; |
3983 header.public_header.version_flag = false; | 4051 header.public_header.version_flag = false; |
3984 header.packet_number = kPacketNumber; | 4052 header.packet_number = kPacketNumber; |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4181 // num timestamps. | 4249 // num timestamps. |
4182 0x00, | 4250 0x00, |
4183 }; | 4251 }; |
4184 // clang-format on | 4252 // clang-format on |
4185 | 4253 |
4186 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4254 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4187 ASSERT_TRUE(data != nullptr); | 4255 ASSERT_TRUE(data != nullptr); |
4188 | 4256 |
4189 test::CompareCharArraysWithHexError( | 4257 test::CompareCharArraysWithHexError( |
4190 "constructed packet", data->data(), data->length(), | 4258 "constructed packet", data->data(), data->length(), |
4191 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4259 AsChars( |
4192 ? packet_cid_be | 4260 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4193 : packet), | 4261 ? packet_cid_be |
4194 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4262 : packet), |
| 4263 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4195 ? arraysize(packet_cid_be) | 4264 ? arraysize(packet_cid_be) |
4196 : arraysize(packet)); | 4265 : arraysize(packet)); |
4197 } | 4266 } |
4198 | 4267 |
4199 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { | 4268 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { |
4200 QuicPacketHeader header; | 4269 QuicPacketHeader header; |
4201 header.public_header.connection_id = kConnectionId; | 4270 header.public_header.connection_id = kConnectionId; |
4202 header.public_header.reset_flag = false; | 4271 header.public_header.reset_flag = false; |
4203 header.public_header.version_flag = false; | 4272 header.public_header.version_flag = false; |
4204 header.packet_number = kPacketNumber; | 4273 header.packet_number = kPacketNumber; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4239 0x1C, 0x00, 0x00, 0x00, | 4308 0x1C, 0x00, 0x00, 0x00, |
4240 0x00, 0x00, | 4309 0x00, 0x00, |
4241 }; | 4310 }; |
4242 // clang-format on | 4311 // clang-format on |
4243 | 4312 |
4244 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4313 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4245 ASSERT_TRUE(data != nullptr); | 4314 ASSERT_TRUE(data != nullptr); |
4246 | 4315 |
4247 test::CompareCharArraysWithHexError( | 4316 test::CompareCharArraysWithHexError( |
4248 "constructed packet", data->data(), data->length(), | 4317 "constructed packet", data->data(), data->length(), |
4249 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4318 AsChars( |
4250 ? packet_cid_be | 4319 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4251 : packet), | 4320 ? packet_cid_be |
4252 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4321 : packet), |
| 4322 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4253 ? arraysize(packet_cid_be) | 4323 ? arraysize(packet_cid_be) |
4254 : arraysize(packet)); | 4324 : arraysize(packet)); |
4255 } | 4325 } |
4256 | 4326 |
4257 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 4327 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
4258 QuicPacketHeader header; | 4328 QuicPacketHeader header; |
4259 header.public_header.connection_id = kConnectionId; | 4329 header.public_header.connection_id = kConnectionId; |
4260 header.public_header.reset_flag = false; | 4330 header.public_header.reset_flag = false; |
4261 header.public_header.version_flag = false; | 4331 header.public_header.version_flag = false; |
4262 header.packet_number = kPacketNumber; | 4332 header.packet_number = kPacketNumber; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4309 }; | 4379 }; |
4310 // clang-format on | 4380 // clang-format on |
4311 | 4381 |
4312 QuicFrames frames = {QuicFrame(&rst_frame)}; | 4382 QuicFrames frames = {QuicFrame(&rst_frame)}; |
4313 | 4383 |
4314 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4384 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4315 ASSERT_TRUE(data != nullptr); | 4385 ASSERT_TRUE(data != nullptr); |
4316 | 4386 |
4317 test::CompareCharArraysWithHexError( | 4387 test::CompareCharArraysWithHexError( |
4318 "constructed packet", data->data(), data->length(), | 4388 "constructed packet", data->data(), data->length(), |
4319 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4389 AsChars( |
4320 ? packet_cid_be | 4390 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4321 : packet), | 4391 ? packet_cid_be |
4322 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4392 : packet), |
| 4393 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4323 ? arraysize(packet_cid_be) | 4394 ? arraysize(packet_cid_be) |
4324 : arraysize(packet)); | 4395 : arraysize(packet)); |
4325 } | 4396 } |
4326 | 4397 |
4327 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 4398 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
4328 QuicPacketHeader header; | 4399 QuicPacketHeader header; |
4329 header.public_header.connection_id = kConnectionId; | 4400 header.public_header.connection_id = kConnectionId; |
4330 header.public_header.reset_flag = false; | 4401 header.public_header.reset_flag = false; |
4331 header.public_header.version_flag = false; | 4402 header.public_header.version_flag = false; |
4332 header.packet_number = kPacketNumber; | 4403 header.packet_number = kPacketNumber; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4382 'I', ' ', 'c', 'a', | 4453 'I', ' ', 'c', 'a', |
4383 'n', | 4454 'n', |
4384 }; | 4455 }; |
4385 // clang-format on | 4456 // clang-format on |
4386 | 4457 |
4387 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4458 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4388 ASSERT_TRUE(data != nullptr); | 4459 ASSERT_TRUE(data != nullptr); |
4389 | 4460 |
4390 test::CompareCharArraysWithHexError( | 4461 test::CompareCharArraysWithHexError( |
4391 "constructed packet", data->data(), data->length(), | 4462 "constructed packet", data->data(), data->length(), |
4392 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4463 AsChars( |
4393 ? packet_cid_be | 4464 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4394 : packet), | 4465 ? packet_cid_be |
4395 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4466 : packet), |
| 4467 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4396 ? arraysize(packet_cid_be) | 4468 ? arraysize(packet_cid_be) |
4397 : arraysize(packet)); | 4469 : arraysize(packet)); |
4398 } | 4470 } |
4399 | 4471 |
4400 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 4472 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
4401 QuicPacketHeader header; | 4473 QuicPacketHeader header; |
4402 header.public_header.connection_id = kConnectionId; | 4474 header.public_header.connection_id = kConnectionId; |
4403 header.public_header.reset_flag = false; | 4475 header.public_header.reset_flag = false; |
4404 header.public_header.version_flag = false; | 4476 header.public_header.version_flag = false; |
4405 header.packet_number = kPacketNumber; | 4477 header.packet_number = kPacketNumber; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4460 'I', ' ', 'c', 'a', | 4532 'I', ' ', 'c', 'a', |
4461 'n', | 4533 'n', |
4462 }; | 4534 }; |
4463 // clang-format on | 4535 // clang-format on |
4464 | 4536 |
4465 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4537 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4466 ASSERT_TRUE(data != nullptr); | 4538 ASSERT_TRUE(data != nullptr); |
4467 | 4539 |
4468 test::CompareCharArraysWithHexError( | 4540 test::CompareCharArraysWithHexError( |
4469 "constructed packet", data->data(), data->length(), | 4541 "constructed packet", data->data(), data->length(), |
4470 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4542 AsChars( |
4471 ? packet_cid_be | 4543 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4472 : packet), | 4544 ? packet_cid_be |
4473 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4545 : packet), |
| 4546 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4474 ? arraysize(packet_cid_be) | 4547 ? arraysize(packet_cid_be) |
4475 : arraysize(packet)); | 4548 : arraysize(packet)); |
4476 } | 4549 } |
4477 | 4550 |
4478 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 4551 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
4479 QuicPacketHeader header; | 4552 QuicPacketHeader header; |
4480 header.public_header.connection_id = kConnectionId; | 4553 header.public_header.connection_id = kConnectionId; |
4481 header.public_header.reset_flag = false; | 4554 header.public_header.reset_flag = false; |
4482 header.public_header.version_flag = false; | 4555 header.public_header.version_flag = false; |
4483 header.packet_number = kPacketNumber; | 4556 header.packet_number = kPacketNumber; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4525 0x88, 0x77, 0x66, 0x55, | 4598 0x88, 0x77, 0x66, 0x55, |
4526 0x44, 0x33, 0x22, 0x11, | 4599 0x44, 0x33, 0x22, 0x11, |
4527 }; | 4600 }; |
4528 // clang-format on | 4601 // clang-format on |
4529 | 4602 |
4530 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4603 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4531 ASSERT_TRUE(data != nullptr); | 4604 ASSERT_TRUE(data != nullptr); |
4532 | 4605 |
4533 test::CompareCharArraysWithHexError( | 4606 test::CompareCharArraysWithHexError( |
4534 "constructed packet", data->data(), data->length(), | 4607 "constructed packet", data->data(), data->length(), |
4535 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4608 AsChars( |
4536 ? packet_cid_be | 4609 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4537 : packet), | 4610 ? packet_cid_be |
4538 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4611 : packet), |
| 4612 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4539 ? arraysize(packet_cid_be) | 4613 ? arraysize(packet_cid_be) |
4540 : arraysize(packet)); | 4614 : arraysize(packet)); |
4541 } | 4615 } |
4542 | 4616 |
4543 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 4617 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
4544 QuicPacketHeader header; | 4618 QuicPacketHeader header; |
4545 header.public_header.connection_id = kConnectionId; | 4619 header.public_header.connection_id = kConnectionId; |
4546 header.public_header.reset_flag = false; | 4620 header.public_header.reset_flag = false; |
4547 header.public_header.version_flag = false; | 4621 header.public_header.version_flag = false; |
4548 header.packet_number = kPacketNumber; | 4622 header.packet_number = kPacketNumber; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4583 // stream id | 4657 // stream id |
4584 0x04, 0x03, 0x02, 0x01, | 4658 0x04, 0x03, 0x02, 0x01, |
4585 }; | 4659 }; |
4586 // clang-format on | 4660 // clang-format on |
4587 | 4661 |
4588 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4662 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4589 ASSERT_TRUE(data != nullptr); | 4663 ASSERT_TRUE(data != nullptr); |
4590 | 4664 |
4591 test::CompareCharArraysWithHexError( | 4665 test::CompareCharArraysWithHexError( |
4592 "constructed packet", data->data(), data->length(), | 4666 "constructed packet", data->data(), data->length(), |
4593 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4667 AsChars( |
4594 ? packet_cid_be | 4668 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4595 : packet), | 4669 ? packet_cid_be |
4596 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4670 : packet), |
| 4671 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4597 ? arraysize(packet_cid_be) | 4672 ? arraysize(packet_cid_be) |
4598 : arraysize(packet)); | 4673 : arraysize(packet)); |
4599 } | 4674 } |
4600 | 4675 |
4601 TEST_P(QuicFramerTest, BuildPingPacket) { | 4676 TEST_P(QuicFramerTest, BuildPingPacket) { |
4602 QuicPacketHeader header; | 4677 QuicPacketHeader header; |
4603 header.public_header.connection_id = kConnectionId; | 4678 header.public_header.connection_id = kConnectionId; |
4604 header.public_header.reset_flag = false; | 4679 header.public_header.reset_flag = false; |
4605 header.public_header.version_flag = false; | 4680 header.public_header.version_flag = false; |
4606 header.packet_number = kPacketNumber; | 4681 header.packet_number = kPacketNumber; |
(...skipping 27 matching lines...) Expand all Loading... |
4634 // frame type (ping frame) | 4709 // frame type (ping frame) |
4635 0x07, | 4710 0x07, |
4636 }; | 4711 }; |
4637 // clang-format on | 4712 // clang-format on |
4638 | 4713 |
4639 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4714 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4640 ASSERT_TRUE(data != nullptr); | 4715 ASSERT_TRUE(data != nullptr); |
4641 | 4716 |
4642 test::CompareCharArraysWithHexError( | 4717 test::CompareCharArraysWithHexError( |
4643 "constructed packet", data->data(), data->length(), | 4718 "constructed packet", data->data(), data->length(), |
4644 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4719 AsChars( |
4645 ? packet_cid_be | 4720 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4646 : packet), | 4721 ? packet_cid_be |
4647 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4722 : packet), |
| 4723 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4648 ? arraysize(packet_cid_be) | 4724 ? arraysize(packet_cid_be) |
4649 : arraysize(packet)); | 4725 : arraysize(packet)); |
4650 } | 4726 } |
4651 | 4727 |
4652 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 4728 // Test that the MTU discovery packet is serialized correctly as a PING packet. |
4653 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 4729 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { |
4654 QuicPacketHeader header; | 4730 QuicPacketHeader header; |
4655 header.public_header.connection_id = kConnectionId; | 4731 header.public_header.connection_id = kConnectionId; |
4656 header.public_header.reset_flag = false; | 4732 header.public_header.reset_flag = false; |
4657 header.public_header.version_flag = false; | 4733 header.public_header.version_flag = false; |
(...skipping 28 matching lines...) Expand all Loading... |
4686 // frame type (ping frame) | 4762 // frame type (ping frame) |
4687 0x07, | 4763 0x07, |
4688 }; | 4764 }; |
4689 // clang-format on | 4765 // clang-format on |
4690 | 4766 |
4691 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4767 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
4692 ASSERT_TRUE(data != nullptr); | 4768 ASSERT_TRUE(data != nullptr); |
4693 | 4769 |
4694 test::CompareCharArraysWithHexError( | 4770 test::CompareCharArraysWithHexError( |
4695 "constructed packet", data->data(), data->length(), | 4771 "constructed packet", data->data(), data->length(), |
4696 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4772 AsChars( |
4697 ? packet_cid_be | 4773 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4698 : packet), | 4774 ? packet_cid_be |
4699 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4775 : packet), |
| 4776 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4700 ? arraysize(packet_cid_be) | 4777 ? arraysize(packet_cid_be) |
4701 : arraysize(packet)); | 4778 : arraysize(packet)); |
4702 } | 4779 } |
4703 | 4780 |
4704 TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { | 4781 TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { |
4705 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = true; | 4782 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = true; |
4706 QuicPublicResetPacket reset_packet; | 4783 QuicPublicResetPacket reset_packet; |
4707 reset_packet.public_header.connection_id = kConnectionId; | 4784 reset_packet.public_header.connection_id = kConnectionId; |
4708 reset_packet.public_header.reset_flag = true; | 4785 reset_packet.public_header.reset_flag = true; |
4709 reset_packet.public_header.version_flag = false; | 4786 reset_packet.public_header.version_flag = false; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4799 0x01, 0xEF, 0xCD, 0xAB, | 4876 0x01, 0xEF, 0xCD, 0xAB, |
4800 }; | 4877 }; |
4801 // clang-format on | 4878 // clang-format on |
4802 | 4879 |
4803 std::unique_ptr<QuicEncryptedPacket> data( | 4880 std::unique_ptr<QuicEncryptedPacket> data( |
4804 framer_.BuildPublicResetPacket(reset_packet)); | 4881 framer_.BuildPublicResetPacket(reset_packet)); |
4805 ASSERT_TRUE(data != nullptr); | 4882 ASSERT_TRUE(data != nullptr); |
4806 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { | 4883 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
4807 test::CompareCharArraysWithHexError( | 4884 test::CompareCharArraysWithHexError( |
4808 "constructed packet", data->data(), data->length(), | 4885 "constructed packet", data->data(), data->length(), |
4809 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4886 AsChars( |
4810 ? packet_no_rejected_packet_number_cid_be | 4887 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4811 : packet_no_rejected_packet_number), | 4888 ? packet_no_rejected_packet_number_cid_be |
4812 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4889 : packet_no_rejected_packet_number), |
| 4890 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4813 ? arraysize(packet_no_rejected_packet_number_cid_be) | 4891 ? arraysize(packet_no_rejected_packet_number_cid_be) |
4814 : arraysize(packet_no_rejected_packet_number)); | 4892 : arraysize(packet_no_rejected_packet_number)); |
4815 } else { | 4893 } else { |
4816 test::CompareCharArraysWithHexError( | 4894 test::CompareCharArraysWithHexError( |
4817 "constructed packet", data->data(), data->length(), | 4895 "constructed packet", data->data(), data->length(), |
4818 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4896 AsChars( |
4819 ? packet_cid_be | 4897 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4820 : packet), | 4898 ? packet_cid_be |
4821 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 4899 : packet), |
| 4900 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4822 ? arraysize(packet_cid_be) | 4901 ? arraysize(packet_cid_be) |
4823 : arraysize(packet)); | 4902 : arraysize(packet)); |
4824 } | 4903 } |
4825 } | 4904 } |
4826 | 4905 |
4827 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 4906 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
4828 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false; | 4907 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false; |
4829 QuicPublicResetPacket reset_packet; | 4908 QuicPublicResetPacket reset_packet; |
4830 reset_packet.public_header.connection_id = kConnectionId; | 4909 reset_packet.public_header.connection_id = kConnectionId; |
4831 reset_packet.public_header.reset_flag = true; | 4910 reset_packet.public_header.reset_flag = true; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4923 }; | 5002 }; |
4924 // clang-format on | 5003 // clang-format on |
4925 | 5004 |
4926 std::unique_ptr<QuicEncryptedPacket> data( | 5005 std::unique_ptr<QuicEncryptedPacket> data( |
4927 framer_.BuildPublicResetPacket(reset_packet)); | 5006 framer_.BuildPublicResetPacket(reset_packet)); |
4928 ASSERT_TRUE(data != nullptr); | 5007 ASSERT_TRUE(data != nullptr); |
4929 | 5008 |
4930 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { | 5009 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
4931 test::CompareCharArraysWithHexError( | 5010 test::CompareCharArraysWithHexError( |
4932 "constructed packet", data->data(), data->length(), | 5011 "constructed packet", data->data(), data->length(), |
4933 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5012 AsChars( |
4934 ? packet_no_rejected_packet_number_cid_be | 5013 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4935 : packet_no_rejected_packet_number), | 5014 ? packet_no_rejected_packet_number_cid_be |
4936 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5015 : packet_no_rejected_packet_number), |
| 5016 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4937 ? arraysize(packet_no_rejected_packet_number_cid_be) | 5017 ? arraysize(packet_no_rejected_packet_number_cid_be) |
4938 : arraysize(packet_no_rejected_packet_number)); | 5018 : arraysize(packet_no_rejected_packet_number)); |
4939 } else { | 5019 } else { |
4940 test::CompareCharArraysWithHexError( | 5020 test::CompareCharArraysWithHexError( |
4941 "constructed packet", data->data(), data->length(), | 5021 "constructed packet", data->data(), data->length(), |
4942 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5022 AsChars( |
4943 ? packet_cid_be | 5023 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4944 : packet), | 5024 ? packet_cid_be |
4945 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5025 : packet), |
| 5026 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
4946 ? arraysize(packet_cid_be) | 5027 ? arraysize(packet_cid_be) |
4947 : arraysize(packet)); | 5028 : arraysize(packet)); |
4948 } | 5029 } |
4949 } | 5030 } |
4950 | 5031 |
4951 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 5032 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
4952 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false; | 5033 FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false; |
4953 QuicPublicResetPacket reset_packet; | 5034 QuicPublicResetPacket reset_packet; |
4954 reset_packet.public_header.connection_id = kConnectionId; | 5035 reset_packet.public_header.connection_id = kConnectionId; |
4955 reset_packet.public_header.reset_flag = true; | 5036 reset_packet.public_header.reset_flag = true; |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5081 }; | 5162 }; |
5082 // clang-format on | 5163 // clang-format on |
5083 | 5164 |
5084 std::unique_ptr<QuicEncryptedPacket> data( | 5165 std::unique_ptr<QuicEncryptedPacket> data( |
5085 framer_.BuildPublicResetPacket(reset_packet)); | 5166 framer_.BuildPublicResetPacket(reset_packet)); |
5086 ASSERT_TRUE(data != nullptr); | 5167 ASSERT_TRUE(data != nullptr); |
5087 | 5168 |
5088 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { | 5169 if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
5089 test::CompareCharArraysWithHexError( | 5170 test::CompareCharArraysWithHexError( |
5090 "constructed packet", data->data(), data->length(), | 5171 "constructed packet", data->data(), data->length(), |
5091 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5172 AsChars( |
5092 ? packet_no_rejected_packet_number_cid_be | 5173 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5093 : packet_no_rejected_packet_number), | 5174 ? packet_no_rejected_packet_number_cid_be |
| 5175 : packet_no_rejected_packet_number), |
5094 | 5176 |
5095 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5177 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5096 ? arraysize(packet_no_rejected_packet_number_cid_be) | 5178 ? arraysize(packet_no_rejected_packet_number_cid_be) |
5097 : arraysize(packet_no_rejected_packet_number)); | 5179 : arraysize(packet_no_rejected_packet_number)); |
5098 } else { | 5180 } else { |
5099 test::CompareCharArraysWithHexError( | 5181 test::CompareCharArraysWithHexError( |
5100 "constructed packet", data->data(), data->length(), | 5182 "constructed packet", data->data(), data->length(), |
5101 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5183 AsChars( |
5102 ? packet_cid_be | 5184 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5103 : packet), | 5185 ? packet_cid_be |
| 5186 : packet), |
5104 | 5187 |
5105 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5188 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5106 ? arraysize(packet_cid_be) | 5189 ? arraysize(packet_cid_be) |
5107 : arraysize(packet)); | 5190 : arraysize(packet)); |
5108 } | 5191 } |
5109 } | 5192 } |
5110 | 5193 |
5111 TEST_P(QuicFramerTest, EncryptPacket) { | 5194 TEST_P(QuicFramerTest, EncryptPacket) { |
5112 QuicPacketNumber packet_number = kPacketNumber; | 5195 QuicPacketNumber packet_number = kPacketNumber; |
5113 // clang-format off | 5196 // clang-format off |
5114 unsigned char packet[] = { | 5197 unsigned char packet[] = { |
5115 // public flags (8 byte connection_id) | 5198 // public flags (8 byte connection_id) |
(...skipping 23 matching lines...) Expand all Loading... |
5139 | 5222 |
5140 // redundancy | 5223 // redundancy |
5141 'a', 'b', 'c', 'd', | 5224 'a', 'b', 'c', 'd', |
5142 'e', 'f', 'g', 'h', | 5225 'e', 'f', 'g', 'h', |
5143 'i', 'j', 'k', 'l', | 5226 'i', 'j', 'k', 'l', |
5144 'm', 'n', 'o', 'p', | 5227 'm', 'n', 'o', 'p', |
5145 }; | 5228 }; |
5146 // clang-format on | 5229 // clang-format on |
5147 | 5230 |
5148 std::unique_ptr<QuicPacket> raw(new QuicPacket( | 5231 std::unique_ptr<QuicPacket> raw(new QuicPacket( |
5149 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5232 AsChars( |
5150 ? packet_cid_be | 5233 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5151 : packet), | 5234 ? packet_cid_be |
5152 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5235 : packet), |
| 5236 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5153 ? arraysize(packet_cid_be) | 5237 ? arraysize(packet_cid_be) |
5154 : arraysize(packet), | 5238 : arraysize(packet), |
5155 false, PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 5239 false, PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
5156 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); | 5240 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); |
5157 char buffer[kMaxPacketSize]; | 5241 char buffer[kMaxPacketSize]; |
5158 size_t encrypted_length = framer_.EncryptPayload( | 5242 size_t encrypted_length = framer_.EncryptPayload( |
5159 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 5243 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
5160 | 5244 |
5161 ASSERT_NE(0u, encrypted_length); | 5245 ASSERT_NE(0u, encrypted_length); |
5162 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 5246 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5197 | 5281 |
5198 // redundancy | 5282 // redundancy |
5199 'a', 'b', 'c', 'd', | 5283 'a', 'b', 'c', 'd', |
5200 'e', 'f', 'g', 'h', | 5284 'e', 'f', 'g', 'h', |
5201 'i', 'j', 'k', 'l', | 5285 'i', 'j', 'k', 'l', |
5202 'm', 'n', 'o', 'p', | 5286 'm', 'n', 'o', 'p', |
5203 }; | 5287 }; |
5204 // clang-format on | 5288 // clang-format on |
5205 | 5289 |
5206 std::unique_ptr<QuicPacket> raw(new QuicPacket( | 5290 std::unique_ptr<QuicPacket> raw(new QuicPacket( |
5207 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5291 AsChars( |
5208 ? packet_cid_be | 5292 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5209 : packet), | 5293 ? packet_cid_be |
5210 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5294 : packet), |
| 5295 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5211 ? arraysize(packet_cid_be) | 5296 ? arraysize(packet_cid_be) |
5212 : arraysize(packet), | 5297 : arraysize(packet), |
5213 false, PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 5298 false, PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
5214 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); | 5299 !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); |
5215 char buffer[kMaxPacketSize]; | 5300 char buffer[kMaxPacketSize]; |
5216 size_t encrypted_length = framer_.EncryptPayload( | 5301 size_t encrypted_length = framer_.EncryptPayload( |
5217 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 5302 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
5218 | 5303 |
5219 ASSERT_NE(0u, encrypted_length); | 5304 ASSERT_NE(0u, encrypted_length); |
5220 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 5305 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5407 EXPECT_CALL(visitor, OnPacket()); | 5492 EXPECT_CALL(visitor, OnPacket()); |
5408 EXPECT_CALL(visitor, OnPacketHeader(_)); | 5493 EXPECT_CALL(visitor, OnPacketHeader(_)); |
5409 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); | 5494 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); |
5410 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 5495 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
5411 EXPECT_CALL(visitor, OnPacketComplete()); | 5496 EXPECT_CALL(visitor, OnPacketComplete()); |
5412 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 5497 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
5413 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); | 5498 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); |
5414 EXPECT_CALL(visitor, OnDecryptedPacket(_)); | 5499 EXPECT_CALL(visitor, OnDecryptedPacket(_)); |
5415 | 5500 |
5416 QuicEncryptedPacket encrypted( | 5501 QuicEncryptedPacket encrypted( |
5417 AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5502 AsChars( |
5418 ? packet_cid_be | 5503 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5419 : packet), | 5504 ? packet_cid_be |
5420 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5505 : packet), |
| 5506 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5421 ? arraysize(packet_cid_be) | 5507 ? arraysize(packet_cid_be) |
5422 : arraysize(packet), | 5508 : arraysize(packet), |
5423 false); | 5509 false); |
5424 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5510 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
5425 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5511 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
5426 } | 5512 } |
5427 | 5513 |
5428 static char kTestString[] = "At least 20 characters."; | 5514 static char kTestString[] = "At least 20 characters."; |
5429 static QuicStreamId kTestQuicStreamId = 1; | 5515 static QuicStreamId kTestQuicStreamId = 1; |
5430 static bool ExpectedStreamFrame(const QuicStreamFrame& frame) { | 5516 static bool ExpectedStreamFrame(const QuicStreamFrame& frame) { |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5584 0xDC, 0xFE, 0x98, 0xBA, | 5670 0xDC, 0xFE, 0x98, 0xBA, |
5585 // data length | 5671 // data length |
5586 0x0c, 0x00, | 5672 0x0c, 0x00, |
5587 // data | 5673 // data |
5588 'h', 'e', 'l', 'l', | 5674 'h', 'e', 'l', 'l', |
5589 'o', ' ', 'w', 'o', | 5675 'o', ' ', 'w', 'o', |
5590 'r', 'l', 'd', '!', | 5676 'r', 'l', 'd', '!', |
5591 }; | 5677 }; |
5592 // clang-format on | 5678 // clang-format on |
5593 | 5679 |
5594 QuicFramerFuzzFunc(FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5680 QuicFramerFuzzFunc( |
5595 ? packet_cid_be | 5681 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5596 : packet, | 5682 ? packet_cid_be |
5597 FLAGS_quic_restart_flag_quic_big_endian_connection_id | 5683 : packet, |
5598 ? arraysize(packet_cid_be) | 5684 QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective()) |
5599 : arraysize(packet)); | 5685 ? arraysize(packet_cid_be) |
| 5686 : arraysize(packet)); |
5600 } | 5687 } |
5601 | 5688 |
5602 } // namespace test | 5689 } // namespace test |
5603 } // namespace net | 5690 } // namespace net |
OLD | NEW |