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 <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 return accept_public_header_; | 236 return accept_public_header_; |
237 } | 237 } |
238 | 238 |
239 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { | 239 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
240 return true; | 240 return true; |
241 } | 241 } |
242 | 242 |
243 void OnDecryptedPacket(EncryptionLevel level) override {} | 243 void OnDecryptedPacket(EncryptionLevel level) override {} |
244 | 244 |
245 bool OnPacketHeader(const QuicPacketHeader& header) override { | 245 bool OnPacketHeader(const QuicPacketHeader& header) override { |
246 if (header.fec_flag) { | |
247 // Drop any FEC packet. | |
248 return false; | |
249 } | |
250 ++packet_count_; | 246 ++packet_count_; |
251 header_.reset(new QuicPacketHeader(header)); | 247 header_.reset(new QuicPacketHeader(header)); |
252 return accept_packet_; | 248 return accept_packet_; |
253 } | 249 } |
254 | 250 |
255 bool OnStreamFrame(const QuicStreamFrame& frame) override { | 251 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
256 ++frame_count_; | 252 ++frame_count_; |
257 // Save a copy of the data so it is valid after the packet is processed. | 253 // Save a copy of the data so it is valid after the packet is processed. |
258 string* string_data = new string(); | 254 string* string_data = new string(); |
259 StringPiece(frame.data_buffer, frame.data_length) | 255 StringPiece(frame.data_buffer, frame.data_length) |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 675 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
680 : arraysize(packet_34), | 676 : arraysize(packet_34), |
681 false); | 677 false); |
682 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 678 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
683 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 679 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
684 ASSERT_TRUE(visitor_.header_.get()); | 680 ASSERT_TRUE(visitor_.header_.get()); |
685 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 681 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
686 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 682 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
687 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 683 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
688 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 684 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
689 EXPECT_FALSE(visitor_.header_->fec_flag); | |
690 EXPECT_FALSE(visitor_.header_->entropy_flag); | 685 EXPECT_FALSE(visitor_.header_->entropy_flag); |
691 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 686 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
692 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 687 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
693 | 688 |
694 // Now test framing boundaries. | 689 // Now test framing boundaries. |
695 for (size_t i = 0; | 690 for (size_t i = 0; |
696 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 691 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
697 !kIncludeVersion, !kIncludePathId, | 692 !kIncludeVersion, !kIncludePathId, |
698 !kIncludeDiversificationNonce, | 693 !kIncludeDiversificationNonce, |
699 PACKET_6BYTE_PACKET_NUMBER); | 694 PACKET_6BYTE_PACKET_NUMBER); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
749 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 744 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
750 : arraysize(packet_34), | 745 : arraysize(packet_34), |
751 false); | 746 false); |
752 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 747 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
753 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 748 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
754 ASSERT_TRUE(visitor_.header_.get()); | 749 ASSERT_TRUE(visitor_.header_.get()); |
755 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 750 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
756 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 751 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
757 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 752 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
758 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 753 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
759 EXPECT_FALSE(visitor_.header_->fec_flag); | |
760 EXPECT_FALSE(visitor_.header_->entropy_flag); | 754 EXPECT_FALSE(visitor_.header_->entropy_flag); |
761 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 755 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
762 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 756 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
763 | 757 |
764 // Now test framing boundaries. | 758 // Now test framing boundaries. |
765 for (size_t i = 0; | 759 for (size_t i = 0; |
766 i < GetPacketHeaderSize(framer_.version(), PACKET_0BYTE_CONNECTION_ID, | 760 i < GetPacketHeaderSize(framer_.version(), PACKET_0BYTE_CONNECTION_ID, |
767 !kIncludeVersion, !kIncludePathId, | 761 !kIncludeVersion, !kIncludePathId, |
768 !kIncludeDiversificationNonce, | 762 !kIncludeDiversificationNonce, |
769 PACKET_6BYTE_PACKET_NUMBER); | 763 PACKET_6BYTE_PACKET_NUMBER); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 : arraysize(packet_34), | 818 : arraysize(packet_34), |
825 false); | 819 false); |
826 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 820 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
827 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 821 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
828 ASSERT_TRUE(visitor_.header_.get()); | 822 ASSERT_TRUE(visitor_.header_.get()); |
829 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 823 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
830 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 824 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
831 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 825 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
832 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 826 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
833 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 827 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
834 EXPECT_FALSE(visitor_.header_->fec_flag); | |
835 EXPECT_FALSE(visitor_.header_->entropy_flag); | 828 EXPECT_FALSE(visitor_.header_->entropy_flag); |
836 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 829 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
837 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 830 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
838 | 831 |
839 // Now test framing boundaries. | 832 // Now test framing boundaries. |
840 for (size_t i = 0; | 833 for (size_t i = 0; |
841 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 834 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
842 kIncludeVersion, !kIncludePathId, | 835 kIncludeVersion, !kIncludePathId, |
843 !kIncludeDiversificationNonce, | 836 !kIncludeDiversificationNonce, |
844 PACKET_6BYTE_PACKET_NUMBER); | 837 PACKET_6BYTE_PACKET_NUMBER); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 false); | 893 false); |
901 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 894 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
902 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 895 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
903 ASSERT_TRUE(visitor_.header_.get()); | 896 ASSERT_TRUE(visitor_.header_.get()); |
904 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, kIncludePathId, | 897 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, kIncludePathId, |
905 !kIncludeDiversificationNonce)); | 898 !kIncludeDiversificationNonce)); |
906 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 899 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
907 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); | 900 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); |
908 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 901 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
909 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 902 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
910 EXPECT_FALSE(visitor_.header_->fec_flag); | |
911 EXPECT_FALSE(visitor_.header_->entropy_flag); | 903 EXPECT_FALSE(visitor_.header_->entropy_flag); |
912 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 904 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
913 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 905 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
914 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 906 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
915 | 907 |
916 // Now test framing boundaries. | 908 // Now test framing boundaries. |
917 for (size_t i = 0; | 909 for (size_t i = 0; |
918 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 910 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
919 !kIncludeVersion, kIncludePathId, | 911 !kIncludeVersion, kIncludePathId, |
920 !kIncludeDiversificationNonce, | 912 !kIncludeDiversificationNonce, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 975 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
984 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 976 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
985 ASSERT_TRUE(visitor_.header_.get()); | 977 ASSERT_TRUE(visitor_.header_.get()); |
986 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, kIncludePathId, | 978 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, kIncludePathId, |
987 !kIncludeDiversificationNonce)); | 979 !kIncludeDiversificationNonce)); |
988 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 980 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
989 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); | 981 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); |
990 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 982 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
991 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 983 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
992 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 984 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
993 EXPECT_FALSE(visitor_.header_->fec_flag); | |
994 EXPECT_FALSE(visitor_.header_->entropy_flag); | 985 EXPECT_FALSE(visitor_.header_->entropy_flag); |
995 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 986 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
996 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 987 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
997 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 988 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
998 | 989 |
999 // Now test framing boundaries. | 990 // Now test framing boundaries. |
1000 for (size_t i = 0; | 991 for (size_t i = 0; |
1001 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 992 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1002 !kIncludeVersion, kIncludePathId, | 993 !kIncludeVersion, kIncludePathId, |
1003 !kIncludeDiversificationNonce, | 994 !kIncludeDiversificationNonce, |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 1219 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
1229 : arraysize(packet_34), | 1220 : arraysize(packet_34), |
1230 false); | 1221 false); |
1231 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1222 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1232 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1223 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
1233 ASSERT_TRUE(visitor_.header_.get()); | 1224 ASSERT_TRUE(visitor_.header_.get()); |
1234 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 1225 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
1235 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 1226 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
1236 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1227 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
1237 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1228 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
1238 EXPECT_FALSE(visitor_.header_->fec_flag); | |
1239 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1229 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1240 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1230 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1241 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1231 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1242 | 1232 |
1243 // Now test framing boundaries. | 1233 // Now test framing boundaries. |
1244 for (size_t i = 0; | 1234 for (size_t i = 0; |
1245 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 1235 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1246 !kIncludeVersion, !kIncludePathId, | 1236 !kIncludeVersion, !kIncludePathId, |
1247 !kIncludeDiversificationNonce, | 1237 !kIncludeDiversificationNonce, |
1248 PACKET_4BYTE_PACKET_NUMBER); | 1238 PACKET_4BYTE_PACKET_NUMBER); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1305 false); | 1295 false); |
1306 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1296 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1307 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1297 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
1308 ASSERT_TRUE(visitor_.header_.get()); | 1298 ASSERT_TRUE(visitor_.header_.get()); |
1309 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 1299 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
1310 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 1300 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
1311 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1301 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
1312 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1302 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
1313 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 1303 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
1314 visitor_.header_->public_header.packet_number_length); | 1304 visitor_.header_->public_header.packet_number_length); |
1315 EXPECT_FALSE(visitor_.header_->fec_flag); | |
1316 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1305 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1317 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1306 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1318 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1307 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1319 | 1308 |
1320 // Now test framing boundaries. | 1309 // Now test framing boundaries. |
1321 for (size_t i = 0; | 1310 for (size_t i = 0; |
1322 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 1311 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1323 !kIncludeVersion, !kIncludePathId, | 1312 !kIncludeVersion, !kIncludePathId, |
1324 !kIncludeDiversificationNonce, | 1313 !kIncludeDiversificationNonce, |
1325 PACKET_2BYTE_PACKET_NUMBER); | 1314 PACKET_2BYTE_PACKET_NUMBER); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 false); | 1371 false); |
1383 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1372 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1384 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1373 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
1385 ASSERT_TRUE(visitor_.header_.get()); | 1374 ASSERT_TRUE(visitor_.header_.get()); |
1386 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 1375 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
1387 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); | 1376 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); |
1388 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1377 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
1389 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1378 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
1390 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1379 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
1391 visitor_.header_->public_header.packet_number_length); | 1380 visitor_.header_->public_header.packet_number_length); |
1392 EXPECT_FALSE(visitor_.header_->fec_flag); | |
1393 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1381 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1394 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1382 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1395 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1383 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1396 | 1384 |
1397 // Now test framing boundaries. | 1385 // Now test framing boundaries. |
1398 for (size_t i = 0; | 1386 for (size_t i = 0; |
1399 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 1387 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1400 !kIncludeVersion, !kIncludePathId, | 1388 !kIncludeVersion, !kIncludePathId, |
1401 !kIncludeDiversificationNonce, | 1389 !kIncludeDiversificationNonce, |
1402 PACKET_1BYTE_PACKET_NUMBER); | 1390 PACKET_1BYTE_PACKET_NUMBER); |
(...skipping 22 matching lines...) Expand all Loading... |
1425 } | 1413 } |
1426 | 1414 |
1427 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { | 1415 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { |
1428 FLAGS_quic_packet_numbers_largest_received = true; | 1416 FLAGS_quic_packet_numbers_largest_received = true; |
1429 // Test the case when a packet is received from the past and future packet | 1417 // Test the case when a packet is received from the past and future packet |
1430 // numbers are still calculated relative to the largest received packet. | 1418 // numbers are still calculated relative to the largest received packet. |
1431 QuicPacketHeader header; | 1419 QuicPacketHeader header; |
1432 header.public_header.connection_id = kConnectionId; | 1420 header.public_header.connection_id = kConnectionId; |
1433 header.public_header.reset_flag = false; | 1421 header.public_header.reset_flag = false; |
1434 header.public_header.version_flag = false; | 1422 header.public_header.version_flag = false; |
1435 header.fec_flag = false; | |
1436 header.entropy_flag = false; | 1423 header.entropy_flag = false; |
1437 header.packet_number = kPacketNumber - 2; | 1424 header.packet_number = kPacketNumber - 2; |
1438 | 1425 |
1439 QuicPaddingFrame padding_frame; | 1426 QuicPaddingFrame padding_frame; |
1440 QuicFrames frames; | 1427 QuicFrames frames; |
1441 frames.push_back(QuicFrame(padding_frame)); | 1428 frames.push_back(QuicFrame(padding_frame)); |
1442 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 1429 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
1443 ASSERT_TRUE(data != nullptr); | 1430 ASSERT_TRUE(data != nullptr); |
1444 | 1431 |
1445 QuicEncryptedPacket encrypted(data->data(), data->length(), false); | 1432 QuicEncryptedPacket encrypted(data->data(), data->length(), false); |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1677 // frame type (padding) | 1664 // frame type (padding) |
1678 0x00, | 1665 0x00, |
1679 0x00, 0x00, 0x00, 0x00 | 1666 0x00, 0x00, 0x00, 0x00 |
1680 }; | 1667 }; |
1681 // clang-format on | 1668 // clang-format on |
1682 CheckProcessingFails(packet, arraysize(packet), | 1669 CheckProcessingFails(packet, arraysize(packet), |
1683 "Illegal private flags value.", | 1670 "Illegal private flags value.", |
1684 QUIC_INVALID_PACKET_HEADER); | 1671 QUIC_INVALID_PACKET_HEADER); |
1685 }; | 1672 }; |
1686 | 1673 |
1687 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { | |
1688 if (framer_.version() > QUIC_VERSION_33) { | |
1689 return; | |
1690 } | |
1691 // clang-format off | |
1692 unsigned char packet[] = { | |
1693 // public flags (8 byte connection_id) | |
1694 0x38, | |
1695 // connection_id | |
1696 0x10, 0x32, 0x54, 0x76, | |
1697 0x98, 0xBA, 0xDC, 0xFE, | |
1698 // packet number | |
1699 0x01, 0x00, 0x00, 0x00, | |
1700 0x00, 0x00, | |
1701 // private flags (fec group) | |
1702 0x02, | |
1703 // first fec protected packet offset | |
1704 0x10 | |
1705 }; | |
1706 // clang-format on | |
1707 if (framer_.version() > QUIC_VERSION_31) { | |
1708 CheckProcessingFails(packet, arraysize(packet), | |
1709 "Illegal private flags value.", | |
1710 QUIC_INVALID_PACKET_HEADER); | |
1711 } else { | |
1712 CheckProcessingFails(packet, arraysize(packet), | |
1713 "First fec protected packet offset must be less " | |
1714 "than the packet number.", | |
1715 QUIC_INVALID_PACKET_HEADER); | |
1716 } | |
1717 }; | |
1718 | |
1719 TEST_P(QuicFramerTest, PaddingFrame) { | 1674 TEST_P(QuicFramerTest, PaddingFrame) { |
1720 // clang-format off | 1675 // clang-format off |
1721 unsigned char packet[] = { | 1676 unsigned char packet[] = { |
1722 // public flags (8 byte connection_id) | 1677 // public flags (8 byte connection_id) |
1723 0x38, | 1678 0x38, |
1724 // connection_id | 1679 // connection_id |
1725 0x10, 0x32, 0x54, 0x76, | 1680 0x10, 0x32, 0x54, 0x76, |
1726 0x98, 0xBA, 0xDC, 0xFE, | 1681 0x98, 0xBA, 0xDC, 0xFE, |
1727 // packet number | 1682 // packet number |
1728 0xBC, 0x9A, 0x78, 0x56, | 1683 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2369 // clang-format on | 2324 // clang-format on |
2370 | 2325 |
2371 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2326 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2372 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2327 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2373 | 2328 |
2374 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2329 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2375 ASSERT_TRUE(visitor_.public_header_.get()); | 2330 ASSERT_TRUE(visitor_.public_header_.get()); |
2376 ASSERT_FALSE(visitor_.header_.get()); | 2331 ASSERT_FALSE(visitor_.header_.get()); |
2377 } | 2332 } |
2378 | 2333 |
2379 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | |
2380 // clang-format off | |
2381 unsigned char packet[] = { | |
2382 // public flags (8 byte connection_id) | |
2383 0x38, | |
2384 // connection_id | |
2385 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
2386 // packet number | |
2387 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2388 // private flags (entropy) | |
2389 0x01, | |
2390 | |
2391 // frame type (ack frame) | |
2392 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
2393 0x6C, | |
2394 // entropy hash of all received packets. | |
2395 0xBA, | |
2396 // largest observed packet number | |
2397 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2398 // Zero delta time. | |
2399 0x00, 0x00, | |
2400 // Number of timestamps. | |
2401 0x02, | |
2402 // Delta from largest observed. | |
2403 0x01, | |
2404 // Delta time. | |
2405 0x10, 0x32, 0x54, 0x76, | |
2406 // Delta from largest observed. | |
2407 0x02, | |
2408 // Delta time. | |
2409 0x10, 0x32, | |
2410 // num missing packets | |
2411 0x01, | |
2412 // missing packet delta | |
2413 0x01, | |
2414 // 0 more missing packets in range. | |
2415 0x00, | |
2416 // Number of revived packets. | |
2417 0x00, | |
2418 }; | |
2419 // clang-format on | |
2420 | |
2421 if (framer_.version() > QUIC_VERSION_31) { | |
2422 return; | |
2423 } | |
2424 | |
2425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
2426 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
2427 | |
2428 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
2429 ASSERT_TRUE(visitor_.header_.get()); | |
2430 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
2431 !kIncludeDiversificationNonce)); | |
2432 | |
2433 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
2434 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
2435 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
2436 EXPECT_EQ(0xBA, frame.entropy_hash); | |
2437 EXPECT_EQ(kLargestObserved, frame.largest_observed); | |
2438 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | |
2439 ASSERT_EQ(2u, frame.received_packet_times.size()); | |
2440 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
2441 | |
2442 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | |
2443 const size_t kLargestObservedOffset = | |
2444 kReceivedEntropyOffset + kQuicEntropyHashSize; | |
2445 const size_t kMissingDeltaTimeOffset = | |
2446 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | |
2447 const size_t kNumTimestampsOffset = | |
2448 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | |
2449 const size_t kTimestampDeltaLargestObserved1 = | |
2450 kNumTimestampsOffset + kQuicNumTimestampsSize; | |
2451 const size_t kTimestampTimeDeltaLargestObserved1 = | |
2452 kTimestampDeltaLargestObserved1 + 1; | |
2453 const size_t kTimestampDeltaLargestObserved2 = | |
2454 kTimestampTimeDeltaLargestObserved1 + 4; | |
2455 const size_t kTimestampTimeDeltaLargestObserved2 = | |
2456 kTimestampDeltaLargestObserved2 + 1; | |
2457 const size_t kNumMissingPacketOffset = | |
2458 kTimestampTimeDeltaLargestObserved2 + 2; | |
2459 const size_t kMissingPacketsOffset = | |
2460 kNumMissingPacketOffset + kNumberOfNackRangesSize; | |
2461 const size_t kMissingPacketsRange = | |
2462 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | |
2463 const size_t kRevivedPacketsLength = | |
2464 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | |
2465 // Now test framing boundaries. | |
2466 const size_t ack_frame_size = | |
2467 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | |
2468 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
2469 string expected_error; | |
2470 if (i < kLargestObservedOffset) { | |
2471 expected_error = "Unable to read entropy hash for received packets."; | |
2472 } else if (i < kMissingDeltaTimeOffset) { | |
2473 expected_error = "Unable to read largest observed."; | |
2474 } else if (i < kNumTimestampsOffset) { | |
2475 expected_error = "Unable to read ack delay time."; | |
2476 } else if (i < kTimestampDeltaLargestObserved1) { | |
2477 expected_error = "Unable to read num received packets."; | |
2478 } else if (i < kTimestampTimeDeltaLargestObserved1) { | |
2479 expected_error = "Unable to read sequence delta in received packets."; | |
2480 } else if (i < kTimestampDeltaLargestObserved2) { | |
2481 expected_error = "Unable to read time delta in received packets."; | |
2482 } else if (i < kTimestampTimeDeltaLargestObserved2) { | |
2483 expected_error = "Unable to read sequence delta in received packets."; | |
2484 } else if (i < kNumMissingPacketOffset) { | |
2485 expected_error = | |
2486 "Unable to read incremental time delta in received packets."; | |
2487 } else if (i < kMissingPacketsOffset) { | |
2488 expected_error = "Unable to read num missing packet ranges."; | |
2489 } else if (i < kMissingPacketsRange) { | |
2490 expected_error = "Unable to read missing packet number delta."; | |
2491 } else if (i < kRevivedPacketsLength) { | |
2492 expected_error = "Unable to read missing packet number range."; | |
2493 } else { | |
2494 expected_error = "Unable to read num revived packets."; | |
2495 } | |
2496 CheckProcessingFails( | |
2497 packet, | |
2498 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | |
2499 !kIncludeVersion, !kIncludePathId, | |
2500 !kIncludeDiversificationNonce, | |
2501 PACKET_6BYTE_PACKET_NUMBER), | |
2502 expected_error, QUIC_INVALID_ACK_DATA); | |
2503 } | |
2504 } | |
2505 | |
2506 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) { | 2334 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) { |
2507 // clang-format off | 2335 // clang-format off |
2508 unsigned char packet[] = { | 2336 unsigned char packet[] = { |
2509 // public flags (8 byte connection_id) | 2337 // public flags (8 byte connection_id) |
2510 0x3C, | 2338 0x3C, |
2511 // connection_id | 2339 // connection_id |
2512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2340 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2513 // packet number | 2341 // packet number |
2514 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2342 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
2515 // private flags (entropy) | 2343 // private flags (entropy) |
(...skipping 20 matching lines...) Expand all Loading... |
2536 0x10, 0x32, | 2364 0x10, 0x32, |
2537 // num missing packets | 2365 // num missing packets |
2538 0x01, | 2366 0x01, |
2539 // missing packet delta | 2367 // missing packet delta |
2540 0x01, | 2368 0x01, |
2541 // 0 more missing packets in range. | 2369 // 0 more missing packets in range. |
2542 0x00, | 2370 0x00, |
2543 }; | 2371 }; |
2544 // clang-format on | 2372 // clang-format on |
2545 | 2373 |
2546 if (framer_.version() <= QUIC_VERSION_31 || | 2374 if (framer_.version() > QUIC_VERSION_33) { |
2547 framer_.version() > QUIC_VERSION_33) { | |
2548 return; | 2375 return; |
2549 } | 2376 } |
2550 | 2377 |
2551 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2378 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2552 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2379 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2553 | 2380 |
2554 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2381 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2555 ASSERT_TRUE(visitor_.header_.get()); | 2382 ASSERT_TRUE(visitor_.header_.get()); |
2556 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2383 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
2557 !kIncludeDiversificationNonce)); | 2384 !kIncludeDiversificationNonce)); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2613 CheckProcessingFails( | 2440 CheckProcessingFails( |
2614 packet, | 2441 packet, |
2615 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2442 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2616 !kIncludeVersion, !kIncludePathId, | 2443 !kIncludeVersion, !kIncludePathId, |
2617 !kIncludeDiversificationNonce, | 2444 !kIncludeDiversificationNonce, |
2618 PACKET_6BYTE_PACKET_NUMBER), | 2445 PACKET_6BYTE_PACKET_NUMBER), |
2619 expected_error, QUIC_INVALID_ACK_DATA); | 2446 expected_error, QUIC_INVALID_ACK_DATA); |
2620 } | 2447 } |
2621 } | 2448 } |
2622 | 2449 |
2623 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { | 2450 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { |
2624 // clang-format off | 2451 // clang-format off |
2625 unsigned char packet[] = { | 2452 unsigned char packet[] = { |
2626 // public flags (8 byte connection_id) | 2453 // public flags (8 byte connection_id) |
2627 0x38, | 2454 0x3C, |
2628 // connection_id | 2455 // connection_id |
2629 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2456 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2630 // packet number | 2457 // packet number |
2631 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2458 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
2632 // private flags (entropy) | 2459 // private flags (entropy) |
2633 0x01, | 2460 0x01, |
2634 | 2461 |
2635 // frame type (ack frame) | 2462 // frame type (ack frame) |
2636 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2463 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
2637 0x6C, | 2464 0x6C, |
2638 // entropy hash of all received packets. | 2465 // entropy hash of all received packets. |
2639 0xBA, | 2466 0xBA, |
2640 // largest observed packet number | 2467 // largest observed packet number |
2641 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2468 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, |
2642 // Zero delta time. | 2469 // Zero delta time. |
2643 0x00, 0x00, | 2470 0x00, 0x00, |
2644 // Number of timestamps. | 2471 // Number of timestamps. |
2645 0x01, | 2472 0x01, |
2646 // Delta from largest observed. | 2473 // Delta from largest observed. |
2647 0x01, | 2474 0x01, |
2648 // Delta time. | 2475 // Delta time. |
2649 0x10, 0x32, 0x54, 0x76, | 2476 0x10, 0x32, 0x54, 0x76, |
2650 // num missing packets | 2477 // num missing packets |
2651 0x01, | 2478 0x01, |
2652 // missing packet delta | 2479 // missing packet delta |
2653 0x01, | 2480 0x01, |
2654 // 0 more missing packets in range. | 2481 // 0 more missing packets in range. |
2655 0x00, | 2482 0x00, |
2656 // Number of revived packets. | |
2657 0x00, | |
2658 }; | 2483 }; |
2659 // clang-format on | 2484 // clang-format on |
2660 | 2485 |
2661 if (framer_.version() > QUIC_VERSION_31) { | 2486 if (framer_.version() > QUIC_VERSION_33) { |
2662 return; | 2487 return; |
2663 } | 2488 } |
2664 | 2489 |
2665 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2490 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2666 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2491 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2667 | 2492 |
2668 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2493 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2669 ASSERT_TRUE(visitor_.header_.get()); | 2494 ASSERT_TRUE(visitor_.header_.get()); |
2670 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2495 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
2671 !kIncludeDiversificationNonce)); | 2496 !kIncludeDiversificationNonce)); |
(...skipping 14 matching lines...) Expand all Loading... |
2686 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2511 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
2687 const size_t kNumTimestampsOffset = | 2512 const size_t kNumTimestampsOffset = |
2688 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 2513 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
2689 const size_t kTimestampDeltaLargestObserved = | 2514 const size_t kTimestampDeltaLargestObserved = |
2690 kNumTimestampsOffset + kQuicNumTimestampsSize; | 2515 kNumTimestampsOffset + kQuicNumTimestampsSize; |
2691 const size_t kTimestampTimeDeltaLargestObserved = | 2516 const size_t kTimestampTimeDeltaLargestObserved = |
2692 kTimestampDeltaLargestObserved + 1; | 2517 kTimestampDeltaLargestObserved + 1; |
2693 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; | 2518 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; |
2694 const size_t kMissingPacketsOffset = | 2519 const size_t kMissingPacketsOffset = |
2695 kNumMissingPacketOffset + kNumberOfNackRangesSize; | 2520 kNumMissingPacketOffset + kNumberOfNackRangesSize; |
2696 const size_t kMissingPacketsRange = | |
2697 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | |
2698 const size_t kRevivedPacketsLength = | |
2699 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | |
2700 // Now test framing boundaries. | 2521 // Now test framing boundaries. |
2701 const size_t ack_frame_size = | 2522 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; |
2702 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | |
2703 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | 2523 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
2704 string expected_error; | 2524 string expected_error; |
2705 if (i < kLargestObservedOffset) { | 2525 if (i < kLargestObservedOffset) { |
2706 expected_error = "Unable to read entropy hash for received packets."; | 2526 expected_error = "Unable to read entropy hash for received packets."; |
2707 } else if (i < kMissingDeltaTimeOffset) { | 2527 } else if (i < kMissingDeltaTimeOffset) { |
2708 expected_error = "Unable to read largest observed."; | 2528 expected_error = "Unable to read largest observed."; |
2709 } else if (i < kNumTimestampsOffset) { | 2529 } else if (i < kNumTimestampsOffset) { |
2710 expected_error = "Unable to read ack delay time."; | 2530 expected_error = "Unable to read ack delay time."; |
2711 } else if (i < kTimestampDeltaLargestObserved) { | 2531 } else if (i < kTimestampDeltaLargestObserved) { |
2712 expected_error = "Unable to read num received packets."; | 2532 expected_error = "Unable to read num received packets."; |
2713 } else if (i < kTimestampTimeDeltaLargestObserved) { | 2533 } else if (i < kTimestampTimeDeltaLargestObserved) { |
2714 expected_error = "Unable to read sequence delta in received packets."; | 2534 expected_error = "Unable to read sequence delta in received packets."; |
2715 } else if (i < kNumMissingPacketOffset) { | 2535 } else if (i < kNumMissingPacketOffset) { |
2716 expected_error = "Unable to read time delta in received packets."; | 2536 expected_error = "Unable to read time delta in received packets."; |
2717 } else if (i < kMissingPacketsOffset) { | 2537 } else if (i < kMissingPacketsOffset) { |
2718 expected_error = "Unable to read num missing packet ranges."; | 2538 expected_error = "Unable to read num missing packet ranges."; |
2719 } else if (i < kMissingPacketsRange) { | 2539 } else { |
2720 expected_error = "Unable to read missing packet number delta."; | 2540 expected_error = "Unable to read missing packet number delta."; |
2721 } else if (i < kRevivedPacketsLength) { | |
2722 expected_error = "Unable to read missing packet number range."; | |
2723 } else { | |
2724 expected_error = "Unable to read num revived packets."; | |
2725 } | 2541 } |
2726 CheckProcessingFails( | 2542 CheckProcessingFails( |
2727 packet, | 2543 packet, |
2728 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2544 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2729 !kIncludeVersion, !kIncludePathId, | 2545 !kIncludeVersion, !kIncludePathId, |
2730 !kIncludeDiversificationNonce, | 2546 !kIncludeDiversificationNonce, |
2731 PACKET_6BYTE_PACKET_NUMBER), | 2547 PACKET_6BYTE_PACKET_NUMBER), |
2732 expected_error, QUIC_INVALID_ACK_DATA); | 2548 expected_error, QUIC_INVALID_ACK_DATA); |
2733 } | 2549 } |
2734 } | 2550 } |
2735 | 2551 |
2736 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { | 2552 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) { |
2737 // clang-format off | 2553 // clang-format off |
2738 unsigned char packet[] = { | 2554 unsigned char packet[] = { |
2739 // public flags (8 byte connection_id) | 2555 // public flags (8 byte connection_id) |
2740 0x3C, | 2556 0x3C, |
2741 // connection_id | 2557 // connection_id |
2742 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2558 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2743 // packet number | 2559 // packet number |
2744 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2560 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
2745 // private flags (entropy) | |
2746 0x01, | |
2747 | 2561 |
2748 // frame type (ack frame) | 2562 // frame type (ack frame) |
2749 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2563 // (one ack block, 2 byte largest observed, 2 byte block length) |
2750 0x6C, | 2564 0x45, |
2751 // entropy hash of all received packets. | 2565 // largest acked |
2752 0xBA, | 2566 0x34, 0x12, |
2753 // largest observed packet number | |
2754 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2755 // Zero delta time. | 2567 // Zero delta time. |
2756 0x00, 0x00, | 2568 0x00, 0x00, |
2757 // Number of timestamps. | 2569 // first ack block length. |
2758 0x01, | 2570 0x34, 0x12, |
2759 // Delta from largest observed. | 2571 // num timestamps. |
2760 0x01, | |
2761 // Delta time. | |
2762 0x10, 0x32, 0x54, 0x76, | |
2763 // num missing packets | |
2764 0x01, | |
2765 // missing packet delta | |
2766 0x01, | |
2767 // 0 more missing packets in range. | |
2768 0x00, | 2572 0x00, |
2769 }; | 2573 }; |
2770 // clang-format on | 2574 // clang-format on |
2771 | 2575 |
2772 if (framer_.version() <= QUIC_VERSION_31 || | 2576 if (framer_.version() <= QUIC_VERSION_33) { |
2773 framer_.version() > QUIC_VERSION_33) { | |
2774 return; | 2577 return; |
2775 } | 2578 } |
2776 | 2579 |
2777 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2580 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2778 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2581 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2779 | 2582 |
2780 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2583 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2781 ASSERT_TRUE(visitor_.header_.get()); | 2584 ASSERT_TRUE(visitor_.header_.get()); |
2782 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2585 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
2783 !kIncludeDiversificationNonce)); | 2586 !kIncludeDiversificationNonce)); |
2784 | 2587 |
2785 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2588 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
2786 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2589 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
2787 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2590 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
2788 EXPECT_EQ(0xBA, frame.entropy_hash); | 2591 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed); |
2789 EXPECT_EQ(kLargestObserved, frame.largest_observed); | 2592 EXPECT_FALSE(frame.missing); |
2790 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | 2593 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow()); |
2791 ASSERT_EQ(1u, frame.received_packet_times.size()); | |
2792 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
2793 | 2594 |
2794 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2595 const size_t kLargestAckedOffset = kQuicFrameTypeSize; |
2795 const size_t kLargestObservedOffset = | 2596 const size_t kLargestAckedDeltaTimeOffset = |
2796 kReceivedEntropyOffset + kQuicEntropyHashSize; | 2597 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER; |
2797 const size_t kMissingDeltaTimeOffset = | 2598 const size_t kFirstAckBlockLengthOffset = |
2798 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2599 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
2799 const size_t kNumTimestampsOffset = | 2600 const size_t kNumTimestampsOffset = |
2800 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 2601 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER; |
2801 const size_t kTimestampDeltaLargestObserved = | |
2802 kNumTimestampsOffset + kQuicNumTimestampsSize; | |
2803 const size_t kTimestampTimeDeltaLargestObserved = | |
2804 kTimestampDeltaLargestObserved + 1; | |
2805 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; | |
2806 const size_t kMissingPacketsOffset = | |
2807 kNumMissingPacketOffset + kNumberOfNackRangesSize; | |
2808 // Now test framing boundaries. | 2602 // Now test framing boundaries. |
2809 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; | 2603 const size_t ack_frame_size = |
| 2604 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER; |
2810 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | 2605 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
2811 string expected_error; | 2606 string expected_error; |
2812 if (i < kLargestObservedOffset) { | 2607 if (i < kLargestAckedDeltaTimeOffset) { |
2813 expected_error = "Unable to read entropy hash for received packets."; | 2608 expected_error = "Unable to read largest acked."; |
2814 } else if (i < kMissingDeltaTimeOffset) { | 2609 } else if (i < kFirstAckBlockLengthOffset) { |
2815 expected_error = "Unable to read largest observed."; | 2610 expected_error = "Unable to read ack delay time."; |
2816 } else if (i < kNumTimestampsOffset) { | 2611 } else if (i < kNumTimestampsOffset) { |
2817 expected_error = "Unable to read ack delay time."; | 2612 expected_error = "Unable to read first ack block length."; |
2818 } else if (i < kTimestampDeltaLargestObserved) { | 2613 } else { |
2819 expected_error = "Unable to read num received packets."; | 2614 expected_error = "Unable to read num received packets."; |
2820 } else if (i < kTimestampTimeDeltaLargestObserved) { | |
2821 expected_error = "Unable to read sequence delta in received packets."; | |
2822 } else if (i < kNumMissingPacketOffset) { | |
2823 expected_error = "Unable to read time delta in received packets."; | |
2824 } else if (i < kMissingPacketsOffset) { | |
2825 expected_error = "Unable to read num missing packet ranges."; | |
2826 } else { | |
2827 expected_error = "Unable to read missing packet number delta."; | |
2828 } | 2615 } |
2829 CheckProcessingFails( | 2616 CheckProcessingFails( |
2830 packet, | 2617 packet, |
2831 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2618 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
2832 !kIncludeVersion, !kIncludePathId, | 2619 !kIncludeVersion, !kIncludePathId, |
2833 !kIncludeDiversificationNonce, | 2620 !kIncludeDiversificationNonce, |
2834 PACKET_6BYTE_PACKET_NUMBER), | 2621 PACKET_6BYTE_PACKET_NUMBER), |
2835 expected_error, QUIC_INVALID_ACK_DATA); | 2622 expected_error, QUIC_INVALID_ACK_DATA); |
2836 } | 2623 } |
2837 } | 2624 } |
2838 | 2625 |
2839 TEST_P(QuicFramerTest, AckFrame) { | 2626 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) { |
2840 // clang-format off | 2627 // clang-format off |
2841 unsigned char packet[] = { | 2628 unsigned char packet[] = { |
2842 // public flags (8 byte connection_id) | 2629 // public flags (8 byte connection_id) |
2843 0x3C, | 2630 0x3C, |
2844 // connection_id | 2631 // connection_id |
2845 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2632 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2846 // packet number | 2633 // packet number |
2847 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2848 // private flags (entropy) | |
2849 0x01, | |
2850 | |
2851 // frame type (ack frame) | |
2852 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
2853 0x6C, | |
2854 // entropy hash of all received packets. | |
2855 0xBA, | |
2856 // largest observed packet number | |
2857 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2858 // Zero delta time. | |
2859 0x00, 0x00, | |
2860 // Number of timestamps. | |
2861 0x00, | |
2862 // num missing packets | |
2863 0x01, | |
2864 // missing packet delta | |
2865 0x01, | |
2866 // 0 more missing packets in range. | |
2867 0x00, | |
2868 // Number of revived packets. | |
2869 0x00, | |
2870 }; | |
2871 // clang-format on | |
2872 | |
2873 if (framer_.version() > QUIC_VERSION_31) { | |
2874 return; | |
2875 } | |
2876 | |
2877 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
2878 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
2879 | |
2880 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
2881 ASSERT_TRUE(visitor_.header_.get()); | |
2882 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
2883 !kIncludeDiversificationNonce)); | |
2884 | |
2885 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
2886 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
2887 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
2888 EXPECT_EQ(0xBA, frame.entropy_hash); | |
2889 EXPECT_EQ(kLargestObserved, frame.largest_observed); | |
2890 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | |
2891 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
2892 | |
2893 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | |
2894 const size_t kLargestObservedOffset = | |
2895 kReceivedEntropyOffset + kQuicEntropyHashSize; | |
2896 const size_t kMissingDeltaTimeOffset = | |
2897 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | |
2898 const size_t kNumTimestampsOffset = | |
2899 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | |
2900 const size_t kNumMissingPacketOffset = | |
2901 kNumTimestampsOffset + kQuicNumTimestampsSize; | |
2902 const size_t kMissingPacketsOffset = | |
2903 kNumMissingPacketOffset + kNumberOfNackRangesSize; | |
2904 const size_t kMissingPacketsRange = | |
2905 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | |
2906 const size_t kRevivedPacketsLength = | |
2907 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | |
2908 // Now test framing boundaries. | |
2909 const size_t ack_frame_size = | |
2910 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | |
2911 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
2912 string expected_error; | |
2913 if (i < kLargestObservedOffset) { | |
2914 expected_error = "Unable to read entropy hash for received packets."; | |
2915 } else if (i < kMissingDeltaTimeOffset) { | |
2916 expected_error = "Unable to read largest observed."; | |
2917 } else if (i < kNumTimestampsOffset) { | |
2918 expected_error = "Unable to read ack delay time."; | |
2919 } else if (i < kNumMissingPacketOffset) { | |
2920 expected_error = "Unable to read num received packets."; | |
2921 } else if (i < kMissingPacketsOffset) { | |
2922 expected_error = "Unable to read num missing packet ranges."; | |
2923 } else if (i < kMissingPacketsRange) { | |
2924 expected_error = "Unable to read missing packet number delta."; | |
2925 } else if (i < kRevivedPacketsLength) { | |
2926 expected_error = "Unable to read missing packet number range."; | |
2927 } else { | |
2928 expected_error = "Unable to read num revived packets."; | |
2929 } | |
2930 CheckProcessingFails( | |
2931 packet, | |
2932 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | |
2933 !kIncludeVersion, !kIncludePathId, | |
2934 !kIncludeDiversificationNonce, | |
2935 PACKET_6BYTE_PACKET_NUMBER), | |
2936 expected_error, QUIC_INVALID_ACK_DATA); | |
2937 } | |
2938 } | |
2939 | |
2940 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) { | |
2941 // clang-format off | |
2942 unsigned char packet[] = { | |
2943 // public flags (8 byte connection_id) | |
2944 0x3C, | |
2945 // connection_id | |
2946 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
2947 // packet number | |
2948 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
2949 | |
2950 // frame type (ack frame) | |
2951 // (one ack block, 2 byte largest observed, 2 byte block length) | |
2952 0x45, | |
2953 // largest acked | |
2954 0x34, 0x12, | |
2955 // Zero delta time. | |
2956 0x00, 0x00, | |
2957 // first ack block length. | |
2958 0x34, 0x12, | |
2959 // num timestamps. | |
2960 0x00, | |
2961 }; | |
2962 // clang-format on | |
2963 | |
2964 if (framer_.version() <= QUIC_VERSION_33) { | |
2965 return; | |
2966 } | |
2967 | |
2968 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
2969 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
2970 | |
2971 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
2972 ASSERT_TRUE(visitor_.header_.get()); | |
2973 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
2974 !kIncludeDiversificationNonce)); | |
2975 | |
2976 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
2977 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
2978 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
2979 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed); | |
2980 EXPECT_FALSE(frame.missing); | |
2981 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow()); | |
2982 | |
2983 const size_t kLargestAckedOffset = kQuicFrameTypeSize; | |
2984 const size_t kLargestAckedDeltaTimeOffset = | |
2985 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER; | |
2986 const size_t kFirstAckBlockLengthOffset = | |
2987 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | |
2988 const size_t kNumTimestampsOffset = | |
2989 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER; | |
2990 // Now test framing boundaries. | |
2991 const size_t ack_frame_size = | |
2992 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER; | |
2993 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
2994 string expected_error; | |
2995 if (i < kLargestAckedDeltaTimeOffset) { | |
2996 expected_error = "Unable to read largest acked."; | |
2997 } else if (i < kFirstAckBlockLengthOffset) { | |
2998 expected_error = "Unable to read ack delay time."; | |
2999 } else if (i < kNumTimestampsOffset) { | |
3000 expected_error = "Unable to read first ack block length."; | |
3001 } else { | |
3002 expected_error = "Unable to read num received packets."; | |
3003 } | |
3004 CheckProcessingFails( | |
3005 packet, | |
3006 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | |
3007 !kIncludeVersion, !kIncludePathId, | |
3008 !kIncludeDiversificationNonce, | |
3009 PACKET_6BYTE_PACKET_NUMBER), | |
3010 expected_error, QUIC_INVALID_ACK_DATA); | |
3011 } | |
3012 } | |
3013 | |
3014 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) { | |
3015 // clang-format off | |
3016 unsigned char packet[] = { | |
3017 // public flags (8 byte connection_id) | |
3018 0x3C, | |
3019 // connection_id | |
3020 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
3021 // packet number | |
3022 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2634 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
3023 | 2635 |
3024 // frame type (ack frame) | 2636 // frame type (ack frame) |
3025 // (more than one ack block, 2 byte largest observed, 2 byte block length) | 2637 // (more than one ack block, 2 byte largest observed, 2 byte block length) |
3026 0x65, | 2638 0x65, |
3027 // largest acked | 2639 // largest acked |
3028 0x34, 0x12, | 2640 0x34, 0x12, |
3029 // Zero delta time. | 2641 // Zero delta time. |
3030 0x00, 0x00, | 2642 0x00, 0x00, |
3031 // num ack blocks ranges. | 2643 // num ack blocks ranges. |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3187 0x00, | 2799 0x00, |
3188 // num missing packets | 2800 // num missing packets |
3189 0x01, | 2801 0x01, |
3190 // missing packet delta | 2802 // missing packet delta |
3191 0x01, | 2803 0x01, |
3192 // 0 more missing packets in range. | 2804 // 0 more missing packets in range. |
3193 0x00, | 2805 0x00, |
3194 }; | 2806 }; |
3195 // clang-format on | 2807 // clang-format on |
3196 | 2808 |
3197 if (framer_.version() <= QUIC_VERSION_31 || | 2809 if (framer_.version() > QUIC_VERSION_33) { |
3198 framer_.version() > QUIC_VERSION_33) { | |
3199 return; | 2810 return; |
3200 } | 2811 } |
3201 | 2812 |
3202 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2813 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3203 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2814 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3204 | 2815 |
3205 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2816 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3206 ASSERT_TRUE(visitor_.header_.get()); | 2817 ASSERT_TRUE(visitor_.header_.get()); |
3207 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2818 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
3208 !kIncludeDiversificationNonce)); | 2819 !kIncludeDiversificationNonce)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3246 CheckProcessingFails( | 2857 CheckProcessingFails( |
3247 packet, | 2858 packet, |
3248 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2859 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
3249 !kIncludeVersion, !kIncludePathId, | 2860 !kIncludeVersion, !kIncludePathId, |
3250 !kIncludeDiversificationNonce, | 2861 !kIncludeDiversificationNonce, |
3251 PACKET_6BYTE_PACKET_NUMBER), | 2862 PACKET_6BYTE_PACKET_NUMBER), |
3252 expected_error, QUIC_INVALID_ACK_DATA); | 2863 expected_error, QUIC_INVALID_ACK_DATA); |
3253 } | 2864 } |
3254 } | 2865 } |
3255 | 2866 |
3256 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { | |
3257 // clang-format off | |
3258 unsigned char packet[] = { | |
3259 // public flags (8 byte connection_id) | |
3260 0x38, | |
3261 // connection_id | |
3262 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
3263 // packet number | |
3264 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3265 // private flags (entropy) | |
3266 0x01, | |
3267 | |
3268 // frame type (ack frame) | |
3269 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
3270 0x6C, | |
3271 // entropy hash of all received packets. | |
3272 0xBA, | |
3273 // largest observed packet number | |
3274 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3275 // Zero delta time. | |
3276 0x00, 0x00, | |
3277 // num received packets. | |
3278 0x00, | |
3279 // num missing packets | |
3280 0x01, | |
3281 // missing packet delta | |
3282 0x01, | |
3283 // 0 more missing packets in range. | |
3284 0x00, | |
3285 // Number of revived packets. | |
3286 0x01, | |
3287 // Revived packet number. | |
3288 0xBE, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3289 // Number of revived packets. | |
3290 0x00, | |
3291 }; | |
3292 // clang-format on | |
3293 | |
3294 if (framer_.version() > QUIC_VERSION_31) { | |
3295 return; | |
3296 } | |
3297 | |
3298 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
3299 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
3300 | |
3301 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
3302 ASSERT_TRUE(visitor_.header_.get()); | |
3303 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
3304 !kIncludeDiversificationNonce)); | |
3305 | |
3306 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
3307 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
3308 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
3309 EXPECT_EQ(0xBA, frame.entropy_hash); | |
3310 EXPECT_EQ(kLargestObserved, frame.largest_observed); | |
3311 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | |
3312 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
3313 | |
3314 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | |
3315 const size_t kLargestObservedOffset = | |
3316 kReceivedEntropyOffset + kQuicEntropyHashSize; | |
3317 const size_t kMissingDeltaTimeOffset = | |
3318 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | |
3319 const size_t kNumTimestampsOffset = | |
3320 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | |
3321 const size_t kNumMissingPacketOffset = | |
3322 kNumTimestampsOffset + kQuicNumTimestampsSize; | |
3323 const size_t kMissingPacketsOffset = | |
3324 kNumMissingPacketOffset + kNumberOfNackRangesSize; | |
3325 const size_t kMissingPacketsRange = | |
3326 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | |
3327 const size_t kRevivedPacketsLength = | |
3328 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | |
3329 const size_t kRevivedPacketSequenceNumberLength = | |
3330 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | |
3331 // Now test framing boundaries. | |
3332 const size_t ack_frame_size = | |
3333 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER; | |
3334 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
3335 string expected_error; | |
3336 if (i < kReceivedEntropyOffset) { | |
3337 expected_error = "Unable to read least unacked delta."; | |
3338 } else if (i < kLargestObservedOffset) { | |
3339 expected_error = "Unable to read entropy hash for received packets."; | |
3340 } else if (i < kMissingDeltaTimeOffset) { | |
3341 expected_error = "Unable to read largest observed."; | |
3342 } else if (i < kNumTimestampsOffset) { | |
3343 expected_error = "Unable to read ack delay time."; | |
3344 } else if (i < kNumMissingPacketOffset) { | |
3345 expected_error = "Unable to read num received packets."; | |
3346 } else if (i < kMissingPacketsOffset) { | |
3347 expected_error = "Unable to read num missing packet ranges."; | |
3348 } else if (i < kMissingPacketsRange) { | |
3349 expected_error = "Unable to read missing packet number delta."; | |
3350 } else if (i < kRevivedPacketsLength) { | |
3351 expected_error = "Unable to read missing packet number range."; | |
3352 } else if (i < kRevivedPacketSequenceNumberLength) { | |
3353 expected_error = "Unable to read num revived packets."; | |
3354 } else { | |
3355 expected_error = "Unable to read revived packet."; | |
3356 } | |
3357 CheckProcessingFails( | |
3358 packet, | |
3359 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | |
3360 !kIncludeVersion, !kIncludePathId, | |
3361 !kIncludeDiversificationNonce, | |
3362 PACKET_6BYTE_PACKET_NUMBER), | |
3363 expected_error, QUIC_INVALID_ACK_DATA); | |
3364 } | |
3365 } | |
3366 | |
3367 TEST_P(QuicFramerTest, AckFrameNoNacks) { | |
3368 // clang-format off | |
3369 unsigned char packet[] = { | |
3370 // public flags (8 byte connection_id) | |
3371 static_cast<unsigned char>( | |
3372 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | |
3373 // connection_id | |
3374 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
3375 // packet number | |
3376 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3377 // private flags (entropy) | |
3378 0x01, | |
3379 | |
3380 // frame type (ack frame) | |
3381 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
3382 0x4C, | |
3383 // entropy hash of all received packets. | |
3384 0xBA, | |
3385 // largest observed packet number | |
3386 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3387 // Zero delta time. | |
3388 0x00, 0x00, | |
3389 // Number of received packets. | |
3390 0x00, | |
3391 }; | |
3392 // clang-format on | |
3393 if (framer_.version() >= QUIC_VERSION_31) { | |
3394 return; | |
3395 } | |
3396 | |
3397 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
3398 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
3399 | |
3400 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
3401 ASSERT_TRUE(visitor_.header_.get()); | |
3402 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
3403 !kIncludeDiversificationNonce)); | |
3404 | |
3405 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
3406 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
3407 QuicAckFrame* frame = visitor_.ack_frames_[0]; | |
3408 EXPECT_EQ(0xBA, frame->entropy_hash); | |
3409 EXPECT_EQ(kLargestObserved, frame->largest_observed); | |
3410 ASSERT_TRUE(frame->packets.Empty()); | |
3411 | |
3412 // Verify that the packet re-serializes identically. | |
3413 QuicFrames frames; | |
3414 frames.push_back(QuicFrame(frame)); | |
3415 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | |
3416 ASSERT_TRUE(data != nullptr); | |
3417 | |
3418 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
3419 data->length(), AsChars(packet), | |
3420 arraysize(packet)); | |
3421 } | |
3422 | |
3423 TEST_P(QuicFramerTest, AckFrame500Nacks) { | |
3424 // clang-format off | |
3425 unsigned char packet[] = { | |
3426 // public flags (8 byte connection_id) | |
3427 static_cast<unsigned char>( | |
3428 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | |
3429 // connection_id | |
3430 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
3431 // packet number | |
3432 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3433 // private flags (entropy) | |
3434 0x01, | |
3435 | |
3436 // frame type (ack frame) | |
3437 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
3438 0x6C, | |
3439 // entropy hash of all received packets. | |
3440 0xBA, | |
3441 // largest observed packet number | |
3442 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3443 // Zero delta time. | |
3444 0x00, 0x00, | |
3445 // No received packets. | |
3446 0x00, | |
3447 // num missing packet ranges | |
3448 0x02, | |
3449 // missing packet delta | |
3450 0x01, | |
3451 // 243 more missing packets in range. | |
3452 // The ranges are listed in this order so the re-constructed packet | |
3453 // matches. | |
3454 0xF3, | |
3455 // No gap between ranges | |
3456 0x00, | |
3457 // 255 more missing packets in range. | |
3458 0xFF, | |
3459 // No revived packets. | |
3460 0x00, | |
3461 }; | |
3462 // clang-format on | |
3463 | |
3464 if (framer_.version() > QUIC_VERSION_31) { | |
3465 return; | |
3466 } | |
3467 | |
3468 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
3469 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
3470 | |
3471 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
3472 ASSERT_TRUE(visitor_.header_.get()); | |
3473 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
3474 !kIncludeDiversificationNonce)); | |
3475 | |
3476 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
3477 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
3478 QuicAckFrame* frame = visitor_.ack_frames_[0]; | |
3479 EXPECT_EQ(0xBA, frame->entropy_hash); | |
3480 EXPECT_EQ(kLargestObserved, frame->largest_observed); | |
3481 ASSERT_EQ(500u, frame->packets.NumPacketsSlow()); | |
3482 EXPECT_EQ(kMissingPacket - 499, frame->packets.Min()); | |
3483 EXPECT_EQ(kMissingPacket, frame->packets.Max()); | |
3484 | |
3485 // Verify that the packet re-serializes identically. | |
3486 QuicFrames frames; | |
3487 frames.push_back(QuicFrame(frame)); | |
3488 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | |
3489 ASSERT_TRUE(data != nullptr); | |
3490 | |
3491 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
3492 data->length(), AsChars(packet), | |
3493 arraysize(packet)); | |
3494 } | |
3495 | |
3496 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { | 2867 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { |
3497 // clang-format off | 2868 // clang-format off |
3498 unsigned char packet[] = { | 2869 unsigned char packet[] = { |
3499 // public flags (8 byte connection_id) | 2870 // public flags (8 byte connection_id) |
3500 static_cast<unsigned char>( | 2871 static_cast<unsigned char>( |
3501 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 2872 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
3502 // connection_id | 2873 // connection_id |
3503 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2874 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
3504 // packet number | 2875 // packet number |
3505 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2876 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
(...skipping 19 matching lines...) Expand all Loading... |
3525 // The ranges are listed in this order so the re-constructed packet | 2896 // The ranges are listed in this order so the re-constructed packet |
3526 // matches. | 2897 // matches. |
3527 0xF3, | 2898 0xF3, |
3528 // No gap between ranges | 2899 // No gap between ranges |
3529 0x00, | 2900 0x00, |
3530 // 255 more missing packets in range. | 2901 // 255 more missing packets in range. |
3531 0xFF, | 2902 0xFF, |
3532 }; | 2903 }; |
3533 // clang-format on | 2904 // clang-format on |
3534 | 2905 |
3535 if (framer_.version() <= QUIC_VERSION_31 || | 2906 if (framer_.version() > QUIC_VERSION_33) { |
3536 framer_.version() > QUIC_VERSION_33) { | |
3537 return; | 2907 return; |
3538 } | 2908 } |
3539 | 2909 |
3540 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2910 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3541 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2911 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3542 | 2912 |
3543 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2913 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3544 ASSERT_TRUE(visitor_.header_.get()); | 2914 ASSERT_TRUE(visitor_.header_.get()); |
3545 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2915 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
3546 !kIncludeDiversificationNonce)); | 2916 !kIncludeDiversificationNonce)); |
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4506 } else if (i < kVersionOffset) { | 3876 } else if (i < kVersionOffset) { |
4507 expected_error = "Unable to read ConnectionId."; | 3877 expected_error = "Unable to read ConnectionId."; |
4508 } else { | 3878 } else { |
4509 expected_error = "Unable to read supported version in negotiation."; | 3879 expected_error = "Unable to read supported version in negotiation."; |
4510 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 3880 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
4511 } | 3881 } |
4512 CheckProcessingFails(packet, i, expected_error, error_code); | 3882 CheckProcessingFails(packet, i, expected_error, error_code); |
4513 } | 3883 } |
4514 } | 3884 } |
4515 | 3885 |
4516 TEST_P(QuicFramerTest, DropFecPacket) { | |
4517 // clang-format off | |
4518 unsigned char packet[] = { | |
4519 // public flags (8 byte connection_id) | |
4520 0x38, | |
4521 // connection_id | |
4522 0x10, 0x32, 0x54, 0x76, | |
4523 0x98, 0xBA, 0xDC, 0xFE, | |
4524 // packet number | |
4525 0xBC, 0x9A, 0x78, 0x56, | |
4526 0x34, 0x12, | |
4527 // private flags (fec group & FEC) | |
4528 0x06, | |
4529 // first fec protected packet offset | |
4530 0x01, | |
4531 | |
4532 // redundancy | |
4533 'a', 'b', 'c', 'd', | |
4534 'e', 'f', 'g', 'h', | |
4535 'i', 'j', 'k', 'l', | |
4536 'm', 'n', 'o', 'p', | |
4537 }; | |
4538 if (framer_.version() > QUIC_VERSION_33) { | |
4539 return; | |
4540 } | |
4541 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
4542 if (framer_.version() <= QUIC_VERSION_31) { | |
4543 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
4544 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
4545 } else { | |
4546 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | |
4547 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | |
4548 } | |
4549 EXPECT_FALSE(visitor_.header_.get()); | |
4550 } | |
4551 | |
4552 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 3886 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
4553 QuicPacketHeader header; | 3887 QuicPacketHeader header; |
4554 header.public_header.connection_id = kConnectionId; | 3888 header.public_header.connection_id = kConnectionId; |
4555 header.public_header.reset_flag = false; | 3889 header.public_header.reset_flag = false; |
4556 header.public_header.version_flag = false; | 3890 header.public_header.version_flag = false; |
4557 header.fec_flag = false; | |
4558 header.entropy_flag = false; | 3891 header.entropy_flag = false; |
4559 header.packet_number = kPacketNumber; | 3892 header.packet_number = kPacketNumber; |
4560 | 3893 |
4561 QuicPaddingFrame padding_frame; | 3894 QuicPaddingFrame padding_frame; |
4562 | 3895 |
4563 QuicFrames frames; | 3896 QuicFrames frames; |
4564 frames.push_back(QuicFrame(padding_frame)); | 3897 frames.push_back(QuicFrame(padding_frame)); |
4565 | 3898 |
4566 // clang-format off | 3899 // clang-format off |
4567 unsigned char packet[kMaxPacketSize] = { | 3900 unsigned char packet[kMaxPacketSize] = { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4613 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 3946 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
4614 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 3947 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4615 : arraysize(packet_34)); | 3948 : arraysize(packet_34)); |
4616 } | 3949 } |
4617 | 3950 |
4618 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 3951 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
4619 QuicPacketHeader header; | 3952 QuicPacketHeader header; |
4620 header.public_header.connection_id = kConnectionId; | 3953 header.public_header.connection_id = kConnectionId; |
4621 header.public_header.reset_flag = false; | 3954 header.public_header.reset_flag = false; |
4622 header.public_header.version_flag = false; | 3955 header.public_header.version_flag = false; |
4623 header.fec_flag = false; | |
4624 header.entropy_flag = false; | 3956 header.entropy_flag = false; |
4625 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 3957 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; |
4626 header.packet_number = kPacketNumber; | 3958 header.packet_number = kPacketNumber; |
4627 | 3959 |
4628 QuicPaddingFrame padding_frame; | 3960 QuicPaddingFrame padding_frame; |
4629 | 3961 |
4630 QuicFrames frames; | 3962 QuicFrames frames; |
4631 frames.push_back(QuicFrame(padding_frame)); | 3963 frames.push_back(QuicFrame(padding_frame)); |
4632 | 3964 |
4633 // clang-format off | 3965 // clang-format off |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4678 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 4010 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
4679 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4011 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4680 : arraysize(packet_34)); | 4012 : arraysize(packet_34)); |
4681 } | 4013 } |
4682 | 4014 |
4683 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 4015 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
4684 QuicPacketHeader header; | 4016 QuicPacketHeader header; |
4685 header.public_header.connection_id = kConnectionId; | 4017 header.public_header.connection_id = kConnectionId; |
4686 header.public_header.reset_flag = false; | 4018 header.public_header.reset_flag = false; |
4687 header.public_header.version_flag = false; | 4019 header.public_header.version_flag = false; |
4688 header.fec_flag = false; | |
4689 header.entropy_flag = false; | 4020 header.entropy_flag = false; |
4690 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 4021 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; |
4691 header.packet_number = kPacketNumber; | 4022 header.packet_number = kPacketNumber; |
4692 | 4023 |
4693 QuicPaddingFrame padding_frame; | 4024 QuicPaddingFrame padding_frame; |
4694 | 4025 |
4695 QuicFrames frames; | 4026 QuicFrames frames; |
4696 frames.push_back(QuicFrame(padding_frame)); | 4027 frames.push_back(QuicFrame(padding_frame)); |
4697 | 4028 |
4698 // clang-format off | 4029 // clang-format off |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4743 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 4074 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
4744 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4075 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4745 : arraysize(packet_34)); | 4076 : arraysize(packet_34)); |
4746 } | 4077 } |
4747 | 4078 |
4748 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 4079 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
4749 QuicPacketHeader header; | 4080 QuicPacketHeader header; |
4750 header.public_header.connection_id = kConnectionId; | 4081 header.public_header.connection_id = kConnectionId; |
4751 header.public_header.reset_flag = false; | 4082 header.public_header.reset_flag = false; |
4752 header.public_header.version_flag = false; | 4083 header.public_header.version_flag = false; |
4753 header.fec_flag = false; | |
4754 header.entropy_flag = false; | 4084 header.entropy_flag = false; |
4755 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 4085 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; |
4756 header.packet_number = kPacketNumber; | 4086 header.packet_number = kPacketNumber; |
4757 | 4087 |
4758 QuicPaddingFrame padding_frame; | 4088 QuicPaddingFrame padding_frame; |
4759 | 4089 |
4760 QuicFrames frames; | 4090 QuicFrames frames; |
4761 frames.push_back(QuicFrame(padding_frame)); | 4091 frames.push_back(QuicFrame(padding_frame)); |
4762 | 4092 |
4763 // clang-format off | 4093 // clang-format off |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4808 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 4138 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
4809 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4139 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4810 : arraysize(packet_34)); | 4140 : arraysize(packet_34)); |
4811 } | 4141 } |
4812 | 4142 |
4813 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 4143 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
4814 QuicPacketHeader header; | 4144 QuicPacketHeader header; |
4815 header.public_header.connection_id = kConnectionId; | 4145 header.public_header.connection_id = kConnectionId; |
4816 header.public_header.reset_flag = false; | 4146 header.public_header.reset_flag = false; |
4817 header.public_header.version_flag = false; | 4147 header.public_header.version_flag = false; |
4818 header.fec_flag = false; | |
4819 header.entropy_flag = true; | 4148 header.entropy_flag = true; |
4820 header.packet_number = kPacketNumber; | 4149 header.packet_number = kPacketNumber; |
4821 | 4150 |
4822 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 4151 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
4823 StringPiece("hello world!")); | 4152 StringPiece("hello world!")); |
4824 | 4153 |
4825 QuicFrames frames; | 4154 QuicFrames frames; |
4826 frames.push_back(QuicFrame(&stream_frame)); | 4155 frames.push_back(QuicFrame(&stream_frame)); |
4827 | 4156 |
4828 // clang-format off | 4157 // clang-format off |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4883 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 4212 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
4884 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4213 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4885 : arraysize(packet_34)); | 4214 : arraysize(packet_34)); |
4886 } | 4215 } |
4887 | 4216 |
4888 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 4217 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
4889 QuicPacketHeader header; | 4218 QuicPacketHeader header; |
4890 header.public_header.connection_id = kConnectionId; | 4219 header.public_header.connection_id = kConnectionId; |
4891 header.public_header.reset_flag = false; | 4220 header.public_header.reset_flag = false; |
4892 header.public_header.version_flag = true; | 4221 header.public_header.version_flag = true; |
4893 header.fec_flag = false; | |
4894 header.entropy_flag = true; | 4222 header.entropy_flag = true; |
4895 header.packet_number = kPacketNumber; | 4223 header.packet_number = kPacketNumber; |
4896 | 4224 |
4897 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 4225 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
4898 StringPiece("hello world!")); | 4226 StringPiece("hello world!")); |
4899 | 4227 |
4900 QuicFrames frames; | 4228 QuicFrames frames; |
4901 frames.push_back(QuicFrame(&stream_frame)); | 4229 frames.push_back(QuicFrame(&stream_frame)); |
4902 | 4230 |
4903 // clang-format off | 4231 // clang-format off |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4954 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4282 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
4955 : arraysize(packet_34)); | 4283 : arraysize(packet_34)); |
4956 } | 4284 } |
4957 | 4285 |
4958 TEST_P(QuicFramerTest, BuildStreamFramePacketWithMultipathFlag) { | 4286 TEST_P(QuicFramerTest, BuildStreamFramePacketWithMultipathFlag) { |
4959 QuicPacketHeader header; | 4287 QuicPacketHeader header; |
4960 header.public_header.connection_id = kConnectionId; | 4288 header.public_header.connection_id = kConnectionId; |
4961 header.public_header.multipath_flag = true; | 4289 header.public_header.multipath_flag = true; |
4962 header.public_header.reset_flag = false; | 4290 header.public_header.reset_flag = false; |
4963 header.public_header.version_flag = false; | 4291 header.public_header.version_flag = false; |
4964 header.fec_flag = false; | |
4965 header.entropy_flag = true; | 4292 header.entropy_flag = true; |
4966 header.path_id = kPathId; | 4293 header.path_id = kPathId; |
4967 header.packet_number = kPacketNumber; | 4294 header.packet_number = kPacketNumber; |
4968 | 4295 |
4969 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 4296 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
4970 StringPiece("hello world!")); | 4297 StringPiece("hello world!")); |
4971 | 4298 |
4972 QuicFrames frames; | 4299 QuicFrames frames; |
4973 frames.push_back(QuicFrame(&stream_frame)); | 4300 frames.push_back(QuicFrame(&stream_frame)); |
4974 | 4301 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5035 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 4362 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
5036 : arraysize(packet_34)); | 4363 : arraysize(packet_34)); |
5037 } | 4364 } |
5038 | 4365 |
5039 TEST_P(QuicFramerTest, BuildStreamFramePacketWithBothVersionAndMultipathFlag) { | 4366 TEST_P(QuicFramerTest, BuildStreamFramePacketWithBothVersionAndMultipathFlag) { |
5040 QuicPacketHeader header; | 4367 QuicPacketHeader header; |
5041 header.public_header.connection_id = kConnectionId; | 4368 header.public_header.connection_id = kConnectionId; |
5042 header.public_header.multipath_flag = true; | 4369 header.public_header.multipath_flag = true; |
5043 header.public_header.reset_flag = false; | 4370 header.public_header.reset_flag = false; |
5044 header.public_header.version_flag = true; | 4371 header.public_header.version_flag = true; |
5045 header.fec_flag = false; | |
5046 header.entropy_flag = true; | 4372 header.entropy_flag = true; |
5047 header.path_id = kPathId; | 4373 header.path_id = kPathId; |
5048 header.packet_number = kPacketNumber; | 4374 header.packet_number = kPacketNumber; |
5049 | 4375 |
5050 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 4376 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
5051 StringPiece("hello world!")); | 4377 StringPiece("hello world!")); |
5052 | 4378 |
5053 QuicFrames frames; | 4379 QuicFrames frames; |
5054 frames.push_back(QuicFrame(&stream_frame)); | 4380 frames.push_back(QuicFrame(&stream_frame)); |
5055 | 4381 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5145 | 4471 |
5146 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 4472 TEST_P(QuicFramerTest, BuildAckFramePacket) { |
5147 if (framer_.version() > QUIC_VERSION_33) { | 4473 if (framer_.version() > QUIC_VERSION_33) { |
5148 return; | 4474 return; |
5149 } | 4475 } |
5150 | 4476 |
5151 QuicPacketHeader header; | 4477 QuicPacketHeader header; |
5152 header.public_header.connection_id = kConnectionId; | 4478 header.public_header.connection_id = kConnectionId; |
5153 header.public_header.reset_flag = false; | 4479 header.public_header.reset_flag = false; |
5154 header.public_header.version_flag = false; | 4480 header.public_header.version_flag = false; |
5155 header.fec_flag = false; | |
5156 header.entropy_flag = true; | 4481 header.entropy_flag = true; |
5157 header.packet_number = kPacketNumber; | 4482 header.packet_number = kPacketNumber; |
5158 | 4483 |
5159 QuicAckFrame ack_frame; | 4484 QuicAckFrame ack_frame; |
5160 ack_frame.entropy_hash = 0x43; | 4485 ack_frame.entropy_hash = 0x43; |
5161 ack_frame.largest_observed = kLargestObserved; | 4486 ack_frame.largest_observed = kLargestObserved; |
5162 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 4487 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
5163 ack_frame.packets.Add(kMissingPacket); | 4488 ack_frame.packets.Add(kMissingPacket); |
5164 | 4489 |
5165 QuicFrames frames; | 4490 QuicFrames frames; |
5166 frames.push_back(QuicFrame(&ack_frame)); | 4491 frames.push_back(QuicFrame(&ack_frame)); |
5167 | 4492 |
5168 // clang-format off | 4493 // clang-format off |
5169 unsigned char packet[] = { | 4494 unsigned char packet[] = { |
5170 // public flags (8 byte connection_id) | 4495 // public flags (8 byte connection_id) |
5171 0x3C, | |
5172 // connection_id | |
5173 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
5174 // packet number | |
5175 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
5176 // private flags (entropy) | |
5177 0x01, | |
5178 | |
5179 // frame type (ack frame) | |
5180 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
5181 0x6C, | |
5182 // entropy hash of all received packets. | |
5183 0x43, | |
5184 // largest observed packet number | |
5185 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
5186 // Zero delta time. | |
5187 0x00, 0x00, | |
5188 // num received packets. | |
5189 0x00, | |
5190 // num missing packet ranges | |
5191 0x01, | |
5192 // missing packet delta | |
5193 0x01, | |
5194 // 0 more missing packets in range. | |
5195 0x00, | |
5196 // 0 revived packets. | |
5197 0x00, | |
5198 }; | |
5199 // clang-format on | |
5200 | |
5201 // clang-format off | |
5202 unsigned char packet_version32[] = { | |
5203 // public flags (8 byte connection_id) | |
5204 static_cast<unsigned char>( | 4496 static_cast<unsigned char>( |
5205 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4497 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
5206 // connection_id | 4498 // connection_id |
5207 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4499 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
5208 // packet number | 4500 // packet number |
5209 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4501 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
5210 // private flags (entropy) | 4502 // private flags (entropy) |
5211 0x01, | 4503 0x01, |
5212 | 4504 |
5213 // frame type (ack frame) | 4505 // frame type (ack frame) |
(...skipping 12 matching lines...) Expand all Loading... |
5226 // missing packet delta | 4518 // missing packet delta |
5227 0x01, | 4519 0x01, |
5228 // 0 more missing packets in range. | 4520 // 0 more missing packets in range. |
5229 0x00, | 4521 0x00, |
5230 }; | 4522 }; |
5231 // clang-format on | 4523 // clang-format on |
5232 | 4524 |
5233 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4525 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
5234 ASSERT_TRUE(data != nullptr); | 4526 ASSERT_TRUE(data != nullptr); |
5235 | 4527 |
5236 if (framer_.version() <= QUIC_VERSION_31) { | 4528 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
5237 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4529 data->length(), AsChars(packet), |
5238 data->length(), AsChars(packet), | 4530 arraysize(packet)); |
5239 arraysize(packet)); | |
5240 } else { | |
5241 test::CompareCharArraysWithHexError( | |
5242 "constructed packet", data->data(), data->length(), | |
5243 AsChars(packet_version32), arraysize(packet_version32)); | |
5244 } | |
5245 } | 4531 } |
5246 | 4532 |
5247 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 4533 // TODO(jri): Add test for tuncated packets in which the original ack frame had |
5248 // revived packets. (In both the large and small packet cases below). | 4534 // revived packets. (In both the large and small packet cases below). |
5249 | 4535 |
5250 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 4536 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
5251 if (framer_.version() > QUIC_VERSION_33) { | 4537 if (framer_.version() > QUIC_VERSION_33) { |
5252 return; | 4538 return; |
5253 } | 4539 } |
5254 | 4540 |
5255 QuicPacketHeader header; | 4541 QuicPacketHeader header; |
5256 header.public_header.connection_id = kConnectionId; | 4542 header.public_header.connection_id = kConnectionId; |
5257 header.public_header.reset_flag = false; | 4543 header.public_header.reset_flag = false; |
5258 header.public_header.version_flag = false; | 4544 header.public_header.version_flag = false; |
5259 header.fec_flag = false; | |
5260 header.entropy_flag = true; | 4545 header.entropy_flag = true; |
5261 header.packet_number = kPacketNumber; | 4546 header.packet_number = kPacketNumber; |
5262 | 4547 |
5263 QuicAckFrame ack_frame; | 4548 QuicAckFrame ack_frame; |
5264 // This entropy hash is different from what shows up in the packet below, | 4549 // This entropy hash is different from what shows up in the packet below, |
5265 // since entropy is recomputed by the framer on ack truncation (by | 4550 // since entropy is recomputed by the framer on ack truncation (by |
5266 // TestEntropyCalculator for this test.) | 4551 // TestEntropyCalculator for this test.) |
5267 ack_frame.entropy_hash = 0x43; | 4552 ack_frame.entropy_hash = 0x43; |
5268 ack_frame.largest_observed = 2 * 300; | 4553 ack_frame.largest_observed = 2 * 300; |
5269 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 4554 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
5270 for (size_t i = 1; i < 2 * 300; i += 2) { | 4555 for (size_t i = 1; i < 2 * 300; i += 2) { |
5271 ack_frame.packets.Add(i); | 4556 ack_frame.packets.Add(i); |
5272 } | 4557 } |
5273 | 4558 |
5274 QuicFrames frames; | 4559 QuicFrames frames; |
5275 frames.push_back(QuicFrame(&ack_frame)); | 4560 frames.push_back(QuicFrame(&ack_frame)); |
5276 | 4561 |
5277 // clang-format off | 4562 // clang-format off |
5278 unsigned char packet[] = { | 4563 unsigned char packet[] = { |
5279 // public flags (8 byte connection_id) | 4564 // public flags (8 byte connection_id) |
5280 0x3C, | |
5281 // connection_id | |
5282 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
5283 // packet number | |
5284 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
5285 // private flags (entropy) | |
5286 0x01, | |
5287 | |
5288 // frame type (ack frame) | |
5289 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | |
5290 0x74, | |
5291 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | |
5292 // since ack is truncated. | |
5293 0x01, | |
5294 // 2-byte largest observed packet number. | |
5295 // Expected to be 510 (0x1FE), since only 255 nack ranges can fit. | |
5296 0xFE, 0x01, | |
5297 // Zero delta time. | |
5298 0x00, 0x00, | |
5299 // num missing packet ranges (limited to 255 by size of this field). | |
5300 0xFF, | |
5301 // {missing packet delta, further missing packets in range} | |
5302 // 6 nack ranges x 42 + 3 nack ranges | |
5303 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5304 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5305 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5306 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5307 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5308 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5309 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5310 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5311 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5312 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5313 | |
5314 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5315 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5316 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5317 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5318 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5319 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5320 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5321 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5322 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5323 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5324 | |
5325 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5326 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5327 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5328 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5329 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5330 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5331 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5332 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5333 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5334 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5335 | |
5336 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5337 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5338 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5339 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5340 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5341 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5342 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5343 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5344 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5345 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5346 | |
5347 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5348 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5349 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5350 | |
5351 // 0 revived packets. | |
5352 0x00, | |
5353 }; | |
5354 // clang-format on | |
5355 | |
5356 // clang-format off | |
5357 unsigned char packet_version32[] = { | |
5358 // public flags (8 byte connection_id) | |
5359 static_cast<unsigned char>( | 4565 static_cast<unsigned char>( |
5360 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4566 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
5361 // connection_id | 4567 // connection_id |
5362 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4568 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
5363 // packet number | 4569 // packet number |
5364 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4570 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
5365 // private flags (entropy) | 4571 // private flags (entropy) |
5366 0x01, | 4572 0x01, |
5367 | 4573 |
5368 // frame type (ack frame) | 4574 // frame type (ack frame) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5426 | 4632 |
5427 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4633 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
5428 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4634 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
5429 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4635 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
5430 }; | 4636 }; |
5431 // clang-format on | 4637 // clang-format on |
5432 | 4638 |
5433 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4639 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
5434 ASSERT_TRUE(data != nullptr); | 4640 ASSERT_TRUE(data != nullptr); |
5435 | 4641 |
5436 if (framer_.version() <= QUIC_VERSION_31) { | 4642 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
5437 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4643 data->length(), AsChars(packet), |
5438 data->length(), AsChars(packet), | 4644 arraysize(packet)); |
5439 arraysize(packet)); | |
5440 } else { | |
5441 test::CompareCharArraysWithHexError( | |
5442 "constructed packet", data->data(), data->length(), | |
5443 AsChars(packet_version32), arraysize(packet_version32)); | |
5444 } | |
5445 } | 4645 } |
5446 | 4646 |
5447 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 4647 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
5448 if (framer_.version() > QUIC_VERSION_33) { | 4648 if (framer_.version() > QUIC_VERSION_33) { |
5449 return; | 4649 return; |
5450 } | 4650 } |
5451 | 4651 |
5452 QuicPacketHeader header; | 4652 QuicPacketHeader header; |
5453 header.public_header.connection_id = kConnectionId; | 4653 header.public_header.connection_id = kConnectionId; |
5454 header.public_header.reset_flag = false; | 4654 header.public_header.reset_flag = false; |
5455 header.public_header.version_flag = false; | 4655 header.public_header.version_flag = false; |
5456 header.fec_flag = false; | |
5457 header.entropy_flag = true; | 4656 header.entropy_flag = true; |
5458 header.packet_number = kPacketNumber; | 4657 header.packet_number = kPacketNumber; |
5459 | 4658 |
5460 QuicAckFrame ack_frame; | 4659 QuicAckFrame ack_frame; |
5461 // This entropy hash is different from what shows up in the packet below, | 4660 // This entropy hash is different from what shows up in the packet below, |
5462 // since entropy is recomputed by the framer on ack truncation (by | 4661 // since entropy is recomputed by the framer on ack truncation (by |
5463 // TestEntropyCalculator for this test.) | 4662 // TestEntropyCalculator for this test.) |
5464 ack_frame.entropy_hash = 0x43; | 4663 ack_frame.entropy_hash = 0x43; |
5465 ack_frame.largest_observed = 2 * 300; | 4664 ack_frame.largest_observed = 2 * 300; |
5466 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 4665 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
5467 for (size_t i = 1; i < 2 * 300; i += 2) { | 4666 for (size_t i = 1; i < 2 * 300; i += 2) { |
5468 ack_frame.packets.Add(i); | 4667 ack_frame.packets.Add(i); |
5469 } | 4668 } |
5470 | 4669 |
5471 QuicFrames frames; | 4670 QuicFrames frames; |
5472 frames.push_back(QuicFrame(&ack_frame)); | 4671 frames.push_back(QuicFrame(&ack_frame)); |
5473 | 4672 |
5474 // clang-format off | 4673 // clang-format off |
5475 unsigned char packet[] = { | 4674 unsigned char packet[] = { |
5476 // public flags (8 byte connection_id) | 4675 // public flags (8 byte connection_id) |
5477 0x3C, | |
5478 // connection_id | |
5479 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
5480 // packet number | |
5481 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
5482 // private flags (entropy) | |
5483 0x01, | |
5484 | |
5485 // frame type (ack frame) | |
5486 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | |
5487 0x74, | |
5488 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | |
5489 // since ack is truncated. | |
5490 0x01, | |
5491 // 2-byte largest observed packet number. | |
5492 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. | |
5493 0x0C, 0x00, | |
5494 // Zero delta time. | |
5495 0x00, 0x00, | |
5496 // num missing packet ranges (limited to 6 by packet size of 37). | |
5497 0x06, | |
5498 // {missing packet delta, further missing packets in range} | |
5499 // 6 nack ranges | |
5500 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | |
5501 // 0 revived packets. | |
5502 0x00, | |
5503 }; | |
5504 // clang-format on | |
5505 | |
5506 // clang-format off | |
5507 unsigned char packet_version32[] = { | |
5508 // public flags (8 byte connection_id) | |
5509 static_cast<unsigned char>( | 4676 static_cast<unsigned char>( |
5510 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4677 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
5511 // connection_id | 4678 // connection_id |
5512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4679 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
5513 // packet number | 4680 // packet number |
5514 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4681 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
5515 // private flags (entropy) | 4682 // private flags (entropy) |
5516 0x01, | 4683 0x01, |
5517 | 4684 |
5518 // frame type (ack frame) | 4685 // frame type (ack frame) |
5519 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 4686 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) |
5520 0x74, | 4687 0x74, |
5521 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 4688 // entropy hash of all received packets, set to 1 by TestEntropyCalculator |
5522 // since ack is truncated. | 4689 // since ack is truncated. |
5523 0x01, | 4690 0x01, |
5524 // 2-byte largest observed packet number. | 4691 // 2-byte largest observed packet number. |
5525 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. | 4692 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. |
5526 0x0C, 0x00, | 4693 0x0C, 0x00, |
5527 // Zero delta time. | 4694 // Zero delta time. |
5528 0x00, 0x00, | 4695 0x00, 0x00, |
5529 // num missing packet ranges (limited to 6 by packet size of 37). | 4696 // num missing packet ranges (limited to 6 by packet size of 37). |
5530 0x06, | 4697 0x06, |
5531 // {missing packet delta, further missing packets in range} | 4698 // {missing packet delta, further missing packets in range} |
5532 // 6 nack ranges | 4699 // 6 nack ranges |
5533 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4700 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
5534 }; | 4701 }; |
5535 // clang-format on | 4702 // clang-format on |
5536 | 4703 |
5537 if (framer_.version() <= QUIC_VERSION_31) { | 4704 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u)); |
5538 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); | 4705 ASSERT_TRUE(data != nullptr); |
5539 ASSERT_TRUE(data != nullptr); | 4706 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. |
5540 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 4707 EXPECT_EQ(35u, data->length()); |
5541 EXPECT_EQ(36u, data->length()); | 4708 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
5542 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4709 data->length(), AsChars(packet), |
5543 data->length(), AsChars(packet), | 4710 arraysize(packet)); |
5544 arraysize(packet)); | |
5545 } else { | |
5546 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u)); | |
5547 ASSERT_TRUE(data != nullptr); | |
5548 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | |
5549 EXPECT_EQ(35u, data->length()); | |
5550 test::CompareCharArraysWithHexError( | |
5551 "constructed packet", data->data(), data->length(), | |
5552 AsChars(packet_version32), arraysize(packet_version32)); | |
5553 } | |
5554 } | 4711 } |
5555 | 4712 |
5556 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { | 4713 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { |
5557 if (framer_.version() <= QUIC_VERSION_33) { | 4714 if (framer_.version() <= QUIC_VERSION_33) { |
5558 return; | 4715 return; |
5559 } | 4716 } |
5560 | 4717 |
5561 QuicPacketHeader header; | 4718 QuicPacketHeader header; |
5562 header.public_header.connection_id = kConnectionId; | 4719 header.public_header.connection_id = kConnectionId; |
5563 header.public_header.reset_flag = false; | 4720 header.public_header.reset_flag = false; |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5806 } | 4963 } |
5807 | 4964 |
5808 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 4965 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
5809 if (framer_.version() > QUIC_VERSION_33) { | 4966 if (framer_.version() > QUIC_VERSION_33) { |
5810 return; | 4967 return; |
5811 } | 4968 } |
5812 QuicPacketHeader header; | 4969 QuicPacketHeader header; |
5813 header.public_header.connection_id = kConnectionId; | 4970 header.public_header.connection_id = kConnectionId; |
5814 header.public_header.reset_flag = false; | 4971 header.public_header.reset_flag = false; |
5815 header.public_header.version_flag = false; | 4972 header.public_header.version_flag = false; |
5816 header.fec_flag = false; | |
5817 header.entropy_flag = true; | 4973 header.entropy_flag = true; |
5818 header.packet_number = kPacketNumber; | 4974 header.packet_number = kPacketNumber; |
5819 | 4975 |
5820 QuicStopWaitingFrame stop_waiting_frame; | 4976 QuicStopWaitingFrame stop_waiting_frame; |
5821 stop_waiting_frame.entropy_hash = 0x14; | 4977 stop_waiting_frame.entropy_hash = 0x14; |
5822 stop_waiting_frame.least_unacked = kLeastUnacked; | 4978 stop_waiting_frame.least_unacked = kLeastUnacked; |
5823 | 4979 |
5824 QuicFrames frames; | 4980 QuicFrames frames; |
5825 frames.push_back(QuicFrame(&stop_waiting_frame)); | 4981 frames.push_back(QuicFrame(&stop_waiting_frame)); |
5826 | 4982 |
(...skipping 29 matching lines...) Expand all Loading... |
5856 } | 5012 } |
5857 | 5013 |
5858 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { | 5014 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { |
5859 if (framer_.version() <= QUIC_VERSION_33) { | 5015 if (framer_.version() <= QUIC_VERSION_33) { |
5860 return; | 5016 return; |
5861 } | 5017 } |
5862 QuicPacketHeader header; | 5018 QuicPacketHeader header; |
5863 header.public_header.connection_id = kConnectionId; | 5019 header.public_header.connection_id = kConnectionId; |
5864 header.public_header.reset_flag = false; | 5020 header.public_header.reset_flag = false; |
5865 header.public_header.version_flag = false; | 5021 header.public_header.version_flag = false; |
5866 header.fec_flag = false; | |
5867 header.entropy_flag = false; | 5022 header.entropy_flag = false; |
5868 header.packet_number = kPacketNumber; | 5023 header.packet_number = kPacketNumber; |
5869 | 5024 |
5870 QuicStopWaitingFrame stop_waiting_frame; | 5025 QuicStopWaitingFrame stop_waiting_frame; |
5871 stop_waiting_frame.least_unacked = kLeastUnacked; | 5026 stop_waiting_frame.least_unacked = kLeastUnacked; |
5872 | 5027 |
5873 QuicFrames frames; | 5028 QuicFrames frames; |
5874 frames.push_back(QuicFrame(&stop_waiting_frame)); | 5029 frames.push_back(QuicFrame(&stop_waiting_frame)); |
5875 | 5030 |
5876 // clang-format off | 5031 // clang-format off |
(...skipping 20 matching lines...) Expand all Loading... |
5897 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5052 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
5898 data->length(), AsChars(packet), | 5053 data->length(), AsChars(packet), |
5899 arraysize(packet)); | 5054 arraysize(packet)); |
5900 } | 5055 } |
5901 | 5056 |
5902 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 5057 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
5903 QuicPacketHeader header; | 5058 QuicPacketHeader header; |
5904 header.public_header.connection_id = kConnectionId; | 5059 header.public_header.connection_id = kConnectionId; |
5905 header.public_header.reset_flag = false; | 5060 header.public_header.reset_flag = false; |
5906 header.public_header.version_flag = false; | 5061 header.public_header.version_flag = false; |
5907 header.fec_flag = false; | |
5908 header.entropy_flag = false; | 5062 header.entropy_flag = false; |
5909 header.packet_number = kPacketNumber; | 5063 header.packet_number = kPacketNumber; |
5910 | 5064 |
5911 QuicRstStreamFrame rst_frame; | 5065 QuicRstStreamFrame rst_frame; |
5912 rst_frame.stream_id = kStreamId; | 5066 rst_frame.stream_id = kStreamId; |
5913 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 5067 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
5914 rst_frame.byte_offset = 0x0807060504030201; | 5068 rst_frame.byte_offset = 0x0807060504030201; |
5915 | 5069 |
5916 // clang-format off | 5070 // clang-format off |
5917 unsigned char packet[] = { | 5071 unsigned char packet[] = { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5970 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 5124 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
5971 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5125 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
5972 : arraysize(packet_34)); | 5126 : arraysize(packet_34)); |
5973 } | 5127 } |
5974 | 5128 |
5975 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 5129 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
5976 QuicPacketHeader header; | 5130 QuicPacketHeader header; |
5977 header.public_header.connection_id = kConnectionId; | 5131 header.public_header.connection_id = kConnectionId; |
5978 header.public_header.reset_flag = false; | 5132 header.public_header.reset_flag = false; |
5979 header.public_header.version_flag = false; | 5133 header.public_header.version_flag = false; |
5980 header.fec_flag = false; | |
5981 header.entropy_flag = true; | 5134 header.entropy_flag = true; |
5982 header.packet_number = kPacketNumber; | 5135 header.packet_number = kPacketNumber; |
5983 | 5136 |
5984 QuicConnectionCloseFrame close_frame; | 5137 QuicConnectionCloseFrame close_frame; |
5985 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 5138 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
5986 close_frame.error_details = "because I can"; | 5139 close_frame.error_details = "because I can"; |
5987 | 5140 |
5988 QuicFrames frames; | 5141 QuicFrames frames; |
5989 frames.push_back(QuicFrame(&close_frame)); | 5142 frames.push_back(QuicFrame(&close_frame)); |
5990 | 5143 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6047 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 5200 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
6048 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5201 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6049 : arraysize(packet_34)); | 5202 : arraysize(packet_34)); |
6050 } | 5203 } |
6051 | 5204 |
6052 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 5205 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
6053 QuicPacketHeader header; | 5206 QuicPacketHeader header; |
6054 header.public_header.connection_id = kConnectionId; | 5207 header.public_header.connection_id = kConnectionId; |
6055 header.public_header.reset_flag = false; | 5208 header.public_header.reset_flag = false; |
6056 header.public_header.version_flag = false; | 5209 header.public_header.version_flag = false; |
6057 header.fec_flag = false; | |
6058 header.entropy_flag = true; | 5210 header.entropy_flag = true; |
6059 header.packet_number = kPacketNumber; | 5211 header.packet_number = kPacketNumber; |
6060 | 5212 |
6061 QuicGoAwayFrame goaway_frame; | 5213 QuicGoAwayFrame goaway_frame; |
6062 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 5214 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
6063 goaway_frame.last_good_stream_id = kStreamId; | 5215 goaway_frame.last_good_stream_id = kStreamId; |
6064 goaway_frame.reason_phrase = "because I can"; | 5216 goaway_frame.reason_phrase = "because I can"; |
6065 | 5217 |
6066 QuicFrames frames; | 5218 QuicFrames frames; |
6067 frames.push_back(QuicFrame(&goaway_frame)); | 5219 frames.push_back(QuicFrame(&goaway_frame)); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6128 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 5280 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
6129 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5281 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6130 : arraysize(packet_34)); | 5282 : arraysize(packet_34)); |
6131 } | 5283 } |
6132 | 5284 |
6133 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 5285 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
6134 QuicPacketHeader header; | 5286 QuicPacketHeader header; |
6135 header.public_header.connection_id = kConnectionId; | 5287 header.public_header.connection_id = kConnectionId; |
6136 header.public_header.reset_flag = false; | 5288 header.public_header.reset_flag = false; |
6137 header.public_header.version_flag = false; | 5289 header.public_header.version_flag = false; |
6138 header.fec_flag = false; | |
6139 header.entropy_flag = true; | 5290 header.entropy_flag = true; |
6140 header.packet_number = kPacketNumber; | 5291 header.packet_number = kPacketNumber; |
6141 | 5292 |
6142 QuicWindowUpdateFrame window_update_frame; | 5293 QuicWindowUpdateFrame window_update_frame; |
6143 window_update_frame.stream_id = kStreamId; | 5294 window_update_frame.stream_id = kStreamId; |
6144 window_update_frame.byte_offset = 0x1122334455667788; | 5295 window_update_frame.byte_offset = 0x1122334455667788; |
6145 | 5296 |
6146 QuicFrames frames; | 5297 QuicFrames frames; |
6147 frames.push_back(QuicFrame(&window_update_frame)); | 5298 frames.push_back(QuicFrame(&window_update_frame)); |
6148 | 5299 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6196 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 5347 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
6197 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5348 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6198 : arraysize(packet_34)); | 5349 : arraysize(packet_34)); |
6199 } | 5350 } |
6200 | 5351 |
6201 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 5352 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
6202 QuicPacketHeader header; | 5353 QuicPacketHeader header; |
6203 header.public_header.connection_id = kConnectionId; | 5354 header.public_header.connection_id = kConnectionId; |
6204 header.public_header.reset_flag = false; | 5355 header.public_header.reset_flag = false; |
6205 header.public_header.version_flag = false; | 5356 header.public_header.version_flag = false; |
6206 header.fec_flag = false; | |
6207 header.entropy_flag = true; | 5357 header.entropy_flag = true; |
6208 header.packet_number = kPacketNumber; | 5358 header.packet_number = kPacketNumber; |
6209 | 5359 |
6210 QuicBlockedFrame blocked_frame; | 5360 QuicBlockedFrame blocked_frame; |
6211 blocked_frame.stream_id = kStreamId; | 5361 blocked_frame.stream_id = kStreamId; |
6212 | 5362 |
6213 QuicFrames frames; | 5363 QuicFrames frames; |
6214 frames.push_back(QuicFrame(&blocked_frame)); | 5364 frames.push_back(QuicFrame(&blocked_frame)); |
6215 | 5365 |
6216 // clang-format off | 5366 // clang-format off |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6257 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), | 5407 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), |
6258 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5408 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6259 : arraysize(packet_34)); | 5409 : arraysize(packet_34)); |
6260 } | 5410 } |
6261 | 5411 |
6262 TEST_P(QuicFramerTest, BuildPingPacket) { | 5412 TEST_P(QuicFramerTest, BuildPingPacket) { |
6263 QuicPacketHeader header; | 5413 QuicPacketHeader header; |
6264 header.public_header.connection_id = kConnectionId; | 5414 header.public_header.connection_id = kConnectionId; |
6265 header.public_header.reset_flag = false; | 5415 header.public_header.reset_flag = false; |
6266 header.public_header.version_flag = false; | 5416 header.public_header.version_flag = false; |
6267 header.fec_flag = false; | |
6268 header.entropy_flag = true; | 5417 header.entropy_flag = true; |
6269 header.packet_number = kPacketNumber; | 5418 header.packet_number = kPacketNumber; |
6270 | 5419 |
6271 QuicPingFrame ping_frame; | 5420 QuicPingFrame ping_frame; |
6272 | 5421 |
6273 QuicFrames frames; | 5422 QuicFrames frames; |
6274 frames.push_back(QuicFrame(ping_frame)); | 5423 frames.push_back(QuicFrame(ping_frame)); |
6275 | 5424 |
6276 // clang-format off | 5425 // clang-format off |
6277 unsigned char packet[] = { | 5426 unsigned char packet[] = { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6315 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5464 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6316 : arraysize(packet_34)); | 5465 : arraysize(packet_34)); |
6317 } | 5466 } |
6318 | 5467 |
6319 TEST_P(QuicFramerTest, BuildPathClosePacket) { | 5468 TEST_P(QuicFramerTest, BuildPathClosePacket) { |
6320 QuicPacketHeader header; | 5469 QuicPacketHeader header; |
6321 header.public_header.connection_id = kConnectionId; | 5470 header.public_header.connection_id = kConnectionId; |
6322 header.public_header.multipath_flag = true; | 5471 header.public_header.multipath_flag = true; |
6323 header.public_header.reset_flag = false; | 5472 header.public_header.reset_flag = false; |
6324 header.public_header.version_flag = false; | 5473 header.public_header.version_flag = false; |
6325 header.fec_flag = false; | |
6326 header.entropy_flag = true; | 5474 header.entropy_flag = true; |
6327 header.path_id = kDefaultPathId; | 5475 header.path_id = kDefaultPathId; |
6328 header.packet_number = kPacketNumber; | 5476 header.packet_number = kPacketNumber; |
6329 | 5477 |
6330 QuicPathCloseFrame path_close; | 5478 QuicPathCloseFrame path_close; |
6331 path_close.path_id = kPathId; | 5479 path_close.path_id = kPathId; |
6332 QuicFrames frames; | 5480 QuicFrames frames; |
6333 frames.push_back(QuicFrame(&path_close)); | 5481 frames.push_back(QuicFrame(&path_close)); |
6334 | 5482 |
6335 // clang-format off | 5483 // clang-format off |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6378 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) | 5526 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) |
6379 : arraysize(packet_34)); | 5527 : arraysize(packet_34)); |
6380 } | 5528 } |
6381 | 5529 |
6382 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 5530 // Test that the MTU discovery packet is serialized correctly as a PING packet. |
6383 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 5531 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { |
6384 QuicPacketHeader header; | 5532 QuicPacketHeader header; |
6385 header.public_header.connection_id = kConnectionId; | 5533 header.public_header.connection_id = kConnectionId; |
6386 header.public_header.reset_flag = false; | 5534 header.public_header.reset_flag = false; |
6387 header.public_header.version_flag = false; | 5535 header.public_header.version_flag = false; |
6388 header.fec_flag = false; | |
6389 header.entropy_flag = true; | 5536 header.entropy_flag = true; |
6390 header.packet_number = kPacketNumber; | 5537 header.packet_number = kPacketNumber; |
6391 | 5538 |
6392 QuicMtuDiscoveryFrame mtu_discovery_frame; | 5539 QuicMtuDiscoveryFrame mtu_discovery_frame; |
6393 | 5540 |
6394 QuicFrames frames; | 5541 QuicFrames frames; |
6395 frames.push_back(QuicFrame(mtu_discovery_frame)); | 5542 frames.push_back(QuicFrame(mtu_discovery_frame)); |
6396 | 5543 |
6397 // clang-format off | 5544 // clang-format off |
6398 unsigned char packet[] = { | 5545 unsigned char packet[] = { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6465 'R', 'S', 'E', 'Q', | 5612 'R', 'S', 'E', 'Q', |
6466 // end offset 16 | 5613 // end offset 16 |
6467 0x10, 0x00, 0x00, 0x00, | 5614 0x10, 0x00, 0x00, 0x00, |
6468 // nonce proof | 5615 // nonce proof |
6469 0x89, 0x67, 0x45, 0x23, | 5616 0x89, 0x67, 0x45, 0x23, |
6470 0x01, 0xEF, 0xCD, 0xAB, | 5617 0x01, 0xEF, 0xCD, 0xAB, |
6471 // rejected packet number | 5618 // rejected packet number |
6472 0xBC, 0x9A, 0x78, 0x56, | 5619 0xBC, 0x9A, 0x78, 0x56, |
6473 0x34, 0x12, 0x00, 0x00, | 5620 0x34, 0x12, 0x00, 0x00, |
6474 }; | 5621 }; |
| 5622 unsigned char packet_no_rejected_packet_number[] = { |
| 5623 // public flags (public reset, 8 byte ConnectionId) |
| 5624 0x0E, |
| 5625 // connection_id |
| 5626 0x10, 0x32, 0x54, 0x76, |
| 5627 0x98, 0xBA, 0xDC, 0xFE, |
| 5628 // message tag (kPRST) |
| 5629 'P', 'R', 'S', 'T', |
| 5630 // num_entries (1) + padding |
| 5631 0x01, 0x00, 0x00, 0x00, |
| 5632 // tag kRNON |
| 5633 'R', 'N', 'O', 'N', |
| 5634 // end offset 8 |
| 5635 0x08, 0x00, 0x00, 0x00, |
| 5636 // nonce proof |
| 5637 0x89, 0x67, 0x45, 0x23, |
| 5638 0x01, 0xEF, 0xCD, 0xAB, |
| 5639 }; |
6475 // clang-format on | 5640 // clang-format on |
6476 | 5641 |
6477 std::unique_ptr<QuicEncryptedPacket> data( | 5642 std::unique_ptr<QuicEncryptedPacket> data( |
6478 framer_.BuildPublicResetPacket(reset_packet)); | 5643 framer_.BuildPublicResetPacket(reset_packet)); |
6479 ASSERT_TRUE(data != nullptr); | 5644 ASSERT_TRUE(data != nullptr); |
6480 | 5645 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
6481 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5646 test::CompareCharArraysWithHexError( |
6482 data->length(), AsChars(packet), | 5647 "constructed packet", data->data(), data->length(), |
6483 arraysize(packet)); | 5648 AsChars(packet_no_rejected_packet_number), |
| 5649 arraysize(packet_no_rejected_packet_number)); |
| 5650 } else { |
| 5651 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 5652 data->length(), AsChars(packet), |
| 5653 arraysize(packet)); |
| 5654 } |
6484 } | 5655 } |
6485 | 5656 |
6486 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 5657 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
6487 FLAGS_quic_use_old_public_reset_packets = false; | 5658 FLAGS_quic_use_old_public_reset_packets = false; |
6488 QuicPublicResetPacket reset_packet; | 5659 QuicPublicResetPacket reset_packet; |
6489 reset_packet.public_header.connection_id = kConnectionId; | 5660 reset_packet.public_header.connection_id = kConnectionId; |
6490 reset_packet.public_header.reset_flag = true; | 5661 reset_packet.public_header.reset_flag = true; |
6491 reset_packet.public_header.version_flag = false; | 5662 reset_packet.public_header.version_flag = false; |
6492 reset_packet.rejected_packet_number = kPacketNumber; | 5663 reset_packet.rejected_packet_number = kPacketNumber; |
6493 reset_packet.nonce_proof = kNonceProof; | 5664 reset_packet.nonce_proof = kNonceProof; |
(...skipping 17 matching lines...) Expand all Loading... |
6511 'R', 'S', 'E', 'Q', | 5682 'R', 'S', 'E', 'Q', |
6512 // end offset 16 | 5683 // end offset 16 |
6513 0x10, 0x00, 0x00, 0x00, | 5684 0x10, 0x00, 0x00, 0x00, |
6514 // nonce proof | 5685 // nonce proof |
6515 0x89, 0x67, 0x45, 0x23, | 5686 0x89, 0x67, 0x45, 0x23, |
6516 0x01, 0xEF, 0xCD, 0xAB, | 5687 0x01, 0xEF, 0xCD, 0xAB, |
6517 // rejected packet number | 5688 // rejected packet number |
6518 0xBC, 0x9A, 0x78, 0x56, | 5689 0xBC, 0x9A, 0x78, 0x56, |
6519 0x34, 0x12, 0x00, 0x00, | 5690 0x34, 0x12, 0x00, 0x00, |
6520 }; | 5691 }; |
| 5692 unsigned char packet_no_rejected_packet_number[] = { |
| 5693 // public flags (public reset, 8 byte ConnectionId) |
| 5694 0x0A, |
| 5695 // connection_id |
| 5696 0x10, 0x32, 0x54, 0x76, |
| 5697 0x98, 0xBA, 0xDC, 0xFE, |
| 5698 // message tag (kPRST) |
| 5699 'P', 'R', 'S', 'T', |
| 5700 // num_entries (1) + padding |
| 5701 0x01, 0x00, 0x00, 0x00, |
| 5702 // tag kRNON |
| 5703 'R', 'N', 'O', 'N', |
| 5704 // end offset 8 |
| 5705 0x08, 0x00, 0x00, 0x00, |
| 5706 // nonce proof |
| 5707 0x89, 0x67, 0x45, 0x23, |
| 5708 0x01, 0xEF, 0xCD, 0xAB, |
| 5709 }; |
6521 // clang-format on | 5710 // clang-format on |
6522 | 5711 |
6523 std::unique_ptr<QuicEncryptedPacket> data( | 5712 std::unique_ptr<QuicEncryptedPacket> data( |
6524 framer_.BuildPublicResetPacket(reset_packet)); | 5713 framer_.BuildPublicResetPacket(reset_packet)); |
6525 ASSERT_TRUE(data != nullptr); | 5714 ASSERT_TRUE(data != nullptr); |
6526 | 5715 |
6527 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5716 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
6528 data->length(), AsChars(packet), | 5717 test::CompareCharArraysWithHexError( |
6529 arraysize(packet)); | 5718 "constructed packet", data->data(), data->length(), |
| 5719 AsChars(packet_no_rejected_packet_number), |
| 5720 arraysize(packet_no_rejected_packet_number)); |
| 5721 } else { |
| 5722 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 5723 data->length(), AsChars(packet), |
| 5724 arraysize(packet)); |
| 5725 } |
6530 } | 5726 } |
6531 | 5727 |
6532 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 5728 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
6533 FLAGS_quic_use_old_public_reset_packets = false; | 5729 FLAGS_quic_use_old_public_reset_packets = false; |
6534 QuicPublicResetPacket reset_packet; | 5730 QuicPublicResetPacket reset_packet; |
6535 reset_packet.public_header.connection_id = kConnectionId; | 5731 reset_packet.public_header.connection_id = kConnectionId; |
6536 reset_packet.public_header.reset_flag = true; | 5732 reset_packet.public_header.reset_flag = true; |
6537 reset_packet.public_header.version_flag = false; | 5733 reset_packet.public_header.version_flag = false; |
6538 reset_packet.rejected_packet_number = kPacketNumber; | 5734 reset_packet.rejected_packet_number = kPacketNumber; |
6539 reset_packet.nonce_proof = kNonceProof; | 5735 reset_packet.nonce_proof = kNonceProof; |
(...skipping 26 matching lines...) Expand all Loading... |
6566 0x89, 0x67, 0x45, 0x23, | 5762 0x89, 0x67, 0x45, 0x23, |
6567 0x01, 0xEF, 0xCD, 0xAB, | 5763 0x01, 0xEF, 0xCD, 0xAB, |
6568 // rejected packet number | 5764 // rejected packet number |
6569 0xBC, 0x9A, 0x78, 0x56, | 5765 0xBC, 0x9A, 0x78, 0x56, |
6570 0x34, 0x12, 0x00, 0x00, | 5766 0x34, 0x12, 0x00, 0x00, |
6571 // client address | 5767 // client address |
6572 0x02, 0x00, | 5768 0x02, 0x00, |
6573 0x7F, 0x00, 0x00, 0x01, | 5769 0x7F, 0x00, 0x00, 0x01, |
6574 0x34, 0x12, | 5770 0x34, 0x12, |
6575 }; | 5771 }; |
| 5772 unsigned char packet_no_rejected_packet_number[] = { |
| 5773 // public flags (public reset, 8 byte ConnectionId) |
| 5774 0x0A, |
| 5775 // connection_id |
| 5776 0x10, 0x32, 0x54, 0x76, |
| 5777 0x98, 0xBA, 0xDC, 0xFE, |
| 5778 // message tag (kPRST) |
| 5779 'P', 'R', 'S', 'T', |
| 5780 // num_entries (2) + padding |
| 5781 0x02, 0x00, 0x00, 0x00, |
| 5782 // tag kRNON |
| 5783 'R', 'N', 'O', 'N', |
| 5784 // end offset 8 |
| 5785 0x08, 0x00, 0x00, 0x00, |
| 5786 // tag kCADR |
| 5787 'C', 'A', 'D', 'R', |
| 5788 // end offset 16 |
| 5789 0x10, 0x00, 0x00, 0x00, |
| 5790 // nonce proof |
| 5791 0x89, 0x67, 0x45, 0x23, |
| 5792 0x01, 0xEF, 0xCD, 0xAB, |
| 5793 // client address |
| 5794 0x02, 0x00, |
| 5795 0x7F, 0x00, 0x00, 0x01, |
| 5796 0x34, 0x12, |
| 5797 }; |
6576 // clang-format on | 5798 // clang-format on |
6577 | 5799 |
6578 std::unique_ptr<QuicEncryptedPacket> data( | 5800 std::unique_ptr<QuicEncryptedPacket> data( |
6579 framer_.BuildPublicResetPacket(reset_packet)); | 5801 framer_.BuildPublicResetPacket(reset_packet)); |
6580 ASSERT_TRUE(data != nullptr); | 5802 ASSERT_TRUE(data != nullptr); |
6581 | 5803 |
6582 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5804 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
6583 data->length(), AsChars(packet), | 5805 test::CompareCharArraysWithHexError( |
6584 arraysize(packet)); | 5806 "constructed packet", data->data(), data->length(), |
| 5807 AsChars(packet_no_rejected_packet_number), |
| 5808 arraysize(packet_no_rejected_packet_number)); |
| 5809 } else { |
| 5810 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 5811 data->length(), AsChars(packet), |
| 5812 arraysize(packet)); |
| 5813 } |
6585 } | 5814 } |
6586 | 5815 |
6587 TEST_P(QuicFramerTest, EncryptPacket) { | 5816 TEST_P(QuicFramerTest, EncryptPacket) { |
6588 QuicPacketNumber packet_number = kPacketNumber; | 5817 QuicPacketNumber packet_number = kPacketNumber; |
6589 // clang-format off | 5818 // clang-format off |
6590 unsigned char packet[] = { | 5819 unsigned char packet[] = { |
6591 // public flags (8 byte connection_id) | 5820 // public flags (8 byte connection_id) |
6592 static_cast<unsigned char>( | 5821 static_cast<unsigned char>( |
6593 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 5822 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
6594 // connection_id | 5823 // connection_id |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6814 | 6043 |
6815 ASSERT_NE(0u, encrypted_length); | 6044 ASSERT_NE(0u, encrypted_length); |
6816 EXPECT_TRUE(CheckEncryption(kPathId, packet_number, raw.get())); | 6045 EXPECT_TRUE(CheckEncryption(kPathId, packet_number, raw.get())); |
6817 } | 6046 } |
6818 | 6047 |
6819 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 6048 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
6820 QuicPacketHeader header; | 6049 QuicPacketHeader header; |
6821 header.public_header.connection_id = kConnectionId; | 6050 header.public_header.connection_id = kConnectionId; |
6822 header.public_header.reset_flag = false; | 6051 header.public_header.reset_flag = false; |
6823 header.public_header.version_flag = false; | 6052 header.public_header.version_flag = false; |
6824 header.fec_flag = false; | |
6825 header.entropy_flag = false; | 6053 header.entropy_flag = false; |
6826 header.packet_number = kPacketNumber; | 6054 header.packet_number = kPacketNumber; |
6827 | 6055 |
6828 QuicAckFrame ack_frame; | 6056 QuicAckFrame ack_frame; |
6829 // Create a packet with just the ack. | 6057 // Create a packet with just the ack. |
6830 if (framer_.version() <= QUIC_VERSION_33) { | 6058 if (framer_.version() <= QUIC_VERSION_33) { |
6831 ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 6059 ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
6832 } else { | 6060 } else { |
6833 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); | 6061 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); |
6834 } | 6062 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6866 EXPECT_EQ(90u, processed_ack_frame.packets.Min()); | 6094 EXPECT_EQ(90u, processed_ack_frame.packets.Min()); |
6867 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); | 6095 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); |
6868 } | 6096 } |
6869 } | 6097 } |
6870 | 6098 |
6871 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 6099 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { |
6872 QuicPacketHeader header; | 6100 QuicPacketHeader header; |
6873 header.public_header.connection_id = kConnectionId; | 6101 header.public_header.connection_id = kConnectionId; |
6874 header.public_header.reset_flag = false; | 6102 header.public_header.reset_flag = false; |
6875 header.public_header.version_flag = false; | 6103 header.public_header.version_flag = false; |
6876 header.fec_flag = false; | |
6877 header.entropy_flag = false; | 6104 header.entropy_flag = false; |
6878 header.packet_number = kPacketNumber; | 6105 header.packet_number = kPacketNumber; |
6879 | 6106 |
6880 // Create a packet with just the ack. | 6107 // Create a packet with just the ack. |
6881 QuicAckFrame ack_frame; | 6108 QuicAckFrame ack_frame; |
6882 if (framer_.version() <= QUIC_VERSION_33) { | 6109 if (framer_.version() <= QUIC_VERSION_33) { |
6883 ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 6110 ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
6884 } else { | 6111 } else { |
6885 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); | 6112 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); |
6886 } | 6113 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6919 EXPECT_EQ(124u, processed_ack_frame.packets.Min()); | 6146 EXPECT_EQ(124u, processed_ack_frame.packets.Min()); |
6920 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); | 6147 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); |
6921 } | 6148 } |
6922 } | 6149 } |
6923 | 6150 |
6924 TEST_P(QuicFramerTest, CleanTruncation) { | 6151 TEST_P(QuicFramerTest, CleanTruncation) { |
6925 QuicPacketHeader header; | 6152 QuicPacketHeader header; |
6926 header.public_header.connection_id = kConnectionId; | 6153 header.public_header.connection_id = kConnectionId; |
6927 header.public_header.reset_flag = false; | 6154 header.public_header.reset_flag = false; |
6928 header.public_header.version_flag = false; | 6155 header.public_header.version_flag = false; |
6929 header.fec_flag = false; | |
6930 header.entropy_flag = true; | 6156 header.entropy_flag = true; |
6931 header.packet_number = kPacketNumber; | 6157 header.packet_number = kPacketNumber; |
6932 | 6158 |
6933 QuicAckFrame ack_frame; | 6159 QuicAckFrame ack_frame; |
6934 ack_frame.largest_observed = 201; | 6160 ack_frame.largest_observed = 201; |
6935 ack_frame.packets.Add(1, ack_frame.largest_observed); | 6161 ack_frame.packets.Add(1, ack_frame.largest_observed); |
6936 | 6162 |
6937 // Create a packet with just the ack. | 6163 // Create a packet with just the ack. |
6938 QuicFrame frame; | 6164 QuicFrame frame; |
6939 frame.type = ACK_FRAME; | 6165 frame.type = ACK_FRAME; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6999 'r', 'l', 'd', '!', | 6225 'r', 'l', 'd', '!', |
7000 }; | 6226 }; |
7001 // clang-format on | 6227 // clang-format on |
7002 | 6228 |
7003 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 6229 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
7004 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 6230 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
7005 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 6231 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
7006 ASSERT_TRUE(visitor_.header_.get()); | 6232 ASSERT_TRUE(visitor_.header_.get()); |
7007 EXPECT_TRUE(visitor_.header_->entropy_flag); | 6233 EXPECT_TRUE(visitor_.header_->entropy_flag); |
7008 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 6234 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
7009 EXPECT_FALSE(visitor_.header_->fec_flag); | |
7010 }; | 6235 }; |
7011 | 6236 |
7012 TEST_P(QuicFramerTest, StopPacketProcessing) { | 6237 TEST_P(QuicFramerTest, StopPacketProcessing) { |
7013 // clang-format off | 6238 // clang-format off |
7014 unsigned char packet[] = { | 6239 unsigned char packet[] = { |
7015 // public flags (8 byte connection_id) | 6240 // public flags (8 byte connection_id) |
7016 static_cast<unsigned char>( | 6241 static_cast<unsigned char>( |
7017 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 6242 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
7018 // connection_id | 6243 // connection_id |
7019 0x10, 0x32, 0x54, 0x76, | 6244 0x10, 0x32, 0x54, 0x76, |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7263 'o', ' ', 'w', 'o', | 6488 'o', ' ', 'w', 'o', |
7264 'r', 'l', 'd', '!', | 6489 'r', 'l', 'd', '!', |
7265 }; | 6490 }; |
7266 // clang-format on | 6491 // clang-format on |
7267 | 6492 |
7268 QuicFramerFuzzFunc(packet, arraysize(packet)); | 6493 QuicFramerFuzzFunc(packet, arraysize(packet)); |
7269 } | 6494 } |
7270 | 6495 |
7271 } // namespace test | 6496 } // namespace test |
7272 } // namespace net | 6497 } // namespace net |
OLD | NEW |