xref: /aosp_15_r20/external/cronet/net/dns/dns_config.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 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 #ifndef NET_DNS_DNS_CONFIG_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_DNS_DNS_CONFIG_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker #include <vector>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/values.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/ip_endpoint.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_hosts.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/dns_over_https_config.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_mode.h"
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker namespace net {
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker constexpr base::TimeDelta kDnsDefaultFallbackPeriod = base::Seconds(1);
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker // DnsConfig stores configuration of the system resolver.
25*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT DnsConfig {
26*6777b538SAndroid Build Coastguard Worker   DnsConfig();
27*6777b538SAndroid Build Coastguard Worker   DnsConfig(const DnsConfig& other);
28*6777b538SAndroid Build Coastguard Worker   DnsConfig(DnsConfig&& other);
29*6777b538SAndroid Build Coastguard Worker   explicit DnsConfig(std::vector<IPEndPoint> nameservers);
30*6777b538SAndroid Build Coastguard Worker   ~DnsConfig();
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   DnsConfig& operator=(const DnsConfig& other);
33*6777b538SAndroid Build Coastguard Worker   DnsConfig& operator=(DnsConfig&& other);
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker   bool Equals(const DnsConfig& d) const;
36*6777b538SAndroid Build Coastguard Worker   bool operator==(const DnsConfig& d) const;
37*6777b538SAndroid Build Coastguard Worker   bool operator!=(const DnsConfig& d) const;
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   bool EqualsIgnoreHosts(const DnsConfig& d) const;
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker   void CopyIgnoreHosts(const DnsConfig& src);
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   // Returns a Dict representation of |this|. For performance reasons, the
44*6777b538SAndroid Build Coastguard Worker   // Dict only contains the number of hosts rather than the full list.
45*6777b538SAndroid Build Coastguard Worker   base::Value::Dict ToDict() const;
46*6777b538SAndroid Build Coastguard Worker 
IsValidDnsConfig47*6777b538SAndroid Build Coastguard Worker   bool IsValid() const {
48*6777b538SAndroid Build Coastguard Worker     return !nameservers.empty() || !doh_config.servers().empty();
49*6777b538SAndroid Build Coastguard Worker   }
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // List of name server addresses.
52*6777b538SAndroid Build Coastguard Worker   std::vector<IPEndPoint> nameservers;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   // Status of system DNS-over-TLS (DoT).
55*6777b538SAndroid Build Coastguard Worker   bool dns_over_tls_active = false;
56*6777b538SAndroid Build Coastguard Worker   std::string dns_over_tls_hostname;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Suffix search list; used on first lookup when number of dots in given name
59*6777b538SAndroid Build Coastguard Worker   // is less than |ndots|.
60*6777b538SAndroid Build Coastguard Worker   std::vector<std::string> search;
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker   DnsHosts hosts;
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker   // True if there are options set in the system configuration that are not yet
65*6777b538SAndroid Build Coastguard Worker   // supported by DnsClient.
66*6777b538SAndroid Build Coastguard Worker   bool unhandled_options = false;
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker   // AppendToMultiLabelName: is suffix search performed for multi-label names?
69*6777b538SAndroid Build Coastguard Worker   // True, except on Windows where it can be configured.
70*6777b538SAndroid Build Coastguard Worker   bool append_to_multi_label_name = true;
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker   // Resolver options; see man resolv.conf.
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker   // Minimum number of dots before global resolution precedes |search|.
75*6777b538SAndroid Build Coastguard Worker   int ndots = 1;
76*6777b538SAndroid Build Coastguard Worker   // Time between retransmissions, see res_state.retrans.
77*6777b538SAndroid Build Coastguard Worker   // Used by Chrome as the initial transaction attempt fallback period (before
78*6777b538SAndroid Build Coastguard Worker   // exponential backoff and dynamic period determination based on previous
79*6777b538SAndroid Build Coastguard Worker   // attempts.)
80*6777b538SAndroid Build Coastguard Worker   base::TimeDelta fallback_period = kDnsDefaultFallbackPeriod;
81*6777b538SAndroid Build Coastguard Worker   // Maximum number of attempts, see res_state.retry.
82*6777b538SAndroid Build Coastguard Worker   int attempts = 2;
83*6777b538SAndroid Build Coastguard Worker   // Maximum number of times a DoH server is attempted per attempted per DNS
84*6777b538SAndroid Build Coastguard Worker   // transaction. This is separate from the global failure limit.
85*6777b538SAndroid Build Coastguard Worker   int doh_attempts = 1;
86*6777b538SAndroid Build Coastguard Worker   // Round robin entries in |nameservers| for subsequent requests.
87*6777b538SAndroid Build Coastguard Worker   bool rotate = false;
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker   // Indicates system configuration uses local IPv6 connectivity, e.g.,
90*6777b538SAndroid Build Coastguard Worker   // DirectAccess. This is exposed for HostResolver to skip IPv6 probes,
91*6777b538SAndroid Build Coastguard Worker   // as it may cause them to return incorrect results.
92*6777b538SAndroid Build Coastguard Worker   bool use_local_ipv6 = false;
93*6777b538SAndroid Build Coastguard Worker 
94*6777b538SAndroid Build Coastguard Worker   // DNS over HTTPS server configuration.
95*6777b538SAndroid Build Coastguard Worker   DnsOverHttpsConfig doh_config;
96*6777b538SAndroid Build Coastguard Worker 
97*6777b538SAndroid Build Coastguard Worker   // The default SecureDnsMode to use when resolving queries. It can be
98*6777b538SAndroid Build Coastguard Worker   // overridden for individual requests (such as requests to resolve a DoH
99*6777b538SAndroid Build Coastguard Worker   // server hostname) using |HostResolver::ResolveHostParameters::
100*6777b538SAndroid Build Coastguard Worker   // secure_dns_mode_override|.
101*6777b538SAndroid Build Coastguard Worker   SecureDnsMode secure_dns_mode = SecureDnsMode::kOff;
102*6777b538SAndroid Build Coastguard Worker 
103*6777b538SAndroid Build Coastguard Worker   // If set to |true|, we will attempt to upgrade the user's DNS configuration
104*6777b538SAndroid Build Coastguard Worker   // to use DoH server(s) operated by the same provider(s) when the user is
105*6777b538SAndroid Build Coastguard Worker   // in AUTOMATIC mode and has not pre-specified DoH servers.
106*6777b538SAndroid Build Coastguard Worker   bool allow_dns_over_https_upgrade = false;
107*6777b538SAndroid Build Coastguard Worker };
108*6777b538SAndroid Build Coastguard Worker 
109*6777b538SAndroid Build Coastguard Worker }  // namespace net
110*6777b538SAndroid Build Coastguard Worker 
111*6777b538SAndroid Build Coastguard Worker #endif  // NET_DNS_DNS_CONFIG_H_
112