summaryrefslogtreecommitdiffstats
path: root/net/base/mock_host_resolver.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/base/mock_host_resolver.cc')
-rw-r--r--net/base/mock_host_resolver.cc86
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;