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 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 header_.entropy_flag = entropy_flag; | 810 header_.entropy_flag = entropy_flag; |
811 header_.fec_flag = false; | 811 header_.fec_flag = false; |
812 header_.packet_sequence_number = number; | 812 header_.packet_sequence_number = number; |
813 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; | 813 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; |
814 header_.fec_group = fec_group; | 814 header_.fec_group = fec_group; |
815 | 815 |
816 QuicFrames frames; | 816 QuicFrames frames; |
817 QuicFrame frame(&frame1_); | 817 QuicFrame frame(&frame1_); |
818 frames.push_back(frame); | 818 frames.push_back(frame); |
819 QuicPacket* packet = | 819 QuicPacket* packet = |
820 framer_.BuildUnsizedDataPacket(header_, frames).packet; | 820 BuildUnsizedDataPacket(&framer_, header_, frames).packet; |
821 EXPECT_TRUE(packet != NULL); | 821 EXPECT_TRUE(packet != NULL); |
822 return packet; | 822 return packet; |
823 } | 823 } |
824 | 824 |
825 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, | 825 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, |
826 QuicFecGroupNumber fec_group) { | 826 QuicFecGroupNumber fec_group) { |
827 header_.public_header.connection_id = connection_id_; | 827 header_.public_header.connection_id = connection_id_; |
828 header_.packet_sequence_number = number; | 828 header_.packet_sequence_number = number; |
829 header_.public_header.reset_flag = false; | 829 header_.public_header.reset_flag = false; |
830 header_.public_header.version_flag = false; | 830 header_.public_header.version_flag = false; |
831 header_.entropy_flag = false; | 831 header_.entropy_flag = false; |
832 header_.fec_flag = false; | 832 header_.fec_flag = false; |
833 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; | 833 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; |
834 header_.fec_group = fec_group; | 834 header_.fec_group = fec_group; |
835 | 835 |
836 QuicConnectionCloseFrame qccf; | 836 QuicConnectionCloseFrame qccf; |
837 qccf.error_code = QUIC_PEER_GOING_AWAY; | 837 qccf.error_code = QUIC_PEER_GOING_AWAY; |
838 | 838 |
839 QuicFrames frames; | 839 QuicFrames frames; |
840 QuicFrame frame(&qccf); | 840 QuicFrame frame(&qccf); |
841 frames.push_back(frame); | 841 frames.push_back(frame); |
842 QuicPacket* packet = | 842 QuicPacket* packet = |
843 framer_.BuildUnsizedDataPacket(header_, frames).packet; | 843 BuildUnsizedDataPacket(&framer_, header_, frames).packet; |
844 EXPECT_TRUE(packet != NULL); | 844 EXPECT_TRUE(packet != NULL); |
845 return packet; | 845 return packet; |
846 } | 846 } |
847 | 847 |
848 void SetFeedback(QuicCongestionFeedbackFrame* feedback) { | 848 void SetFeedback(QuicCongestionFeedbackFrame* feedback) { |
849 receive_algorithm_ = new TestReceiveAlgorithm(feedback); | 849 receive_algorithm_ = new TestReceiveAlgorithm(feedback); |
850 connection_.SetReceiveAlgorithm(receive_algorithm_); | 850 connection_.SetReceiveAlgorithm(receive_algorithm_); |
851 } | 851 } |
852 | 852 |
853 QuicTime::Delta DefaultRetransmissionTime() { | 853 QuicTime::Delta DefaultRetransmissionTime() { |
(...skipping 2473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3327 header.public_header.version_flag = true; | 3327 header.public_header.version_flag = true; |
3328 header.entropy_flag = false; | 3328 header.entropy_flag = false; |
3329 header.fec_flag = false; | 3329 header.fec_flag = false; |
3330 header.packet_sequence_number = 12; | 3330 header.packet_sequence_number = 12; |
3331 header.fec_group = 0; | 3331 header.fec_group = 0; |
3332 | 3332 |
3333 QuicFrames frames; | 3333 QuicFrames frames; |
3334 QuicFrame frame(&frame1_); | 3334 QuicFrame frame(&frame1_); |
3335 frames.push_back(frame); | 3335 frames.push_back(frame); |
3336 scoped_ptr<QuicPacket> packet( | 3336 scoped_ptr<QuicPacket> packet( |
3337 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3337 BuildUnsizedDataPacket(&framer_, header, frames).packet); |
3338 scoped_ptr<QuicEncryptedPacket> encrypted( | 3338 scoped_ptr<QuicEncryptedPacket> encrypted( |
3339 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); | 3339 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); |
3340 | 3340 |
3341 framer_.set_version(version()); | 3341 framer_.set_version(version()); |
3342 connection_.set_is_server(true); | 3342 connection_.set_is_server(true); |
3343 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3343 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3344 EXPECT_TRUE(writer_->version_negotiation_packet() != NULL); | 3344 EXPECT_TRUE(writer_->version_negotiation_packet() != NULL); |
3345 | 3345 |
3346 size_t num_versions = arraysize(kSupportedQuicVersions); | 3346 size_t num_versions = arraysize(kSupportedQuicVersions); |
3347 ASSERT_EQ(num_versions, | 3347 ASSERT_EQ(num_versions, |
(...skipping 17 matching lines...) Expand all Loading... |
3365 header.public_header.version_flag = true; | 3365 header.public_header.version_flag = true; |
3366 header.entropy_flag = false; | 3366 header.entropy_flag = false; |
3367 header.fec_flag = false; | 3367 header.fec_flag = false; |
3368 header.packet_sequence_number = 12; | 3368 header.packet_sequence_number = 12; |
3369 header.fec_group = 0; | 3369 header.fec_group = 0; |
3370 | 3370 |
3371 QuicFrames frames; | 3371 QuicFrames frames; |
3372 QuicFrame frame(&frame1_); | 3372 QuicFrame frame(&frame1_); |
3373 frames.push_back(frame); | 3373 frames.push_back(frame); |
3374 scoped_ptr<QuicPacket> packet( | 3374 scoped_ptr<QuicPacket> packet( |
3375 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3375 BuildUnsizedDataPacket(&framer_, header, frames).packet); |
3376 scoped_ptr<QuicEncryptedPacket> encrypted( | 3376 scoped_ptr<QuicEncryptedPacket> encrypted( |
3377 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); | 3377 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); |
3378 | 3378 |
3379 framer_.set_version(version()); | 3379 framer_.set_version(version()); |
3380 connection_.set_is_server(true); | 3380 connection_.set_is_server(true); |
3381 BlockOnNextWrite(); | 3381 BlockOnNextWrite(); |
3382 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3382 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3383 EXPECT_EQ(0u, writer_->last_packet_size()); | 3383 EXPECT_EQ(0u, writer_->last_packet_size()); |
3384 EXPECT_TRUE(connection_.HasQueuedData()); | 3384 EXPECT_TRUE(connection_.HasQueuedData()); |
3385 | 3385 |
(...skipping 24 matching lines...) Expand all Loading... |
3410 header.public_header.version_flag = true; | 3410 header.public_header.version_flag = true; |
3411 header.entropy_flag = false; | 3411 header.entropy_flag = false; |
3412 header.fec_flag = false; | 3412 header.fec_flag = false; |
3413 header.packet_sequence_number = 12; | 3413 header.packet_sequence_number = 12; |
3414 header.fec_group = 0; | 3414 header.fec_group = 0; |
3415 | 3415 |
3416 QuicFrames frames; | 3416 QuicFrames frames; |
3417 QuicFrame frame(&frame1_); | 3417 QuicFrame frame(&frame1_); |
3418 frames.push_back(frame); | 3418 frames.push_back(frame); |
3419 scoped_ptr<QuicPacket> packet( | 3419 scoped_ptr<QuicPacket> packet( |
3420 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3420 BuildUnsizedDataPacket(&framer_, header, frames).packet); |
3421 scoped_ptr<QuicEncryptedPacket> encrypted( | 3421 scoped_ptr<QuicEncryptedPacket> encrypted( |
3422 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); | 3422 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); |
3423 | 3423 |
3424 framer_.set_version(version()); | 3424 framer_.set_version(version()); |
3425 connection_.set_is_server(true); | 3425 connection_.set_is_server(true); |
3426 BlockOnNextWrite(); | 3426 BlockOnNextWrite(); |
3427 writer_->set_is_write_blocked_data_buffered(true); | 3427 writer_->set_is_write_blocked_data_buffered(true); |
3428 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3428 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3429 EXPECT_EQ(0u, writer_->last_packet_size()); | 3429 EXPECT_EQ(0u, writer_->last_packet_size()); |
3430 EXPECT_FALSE(connection_.HasQueuedData()); | 3430 EXPECT_FALSE(connection_.HasQueuedData()); |
(...skipping 24 matching lines...) Expand all Loading... |
3455 header.public_header, supported_versions)); | 3455 header.public_header, supported_versions)); |
3456 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3456 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3457 | 3457 |
3458 // Now force another packet. The connection should transition into | 3458 // Now force another packet. The connection should transition into |
3459 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion. | 3459 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion. |
3460 header.public_header.version_flag = false; | 3460 header.public_header.version_flag = false; |
3461 QuicFrames frames; | 3461 QuicFrames frames; |
3462 QuicFrame frame(&frame1_); | 3462 QuicFrame frame(&frame1_); |
3463 frames.push_back(frame); | 3463 frames.push_back(frame); |
3464 scoped_ptr<QuicPacket> packet( | 3464 scoped_ptr<QuicPacket> packet( |
3465 framer_.BuildUnsizedDataPacket(header, frames).packet); | 3465 BuildUnsizedDataPacket(&framer_, header, frames).packet); |
3466 encrypted.reset(framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); | 3466 encrypted.reset(framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); |
3467 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); | 3467 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); |
3468 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3468 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3469 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3469 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3470 | 3470 |
3471 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket( | 3471 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket( |
3472 QuicConnectionPeer::GetPacketCreator(&connection_))); | 3472 QuicConnectionPeer::GetPacketCreator(&connection_))); |
3473 } | 3473 } |
3474 | 3474 |
3475 TEST_P(QuicConnectionTest, BadVersionNegotiation) { | 3475 TEST_P(QuicConnectionTest, BadVersionNegotiation) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3600 | 3600 |
3601 QuicConnectionCloseFrame qccf; | 3601 QuicConnectionCloseFrame qccf; |
3602 qccf.error_code = QUIC_PEER_GOING_AWAY; | 3602 qccf.error_code = QUIC_PEER_GOING_AWAY; |
3603 QuicFrame close_frame(&qccf); | 3603 QuicFrame close_frame(&qccf); |
3604 QuicFrame stream_frame(&frame1_); | 3604 QuicFrame stream_frame(&frame1_); |
3605 | 3605 |
3606 QuicFrames frames; | 3606 QuicFrames frames; |
3607 frames.push_back(stream_frame); | 3607 frames.push_back(stream_frame); |
3608 frames.push_back(close_frame); | 3608 frames.push_back(close_frame); |
3609 scoped_ptr<QuicPacket> packet( | 3609 scoped_ptr<QuicPacket> packet( |
3610 framer_.BuildUnsizedDataPacket(header_, frames).packet); | 3610 BuildUnsizedDataPacket(&framer_, header_, frames).packet); |
3611 EXPECT_TRUE(NULL != packet.get()); | 3611 EXPECT_TRUE(NULL != packet.get()); |
3612 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( | 3612 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( |
3613 ENCRYPTION_NONE, 1, *packet)); | 3613 ENCRYPTION_NONE, 1, *packet)); |
3614 | 3614 |
3615 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); | 3615 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); |
3616 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); | 3616 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); |
3617 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 3617 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
3618 | 3618 |
3619 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); | 3619 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); |
3620 } | 3620 } |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3890 ack_header.public_header.connection_id = connection_id_; | 3890 ack_header.public_header.connection_id = connection_id_; |
3891 ack_header.public_header.reset_flag = false; | 3891 ack_header.public_header.reset_flag = false; |
3892 ack_header.public_header.version_flag = false; | 3892 ack_header.public_header.version_flag = false; |
3893 ack_header.entropy_flag = !kEntropyFlag; | 3893 ack_header.entropy_flag = !kEntropyFlag; |
3894 ack_header.fec_flag = true; | 3894 ack_header.fec_flag = true; |
3895 ack_header.packet_sequence_number = 1; | 3895 ack_header.packet_sequence_number = 1; |
3896 ack_header.is_in_fec_group = IN_FEC_GROUP; | 3896 ack_header.is_in_fec_group = IN_FEC_GROUP; |
3897 ack_header.fec_group = 1; | 3897 ack_header.fec_group = 1; |
3898 | 3898 |
3899 QuicPacket* packet = | 3899 QuicPacket* packet = |
3900 framer_.BuildUnsizedDataPacket(ack_header, frames).packet; | 3900 BuildUnsizedDataPacket(&framer_, ack_header, frames).packet; |
3901 | 3901 |
3902 // Take the packet which contains the ACK frame, and construct and deliver an | 3902 // Take the packet which contains the ACK frame, and construct and deliver an |
3903 // FEC packet which allows the ACK packet to be recovered. | 3903 // FEC packet which allows the ACK packet to be recovered. |
3904 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet); | 3904 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet); |
3905 } | 3905 } |
3906 | 3906 |
3907 class MockQuicConnectionDebugVisitor | 3907 class MockQuicConnectionDebugVisitor |
3908 : public QuicConnectionDebugVisitorInterface { | 3908 : public QuicConnectionDebugVisitorInterface { |
3909 public: | 3909 public: |
3910 MOCK_METHOD1(OnFrameAddedToPacket, | 3910 MOCK_METHOD1(OnFrameAddedToPacket, |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4000 QuicBlockedFrame blocked; | 4000 QuicBlockedFrame blocked; |
4001 blocked.stream_id = 3; | 4001 blocked.stream_id = 3; |
4002 EXPECT_CALL(visitor_, OnBlockedFrames(_)); | 4002 EXPECT_CALL(visitor_, OnBlockedFrames(_)); |
4003 ProcessFramePacket(QuicFrame(&blocked)); | 4003 ProcessFramePacket(QuicFrame(&blocked)); |
4004 EXPECT_TRUE(ack_alarm->IsSet()); | 4004 EXPECT_TRUE(ack_alarm->IsSet()); |
4005 } | 4005 } |
4006 | 4006 |
4007 } // namespace | 4007 } // namespace |
4008 } // namespace test | 4008 } // namespace test |
4009 } // namespace net | 4009 } // namespace net |
OLD | NEW |