Enable IPv6 temporary address filtering on iOS.
We'll only use temporary address for IPv6. However, due to a bug in iOS sdk, the necessary headers are not included. This change copies the minimum necessary definitions such that we could retrieve the ip attributes. BUG=webrtc:4343 Review URL: https://codereview.webrtc.org/1531763006 Cr-Commit-Position: refs/heads/master@{#11114}
This commit is contained in:
@ -15,12 +15,9 @@
|
||||
#include <vector>
|
||||
#if defined(WEBRTC_POSIX)
|
||||
#include <sys/types.h>
|
||||
#if !defined(WEBRTC_ANDROID)
|
||||
#include <ifaddrs.h>
|
||||
#else
|
||||
#include "webrtc/base/ifaddrs-android.h"
|
||||
#endif
|
||||
#endif
|
||||
#include <net/if.h>
|
||||
#include "webrtc/base/ifaddrs_converter.h"
|
||||
#endif // defined(WEBRTC_POSIX)
|
||||
#include "webrtc/base/gunit.h"
|
||||
#if defined(WEBRTC_WIN)
|
||||
#include "webrtc/base/logging.h" // For LOG_GLE
|
||||
@ -28,6 +25,8 @@
|
||||
|
||||
namespace rtc {
|
||||
|
||||
namespace {
|
||||
|
||||
class FakeNetworkMonitor : public NetworkMonitorBase {
|
||||
public:
|
||||
void Start() override {}
|
||||
@ -42,6 +41,8 @@ class FakeNetworkMonitorFactory : public NetworkMonitorFactory {
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
class NetworkTest : public testing::Test, public sigslot::has_slots<> {
|
||||
public:
|
||||
NetworkTest() : callback_called_(false) {}
|
||||
@ -89,7 +90,10 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> {
|
||||
struct ifaddrs* interfaces,
|
||||
bool include_ignored,
|
||||
NetworkManager::NetworkList* networks) {
|
||||
network_manager.ConvertIfAddrs(interfaces, include_ignored, networks);
|
||||
// Use the base IfAddrsConverter for test cases.
|
||||
rtc::scoped_ptr<IfAddrsConverter> ifaddrs_converter(new IfAddrsConverter());
|
||||
network_manager.ConvertIfAddrs(interfaces, ifaddrs_converter.get(),
|
||||
include_ignored, networks);
|
||||
}
|
||||
|
||||
struct sockaddr_in6* CreateIpv6Addr(const std::string& ip_string,
|
||||
@ -118,6 +122,7 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> {
|
||||
if_addr->ifa_netmask =
|
||||
reinterpret_cast<struct sockaddr*>(CreateIpv6Addr(ipv6_netmask, 0));
|
||||
if_addr->ifa_next = list;
|
||||
if_addr->ifa_flags = IFF_RUNNING;
|
||||
return if_addr;
|
||||
}
|
||||
|
||||
@ -762,6 +767,21 @@ TEST_F(NetworkTest, TestConvertIfAddrsMultiAddressesOnOneInterface) {
|
||||
MergeNetworkList(manager, result, &changed);
|
||||
ReleaseIfAddrs(list);
|
||||
}
|
||||
|
||||
TEST_F(NetworkTest, TestConvertIfAddrsNotRunning) {
|
||||
ifaddrs list;
|
||||
memset(&list, 0, sizeof(list));
|
||||
list.ifa_name = const_cast<char*>("test_iface");
|
||||
sockaddr ifa_addr;
|
||||
sockaddr ifa_netmask;
|
||||
list.ifa_addr = &ifa_addr;
|
||||
list.ifa_netmask = &ifa_netmask;
|
||||
|
||||
NetworkManager::NetworkList result;
|
||||
BasicNetworkManager manager;
|
||||
CallConvertIfAddrs(manager, &list, true, &result);
|
||||
EXPECT_TRUE(result.empty());
|
||||
}
|
||||
#endif // defined(WEBRTC_POSIX)
|
||||
|
||||
#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
|
||||
|
||||
Reference in New Issue
Block a user