Chromium Code Reviews| Index: net/base/net_util.cc |
| diff --git a/net/base/net_util.cc b/net/base/net_util.cc |
| index a850eb8b9031edb1bf495695d9a9819ed9a8fa90..959ee29a50cb73bb68b1afb11f2688a7aab47396 100644 |
| --- a/net/base/net_util.cc |
| +++ b/net/base/net_util.cc |
| @@ -2111,6 +2111,40 @@ int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { |
| return ntohs(*port_field); |
| } |
| +bool IsLocalhost(const std::string& host) { |
| + if (host == "localhost" || |
| + host == "localhost.localdomain" || |
| + host == "localhost6" || |
| + host == "localhost6.localdomain6") |
| + return true; |
| + |
| + IPAddressNumber ip_number; |
| + if (ParseIPLiteralToNumber(host, &ip_number)) { |
| + size_t size = ip_number.size(); |
| + switch (size) { |
| + case kIPv4AddressSize: { |
| + IPAddressNumber localhost_prefix; |
| + localhost_prefix.push_back(127); |
| + for (int i = 0; i < 3; ++i) { |
| + localhost_prefix.push_back(0); |
| + } |
| + return IPNumberMatchesPrefix(ip_number, localhost_prefix, 8); |
| + } |
| + |
| + case kIPv6AddressSize: { |
| + struct in6_addr sin6_addr; |
| + memcpy(&sin6_addr, &ip_number[0], kIPv6AddressSize); |
| + return IN6_IS_ADDR_LOOPBACK(&sin6_addr) != FALSE; |
|
wtc
2011/03/28 22:08:19
The != FALSE part should be unnecessary. I know w
|
| + } |
| + |
| + default: |
| + NOTREACHED(); |
| + } |
| + } |
| + |
| + return false; |
| +} |
| + |
| NetworkInterface::NetworkInterface() { |
| } |