| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_framer.h" | 5 #include "net/quic/quic_framer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 1665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1676 | 1676 |
| 1677 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1677 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1678 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1678 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1679 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1679 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
| 1680 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1680 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1681 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1681 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
| 1682 visitor_.stream_frames_[0]->offset); | 1682 visitor_.stream_frames_[0]->offset); |
| 1683 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1683 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1684 } | 1684 } |
| 1685 | 1685 |
| 1686 TEST_P(QuicFramerTest, AckFrame15) { | 1686 TEST_P(QuicFramerTest, AckFrame) { |
| 1687 if (framer_.version() != QUIC_VERSION_15) { | |
| 1688 return; | |
| 1689 } | |
| 1690 | |
| 1691 unsigned char packet[] = { | 1687 unsigned char packet[] = { |
| 1692 // public flags (8 byte connection_id) | 1688 // public flags (8 byte connection_id) |
| 1693 0x3C, | 1689 0x3C, |
| 1694 // connection_id | |
| 1695 0x10, 0x32, 0x54, 0x76, | |
| 1696 0x98, 0xBA, 0xDC, 0xFE, | |
| 1697 // packet sequence number | |
| 1698 0xA8, 0x9A, 0x78, 0x56, | |
| 1699 0x34, 0x12, | |
| 1700 // private flags (entropy) | |
| 1701 0x01, | |
| 1702 | |
| 1703 // frame type (ack frame) | |
| 1704 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 1705 0x6C, | |
| 1706 // entropy hash of sent packets till least awaiting - 1. | |
| 1707 0xAB, | |
| 1708 // least packet sequence number awaiting an ack, delta from sequence number. | |
| 1709 0x08, 0x00, 0x00, 0x00, | |
| 1710 0x00, 0x00, | |
| 1711 // entropy hash of all received packets. | |
| 1712 0xBA, | |
| 1713 // largest observed packet sequence number | |
| 1714 0xBF, 0x9A, 0x78, 0x56, | |
| 1715 0x34, 0x12, | |
| 1716 // Zero delta time. | |
| 1717 0x0, 0x0, | |
| 1718 // num missing packets | |
| 1719 0x01, | |
| 1720 // missing packet delta | |
| 1721 0x01, | |
| 1722 // 0 more missing packets in range. | |
| 1723 0x00, | |
| 1724 // Number of revived packets. | |
| 1725 0x00, | |
| 1726 }; | |
| 1727 | |
| 1728 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 1729 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 1730 | |
| 1731 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 1732 ASSERT_TRUE(visitor_.header_.get()); | |
| 1733 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | |
| 1734 | |
| 1735 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 1736 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 1737 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
| 1738 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash); | |
| 1739 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); | |
| 1740 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); | |
| 1741 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); | |
| 1742 SequenceNumberSet::const_iterator missing_iter = | |
| 1743 frame.received_info.missing_packets.begin(); | |
| 1744 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | |
| 1745 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); | |
| 1746 | |
| 1747 const size_t kSentEntropyOffset = kQuicFrameTypeSize; | |
| 1748 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | |
| 1749 const size_t kReceivedEntropyOffset = kLeastUnackedOffset + | |
| 1750 PACKET_6BYTE_SEQUENCE_NUMBER; | |
| 1751 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | |
| 1752 kQuicEntropyHashSize; | |
| 1753 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | |
| 1754 PACKET_6BYTE_SEQUENCE_NUMBER; | |
| 1755 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + | |
| 1756 kQuicDeltaTimeLargestObservedSize; | |
| 1757 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | |
| 1758 kNumberOfNackRangesSize; | |
| 1759 const size_t kMissingPacketsRange = kMissingPacketsOffset + | |
| 1760 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 1761 const size_t kRevivedPacketsLength = kMissingPacketsRange + | |
| 1762 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 1763 // Now test framing boundaries | |
| 1764 const size_t ack_frame_size = kRevivedPacketsLength + | |
| 1765 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 1766 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
| 1767 string expected_error; | |
| 1768 if (i < kLeastUnackedOffset) { | |
| 1769 expected_error = "Unable to read entropy hash for sent packets."; | |
| 1770 } else if (i < kReceivedEntropyOffset) { | |
| 1771 expected_error = "Unable to read least unacked delta."; | |
| 1772 } else if (i < kLargestObservedOffset) { | |
| 1773 expected_error = "Unable to read entropy hash for received packets."; | |
| 1774 } else if (i < kMissingDeltaTimeOffset) { | |
| 1775 expected_error = "Unable to read largest observed."; | |
| 1776 } else if (i < kNumMissingPacketOffset) { | |
| 1777 expected_error = "Unable to read delta time largest observed."; | |
| 1778 } else if (i < kMissingPacketsOffset) { | |
| 1779 expected_error = "Unable to read num missing packet ranges."; | |
| 1780 } else if (i < kMissingPacketsRange) { | |
| 1781 expected_error = "Unable to read missing sequence number delta."; | |
| 1782 } else if (i < kRevivedPacketsLength) { | |
| 1783 expected_error = "Unable to read missing sequence number range."; | |
| 1784 } else { | |
| 1785 expected_error = "Unable to read num revived packets."; | |
| 1786 } | |
| 1787 CheckProcessingFails( | |
| 1788 packet, | |
| 1789 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | |
| 1790 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | |
| 1791 expected_error, QUIC_INVALID_ACK_DATA); | |
| 1792 } | |
| 1793 } | |
| 1794 | |
| 1795 TEST_P(QuicFramerTest, AckFrame) { | |
| 1796 if (framer_.version() <= QUIC_VERSION_15) { | |
| 1797 return; | |
| 1798 } | |
| 1799 | |
| 1800 unsigned char packet[] = { | |
| 1801 // public flags (8 byte connection_id) | |
| 1802 0x3C, | |
| 1803 // connection_id | 1690 // connection_id |
| 1804 0x10, 0x32, 0x54, 0x76, | 1691 0x10, 0x32, 0x54, 0x76, |
| 1805 0x98, 0xBA, 0xDC, 0xFE, | 1692 0x98, 0xBA, 0xDC, 0xFE, |
| 1806 // packet sequence number | 1693 // packet sequence number |
| 1807 0xA8, 0x9A, 0x78, 0x56, | 1694 0xA8, 0x9A, 0x78, 0x56, |
| 1808 0x34, 0x12, | 1695 0x34, 0x12, |
| 1809 // private flags (entropy) | 1696 // private flags (entropy) |
| 1810 0x01, | 1697 0x01, |
| 1811 | 1698 |
| 1812 // frame type (ack frame) | 1699 // frame type (ack frame) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1832 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1833 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1720 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1834 | 1721 |
| 1835 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1722 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1836 ASSERT_TRUE(visitor_.header_.get()); | 1723 ASSERT_TRUE(visitor_.header_.get()); |
| 1837 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1724 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1838 | 1725 |
| 1839 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1726 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1840 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1727 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1841 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1728 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1842 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); | 1729 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1843 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); | 1730 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 1844 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); | 1731 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 1845 SequenceNumberSet::const_iterator missing_iter = | 1732 SequenceNumberSet::const_iterator missing_iter = |
| 1846 frame.received_info.missing_packets.begin(); | 1733 frame.missing_packets.begin(); |
| 1847 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1734 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); |
| 1848 | 1735 |
| 1849 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1736 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1850 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1737 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1851 kQuicEntropyHashSize; | 1738 kQuicEntropyHashSize; |
| 1852 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1739 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 1853 PACKET_6BYTE_SEQUENCE_NUMBER; | 1740 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 1854 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + | 1741 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + |
| 1855 kQuicDeltaTimeLargestObservedSize; | 1742 kQuicDeltaTimeLargestObservedSize; |
| 1856 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | 1743 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1881 } | 1768 } |
| 1882 CheckProcessingFails( | 1769 CheckProcessingFails( |
| 1883 packet, | 1770 packet, |
| 1884 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1771 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1885 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1772 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1886 expected_error, QUIC_INVALID_ACK_DATA); | 1773 expected_error, QUIC_INVALID_ACK_DATA); |
| 1887 } | 1774 } |
| 1888 } | 1775 } |
| 1889 | 1776 |
| 1890 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { | 1777 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { |
| 1891 if (framer_.version() <= QUIC_VERSION_15) { | |
| 1892 return; | |
| 1893 } | |
| 1894 | |
| 1895 unsigned char packet[] = { | 1778 unsigned char packet[] = { |
| 1896 // public flags (8 byte connection_id) | 1779 // public flags (8 byte connection_id) |
| 1897 0x3C, | 1780 0x3C, |
| 1898 // connection_id | 1781 // connection_id |
| 1899 0x10, 0x32, 0x54, 0x76, | 1782 0x10, 0x32, 0x54, 0x76, |
| 1900 0x98, 0xBA, 0xDC, 0xFE, | 1783 0x98, 0xBA, 0xDC, 0xFE, |
| 1901 // packet sequence number | 1784 // packet sequence number |
| 1902 0xA8, 0x9A, 0x78, 0x56, | 1785 0xA8, 0x9A, 0x78, 0x56, |
| 1903 0x34, 0x12, | 1786 0x34, 0x12, |
| 1904 // private flags (entropy) | 1787 // private flags (entropy) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1930 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1813 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1931 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1814 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1932 | 1815 |
| 1933 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1816 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1934 ASSERT_TRUE(visitor_.header_.get()); | 1817 ASSERT_TRUE(visitor_.header_.get()); |
| 1935 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1818 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1936 | 1819 |
| 1937 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1820 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1938 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1821 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1939 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1822 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1940 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); | 1823 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1941 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); | 1824 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); |
| 1942 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); | 1825 ASSERT_EQ(1u, frame.missing_packets.size()); |
| 1943 SequenceNumberSet::const_iterator missing_iter = | 1826 SequenceNumberSet::const_iterator missing_iter = |
| 1944 frame.received_info.missing_packets.begin(); | 1827 frame.missing_packets.begin(); |
| 1945 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1828 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); |
| 1946 | 1829 |
| 1947 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1830 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1948 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1831 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1949 kQuicEntropyHashSize; | 1832 kQuicEntropyHashSize; |
| 1950 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1833 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
| 1951 PACKET_6BYTE_SEQUENCE_NUMBER; | 1834 PACKET_6BYTE_SEQUENCE_NUMBER; |
| 1952 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + | 1835 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + |
| 1953 kQuicDeltaTimeLargestObservedSize; | 1836 kQuicDeltaTimeLargestObservedSize; |
| 1954 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | 1837 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1984 expected_error = "Unable to read revived packet."; | 1867 expected_error = "Unable to read revived packet."; |
| 1985 } | 1868 } |
| 1986 CheckProcessingFails( | 1869 CheckProcessingFails( |
| 1987 packet, | 1870 packet, |
| 1988 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1871 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1989 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1872 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1990 expected_error, QUIC_INVALID_ACK_DATA); | 1873 expected_error, QUIC_INVALID_ACK_DATA); |
| 1991 } | 1874 } |
| 1992 } | 1875 } |
| 1993 | 1876 |
| 1994 TEST_P(QuicFramerTest, AckFrameRevivedPackets15) { | 1877 TEST_P(QuicFramerTest, AckFrameNoNacks) { |
| 1995 if (framer_.version() != QUIC_VERSION_15) { | |
| 1996 return; | |
| 1997 } | |
| 1998 | |
| 1999 unsigned char packet[] = { | 1878 unsigned char packet[] = { |
| 2000 // public flags (8 byte connection_id) | 1879 // public flags (8 byte connection_id) |
| 2001 0x3C, | 1880 0x3C, |
| 2002 // connection_id | |
| 2003 0x10, 0x32, 0x54, 0x76, | |
| 2004 0x98, 0xBA, 0xDC, 0xFE, | |
| 2005 // packet sequence number | |
| 2006 0xA8, 0x9A, 0x78, 0x56, | |
| 2007 0x34, 0x12, | |
| 2008 // private flags (entropy) | |
| 2009 0x01, | |
| 2010 | |
| 2011 // frame type (ack frame) | |
| 2012 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 2013 0x6C, | |
| 2014 // entropy hash of sent packets till least awaiting - 1. | |
| 2015 0xAB, | |
| 2016 // least packet sequence number awaiting an ack, delta from sequence number. | |
| 2017 0x08, 0x00, 0x00, 0x00, | |
| 2018 0x00, 0x00, | |
| 2019 // entropy hash of all received packets. | |
| 2020 0xBA, | |
| 2021 // largest observed packet sequence number | |
| 2022 0xBF, 0x9A, 0x78, 0x56, | |
| 2023 0x34, 0x12, | |
| 2024 // Zero delta time. | |
| 2025 0x0, 0x0, | |
| 2026 // num missing packets | |
| 2027 0x01, | |
| 2028 // missing packet delta | |
| 2029 0x01, | |
| 2030 // 0 more missing packets in range. | |
| 2031 0x00, | |
| 2032 // Number of revived packets. | |
| 2033 0x01, | |
| 2034 // Revived packet sequence number. | |
| 2035 0xBE, 0x9A, 0x78, 0x56, | |
| 2036 0x34, 0x12, | |
| 2037 }; | |
| 2038 | |
| 2039 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 2040 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 2041 | |
| 2042 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 2043 ASSERT_TRUE(visitor_.header_.get()); | |
| 2044 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | |
| 2045 | |
| 2046 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 2047 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 2048 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
| 2049 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash); | |
| 2050 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); | |
| 2051 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); | |
| 2052 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); | |
| 2053 SequenceNumberSet::const_iterator missing_iter = | |
| 2054 frame.received_info.missing_packets.begin(); | |
| 2055 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | |
| 2056 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); | |
| 2057 | |
| 2058 const size_t kSentEntropyOffset = kQuicFrameTypeSize; | |
| 2059 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | |
| 2060 const size_t kReceivedEntropyOffset = kLeastUnackedOffset + | |
| 2061 PACKET_6BYTE_SEQUENCE_NUMBER; | |
| 2062 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | |
| 2063 kQuicEntropyHashSize; | |
| 2064 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | |
| 2065 PACKET_6BYTE_SEQUENCE_NUMBER; | |
| 2066 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + | |
| 2067 kQuicDeltaTimeLargestObservedSize; | |
| 2068 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | |
| 2069 kNumberOfNackRangesSize; | |
| 2070 const size_t kMissingPacketsRange = kMissingPacketsOffset + | |
| 2071 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 2072 const size_t kRevivedPacketsLength = kMissingPacketsRange + | |
| 2073 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 2074 const size_t kRevivedPacketSequenceNumberLength = kRevivedPacketsLength + | |
| 2075 PACKET_1BYTE_SEQUENCE_NUMBER; | |
| 2076 // Now test framing boundaries | |
| 2077 const size_t ack_frame_size = kRevivedPacketSequenceNumberLength + | |
| 2078 PACKET_6BYTE_SEQUENCE_NUMBER; | |
| 2079 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
| 2080 string expected_error; | |
| 2081 if (i < kLeastUnackedOffset) { | |
| 2082 expected_error = "Unable to read entropy hash for sent packets."; | |
| 2083 } else if (i < kReceivedEntropyOffset) { | |
| 2084 expected_error = "Unable to read least unacked delta."; | |
| 2085 } else if (i < kLargestObservedOffset) { | |
| 2086 expected_error = "Unable to read entropy hash for received packets."; | |
| 2087 } else if (i < kMissingDeltaTimeOffset) { | |
| 2088 expected_error = "Unable to read largest observed."; | |
| 2089 } else if (i < kNumMissingPacketOffset) { | |
| 2090 expected_error = "Unable to read delta time largest observed."; | |
| 2091 } else if (i < kMissingPacketsOffset) { | |
| 2092 expected_error = "Unable to read num missing packet ranges."; | |
| 2093 } else if (i < kMissingPacketsRange) { | |
| 2094 expected_error = "Unable to read missing sequence number delta."; | |
| 2095 } else if (i < kRevivedPacketsLength) { | |
| 2096 expected_error = "Unable to read missing sequence number range."; | |
| 2097 } else if (i < kRevivedPacketSequenceNumberLength) { | |
| 2098 expected_error = "Unable to read num revived packets."; | |
| 2099 } else { | |
| 2100 expected_error = "Unable to read revived packet."; | |
| 2101 } | |
| 2102 CheckProcessingFails( | |
| 2103 packet, | |
| 2104 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | |
| 2105 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | |
| 2106 expected_error, QUIC_INVALID_ACK_DATA); | |
| 2107 } | |
| 2108 } | |
| 2109 | |
| 2110 TEST_P(QuicFramerTest, AckFrameNoNacks) { | |
| 2111 if (framer_.version() <= QUIC_VERSION_15) { | |
| 2112 return; | |
| 2113 } | |
| 2114 unsigned char packet[] = { | |
| 2115 // public flags (8 byte connection_id) | |
| 2116 0x3C, | |
| 2117 // connection_id | |
| 2118 0x10, 0x32, 0x54, 0x76, | |
| 2119 0x98, 0xBA, 0xDC, 0xFE, | |
| 2120 // packet sequence number | |
| 2121 0xA8, 0x9A, 0x78, 0x56, | |
| 2122 0x34, 0x12, | |
| 2123 // private flags (entropy) | |
| 2124 0x01, | |
| 2125 | |
| 2126 // frame type (ack frame) | |
| 2127 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 2128 0x4C, | |
| 2129 // entropy hash of all received packets. | |
| 2130 0xBA, | |
| 2131 // largest observed packet sequence number | |
| 2132 0xBF, 0x9A, 0x78, 0x56, | |
| 2133 0x34, 0x12, | |
| 2134 // Zero delta time. | |
| 2135 0x0, 0x0, | |
| 2136 }; | |
| 2137 | |
| 2138 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 2139 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 2140 | |
| 2141 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 2142 ASSERT_TRUE(visitor_.header_.get()); | |
| 2143 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | |
| 2144 | |
| 2145 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 2146 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 2147 QuicAckFrame* frame = visitor_.ack_frames_[0]; | |
| 2148 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); | |
| 2149 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), | |
| 2150 frame->received_info.largest_observed); | |
| 2151 ASSERT_EQ(0u, frame->received_info.missing_packets.size()); | |
| 2152 | |
| 2153 // Verify that the packet re-serializes identically. | |
| 2154 QuicFrames frames; | |
| 2155 frames.push_back(QuicFrame(frame)); | |
| 2156 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | |
| 2157 ASSERT_TRUE(data != NULL); | |
| 2158 | |
| 2159 test::CompareCharArraysWithHexError("constructed packet", | |
| 2160 data->data(), data->length(), | |
| 2161 AsChars(packet), arraysize(packet)); | |
| 2162 } | |
| 2163 | |
| 2164 TEST_P(QuicFramerTest, AckFrameNoNacks15) { | |
| 2165 if (framer_.version() > QUIC_VERSION_15) { | |
| 2166 return; | |
| 2167 } | |
| 2168 unsigned char packet[] = { | |
| 2169 // public flags (8 byte connection_id) | |
| 2170 0x3C, | |
| 2171 // connection_id | |
| 2172 0x10, 0x32, 0x54, 0x76, | |
| 2173 0x98, 0xBA, 0xDC, 0xFE, | |
| 2174 // packet sequence number | |
| 2175 0xA8, 0x9A, 0x78, 0x56, | |
| 2176 0x34, 0x12, | |
| 2177 // private flags (entropy) | |
| 2178 0x01, | |
| 2179 | |
| 2180 // frame type (ack frame) | |
| 2181 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 2182 0x4C, | |
| 2183 // entropy hash of sent packets till least awaiting - 1. | |
| 2184 0xAB, | |
| 2185 // least packet sequence number awaiting an ack, delta from sequence number. | |
| 2186 0x08, 0x00, 0x00, 0x00, | |
| 2187 0x00, 0x00, | |
| 2188 // entropy hash of all received packets. | |
| 2189 0xBA, | |
| 2190 // largest observed packet sequence number | |
| 2191 0xBF, 0x9A, 0x78, 0x56, | |
| 2192 0x34, 0x12, | |
| 2193 // Zero delta time. | |
| 2194 0x0, 0x0, | |
| 2195 }; | |
| 2196 | |
| 2197 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 2198 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 2199 | |
| 2200 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 2201 ASSERT_TRUE(visitor_.header_.get()); | |
| 2202 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | |
| 2203 | |
| 2204 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 2205 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 2206 QuicAckFrame* frame = visitor_.ack_frames_[0]; | |
| 2207 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash); | |
| 2208 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); | |
| 2209 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), | |
| 2210 frame->received_info.largest_observed); | |
| 2211 ASSERT_EQ(0u, frame->received_info.missing_packets.size()); | |
| 2212 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked); | |
| 2213 | |
| 2214 // Verify that the packet re-serializes identically. | |
| 2215 QuicFrames frames; | |
| 2216 frames.push_back(QuicFrame(frame)); | |
| 2217 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | |
| 2218 ASSERT_TRUE(data != NULL); | |
| 2219 | |
| 2220 test::CompareCharArraysWithHexError("constructed packet", | |
| 2221 data->data(), data->length(), | |
| 2222 AsChars(packet), arraysize(packet)); | |
| 2223 } | |
| 2224 | |
| 2225 TEST_P(QuicFramerTest, AckFrame500Nacks) { | |
| 2226 if (framer_.version() <= QUIC_VERSION_15) { | |
| 2227 return; | |
| 2228 } | |
| 2229 unsigned char packet[] = { | |
| 2230 // public flags (8 byte connection_id) | |
| 2231 0x3C, | |
| 2232 // connection_id | 1881 // connection_id |
| 2233 0x10, 0x32, 0x54, 0x76, | 1882 0x10, 0x32, 0x54, 0x76, |
| 2234 0x98, 0xBA, 0xDC, 0xFE, | 1883 0x98, 0xBA, 0xDC, 0xFE, |
| 2235 // packet sequence number | 1884 // packet sequence number |
| 2236 0xA8, 0x9A, 0x78, 0x56, | 1885 0xA8, 0x9A, 0x78, 0x56, |
| 2237 0x34, 0x12, | 1886 0x34, 0x12, |
| 2238 // private flags (entropy) | 1887 // private flags (entropy) |
| 2239 0x01, | 1888 0x01, |
| 2240 | 1889 |
| 2241 // frame type (ack frame) | 1890 // frame type (ack frame) |
| 2242 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 1891 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 2243 0x6C, | 1892 0x4C, |
| 2244 // entropy hash of all received packets. | 1893 // entropy hash of all received packets. |
| 2245 0xBA, | 1894 0xBA, |
| 2246 // largest observed packet sequence number | 1895 // largest observed packet sequence number |
| 2247 0xBF, 0x9A, 0x78, 0x56, | 1896 0xBF, 0x9A, 0x78, 0x56, |
| 2248 0x34, 0x12, | 1897 0x34, 0x12, |
| 2249 // Zero delta time. | 1898 // Zero delta time. |
| 2250 0x0, 0x0, | 1899 0x0, 0x0, |
| 2251 // num missing packet ranges | |
| 2252 0x02, | |
| 2253 // missing packet delta | |
| 2254 0x01, | |
| 2255 // 243 more missing packets in range. | |
| 2256 // The ranges are listed in this order so the re-constructed packet matches. | |
| 2257 0xF3, | |
| 2258 // No gap between ranges | |
| 2259 0x00, | |
| 2260 // 255 more missing packets in range. | |
| 2261 0xFF, | |
| 2262 // No revived packets. | |
| 2263 0x00, | |
| 2264 }; | 1900 }; |
| 2265 | 1901 |
| 2266 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1902 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2267 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1903 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2268 | 1904 |
| 2269 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1905 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2270 ASSERT_TRUE(visitor_.header_.get()); | 1906 ASSERT_TRUE(visitor_.header_.get()); |
| 2271 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1907 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2272 | 1908 |
| 2273 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1909 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2274 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1910 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2275 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 1911 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2276 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); | 1912 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2277 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), | 1913 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); |
| 2278 frame->received_info.largest_observed); | 1914 ASSERT_EQ(0u, frame->missing_packets.size()); |
| 2279 EXPECT_EQ(0u, frame->received_info.revived_packets.size()); | |
| 2280 ASSERT_EQ(500u, frame->received_info.missing_packets.size()); | |
| 2281 SequenceNumberSet::const_iterator first_missing_iter = | |
| 2282 frame->received_info.missing_packets.begin(); | |
| 2283 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); | |
| 2284 SequenceNumberSet::const_reverse_iterator last_missing_iter = | |
| 2285 frame->received_info.missing_packets.rbegin(); | |
| 2286 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); | |
| 2287 | 1915 |
| 2288 // Verify that the packet re-serializes identically. | 1916 // Verify that the packet re-serializes identically. |
| 2289 QuicFrames frames; | 1917 QuicFrames frames; |
| 2290 frames.push_back(QuicFrame(frame)); | 1918 frames.push_back(QuicFrame(frame)); |
| 2291 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 1919 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2292 ASSERT_TRUE(data != NULL); | 1920 ASSERT_TRUE(data != NULL); |
| 2293 | 1921 |
| 2294 test::CompareCharArraysWithHexError("constructed packet", | 1922 test::CompareCharArraysWithHexError("constructed packet", |
| 2295 data->data(), data->length(), | 1923 data->data(), data->length(), |
| 2296 AsChars(packet), arraysize(packet)); | 1924 AsChars(packet), arraysize(packet)); |
| 2297 } | 1925 } |
| 2298 | 1926 |
| 2299 TEST_P(QuicFramerTest, AckFrame500Nacks15) { | 1927 TEST_P(QuicFramerTest, AckFrame500Nacks) { |
| 2300 if (framer_.version() != QUIC_VERSION_15) { | |
| 2301 return; | |
| 2302 } | |
| 2303 unsigned char packet[] = { | 1928 unsigned char packet[] = { |
| 2304 // public flags (8 byte connection_id) | 1929 // public flags (8 byte connection_id) |
| 2305 0x3C, | 1930 0x3C, |
| 2306 // connection_id | 1931 // connection_id |
| 2307 0x10, 0x32, 0x54, 0x76, | 1932 0x10, 0x32, 0x54, 0x76, |
| 2308 0x98, 0xBA, 0xDC, 0xFE, | 1933 0x98, 0xBA, 0xDC, 0xFE, |
| 2309 // packet sequence number | 1934 // packet sequence number |
| 2310 0xA8, 0x9A, 0x78, 0x56, | 1935 0xA8, 0x9A, 0x78, 0x56, |
| 2311 0x34, 0x12, | 1936 0x34, 0x12, |
| 2312 // private flags (entropy) | 1937 // private flags (entropy) |
| 2313 0x01, | 1938 0x01, |
| 2314 | 1939 |
| 2315 // frame type (ack frame) | 1940 // frame type (ack frame) |
| 2316 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 1941 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 2317 0x6C, | 1942 0x6C, |
| 2318 // entropy hash of sent packets till least awaiting - 1. | |
| 2319 0xAB, | |
| 2320 // least packet sequence number awaiting an ack, delta from sequence number. | |
| 2321 0x08, 0x00, 0x00, 0x00, | |
| 2322 0x00, 0x00, | |
| 2323 // entropy hash of all received packets. | 1943 // entropy hash of all received packets. |
| 2324 0xBA, | 1944 0xBA, |
| 2325 // largest observed packet sequence number | 1945 // largest observed packet sequence number |
| 2326 0xBF, 0x9A, 0x78, 0x56, | 1946 0xBF, 0x9A, 0x78, 0x56, |
| 2327 0x34, 0x12, | 1947 0x34, 0x12, |
| 2328 // Zero delta time. | 1948 // Zero delta time. |
| 2329 0x0, 0x0, | 1949 0x0, 0x0, |
| 2330 // num missing packet ranges | 1950 // num missing packet ranges |
| 2331 0x02, | 1951 0x02, |
| 2332 // missing packet delta | 1952 // missing packet delta |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2345 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1965 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2346 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1966 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2347 | 1967 |
| 2348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1968 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2349 ASSERT_TRUE(visitor_.header_.get()); | 1969 ASSERT_TRUE(visitor_.header_.get()); |
| 2350 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1970 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2351 | 1971 |
| 2352 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1972 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2353 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1973 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2354 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 1974 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2355 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash); | 1975 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2356 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); | 1976 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); |
| 2357 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), | 1977 EXPECT_EQ(0u, frame->revived_packets.size()); |
| 2358 frame->received_info.largest_observed); | 1978 ASSERT_EQ(500u, frame->missing_packets.size()); |
| 2359 EXPECT_EQ(0u, frame->received_info.revived_packets.size()); | |
| 2360 ASSERT_EQ(500u, frame->received_info.missing_packets.size()); | |
| 2361 SequenceNumberSet::const_iterator first_missing_iter = | 1979 SequenceNumberSet::const_iterator first_missing_iter = |
| 2362 frame->received_info.missing_packets.begin(); | 1980 frame->missing_packets.begin(); |
| 2363 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); | 1981 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); |
| 2364 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 1982 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 2365 frame->received_info.missing_packets.rbegin(); | 1983 frame->missing_packets.rbegin(); |
| 2366 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); | 1984 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); |
| 2367 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked); | |
| 2368 | 1985 |
| 2369 // Verify that the packet re-serializes identically. | 1986 // Verify that the packet re-serializes identically. |
| 2370 QuicFrames frames; | 1987 QuicFrames frames; |
| 2371 frames.push_back(QuicFrame(frame)); | 1988 frames.push_back(QuicFrame(frame)); |
| 2372 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 1989 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2373 ASSERT_TRUE(data != NULL); | 1990 ASSERT_TRUE(data != NULL); |
| 2374 | 1991 |
| 2375 test::CompareCharArraysWithHexError("constructed packet", | 1992 test::CompareCharArraysWithHexError("constructed packet", |
| 2376 data->data(), data->length(), | 1993 data->data(), data->length(), |
| 2377 AsChars(packet), arraysize(packet)); | 1994 AsChars(packet), arraysize(packet)); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2511 expected_error = "Unable to read time delta in received packets."; | 2128 expected_error = "Unable to read time delta in received packets."; |
| 2512 } | 2129 } |
| 2513 CheckProcessingFails( | 2130 CheckProcessingFails( |
| 2514 packet, | 2131 packet, |
| 2515 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2132 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2516 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2133 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 2517 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | 2134 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); |
| 2518 } | 2135 } |
| 2519 } | 2136 } |
| 2520 | 2137 |
| 2521 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) { | |
| 2522 unsigned char packet[] = { | |
| 2523 // public flags (8 byte connection_id) | |
| 2524 0x3C, | |
| 2525 // connection_id | |
| 2526 0x10, 0x32, 0x54, 0x76, | |
| 2527 0x98, 0xBA, 0xDC, 0xFE, | |
| 2528 // packet sequence number | |
| 2529 0xBC, 0x9A, 0x78, 0x56, | |
| 2530 0x34, 0x12, | |
| 2531 // private flags | |
| 2532 0x00, | |
| 2533 | |
| 2534 // frame type (congestion feedback frame) | |
| 2535 0x20, | |
| 2536 // congestion feedback type (fix rate) | |
| 2537 0x02, | |
| 2538 // bitrate_in_bytes_per_second; | |
| 2539 0x01, 0x02, 0x03, 0x04, | |
| 2540 }; | |
| 2541 | |
| 2542 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 2543 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 2544 | |
| 2545 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 2546 ASSERT_TRUE(visitor_.header_.get()); | |
| 2547 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | |
| 2548 | |
| 2549 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 2550 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size()); | |
| 2551 const QuicCongestionFeedbackFrame& frame = | |
| 2552 *visitor_.congestion_feedback_frames_[0]; | |
| 2553 ASSERT_EQ(kFixRate, frame.type); | |
| 2554 EXPECT_EQ(static_cast<uint32>(0x04030201), | |
| 2555 frame.fix_rate.bitrate.ToBytesPerSecond()); | |
| 2556 | |
| 2557 // Now test framing boundaries | |
| 2558 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) { | |
| 2559 string expected_error; | |
| 2560 if (i < 2) { | |
| 2561 expected_error = "Unable to read congestion feedback type."; | |
| 2562 } else if (i < 6) { | |
| 2563 expected_error = "Unable to read bitrate."; | |
| 2564 } | |
| 2565 CheckProcessingFails( | |
| 2566 packet, | |
| 2567 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | |
| 2568 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | |
| 2569 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); | |
| 2570 } | |
| 2571 } | |
| 2572 | |
| 2573 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { | 2138 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { |
| 2574 unsigned char packet[] = { | 2139 unsigned char packet[] = { |
| 2575 // public flags (8 byte connection_id) | 2140 // public flags (8 byte connection_id) |
| 2576 0x3C, | 2141 0x3C, |
| 2577 // connection_id | 2142 // connection_id |
| 2578 0x10, 0x32, 0x54, 0x76, | 2143 0x10, 0x32, 0x54, 0x76, |
| 2579 0x98, 0xBA, 0xDC, 0xFE, | 2144 0x98, 0xBA, 0xDC, 0xFE, |
| 2580 // packet sequence number | 2145 // packet sequence number |
| 2581 0xBC, 0x9A, 0x78, 0x56, | 2146 0xBC, 0x9A, 0x78, 0x56, |
| 2582 0x34, 0x12, | 2147 0x34, 0x12, |
| 2583 // private flags | 2148 // private flags |
| 2584 0x00, | 2149 0x00, |
| 2585 | 2150 |
| 2586 // frame type (congestion feedback frame) | 2151 // frame type (congestion feedback frame) |
| 2587 0x20, | 2152 0x20, |
| 2588 // congestion feedback type (invalid) | 2153 // congestion feedback type (invalid) |
| 2589 0x03, | 2154 0x03, |
| 2590 }; | 2155 }; |
| 2591 | 2156 |
| 2592 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2157 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2593 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 2158 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 2594 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2159 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2595 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); | 2160 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); |
| 2596 } | 2161 } |
| 2597 | 2162 |
| 2598 TEST_P(QuicFramerTest, StopWaitingFrame) { | 2163 TEST_P(QuicFramerTest, StopWaitingFrame) { |
| 2599 if (framer_.version() <= QUIC_VERSION_15) { | |
| 2600 return; | |
| 2601 } | |
| 2602 unsigned char packet[] = { | 2164 unsigned char packet[] = { |
| 2603 // public flags (8 byte connection_id) | 2165 // public flags (8 byte connection_id) |
| 2604 0x3C, | 2166 0x3C, |
| 2605 // connection_id | 2167 // connection_id |
| 2606 0x10, 0x32, 0x54, 0x76, | 2168 0x10, 0x32, 0x54, 0x76, |
| 2607 0x98, 0xBA, 0xDC, 0xFE, | 2169 0x98, 0xBA, 0xDC, 0xFE, |
| 2608 // packet sequence number | 2170 // packet sequence number |
| 2609 0xA8, 0x9A, 0x78, 0x56, | 2171 0xA8, 0x9A, 0x78, 0x56, |
| 2610 0x34, 0x12, | 2172 0x34, 0x12, |
| 2611 // private flags (entropy) | 2173 // private flags (entropy) |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2694 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2256 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2695 | 2257 |
| 2696 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); | 2258 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); |
| 2697 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2259 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); |
| 2698 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); | 2260 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); |
| 2699 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), | 2261 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), |
| 2700 visitor_.rst_stream_frame_.byte_offset); | 2262 visitor_.rst_stream_frame_.byte_offset); |
| 2701 | 2263 |
| 2702 // Now test framing boundaries | 2264 // Now test framing boundaries |
| 2703 for (size_t i = kQuicFrameTypeSize; | 2265 for (size_t i = kQuicFrameTypeSize; |
| 2704 i < QuicFramer::GetMinRstStreamFrameSize(version_); ++i) { | 2266 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) { |
| 2705 string expected_error; | 2267 string expected_error; |
| 2706 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2268 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2707 expected_error = "Unable to read stream_id."; | 2269 expected_error = "Unable to read stream_id."; |
| 2708 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2270 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2709 + kQuicMaxStreamOffsetSize) { | 2271 + kQuicMaxStreamOffsetSize) { |
| 2710 expected_error = "Unable to read rst stream sent byte offset."; | 2272 expected_error = "Unable to read rst stream sent byte offset."; |
| 2711 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2273 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2712 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { | 2274 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { |
| 2713 expected_error = "Unable to read rst stream error code."; | 2275 expected_error = "Unable to read rst stream error code."; |
| 2714 } else { | 2276 } else { |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3575 versions.push_back(GetParam()); | 3137 versions.push_back(GetParam()); |
| 3576 scoped_ptr<QuicEncryptedPacket> data( | 3138 scoped_ptr<QuicEncryptedPacket> data( |
| 3577 framer_.BuildVersionNegotiationPacket(header, versions)); | 3139 framer_.BuildVersionNegotiationPacket(header, versions)); |
| 3578 | 3140 |
| 3579 test::CompareCharArraysWithHexError("constructed packet", | 3141 test::CompareCharArraysWithHexError("constructed packet", |
| 3580 data->data(), data->length(), | 3142 data->data(), data->length(), |
| 3581 AsChars(packet), arraysize(packet)); | 3143 AsChars(packet), arraysize(packet)); |
| 3582 } | 3144 } |
| 3583 | 3145 |
| 3584 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 3146 TEST_P(QuicFramerTest, BuildAckFramePacket) { |
| 3585 if (version_ <= QUIC_VERSION_15) { | |
| 3586 return; | |
| 3587 } | |
| 3588 QuicPacketHeader header; | 3147 QuicPacketHeader header; |
| 3589 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3148 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 3590 header.public_header.reset_flag = false; | 3149 header.public_header.reset_flag = false; |
| 3591 header.public_header.version_flag = false; | |
| 3592 header.fec_flag = false; | |
| 3593 header.entropy_flag = true; | |
| 3594 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | |
| 3595 header.fec_group = 0; | |
| 3596 | |
| 3597 QuicAckFrame ack_frame; | |
| 3598 ack_frame.received_info.entropy_hash = 0x43; | |
| 3599 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); | |
| 3600 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | |
| 3601 ack_frame.received_info.missing_packets.insert( | |
| 3602 GG_UINT64_C(0x770123456789ABE)); | |
| 3603 | |
| 3604 QuicFrames frames; | |
| 3605 frames.push_back(QuicFrame(&ack_frame)); | |
| 3606 | |
| 3607 unsigned char packet[] = { | |
| 3608 // public flags (8 byte connection_id) | |
| 3609 0x3C, | |
| 3610 // connection_id | |
| 3611 0x10, 0x32, 0x54, 0x76, | |
| 3612 0x98, 0xBA, 0xDC, 0xFE, | |
| 3613 // packet sequence number | |
| 3614 0xA8, 0x9A, 0x78, 0x56, | |
| 3615 0x34, 0x12, | |
| 3616 // private flags (entropy) | |
| 3617 0x01, | |
| 3618 | |
| 3619 // frame type (ack frame) | |
| 3620 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 3621 0x6C, | |
| 3622 // entropy hash of all received packets. | |
| 3623 0x43, | |
| 3624 // largest observed packet sequence number | |
| 3625 0xBF, 0x9A, 0x78, 0x56, | |
| 3626 0x34, 0x12, | |
| 3627 // Zero delta time. | |
| 3628 0x0, 0x0, | |
| 3629 // num missing packet ranges | |
| 3630 0x01, | |
| 3631 // missing packet delta | |
| 3632 0x01, | |
| 3633 // 0 more missing packets in range. | |
| 3634 0x00, | |
| 3635 // 0 revived packets. | |
| 3636 0x00, | |
| 3637 }; | |
| 3638 | |
| 3639 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | |
| 3640 ASSERT_TRUE(data != NULL); | |
| 3641 | |
| 3642 test::CompareCharArraysWithHexError("constructed packet", | |
| 3643 data->data(), data->length(), | |
| 3644 AsChars(packet), arraysize(packet)); | |
| 3645 } | |
| 3646 | |
| 3647 TEST_P(QuicFramerTest, BuildAckFramePacket15) { | |
| 3648 if (version_ != QUIC_VERSION_15) { | |
| 3649 return; | |
| 3650 } | |
| 3651 QuicPacketHeader header; | |
| 3652 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | |
| 3653 header.public_header.reset_flag = false; | |
| 3654 header.public_header.version_flag = false; | 3150 header.public_header.version_flag = false; |
| 3655 header.fec_flag = false; | 3151 header.fec_flag = false; |
| 3656 header.entropy_flag = true; | 3152 header.entropy_flag = true; |
| 3657 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3153 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
| 3658 header.fec_group = 0; | 3154 header.fec_group = 0; |
| 3659 | 3155 |
| 3660 QuicAckFrame ack_frame; | 3156 QuicAckFrame ack_frame; |
| 3661 ack_frame.received_info.entropy_hash = 0x43; | 3157 ack_frame.entropy_hash = 0x43; |
| 3662 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); | 3158 ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF); |
| 3663 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3159 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3664 ack_frame.received_info.missing_packets.insert( | 3160 ack_frame.missing_packets.insert( |
| 3665 GG_UINT64_C(0x770123456789ABE)); | 3161 GG_UINT64_C(0x770123456789ABE)); |
| 3666 ack_frame.sent_info.entropy_hash = 0x14; | |
| 3667 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); | |
| 3668 | 3162 |
| 3669 QuicFrames frames; | 3163 QuicFrames frames; |
| 3670 frames.push_back(QuicFrame(&ack_frame)); | 3164 frames.push_back(QuicFrame(&ack_frame)); |
| 3671 | 3165 |
| 3672 unsigned char packet[] = { | 3166 unsigned char packet[] = { |
| 3673 // public flags (8 byte connection_id) | 3167 // public flags (8 byte connection_id) |
| 3674 0x3C, | 3168 0x3C, |
| 3675 // connection_id | 3169 // connection_id |
| 3676 0x10, 0x32, 0x54, 0x76, | 3170 0x10, 0x32, 0x54, 0x76, |
| 3677 0x98, 0xBA, 0xDC, 0xFE, | 3171 0x98, 0xBA, 0xDC, 0xFE, |
| 3678 // packet sequence number | 3172 // packet sequence number |
| 3679 0xA8, 0x9A, 0x78, 0x56, | 3173 0xA8, 0x9A, 0x78, 0x56, |
| 3680 0x34, 0x12, | 3174 0x34, 0x12, |
| 3681 // private flags (entropy) | 3175 // private flags (entropy) |
| 3682 0x01, | 3176 0x01, |
| 3683 | 3177 |
| 3684 // frame type (ack frame) | 3178 // frame type (ack frame) |
| 3685 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 3179 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 3686 0x6C, | 3180 0x6C, |
| 3687 // entropy hash of sent packets till least awaiting - 1. | |
| 3688 0x14, | |
| 3689 // least packet sequence number awaiting an ack, delta from sequence number. | |
| 3690 0x08, 0x00, 0x00, 0x00, | |
| 3691 0x00, 0x00, | |
| 3692 // entropy hash of all received packets. | 3181 // entropy hash of all received packets. |
| 3693 0x43, | 3182 0x43, |
| 3694 // largest observed packet sequence number | 3183 // largest observed packet sequence number |
| 3695 0xBF, 0x9A, 0x78, 0x56, | 3184 0xBF, 0x9A, 0x78, 0x56, |
| 3696 0x34, 0x12, | 3185 0x34, 0x12, |
| 3697 // Zero delta time. | 3186 // Zero delta time. |
| 3698 0x0, 0x0, | 3187 0x0, 0x0, |
| 3699 // num missing packet ranges | 3188 // num missing packet ranges |
| 3700 0x01, | 3189 0x01, |
| 3701 // missing packet delta | 3190 // missing packet delta |
| 3702 0x01, | 3191 0x01, |
| 3703 // 0 more missing packets in range. | 3192 // 0 more missing packets in range. |
| 3704 0x00, | 3193 0x00, |
| 3705 // 0 revived packets. | 3194 // 0 revived packets. |
| 3706 0x00, | 3195 0x00, |
| 3707 }; | 3196 }; |
| 3708 | 3197 |
| 3709 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3198 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3710 ASSERT_TRUE(data != NULL); | 3199 ASSERT_TRUE(data != NULL); |
| 3711 | 3200 |
| 3712 test::CompareCharArraysWithHexError("constructed packet", | 3201 test::CompareCharArraysWithHexError("constructed packet", |
| 3713 data->data(), data->length(), | 3202 data->data(), data->length(), |
| 3714 AsChars(packet), arraysize(packet)); | 3203 AsChars(packet), arraysize(packet)); |
| 3715 } | 3204 } |
| 3716 | 3205 |
| 3717 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 3206 // TODO(jri): Add test for tuncated packets in which the original ack frame had |
| 3718 // revived packets. (In both the large and small packet cases below). | 3207 // revived packets. (In both the large and small packet cases below). |
| 3719 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 3208 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
| 3720 if (version_ <= QUIC_VERSION_15) { | |
| 3721 return; | |
| 3722 } | |
| 3723 QuicPacketHeader header; | 3209 QuicPacketHeader header; |
| 3724 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3210 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 3725 header.public_header.reset_flag = false; | 3211 header.public_header.reset_flag = false; |
| 3726 header.public_header.version_flag = false; | 3212 header.public_header.version_flag = false; |
| 3727 header.fec_flag = false; | 3213 header.fec_flag = false; |
| 3728 header.entropy_flag = true; | 3214 header.entropy_flag = true; |
| 3729 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3215 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
| 3730 header.fec_group = 0; | 3216 header.fec_group = 0; |
| 3731 | 3217 |
| 3732 QuicAckFrame ack_frame; | 3218 QuicAckFrame ack_frame; |
| 3733 // This entropy hash is different from what shows up in the packet below, | 3219 // This entropy hash is different from what shows up in the packet below, |
| 3734 // since entropy is recomputed by the framer on ack truncation (by | 3220 // since entropy is recomputed by the framer on ack truncation (by |
| 3735 // TestEntropyCalculator for this test.) | 3221 // TestEntropyCalculator for this test.) |
| 3736 ack_frame.received_info.entropy_hash = 0x43; | 3222 ack_frame.entropy_hash = 0x43; |
| 3737 ack_frame.received_info.largest_observed = 2 * 300; | 3223 ack_frame.largest_observed = 2 * 300; |
| 3738 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3224 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3739 for (size_t i = 1; i < 2 * 300; i += 2) { | 3225 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 3740 ack_frame.received_info.missing_packets.insert(i); | 3226 ack_frame.missing_packets.insert(i); |
| 3741 } | 3227 } |
| 3742 | 3228 |
| 3743 QuicFrames frames; | 3229 QuicFrames frames; |
| 3744 frames.push_back(QuicFrame(&ack_frame)); | 3230 frames.push_back(QuicFrame(&ack_frame)); |
| 3745 | 3231 |
| 3746 unsigned char packet[] = { | 3232 unsigned char packet[] = { |
| 3747 // public flags (8 byte connection_id) | 3233 // public flags (8 byte connection_id) |
| 3748 0x3C, | 3234 0x3C, |
| 3749 // connection_id | 3235 // connection_id |
| 3750 0x10, 0x32, 0x54, 0x76, | 3236 0x10, 0x32, 0x54, 0x76, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3826 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); | 3312 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); |
| 3827 ASSERT_TRUE(data != NULL); | 3313 ASSERT_TRUE(data != NULL); |
| 3828 | 3314 |
| 3829 test::CompareCharArraysWithHexError("constructed packet", | 3315 test::CompareCharArraysWithHexError("constructed packet", |
| 3830 data->data(), data->length(), | 3316 data->data(), data->length(), |
| 3831 AsChars(packet), arraysize(packet)); | 3317 AsChars(packet), arraysize(packet)); |
| 3832 } | 3318 } |
| 3833 | 3319 |
| 3834 | 3320 |
| 3835 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3321 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
| 3836 if (version_ <= QUIC_VERSION_15) { | |
| 3837 return; | |
| 3838 } | |
| 3839 QuicPacketHeader header; | 3322 QuicPacketHeader header; |
| 3840 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3323 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 3841 header.public_header.reset_flag = false; | 3324 header.public_header.reset_flag = false; |
| 3842 header.public_header.version_flag = false; | 3325 header.public_header.version_flag = false; |
| 3843 header.fec_flag = false; | 3326 header.fec_flag = false; |
| 3844 header.entropy_flag = true; | 3327 header.entropy_flag = true; |
| 3845 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3328 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
| 3846 header.fec_group = 0; | 3329 header.fec_group = 0; |
| 3847 | 3330 |
| 3848 QuicAckFrame ack_frame; | 3331 QuicAckFrame ack_frame; |
| 3849 // This entropy hash is different from what shows up in the packet below, | 3332 // This entropy hash is different from what shows up in the packet below, |
| 3850 // since entropy is recomputed by the framer on ack truncation (by | 3333 // since entropy is recomputed by the framer on ack truncation (by |
| 3851 // TestEntropyCalculator for this test.) | 3334 // TestEntropyCalculator for this test.) |
| 3852 ack_frame.received_info.entropy_hash = 0x43; | 3335 ack_frame.entropy_hash = 0x43; |
| 3853 ack_frame.received_info.largest_observed = 2 * 300; | 3336 ack_frame.largest_observed = 2 * 300; |
| 3854 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3337 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3855 for (size_t i = 1; i < 2 * 300; i += 2) { | 3338 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 3856 ack_frame.received_info.missing_packets.insert(i); | 3339 ack_frame.missing_packets.insert(i); |
| 3857 } | 3340 } |
| 3858 | 3341 |
| 3859 QuicFrames frames; | 3342 QuicFrames frames; |
| 3860 frames.push_back(QuicFrame(&ack_frame)); | 3343 frames.push_back(QuicFrame(&ack_frame)); |
| 3861 | 3344 |
| 3862 unsigned char packet[] = { | 3345 unsigned char packet[] = { |
| 3863 // public flags (8 byte connection_id) | 3346 // public flags (8 byte connection_id) |
| 3864 0x3C, | 3347 0x3C, |
| 3865 // connection_id | 3348 // connection_id |
| 3866 0x10, 0x32, 0x54, 0x76, | 3349 0x10, 0x32, 0x54, 0x76, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4009 | 3492 |
| 4010 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3493 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 4011 ASSERT_TRUE(data != NULL); | 3494 ASSERT_TRUE(data != NULL); |
| 4012 | 3495 |
| 4013 test::CompareCharArraysWithHexError("constructed packet", | 3496 test::CompareCharArraysWithHexError("constructed packet", |
| 4014 data->data(), data->length(), | 3497 data->data(), data->length(), |
| 4015 AsChars(packet), arraysize(packet)); | 3498 AsChars(packet), arraysize(packet)); |
| 4016 } | 3499 } |
| 4017 | 3500 |
| 4018 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3501 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
| 4019 if (version_ <= QUIC_VERSION_15) { | |
| 4020 return; | |
| 4021 } | |
| 4022 QuicPacketHeader header; | 3502 QuicPacketHeader header; |
| 4023 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3503 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 4024 header.public_header.reset_flag = false; | 3504 header.public_header.reset_flag = false; |
| 4025 header.public_header.version_flag = false; | 3505 header.public_header.version_flag = false; |
| 4026 header.fec_flag = false; | 3506 header.fec_flag = false; |
| 4027 header.entropy_flag = true; | 3507 header.entropy_flag = true; |
| 4028 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); | 3508 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); |
| 4029 header.fec_group = 0; | 3509 header.fec_group = 0; |
| 4030 | 3510 |
| 4031 QuicStopWaitingFrame stop_waiting_frame; | 3511 QuicStopWaitingFrame stop_waiting_frame; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 4057 }; | 3537 }; |
| 4058 | 3538 |
| 4059 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3539 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 4060 ASSERT_TRUE(data != NULL); | 3540 ASSERT_TRUE(data != NULL); |
| 4061 | 3541 |
| 4062 test::CompareCharArraysWithHexError("constructed packet", | 3542 test::CompareCharArraysWithHexError("constructed packet", |
| 4063 data->data(), data->length(), | 3543 data->data(), data->length(), |
| 4064 AsChars(packet), arraysize(packet)); | 3544 AsChars(packet), arraysize(packet)); |
| 4065 } | 3545 } |
| 4066 | 3546 |
| 4067 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) { | |
| 4068 QuicPacketHeader header; | |
| 4069 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | |
| 4070 header.public_header.reset_flag = false; | |
| 4071 header.public_header.version_flag = false; | |
| 4072 header.fec_flag = false; | |
| 4073 header.entropy_flag = false; | |
| 4074 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | |
| 4075 header.fec_group = 0; | |
| 4076 | |
| 4077 QuicCongestionFeedbackFrame congestion_feedback_frame; | |
| 4078 congestion_feedback_frame.type = kFixRate; | |
| 4079 congestion_feedback_frame.fix_rate.bitrate | |
| 4080 = QuicBandwidth::FromBytesPerSecond(0x04030201); | |
| 4081 | |
| 4082 QuicFrames frames; | |
| 4083 frames.push_back(QuicFrame(&congestion_feedback_frame)); | |
| 4084 | |
| 4085 unsigned char packet[] = { | |
| 4086 // public flags (8 byte connection_id) | |
| 4087 0x3C, | |
| 4088 // connection_id | |
| 4089 0x10, 0x32, 0x54, 0x76, | |
| 4090 0x98, 0xBA, 0xDC, 0xFE, | |
| 4091 // packet sequence number | |
| 4092 0xBC, 0x9A, 0x78, 0x56, | |
| 4093 0x34, 0x12, | |
| 4094 // private flags | |
| 4095 0x00, | |
| 4096 | |
| 4097 // frame type (congestion feedback frame) | |
| 4098 0x20, | |
| 4099 // congestion feedback type (fix rate) | |
| 4100 0x02, | |
| 4101 // bitrate_in_bytes_per_second; | |
| 4102 0x01, 0x02, 0x03, 0x04, | |
| 4103 }; | |
| 4104 | |
| 4105 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | |
| 4106 ASSERT_TRUE(data != NULL); | |
| 4107 | |
| 4108 test::CompareCharArraysWithHexError("constructed packet", | |
| 4109 data->data(), data->length(), | |
| 4110 AsChars(packet), arraysize(packet)); | |
| 4111 } | |
| 4112 | |
| 4113 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) { | 3547 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) { |
| 4114 QuicPacketHeader header; | 3548 QuicPacketHeader header; |
| 4115 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3549 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 4116 header.public_header.reset_flag = false; | 3550 header.public_header.reset_flag = false; |
| 4117 header.public_header.version_flag = false; | 3551 header.public_header.version_flag = false; |
| 4118 header.fec_flag = false; | 3552 header.fec_flag = false; |
| 4119 header.entropy_flag = false; | 3553 header.entropy_flag = false; |
| 4120 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3554 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 4121 header.fec_group = 0; | 3555 header.fec_group = 0; |
| 4122 | 3556 |
| 4123 QuicCongestionFeedbackFrame congestion_feedback_frame; | 3557 QuicCongestionFeedbackFrame congestion_feedback_frame; |
| 4124 congestion_feedback_frame.type = | 3558 congestion_feedback_frame.type = |
| 4125 static_cast<CongestionFeedbackType>(kFixRate + 1); | 3559 static_cast<CongestionFeedbackType>(kInterArrival + 1); |
| 4126 | 3560 |
| 4127 QuicFrames frames; | 3561 QuicFrames frames; |
| 4128 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 3562 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
| 4129 | 3563 |
| 4130 scoped_ptr<QuicPacket> data; | 3564 scoped_ptr<QuicPacket> data; |
| 4131 EXPECT_DFATAL( | 3565 EXPECT_DFATAL( |
| 4132 data.reset(BuildDataPacket(header, frames)), | 3566 data.reset(BuildDataPacket(header, frames)), |
| 4133 "AppendCongestionFeedbackFrame failed"); | 3567 "AppendCongestionFeedbackFrame failed"); |
| 4134 ASSERT_TRUE(data == NULL); | 3568 ASSERT_TRUE(data == NULL); |
| 4135 } | 3569 } |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4633 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 4067 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
| 4634 PACKET_6BYTE_SEQUENCE_NUMBER)); | 4068 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 4635 scoped_ptr<QuicEncryptedPacket> encrypted( | 4069 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 4636 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 4070 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
| 4637 | 4071 |
| 4638 ASSERT_TRUE(encrypted.get() != NULL); | 4072 ASSERT_TRUE(encrypted.get() != NULL); |
| 4639 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 4073 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 4640 } | 4074 } |
| 4641 | 4075 |
| 4642 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 4076 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
| 4643 if (framer_.version() <= QUIC_VERSION_15) { | |
| 4644 return; | |
| 4645 } | |
| 4646 QuicPacketHeader header; | 4077 QuicPacketHeader header; |
| 4647 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4078 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 4648 header.public_header.reset_flag = false; | 4079 header.public_header.reset_flag = false; |
| 4649 header.public_header.version_flag = false; | 4080 header.public_header.version_flag = false; |
| 4650 header.fec_flag = false; | 4081 header.fec_flag = false; |
| 4651 header.entropy_flag = false; | 4082 header.entropy_flag = false; |
| 4652 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4083 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 4653 header.fec_group = 0; | 4084 header.fec_group = 0; |
| 4654 | 4085 |
| 4655 // Create a packet with just the ack. | 4086 // Create a packet with just the ack. |
| 4656 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4087 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4657 QuicFrame frame; | 4088 QuicFrame frame; |
| 4658 frame.type = ACK_FRAME; | 4089 frame.type = ACK_FRAME; |
| 4659 frame.ack_frame = &ack_frame; | 4090 frame.ack_frame = &ack_frame; |
| 4660 QuicFrames frames; | 4091 QuicFrames frames; |
| 4661 frames.push_back(frame); | 4092 frames.push_back(frame); |
| 4662 | 4093 |
| 4663 // Build an ack packet with truncation due to limit in number of nack ranges. | 4094 // Build an ack packet with truncation due to limit in number of nack ranges. |
| 4664 scoped_ptr<QuicPacket> raw_ack_packet( | 4095 scoped_ptr<QuicPacket> raw_ack_packet( |
| 4665 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); | 4096 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); |
| 4666 ASSERT_TRUE(raw_ack_packet != NULL); | 4097 ASSERT_TRUE(raw_ack_packet != NULL); |
| 4667 scoped_ptr<QuicEncryptedPacket> ack_packet( | 4098 scoped_ptr<QuicEncryptedPacket> ack_packet( |
| 4668 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 4099 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 4669 *raw_ack_packet)); | 4100 *raw_ack_packet)); |
| 4670 // Now make sure we can turn our ack packet back into an ack frame. | 4101 // Now make sure we can turn our ack packet back into an ack frame. |
| 4671 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 4102 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
| 4672 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 4103 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 4673 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4104 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
| 4674 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); | 4105 EXPECT_TRUE(processed_ack_frame.is_truncated); |
| 4675 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed); | 4106 EXPECT_EQ(510u, processed_ack_frame.largest_observed); |
| 4676 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size()); | 4107 ASSERT_EQ(255u, processed_ack_frame.missing_packets.size()); |
| 4677 SequenceNumberSet::const_iterator missing_iter = | 4108 SequenceNumberSet::const_iterator missing_iter = |
| 4678 processed_ack_frame.received_info.missing_packets.begin(); | 4109 processed_ack_frame.missing_packets.begin(); |
| 4679 EXPECT_EQ(1u, *missing_iter); | 4110 EXPECT_EQ(1u, *missing_iter); |
| 4680 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 4111 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 4681 processed_ack_frame.received_info.missing_packets.rbegin(); | 4112 processed_ack_frame.missing_packets.rbegin(); |
| 4682 EXPECT_EQ(509u, *last_missing_iter); | 4113 EXPECT_EQ(509u, *last_missing_iter); |
| 4683 } | 4114 } |
| 4684 | 4115 |
| 4685 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 4116 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { |
| 4686 if (framer_.version() <= QUIC_VERSION_15) { | |
| 4687 return; | |
| 4688 } | |
| 4689 QuicPacketHeader header; | 4117 QuicPacketHeader header; |
| 4690 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4118 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 4691 header.public_header.reset_flag = false; | 4119 header.public_header.reset_flag = false; |
| 4692 header.public_header.version_flag = false; | 4120 header.public_header.version_flag = false; |
| 4693 header.fec_flag = false; | 4121 header.fec_flag = false; |
| 4694 header.entropy_flag = false; | 4122 header.entropy_flag = false; |
| 4695 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4123 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 4696 header.fec_group = 0; | 4124 header.fec_group = 0; |
| 4697 | 4125 |
| 4698 // Create a packet with just the ack. | 4126 // Create a packet with just the ack. |
| 4699 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4127 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4700 QuicFrame frame; | 4128 QuicFrame frame; |
| 4701 frame.type = ACK_FRAME; | 4129 frame.type = ACK_FRAME; |
| 4702 frame.ack_frame = &ack_frame; | 4130 frame.ack_frame = &ack_frame; |
| 4703 QuicFrames frames; | 4131 QuicFrames frames; |
| 4704 frames.push_back(frame); | 4132 frames.push_back(frame); |
| 4705 | 4133 |
| 4706 // Build an ack packet with truncation due to limit in number of nack ranges. | 4134 // Build an ack packet with truncation due to limit in number of nack ranges. |
| 4707 scoped_ptr<QuicPacket> raw_ack_packet( | 4135 scoped_ptr<QuicPacket> raw_ack_packet( |
| 4708 framer_.BuildDataPacket(header, frames, 500).packet); | 4136 framer_.BuildDataPacket(header, frames, 500).packet); |
| 4709 ASSERT_TRUE(raw_ack_packet != NULL); | 4137 ASSERT_TRUE(raw_ack_packet != NULL); |
| 4710 scoped_ptr<QuicEncryptedPacket> ack_packet( | 4138 scoped_ptr<QuicEncryptedPacket> ack_packet( |
| 4711 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 4139 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 4712 *raw_ack_packet)); | 4140 *raw_ack_packet)); |
| 4713 // Now make sure we can turn our ack packet back into an ack frame. | 4141 // Now make sure we can turn our ack packet back into an ack frame. |
| 4714 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 4142 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
| 4715 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 4143 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 4716 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4144 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
| 4717 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); | 4145 EXPECT_TRUE(processed_ack_frame.is_truncated); |
| 4718 EXPECT_EQ(476u, processed_ack_frame.received_info.largest_observed); | 4146 EXPECT_EQ(476u, processed_ack_frame.largest_observed); |
| 4719 ASSERT_EQ(238u, processed_ack_frame.received_info.missing_packets.size()); | 4147 ASSERT_EQ(238u, processed_ack_frame.missing_packets.size()); |
| 4720 SequenceNumberSet::const_iterator missing_iter = | 4148 SequenceNumberSet::const_iterator missing_iter = |
| 4721 processed_ack_frame.received_info.missing_packets.begin(); | 4149 processed_ack_frame.missing_packets.begin(); |
| 4722 EXPECT_EQ(1u, *missing_iter); | 4150 EXPECT_EQ(1u, *missing_iter); |
| 4723 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 4151 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
| 4724 processed_ack_frame.received_info.missing_packets.rbegin(); | 4152 processed_ack_frame.missing_packets.rbegin(); |
| 4725 EXPECT_EQ(475u, *last_missing_iter); | 4153 EXPECT_EQ(475u, *last_missing_iter); |
| 4726 } | 4154 } |
| 4727 | 4155 |
| 4728 TEST_P(QuicFramerTest, Truncation15) { | |
| 4729 if (framer_.version() > QUIC_VERSION_15) { | |
| 4730 return; | |
| 4731 } | |
| 4732 QuicPacketHeader header; | |
| 4733 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | |
| 4734 header.public_header.reset_flag = false; | |
| 4735 header.public_header.version_flag = false; | |
| 4736 header.fec_flag = false; | |
| 4737 header.entropy_flag = false; | |
| 4738 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | |
| 4739 header.fec_group = 0; | |
| 4740 | |
| 4741 QuicAckFrame ack_frame; | |
| 4742 ack_frame.received_info.largest_observed = 601; | |
| 4743 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1; | |
| 4744 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { | |
| 4745 ack_frame.received_info.missing_packets.insert(i); | |
| 4746 } | |
| 4747 | |
| 4748 // Create a packet with just the ack. | |
| 4749 QuicFrame frame; | |
| 4750 frame.type = ACK_FRAME; | |
| 4751 frame.ack_frame = &ack_frame; | |
| 4752 QuicFrames frames; | |
| 4753 frames.push_back(frame); | |
| 4754 | |
| 4755 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); | |
| 4756 ASSERT_TRUE(raw_ack_packet != NULL); | |
| 4757 | |
| 4758 scoped_ptr<QuicEncryptedPacket> ack_packet( | |
| 4759 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | |
| 4760 *raw_ack_packet)); | |
| 4761 | |
| 4762 // Now make sure we can turn our ack packet back into an ack frame. | |
| 4763 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | |
| 4764 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 4765 const QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | |
| 4766 EXPECT_EQ(header.packet_sequence_number - 1, | |
| 4767 processed_ack_frame.sent_info.least_unacked); | |
| 4768 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); | |
| 4769 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed); | |
| 4770 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size()); | |
| 4771 SequenceNumberSet::const_iterator missing_iter = | |
| 4772 processed_ack_frame.received_info.missing_packets.begin(); | |
| 4773 EXPECT_EQ(1u, *missing_iter); | |
| 4774 SequenceNumberSet::const_reverse_iterator last_missing_iter = | |
| 4775 processed_ack_frame.received_info.missing_packets.rbegin(); | |
| 4776 EXPECT_EQ(509u, *last_missing_iter); | |
| 4777 } | |
| 4778 | |
| 4779 TEST_P(QuicFramerTest, CleanTruncation) { | 4156 TEST_P(QuicFramerTest, CleanTruncation) { |
| 4780 QuicPacketHeader header; | 4157 QuicPacketHeader header; |
| 4781 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 4158 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
| 4782 header.public_header.reset_flag = false; | 4159 header.public_header.reset_flag = false; |
| 4783 header.public_header.version_flag = false; | 4160 header.public_header.version_flag = false; |
| 4784 header.fec_flag = false; | 4161 header.fec_flag = false; |
| 4785 header.entropy_flag = true; | 4162 header.entropy_flag = true; |
| 4786 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4163 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 4787 header.fec_group = 0; | 4164 header.fec_group = 0; |
| 4788 | 4165 |
| 4789 QuicAckFrame ack_frame; | 4166 QuicAckFrame ack_frame; |
| 4790 ack_frame.received_info.largest_observed = 201; | 4167 ack_frame.largest_observed = 201; |
| 4791 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 2; | 4168 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) { |
| 4792 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; ++i) { | 4169 ack_frame.missing_packets.insert(i); |
| 4793 ack_frame.received_info.missing_packets.insert(i); | |
| 4794 } | 4170 } |
| 4795 | 4171 |
| 4796 // Create a packet with just the ack. | 4172 // Create a packet with just the ack. |
| 4797 QuicFrame frame; | 4173 QuicFrame frame; |
| 4798 frame.type = ACK_FRAME; | 4174 frame.type = ACK_FRAME; |
| 4799 frame.ack_frame = &ack_frame; | 4175 frame.ack_frame = &ack_frame; |
| 4800 QuicFrames frames; | 4176 QuicFrames frames; |
| 4801 frames.push_back(frame); | 4177 frames.push_back(frame); |
| 4802 | 4178 |
| 4803 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); | 4179 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4951 EXPECT_CALL(visitor, OnPacketComplete()); | 4327 EXPECT_CALL(visitor, OnPacketComplete()); |
| 4952 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 4328 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
| 4953 | 4329 |
| 4954 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4330 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 4955 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4331 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 4956 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4332 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 4957 } | 4333 } |
| 4958 | 4334 |
| 4959 } // namespace test | 4335 } // namespace test |
| 4960 } // namespace net | 4336 } // namespace net |
| OLD | NEW |