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 12namespace net { 13 14MappedHostResolver::MappedHostResolver(scoped_ptr<HostResolver> impl) 15 : impl_(impl.Pass()) { 16} 17 18MappedHostResolver::~MappedHostResolver() { 19} 20 21int 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 35int 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 46void MappedHostResolver::CancelRequest(RequestHandle req) { 47 impl_->CancelRequest(req); 48} 49 50void MappedHostResolver::SetDnsClientEnabled(bool enabled) { 51 impl_->SetDnsClientEnabled(enabled); 52} 53 54HostCache* MappedHostResolver::GetHostCache() { 55 return impl_->GetHostCache(); 56} 57 58base::Value* MappedHostResolver::GetDnsConfigAsValue() const { 59 return impl_->GetDnsConfigAsValue(); 60} 61 62int 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