| 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 2398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2409 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); | 2409 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); |
| 2410 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2410 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
| 2411 | 2411 |
| 2412 SendStreamDataToPeer(2, "bar", 0, !kFin, nullptr); | 2412 SendStreamDataToPeer(2, "bar", 0, !kFin, nullptr); |
| 2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); | 2413 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); |
| 2414 | 2414 |
| 2415 connection_.RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION); | 2415 connection_.RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION); |
| 2416 } | 2416 } |
| 2417 | 2417 |
| 2418 TEST_P(QuicConnectionTest, BufferNonDecryptablePackets) { | 2418 TEST_P(QuicConnectionTest, BufferNonDecryptablePackets) { |
| 2419 // SetFromConfig is always called after construction from InitializeSession. |
| 2420 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 2421 QuicConfig config; |
| 2422 connection_.SetFromConfig(config); |
| 2419 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 2423 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 2420 use_tagging_decrypter(); | 2424 use_tagging_decrypter(); |
| 2421 | 2425 |
| 2422 const uint8 tag = 0x07; | 2426 const uint8 tag = 0x07; |
| 2423 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 2427 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
| 2424 | 2428 |
| 2425 // Process an encrypted packet which can not yet be decrypted | 2429 // Process an encrypted packet which can not yet be decrypted which should |
| 2426 // which should result in the packet being buffered. | 2430 // result in the packet being buffered. |
| 2427 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, ENCRYPTION_INITIAL); | 2431 ProcessDataPacketAtLevel(1, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2428 | 2432 |
| 2429 // Transition to the new encryption state and process another | 2433 // Transition to the new encryption state and process another encrypted packet |
| 2430 // encrypted packet which should result in the original packet being | 2434 // which should result in the original packet being processed. |
| 2431 // processed. | |
| 2432 connection_.SetDecrypter(new StrictTaggingDecrypter(tag), | 2435 connection_.SetDecrypter(new StrictTaggingDecrypter(tag), |
| 2433 ENCRYPTION_INITIAL); | 2436 ENCRYPTION_INITIAL); |
| 2434 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2437 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
| 2435 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); | 2438 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
| 2436 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(2); | 2439 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(2); |
| 2437 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, ENCRYPTION_INITIAL); | 2440 ProcessDataPacketAtLevel(2, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2438 | 2441 |
| 2439 // Finally, process a third packet and note that we do not | 2442 // Finally, process a third packet and note that we do not reprocess the |
| 2440 // reprocess the buffered packet. | 2443 // buffered packet. |
| 2441 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); | 2444 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); |
| 2442 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, ENCRYPTION_INITIAL); | 2445 ProcessDataPacketAtLevel(3, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2443 } | 2446 } |
| 2444 | 2447 |
| 2448 TEST_P(QuicConnectionTest, Buffer100NonDecryptablePackets) { |
| 2449 // SetFromConfig is always called after construction from InitializeSession. |
| 2450 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 2451 QuicConfig config; |
| 2452 config.set_max_undecryptable_packets(100); |
| 2453 connection_.SetFromConfig(config); |
| 2454 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 2455 use_tagging_decrypter(); |
| 2456 |
| 2457 const uint8 tag = 0x07; |
| 2458 framer_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
| 2459 |
| 2460 // Process an encrypted packet which can not yet be decrypted which should |
| 2461 // result in the packet being buffered. |
| 2462 for (QuicPacketSequenceNumber i = 1; i <= 100; ++i) { |
| 2463 ProcessDataPacketAtLevel(i, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2464 } |
| 2465 |
| 2466 // Transition to the new encryption state and process another encrypted packet |
| 2467 // which should result in the original packets being processed. |
| 2468 connection_.SetDecrypter(new StrictTaggingDecrypter(tag), ENCRYPTION_INITIAL); |
| 2469 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
| 2470 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(tag)); |
| 2471 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(101); |
| 2472 ProcessDataPacketAtLevel(101, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2473 |
| 2474 // Finally, process a third packet and note that we do not reprocess the |
| 2475 // buffered packet. |
| 2476 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); |
| 2477 ProcessDataPacketAtLevel(102, 0, kEntropyFlag, ENCRYPTION_INITIAL); |
| 2478 } |
| 2479 |
| 2445 TEST_P(QuicConnectionTest, TestRetransmitOrder) { | 2480 TEST_P(QuicConnectionTest, TestRetransmitOrder) { |
| 2446 QuicByteCount first_packet_size; | 2481 QuicByteCount first_packet_size; |
| 2447 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( | 2482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( |
| 2448 DoAll(SaveArg<3>(&first_packet_size), Return(true))); | 2483 DoAll(SaveArg<3>(&first_packet_size), Return(true))); |
| 2449 | 2484 |
| 2450 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr); | 2485 connection_.SendStreamDataWithString(3, "first_packet", 0, !kFin, nullptr); |
| 2451 QuicByteCount second_packet_size; | 2486 QuicByteCount second_packet_size; |
| 2452 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( | 2487 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).WillOnce( |
| 2453 DoAll(SaveArg<3>(&second_packet_size), Return(true))); | 2488 DoAll(SaveArg<3>(&second_packet_size), Return(true))); |
| 2454 connection_.SendStreamDataWithString(3, "second_packet", 12, !kFin, nullptr); | 2489 connection_.SendStreamDataWithString(3, "second_packet", 12, !kFin, nullptr); |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2675 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); | 2710 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
| 2676 return; | 2711 return; |
| 2677 } | 2712 } |
| 2678 EXPECT_TRUE(connection_.connected()); | 2713 EXPECT_TRUE(connection_.connected()); |
| 2679 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); | 2714 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber()); |
| 2680 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2715 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 2681 | 2716 |
| 2682 // SetFromConfig sets the initial timeouts before negotiation. | 2717 // SetFromConfig sets the initial timeouts before negotiation. |
| 2683 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 2718 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 2684 QuicConfig config; | 2719 QuicConfig config; |
| 2685 config.SetDefaults(); | |
| 2686 connection_.SetFromConfig(config); | 2720 connection_.SetFromConfig(config); |
| 2687 // Subtract a second from the idle timeout on the client side. | 2721 // Subtract a second from the idle timeout on the client side. |
| 2688 QuicTime default_timeout = clock_.ApproximateNow().Add( | 2722 QuicTime default_timeout = clock_.ApproximateNow().Add( |
| 2689 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 2723 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); |
| 2690 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 2724 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
| 2691 | 2725 |
| 2692 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); | 2726 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_CONNECTION_TIMED_OUT, false)); |
| 2693 // Simulate the timeout alarm firing. | 2727 // Simulate the timeout alarm firing. |
| 2694 clock_.AdvanceTime( | 2728 clock_.AdvanceTime( |
| 2695 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); | 2729 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1)); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2828 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)), | 2862 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)), |
| 2829 clock_.ApproximateNow()); | 2863 clock_.ApproximateNow()); |
| 2830 connection_.GetTimeoutAlarm()->Fire(); | 2864 connection_.GetTimeoutAlarm()->Fire(); |
| 2831 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2865 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 2832 EXPECT_FALSE(connection_.connected()); | 2866 EXPECT_FALSE(connection_.connected()); |
| 2833 return; | 2867 return; |
| 2834 } | 2868 } |
| 2835 EXPECT_TRUE(connection_.connected()); | 2869 EXPECT_TRUE(connection_.connected()); |
| 2836 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 2870 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 2837 QuicConfig config; | 2871 QuicConfig config; |
| 2838 config.SetDefaults(); | |
| 2839 connection_.SetFromConfig(config); | 2872 connection_.SetFromConfig(config); |
| 2840 | 2873 |
| 2841 const QuicTime::Delta initial_idle_timeout = | 2874 const QuicTime::Delta initial_idle_timeout = |
| 2842 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); | 2875 QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs - 1); |
| 2843 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); | 2876 const QuicTime::Delta five_ms = QuicTime::Delta::FromMilliseconds(5); |
| 2844 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); | 2877 QuicTime default_timeout = clock_.ApproximateNow().Add(initial_idle_timeout); |
| 2845 | 2878 |
| 2846 // When we send a packet, the timeout will change to 5ms + | 2879 // When we send a packet, the timeout will change to 5ms + |
| 2847 // kInitialIdleTimeoutSecs. | 2880 // kInitialIdleTimeoutSecs. |
| 2848 clock_.AdvanceTime(five_ms); | 2881 clock_.AdvanceTime(five_ms); |
| (...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3917 EXPECT_LT(max_packets_per_fec_group, creator->max_packets_per_fec_group()); | 3950 EXPECT_LT(max_packets_per_fec_group, creator->max_packets_per_fec_group()); |
| 3918 } | 3951 } |
| 3919 | 3952 |
| 3920 class MockQuicConnectionDebugVisitor | 3953 class MockQuicConnectionDebugVisitor |
| 3921 : public QuicConnectionDebugVisitor { | 3954 : public QuicConnectionDebugVisitor { |
| 3922 public: | 3955 public: |
| 3923 MOCK_METHOD1(OnFrameAddedToPacket, | 3956 MOCK_METHOD1(OnFrameAddedToPacket, |
| 3924 void(const QuicFrame&)); | 3957 void(const QuicFrame&)); |
| 3925 | 3958 |
| 3926 MOCK_METHOD6(OnPacketSent, | 3959 MOCK_METHOD6(OnPacketSent, |
| 3927 void(QuicPacketSequenceNumber, | 3960 void(const SerializedPacket&, |
| 3928 QuicPacketSequenceNumber, | 3961 QuicPacketSequenceNumber, |
| 3929 EncryptionLevel, | 3962 EncryptionLevel, |
| 3930 TransmissionType, | 3963 TransmissionType, |
| 3931 const QuicEncryptedPacket&, | 3964 const QuicEncryptedPacket&, |
| 3932 WriteResult)); | 3965 QuicTime)); |
| 3933 | 3966 |
| 3934 MOCK_METHOD3(OnPacketReceived, | 3967 MOCK_METHOD3(OnPacketReceived, |
| 3935 void(const IPEndPoint&, | 3968 void(const IPEndPoint&, |
| 3936 const IPEndPoint&, | 3969 const IPEndPoint&, |
| 3937 const QuicEncryptedPacket&)); | 3970 const QuicEncryptedPacket&)); |
| 3938 | 3971 |
| 3939 MOCK_METHOD1(OnProtocolVersionMismatch, | 3972 MOCK_METHOD1(OnProtocolVersionMismatch, |
| 3940 void(QuicVersion)); | 3973 void(QuicVersion)); |
| 3941 | 3974 |
| 3942 MOCK_METHOD1(OnPacketHeader, | 3975 MOCK_METHOD1(OnPacketHeader, |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4008 QuicBlockedFrame blocked; | 4041 QuicBlockedFrame blocked; |
| 4009 blocked.stream_id = 3; | 4042 blocked.stream_id = 3; |
| 4010 EXPECT_CALL(visitor_, OnBlockedFrames(_)); | 4043 EXPECT_CALL(visitor_, OnBlockedFrames(_)); |
| 4011 ProcessFramePacket(QuicFrame(&blocked)); | 4044 ProcessFramePacket(QuicFrame(&blocked)); |
| 4012 EXPECT_TRUE(ack_alarm->IsSet()); | 4045 EXPECT_TRUE(ack_alarm->IsSet()); |
| 4013 } | 4046 } |
| 4014 | 4047 |
| 4015 } // namespace | 4048 } // namespace |
| 4016 } // namespace test | 4049 } // namespace test |
| 4017 } // namespace net | 4050 } // namespace net |
| OLD | NEW |