// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/dns/dns_config.h" #include #include "base/numerics/safe_conversions.h" #include "base/values.h" #include "net/dns/public/dns_over_https_config.h" namespace net { // Default values are taken from glibc resolv.h except |fallback_period| which // is set to |kDnsDefaultFallbackPeriod|. DnsConfig::DnsConfig() : DnsConfig(std::vector()) {} DnsConfig::DnsConfig(const DnsConfig& other) = default; DnsConfig::DnsConfig(DnsConfig&& other) = default; DnsConfig::DnsConfig(std::vector nameservers) : nameservers(std::move(nameservers)) {} DnsConfig::~DnsConfig() = default; DnsConfig& DnsConfig::operator=(const DnsConfig& other) = default; DnsConfig& DnsConfig::operator=(DnsConfig&& other) = default; bool DnsConfig::Equals(const DnsConfig& d) const { return EqualsIgnoreHosts(d) && (hosts == d.hosts); } bool DnsConfig::operator==(const DnsConfig& d) const { return Equals(d); } bool DnsConfig::operator!=(const DnsConfig& d) const { return !Equals(d); } bool DnsConfig::EqualsIgnoreHosts(const DnsConfig& d) const { return (nameservers == d.nameservers) && (dns_over_tls_active == d.dns_over_tls_active) && (dns_over_tls_hostname == d.dns_over_tls_hostname) && (search == d.search) && (unhandled_options == d.unhandled_options) && (append_to_multi_label_name == d.append_to_multi_label_name) && (ndots == d.ndots) && (fallback_period == d.fallback_period) && (attempts == d.attempts) && (doh_attempts == d.doh_attempts) && (rotate == d.rotate) && (use_local_ipv6 == d.use_local_ipv6) && (doh_config == d.doh_config) && (secure_dns_mode == d.secure_dns_mode) && (allow_dns_over_https_upgrade == d.allow_dns_over_https_upgrade); } void DnsConfig::CopyIgnoreHosts(const DnsConfig& d) { nameservers = d.nameservers; dns_over_tls_active = d.dns_over_tls_active; dns_over_tls_hostname = d.dns_over_tls_hostname; search = d.search; unhandled_options = d.unhandled_options; append_to_multi_label_name = d.append_to_multi_label_name; ndots = d.ndots; fallback_period = d.fallback_period; attempts = d.attempts; doh_attempts = d.doh_attempts; rotate = d.rotate; use_local_ipv6 = d.use_local_ipv6; doh_config = d.doh_config; secure_dns_mode = d.secure_dns_mode; allow_dns_over_https_upgrade = d.allow_dns_over_https_upgrade; } base::Value::Dict DnsConfig::ToDict() const { base::Value::Dict dict; base::Value::List nameserver_list; for (const auto& nameserver : nameservers) nameserver_list.Append(nameserver.ToString()); dict.Set("nameservers", std::move(nameserver_list)); dict.Set("dns_over_tls_active", dns_over_tls_active); dict.Set("dns_over_tls_hostname", dns_over_tls_hostname); base::Value::List suffix_list; for (const auto& suffix : search) suffix_list.Append(suffix); dict.Set("search", std::move(suffix_list)); dict.Set("unhandled_options", unhandled_options); dict.Set("append_to_multi_label_name", append_to_multi_label_name); dict.Set("ndots", ndots); dict.Set("timeout", fallback_period.InSecondsF()); dict.Set("attempts", attempts); dict.Set("doh_attempts", doh_attempts); dict.Set("rotate", rotate); dict.Set("use_local_ipv6", use_local_ipv6); dict.Set("num_hosts", static_cast(hosts.size())); dict.Set("doh_config", doh_config.ToValue()); dict.Set("secure_dns_mode", base::strict_cast(secure_dns_mode)); dict.Set("allow_dns_over_https_upgrade", allow_dns_over_https_upgrade); return dict; } } // namespace net