// 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/public/dns_config_overrides.h" #include "net/dns/dns_config.h" namespace net { DnsConfigOverrides::DnsConfigOverrides() = default; DnsConfigOverrides::DnsConfigOverrides(const DnsConfigOverrides& other) = default; DnsConfigOverrides::DnsConfigOverrides(DnsConfigOverrides&& other) = default; DnsConfigOverrides::~DnsConfigOverrides() = default; DnsConfigOverrides& DnsConfigOverrides::operator=( const DnsConfigOverrides& other) = default; DnsConfigOverrides& DnsConfigOverrides::operator=(DnsConfigOverrides&& other) = default; bool DnsConfigOverrides::operator==(const DnsConfigOverrides& other) const { return nameservers == other.nameservers && dns_over_tls_active == other.dns_over_tls_active && dns_over_tls_hostname == other.dns_over_tls_hostname && search == other.search && append_to_multi_label_name == other.append_to_multi_label_name && ndots == other.ndots && fallback_period == other.fallback_period && attempts == other.attempts && doh_attempts == other.doh_attempts && rotate == other.rotate && use_local_ipv6 == other.use_local_ipv6 && dns_over_https_config == other.dns_over_https_config && secure_dns_mode == other.secure_dns_mode && allow_dns_over_https_upgrade == other.allow_dns_over_https_upgrade && clear_hosts == other.clear_hosts; } bool DnsConfigOverrides::operator!=(const DnsConfigOverrides& other) const { return !(*this == other); } // static DnsConfigOverrides DnsConfigOverrides::CreateOverridingEverythingWithDefaults() { DnsConfig defaults; DnsConfigOverrides overrides; overrides.nameservers = defaults.nameservers; overrides.dns_over_tls_active = defaults.dns_over_tls_active; overrides.dns_over_tls_hostname = defaults.dns_over_tls_hostname; overrides.search = defaults.search; overrides.append_to_multi_label_name = defaults.append_to_multi_label_name; overrides.ndots = defaults.ndots; overrides.fallback_period = defaults.fallback_period; overrides.attempts = defaults.attempts; overrides.doh_attempts = defaults.doh_attempts; overrides.rotate = defaults.rotate; overrides.use_local_ipv6 = defaults.use_local_ipv6; overrides.dns_over_https_config = defaults.doh_config; overrides.secure_dns_mode = defaults.secure_dns_mode; overrides.allow_dns_over_https_upgrade = defaults.allow_dns_over_https_upgrade; overrides.clear_hosts = true; return overrides; } bool DnsConfigOverrides::OverridesEverything() const { return nameservers && dns_over_tls_active && dns_over_tls_hostname && search && append_to_multi_label_name && ndots && fallback_period && attempts && doh_attempts && rotate && use_local_ipv6 && dns_over_https_config && secure_dns_mode && allow_dns_over_https_upgrade && clear_hosts; } DnsConfig DnsConfigOverrides::ApplyOverrides(const DnsConfig& config) const { DnsConfig overridden; if (!OverridesEverything()) overridden = config; if (nameservers) overridden.nameservers = nameservers.value(); if (dns_over_tls_active) overridden.dns_over_tls_active = dns_over_tls_active.value(); if (dns_over_tls_hostname) overridden.dns_over_tls_hostname = dns_over_tls_hostname.value(); if (search) overridden.search = search.value(); if (append_to_multi_label_name) overridden.append_to_multi_label_name = append_to_multi_label_name.value(); if (ndots) overridden.ndots = ndots.value(); if (fallback_period) overridden.fallback_period = fallback_period.value(); if (attempts) overridden.attempts = attempts.value(); if (doh_attempts) overridden.doh_attempts = doh_attempts.value(); if (rotate) overridden.rotate = rotate.value(); if (use_local_ipv6) overridden.use_local_ipv6 = use_local_ipv6.value(); if (dns_over_https_config) overridden.doh_config = dns_over_https_config.value(); if (secure_dns_mode) overridden.secure_dns_mode = secure_dns_mode.value(); if (allow_dns_over_https_upgrade) { overridden.allow_dns_over_https_upgrade = allow_dns_over_https_upgrade.value(); } if (clear_hosts) overridden.hosts.clear(); return overridden; } } // namespace net