| Index: webrtc/p2p/base/stunport.cc
|
| diff --git a/webrtc/p2p/base/stunport.cc b/webrtc/p2p/base/stunport.cc
|
| index 953e5854447b05c8249ae1d356aa0ee818689509..32d7355c0916d9c7dc0358b22f92f503fd2e9bdd 100644
|
| --- a/webrtc/p2p/base/stunport.cc
|
| +++ b/webrtc/p2p/base/stunport.cc
|
| @@ -15,6 +15,7 @@
|
| #include "webrtc/p2p/base/stun.h"
|
| #include "webrtc/base/common.h"
|
| #include "webrtc/base/helpers.h"
|
| +#include "webrtc/base/ipaddress.h"
|
| #include "webrtc/base/logging.h"
|
| #include "webrtc/base/nethelpers.h"
|
|
|
| @@ -164,14 +165,16 @@ UDPPort::UDPPort(rtc::Thread* thread,
|
| rtc::AsyncPacketSocket* socket,
|
| const std::string& username,
|
| const std::string& password,
|
| - const std::string& origin)
|
| + const std::string& origin,
|
| + bool emit_localhost_for_anyaddress)
|
| : Port(thread, factory, network, socket->GetLocalAddress().ipaddr(),
|
| username, password),
|
| requests_(thread),
|
| socket_(socket),
|
| error_(0),
|
| ready_(false),
|
| - stun_keepalive_delay_(KEEPALIVE_DELAY) {
|
| + stun_keepalive_delay_(KEEPALIVE_DELAY),
|
| + emit_localhost_for_anyaddress_(emit_localhost_for_anyaddress) {
|
| requests_.set_origin(origin);
|
| }
|
|
|
| @@ -183,14 +186,16 @@ UDPPort::UDPPort(rtc::Thread* thread,
|
| uint16 max_port,
|
| const std::string& username,
|
| const std::string& password,
|
| - const std::string& origin)
|
| + const std::string& origin,
|
| + bool emit_localhost_for_anyaddress)
|
| : Port(thread, LOCAL_PORT_TYPE, factory, network, ip, min_port, max_port,
|
| username, password),
|
| requests_(thread),
|
| socket_(NULL),
|
| error_(0),
|
| ready_(false),
|
| - stun_keepalive_delay_(KEEPALIVE_DELAY) {
|
| + stun_keepalive_delay_(KEEPALIVE_DELAY),
|
| + emit_localhost_for_anyaddress_(emit_localhost_for_anyaddress) {
|
| requests_.set_origin(origin);
|
| }
|
|
|
| @@ -280,9 +285,17 @@ int UDPPort::GetError() {
|
|
|
| void UDPPort::OnLocalAddressReady(rtc::AsyncPacketSocket* socket,
|
| const rtc::SocketAddress& address) {
|
| - AddAddress(address, address, rtc::SocketAddress(),
|
| - UDP_PROTOCOL_NAME, "", LOCAL_PORT_TYPE,
|
| - ICE_TYPE_PREFERENCE_HOST, 0, false);
|
| + // When adapter enumeration is disabled and binding to the any address, the
|
| + // loopback address will be issued as a candidate instead if
|
| + // |emit_localhost_for_anyaddress| is true. This is to allow connectivity on
|
| + // demo pages without STUN/TURN to work.
|
| + rtc::SocketAddress addr = address;
|
| + if (addr.IsAnyIP() && emit_localhost_for_anyaddress_) {
|
| + addr.SetIP(rtc::GetLoopbackIP(addr.family()));
|
| + }
|
| +
|
| + AddAddress(addr, addr, rtc::SocketAddress(), UDP_PROTOCOL_NAME, "",
|
| + LOCAL_PORT_TYPE, ICE_TYPE_PREFERENCE_HOST, 0, false);
|
| MaybePrepareStunCandidate();
|
| }
|
|
|
|
|