Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: webrtc/p2p/client/portallocator_unittest.cc

Issue 1299333003: Relanding Generate localhost candidate when no STUN/TURN and portallocator has the right flag spefi… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/p2p/client/fakeportallocator.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 18 matching lines...) Expand all
29 #include "webrtc/base/socketaddress.h" 29 #include "webrtc/base/socketaddress.h"
30 #include "webrtc/base/ssladapter.h" 30 #include "webrtc/base/ssladapter.h"
31 #include "webrtc/base/thread.h" 31 #include "webrtc/base/thread.h"
32 #include "webrtc/base/virtualsocketserver.h" 32 #include "webrtc/base/virtualsocketserver.h"
33 33
34 using cricket::ServerAddresses; 34 using cricket::ServerAddresses;
35 using rtc::SocketAddress; 35 using rtc::SocketAddress;
36 using rtc::Thread; 36 using rtc::Thread;
37 37
38 static const SocketAddress kClientAddr("11.11.11.11", 0); 38 static const SocketAddress kClientAddr("11.11.11.11", 0);
39 static const SocketAddress kLoopbackAddr("127.0.0.1", 0);
39 static const SocketAddress kPrivateAddr("192.168.1.11", 0); 40 static const SocketAddress kPrivateAddr("192.168.1.11", 0);
40 static const SocketAddress kPrivateAddr2("192.168.1.12", 0); 41 static const SocketAddress kPrivateAddr2("192.168.1.12", 0);
41 static const SocketAddress kClientIPv6Addr( 42 static const SocketAddress kClientIPv6Addr(
42 "2401:fa00:4:1000:be30:5bff:fee5:c3", 0); 43 "2401:fa00:4:1000:be30:5bff:fee5:c3", 0);
43 static const SocketAddress kClientAddr2("22.22.22.22", 0); 44 static const SocketAddress kClientAddr2("22.22.22.22", 0);
44 static const SocketAddress kNatUdpAddr("77.77.77.77", rtc::NAT_SERVER_UDP_PORT); 45 static const SocketAddress kNatUdpAddr("77.77.77.77", rtc::NAT_SERVER_UDP_PORT);
45 static const SocketAddress kNatTcpAddr("77.77.77.77", rtc::NAT_SERVER_TCP_PORT); 46 static const SocketAddress kNatTcpAddr("77.77.77.77", rtc::NAT_SERVER_TCP_PORT);
46 static const SocketAddress kRemoteClientAddr("22.22.22.22", 0); 47 static const SocketAddress kRemoteClientAddr("22.22.22.22", 0);
47 static const SocketAddress kStunAddr("99.99.99.1", cricket::STUN_SERVER_PORT); 48 static const SocketAddress kStunAddr("99.99.99.1", cricket::STUN_SERVER_PORT);
48 static const SocketAddress kRelayUdpIntAddr("99.99.99.2", 5000); 49 static const SocketAddress kRelayUdpIntAddr("99.99.99.2", 5000);
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 } 237 }
237 } 238 }
238 239
239 // This function starts the port/address gathering and check the existence of 240 // This function starts the port/address gathering and check the existence of
240 // candidates as specified. When |expect_stun_candidate| is true, 241 // candidates as specified. When |expect_stun_candidate| is true,
241 // |stun_candidate_addr| carries the expected reflective address, which is 242 // |stun_candidate_addr| carries the expected reflective address, which is
242 // also the related address for TURN candidate if it is expected. Otherwise, 243 // also the related address for TURN candidate if it is expected. Otherwise,
243 // it should be ignore. 244 // it should be ignore.
244 void CheckDisableAdapterEnumeration( 245 void CheckDisableAdapterEnumeration(
245 uint32 total_ports, 246 uint32 total_ports,
247 const rtc::IPAddress& host_candidate_addr,
246 const rtc::IPAddress& stun_candidate_addr, 248 const rtc::IPAddress& stun_candidate_addr,
247 const rtc::IPAddress& relay_candidate_udp_transport_addr, 249 const rtc::IPAddress& relay_candidate_udp_transport_addr,
248 const rtc::IPAddress& relay_candidate_tcp_transport_addr) { 250 const rtc::IPAddress& relay_candidate_tcp_transport_addr) {
249 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); 251 if (!session_) {
250 session_->set_flags(cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION | 252 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
253 }
254 session_->set_flags(session_->flags() |
255 cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION |
251 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET); 256 cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET);
252 allocator().set_allow_tcp_listen(false); 257 allocator().set_allow_tcp_listen(false);
253 session_->StartGettingPorts(); 258 session_->StartGettingPorts();
254 EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout); 259 EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
255 260
256 uint32 total_candidates = 0; 261 uint32 total_candidates = 0;
262 if (!host_candidate_addr.IsNil()) {
263 EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
264 cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp",
265 rtc::SocketAddress(host_candidate_addr, 0));
266 ++total_candidates;
267 }
257 if (!stun_candidate_addr.IsNil()) { 268 if (!stun_candidate_addr.IsNil()) {
258 ++total_candidates; 269 EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
259 EXPECT_PRED5(CheckCandidate, candidates_[0],
260 cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp", 270 cricket::ICE_CANDIDATE_COMPONENT_RTP, "stun", "udp",
261 rtc::SocketAddress(stun_candidate_addr, 0)); 271 rtc::SocketAddress(stun_candidate_addr, 0));
262 EXPECT_EQ( 272 EXPECT_EQ(rtc::EmptySocketAddressWithFamily(
263 rtc::EmptySocketAddressWithFamily(candidates_[0].address().family()), 273 candidates_[total_candidates].address().family()),
264 candidates_[0].related_address()); 274 candidates_[total_candidates].related_address());
275 ++total_candidates;
265 } 276 }
266 if (!relay_candidate_udp_transport_addr.IsNil()) { 277 if (!relay_candidate_udp_transport_addr.IsNil()) {
267 ++total_candidates; 278 EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
268 EXPECT_PRED5(CheckCandidate, candidates_[1],
269 cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", 279 cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp",
270 rtc::SocketAddress(relay_candidate_udp_transport_addr, 0)); 280 rtc::SocketAddress(relay_candidate_udp_transport_addr, 0));
271 EXPECT_EQ(stun_candidate_addr, candidates_[1].related_address().ipaddr()); 281 EXPECT_EQ(stun_candidate_addr,
282 candidates_[total_candidates].related_address().ipaddr());
283 ++total_candidates;
272 } 284 }
273 if (!relay_candidate_tcp_transport_addr.IsNil()) { 285 if (!relay_candidate_tcp_transport_addr.IsNil()) {
274 ++total_candidates; 286 EXPECT_PRED5(CheckCandidate, candidates_[total_candidates],
275 EXPECT_PRED5(CheckCandidate, candidates_[2],
276 cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp", 287 cricket::ICE_CANDIDATE_COMPONENT_RTP, "relay", "udp",
277 rtc::SocketAddress(relay_candidate_tcp_transport_addr, 0)); 288 rtc::SocketAddress(relay_candidate_tcp_transport_addr, 0));
278 EXPECT_EQ(stun_candidate_addr, candidates_[2].related_address().ipaddr()); 289 EXPECT_EQ(stun_candidate_addr,
290 candidates_[total_candidates].related_address().ipaddr());
291 ++total_candidates;
279 } 292 }
280 293
281 EXPECT_EQ(total_candidates, candidates_.size()); 294 EXPECT_EQ(total_candidates, candidates_.size());
282 EXPECT_EQ(total_ports, ports_.size()); 295 EXPECT_EQ(total_ports, ports_.size());
283 } 296 }
284 297
285 protected: 298 protected:
286 cricket::BasicPortAllocator& allocator() { 299 cricket::BasicPortAllocator& allocator() {
287 return *allocator_; 300 return *allocator_;
288 } 301 }
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 session_->StartGettingPorts(); 388 session_->StartGettingPorts();
376 // Waiting for one second to make sure BasicPortAllocatorSession has not 389 // Waiting for one second to make sure BasicPortAllocatorSession has not
377 // called OnAllocate multiple times. In old behavior it's called every 250ms. 390 // called OnAllocate multiple times. In old behavior it's called every 250ms.
378 // When there are no network interfaces, each execution of OnAllocate will 391 // When there are no network interfaces, each execution of OnAllocate will
379 // result in SignalCandidatesAllocationDone signal. 392 // result in SignalCandidatesAllocationDone signal.
380 rtc::Thread::Current()->ProcessMessages(1000); 393 rtc::Thread::Current()->ProcessMessages(1000);
381 EXPECT_TRUE(candidate_allocation_done_); 394 EXPECT_TRUE(candidate_allocation_done_);
382 EXPECT_EQ(0U, candidates_.size()); 395 EXPECT_EQ(0U, candidates_.size());
383 } 396 }
384 397
398 // Test that we could use loopback interface as host candidate.
399 TEST_F(PortAllocatorTest, TestLoopbackNetworkInterface) {
400 AddInterface(kLoopbackAddr);
401 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
402 session_->set_flags(cricket::PORTALLOCATOR_DISABLE_STUN |
403 cricket::PORTALLOCATOR_DISABLE_RELAY |
404 cricket::PORTALLOCATOR_DISABLE_TCP);
405 session_->StartGettingPorts();
406 EXPECT_TRUE_WAIT(candidate_allocation_done_, kDefaultAllocationTimeout);
407 EXPECT_EQ(1U, candidates_.size());
408 }
409
385 // Tests that we can get all the desired addresses successfully. 410 // Tests that we can get all the desired addresses successfully.
386 TEST_F(PortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) { 411 TEST_F(PortAllocatorTest, TestGetAllPortsWithMinimumStepDelay) {
387 AddInterface(kClientAddr); 412 AddInterface(kClientAddr);
388 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP)); 413 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
389 session_->StartGettingPorts(); 414 session_->StartGettingPorts();
390 ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout); 415 ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
391 EXPECT_EQ(4U, ports_.size()); 416 EXPECT_EQ(4U, ports_.size());
392 EXPECT_PRED5(CheckCandidate, candidates_[0], 417 EXPECT_PRED5(CheckCandidate, candidates_[0],
393 cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr); 418 cricket::ICE_CANDIDATE_COMPONENT_RTP, "local", "udp", kClientAddr);
394 EXPECT_PRED5(CheckCandidate, candidates_[1], 419 EXPECT_PRED5(CheckCandidate, candidates_[1],
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 526
502 // Test that we should only get STUN and TURN candidates when adapter 527 // Test that we should only get STUN and TURN candidates when adapter
503 // enumeration is disabled. 528 // enumeration is disabled.
504 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNat) { 529 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNat) {
505 AddInterface(kClientAddr); 530 AddInterface(kClientAddr);
506 // GTURN is not configured here. 531 // GTURN is not configured here.
507 ResetWithStunServerAndNat(kStunAddr); 532 ResetWithStunServerAndNat(kStunAddr);
508 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); 533 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
509 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and 534 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and
510 // TURN/UDP candidates. 535 // TURN/UDP candidates.
511 CheckDisableAdapterEnumeration(3U, kNatUdpAddr.ipaddr(), 536 CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
512 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress()); 537 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
513 } 538 }
514 539
515 // Test that even with multiple interfaces, the result should still be one STUN 540 // Test that even with multiple interfaces, the result should still be one STUN
516 // and one TURN candidate since we bind to any address (i.e. all 0s). 541 // and one TURN candidate since we bind to any address (i.e. all 0s).
517 TEST_F(PortAllocatorTest, 542 TEST_F(PortAllocatorTest,
518 TestDisableAdapterEnumerationBehindNatMultipleInterfaces) { 543 TestDisableAdapterEnumerationBehindNatMultipleInterfaces) {
519 AddInterface(kPrivateAddr); 544 AddInterface(kPrivateAddr);
520 AddInterface(kPrivateAddr2); 545 AddInterface(kPrivateAddr2);
521 ResetWithStunServerAndNat(kStunAddr); 546 ResetWithStunServerAndNat(kStunAddr);
522 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); 547 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
523 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and 548 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, and both STUN and
524 // TURN/UDP candidates. 549 // TURN/UDP candidates.
525 CheckDisableAdapterEnumeration(3U, kNatUdpAddr.ipaddr(), 550 CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
526 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress()); 551 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
527 } 552 }
528 553
529 // Test that we should get STUN, TURN/UDP and TURN/TCP candidates when a 554 // Test that we should get STUN, TURN/UDP and TURN/TCP candidates when a
530 // TURN/TCP server is specified. 555 // TURN/TCP server is specified.
531 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNatWithTcp) { 556 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationBehindNatWithTcp) {
532 turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); 557 turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP);
533 AddInterface(kClientAddr); 558 AddInterface(kClientAddr);
534 // GTURN is not configured here. 559 // GTURN is not configured here.
535 ResetWithStunServerAndNat(kStunAddr); 560 ResetWithStunServerAndNat(kStunAddr);
536 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr); 561 AddTurnServers(kTurnUdpIntAddr, kTurnTcpIntAddr);
537 // Expect to see 4 ports - STUN, TURN/UDP, TURN/TCP and TCP port. STUN, 562 // Expect to see 4 ports - STUN, TURN/UDP, TURN/TCP and TCP port. STUN,
538 // TURN/UDP, and TURN/TCP candidates. 563 // TURN/UDP, and TURN/TCP candidates.
539 CheckDisableAdapterEnumeration(4U, kNatUdpAddr.ipaddr(), 564 CheckDisableAdapterEnumeration(4U, rtc::IPAddress(), kNatUdpAddr.ipaddr(),
540 kTurnUdpExtAddr.ipaddr(), 565 kTurnUdpExtAddr.ipaddr(),
541 kTurnUdpExtAddr.ipaddr()); 566 kTurnUdpExtAddr.ipaddr());
542 } 567 }
543 568
544 // Test that we should only get STUN and TURN candidates when adapter 569 // Test that we should only get STUN and TURN candidates when adapter
545 // enumeration is disabled. Since the endpoint is not behind NAT, the srflx 570 // enumeration is disabled. Since the endpoint is not behind NAT, the srflx
546 // address should be the public client interface. 571 // address should be the public client interface.
547 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNat) { 572 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNat) {
548 AddInterfaceAsDefaultRoute(kClientAddr); 573 AddInterfaceAsDefaultRoute(kClientAddr);
549 ResetWithStunServerNoNat(kStunAddr); 574 ResetWithStunServerNoNat(kStunAddr);
550 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress()); 575 AddTurnServers(kTurnUdpIntAddr, rtc::SocketAddress());
551 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, but only both STUN and 576 // Expect to see 3 ports: STUN, TURN/UDP and TCP ports, but only both STUN and
552 // TURN candidates. The STUN candidate should have kClientAddr as srflx 577 // TURN candidates. The STUN candidate should have kClientAddr as srflx
553 // address, and TURN candidate with kClientAddr as the related address. 578 // address, and TURN candidate with kClientAddr as the related address.
554 CheckDisableAdapterEnumeration(3U, kClientAddr.ipaddr(), 579 CheckDisableAdapterEnumeration(3U, rtc::IPAddress(), kClientAddr.ipaddr(),
555 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress()); 580 kTurnUdpExtAddr.ipaddr(), rtc::IPAddress());
556 } 581 }
557 582
558 // Test that when adapter enumeration is disabled, for endpoints without 583 // Test that when adapter enumeration is disabled, for endpoints without
559 // STUN/TURN specified, no candidate is generated. 584 // STUN/TURN specified, no candidate is generated.
560 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNatOrServers) { 585 TEST_F(PortAllocatorTest, TestDisableAdapterEnumerationWithoutNatOrServers) {
561 AddInterfaceAsDefaultRoute(kClientAddr); 586 AddInterfaceAsDefaultRoute(kClientAddr);
562 ResetWithNoServersOrNat(); 587 ResetWithNoServersOrNat();
563 // Expect to see 2 ports: STUN and TCP ports, but no candidate. 588 // Expect to see 2 ports: STUN and TCP ports, but no candidate.
564 CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), rtc::IPAddress(), 589 CheckDisableAdapterEnumeration(2U, rtc::IPAddress(), rtc::IPAddress(),
590 rtc::IPAddress(), rtc::IPAddress());
591 }
592
593 // Test that when adapter enumeration is disabled, with
594 // PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE specified, for endpoints not behind
595 // a NAT, there are a localhost candidate in addition to a STUN candidate.
596 TEST_F(PortAllocatorTest,
597 TestDisableAdapterEnumerationWithoutNatLocalhostCandidateRequested) {
598 AddInterfaceAsDefaultRoute(kClientAddr);
599 ResetWithStunServerNoNat(kStunAddr);
600 EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
601 session_->set_flags(cricket::PORTALLOCATOR_ENABLE_LOCALHOST_CANDIDATE);
602 // Expect to see 2 ports: STUN and TCP ports, localhost candidate and STUN
603 // candidate.
604 CheckDisableAdapterEnumeration(2U, rtc::GetLoopbackIP(AF_INET),
605 kClientAddr.ipaddr(), rtc::IPAddress(),
565 rtc::IPAddress()); 606 rtc::IPAddress());
566 } 607 }
567 608
568 // Disable for asan, see 609 // Disable for asan, see
569 // https://code.google.com/p/webrtc/issues/detail?id=4743 for details. 610 // https://code.google.com/p/webrtc/issues/detail?id=4743 for details.
570 #if !defined(ADDRESS_SANITIZER) 611 #if !defined(ADDRESS_SANITIZER)
571 612
572 // Test that we can get OnCandidatesAllocationDone callback when all the ports 613 // Test that we can get OnCandidatesAllocationDone callback when all the ports
573 // are disabled. 614 // are disabled.
574 TEST_F(PortAllocatorTest, TestDisableAllPorts) { 615 TEST_F(PortAllocatorTest, TestDisableAllPorts) {
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 AllocationSequenceForTest alloc_sequence( 1289 AllocationSequenceForTest alloc_sequence(
1249 static_cast<cricket::BasicPortAllocatorSession*>(session_.get()), 1290 static_cast<cricket::BasicPortAllocatorSession*>(session_.get()),
1250 &network1, &config, flag); 1291 &network1, &config, flag);
1251 // This simply tests it will not crash if udp_socket_ in the 1292 // This simply tests it will not crash if udp_socket_ in the
1252 // AllocationSequence is null, which is chosen in the constructor. 1293 // AllocationSequence is null, which is chosen in the constructor.
1253 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); 1294 cricket::RelayServerConfig relay_server(cricket::RELAY_TURN);
1254 relay_server.ports.push_back( 1295 relay_server.ports.push_back(
1255 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false)); 1296 cricket::ProtocolAddress(kTurnUdpIntAddr, cricket::PROTO_UDP, false));
1256 alloc_sequence.CreateTurnPort(relay_server); 1297 alloc_sequence.CreateTurnPort(relay_server);
1257 } 1298 }
OLDNEW
« no previous file with comments | « webrtc/p2p/client/fakeportallocator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698