diff options
Diffstat (limited to 'net/base/host_resolver.cc')
-rw-r--r-- | net/base/host_resolver.cc | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/net/base/host_resolver.cc b/net/base/host_resolver.cc index ab706b3..d3b054f 100644 --- a/net/base/host_resolver.cc +++ b/net/base/host_resolver.cc @@ -26,8 +26,15 @@ namespace net { //----------------------------------------------------------------------------- -static int ResolveAddrInfo(const std::string& host, const std::string& port, - struct addrinfo** results) { +static HostMapper* host_mapper; + +HostMapper* SetHostMapper(HostMapper* value) { + std::swap(host_mapper, value); + return value; +} + +static int HostResolverProc( + const std::string& host, const std::string& port, struct addrinfo** out) { struct addrinfo hints = {0}; hints.ai_family = PF_UNSPEC; hints.ai_flags = AI_ADDRCONFIG; @@ -35,10 +42,21 @@ static int ResolveAddrInfo(const std::string& host, const std::string& port, // Restrict result set to only this socket type to avoid duplicates. hints.ai_socktype = SOCK_STREAM; - int err = getaddrinfo(host.c_str(), port.c_str(), &hints, results); + int err = getaddrinfo(host.c_str(), port.c_str(), &hints, out); return err ? ERR_NAME_NOT_RESOLVED : OK; } +static int ResolveAddrInfo( + const std::string& host, const std::string& port, struct addrinfo** out) { + int rv; + if (host_mapper) { + rv = HostResolverProc(host_mapper->Map(host), port, out); + } else { + rv = HostResolverProc(host, port, out); + } + return rv; +} + //----------------------------------------------------------------------------- class HostResolver::Request : |