OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_framer.h" | 5 #include "net/quic/quic_framer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 4564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4575 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4575 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
4576 header.public_header.reset_flag = false; | 4576 header.public_header.reset_flag = false; |
4577 header.public_header.version_flag = false; | 4577 header.public_header.version_flag = false; |
4578 header.fec_flag = false; | 4578 header.fec_flag = false; |
4579 header.entropy_flag = false; | 4579 header.entropy_flag = false; |
4580 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4580 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4581 header.fec_group = 0; | 4581 header.fec_group = 0; |
4582 | 4582 |
4583 QuicAckFrame ack_frame; | 4583 QuicAckFrame ack_frame; |
4584 ack_frame.received_info.largest_observed = 601; | 4584 ack_frame.received_info.largest_observed = 601; |
4585 ack_frame.sent_info.least_unacked = 0; | 4585 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1; |
4586 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { | 4586 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { |
4587 ack_frame.received_info.missing_packets.insert(i); | 4587 ack_frame.received_info.missing_packets.insert(i); |
4588 } | 4588 } |
4589 | 4589 |
4590 // Create a packet with just the ack | 4590 // Create a packet with just the ack |
4591 QuicFrame frame; | 4591 QuicFrame frame; |
4592 frame.type = ACK_FRAME; | 4592 frame.type = ACK_FRAME; |
4593 frame.ack_frame = &ack_frame; | 4593 frame.ack_frame = &ack_frame; |
4594 QuicFrames frames; | 4594 QuicFrames frames; |
4595 frames.push_back(frame); | 4595 frames.push_back(frame); |
4596 | 4596 |
4597 scoped_ptr<QuicPacket> raw_ack_packet( | 4597 scoped_ptr<QuicPacket> raw_ack_packet( |
4598 framer_.BuildUnsizedDataPacket(header, frames).packet); | 4598 framer_.BuildUnsizedDataPacket(header, frames).packet); |
4599 ASSERT_TRUE(raw_ack_packet != NULL); | 4599 ASSERT_TRUE(raw_ack_packet != NULL); |
4600 | 4600 |
4601 scoped_ptr<QuicEncryptedPacket> ack_packet( | 4601 scoped_ptr<QuicEncryptedPacket> ack_packet( |
4602 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 4602 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
4603 *raw_ack_packet)); | 4603 *raw_ack_packet)); |
4604 | 4604 |
4605 // Now make sure we can turn our ack packet back into an ack frame | 4605 // Now make sure we can turn our ack packet back into an ack frame |
4606 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 4606 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
4607 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 4607 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
4608 const QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4608 const QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
4609 EXPECT_EQ(0u, processed_ack_frame.sent_info.least_unacked); | 4609 EXPECT_EQ(header.packet_sequence_number - 1, |
| 4610 processed_ack_frame.sent_info.least_unacked); |
4610 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); | 4611 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); |
4611 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed); | 4612 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed); |
4612 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size()); | 4613 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size()); |
4613 SequenceNumberSet::const_iterator missing_iter = | 4614 SequenceNumberSet::const_iterator missing_iter = |
4614 processed_ack_frame.received_info.missing_packets.begin(); | 4615 processed_ack_frame.received_info.missing_packets.begin(); |
4615 EXPECT_EQ(1u, *missing_iter); | 4616 EXPECT_EQ(1u, *missing_iter); |
4616 SequenceNumberSet::const_reverse_iterator last_missing_iter = | 4617 SequenceNumberSet::const_reverse_iterator last_missing_iter = |
4617 processed_ack_frame.received_info.missing_packets.rbegin(); | 4618 processed_ack_frame.received_info.missing_packets.rbegin(); |
4618 EXPECT_EQ(509u, *last_missing_iter); | 4619 EXPECT_EQ(509u, *last_missing_iter); |
4619 } | 4620 } |
4620 | 4621 |
4621 TEST_P(QuicFramerTest, CleanTruncation) { | 4622 TEST_P(QuicFramerTest, CleanTruncation) { |
4622 QuicPacketHeader header; | 4623 QuicPacketHeader header; |
4623 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 4624 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
4624 header.public_header.reset_flag = false; | 4625 header.public_header.reset_flag = false; |
4625 header.public_header.version_flag = false; | 4626 header.public_header.version_flag = false; |
4626 header.fec_flag = false; | 4627 header.fec_flag = false; |
4627 header.entropy_flag = true; | 4628 header.entropy_flag = true; |
4628 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 4629 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
4629 header.fec_group = 0; | 4630 header.fec_group = 0; |
4630 | 4631 |
4631 QuicAckFrame ack_frame; | 4632 QuicAckFrame ack_frame; |
4632 ack_frame.received_info.largest_observed = 201; | 4633 ack_frame.received_info.largest_observed = 201; |
4633 ack_frame.sent_info.least_unacked = 0; | 4634 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 2; |
4634 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; ++i) { | 4635 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; ++i) { |
4635 ack_frame.received_info.missing_packets.insert(i); | 4636 ack_frame.received_info.missing_packets.insert(i); |
4636 } | 4637 } |
4637 | 4638 |
4638 // Create a packet with just the ack | 4639 // Create a packet with just the ack |
4639 QuicFrame frame; | 4640 QuicFrame frame; |
4640 frame.type = ACK_FRAME; | 4641 frame.type = ACK_FRAME; |
4641 frame.ack_frame = &ack_frame; | 4642 frame.ack_frame = &ack_frame; |
4642 QuicFrames frames; | 4643 QuicFrames frames; |
4643 frames.push_back(frame); | 4644 frames.push_back(frame); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4795 EXPECT_CALL(visitor, OnPacketComplete()); | 4796 EXPECT_CALL(visitor, OnPacketComplete()); |
4796 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 4797 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
4797 | 4798 |
4798 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4799 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
4799 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4800 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
4800 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4801 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
4801 } | 4802 } |
4802 | 4803 |
4803 } // namespace test | 4804 } // namespace test |
4804 } // namespace net | 4805 } // namespace net |
OLD | NEW |