| 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 1686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1697 0x98, 0xBA, 0xDC, 0xFE, | 1697 0x98, 0xBA, 0xDC, 0xFE, |
| 1698 // packet number | 1698 // packet number |
| 1699 0x01, 0x00, 0x00, 0x00, | 1699 0x01, 0x00, 0x00, 0x00, |
| 1700 0x00, 0x00, | 1700 0x00, 0x00, |
| 1701 // private flags (fec group) | 1701 // private flags (fec group) |
| 1702 0x02, | 1702 0x02, |
| 1703 // first fec protected packet offset | 1703 // first fec protected packet offset |
| 1704 0x10 | 1704 0x10 |
| 1705 }; | 1705 }; |
| 1706 // clang-format on | 1706 // clang-format on |
| 1707 if (framer_.version() > QUIC_VERSION_31) { | 1707 CheckProcessingFails(packet, arraysize(packet), |
| 1708 CheckProcessingFails(packet, arraysize(packet), | 1708 "Illegal private flags value.", |
| 1709 "Illegal private flags value.", | 1709 QUIC_INVALID_PACKET_HEADER); |
| 1710 QUIC_INVALID_PACKET_HEADER); | 1710 |
| 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 }; | 1711 }; |
| 1718 | 1712 |
| 1719 TEST_P(QuicFramerTest, PaddingFrame) { | 1713 TEST_P(QuicFramerTest, PaddingFrame) { |
| 1720 // clang-format off | 1714 // clang-format off |
| 1721 unsigned char packet[] = { | 1715 unsigned char packet[] = { |
| 1722 // public flags (8 byte connection_id) | 1716 // public flags (8 byte connection_id) |
| 1723 0x38, | 1717 0x38, |
| 1724 // connection_id | 1718 // connection_id |
| 1725 0x10, 0x32, 0x54, 0x76, | 1719 0x10, 0x32, 0x54, 0x76, |
| 1726 0x98, 0xBA, 0xDC, 0xFE, | 1720 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2369 // clang-format on | 2363 // clang-format on |
| 2370 | 2364 |
| 2371 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2365 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2372 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2366 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2373 | 2367 |
| 2374 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2368 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2375 ASSERT_TRUE(visitor_.public_header_.get()); | 2369 ASSERT_TRUE(visitor_.public_header_.get()); |
| 2376 ASSERT_FALSE(visitor_.header_.get()); | 2370 ASSERT_FALSE(visitor_.header_.get()); |
| 2377 } | 2371 } |
| 2378 | 2372 |
| 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) { | 2373 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) { |
| 2507 // clang-format off | 2374 // clang-format off |
| 2508 unsigned char packet[] = { | 2375 unsigned char packet[] = { |
| 2509 // public flags (8 byte connection_id) | 2376 // public flags (8 byte connection_id) |
| 2510 0x3C, | 2377 0x3C, |
| 2511 // connection_id | 2378 // connection_id |
| 2512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2379 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 2513 // packet number | 2380 // packet number |
| 2514 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2381 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 2515 // private flags (entropy) | 2382 // private flags (entropy) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2536 0x10, 0x32, | 2403 0x10, 0x32, |
| 2537 // num missing packets | 2404 // num missing packets |
| 2538 0x01, | 2405 0x01, |
| 2539 // missing packet delta | 2406 // missing packet delta |
| 2540 0x01, | 2407 0x01, |
| 2541 // 0 more missing packets in range. | 2408 // 0 more missing packets in range. |
| 2542 0x00, | 2409 0x00, |
| 2543 }; | 2410 }; |
| 2544 // clang-format on | 2411 // clang-format on |
| 2545 | 2412 |
| 2546 if (framer_.version() <= QUIC_VERSION_31 || | 2413 if (framer_.version() > QUIC_VERSION_33) { |
| 2547 framer_.version() > QUIC_VERSION_33) { | |
| 2548 return; | 2414 return; |
| 2549 } | 2415 } |
| 2550 | 2416 |
| 2551 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2417 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2552 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2418 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2553 | 2419 |
| 2554 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2420 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2555 ASSERT_TRUE(visitor_.header_.get()); | 2421 ASSERT_TRUE(visitor_.header_.get()); |
| 2556 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2422 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
| 2557 !kIncludeDiversificationNonce)); | 2423 !kIncludeDiversificationNonce)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2613 CheckProcessingFails( | 2479 CheckProcessingFails( |
| 2614 packet, | 2480 packet, |
| 2615 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2481 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
| 2616 !kIncludeVersion, !kIncludePathId, | 2482 !kIncludeVersion, !kIncludePathId, |
| 2617 !kIncludeDiversificationNonce, | 2483 !kIncludeDiversificationNonce, |
| 2618 PACKET_6BYTE_PACKET_NUMBER), | 2484 PACKET_6BYTE_PACKET_NUMBER), |
| 2619 expected_error, QUIC_INVALID_ACK_DATA); | 2485 expected_error, QUIC_INVALID_ACK_DATA); |
| 2620 } | 2486 } |
| 2621 } | 2487 } |
| 2622 | 2488 |
| 2623 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { | 2489 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { |
| 2624 // clang-format off | 2490 // clang-format off |
| 2625 unsigned char packet[] = { | 2491 unsigned char packet[] = { |
| 2626 // public flags (8 byte connection_id) | 2492 // public flags (8 byte connection_id) |
| 2627 0x38, | 2493 0x3C, |
| 2628 // connection_id | 2494 // connection_id |
| 2629 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2495 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 2630 // packet number | 2496 // packet number |
| 2631 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2497 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 2632 // private flags (entropy) | 2498 // private flags (entropy) |
| 2633 0x01, | 2499 0x01, |
| 2634 | 2500 |
| 2635 // frame type (ack frame) | 2501 // frame type (ack frame) |
| 2636 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2502 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 2637 0x6C, | 2503 0x6C, |
| 2638 // entropy hash of all received packets. | 2504 // entropy hash of all received packets. |
| 2639 0xBA, | 2505 0xBA, |
| 2640 // largest observed packet number | 2506 // largest observed packet number |
| 2641 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2507 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 2642 // Zero delta time. | 2508 // Zero delta time. |
| 2643 0x00, 0x00, | 2509 0x00, 0x00, |
| 2644 // Number of timestamps. | 2510 // Number of timestamps. |
| 2645 0x01, | 2511 0x01, |
| 2646 // Delta from largest observed. | 2512 // Delta from largest observed. |
| 2647 0x01, | 2513 0x01, |
| 2648 // Delta time. | 2514 // Delta time. |
| 2649 0x10, 0x32, 0x54, 0x76, | 2515 0x10, 0x32, 0x54, 0x76, |
| 2650 // num missing packets | 2516 // num missing packets |
| 2651 0x01, | 2517 0x01, |
| 2652 // missing packet delta | 2518 // missing packet delta |
| 2653 0x01, | 2519 0x01, |
| 2654 // 0 more missing packets in range. | 2520 // 0 more missing packets in range. |
| 2655 0x00, | 2521 0x00, |
| 2656 // Number of revived packets. | |
| 2657 0x00, | |
| 2658 }; | 2522 }; |
| 2659 // clang-format on | 2523 // clang-format on |
| 2660 | 2524 |
| 2661 if (framer_.version() > QUIC_VERSION_31) { | 2525 if (framer_.version() > QUIC_VERSION_33) { |
| 2662 return; | 2526 return; |
| 2663 } | 2527 } |
| 2664 | 2528 |
| 2665 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2529 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2666 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2530 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2667 | 2531 |
| 2668 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2532 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2669 ASSERT_TRUE(visitor_.header_.get()); | 2533 ASSERT_TRUE(visitor_.header_.get()); |
| 2670 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2534 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
| 2671 !kIncludeDiversificationNonce)); | 2535 !kIncludeDiversificationNonce)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2686 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2550 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 2687 const size_t kNumTimestampsOffset = | 2551 const size_t kNumTimestampsOffset = |
| 2688 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 2552 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 2689 const size_t kTimestampDeltaLargestObserved = | 2553 const size_t kTimestampDeltaLargestObserved = |
| 2690 kNumTimestampsOffset + kQuicNumTimestampsSize; | 2554 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 2691 const size_t kTimestampTimeDeltaLargestObserved = | 2555 const size_t kTimestampTimeDeltaLargestObserved = |
| 2692 kTimestampDeltaLargestObserved + 1; | 2556 kTimestampDeltaLargestObserved + 1; |
| 2693 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; | 2557 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; |
| 2694 const size_t kMissingPacketsOffset = | 2558 const size_t kMissingPacketsOffset = |
| 2695 kNumMissingPacketOffset + kNumberOfNackRangesSize; | 2559 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. | 2560 // Now test framing boundaries. |
| 2701 const size_t ack_frame_size = | 2561 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) { | 2562 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
| 2704 string expected_error; | 2563 string expected_error; |
| 2705 if (i < kLargestObservedOffset) { | 2564 if (i < kLargestObservedOffset) { |
| 2706 expected_error = "Unable to read entropy hash for received packets."; | 2565 expected_error = "Unable to read entropy hash for received packets."; |
| 2707 } else if (i < kMissingDeltaTimeOffset) { | 2566 } else if (i < kMissingDeltaTimeOffset) { |
| 2708 expected_error = "Unable to read largest observed."; | 2567 expected_error = "Unable to read largest observed."; |
| 2709 } else if (i < kNumTimestampsOffset) { | 2568 } else if (i < kNumTimestampsOffset) { |
| 2710 expected_error = "Unable to read ack delay time."; | 2569 expected_error = "Unable to read ack delay time."; |
| 2711 } else if (i < kTimestampDeltaLargestObserved) { | 2570 } else if (i < kTimestampDeltaLargestObserved) { |
| 2712 expected_error = "Unable to read num received packets."; | 2571 expected_error = "Unable to read num received packets."; |
| 2713 } else if (i < kTimestampTimeDeltaLargestObserved) { | 2572 } else if (i < kTimestampTimeDeltaLargestObserved) { |
| 2714 expected_error = "Unable to read sequence delta in received packets."; | 2573 expected_error = "Unable to read sequence delta in received packets."; |
| 2715 } else if (i < kNumMissingPacketOffset) { | 2574 } else if (i < kNumMissingPacketOffset) { |
| 2716 expected_error = "Unable to read time delta in received packets."; | 2575 expected_error = "Unable to read time delta in received packets."; |
| 2717 } else if (i < kMissingPacketsOffset) { | 2576 } else if (i < kMissingPacketsOffset) { |
| 2718 expected_error = "Unable to read num missing packet ranges."; | 2577 expected_error = "Unable to read num missing packet ranges."; |
| 2719 } else if (i < kMissingPacketsRange) { | 2578 } else { |
| 2720 expected_error = "Unable to read missing packet number delta."; | 2579 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 } | 2580 } |
| 2726 CheckProcessingFails( | 2581 CheckProcessingFails( |
| 2727 packet, | 2582 packet, |
| 2728 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2583 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
| 2729 !kIncludeVersion, !kIncludePathId, | 2584 !kIncludeVersion, !kIncludePathId, |
| 2730 !kIncludeDiversificationNonce, | 2585 !kIncludeDiversificationNonce, |
| 2731 PACKET_6BYTE_PACKET_NUMBER), | 2586 PACKET_6BYTE_PACKET_NUMBER), |
| 2732 expected_error, QUIC_INVALID_ACK_DATA); | 2587 expected_error, QUIC_INVALID_ACK_DATA); |
| 2733 } | 2588 } |
| 2734 } | 2589 } |
| 2735 | 2590 |
| 2736 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { | 2591 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) { |
| 2737 // clang-format off | 2592 // clang-format off |
| 2738 unsigned char packet[] = { | 2593 unsigned char packet[] = { |
| 2739 // public flags (8 byte connection_id) | 2594 // public flags (8 byte connection_id) |
| 2740 0x3C, | 2595 0x3C, |
| 2741 // connection_id | 2596 // connection_id |
| 2742 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2597 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 2743 // packet number | 2598 // packet number |
| 2744 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2599 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 2745 // private flags (entropy) | |
| 2746 0x01, | |
| 2747 | 2600 |
| 2748 // frame type (ack frame) | 2601 // frame type (ack frame) |
| 2749 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2602 // (one ack block, 2 byte largest observed, 2 byte block length) |
| 2750 0x6C, | 2603 0x45, |
| 2751 // entropy hash of all received packets. | 2604 // largest acked |
| 2752 0xBA, | 2605 0x34, 0x12, |
| 2753 // largest observed packet number | |
| 2754 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
| 2755 // Zero delta time. | 2606 // Zero delta time. |
| 2756 0x00, 0x00, | 2607 0x00, 0x00, |
| 2757 // Number of timestamps. | 2608 // first ack block length. |
| 2758 0x01, | 2609 0x34, 0x12, |
| 2759 // Delta from largest observed. | 2610 // 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, | 2611 0x00, |
| 2769 }; | 2612 }; |
| 2770 // clang-format on | 2613 // clang-format on |
| 2771 | 2614 |
| 2772 if (framer_.version() <= QUIC_VERSION_31 || | 2615 if (framer_.version() <= QUIC_VERSION_33) { |
| 2773 framer_.version() > QUIC_VERSION_33) { | |
| 2774 return; | 2616 return; |
| 2775 } | 2617 } |
| 2776 | 2618 |
| 2777 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2619 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2778 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2620 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2779 | 2621 |
| 2780 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2622 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2781 ASSERT_TRUE(visitor_.header_.get()); | 2623 ASSERT_TRUE(visitor_.header_.get()); |
| 2782 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2624 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
| 2783 !kIncludeDiversificationNonce)); | 2625 !kIncludeDiversificationNonce)); |
| 2784 | 2626 |
| 2785 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2627 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2786 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2628 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2787 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2629 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 2788 EXPECT_EQ(0xBA, frame.entropy_hash); | 2630 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed); |
| 2789 EXPECT_EQ(kLargestObserved, frame.largest_observed); | 2631 EXPECT_FALSE(frame.missing); |
| 2790 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | 2632 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow()); |
| 2791 ASSERT_EQ(1u, frame.received_packet_times.size()); | |
| 2792 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
| 2793 | 2633 |
| 2794 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2634 const size_t kLargestAckedOffset = kQuicFrameTypeSize; |
| 2795 const size_t kLargestObservedOffset = | 2635 const size_t kLargestAckedDeltaTimeOffset = |
| 2796 kReceivedEntropyOffset + kQuicEntropyHashSize; | 2636 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER; |
| 2797 const size_t kMissingDeltaTimeOffset = | 2637 const size_t kFirstAckBlockLengthOffset = |
| 2798 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2638 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 2799 const size_t kNumTimestampsOffset = | 2639 const size_t kNumTimestampsOffset = |
| 2800 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 2640 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. | 2641 // Now test framing boundaries. |
| 2809 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; | 2642 const size_t ack_frame_size = |
| 2643 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER; |
| 2810 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | 2644 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
| 2811 string expected_error; | 2645 string expected_error; |
| 2812 if (i < kLargestObservedOffset) { | 2646 if (i < kLargestAckedDeltaTimeOffset) { |
| 2813 expected_error = "Unable to read entropy hash for received packets."; | 2647 expected_error = "Unable to read largest acked."; |
| 2814 } else if (i < kMissingDeltaTimeOffset) { | 2648 } else if (i < kFirstAckBlockLengthOffset) { |
| 2815 expected_error = "Unable to read largest observed."; | 2649 expected_error = "Unable to read ack delay time."; |
| 2816 } else if (i < kNumTimestampsOffset) { | 2650 } else if (i < kNumTimestampsOffset) { |
| 2817 expected_error = "Unable to read ack delay time."; | 2651 expected_error = "Unable to read first ack block length."; |
| 2818 } else if (i < kTimestampDeltaLargestObserved) { | 2652 } else { |
| 2819 expected_error = "Unable to read num received packets."; | 2653 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 } | 2654 } |
| 2829 CheckProcessingFails( | 2655 CheckProcessingFails( |
| 2830 packet, | 2656 packet, |
| 2831 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 2657 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
| 2832 !kIncludeVersion, !kIncludePathId, | 2658 !kIncludeVersion, !kIncludePathId, |
| 2833 !kIncludeDiversificationNonce, | 2659 !kIncludeDiversificationNonce, |
| 2834 PACKET_6BYTE_PACKET_NUMBER), | 2660 PACKET_6BYTE_PACKET_NUMBER), |
| 2835 expected_error, QUIC_INVALID_ACK_DATA); | 2661 expected_error, QUIC_INVALID_ACK_DATA); |
| 2836 } | 2662 } |
| 2837 } | 2663 } |
| 2838 | 2664 |
| 2839 TEST_P(QuicFramerTest, AckFrame) { | 2665 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) { |
| 2840 // clang-format off | 2666 // clang-format off |
| 2841 unsigned char packet[] = { | 2667 unsigned char packet[] = { |
| 2842 // public flags (8 byte connection_id) | 2668 // public flags (8 byte connection_id) |
| 2843 0x3C, | 2669 0x3C, |
| 2844 // connection_id | 2670 // connection_id |
| 2845 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2671 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 2846 // packet number | 2672 // 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, | 2673 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3023 | 2674 |
| 3024 // frame type (ack frame) | 2675 // frame type (ack frame) |
| 3025 // (more than one ack block, 2 byte largest observed, 2 byte block length) | 2676 // (more than one ack block, 2 byte largest observed, 2 byte block length) |
| 3026 0x65, | 2677 0x65, |
| 3027 // largest acked | 2678 // largest acked |
| 3028 0x34, 0x12, | 2679 0x34, 0x12, |
| 3029 // Zero delta time. | 2680 // Zero delta time. |
| 3030 0x00, 0x00, | 2681 0x00, 0x00, |
| 3031 // num ack blocks ranges. | 2682 // num ack blocks ranges. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3163 } | 2814 } |
| 3164 | 2815 |
| 3165 TEST_P(QuicFramerTest, AckFrameVersion32) { | 2816 TEST_P(QuicFramerTest, AckFrameVersion32) { |
| 3166 // clang-format off | 2817 // clang-format off |
| 3167 unsigned char packet[] = { | 2818 unsigned char packet[] = { |
| 3168 // public flags (8 byte connection_id) | 2819 // public flags (8 byte connection_id) |
| 3169 0x38, | 2820 0x38, |
| 3170 // connection_id | 2821 // connection_id |
| 3171 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2822 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3172 // packet number | 2823 // packet number |
| 3173 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
| 3174 // private flags (entropy) | |
| 3175 0x01, | |
| 3176 | |
| 3177 // frame type (ack frame) | |
| 3178 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | |
| 3179 0x6C, | |
| 3180 // entropy hash of all received packets. | |
| 3181 0xBA, | |
| 3182 // largest observed packet number | |
| 3183 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
| 3184 // Zero delta time. | |
| 3185 0x00, 0x00, | |
| 3186 // Number of timestamps. | |
| 3187 0x00, | |
| 3188 // num missing packets | |
| 3189 0x01, | |
| 3190 // missing packet delta | |
| 3191 0x01, | |
| 3192 // 0 more missing packets in range. | |
| 3193 0x00, | |
| 3194 }; | |
| 3195 // clang-format on | |
| 3196 | |
| 3197 if (framer_.version() <= QUIC_VERSION_31 || | |
| 3198 framer_.version() > QUIC_VERSION_33) { | |
| 3199 return; | |
| 3200 } | |
| 3201 | |
| 3202 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 3203 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 3204 | |
| 3205 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 3206 ASSERT_TRUE(visitor_.header_.get()); | |
| 3207 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | |
| 3208 !kIncludeDiversificationNonce)); | |
| 3209 | |
| 3210 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 3211 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | |
| 3212 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | |
| 3213 EXPECT_EQ(0xBA, frame.entropy_hash); | |
| 3214 EXPECT_EQ(kLargestObserved, frame.largest_observed); | |
| 3215 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); | |
| 3216 EXPECT_EQ(kMissingPacket, frame.packets.Min()); | |
| 3217 | |
| 3218 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | |
| 3219 const size_t kLargestObservedOffset = | |
| 3220 kReceivedEntropyOffset + kQuicEntropyHashSize; | |
| 3221 const size_t kMissingDeltaTimeOffset = | |
| 3222 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | |
| 3223 const size_t kNumTimestampsOffset = | |
| 3224 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | |
| 3225 const size_t kNumMissingPacketOffset = | |
| 3226 kNumTimestampsOffset + kQuicNumTimestampsSize; | |
| 3227 const size_t kMissingPacketsOffset = | |
| 3228 kNumMissingPacketOffset + kNumberOfNackRangesSize; | |
| 3229 // Now test framing boundaries. | |
| 3230 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; | |
| 3231 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | |
| 3232 string expected_error; | |
| 3233 if (i < kLargestObservedOffset) { | |
| 3234 expected_error = "Unable to read entropy hash for received packets."; | |
| 3235 } else if (i < kMissingDeltaTimeOffset) { | |
| 3236 expected_error = "Unable to read largest observed."; | |
| 3237 } else if (i < kNumTimestampsOffset) { | |
| 3238 expected_error = "Unable to read ack delay time."; | |
| 3239 } else if (i < kNumMissingPacketOffset) { | |
| 3240 expected_error = "Unable to read num received packets."; | |
| 3241 } else if (i < kMissingPacketsOffset) { | |
| 3242 expected_error = "Unable to read num missing packet ranges."; | |
| 3243 } else { | |
| 3244 expected_error = "Unable to read missing packet number delta."; | |
| 3245 } | |
| 3246 CheckProcessingFails( | |
| 3247 packet, | |
| 3248 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | |
| 3249 !kIncludeVersion, !kIncludePathId, | |
| 3250 !kIncludeDiversificationNonce, | |
| 3251 PACKET_6BYTE_PACKET_NUMBER), | |
| 3252 expected_error, QUIC_INVALID_ACK_DATA); | |
| 3253 } | |
| 3254 } | |
| 3255 | |
| 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, | 2824 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3433 // private flags (entropy) | 2825 // private flags (entropy) |
| 3434 0x01, | 2826 0x01, |
| 3435 | 2827 |
| 3436 // frame type (ack frame) | 2828 // frame type (ack frame) |
| 3437 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 2829 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 3438 0x6C, | 2830 0x6C, |
| 3439 // entropy hash of all received packets. | 2831 // entropy hash of all received packets. |
| 3440 0xBA, | 2832 0xBA, |
| 3441 // largest observed packet number | 2833 // largest observed packet number |
| 3442 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2834 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3443 // Zero delta time. | 2835 // Zero delta time. |
| 3444 0x00, 0x00, | 2836 0x00, 0x00, |
| 3445 // No received packets. | 2837 // Number of timestamps. |
| 3446 0x00, | 2838 0x00, |
| 3447 // num missing packet ranges | 2839 // num missing packets |
| 3448 0x02, | 2840 0x01, |
| 3449 // missing packet delta | 2841 // missing packet delta |
| 3450 0x01, | 2842 0x01, |
| 3451 // 243 more missing packets in range. | 2843 // 0 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, | 2844 0x00, |
| 3461 }; | 2845 }; |
| 3462 // clang-format on | 2846 // clang-format on |
| 3463 | 2847 |
| 3464 if (framer_.version() > QUIC_VERSION_31) { | 2848 if (framer_.version() > QUIC_VERSION_33) { |
| 3465 return; | 2849 return; |
| 3466 } | 2850 } |
| 3467 | 2851 |
| 3468 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2852 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3469 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2853 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3470 | 2854 |
| 3471 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2855 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3472 ASSERT_TRUE(visitor_.header_.get()); | 2856 ASSERT_TRUE(visitor_.header_.get()); |
| 3473 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2857 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
| 3474 !kIncludeDiversificationNonce)); | 2858 !kIncludeDiversificationNonce)); |
| 3475 | 2859 |
| 3476 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2860 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 3477 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2861 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 3478 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2862 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 3479 EXPECT_EQ(0xBA, frame->entropy_hash); | 2863 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 3480 EXPECT_EQ(kLargestObserved, frame->largest_observed); | 2864 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 3481 ASSERT_EQ(500u, frame->packets.NumPacketsSlow()); | 2865 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); |
| 3482 EXPECT_EQ(kMissingPacket - 499, frame->packets.Min()); | 2866 EXPECT_EQ(kMissingPacket, frame.packets.Min()); |
| 3483 EXPECT_EQ(kMissingPacket, frame->packets.Max()); | |
| 3484 | 2867 |
| 3485 // Verify that the packet re-serializes identically. | 2868 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 3486 QuicFrames frames; | 2869 const size_t kLargestObservedOffset = |
| 3487 frames.push_back(QuicFrame(frame)); | 2870 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 3488 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2871 const size_t kMissingDeltaTimeOffset = |
| 3489 ASSERT_TRUE(data != nullptr); | 2872 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 3490 | 2873 const size_t kNumTimestampsOffset = |
| 3491 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2874 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 3492 data->length(), AsChars(packet), | 2875 const size_t kNumMissingPacketOffset = |
| 3493 arraysize(packet)); | 2876 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 2877 const size_t kMissingPacketsOffset = |
| 2878 kNumMissingPacketOffset + kNumberOfNackRangesSize; |
| 2879 // Now test framing boundaries. |
| 2880 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; |
| 2881 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
| 2882 string expected_error; |
| 2883 if (i < kLargestObservedOffset) { |
| 2884 expected_error = "Unable to read entropy hash for received packets."; |
| 2885 } else if (i < kMissingDeltaTimeOffset) { |
| 2886 expected_error = "Unable to read largest observed."; |
| 2887 } else if (i < kNumTimestampsOffset) { |
| 2888 expected_error = "Unable to read ack delay time."; |
| 2889 } else if (i < kNumMissingPacketOffset) { |
| 2890 expected_error = "Unable to read num received packets."; |
| 2891 } else if (i < kMissingPacketsOffset) { |
| 2892 expected_error = "Unable to read num missing packet ranges."; |
| 2893 } else { |
| 2894 expected_error = "Unable to read missing packet number delta."; |
| 2895 } |
| 2896 CheckProcessingFails( |
| 2897 packet, |
| 2898 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
| 2899 !kIncludeVersion, !kIncludePathId, |
| 2900 !kIncludeDiversificationNonce, |
| 2901 PACKET_6BYTE_PACKET_NUMBER), |
| 2902 expected_error, QUIC_INVALID_ACK_DATA); |
| 2903 } |
| 3494 } | 2904 } |
| 3495 | 2905 |
| 3496 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { | 2906 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { |
| 3497 // clang-format off | 2907 // clang-format off |
| 3498 unsigned char packet[] = { | 2908 unsigned char packet[] = { |
| 3499 // public flags (8 byte connection_id) | 2909 // public flags (8 byte connection_id) |
| 3500 static_cast<unsigned char>( | 2910 static_cast<unsigned char>( |
| 3501 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 2911 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
| 3502 // connection_id | 2912 // connection_id |
| 3503 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2913 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3525 // The ranges are listed in this order so the re-constructed packet | 2935 // The ranges are listed in this order so the re-constructed packet |
| 3526 // matches. | 2936 // matches. |
| 3527 0xF3, | 2937 0xF3, |
| 3528 // No gap between ranges | 2938 // No gap between ranges |
| 3529 0x00, | 2939 0x00, |
| 3530 // 255 more missing packets in range. | 2940 // 255 more missing packets in range. |
| 3531 0xFF, | 2941 0xFF, |
| 3532 }; | 2942 }; |
| 3533 // clang-format on | 2943 // clang-format on |
| 3534 | 2944 |
| 3535 if (framer_.version() <= QUIC_VERSION_31 || | 2945 if (framer_.version() > QUIC_VERSION_33) { |
| 3536 framer_.version() > QUIC_VERSION_33) { | |
| 3537 return; | 2946 return; |
| 3538 } | 2947 } |
| 3539 | 2948 |
| 3540 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2949 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3541 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2950 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3542 | 2951 |
| 3543 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2952 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3544 ASSERT_TRUE(visitor_.header_.get()); | 2953 ASSERT_TRUE(visitor_.header_.get()); |
| 3545 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, | 2954 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, |
| 3546 !kIncludeDiversificationNonce)); | 2955 !kIncludeDiversificationNonce)); |
| (...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4532 // redundancy | 3941 // redundancy |
| 4533 'a', 'b', 'c', 'd', | 3942 'a', 'b', 'c', 'd', |
| 4534 'e', 'f', 'g', 'h', | 3943 'e', 'f', 'g', 'h', |
| 4535 'i', 'j', 'k', 'l', | 3944 'i', 'j', 'k', 'l', |
| 4536 'm', 'n', 'o', 'p', | 3945 'm', 'n', 'o', 'p', |
| 4537 }; | 3946 }; |
| 4538 if (framer_.version() > QUIC_VERSION_33) { | 3947 if (framer_.version() > QUIC_VERSION_33) { |
| 4539 return; | 3948 return; |
| 4540 } | 3949 } |
| 4541 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3950 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 4542 if (framer_.version() <= QUIC_VERSION_31) { | 3951 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 4543 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3952 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
| 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()); | 3953 EXPECT_FALSE(visitor_.header_.get()); |
| 4550 } | 3954 } |
| 4551 | 3955 |
| 4552 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 3956 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
| 4553 QuicPacketHeader header; | 3957 QuicPacketHeader header; |
| 4554 header.public_header.connection_id = kConnectionId; | 3958 header.public_header.connection_id = kConnectionId; |
| 4555 header.public_header.reset_flag = false; | 3959 header.public_header.reset_flag = false; |
| 4556 header.public_header.version_flag = false; | 3960 header.public_header.version_flag = false; |
| 4557 header.fec_flag = false; | 3961 header.fec_flag = false; |
| 4558 header.entropy_flag = false; | 3962 header.entropy_flag = false; |
| (...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5161 ack_frame.largest_observed = kLargestObserved; | 4565 ack_frame.largest_observed = kLargestObserved; |
| 5162 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 4566 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 5163 ack_frame.packets.Add(kMissingPacket); | 4567 ack_frame.packets.Add(kMissingPacket); |
| 5164 | 4568 |
| 5165 QuicFrames frames; | 4569 QuicFrames frames; |
| 5166 frames.push_back(QuicFrame(&ack_frame)); | 4570 frames.push_back(QuicFrame(&ack_frame)); |
| 5167 | 4571 |
| 5168 // clang-format off | 4572 // clang-format off |
| 5169 unsigned char packet[] = { | 4573 unsigned char packet[] = { |
| 5170 // public flags (8 byte connection_id) | 4574 // 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>( | 4575 static_cast<unsigned char>( |
| 5205 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4576 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
| 5206 // connection_id | 4577 // connection_id |
| 5207 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4578 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 5208 // packet number | 4579 // packet number |
| 5209 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4580 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 5210 // private flags (entropy) | 4581 // private flags (entropy) |
| 5211 0x01, | 4582 0x01, |
| 5212 | 4583 |
| 5213 // frame type (ack frame) | 4584 // frame type (ack frame) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5226 // missing packet delta | 4597 // missing packet delta |
| 5227 0x01, | 4598 0x01, |
| 5228 // 0 more missing packets in range. | 4599 // 0 more missing packets in range. |
| 5229 0x00, | 4600 0x00, |
| 5230 }; | 4601 }; |
| 5231 // clang-format on | 4602 // clang-format on |
| 5232 | 4603 |
| 5233 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4604 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 5234 ASSERT_TRUE(data != nullptr); | 4605 ASSERT_TRUE(data != nullptr); |
| 5235 | 4606 |
| 5236 if (framer_.version() <= QUIC_VERSION_31) { | 4607 test::CompareCharArraysWithHexError( |
| 5237 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4608 "constructed packet", data->data(), data->length(), |
| 5238 data->length(), AsChars(packet), | 4609 AsChars(packet), 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 } | 4610 } |
| 5246 | 4611 |
| 5247 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 4612 // 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). | 4613 // revived packets. (In both the large and small packet cases below). |
| 5249 | 4614 |
| 5250 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 4615 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
| 5251 if (framer_.version() > QUIC_VERSION_33) { | 4616 if (framer_.version() > QUIC_VERSION_33) { |
| 5252 return; | 4617 return; |
| 5253 } | 4618 } |
| 5254 | 4619 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 5270 for (size_t i = 1; i < 2 * 300; i += 2) { | 4635 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 5271 ack_frame.packets.Add(i); | 4636 ack_frame.packets.Add(i); |
| 5272 } | 4637 } |
| 5273 | 4638 |
| 5274 QuicFrames frames; | 4639 QuicFrames frames; |
| 5275 frames.push_back(QuicFrame(&ack_frame)); | 4640 frames.push_back(QuicFrame(&ack_frame)); |
| 5276 | 4641 |
| 5277 // clang-format off | 4642 // clang-format off |
| 5278 unsigned char packet[] = { | 4643 unsigned char packet[] = { |
| 5279 // public flags (8 byte connection_id) | 4644 // 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>( | 4645 static_cast<unsigned char>( |
| 5360 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4646 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
| 5361 // connection_id | 4647 // connection_id |
| 5362 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4648 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 5363 // packet number | 4649 // packet number |
| 5364 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4650 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 5365 // private flags (entropy) | 4651 // private flags (entropy) |
| 5366 0x01, | 4652 0x01, |
| 5367 | 4653 |
| 5368 // frame type (ack frame) | 4654 // frame type (ack frame) |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5426 | 4712 |
| 5427 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4713 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, | 4714 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
| 5429 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4715 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
| 5430 }; | 4716 }; |
| 5431 // clang-format on | 4717 // clang-format on |
| 5432 | 4718 |
| 5433 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 4719 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 5434 ASSERT_TRUE(data != nullptr); | 4720 ASSERT_TRUE(data != nullptr); |
| 5435 | 4721 |
| 5436 if (framer_.version() <= QUIC_VERSION_31) { | 4722 test::CompareCharArraysWithHexError( |
| 5437 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4723 "constructed packet", data->data(), data->length(), |
| 5438 data->length(), AsChars(packet), | 4724 AsChars(packet), 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 } | 4725 } |
| 5446 | 4726 |
| 5447 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 4727 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
| 5448 if (framer_.version() > QUIC_VERSION_33) { | 4728 if (framer_.version() > QUIC_VERSION_33) { |
| 5449 return; | 4729 return; |
| 5450 } | 4730 } |
| 5451 | 4731 |
| 5452 QuicPacketHeader header; | 4732 QuicPacketHeader header; |
| 5453 header.public_header.connection_id = kConnectionId; | 4733 header.public_header.connection_id = kConnectionId; |
| 5454 header.public_header.reset_flag = false; | 4734 header.public_header.reset_flag = false; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5467 for (size_t i = 1; i < 2 * 300; i += 2) { | 4747 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 5468 ack_frame.packets.Add(i); | 4748 ack_frame.packets.Add(i); |
| 5469 } | 4749 } |
| 5470 | 4750 |
| 5471 QuicFrames frames; | 4751 QuicFrames frames; |
| 5472 frames.push_back(QuicFrame(&ack_frame)); | 4752 frames.push_back(QuicFrame(&ack_frame)); |
| 5473 | 4753 |
| 5474 // clang-format off | 4754 // clang-format off |
| 5475 unsigned char packet[] = { | 4755 unsigned char packet[] = { |
| 5476 // public flags (8 byte connection_id) | 4756 // 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>( | 4757 static_cast<unsigned char>( |
| 5510 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 4758 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
| 5511 // connection_id | 4759 // connection_id |
| 5512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 4760 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 5513 // packet number | 4761 // packet number |
| 5514 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 4762 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 5515 // private flags (entropy) | 4763 // private flags (entropy) |
| 5516 0x01, | 4764 0x01, |
| 5517 | 4765 |
| 5518 // frame type (ack frame) | 4766 // frame type (ack frame) |
| 5519 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 4767 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) |
| 5520 0x74, | 4768 0x74, |
| 5521 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 4769 // entropy hash of all received packets, set to 1 by TestEntropyCalculator |
| 5522 // since ack is truncated. | 4770 // since ack is truncated. |
| 5523 0x01, | 4771 0x01, |
| 5524 // 2-byte largest observed packet number. | 4772 // 2-byte largest observed packet number. |
| 5525 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. | 4773 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. |
| 5526 0x0C, 0x00, | 4774 0x0C, 0x00, |
| 5527 // Zero delta time. | 4775 // Zero delta time. |
| 5528 0x00, 0x00, | 4776 0x00, 0x00, |
| 5529 // num missing packet ranges (limited to 6 by packet size of 37). | 4777 // num missing packet ranges (limited to 6 by packet size of 37). |
| 5530 0x06, | 4778 0x06, |
| 5531 // {missing packet delta, further missing packets in range} | 4779 // {missing packet delta, further missing packets in range} |
| 5532 // 6 nack ranges | 4780 // 6 nack ranges |
| 5533 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 4781 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
| 5534 }; | 4782 }; |
| 5535 // clang-format on | 4783 // clang-format on |
| 5536 | 4784 |
| 5537 if (framer_.version() <= QUIC_VERSION_31) { | 4785 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u)); |
| 5538 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); | 4786 ASSERT_TRUE(data != nullptr); |
| 5539 ASSERT_TRUE(data != nullptr); | 4787 // 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. | 4788 EXPECT_EQ(35u, data->length()); |
| 5541 EXPECT_EQ(36u, data->length()); | 4789 test::CompareCharArraysWithHexError( |
| 5542 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4790 "constructed packet", data->data(), data->length(), |
| 5543 data->length(), AsChars(packet), | 4791 AsChars(packet), 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 } | 4792 } |
| 5555 | 4793 |
| 5556 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { | 4794 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { |
| 5557 if (framer_.version() <= QUIC_VERSION_33) { | 4795 if (framer_.version() <= QUIC_VERSION_33) { |
| 5558 return; | 4796 return; |
| 5559 } | 4797 } |
| 5560 | 4798 |
| 5561 QuicPacketHeader header; | 4799 QuicPacketHeader header; |
| 5562 header.public_header.connection_id = kConnectionId; | 4800 header.public_header.connection_id = kConnectionId; |
| 5563 header.public_header.reset_flag = false; | 4801 header.public_header.reset_flag = false; |
| (...skipping 1699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7263 'o', ' ', 'w', 'o', | 6501 'o', ' ', 'w', 'o', |
| 7264 'r', 'l', 'd', '!', | 6502 'r', 'l', 'd', '!', |
| 7265 }; | 6503 }; |
| 7266 // clang-format on | 6504 // clang-format on |
| 7267 | 6505 |
| 7268 QuicFramerFuzzFunc(packet, arraysize(packet)); | 6506 QuicFramerFuzzFunc(packet, arraysize(packet)); |
| 7269 } | 6507 } |
| 7270 | 6508 |
| 7271 } // namespace test | 6509 } // namespace test |
| 7272 } // namespace net | 6510 } // namespace net |
| OLD | NEW |