| 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 "TESTICEUFRAG0002", "TESTICEUFRAG0003"}; | 91 "TESTICEUFRAG0002", "TESTICEUFRAG0003"}; |
| 92 // Based on ICE_PWD_LENGTH | 92 // Based on ICE_PWD_LENGTH |
| 93 static const char* kIcePwd[4] = {"TESTICEPWD00000000000000", | 93 static const char* kIcePwd[4] = {"TESTICEPWD00000000000000", |
| 94 "TESTICEPWD00000000000001", | 94 "TESTICEPWD00000000000001", |
| 95 "TESTICEPWD00000000000002", | 95 "TESTICEPWD00000000000002", |
| 96 "TESTICEPWD00000000000003"}; | 96 "TESTICEPWD00000000000003"}; |
| 97 | 97 |
| 98 static const uint64_t kTiebreaker1 = 11111; | 98 static const uint64_t kTiebreaker1 = 11111; |
| 99 static const uint64_t kTiebreaker2 = 22222; | 99 static const uint64_t kTiebreaker2 = 22222; |
| 100 | 100 |
| 101 enum { MSG_ADD_CANDIDATES, MSG_REMOVE_CANDIDATES }; | 101 enum { |
| 102 MSG_CANDIDATE |
| 103 }; |
| 102 | 104 |
| 103 static cricket::IceConfig CreateIceConfig(int receiving_timeout, | 105 static cricket::IceConfig CreateIceConfig(int receiving_timeout, |
| 104 bool gather_continually, | 106 bool gather_continually, |
| 105 int backup_ping_interval = -1) { | 107 int backup_ping_interval = -1) { |
| 106 cricket::IceConfig config; | 108 cricket::IceConfig config; |
| 107 config.receiving_timeout = receiving_timeout; | 109 config.receiving_timeout = receiving_timeout; |
| 108 config.gather_continually = gather_continually; | 110 config.gather_continually = gather_continually; |
| 109 config.backup_connection_ping_interval = backup_ping_interval; | 111 config.backup_connection_ping_interval = backup_ping_interval; |
| 110 return config; | 112 return config; |
| 111 } | 113 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 ch_packets_.pop_front(); | 209 ch_packets_.pop_front(); |
| 208 } | 210 } |
| 209 return ret; | 211 return ret; |
| 210 } | 212 } |
| 211 | 213 |
| 212 std::string name_; // TODO - Currently not used. | 214 std::string name_; // TODO - Currently not used. |
| 213 std::list<std::string> ch_packets_; | 215 std::list<std::string> ch_packets_; |
| 214 rtc::scoped_ptr<cricket::P2PTransportChannel> ch_; | 216 rtc::scoped_ptr<cricket::P2PTransportChannel> ch_; |
| 215 }; | 217 }; |
| 216 | 218 |
| 217 struct CandidatesData : public rtc::MessageData { | 219 struct CandidateData : public rtc::MessageData { |
| 218 CandidatesData(cricket::TransportChannel* ch, const cricket::Candidate& c) | 220 CandidateData(cricket::TransportChannel* ch, const cricket::Candidate& c) |
| 219 : channel(ch), candidates(1, c) {} | 221 : channel(ch), candidate(c) { |
| 220 CandidatesData(cricket::TransportChannel* ch, | 222 } |
| 221 const std::vector<cricket::Candidate>& cc) | |
| 222 : channel(ch), candidates(cc) {} | |
| 223 cricket::TransportChannel* channel; | 223 cricket::TransportChannel* channel; |
| 224 cricket::Candidates candidates; | 224 cricket::Candidate candidate; |
| 225 }; | 225 }; |
| 226 | 226 |
| 227 struct Endpoint { | 227 struct Endpoint { |
| 228 Endpoint() | 228 Endpoint() |
| 229 : role_(cricket::ICEROLE_UNKNOWN), | 229 : role_(cricket::ICEROLE_UNKNOWN), |
| 230 tiebreaker_(0), | 230 tiebreaker_(0), |
| 231 role_conflict_(false), | 231 role_conflict_(false), |
| 232 save_candidates_(false) {} | 232 save_candidates_(false) {} |
| 233 bool HasChannel(cricket::TransportChannel* ch) { | 233 bool HasChannel(cricket::TransportChannel* ch) { |
| 234 return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); | 234 return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 255 } | 255 } |
| 256 | 256 |
| 257 rtc::FakeNetworkManager network_manager_; | 257 rtc::FakeNetworkManager network_manager_; |
| 258 rtc::scoped_ptr<cricket::BasicPortAllocator> allocator_; | 258 rtc::scoped_ptr<cricket::BasicPortAllocator> allocator_; |
| 259 ChannelData cd1_; | 259 ChannelData cd1_; |
| 260 ChannelData cd2_; | 260 ChannelData cd2_; |
| 261 cricket::IceRole role_; | 261 cricket::IceRole role_; |
| 262 uint64_t tiebreaker_; | 262 uint64_t tiebreaker_; |
| 263 bool role_conflict_; | 263 bool role_conflict_; |
| 264 bool save_candidates_; | 264 bool save_candidates_; |
| 265 std::vector<CandidatesData*> saved_candidates_; | 265 std::vector<CandidateData*> saved_candidates_; |
| 266 }; | 266 }; |
| 267 | 267 |
| 268 ChannelData* GetChannelData(cricket::TransportChannel* channel) { | 268 ChannelData* GetChannelData(cricket::TransportChannel* channel) { |
| 269 if (ep1_.HasChannel(channel)) | 269 if (ep1_.HasChannel(channel)) |
| 270 return ep1_.GetChannelData(channel); | 270 return ep1_.GetChannelData(channel); |
| 271 else | 271 else |
| 272 return ep2_.GetChannelData(channel); | 272 return ep2_.GetChannelData(channel); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void CreateChannels(int num) { | 275 void CreateChannels(int num) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 303 cricket::P2PTransportChannel* CreateChannel( | 303 cricket::P2PTransportChannel* CreateChannel( |
| 304 int endpoint, | 304 int endpoint, |
| 305 int component, | 305 int component, |
| 306 const std::string& local_ice_ufrag, | 306 const std::string& local_ice_ufrag, |
| 307 const std::string& local_ice_pwd, | 307 const std::string& local_ice_pwd, |
| 308 const std::string& remote_ice_ufrag, | 308 const std::string& remote_ice_ufrag, |
| 309 const std::string& remote_ice_pwd) { | 309 const std::string& remote_ice_pwd) { |
| 310 cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( | 310 cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( |
| 311 "test content name", component, GetAllocator(endpoint)); | 311 "test content name", component, GetAllocator(endpoint)); |
| 312 channel->SignalCandidateGathered.connect( | 312 channel->SignalCandidateGathered.connect( |
| 313 this, &P2PTransportChannelTestBase::OnCandidateGathered); | 313 this, &P2PTransportChannelTestBase::OnCandidate); |
| 314 channel->SignalCandidatesRemoved.connect( | |
| 315 this, &P2PTransportChannelTestBase::OnCandidatesRemoved); | |
| 316 channel->SignalReadPacket.connect( | 314 channel->SignalReadPacket.connect( |
| 317 this, &P2PTransportChannelTestBase::OnReadPacket); | 315 this, &P2PTransportChannelTestBase::OnReadPacket); |
| 318 channel->SignalRoleConflict.connect( | 316 channel->SignalRoleConflict.connect( |
| 319 this, &P2PTransportChannelTestBase::OnRoleConflict); | 317 this, &P2PTransportChannelTestBase::OnRoleConflict); |
| 320 channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); | 318 channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); |
| 321 if (clear_remote_candidates_ufrag_pwd_) { | 319 if (clear_remote_candidates_ufrag_pwd_) { |
| 322 // This only needs to be set if we're clearing them from the | 320 // This only needs to be set if we're clearing them from the |
| 323 // candidates. Some unit tests rely on this not being set. | 321 // candidates. Some unit tests rely on this not being set. |
| 324 channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); | 322 channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); |
| 325 } | 323 } |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 ep2_ch1()->writable(), | 638 ep2_ch1()->writable(), |
| 641 1000); | 639 1000); |
| 642 | 640 |
| 643 EXPECT_TRUE(ep1_ch1()->best_connection() && | 641 EXPECT_TRUE(ep1_ch1()->best_connection() && |
| 644 ep2_ch1()->best_connection()); | 642 ep2_ch1()->best_connection()); |
| 645 | 643 |
| 646 TestSendRecv(1); | 644 TestSendRecv(1); |
| 647 } | 645 } |
| 648 | 646 |
| 649 // We pass the candidates directly to the other side. | 647 // We pass the candidates directly to the other side. |
| 650 void OnCandidateGathered(cricket::TransportChannelImpl* ch, | 648 void OnCandidate(cricket::TransportChannelImpl* ch, |
| 651 const cricket::Candidate& c) { | 649 const cricket::Candidate& c) { |
| 652 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) | 650 if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) |
| 653 return; | 651 return; |
| 654 | 652 |
| 655 if (GetEndpoint(ch)->save_candidates_) { | 653 if (GetEndpoint(ch)->save_candidates_) { |
| 656 GetEndpoint(ch)->saved_candidates_.push_back(new CandidatesData(ch, c)); | 654 GetEndpoint(ch)->saved_candidates_.push_back(new CandidateData(ch, c)); |
| 657 } else { | 655 } else { |
| 658 main_->Post(this, MSG_ADD_CANDIDATES, new CandidatesData(ch, c)); | 656 main_->Post(this, MSG_CANDIDATE, new CandidateData(ch, c)); |
| 659 } | 657 } |
| 660 } | 658 } |
| 661 | 659 |
| 662 void PauseCandidates(int endpoint) { | 660 void PauseCandidates(int endpoint) { |
| 663 GetEndpoint(endpoint)->save_candidates_ = true; | 661 GetEndpoint(endpoint)->save_candidates_ = true; |
| 664 } | 662 } |
| 665 | 663 |
| 666 void OnCandidatesRemoved(cricket::TransportChannelImpl* ch, | |
| 667 const std::vector<cricket::Candidate>& candidates) { | |
| 668 // Candidate removals are not paused. | |
| 669 CandidatesData* candidates_data = new CandidatesData(ch, candidates); | |
| 670 main_->Post(this, MSG_REMOVE_CANDIDATES, candidates_data); | |
| 671 } | |
| 672 | |
| 673 // Tcp candidate verification has to be done when they are generated. | 664 // Tcp candidate verification has to be done when they are generated. |
| 674 void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { | 665 void VerifySavedTcpCandidates(int endpoint, const std::string& tcptype) { |
| 675 for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { | 666 for (auto& data : GetEndpoint(endpoint)->saved_candidates_) { |
| 676 for (auto& candidate : data->candidates) { | 667 EXPECT_EQ(data->candidate.protocol(), cricket::TCP_PROTOCOL_NAME); |
| 677 EXPECT_EQ(candidate.protocol(), cricket::TCP_PROTOCOL_NAME); | 668 EXPECT_EQ(data->candidate.tcptype(), tcptype); |
| 678 EXPECT_EQ(candidate.tcptype(), tcptype); | 669 if (data->candidate.tcptype() == cricket::TCPTYPE_ACTIVE_STR) { |
| 679 if (candidate.tcptype() == cricket::TCPTYPE_ACTIVE_STR) { | 670 EXPECT_EQ(data->candidate.address().port(), cricket::DISCARD_PORT); |
| 680 EXPECT_EQ(candidate.address().port(), cricket::DISCARD_PORT); | 671 } else if (data->candidate.tcptype() == cricket::TCPTYPE_PASSIVE_STR) { |
| 681 } else if (candidate.tcptype() == cricket::TCPTYPE_PASSIVE_STR) { | 672 EXPECT_NE(data->candidate.address().port(), cricket::DISCARD_PORT); |
| 682 EXPECT_NE(candidate.address().port(), cricket::DISCARD_PORT); | 673 } else { |
| 683 } else { | 674 FAIL() << "Unknown tcptype: " << data->candidate.tcptype(); |
| 684 FAIL() << "Unknown tcptype: " << candidate.tcptype(); | |
| 685 } | |
| 686 } | 675 } |
| 687 } | 676 } |
| 688 } | 677 } |
| 689 | 678 |
| 690 void ResumeCandidates(int endpoint) { | 679 void ResumeCandidates(int endpoint) { |
| 691 Endpoint* ed = GetEndpoint(endpoint); | 680 Endpoint* ed = GetEndpoint(endpoint); |
| 692 std::vector<CandidatesData*>::iterator it = ed->saved_candidates_.begin(); | 681 std::vector<CandidateData*>::iterator it = ed->saved_candidates_.begin(); |
| 693 for (; it != ed->saved_candidates_.end(); ++it) { | 682 for (; it != ed->saved_candidates_.end(); ++it) { |
| 694 main_->Post(this, MSG_ADD_CANDIDATES, *it); | 683 main_->Post(this, MSG_CANDIDATE, *it); |
| 695 } | 684 } |
| 696 ed->saved_candidates_.clear(); | 685 ed->saved_candidates_.clear(); |
| 697 ed->save_candidates_ = false; | 686 ed->save_candidates_ = false; |
| 698 } | 687 } |
| 699 | 688 |
| 700 void OnMessage(rtc::Message* msg) { | 689 void OnMessage(rtc::Message* msg) { |
| 701 switch (msg->message_id) { | 690 switch (msg->message_id) { |
| 702 case MSG_ADD_CANDIDATES: { | 691 case MSG_CANDIDATE: { |
| 703 rtc::scoped_ptr<CandidatesData> data( | 692 rtc::scoped_ptr<CandidateData> data( |
| 704 static_cast<CandidatesData*>(msg->pdata)); | 693 static_cast<CandidateData*>(msg->pdata)); |
| 705 cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); | 694 cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); |
| 706 for (auto& c : data->candidates) { | 695 cricket::Candidate c = data->candidate; |
| 707 if (clear_remote_candidates_ufrag_pwd_) { | 696 if (clear_remote_candidates_ufrag_pwd_) { |
| 708 c.set_username(""); | 697 c.set_username(""); |
| 709 c.set_password(""); | 698 c.set_password(""); |
| 710 } | |
| 711 LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" | |
| 712 << rch->component() << "): " << c.ToString(); | |
| 713 rch->AddRemoteCandidate(c); | |
| 714 } | 699 } |
| 715 break; | 700 LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" |
| 716 } | 701 << rch->component() << "): " << c.ToString(); |
| 717 case MSG_REMOVE_CANDIDATES: { | 702 rch->AddRemoteCandidate(c); |
| 718 rtc::scoped_ptr<CandidatesData> data( | |
| 719 static_cast<CandidatesData*>(msg->pdata)); | |
| 720 cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); | |
| 721 for (cricket::Candidate& c : data->candidates) { | |
| 722 LOG(LS_INFO) << "Removed remote candidate " << c.ToString(); | |
| 723 rch->RemoveRemoteCandidate(c); | |
| 724 } | |
| 725 break; | 703 break; |
| 726 } | 704 } |
| 727 } | 705 } |
| 728 } | 706 } |
| 729 void OnReadPacket(cricket::TransportChannel* channel, const char* data, | 707 void OnReadPacket(cricket::TransportChannel* channel, const char* data, |
| 730 size_t len, const rtc::PacketTime& packet_time, | 708 size_t len, const rtc::PacketTime& packet_time, |
| 731 int flags) { | 709 int flags) { |
| 732 std::list<std::string>& packets = GetPacketList(channel); | 710 std::list<std::string>& packets = GetPacketList(channel); |
| 733 packets.push_front(std::string(data, len)); | 711 packets.push_front(std::string(data, len)); |
| 734 } | 712 } |
| (...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1787 // Create channels and let them go writable, as usual. | 1765 // Create channels and let them go writable, as usual. |
| 1788 CreateChannels(1); | 1766 CreateChannels(1); |
| 1789 | 1767 |
| 1790 // Both transport channels will reach STATE_COMPLETED quickly. | 1768 // Both transport channels will reach STATE_COMPLETED quickly. |
| 1791 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, | 1769 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, |
| 1792 ep1_ch1()->GetState(), 1000); | 1770 ep1_ch1()->GetState(), 1000); |
| 1793 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, | 1771 EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED, |
| 1794 ep2_ch1()->GetState(), 1000); | 1772 ep2_ch1()->GetState(), 1000); |
| 1795 } | 1773 } |
| 1796 | 1774 |
| 1797 // Tests that when a network interface becomes inactive, if and only if | 1775 // Tests that when a network interface becomes inactive, the ports associated |
| 1798 // Continual Gathering is enabled, the ports associated with that network | 1776 // with that network will be removed from the port list of the channel if |
| 1799 // will be removed from the port list of the channel, and the respective | 1777 // and only if Continual Gathering is enabled. |
| 1800 // remote candidates on the other participant will be removed eventually. | |
| 1801 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { | 1778 TEST_F(P2PTransportChannelMultihomedTest, TestNetworkBecomesInactive) { |
| 1802 AddAddress(0, kPublicAddrs[0]); | 1779 AddAddress(0, kPublicAddrs[0]); |
| 1803 AddAddress(1, kPublicAddrs[1]); | 1780 AddAddress(1, kPublicAddrs[1]); |
| 1804 // Create channels and let them go writable, as usual. | 1781 // Create channels and let them go writable, as usual. |
| 1805 CreateChannels(1); | 1782 CreateChannels(1); |
| 1806 ep1_ch1()->SetIceConfig(CreateIceConfig(2000, true)); | 1783 ep1_ch1()->SetIceConfig(CreateIceConfig(2000, true)); |
| 1807 ep2_ch1()->SetIceConfig(CreateIceConfig(2000, false)); | 1784 ep2_ch1()->SetIceConfig(CreateIceConfig(2000, false)); |
| 1808 | 1785 |
| 1809 SetAllocatorFlags(0, kOnlyLocalPorts); | 1786 SetAllocatorFlags(0, kOnlyLocalPorts); |
| 1810 SetAllocatorFlags(1, kOnlyLocalPorts); | 1787 SetAllocatorFlags(1, kOnlyLocalPorts); |
| 1811 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && | 1788 EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->receiving() && ep1_ch1()->writable() && |
| 1812 ep2_ch1()->receiving() && ep2_ch1()->writable(), | 1789 ep2_ch1()->receiving() && ep2_ch1()->writable(), |
| 1813 1000, 1000); | 1790 1000, 1000); |
| 1814 // More than one port has been created. | 1791 // More than one port has been created. |
| 1815 EXPECT_LE(1U, ep1_ch1()->ports().size()); | 1792 EXPECT_LE(1U, ep1_ch1()->ports().size()); |
| 1816 // Endpoint 1 enabled continual gathering; the port will be removed | 1793 // Endpoint 1 enabled continual gathering; the port will be removed |
| 1817 // when the interface is removed. | 1794 // when the interface is removed. |
| 1818 RemoveAddress(0, kPublicAddrs[0]); | 1795 RemoveAddress(0, kPublicAddrs[0]); |
| 1819 EXPECT_TRUE(ep1_ch1()->ports().empty()); | 1796 EXPECT_EQ(0U, ep1_ch1()->ports().size()); |
| 1820 // The remote candidates will be removed eventually. | |
| 1821 EXPECT_TRUE_WAIT(ep2_ch1()->remote_candidates().empty(), 1000); | |
| 1822 | 1797 |
| 1823 size_t num_ports = ep2_ch1()->ports().size(); | 1798 size_t num_ports = ep2_ch1()->ports().size(); |
| 1824 EXPECT_LE(1U, num_ports); | 1799 EXPECT_LE(1U, num_ports); |
| 1825 size_t num_remote_candidates = ep1_ch1()->remote_candidates().size(); | |
| 1826 // Endpoint 2 did not enable continual gathering; the port will not be removed | 1800 // Endpoint 2 did not enable continual gathering; the port will not be removed |
| 1827 // when the interface is removed and neither the remote candidates on the | 1801 // when the interface is removed. |
| 1828 // other participant. | |
| 1829 RemoveAddress(1, kPublicAddrs[1]); | 1802 RemoveAddress(1, kPublicAddrs[1]); |
| 1830 rtc::Thread::Current()->ProcessMessages(500); | |
| 1831 EXPECT_EQ(num_ports, ep2_ch1()->ports().size()); | 1803 EXPECT_EQ(num_ports, ep2_ch1()->ports().size()); |
| 1832 EXPECT_EQ(num_remote_candidates, ep1_ch1()->remote_candidates().size()); | |
| 1833 } | 1804 } |
| 1834 | 1805 |
| 1835 /* | 1806 /* |
| 1836 | 1807 |
| 1837 TODO(pthatcher): Once have a way to handle network interfaces changes | 1808 TODO(pthatcher): Once have a way to handle network interfaces changes |
| 1838 without signalling an ICE restart, put a test like this back. In the | 1809 without signalling an ICE restart, put a test like this back. In the |
| 1839 mean time, this test only worked for GICE. With ICE, it's currently | 1810 mean time, this test only worked for GICE. With ICE, it's currently |
| 1840 not possible without an ICE restart. | 1811 not possible without an ICE restart. |
| 1841 | 1812 |
| 1842 // Test that we can switch links in a coordinated fashion. | 1813 // Test that we can switch links in a coordinated fashion. |
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2719 | 2690 |
| 2720 // TCP Relay/Relay is the next. | 2691 // TCP Relay/Relay is the next. |
| 2721 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, | 2692 VerifyNextPingableConnection(cricket::RELAY_PORT_TYPE, |
| 2722 cricket::RELAY_PORT_TYPE, | 2693 cricket::RELAY_PORT_TYPE, |
| 2723 cricket::TCP_PROTOCOL_NAME); | 2694 cricket::TCP_PROTOCOL_NAME); |
| 2724 | 2695 |
| 2725 // Finally, Local/Relay will be pinged. | 2696 // Finally, Local/Relay will be pinged. |
| 2726 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, | 2697 VerifyNextPingableConnection(cricket::LOCAL_PORT_TYPE, |
| 2727 cricket::RELAY_PORT_TYPE); | 2698 cricket::RELAY_PORT_TYPE); |
| 2728 } | 2699 } |
| OLD | NEW |