| 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 5601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5612 'R', 'S', 'E', 'Q', | 5612 'R', 'S', 'E', 'Q', |
| 5613 // end offset 16 | 5613 // end offset 16 |
| 5614 0x10, 0x00, 0x00, 0x00, | 5614 0x10, 0x00, 0x00, 0x00, |
| 5615 // nonce proof | 5615 // nonce proof |
| 5616 0x89, 0x67, 0x45, 0x23, | 5616 0x89, 0x67, 0x45, 0x23, |
| 5617 0x01, 0xEF, 0xCD, 0xAB, | 5617 0x01, 0xEF, 0xCD, 0xAB, |
| 5618 // rejected packet number | 5618 // rejected packet number |
| 5619 0xBC, 0x9A, 0x78, 0x56, | 5619 0xBC, 0x9A, 0x78, 0x56, |
| 5620 0x34, 0x12, 0x00, 0x00, | 5620 0x34, 0x12, 0x00, 0x00, |
| 5621 }; | 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 }; |
| 5622 // clang-format on | 5640 // clang-format on |
| 5623 | 5641 |
| 5624 std::unique_ptr<QuicEncryptedPacket> data( | 5642 std::unique_ptr<QuicEncryptedPacket> data( |
| 5625 framer_.BuildPublicResetPacket(reset_packet)); | 5643 framer_.BuildPublicResetPacket(reset_packet)); |
| 5626 ASSERT_TRUE(data != nullptr); | 5644 ASSERT_TRUE(data != nullptr); |
| 5627 | 5645 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
| 5628 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5646 test::CompareCharArraysWithHexError( |
| 5629 data->length(), AsChars(packet), | 5647 "constructed packet", data->data(), data->length(), |
| 5630 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 } |
| 5631 } | 5655 } |
| 5632 | 5656 |
| 5633 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 5657 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
| 5634 FLAGS_quic_use_old_public_reset_packets = false; | 5658 FLAGS_quic_use_old_public_reset_packets = false; |
| 5635 QuicPublicResetPacket reset_packet; | 5659 QuicPublicResetPacket reset_packet; |
| 5636 reset_packet.public_header.connection_id = kConnectionId; | 5660 reset_packet.public_header.connection_id = kConnectionId; |
| 5637 reset_packet.public_header.reset_flag = true; | 5661 reset_packet.public_header.reset_flag = true; |
| 5638 reset_packet.public_header.version_flag = false; | 5662 reset_packet.public_header.version_flag = false; |
| 5639 reset_packet.rejected_packet_number = kPacketNumber; | 5663 reset_packet.rejected_packet_number = kPacketNumber; |
| 5640 reset_packet.nonce_proof = kNonceProof; | 5664 reset_packet.nonce_proof = kNonceProof; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 5658 'R', 'S', 'E', 'Q', | 5682 'R', 'S', 'E', 'Q', |
| 5659 // end offset 16 | 5683 // end offset 16 |
| 5660 0x10, 0x00, 0x00, 0x00, | 5684 0x10, 0x00, 0x00, 0x00, |
| 5661 // nonce proof | 5685 // nonce proof |
| 5662 0x89, 0x67, 0x45, 0x23, | 5686 0x89, 0x67, 0x45, 0x23, |
| 5663 0x01, 0xEF, 0xCD, 0xAB, | 5687 0x01, 0xEF, 0xCD, 0xAB, |
| 5664 // rejected packet number | 5688 // rejected packet number |
| 5665 0xBC, 0x9A, 0x78, 0x56, | 5689 0xBC, 0x9A, 0x78, 0x56, |
| 5666 0x34, 0x12, 0x00, 0x00, | 5690 0x34, 0x12, 0x00, 0x00, |
| 5667 }; | 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 }; |
| 5668 // clang-format on | 5710 // clang-format on |
| 5669 | 5711 |
| 5670 std::unique_ptr<QuicEncryptedPacket> data( | 5712 std::unique_ptr<QuicEncryptedPacket> data( |
| 5671 framer_.BuildPublicResetPacket(reset_packet)); | 5713 framer_.BuildPublicResetPacket(reset_packet)); |
| 5672 ASSERT_TRUE(data != nullptr); | 5714 ASSERT_TRUE(data != nullptr); |
| 5673 | 5715 |
| 5674 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5716 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
| 5675 data->length(), AsChars(packet), | 5717 test::CompareCharArraysWithHexError( |
| 5676 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 } |
| 5677 } | 5726 } |
| 5678 | 5727 |
| 5679 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 5728 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
| 5680 FLAGS_quic_use_old_public_reset_packets = false; | 5729 FLAGS_quic_use_old_public_reset_packets = false; |
| 5681 QuicPublicResetPacket reset_packet; | 5730 QuicPublicResetPacket reset_packet; |
| 5682 reset_packet.public_header.connection_id = kConnectionId; | 5731 reset_packet.public_header.connection_id = kConnectionId; |
| 5683 reset_packet.public_header.reset_flag = true; | 5732 reset_packet.public_header.reset_flag = true; |
| 5684 reset_packet.public_header.version_flag = false; | 5733 reset_packet.public_header.version_flag = false; |
| 5685 reset_packet.rejected_packet_number = kPacketNumber; | 5734 reset_packet.rejected_packet_number = kPacketNumber; |
| 5686 reset_packet.nonce_proof = kNonceProof; | 5735 reset_packet.nonce_proof = kNonceProof; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 5713 0x89, 0x67, 0x45, 0x23, | 5762 0x89, 0x67, 0x45, 0x23, |
| 5714 0x01, 0xEF, 0xCD, 0xAB, | 5763 0x01, 0xEF, 0xCD, 0xAB, |
| 5715 // rejected packet number | 5764 // rejected packet number |
| 5716 0xBC, 0x9A, 0x78, 0x56, | 5765 0xBC, 0x9A, 0x78, 0x56, |
| 5717 0x34, 0x12, 0x00, 0x00, | 5766 0x34, 0x12, 0x00, 0x00, |
| 5718 // client address | 5767 // client address |
| 5719 0x02, 0x00, | 5768 0x02, 0x00, |
| 5720 0x7F, 0x00, 0x00, 0x01, | 5769 0x7F, 0x00, 0x00, 0x01, |
| 5721 0x34, 0x12, | 5770 0x34, 0x12, |
| 5722 }; | 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 }; |
| 5723 // clang-format on | 5798 // clang-format on |
| 5724 | 5799 |
| 5725 std::unique_ptr<QuicEncryptedPacket> data( | 5800 std::unique_ptr<QuicEncryptedPacket> data( |
| 5726 framer_.BuildPublicResetPacket(reset_packet)); | 5801 framer_.BuildPublicResetPacket(reset_packet)); |
| 5727 ASSERT_TRUE(data != nullptr); | 5802 ASSERT_TRUE(data != nullptr); |
| 5728 | 5803 |
| 5729 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 5804 if (FLAGS_quic_remove_packet_number_from_public_reset) { |
| 5730 data->length(), AsChars(packet), | 5805 test::CompareCharArraysWithHexError( |
| 5731 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 } |
| 5732 } | 5814 } |
| 5733 | 5815 |
| 5734 TEST_P(QuicFramerTest, EncryptPacket) { | 5816 TEST_P(QuicFramerTest, EncryptPacket) { |
| 5735 QuicPacketNumber packet_number = kPacketNumber; | 5817 QuicPacketNumber packet_number = kPacketNumber; |
| 5736 // clang-format off | 5818 // clang-format off |
| 5737 unsigned char packet[] = { | 5819 unsigned char packet[] = { |
| 5738 // public flags (8 byte connection_id) | 5820 // public flags (8 byte connection_id) |
| 5739 static_cast<unsigned char>( | 5821 static_cast<unsigned char>( |
| 5740 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), | 5822 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), |
| 5741 // connection_id | 5823 // connection_id |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6406 'o', ' ', 'w', 'o', | 6488 'o', ' ', 'w', 'o', |
| 6407 'r', 'l', 'd', '!', | 6489 'r', 'l', 'd', '!', |
| 6408 }; | 6490 }; |
| 6409 // clang-format on | 6491 // clang-format on |
| 6410 | 6492 |
| 6411 QuicFramerFuzzFunc(packet, arraysize(packet)); | 6493 QuicFramerFuzzFunc(packet, arraysize(packet)); |
| 6412 } | 6494 } |
| 6413 | 6495 |
| 6414 } // namespace test | 6496 } // namespace test |
| 6415 } // namespace net | 6497 } // namespace net |
| OLD | NEW |