OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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/host_resolver_mojo.h" |
| 6 |
| 7 #include "net/base/net_errors.h" |
| 8 |
| 9 namespace net { |
| 10 |
| 11 class HostResolverMojo::Job |
| 12 : public mojo::InterfaceImpl<dns::ResolveRequestClient> { |
| 13 public: |
| 14 Job(AddressList* addresses, const CompletionCallback& callback); |
| 15 |
| 16 private: |
| 17 void ReportResult(dns::AddressListPtr address_list) override; |
| 18 void ReportError(int32_t error) override; |
| 19 |
| 20 void OnConnectionError() override; |
| 21 |
| 22 AddressList* addresses_; |
| 23 CompletionCallback callback_; |
| 24 }; |
| 25 |
| 26 HostResolverMojo::HostResolverMojo(dns::ResolverPtr resolver) |
| 27 : resolver_(resolver.Pass()) { |
| 28 } |
| 29 |
| 30 HostResolverMojo::~HostResolverMojo() = default; |
| 31 |
| 32 int HostResolverMojo::Resolve(const RequestInfo& info, |
| 33 RequestPriority priority, |
| 34 AddressList* addresses, |
| 35 const CompletionCallback& callback, |
| 36 RequestHandle* out_req, |
| 37 const BoundNetLog& source_net_log) { |
| 38 VLOG(1) << "Resolve " << info.host_port_pair().ToString(); |
| 39 mojo::InterfacePtr<dns::ResolveRequestClient> handle; |
| 40 *out_req = mojo::WeakBindToProxy(new Job(addresses, callback), &handle); |
| 41 resolver_->Resolve(dns::RequestInfo::From(info), handle.Pass()); |
| 42 return ERR_IO_PENDING; |
| 43 } |
| 44 |
| 45 int HostResolverMojo::ResolveFromCache(const RequestInfo& info, |
| 46 AddressList* addresses, |
| 47 const BoundNetLog& source_net_log) { |
| 48 VLOG(1) << "ResolveFromCache " << info.host_port_pair().ToString(); |
| 49 return ERR_FAILED; |
| 50 } |
| 51 |
| 52 void HostResolverMojo::CancelRequest(RequestHandle req) { |
| 53 delete static_cast<Job*>(req); |
| 54 } |
| 55 |
| 56 HostResolverMojo::Job::Job(AddressList* addresses, |
| 57 const CompletionCallback& callback) |
| 58 : addresses_(addresses), callback_(callback) { |
| 59 } |
| 60 |
| 61 void HostResolverMojo::Job::ReportResult(dns::AddressListPtr address_list) { |
| 62 *addresses_ = address_list->To<AddressList>(); |
| 63 ReportError(0); |
| 64 } |
| 65 |
| 66 void HostResolverMojo::Job::ReportError(int32_t error) { |
| 67 callback_.Run(error); |
| 68 delete this; |
| 69 } |
| 70 |
| 71 void HostResolverMojo::Job::OnConnectionError() { |
| 72 ReportError(ERR_FAILED); |
| 73 } |
| 74 |
| 75 } // namespace net |
| 76 |
| 77 namespace mojo { |
| 78 |
| 79 // static |
| 80 net::dns::RequestInfoPtr |
| 81 TypeConverter<net::dns::RequestInfoPtr, net::HostResolver::RequestInfo>:: |
| 82 Convert(const net::HostResolver::RequestInfo& obj) { |
| 83 net::dns::RequestInfoPtr result(net::dns::RequestInfo::New()); |
| 84 result->host_port_pair = obj.host_port_pair().ToString(); |
| 85 result->address_family = obj.address_family(); |
| 86 |
| 87 return result.Pass(); |
| 88 } |
| 89 |
| 90 // static |
| 91 net::AddressList |
| 92 TypeConverter<net::AddressList, net::dns::AddressList>::Convert( |
| 93 const net::dns::AddressList& obj) { |
| 94 net::IPAddressList addresses; |
| 95 addresses.resize(obj.addresses.size()); |
| 96 for (size_t i = 0; i < obj.addresses.size(); i++) { |
| 97 const auto& serialized_address = obj.addresses[i]; |
| 98 net::IPAddressNumber& address = addresses[i]; |
| 99 address.resize(serialized_address.size()); |
| 100 std::copy(&serialized_address[0], |
| 101 &serialized_address[serialized_address.size() - 1], |
| 102 address.begin()); |
| 103 } |
| 104 return net::AddressList::CreateFromIPAddressList(addresses, |
| 105 obj.canonical_name); |
| 106 } |
| 107 |
| 108 } // namespace mojo |
OLD | NEW |