summaryrefslogtreecommitdiff
path: root/chromium/net/dns/dns_config_overrides.cc
blob: 0ea968392516694daabb405a298951af71d21e73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Copyright 2018 The Chromium Authors. All rights reserved.
// 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_overrides.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 && search == other.search &&
         hosts == other.hosts &&
         append_to_multi_label_name == other.append_to_multi_label_name &&
         randomize_ports == other.randomize_ports && ndots == other.ndots &&
         timeout == other.timeout && attempts == other.attempts &&
         doh_attempts == other.doh_attempts && rotate == other.rotate &&
         use_local_ipv6 == other.use_local_ipv6 &&
         dns_over_https_servers == other.dns_over_https_servers &&
         secure_dns_mode == other.secure_dns_mode &&
         allow_dns_over_https_upgrade == other.allow_dns_over_https_upgrade &&
         disabled_upgrade_providers == other.disabled_upgrade_providers;
}

bool DnsConfigOverrides::operator!=(const DnsConfigOverrides& other) const {
  return !(*this == other);
}

// static
DnsConfigOverrides
DnsConfigOverrides::CreateOverridingEverythingWithDefaults() {
  DnsConfig defaults;

  DnsConfigOverrides overrides;
  overrides.nameservers = defaults.nameservers;
  overrides.search = defaults.search;
  overrides.hosts = defaults.hosts;
  overrides.append_to_multi_label_name = defaults.append_to_multi_label_name;
  overrides.randomize_ports = defaults.randomize_ports;
  overrides.ndots = defaults.ndots;
  overrides.timeout = defaults.timeout;
  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_servers = defaults.dns_over_https_servers;
  overrides.secure_dns_mode = defaults.secure_dns_mode;
  overrides.allow_dns_over_https_upgrade =
      defaults.allow_dns_over_https_upgrade;
  overrides.disabled_upgrade_providers = defaults.disabled_upgrade_providers;

  return overrides;
}

bool DnsConfigOverrides::OverridesEverything() const {
  return nameservers && search && hosts && append_to_multi_label_name &&
         randomize_ports && ndots && timeout && attempts && doh_attempts &&
         rotate && use_local_ipv6 && dns_over_https_servers &&
         secure_dns_mode && allow_dns_over_https_upgrade &&
         disabled_upgrade_providers;
}

DnsConfig DnsConfigOverrides::ApplyOverrides(const DnsConfig& config) const {
  DnsConfig overridden;

  if (!OverridesEverything())
    overridden = config;

  if (nameservers)
    overridden.nameservers = nameservers.value();
  if (search)
    overridden.search = search.value();
  if (hosts)
    overridden.hosts = hosts.value();
  if (append_to_multi_label_name)
    overridden.append_to_multi_label_name = append_to_multi_label_name.value();
  if (randomize_ports)
    overridden.randomize_ports = randomize_ports.value();
  if (ndots)
    overridden.ndots = ndots.value();
  if (timeout)
    overridden.timeout = timeout.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_servers)
    overridden.dns_over_https_servers = dns_over_https_servers.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 (disabled_upgrade_providers)
    overridden.disabled_upgrade_providers = disabled_upgrade_providers.value();

  return overridden;
}

}  // namespace net