GetDefaultLocalAddress should return false when the address is invalid
BUG= R=pthatcher@webrtc.org Review URL: https://codereview.webrtc.org/1471203002 . Cr-Commit-Position: refs/heads/master@{#10779}
This commit is contained in:
@ -345,10 +345,10 @@ void NetworkManagerBase::set_default_local_addresses(const IPAddress& ipv4,
|
|||||||
|
|
||||||
bool NetworkManagerBase::GetDefaultLocalAddress(int family,
|
bool NetworkManagerBase::GetDefaultLocalAddress(int family,
|
||||||
IPAddress* ipaddr) const {
|
IPAddress* ipaddr) const {
|
||||||
if (family == AF_INET) {
|
if (family == AF_INET && !default_local_ipv4_address_.IsNil()) {
|
||||||
*ipaddr = default_local_ipv4_address_;
|
*ipaddr = default_local_ipv4_address_;
|
||||||
return true;
|
return true;
|
||||||
} else if (family == AF_INET6) {
|
} else if (family == AF_INET6 && !default_local_ipv6_address_.IsNil()) {
|
||||||
*ipaddr = default_local_ipv6_address_;
|
*ipaddr = default_local_ipv6_address_;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,7 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> {
|
|||||||
class TestBasicNetworkManager : public BasicNetworkManager {
|
class TestBasicNetworkManager : public BasicNetworkManager {
|
||||||
public:
|
public:
|
||||||
using BasicNetworkManager::QueryDefaultLocalAddress;
|
using BasicNetworkManager::QueryDefaultLocalAddress;
|
||||||
|
using BasicNetworkManager::set_default_local_addresses;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test that the Network ctor works properly.
|
// Test that the Network ctor works properly.
|
||||||
@ -848,9 +849,17 @@ TEST_F(NetworkTest, TestNetworkMonitoring) {
|
|||||||
NetworkMonitorFactory::ReleaseFactory(factory);
|
NetworkMonitorFactory::ReleaseFactory(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(NetworkTest, DefaultPrivateAddress) {
|
TEST_F(NetworkTest, DefaultLocalAddress) {
|
||||||
TestBasicNetworkManager manager;
|
TestBasicNetworkManager manager;
|
||||||
manager.StartUpdating();
|
manager.StartUpdating();
|
||||||
|
IPAddress ip;
|
||||||
|
|
||||||
|
// GetDefaultLocalAddress should return false when not set.
|
||||||
|
EXPECT_FALSE(manager.GetDefaultLocalAddress(AF_INET, &ip));
|
||||||
|
EXPECT_FALSE(manager.GetDefaultLocalAddress(AF_INET6, &ip));
|
||||||
|
|
||||||
|
// Make sure we can query default local address when an address for such
|
||||||
|
// address family exists.
|
||||||
std::vector<Network*> networks;
|
std::vector<Network*> networks;
|
||||||
manager.GetNetworks(&networks);
|
manager.GetNetworks(&networks);
|
||||||
for (auto& network : networks) {
|
for (auto& network : networks) {
|
||||||
@ -860,6 +869,14 @@ TEST_F(NetworkTest, DefaultPrivateAddress) {
|
|||||||
EXPECT_TRUE(manager.QueryDefaultLocalAddress(AF_INET6) != IPAddress());
|
EXPECT_TRUE(manager.QueryDefaultLocalAddress(AF_INET6) != IPAddress());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultLocalAddress should return the valid default address after set.
|
||||||
|
manager.set_default_local_addresses(GetLoopbackIP(AF_INET),
|
||||||
|
GetLoopbackIP(AF_INET6));
|
||||||
|
EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET, &ip));
|
||||||
|
EXPECT_EQ(ip, GetLoopbackIP(AF_INET));
|
||||||
|
EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET6, &ip));
|
||||||
|
EXPECT_EQ(ip, GetLoopbackIP(AF_INET6));
|
||||||
manager.StopUpdating();
|
manager.StopUpdating();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,10 +416,12 @@ bool UDPPort::MaybeSetDefaultLocalAddress(rtc::SocketAddress* addr) const {
|
|||||||
bool result =
|
bool result =
|
||||||
Network()->default_local_address_provider()->GetDefaultLocalAddress(
|
Network()->default_local_address_provider()->GetDefaultLocalAddress(
|
||||||
addr->family(), &default_address);
|
addr->family(), &default_address);
|
||||||
if (!result || default_address.IsNil()) {
|
if (!result) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RTC_DCHECK(!default_address.IsNil())
|
||||||
|
|
||||||
addr->SetIP(default_address);
|
addr->SetIP(default_address);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user