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_connection.h" | 5 #include "net/quic/quic_connection.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 bool entropy_flag, | 726 bool entropy_flag, |
727 EncryptionLevel level) { | 727 EncryptionLevel level) { |
728 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group, | 728 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group, |
729 entropy_flag)); | 729 entropy_flag)); |
730 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( | 730 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
731 level, number, *packet)); | 731 level, number, *packet)); |
732 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 732 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
733 return encrypted->length(); | 733 return encrypted->length(); |
734 } | 734 } |
735 | 735 |
| 736 void ProcessPingPacket(QuicPacketSequenceNumber number) { |
| 737 scoped_ptr<QuicPacket> packet(ConstructPingPacket(number)); |
| 738 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
| 739 ENCRYPTION_NONE, number, *packet)); |
| 740 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
| 741 } |
| 742 |
736 void ProcessClosePacket(QuicPacketSequenceNumber number, | 743 void ProcessClosePacket(QuicPacketSequenceNumber number, |
737 QuicFecGroupNumber fec_group) { | 744 QuicFecGroupNumber fec_group) { |
738 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); | 745 scoped_ptr<QuicPacket> packet(ConstructClosePacket(number, fec_group)); |
739 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( | 746 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
740 ENCRYPTION_NONE, number, *packet)); | 747 ENCRYPTION_NONE, number, *packet)); |
741 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 748 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
742 } | 749 } |
743 | 750 |
744 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number, | 751 size_t ProcessFecProtectedPacket(QuicPacketSequenceNumber number, |
745 bool expect_revival, bool entropy_flag) { | 752 bool expect_revival, bool entropy_flag) { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
865 | 872 |
866 QuicFrames frames; | 873 QuicFrames frames; |
867 QuicFrame frame(&frame1_); | 874 QuicFrame frame(&frame1_); |
868 frames.push_back(frame); | 875 frames.push_back(frame); |
869 QuicPacket* packet = | 876 QuicPacket* packet = |
870 BuildUnsizedDataPacket(&framer_, header_, frames).packet; | 877 BuildUnsizedDataPacket(&framer_, header_, frames).packet; |
871 EXPECT_TRUE(packet != NULL); | 878 EXPECT_TRUE(packet != NULL); |
872 return packet; | 879 return packet; |
873 } | 880 } |
874 | 881 |
| 882 QuicPacket* ConstructPingPacket(QuicPacketSequenceNumber number) { |
| 883 header_.public_header.connection_id = connection_id_; |
| 884 header_.packet_sequence_number = number; |
| 885 header_.public_header.reset_flag = false; |
| 886 header_.public_header.version_flag = false; |
| 887 header_.entropy_flag = false; |
| 888 header_.fec_flag = false; |
| 889 header_.is_in_fec_group = NOT_IN_FEC_GROUP; |
| 890 header_.fec_group = 0; |
| 891 |
| 892 QuicPingFrame ping; |
| 893 |
| 894 QuicFrames frames; |
| 895 QuicFrame frame(&ping); |
| 896 frames.push_back(frame); |
| 897 QuicPacket* packet = |
| 898 BuildUnsizedDataPacket(&framer_, header_, frames).packet; |
| 899 EXPECT_TRUE(packet != NULL); |
| 900 return packet; |
| 901 } |
| 902 |
875 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, | 903 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, |
876 QuicFecGroupNumber fec_group) { | 904 QuicFecGroupNumber fec_group) { |
877 header_.public_header.connection_id = connection_id_; | 905 header_.public_header.connection_id = connection_id_; |
878 header_.packet_sequence_number = number; | 906 header_.packet_sequence_number = number; |
879 header_.public_header.reset_flag = false; | 907 header_.public_header.reset_flag = false; |
880 header_.public_header.version_flag = false; | 908 header_.public_header.version_flag = false; |
881 header_.entropy_flag = false; | 909 header_.entropy_flag = false; |
882 header_.fec_flag = false; | 910 header_.fec_flag = false; |
883 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; | 911 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; |
884 header_.fec_group = fec_group; | 912 header_.fec_group = fec_group; |
(...skipping 2075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2960 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 2988 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
2961 ProcessPacket(1); | 2989 ProcessPacket(1); |
2962 ProcessPacket(2); | 2990 ProcessPacket(2); |
2963 // Check that ack is sent and that delayed ack alarm is reset. | 2991 // Check that ack is sent and that delayed ack alarm is reset. |
2964 EXPECT_EQ(2u, writer_->frame_count()); | 2992 EXPECT_EQ(2u, writer_->frame_count()); |
2965 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); | 2993 EXPECT_FALSE(writer_->stop_waiting_frames().empty()); |
2966 EXPECT_FALSE(writer_->ack_frames().empty()); | 2994 EXPECT_FALSE(writer_->ack_frames().empty()); |
2967 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 2995 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
2968 } | 2996 } |
2969 | 2997 |
| 2998 TEST_P(QuicConnectionTest, SendDelayedAckForPing) { |
| 2999 if (version() < QUIC_VERSION_18) { |
| 3000 return; |
| 3001 } |
| 3002 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 3003 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
| 3004 ProcessPingPacket(1); |
| 3005 EXPECT_TRUE(connection_.GetAckAlarm()->IsSet()); |
| 3006 } |
| 3007 |
2970 TEST_P(QuicConnectionTest, NoAckOnOldNacks) { | 3008 TEST_P(QuicConnectionTest, NoAckOnOldNacks) { |
2971 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3009 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
2972 // Drop one packet, triggering a sequence of acks. | 3010 // Drop one packet, triggering a sequence of acks. |
2973 ProcessPacket(2); | 3011 ProcessPacket(2); |
2974 size_t frames_per_ack = 2; | 3012 size_t frames_per_ack = 2; |
2975 EXPECT_EQ(frames_per_ack, writer_->frame_count()); | 3013 EXPECT_EQ(frames_per_ack, writer_->frame_count()); |
2976 EXPECT_FALSE(writer_->ack_frames().empty()); | 3014 EXPECT_FALSE(writer_->ack_frames().empty()); |
2977 writer_->Reset(); | 3015 writer_->Reset(); |
2978 ProcessPacket(3); | 3016 ProcessPacket(3); |
2979 EXPECT_EQ(frames_per_ack, writer_->frame_count()); | 3017 EXPECT_EQ(frames_per_ack, writer_->frame_count()); |
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3963 QuicBlockedFrame blocked; | 4001 QuicBlockedFrame blocked; |
3964 blocked.stream_id = 3; | 4002 blocked.stream_id = 3; |
3965 EXPECT_CALL(visitor_, OnBlockedFrames(_)); | 4003 EXPECT_CALL(visitor_, OnBlockedFrames(_)); |
3966 ProcessFramePacket(QuicFrame(&blocked)); | 4004 ProcessFramePacket(QuicFrame(&blocked)); |
3967 EXPECT_TRUE(ack_alarm->IsSet()); | 4005 EXPECT_TRUE(ack_alarm->IsSet()); |
3968 } | 4006 } |
3969 | 4007 |
3970 } // namespace | 4008 } // namespace |
3971 } // namespace test | 4009 } // namespace test |
3972 } // namespace net | 4010 } // namespace net |
OLD | NEW |