Package io.netty.resolver.dns
Class DnsResolveContext<T>
java.lang.Object
io.netty.resolver.dns.DnsResolveContext<T>
- Direct Known Subclasses:
DnsAddressResolveContext
,DnsRecordResolveContext
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class
private static final class
Holds the closed DNS Servers for a domain.private final class
private static final class
(package private) static final class
private static final class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) final DnsRecord[]
private int
private final Channel
private static final RuntimeException
private boolean
private final int
private final DnsRecordType[]
private final String
private static final InternalLogger
private static final RuntimeException
private final DnsServerAddressStream
private static final RuntimeException
private static final RuntimeException
private static final RuntimeException
private final Promise
<?> (package private) final DnsNameResolver
private static final String
private final Set
<Future<AddressedEnvelope<DnsResponse, InetSocketAddress>>> private static final RuntimeException
private boolean
(package private) static boolean
private static final RuntimeException
-
Constructor Summary
ConstructorsConstructorDescriptionDnsResolveContext
(DnsNameResolver parent, Channel channel, Promise<?> originalPromise, String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs, int allowedQueries) -
Method Summary
Modifier and TypeMethodDescription(package private) AuthoritativeDnsServerCache
TheAuthoritativeDnsServerCache
to use while resolving.buildAliasMap
(DnsResponse response, DnsCnameCache cache, EventLoop loop) (package private) abstract void
Caches a successful resolution.(package private) abstract void
cache
(String hostname, DnsRecord[] additionals, UnknownHostException cause) Caches a failed resolution.private static Throwable
cause
(DnsResponseCode code) (package private) Channel
channel()
TheChannel
used.private static void
checkCnameLoop
(String hostname, String first, String second) (package private) DnsCnameCache
TheDnsCnameCache
that is used for resolving.(package private) static String
cnameResolveFromCache
(DnsCnameCache cnameCache, String name) private static String
cnameResolveFromCacheLoop
(DnsCnameCache cnameCache, String hostname, String first, String mapping) (package private) abstract T
convertRecord
(DnsRecord record, String hostname, DnsRecord[] additionals, EventLoop eventLoop) Converts the givenDnsRecord
intoT
.(package private) static String
(package private) void
doSearchDomainQuery
(String hostname, Promise<List<T>> nextPromise) private static DnsResolveContext.AuthoritativeNameServerList
extractAuthoritativeNameServers
(String questionName, DnsResponse res) Returns the invalid input: '{@code {@link AuthoritativeNameServerList} which were included in {@link DnsSection#AUTHORITY} or {@code null} if non are found.'filterResults
(List<T> unfiltered) Returns a filtered list of results which should be the final result of DNS resolution.private void
finishResolve
(Promise<List<T>> promise, Throwable cause) private void
followCname
(DnsQuestion question, String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private DnsServerAddressStream
getNameServers
(String name) private DnsServerAddressStream
getNameServersFromCache
(String hostname) Returns theDnsServerAddressStream
that was cached for the given hostname ornull
if non could be found.private boolean
handleRedirect
(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) Handles a redirect answer if needed and returnstrue
if a redirect query has been made.private boolean
hasNDots()
private static String
hostnameWithDot
(String name) private void
internalResolve
(String name, Promise<List<T>> promise) (package private) abstract boolean
isCompleteEarly
(T resolved) (package private) abstract boolean
Returnstrue
if we should allow duplicates in the result orfalse
if no duplicates should be included.private DnsQueryLifecycleObserver
newDnsQueryLifecycleObserver
(DnsQuestion question) (package private) abstract DnsResolveContext
<T> newResolverContext
(DnsNameResolver parent, Channel channel, Promise<?> originalPromise, String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs, int allowedQueries) Creates a new context with the given parameters.private void
onExpectedResponse
(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private void
onResponse
(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private void
onResponseCNAME
(DnsQuestion question, Map<String, String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private void
query
(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, boolean flush, Promise<List<T>> promise, Throwable cause) private boolean
query
(String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<List<T>> promise) private void
queryUnresolvedNameServer
(InetSocketAddress nameServerAddr, DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise, Throwable cause) private static AuthoritativeDnsServerCache
redirectAuthoritativeDnsServerCache
(AuthoritativeDnsServerCache authoritativeDnsServerCache) (package private) void
(package private) DnsCache
TheDnsCache
to use while resolving.private void
tryToFinishResolve
(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise, Throwable cause)
-
Field Details
-
logger
-
PROP_TRY_FINAL_CNAME_ON_ADDRESS_LOOKUPS
- See Also:
-
TRY_FINAL_CNAME_ON_ADDRESS_LOOKUPS
static boolean TRY_FINAL_CNAME_ON_ADDRESS_LOOKUPS -
NXDOMAIN_QUERY_FAILED_EXCEPTION
-
CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION
-
NO_MATCHING_RECORD_QUERY_FAILED_EXCEPTION
-
UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION
-
NAME_SERVERS_EXHAUSTED_EXCEPTION
-
SERVFAIL_QUERY_FAILED_EXCEPTION
-
NXDOMAIN_CAUSE_QUERY_FAILED_EXCEPTION
-
parent
-
channel
-
originalPromise
-
nameServerAddrs
-
hostname
-
dnsClass
private final int dnsClass -
expectedTypes
-
additionals
-
queriesInProgress
-
finalResult
-
allowedQueries
private int allowedQueries -
triedCNAME
private boolean triedCNAME -
completeEarly
private boolean completeEarly
-
-
Constructor Details
-
DnsResolveContext
DnsResolveContext(DnsNameResolver parent, Channel channel, Promise<?> originalPromise, String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs, int allowedQueries)
-
-
Method Details
-
channel
Channel channel()TheChannel
used. -
resolveCache
DnsCache resolveCache()TheDnsCache
to use while resolving. -
cnameCache
DnsCnameCache cnameCache()TheDnsCnameCache
that is used for resolving. -
authoritativeDnsServerCache
AuthoritativeDnsServerCache authoritativeDnsServerCache()TheAuthoritativeDnsServerCache
to use while resolving. -
newResolverContext
abstract DnsResolveContext<T> newResolverContext(DnsNameResolver parent, Channel channel, Promise<?> originalPromise, String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs, int allowedQueries) Creates a new context with the given parameters. -
convertRecord
abstract T convertRecord(DnsRecord record, String hostname, DnsRecord[] additionals, EventLoop eventLoop) Converts the givenDnsRecord
intoT
. -
filterResults
Returns a filtered list of results which should be the final result of DNS resolution. This must take into account JDK semantics such asNetUtil.isIpV6AddressesPreferred()
. -
isCompleteEarly
-
isDuplicateAllowed
abstract boolean isDuplicateAllowed()Returnstrue
if we should allow duplicates in the result orfalse
if no duplicates should be included. -
cache
Caches a successful resolution. -
cache
Caches a failed resolution. -
resolve
-
hasNDots
private boolean hasNDots() -
doSearchDomainQuery
-
hostnameWithDot
-
cnameResolveFromCache
static String cnameResolveFromCache(DnsCnameCache cnameCache, String name) throws UnknownHostException - Throws:
UnknownHostException
-
cnameResolveFromCacheLoop
private static String cnameResolveFromCacheLoop(DnsCnameCache cnameCache, String hostname, String first, String mapping) throws UnknownHostException - Throws:
UnknownHostException
-
checkCnameLoop
private static void checkCnameLoop(String hostname, String first, String second) throws UnknownHostException - Throws:
UnknownHostException
-
internalResolve
-
getNameServersFromCache
Returns theDnsServerAddressStream
that was cached for the given hostname ornull
if non could be found. -
query
private void query(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, boolean flush, Promise<List<T>> promise, Throwable cause) -
queryUnresolvedNameServer
private void queryUnresolvedNameServer(InetSocketAddress nameServerAddr, DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise, Throwable cause) -
redirectAuthoritativeDnsServerCache
private static AuthoritativeDnsServerCache redirectAuthoritativeDnsServerCache(AuthoritativeDnsServerCache authoritativeDnsServerCache) -
onResponse
private void onResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) -
handleRedirect
private boolean handleRedirect(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) Handles a redirect answer if needed and returnstrue
if a redirect query has been made. -
cause
-
extractAuthoritativeNameServers
private static DnsResolveContext.AuthoritativeNameServerList extractAuthoritativeNameServers(String questionName, DnsResponse res) Returns the invalid input: '{@code {@link AuthoritativeNameServerList} which were included in {@link DnsSection#AUTHORITY} or {@code null} if non are found.' -
onExpectedResponse
private void onExpectedResponse(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) -
onResponseCNAME
private void onResponseCNAME(DnsQuestion question, Map<String, String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) -
buildAliasMap
private static Map<String,String> buildAliasMap(DnsResponse response, DnsCnameCache cache, EventLoop loop) -
tryToFinishResolve
private void tryToFinishResolve(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise, Throwable cause) -
finishResolve
-
decodeDomainName
-
getNameServers
-
followCname
private void followCname(DnsQuestion question, String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) -
query
private boolean query(String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<List<T>> promise) -
newDnsQueryLifecycleObserver
-