diff options
Diffstat (limited to 'net/base/mock_host_resolver.cc')
-rw-r--r-- | net/base/mock_host_resolver.cc | 86 |
1 files changed, 26 insertions, 60 deletions
diff --git a/net/base/mock_host_resolver.cc b/net/base/mock_host_resolver.cc index b16b304..1ee9bb1 100644 --- a/net/base/mock_host_resolver.cc +++ b/net/base/mock_host_resolver.cc @@ -7,54 +7,35 @@ #include "base/string_util.h" #include "base/platform_thread.h" #include "base/ref_counted.h" -#include "googleurl/src/url_canon_ip.h" #include "net/base/net_errors.h" +#include "net/base/net_util.h" namespace net { namespace { // Fills |*addrlist| with a socket address for |host| which should be an -// IPv6 literal without enclosing brackets. If |canonical_name| is non-empty -// it is used as the DNS canonical name for the host. Returns OK on success, -// ERR_UNEXPECTED otherwise. -int CreateIPv6Address(const std::string& host, - const std::string& canonical_name, - AddressList* addrlist) { - // GURL expects the hostname to be surrounded with brackets. - std::string host_brackets = "[" + host + "]"; - url_parse::Component host_comp(0, host_brackets.size()); - - // Try parsing the hostname as an IPv6 literal. - unsigned char ipv6_addr[16]; // 128 bits. - bool ok = url_canon::IPv6AddressToNumber(host_brackets.data(), - host_comp, - ipv6_addr); - if (!ok) { - LOG(WARNING) << "Not an IPv6 literal: " << host; +// IPv4 or IPv6 literal without enclosing brackets. If |canonical_name| is +// non-empty it is used as the DNS canonical name for the host. Returns OK on +// success, ERR_UNEXPECTED otherwise. +int CreateIPAddress(const std::string& host, + const std::string& canonical_name, + AddressList* addrlist) { + IPAddressNumber ip_number; + if (!ParseIPLiteralToNumber(host, &ip_number)) { + LOG(WARNING) << "Not a supported IP literal: " << host; return ERR_UNEXPECTED; } - *addrlist = AddressList::CreateIPv6Address(ipv6_addr, canonical_name); - return OK; -} - -// Fills |*addrlist| with a socket address for |host| which should be an -// IPv4 literal. If |canonical_name| is non-empty it is used as the DNS -// canonical name for the host. Returns OK on success, ERR_UNEXPECTED otherwise. -int CreateIPv4Address(const std::string& host, - const std::string& canonical_name, - AddressList* addrlist) { - unsigned char ipv4_addr[4]; - url_parse::Component host_comp(0, host.size()); - int num_components; - url_canon::CanonHostInfo::Family family = url_canon::IPv4AddressToNumber( - host.data(), host_comp, ipv4_addr, &num_components); - if (family != url_canon::CanonHostInfo::IPV4) { - LOG(WARNING) << "Not an IPv4 literal: " << host; + if (ip_number.size() == 4) { + *addrlist = AddressList::CreateIPv4Address(&ip_number[0], canonical_name); + } else if (ip_number.size() == 16) { + *addrlist = AddressList::CreateIPv6Address(&ip_number[0], canonical_name); + } else { + NOTREACHED(); return ERR_UNEXPECTED; } - *addrlist = AddressList::CreateIPv4Address(ipv4_addr, canonical_name); + return OK; } @@ -126,8 +107,7 @@ struct RuleBasedHostResolverProc::Rule { enum ResolverType { kResolverTypeFail, kResolverTypeSystem, - kResolverTypeIPV6Literal, - kResolverTypeIPV4Literal, + kResolverTypeIPLiteral, }; ResolverType resolver_type; @@ -177,27 +157,15 @@ void RuleBasedHostResolverProc::AddRuleForAddressFamily( rules_.push_back(rule); } -void RuleBasedHostResolverProc::AddIPv4Rule(const std::string& host_pattern, - const std::string& ipv4_literal, - const std::string& canonical_name) { - Rule rule(Rule::kResolverTypeIPV4Literal, - host_pattern, - ADDRESS_FAMILY_UNSPECIFIED, - canonical_name.empty() ? 0 : HOST_RESOLVER_CANONNAME, - ipv4_literal, - canonical_name, - 0); - rules_.push_back(rule); -} - -void RuleBasedHostResolverProc::AddIPv6Rule(const std::string& host_pattern, - const std::string& ipv6_literal, - const std::string& canonical_name) { - Rule rule(Rule::kResolverTypeIPV6Literal, +void RuleBasedHostResolverProc::AddIPLiteralRule( + const std::string& host_pattern, + const std::string& ip_literal, + const std::string& canonical_name) { + Rule rule(Rule::kResolverTypeIPLiteral, host_pattern, ADDRESS_FAMILY_UNSPECIFIED, canonical_name.empty() ? 0 : HOST_RESOLVER_CANONNAME, - ipv6_literal, + ip_literal, canonical_name, 0); rules_.push_back(rule); @@ -261,10 +229,8 @@ int RuleBasedHostResolverProc::Resolve(const std::string& host, address_family, host_resolver_flags, addrlist, os_error); - case Rule::kResolverTypeIPV6Literal: - return CreateIPv6Address(effective_host, r->canonical_name, addrlist); - case Rule::kResolverTypeIPV4Literal: - return CreateIPv4Address(effective_host, r->canonical_name, addrlist); + case Rule::kResolverTypeIPLiteral: + return CreateIPAddress(effective_host, r->canonical_name, addrlist); default: NOTREACHED(); return ERR_UNEXPECTED; |