xref: /aosp_15_r20/external/cronet/net/dns/mapped_host_resolver.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/dns/mapped_host_resolver.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <optional>
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker #include <utility>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/notimplemented.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_util.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/values.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/host_port_pair.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/base/network_anonymization_key.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/base/url_util.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/dns/host_resolver.h"
19*6777b538SAndroid Build Coastguard Worker #include "net/log/net_log_with_source.h"
20*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
21*6777b538SAndroid Build Coastguard Worker #include "url/scheme_host_port.h"
22*6777b538SAndroid Build Coastguard Worker #include "url/url_canon.h"
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker namespace net {
25*6777b538SAndroid Build Coastguard Worker 
MappedHostResolver(std::unique_ptr<HostResolver> impl)26*6777b538SAndroid Build Coastguard Worker MappedHostResolver::MappedHostResolver(std::unique_ptr<HostResolver> impl)
27*6777b538SAndroid Build Coastguard Worker     : impl_(std::move(impl)) {}
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker MappedHostResolver::~MappedHostResolver() = default;
30*6777b538SAndroid Build Coastguard Worker 
OnShutdown()31*6777b538SAndroid Build Coastguard Worker void MappedHostResolver::OnShutdown() {
32*6777b538SAndroid Build Coastguard Worker   impl_->OnShutdown();
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HostResolver::ResolveHostRequest>
CreateRequest(url::SchemeHostPort host,NetworkAnonymizationKey network_anonymization_key,NetLogWithSource source_net_log,std::optional<ResolveHostParameters> optional_parameters)36*6777b538SAndroid Build Coastguard Worker MappedHostResolver::CreateRequest(
37*6777b538SAndroid Build Coastguard Worker     url::SchemeHostPort host,
38*6777b538SAndroid Build Coastguard Worker     NetworkAnonymizationKey network_anonymization_key,
39*6777b538SAndroid Build Coastguard Worker     NetLogWithSource source_net_log,
40*6777b538SAndroid Build Coastguard Worker     std::optional<ResolveHostParameters> optional_parameters) {
41*6777b538SAndroid Build Coastguard Worker   GURL rewritten_url = host.GetURL();
42*6777b538SAndroid Build Coastguard Worker   HostMappingRules::RewriteResult result = rules_.RewriteUrl(rewritten_url);
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker   switch (result) {
45*6777b538SAndroid Build Coastguard Worker     case HostMappingRules::RewriteResult::kRewritten:
46*6777b538SAndroid Build Coastguard Worker       DCHECK(rewritten_url.is_valid());
47*6777b538SAndroid Build Coastguard Worker       DCHECK_NE(rewritten_url.host_piece(), "^NOTFOUND");
48*6777b538SAndroid Build Coastguard Worker       return impl_->CreateRequest(url::SchemeHostPort(rewritten_url),
49*6777b538SAndroid Build Coastguard Worker                                   std::move(network_anonymization_key),
50*6777b538SAndroid Build Coastguard Worker                                   std::move(source_net_log),
51*6777b538SAndroid Build Coastguard Worker                                   std::move(optional_parameters));
52*6777b538SAndroid Build Coastguard Worker     case HostMappingRules::RewriteResult::kInvalidRewrite:
53*6777b538SAndroid Build Coastguard Worker       // Treat any invalid mapping as if it was "^NOTFOUND" (which should itself
54*6777b538SAndroid Build Coastguard Worker       // result in `kInvalidRewrite`).
55*6777b538SAndroid Build Coastguard Worker       return CreateFailingRequest(ERR_NAME_NOT_RESOLVED);
56*6777b538SAndroid Build Coastguard Worker     case HostMappingRules::RewriteResult::kNoMatchingRule:
57*6777b538SAndroid Build Coastguard Worker       return impl_->CreateRequest(
58*6777b538SAndroid Build Coastguard Worker           std::move(host), std::move(network_anonymization_key),
59*6777b538SAndroid Build Coastguard Worker           std::move(source_net_log), std::move(optional_parameters));
60*6777b538SAndroid Build Coastguard Worker   }
61*6777b538SAndroid Build Coastguard Worker }
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HostResolver::ResolveHostRequest>
CreateRequest(const HostPortPair & host,const NetworkAnonymizationKey & network_anonymization_key,const NetLogWithSource & source_net_log,const std::optional<ResolveHostParameters> & optional_parameters)64*6777b538SAndroid Build Coastguard Worker MappedHostResolver::CreateRequest(
65*6777b538SAndroid Build Coastguard Worker     const HostPortPair& host,
66*6777b538SAndroid Build Coastguard Worker     const NetworkAnonymizationKey& network_anonymization_key,
67*6777b538SAndroid Build Coastguard Worker     const NetLogWithSource& source_net_log,
68*6777b538SAndroid Build Coastguard Worker     const std::optional<ResolveHostParameters>& optional_parameters) {
69*6777b538SAndroid Build Coastguard Worker   HostPortPair rewritten = host;
70*6777b538SAndroid Build Coastguard Worker   rules_.RewriteHost(&rewritten);
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker   if (rewritten.host() == "^NOTFOUND") {
73*6777b538SAndroid Build Coastguard Worker     return CreateFailingRequest(ERR_NAME_NOT_RESOLVED);
74*6777b538SAndroid Build Coastguard Worker   }
75*6777b538SAndroid Build Coastguard Worker 
76*6777b538SAndroid Build Coastguard Worker   return impl_->CreateRequest(rewritten, network_anonymization_key,
77*6777b538SAndroid Build Coastguard Worker                               source_net_log, optional_parameters);
78*6777b538SAndroid Build Coastguard Worker }
79*6777b538SAndroid Build Coastguard Worker 
80*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HostResolver::ServiceEndpointRequest>
CreateServiceEndpointRequest(Host host,NetworkAnonymizationKey network_anonymization_key,NetLogWithSource net_log,ResolveHostParameters parameters)81*6777b538SAndroid Build Coastguard Worker MappedHostResolver::CreateServiceEndpointRequest(
82*6777b538SAndroid Build Coastguard Worker     Host host,
83*6777b538SAndroid Build Coastguard Worker     NetworkAnonymizationKey network_anonymization_key,
84*6777b538SAndroid Build Coastguard Worker     NetLogWithSource net_log,
85*6777b538SAndroid Build Coastguard Worker     ResolveHostParameters parameters) {
86*6777b538SAndroid Build Coastguard Worker   NOTIMPLEMENTED();
87*6777b538SAndroid Build Coastguard Worker   return nullptr;
88*6777b538SAndroid Build Coastguard Worker }
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker std::unique_ptr<HostResolver::ProbeRequest>
CreateDohProbeRequest()91*6777b538SAndroid Build Coastguard Worker MappedHostResolver::CreateDohProbeRequest() {
92*6777b538SAndroid Build Coastguard Worker   return impl_->CreateDohProbeRequest();
93*6777b538SAndroid Build Coastguard Worker }
94*6777b538SAndroid Build Coastguard Worker 
GetHostCache()95*6777b538SAndroid Build Coastguard Worker HostCache* MappedHostResolver::GetHostCache() {
96*6777b538SAndroid Build Coastguard Worker   return impl_->GetHostCache();
97*6777b538SAndroid Build Coastguard Worker }
98*6777b538SAndroid Build Coastguard Worker 
GetDnsConfigAsValue() const99*6777b538SAndroid Build Coastguard Worker base::Value::Dict MappedHostResolver::GetDnsConfigAsValue() const {
100*6777b538SAndroid Build Coastguard Worker   return impl_->GetDnsConfigAsValue();
101*6777b538SAndroid Build Coastguard Worker }
102*6777b538SAndroid Build Coastguard Worker 
SetRequestContext(URLRequestContext * request_context)103*6777b538SAndroid Build Coastguard Worker void MappedHostResolver::SetRequestContext(URLRequestContext* request_context) {
104*6777b538SAndroid Build Coastguard Worker   impl_->SetRequestContext(request_context);
105*6777b538SAndroid Build Coastguard Worker }
106*6777b538SAndroid Build Coastguard Worker 
GetManagerForTesting()107*6777b538SAndroid Build Coastguard Worker HostResolverManager* MappedHostResolver::GetManagerForTesting() {
108*6777b538SAndroid Build Coastguard Worker   return impl_->GetManagerForTesting();
109*6777b538SAndroid Build Coastguard Worker }
110*6777b538SAndroid Build Coastguard Worker 
111*6777b538SAndroid Build Coastguard Worker }  // namespace net
112