OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2009 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1691 CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); | 1691 CreateUdpCandidate(RELAY_PORT_TYPE, "2.2.2.2", 2, 0)); |
1692 // Expect that the TURN-TURN candidate pair will be prioritized since it's | 1692 // Expect that the TURN-TURN candidate pair will be prioritized since it's |
1693 // "probably writable". | 1693 // "probably writable". |
1694 EXPECT_TRUE(ep1_ch1()->selected_connection() != nullptr); | 1694 EXPECT_TRUE(ep1_ch1()->selected_connection() != nullptr); |
1695 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); | 1695 EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type()); |
1696 EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); | 1696 EXPECT_EQ(RELAY_PORT_TYPE, RemoteCandidate(ep1_ch1())->type()); |
1697 // Also expect that the channel instantly indicates that it's writable since | 1697 // Also expect that the channel instantly indicates that it's writable since |
1698 // it has a TURN-TURN pair. | 1698 // it has a TURN-TURN pair. |
1699 EXPECT_TRUE(ep1_ch1()->writable()); | 1699 EXPECT_TRUE(ep1_ch1()->writable()); |
1700 EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); | 1700 EXPECT_TRUE(GetEndpoint(0)->ready_to_send_); |
| 1701 // Also make sure we can immediately send packets. |
| 1702 const char* data = "test"; |
| 1703 int len = static_cast<int>(strlen(data)); |
| 1704 EXPECT_EQ(len, SendData(ep1_ch1(), data, len)); |
1701 } | 1705 } |
1702 | 1706 |
1703 // Test that a TURN/peer reflexive candidate pair is also presumed writable. | 1707 // Test that a TURN/peer reflexive candidate pair is also presumed writable. |
1704 TEST_F(P2PTransportChannelTest, TurnToPrflxPresumedWritable) { | 1708 TEST_F(P2PTransportChannelTest, TurnToPrflxPresumedWritable) { |
1705 rtc::ScopedFakeClock fake_clock; | 1709 rtc::ScopedFakeClock fake_clock; |
1706 | 1710 |
1707 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, | 1711 ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags, |
1708 kDefaultPortAllocatorFlags); | 1712 kDefaultPortAllocatorFlags); |
1709 // We want the remote TURN candidate to show up as prflx. To do this we need | 1713 // We want the remote TURN candidate to show up as prflx. To do this we need |
1710 // to configure the server to accept packets from an address we haven't | 1714 // to configure the server to accept packets from an address we haven't |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2226 } | 2230 } |
2227 | 2231 |
2228 void NominateConnection(Connection* conn) { | 2232 void NominateConnection(Connection* conn) { |
2229 conn->set_nominated(true); | 2233 conn->set_nominated(true); |
2230 conn->SignalNominated(conn); | 2234 conn->SignalNominated(conn); |
2231 } | 2235 } |
2232 | 2236 |
2233 void OnSelectedCandidatePairChanged( | 2237 void OnSelectedCandidatePairChanged( |
2234 TransportChannel* transport_channel, | 2238 TransportChannel* transport_channel, |
2235 CandidatePairInterface* selected_candidate_pair, | 2239 CandidatePairInterface* selected_candidate_pair, |
2236 int last_sent_packet_id) { | 2240 int last_sent_packet_id, |
| 2241 bool ready_to_send) { |
2237 last_selected_candidate_pair_ = selected_candidate_pair; | 2242 last_selected_candidate_pair_ = selected_candidate_pair; |
2238 last_sent_packet_id_ = last_sent_packet_id; | 2243 last_sent_packet_id_ = last_sent_packet_id; |
2239 ++selected_candidate_pair_switches_; | 2244 ++selected_candidate_pair_switches_; |
2240 } | 2245 } |
2241 | 2246 |
2242 void ReceivePingOnConnection(Connection* conn, | 2247 void ReceivePingOnConnection(Connection* conn, |
2243 const std::string& remote_ufrag, | 2248 const std::string& remote_ufrag, |
2244 int priority) { | 2249 int priority) { |
2245 IceMessage msg; | 2250 IceMessage msg; |
2246 msg.SetType(STUN_BINDING_REQUEST); | 2251 msg.SetType(STUN_BINDING_REQUEST); |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2632 ASSERT_TRUE(conn1 != nullptr); | 2637 ASSERT_TRUE(conn1 != nullptr); |
2633 EXPECT_EQ(conn1, ch.selected_connection()); | 2638 EXPECT_EQ(conn1, ch.selected_connection()); |
2634 EXPECT_EQ(conn1, last_selected_candidate_pair()); | 2639 EXPECT_EQ(conn1, last_selected_candidate_pair()); |
2635 EXPECT_EQ(-1, last_sent_packet_id()); | 2640 EXPECT_EQ(-1, last_sent_packet_id()); |
2636 // Channel is not ready to send because it is not writable. | 2641 // Channel is not ready to send because it is not writable. |
2637 EXPECT_FALSE(channel_ready_to_send()); | 2642 EXPECT_FALSE(channel_ready_to_send()); |
2638 | 2643 |
2639 int last_packet_id = 0; | 2644 int last_packet_id = 0; |
2640 const char* data = "ABCDEFGH"; | 2645 const char* data = "ABCDEFGH"; |
2641 int len = static_cast<int>(strlen(data)); | 2646 int len = static_cast<int>(strlen(data)); |
2642 SendData(ch, data, len, ++last_packet_id); | 2647 EXPECT_EQ(-1, SendData(ch, data, len, ++last_packet_id)); |
2643 // When a higher priority candidate comes in, the new connection is chosen | 2648 // When a higher priority candidate comes in, the new connection is chosen |
2644 // as the selected connection. | 2649 // as the selected connection. |
2645 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); | 2650 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "2.2.2.2", 2, 10)); |
2646 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); | 2651 Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2); |
2647 ASSERT_TRUE(conn2 != nullptr); | 2652 ASSERT_TRUE(conn2 != nullptr); |
2648 EXPECT_EQ(conn2, ch.selected_connection()); | 2653 EXPECT_EQ(conn2, ch.selected_connection()); |
2649 EXPECT_EQ(conn2, last_selected_candidate_pair()); | 2654 EXPECT_EQ(conn2, last_selected_candidate_pair()); |
2650 EXPECT_EQ(last_packet_id, last_sent_packet_id()); | 2655 EXPECT_EQ(-1, last_sent_packet_id()); |
2651 EXPECT_FALSE(channel_ready_to_send()); | 2656 EXPECT_FALSE(channel_ready_to_send()); |
2652 | 2657 |
2653 // If a stun request with use-candidate attribute arrives, the receiving | 2658 // If a stun request with use-candidate attribute arrives, the receiving |
2654 // connection will be set as the selected connection, even though | 2659 // connection will be set as the selected connection, even though |
2655 // its priority is lower. | 2660 // its priority is lower. |
2656 SendData(ch, data, len, ++last_packet_id); | 2661 EXPECT_EQ(-1, SendData(ch, data, len, ++last_packet_id)); |
2657 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); | 2662 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "3.3.3.3", 3, 1)); |
2658 Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); | 2663 Connection* conn3 = WaitForConnectionTo(&ch, "3.3.3.3", 3); |
2659 ASSERT_TRUE(conn3 != nullptr); | 2664 ASSERT_TRUE(conn3 != nullptr); |
2660 // Because it has a lower priority, the selected connection is still conn2. | 2665 // Because it has a lower priority, the selected connection is still conn2. |
2661 EXPECT_EQ(conn2, ch.selected_connection()); | 2666 EXPECT_EQ(conn2, ch.selected_connection()); |
2662 conn3->ReceivedPingResponse(LOW_RTT); // Become writable. | 2667 conn3->ReceivedPingResponse(LOW_RTT); // Become writable. |
2663 // But if it is nominated via use_candidate, it is chosen as the selected | 2668 // But if it is nominated via use_candidate, it is chosen as the selected |
2664 // connection. | 2669 // connection. |
2665 conn3->set_nominated(true); | 2670 conn3->set_nominated(true); |
2666 conn3->SignalNominated(conn3); | 2671 conn3->SignalNominated(conn3); |
2667 EXPECT_EQ(conn3, ch.selected_connection()); | 2672 EXPECT_EQ(conn3, ch.selected_connection()); |
2668 EXPECT_EQ(conn3, last_selected_candidate_pair()); | 2673 EXPECT_EQ(conn3, last_selected_candidate_pair()); |
2669 EXPECT_EQ(last_packet_id, last_sent_packet_id()); | 2674 EXPECT_EQ(-1, last_sent_packet_id()); |
2670 EXPECT_TRUE(channel_ready_to_send()); | 2675 EXPECT_TRUE(channel_ready_to_send()); |
2671 | 2676 |
2672 // Even if another higher priority candidate arrives, it will not be set as | 2677 // Even if another higher priority candidate arrives, it will not be set as |
2673 // the selected connection because the selected connection is nominated by | 2678 // the selected connection because the selected connection is nominated by |
2674 // the controlling side. | 2679 // the controlling side. |
2675 SendData(ch, data, len, ++last_packet_id); | 2680 EXPECT_EQ(len, SendData(ch, data, len, ++last_packet_id)); |
2676 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "4.4.4.4", 4, 100)); | 2681 ch.AddRemoteCandidate(CreateUdpCandidate(LOCAL_PORT_TYPE, "4.4.4.4", 4, 100)); |
2677 Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); | 2682 Connection* conn4 = WaitForConnectionTo(&ch, "4.4.4.4", 4); |
2678 ASSERT_TRUE(conn4 != nullptr); | 2683 ASSERT_TRUE(conn4 != nullptr); |
2679 EXPECT_EQ(conn3, ch.selected_connection()); | 2684 EXPECT_EQ(conn3, ch.selected_connection()); |
2680 // But if it is nominated via use_candidate and writable, it will be set as | 2685 // But if it is nominated via use_candidate and writable, it will be set as |
2681 // the selected connection. | 2686 // the selected connection. |
2682 conn4->set_nominated(true); | 2687 conn4->set_nominated(true); |
2683 conn4->SignalNominated(conn4); | 2688 conn4->SignalNominated(conn4); |
2684 // Not switched yet because conn4 is not writable. | 2689 // Not switched yet because conn4 is not writable. |
2685 EXPECT_EQ(conn3, ch.selected_connection()); | 2690 EXPECT_EQ(conn3, ch.selected_connection()); |
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3474 | 3479 |
3475 // TCP Relay/Relay is the next. | 3480 // TCP Relay/Relay is the next. |
3476 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, | 3481 VerifyNextPingableConnection(RELAY_PORT_TYPE, RELAY_PORT_TYPE, |
3477 TCP_PROTOCOL_NAME); | 3482 TCP_PROTOCOL_NAME); |
3478 | 3483 |
3479 // Finally, Local/Relay will be pinged. | 3484 // Finally, Local/Relay will be pinged. |
3480 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); | 3485 VerifyNextPingableConnection(LOCAL_PORT_TYPE, RELAY_PORT_TYPE); |
3481 } | 3486 } |
3482 | 3487 |
3483 } // namespace cricket { | 3488 } // namespace cricket { |
OLD | NEW |