// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_DNS_DNS_SERVER_ITERATOR_H_ #define NET_DNS_DNS_SERVER_ITERATOR_H_ #include <stddef.h> #include <vector> #include "base/memory/raw_ptr.h" #include "net/base/net_export.h" #include "net/dns/public/secure_dns_mode.h" namespace net { class DnsSession; class ResolveContext; // Iterator used to get the next server to try for a DNS transaction. // Each iterator should be scoped to a single query. A new query, therefore, // requires a new iterator. // // Finds the first eligible server below the global failure limits // (|max_failures|), or if no eligible servers are below failure limits, the // eligible one with the oldest last failure. Global failures are tracked by // ResolveContext. // // If |session| goes out of date, this iterator will report that no attempts are // available and thus cease to return anything. class NET_EXPORT_PRIVATE DnsServerIterator { … }; // Iterator used to get the next server to try for a DoH transaction. // Each iterator should be scoped to a single query. A new query, therefore, // requires a new iterator. // // Finds the first eligible server below the global failure limits // (|max_failures|), or if no eligible servers are below failure limits, the // eligible one with the oldest last failure. Global failures are tracked by // ResolveContext. // // Once a server is returned |max_times_returned| times, it is ignored. // // If in AUTOMATIC mode, DoH servers are only eligible if "available". See // GetDohServerAvailability() for details. class NET_EXPORT_PRIVATE DohDnsServerIterator : public DnsServerIterator { … }; // Iterator used to get the next server to try for a classic DNS transaction. // Each iterator should be scoped to a single query. A new query, therefore, // requires a new iterator. // // Finds the first eligible server below the global failure limits // (|max_failures|), or if no eligible servers are below failure limits, the // eligible one with the oldest last failure. Global failures are tracked by // ResolveContext. // Once a server is returned |max_times_returned| times, it is ignored. class NET_EXPORT_PRIVATE ClassicDnsServerIterator : public DnsServerIterator { … }; } // namespace net #endif // NET_DNS_DNS_SERVER_ITERATOR_H_