summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/renderer/p2p/ipc_network_manager.cc24
1 files changed, 20 insertions, 4 deletions
diff --git a/content/renderer/p2p/ipc_network_manager.cc b/content/renderer/p2p/ipc_network_manager.cc
index f702e9e..1c9acb9 100644
--- a/content/renderer/p2p/ipc_network_manager.cc
+++ b/content/renderer/p2p/ipc_network_manager.cc
@@ -80,10 +80,10 @@ void IpcNetworkManager::OnNetworkListChanged(
if (!network_list_received_)
network_list_received_ = true;
- // Update the default local interfaces.
- set_default_local_addresses(
- jingle_glue::IPAddressNumberToIPAddress(default_ipv4_local_address),
- jingle_glue::IPAddressNumberToIPAddress(default_ipv6_local_address));
+ // Default addresses should be set only when they are in the filtered list of
+ // network addresses.
+ bool use_default_ipv4_address = false;
+ bool use_default_ipv6_address = false;
// rtc::Network uses these prefix_length to compare network
// interfaces discovered.
@@ -102,6 +102,7 @@ void IpcNetworkManager::OnNetworkListChanged(
rtc::InterfaceAddress iface_addr;
if (it->address.size() == net::kIPv4AddressSize) {
+ use_default_ipv4_address |= (default_ipv4_local_address == it->address);
iface_addr = rtc::InterfaceAddress(ip_address);
} else {
DCHECK(it->address.size() == net::kIPv6AddressSize);
@@ -114,11 +115,26 @@ void IpcNetworkManager::OnNetworkListChanged(
rtc::IPIsPrivate(iface_addr)) {
continue;
}
+
+ use_default_ipv6_address |= (default_ipv6_local_address == it->address);
}
network->AddIP(iface_addr);
networks.push_back(network.release());
}
+ // Update the default local addresses.
+ rtc::IPAddress ipv4_default;
+ rtc::IPAddress ipv6_defualt;
+ if (use_default_ipv4_address) {
+ ipv4_default =
+ jingle_glue::IPAddressNumberToIPAddress(default_ipv4_local_address);
+ }
+ if (use_default_ipv6_address) {
+ ipv6_defualt =
+ jingle_glue::IPAddressNumberToIPAddress(default_ipv6_local_address);
+ }
+ set_default_local_addresses(ipv4_default, ipv6_defualt);
+
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAllowLoopbackInPeerConnection)) {
std::string name_v4("loopback_ipv4");