122 lines
4.3 KiB
C++
122 lines
4.3 KiB
C++
|
|
// 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
|