diff options
author | buildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-04-17 00:04:39 +0000 |
---|---|---|
committer | buildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-04-17 00:04:39 +0000 |
commit | 005164e2d795e55bbadcce1be828bd39f04c07fd (patch) | |
tree | 337f05f3e0ba6e7cda5fa89c63bded07abff23e4 /p2p | |
parent | 870433171a5134efa649dc59fe50c7493cf26daf (diff) | |
download | talk-005164e2d795e55bbadcce1be828bd39f04c07fd.tar.gz |
(Auto)update libjingle 65055925-> 65086785
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@5921 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'p2p')
-rw-r--r-- | p2p/base/turnport.cc | 1 | ||||
-rw-r--r-- | p2p/base/turnport_unittest.cc | 2 | ||||
-rw-r--r-- | p2p/client/basicportallocator.cc | 39 | ||||
-rw-r--r-- | p2p/client/portallocator_unittest.cc | 42 |
4 files changed, 63 insertions, 21 deletions
diff --git a/p2p/base/turnport.cc b/p2p/base/turnport.cc index b9eba75..052cb74 100644 --- a/p2p/base/turnport.cc +++ b/p2p/base/turnport.cc @@ -257,6 +257,7 @@ void TurnPort::PrepareAddress() { socket_ = socket_factory()->CreateUdpSocket( talk_base::SocketAddress(ip(), 0), min_port(), max_port()); } else if (server_address_.proto == PROTO_TCP) { + ASSERT(!SharedSocket()); int opts = talk_base::PacketSocketFactory::OPT_STUN; // If secure bit is enabled in server address, use TLS over TCP. if (server_address_.secure) { diff --git a/p2p/base/turnport_unittest.cc b/p2p/base/turnport_unittest.cc index 79ae208..3b51ebb 100644 --- a/p2p/base/turnport_unittest.cc +++ b/p2p/base/turnport_unittest.cc @@ -197,6 +197,8 @@ class TurnPortTest : public testing::Test, void CreateSharedTurnPort(const std::string& username, const std::string& password, const cricket::ProtocolAddress& server_address) { + ASSERT(server_address.proto == cricket::PROTO_UDP); + socket_.reset(socket_factory_.CreateUdpSocket( talk_base::SocketAddress(kLocalAddr1.ipaddr(), 0), 0, 0)); ASSERT_TRUE(socket_ != NULL); diff --git a/p2p/client/basicportallocator.cc b/p2p/client/basicportallocator.cc index 99d53f3..ea8a59a 100644 --- a/p2p/client/basicportallocator.cc +++ b/p2p/client/basicportallocator.cc @@ -1003,24 +1003,15 @@ void AllocationSequence::CreateTurnPort(const RelayServerConfig& config) { for (relay_port = config.ports.begin(); relay_port != config.ports.end(); ++relay_port) { TurnPort* port = NULL; - if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) { + // Shared socket mode must be enabled only for UDP based ports. Hence + // don't pass shared socket for ports which will create TCP sockets. + if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET) && + relay_port->proto == PROTO_UDP) { port = TurnPort::Create(session_->network_thread(), session_->socket_factory(), network_, udp_socket_.get(), session_->username(), session_->password(), *relay_port, config.credentials); - } else { - port = TurnPort::Create(session_->network_thread(), - session_->socket_factory(), - network_, ip_, - session_->allocator()->min_port(), - session_->allocator()->max_port(), - session_->username(), - session_->password(), - *relay_port, config.credentials); - } - - if (port) { // If we are using shared socket for TURN and udp ports, we need to // find a way to demux the packets to the correct port when received. // Mapping against server_address is one way of doing this. When packet @@ -1028,16 +1019,24 @@ void AllocationSequence::CreateTurnPort(const RelayServerConfig& config) { // If server address is not resolved, a signal will be sent from the port // after the address is resolved. The map entry will updated with the // resolved address when the signal is received from the port. - if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) { + if ((*relay_port).address.IsUnresolved()) { // If server address is not resolved then listen for signal from port. - if ((*relay_port).address.IsUnresolved()) { - port->SignalResolvedServerAddress.connect( - this, &AllocationSequence::OnResolvedTurnServerAddress); - } - turn_ports_[(*relay_port).address] = port; + port->SignalResolvedServerAddress.connect( + this, &AllocationSequence::OnResolvedTurnServerAddress); } - session_->AddAllocatedPort(port, this, true); + turn_ports_[(*relay_port).address] = port; + } else { + port = TurnPort::Create(session_->network_thread(), + session_->socket_factory(), + network_, ip_, + session_->allocator()->min_port(), + session_->allocator()->max_port(), + session_->username(), + session_->password(), + *relay_port, config.credentials); } + ASSERT(port != NULL); + session_->AddAllocatedPort(port, this, true); } } diff --git a/p2p/client/portallocator_unittest.cc b/p2p/client/portallocator_unittest.cc index 211c354..693d547 100644 --- a/p2p/client/portallocator_unittest.cc +++ b/p2p/client/portallocator_unittest.cc @@ -65,7 +65,8 @@ static const SocketAddress kRelayTcpExtAddr("99.99.99.3", 5003); static const SocketAddress kRelaySslTcpIntAddr("99.99.99.2", 5004); static const SocketAddress kRelaySslTcpExtAddr("99.99.99.3", 5005); static const SocketAddress kTurnUdpIntAddr("99.99.99.4", 3478); -static const SocketAddress kTurnUdpExtAddr("99.99.99.5", 0); +static const SocketAddress kTurnTcpIntAddr("99.99.99.5", 3478); +static const SocketAddress kTurnUdpExtAddr("99.99.99.6", 0); // Minimum and maximum port for port range tests. static const int kMinPort = 10000; @@ -701,6 +702,43 @@ TEST_F(PortAllocatorTest, TestSharedSocketWithNat) { EXPECT_EQ(3U, candidates_.size()); } +// Test TURN port in shared socket mode with UDP and TCP TURN server adderesses. +TEST_F(PortAllocatorTest, TestSharedSocketWithoutNatUsingTurn) { + turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); + AddInterface(kClientAddr); + allocator_.reset(new cricket::BasicPortAllocator(&network_manager_)); + cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); + cricket::RelayCredentials credentials(kTurnUsername, kTurnPassword); + relay_server.credentials = credentials; + relay_server.ports.push_back(cricket::ProtocolAddress( + kTurnUdpIntAddr, cricket::PROTO_UDP, false)); + relay_server.ports.push_back(cricket::ProtocolAddress( + kTurnTcpIntAddr, cricket::PROTO_TCP, false)); + allocator_->AddRelay(relay_server); + + allocator_->set_step_delay(cricket::kMinimumStepDelay); + allocator_->set_flags(allocator().flags() | + cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG | + cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | + cricket::PORTALLOCATOR_DISABLE_TCP); + + EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); + session_->StartGettingPorts(); + + ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); + ASSERT_EQ(3U, ports_.size()); + EXPECT_PRED5(CheckCandidate, candidates_[0], + cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); + EXPECT_PRED5(CheckCandidate, candidates_[1], + cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", + talk_base::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); + EXPECT_PRED5(CheckCandidate, candidates_[2], + cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", + talk_base::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0)); + EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); + EXPECT_EQ(3U, candidates_.size()); +} + // Test that when PORTALLOCATOR_ENABLE_SHARED_SOCKET is enabled only one port // is allocated for udp/stun/turn. In this test we should expect all local, // stun and turn candidates. @@ -722,8 +760,10 @@ TEST_F(PortAllocatorTest, TestSharedSocketWithNatUsingTurn) { cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG | cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | cricket::PORTALLOCATOR_DISABLE_TCP); + EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); session_->StartGettingPorts(); + ASSERT_EQ_WAIT(3U, candidates_.size(), kDefaultAllocationTimeout); ASSERT_EQ(2U, ports_.size()); EXPECT_PRED5(CheckCandidate, candidates_[0], |