abstract class DnsNameResolverContext<T>
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
(package private) static class |
DnsNameResolverContext.AuthoritativeNameServer |
private static class |
DnsNameResolverContext.AuthoritativeNameServerList
Holds the closed DNS Servers for a domain.
|
private class |
DnsNameResolverContext.DnsCacheIterable |
private static class |
DnsNameResolverContext.SearchDomainUnknownHostException |
Modifier and Type | Field and Description |
---|---|
private DnsRecord[] |
additionals |
private int |
allowedQueries |
private static java.lang.RuntimeException |
CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION |
private java.lang.String |
hostname |
private static int |
INADDRSZ4 |
private static int |
INADDRSZ6 |
private int |
maxAllowedQueries |
private static java.lang.RuntimeException |
NAME_SERVERS_EXHAUSTED_EXCEPTION |
private DnsServerAddressStream |
nameServerAddrs |
private static java.lang.RuntimeException |
NO_MATCHING_RECORD_QUERY_FAILED_EXCEPTION |
private static java.lang.RuntimeException |
NXDOMAIN_QUERY_FAILED_EXCEPTION |
private DnsNameResolver |
parent |
private java.util.Set<Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>> |
queriesInProgress |
private static FutureListener<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>> |
RELEASE_RESPONSE |
private DnsCache |
resolveCache |
private java.util.List<DnsCacheEntry> |
resolvedEntries |
private InternetProtocolFamily[] |
resolvedInternetProtocolFamilies |
private boolean |
triedCNAME |
private static java.lang.RuntimeException |
UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION |
Constructor and Description |
---|
DnsNameResolverContext(DnsNameResolver parent,
java.lang.String hostname,
DnsRecord[] additionals,
DnsCache resolveCache,
DnsServerAddressStream nameServerAddrs) |
Modifier and Type | Method and Description |
---|---|
private void |
addNameServerToCache(DnsNameResolverContext.AuthoritativeNameServer name,
java.net.InetAddress resolved,
long ttl)
Add an authoritative nameserver to the cache if its not a root server.
|
private static java.util.Map<java.lang.String,java.lang.String> |
buildAliasMap(DnsResponse response) |
(package private) static java.lang.String |
decodeDomainName(ByteBuf in) |
private void |
doSearchDomainQuery(int count,
FutureListener<T> listener) |
private static DnsNameResolverContext.AuthoritativeNameServerList |
extractAuthoritativeNameServers(java.lang.String questionName,
DnsResponse res)
Returns the {@link AuthoritativeNameServerList} which were included in {@link DnsSection#AUTHORITY}
or {@code null} if non are found.
|
(package private) abstract boolean |
finishResolve(java.lang.Class<? extends java.net.InetAddress> addressType,
java.util.List<DnsCacheEntry> resolvedEntries,
Promise<T> promise) |
private void |
finishResolve(Promise<T> promise) |
private void |
followCname(java.lang.String cname,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private DnsServerAddressStream |
getNameServers(java.lang.String hostname) |
private DnsServerAddressStream |
getNameServersFromCache(java.lang.String hostname)
Returns the
DnsServerAddressStream that was cached for the given hostname or null if non
could be found. |
private boolean |
gotPreferredAddress() |
private boolean |
handleRedirect(DnsQuestion question,
AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise)
Handles a redirect answer if needed and returns
true if a redirect query has been made. |
private void |
internalResolve(Promise<T> promise) |
private DnsQuestion |
newQuestion(java.lang.String hostname,
DnsRecordType type) |
(package private) abstract DnsNameResolverContext<T> |
newResolverContext(DnsNameResolver parent,
java.lang.String hostname,
DnsRecord[] additionals,
DnsCache resolveCache,
DnsServerAddressStream nameServerAddrs) |
(package private) void |
onResponse(DnsServerAddressStream nameServerAddrStream,
int nameServerAddrStreamIndex,
DnsQuestion question,
AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private void |
onResponseAorAAAA(DnsRecordType qType,
DnsQuestion question,
AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private void |
onResponseCNAME(DnsQuestion question,
AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private void |
onResponseCNAME(DnsQuestion question,
AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> response,
java.util.Map<java.lang.String,java.lang.String> cnames,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private java.net.InetAddress |
parseAddress(DnsRecord r,
java.lang.String name) |
private void |
query(DnsServerAddressStream nameServerAddrStream,
int nameServerAddrStreamIndex,
DnsQuestion question,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private void |
query(DnsServerAddressStream nameServerAddrStream,
int nameServerAddrStreamIndex,
DnsQuestion question,
Promise<T> promise) |
private boolean |
query(java.lang.String hostname,
DnsRecordType type,
DnsServerAddressStream dnsServerAddressStream,
Promise<T> promise) |
(package private) void |
resolve(Promise<T> promise) |
(package private) void |
tryToFinishResolve(DnsServerAddressStream nameServerAddrStream,
int nameServerAddrStreamIndex,
DnsQuestion question,
DnsQueryLifecycleObserver queryLifecycleObserver,
Promise<T> promise) |
private static final int INADDRSZ4
private static final int INADDRSZ6
private static final FutureListener<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>> RELEASE_RESPONSE
private static final java.lang.RuntimeException NXDOMAIN_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException NO_MATCHING_RECORD_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException NAME_SERVERS_EXHAUSTED_EXCEPTION
private final DnsNameResolver parent
private final DnsServerAddressStream nameServerAddrs
private final java.lang.String hostname
private final DnsCache resolveCache
private final int maxAllowedQueries
private final InternetProtocolFamily[] resolvedInternetProtocolFamilies
private final DnsRecord[] additionals
private final java.util.Set<Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>> queriesInProgress
private java.util.List<DnsCacheEntry> resolvedEntries
private int allowedQueries
private boolean triedCNAME
DnsNameResolverContext(DnsNameResolver parent, java.lang.String hostname, DnsRecord[] additionals, DnsCache resolveCache, DnsServerAddressStream nameServerAddrs)
private void doSearchDomainQuery(int count, FutureListener<T> listener)
private void addNameServerToCache(DnsNameResolverContext.AuthoritativeNameServer name, java.net.InetAddress resolved, long ttl)
private DnsServerAddressStream getNameServersFromCache(java.lang.String hostname)
DnsServerAddressStream
that was cached for the given hostname or null
if non
could be found.private void query(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, Promise<T> promise)
private void query(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
void onResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private boolean handleRedirect(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
true
if a redirect query has been made.private static DnsNameResolverContext.AuthoritativeNameServerList extractAuthoritativeNameServers(java.lang.String questionName, DnsResponse res)
private void onResponseAorAAAA(DnsRecordType qType, DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private java.net.InetAddress parseAddress(DnsRecord r, java.lang.String name)
private void onResponseCNAME(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private void onResponseCNAME(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> response, java.util.Map<java.lang.String,java.lang.String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private static java.util.Map<java.lang.String,java.lang.String> buildAliasMap(DnsResponse response)
void tryToFinishResolve(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private boolean gotPreferredAddress()
abstract boolean finishResolve(java.lang.Class<? extends java.net.InetAddress> addressType, java.util.List<DnsCacheEntry> resolvedEntries, Promise<T> promise)
abstract DnsNameResolverContext<T> newResolverContext(DnsNameResolver parent, java.lang.String hostname, DnsRecord[] additionals, DnsCache resolveCache, DnsServerAddressStream nameServerAddrs)
static java.lang.String decodeDomainName(ByteBuf in)
private DnsServerAddressStream getNameServers(java.lang.String hostname)
private void followCname(java.lang.String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<T> promise)
private boolean query(java.lang.String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, Promise<T> promise)
private DnsQuestion newQuestion(java.lang.String hostname, DnsRecordType type)