Update libjingle to CL 53398036.
Review URL: https://webrtc-codereview.appspot.com/2323004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4872 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -32,10 +32,18 @@
|
||||
#include "talk/base/network.h"
|
||||
|
||||
#ifdef POSIX
|
||||
// linux/if.h can't be included at the same time as the posix sys/if.h, and
|
||||
// it's transitively required by linux/route.h, so include that version on
|
||||
// linux instead of the standard posix one.
|
||||
#if defined(ANDROID) || defined(LINUX)
|
||||
#include <linux/if.h>
|
||||
#include <linux/route.h>
|
||||
#else
|
||||
#include <net/if.h>
|
||||
#endif
|
||||
#include <sys/socket.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <net/if.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#ifdef ANDROID
|
||||
@@ -173,7 +181,8 @@ void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks,
|
||||
}
|
||||
|
||||
BasicNetworkManager::BasicNetworkManager()
|
||||
: thread_(NULL), sent_first_update_(false), start_count_(0) {
|
||||
: thread_(NULL), sent_first_update_(false), start_count_(0),
|
||||
ignore_non_default_routes_(false) {
|
||||
}
|
||||
|
||||
BasicNetworkManager::~BasicNetworkManager() {
|
||||
@@ -397,14 +406,52 @@ bool BasicNetworkManager::CreateNetworks(bool include_ignored,
|
||||
}
|
||||
#endif // WIN32
|
||||
|
||||
bool BasicNetworkManager::IsIgnoredNetwork(const Network& network) {
|
||||
#if defined(ANDROID) || defined(LINUX)
|
||||
bool IsDefaultRoute(const std::string& network_name) {
|
||||
FileStream fs;
|
||||
if (!fs.Open("/proc/net/route", "r", NULL)) {
|
||||
LOG(LS_WARNING) << "Couldn't read /proc/net/route, skipping default "
|
||||
<< "route check (assuming everything is a default route).";
|
||||
return true;
|
||||
} else {
|
||||
std::string line;
|
||||
while (fs.ReadLine(&line) == SR_SUCCESS) {
|
||||
char iface_name[256];
|
||||
unsigned int iface_ip, iface_gw, iface_mask, iface_flags;
|
||||
if (sscanf(line.c_str(),
|
||||
"%255s %8X %8X %4X %*d %*u %*d %8X",
|
||||
iface_name, &iface_ip, &iface_gw,
|
||||
&iface_flags, &iface_mask) == 5 &&
|
||||
network_name == iface_name &&
|
||||
iface_mask == 0 &&
|
||||
(iface_flags & (RTF_UP | RTF_HOST)) == RTF_UP) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool BasicNetworkManager::IsIgnoredNetwork(const Network& network) const {
|
||||
// Ignore networks on the explicit ignore list.
|
||||
for (size_t i = 0; i < network_ignore_list_.size(); ++i) {
|
||||
if (network.name() == network_ignore_list_[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#ifdef POSIX
|
||||
// Ignore local networks (lo, lo0, etc)
|
||||
// Also filter out VMware interfaces, typically named vmnet1 and vmnet8
|
||||
// Filter out VMware interfaces, typically named vmnet1 and vmnet8
|
||||
if (strncmp(network.name().c_str(), "vmnet", 5) == 0 ||
|
||||
strncmp(network.name().c_str(), "vnic", 4) == 0) {
|
||||
return true;
|
||||
}
|
||||
#if defined(ANDROID) || defined(LINUX)
|
||||
// Make sure this is a default route, if we're ignoring non-defaults.
|
||||
if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
#elif defined(WIN32)
|
||||
// Ignore any HOST side vmware adapters with a description like:
|
||||
// VMware Virtual Ethernet Adapter for VMnet1
|
||||
|
Reference in New Issue
Block a user