Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Unified Diff: src/net/base/mock_host_resolver.cc

Issue 7046011: Merge 84251, 85083, 85188, 85375, 77501. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/696/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/net/base/host_resolver_impl_unittest.cc ('k') | src/net/base/net_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/net/base/mock_host_resolver.cc
===================================================================
--- src/net/base/mock_host_resolver.cc (revision 85857)
+++ src/net/base/mock_host_resolver.cc (working copy)
@@ -4,6 +4,7 @@
#include "net/base/mock_host_resolver.h"
+#include "base/string_split.h"
#include "base/string_util.h"
#include "base/ref_counted.h"
#include "base/threading/platform_thread.h"
@@ -23,23 +24,32 @@
#endif
}
-// Fills |*addrlist| with a socket address for |host| which should be an
-// 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;
+// Fills |*addrlist| with a socket address for |host_list| which should be a
+// comma-separated list of IPv4 or IPv6 literal(s) 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 CreateIPAddressList(const std::string& host_list,
+ const std::string& canonical_name,
+ AddressList* addrlist) {
+ *addrlist = AddressList();
+ std::vector<std::string> addresses;
+ base::SplitString(host_list, ',', &addresses);
+ for (size_t index = 0; index < addresses.size(); ++index) {
+ IPAddressNumber ip_number;
+ if (!ParseIPLiteralToNumber(addresses[index], &ip_number)) {
+ LOG(WARNING) << "Not a supported IP literal: " << addresses[index];
+ return ERR_UNEXPECTED;
+ }
+
+ AddressList result(ip_number, -1, false);
+ struct addrinfo* ai = const_cast<struct addrinfo*>(result.head());
+ if (index == 0)
+ ai->ai_canonname = do_strdup(canonical_name.c_str());
+ if (!addrlist->head())
+ addrlist->Copy(result.head(), false);
+ else
+ addrlist->Append(result.head());
}
-
- AddressList result(ip_number, -1, false);
- struct addrinfo* ai = const_cast<struct addrinfo*>(result.head());
- ai->ai_canonname = do_strdup(canonical_name.c_str());
- *addrlist = result;
return OK;
}
@@ -175,7 +185,8 @@
if (!canonical_name.empty())
flags |= HOST_RESOLVER_CANONNAME;
Rule rule(Rule::kResolverTypeIPLiteral, host_pattern,
- ADDRESS_FAMILY_UNSPECIFIED, flags, ip_literal, canonical_name, 0);
+ ADDRESS_FAMILY_UNSPECIFIED, flags, ip_literal, canonical_name,
+ 0);
rules_.push_back(rule);
}
@@ -244,7 +255,9 @@
host_resolver_flags,
addrlist, os_error);
case Rule::kResolverTypeIPLiteral:
- return CreateIPAddress(effective_host, r->canonical_name, addrlist);
+ return CreateIPAddressList(effective_host,
+ r->canonical_name,
+ addrlist);
default:
NOTREACHED();
return ERR_UNEXPECTED;
« no previous file with comments | « src/net/base/host_resolver_impl_unittest.cc ('k') | src/net/base/net_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698