mapped_host_resolver.cc revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mapped_host_resolver.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/host_port_pair.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MappedHostResolver::MappedHostResolver(scoped_ptr<HostResolver> impl) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : impl_(impl.Pass()) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MappedHostResolver::~MappedHostResolver() { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int MappedHostResolver::Resolve(const RequestInfo& original_info, 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RequestPriority priority, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressList* addresses, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CompletionCallback& callback, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestHandle* out_req, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BoundNetLog& net_log) { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RequestInfo info = original_info; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv = ApplyRules(&info); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (rv != OK) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rv; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return impl_->Resolve(info, priority, addresses, callback, out_req, net_log); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int MappedHostResolver::ResolveFromCache(const RequestInfo& original_info, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressList* addresses, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BoundNetLog& net_log) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RequestInfo info = original_info; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv = ApplyRules(&info); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (rv != OK) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rv; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return impl_->ResolveFromCache(info, addresses, net_log); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MappedHostResolver::CancelRequest(RequestHandle req) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) impl_->CancelRequest(req); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void MappedHostResolver::SetDnsClientEnabled(bool enabled) { 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) impl_->SetDnsClientEnabled(enabled); 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostCache* MappedHostResolver::GetHostCache() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return impl_->GetHostCache(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)base::Value* MappedHostResolver::GetDnsConfigAsValue() const { 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return impl_->GetDnsConfigAsValue(); 600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int MappedHostResolver::ApplyRules(RequestInfo* info) const { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostPortPair host_port(info->host_port_pair()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (rules_.RewriteHost(&host_port)) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (host_port.host() == "~NOTFOUND") 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ERR_NAME_NOT_RESOLVED; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) info->set_host_port_pair(host_port); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return OK; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 73