Index: net/base/net_util.cc |
=================================================================== |
--- net/base/net_util.cc (revision 39997) |
+++ net/base/net_util.cc (working copy) |
@@ -21,11 +21,9 @@ |
#include <ws2tcpip.h> |
#include <wspiapi.h> // Needed for Win2k compat. |
#elif defined(OS_POSIX) |
-#include <fcntl.h> |
-#include <ifaddrs.h> |
#include <netdb.h> |
-#include <net/if.h> |
#include <sys/socket.h> |
+#include <fcntl.h> |
#endif |
#include "base/base64.h" |
@@ -259,7 +257,7 @@ |
bool DecodeWord(const std::string& encoded_word, |
const std::string& referrer_charset, |
- bool* is_rfc2047, |
+ bool *is_rfc2047, |
std::string* output) { |
if (!IsStringASCII(encoded_word)) { |
// Try UTF-8, referrer_charset and the native OS default charset in turn. |
@@ -1543,21 +1541,15 @@ |
enum IPv6SupportStatus { |
IPV6_CANNOT_CREATE_SOCKETS, |
IPV6_CAN_CREATE_SOCKETS, |
- IPV6_GETIFADDRS_FAILED, |
- IPV6_GLOBAL_ADDRESS_MISSING, |
- IPV6_GLOBAL_ADDRESS_PRESENT, |
IPV6_SUPPORT_MAX // Bounding values for enumeration. |
}; |
static void IPv6SupportResults(IPv6SupportStatus result) { |
static bool run_once = false; |
- if (run_once) { |
- run_once = true; |
- UMA_HISTOGRAM_ENUMERATION("Net.IPv6Status", result, IPV6_SUPPORT_MAX); |
- } else { |
- UMA_HISTOGRAM_ENUMERATION("Net.IPv6Status_retest", result, |
- IPV6_SUPPORT_MAX); |
- } |
+ if (run_once) |
+ return; |
+ run_once = true; |
+ UMA_HISTOGRAM_ENUMERATION("Net.IPv6Status", result, IPV6_SUPPORT_MAX); |
} |
// TODO(jar): The following is a simple estimate of IPv6 support. We may need |
@@ -1565,58 +1557,27 @@ |
// static |
bool IPv6Supported() { |
#if defined(OS_POSIX) |
- int test_socket = socket(AF_INET6, SOCK_STREAM, 0); |
+ int test_socket; |
+ |
+ test_socket = socket(AF_INET6, SOCK_STREAM, 0); |
if (test_socket == -1) { |
IPv6SupportResults(IPV6_CANNOT_CREATE_SOCKETS); |
return false; |
} |
- close(test_socket); |
- // Check to see if any interface has a IPv6 address. |
- struct ifaddrs* interface_addr = NULL; |
- int rv = getifaddrs(&interface_addr); |
- if (rv != 0) { |
- IPv6SupportResults(IPV6_GETIFADDRS_FAILED); |
- return true; // Don't yet block IPv6. |
- } |
- |
- bool found_ipv6 = false; |
- for (struct ifaddrs* interface = interface_addr; |
- interface != NULL; |
- interface = interface->ifa_next) { |
- if (!(IFF_UP & interface->ifa_flags)) |
- continue; |
- if (IFF_LOOPBACK & interface->ifa_flags) |
- continue; |
- struct sockaddr* addr = interface->ifa_addr; |
- if (!addr) |
- continue; |
- if (addr->sa_family != AF_INET6) |
- continue; |
- // Safe cast since this is AF_INET6. |
- struct sockaddr_in6* addr_in6 = |
- reinterpret_cast<struct sockaddr_in6*>(addr); |
- struct in6_addr* sin6_addr = &addr_in6->sin6_addr; |
- if (IN6_IS_ADDR_LOOPBACK(sin6_addr) || IN6_IS_ADDR_LINKLOCAL(sin6_addr)) |
- continue; |
- found_ipv6 = true; |
- break; |
- } |
- freeifaddrs(interface_addr); |
- if (!found_ipv6) { |
- IPv6SupportResults(IPV6_GLOBAL_ADDRESS_MISSING); |
- return false; |
- } |
- |
- IPv6SupportResults(IPV6_GLOBAL_ADDRESS_PRESENT); |
+ close(test_socket); |
+ IPv6SupportResults(IPV6_CAN_CREATE_SOCKETS); |
return true; |
#elif defined(OS_WIN) |
EnsureWinsockInit(); |
- SOCKET test_socket = socket(AF_INET6, SOCK_STREAM, 0); |
+ SOCKET test_socket; |
+ |
+ test_socket = socket(AF_INET6, SOCK_STREAM, 0); |
if (test_socket == INVALID_SOCKET) { |
IPv6SupportResults(IPV6_CANNOT_CREATE_SOCKETS); |
return false; |
} |
+ |
closesocket(test_socket); |
IPv6SupportResults(IPV6_CAN_CREATE_SOCKETS); |
return true; |
@@ -1626,4 +1587,5 @@ |
#endif // defined(various platforms) |
} |
+ |
} // namespace net |