1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/dns/mapped_host_resolver.h" 6 7 #include "base/strings/string_util.h" 8 #include "net/base/host_port_pair.h" 9 #include "net/base/net_errors.h" 10 #include "net/base/net_util.h" 11 12 namespace net { 13 14 MappedHostResolver::MappedHostResolver(scoped_ptr<HostResolver> impl) 15 : impl_(impl.Pass()) { 16 } 17 18 MappedHostResolver::~MappedHostResolver() { 19 } 20 21 int MappedHostResolver::Resolve(const RequestInfo& original_info, 22 RequestPriority priority, 23 AddressList* addresses, 24 const CompletionCallback& callback, 25 RequestHandle* out_req, 26 const BoundNetLog& net_log) { 27 RequestInfo info = original_info; 28 int rv = ApplyRules(&info); 29 if (rv != OK) 30 return rv; 31 32 return impl_->Resolve(info, priority, addresses, callback, out_req, net_log); 33 } 34 35 int MappedHostResolver::ResolveFromCache(const RequestInfo& original_info, 36 AddressList* addresses, 37 const BoundNetLog& net_log) { 38 RequestInfo info = original_info; 39 int rv = ApplyRules(&info); 40 if (rv != OK) 41 return rv; 42 43 return impl_->ResolveFromCache(info, addresses, net_log); 44 } 45 46 void MappedHostResolver::CancelRequest(RequestHandle req) { 47 impl_->CancelRequest(req); 48 } 49 50 void MappedHostResolver::SetDnsClientEnabled(bool enabled) { 51 impl_->SetDnsClientEnabled(enabled); 52 } 53 54 HostCache* MappedHostResolver::GetHostCache() { 55 return impl_->GetHostCache(); 56 } 57 58 base::Value* MappedHostResolver::GetDnsConfigAsValue() const { 59 return impl_->GetDnsConfigAsValue(); 60 } 61 62 int MappedHostResolver::ApplyRules(RequestInfo* info) const { 63 HostPortPair host_port(info->host_port_pair()); 64 if (rules_.RewriteHost(&host_port)) { 65 if (host_port.host() == "~NOTFOUND") 66 return ERR_NAME_NOT_RESOLVED; 67 info->set_host_port_pair(host_port); 68 } 69 return OK; 70 } 71 72 } // namespace net 73