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 classprivate static final classHolds the closed DNS Servers for a domain.private final classprivate static final class(package private) static final classprivate static final classprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final DnsRecord[]private intprivate final Channelprivate static final RuntimeExceptionprivate booleanprivate final intprivate final DnsRecordType[]private final Stringprivate static final InternalLoggerprivate static final RuntimeExceptionprivate final DnsServerAddressStreamprivate static final RuntimeExceptionprivate static final RuntimeExceptionprivate static final RuntimeExceptionprivate final Promise<?> (package private) final DnsNameResolverprivate static final Stringprivate final Set<Future<AddressedEnvelope<DnsResponse, InetSocketAddress>>> private static final RuntimeExceptionprivate boolean(package private) static booleanprivate 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) AuthoritativeDnsServerCacheTheAuthoritativeDnsServerCacheto use while resolving.buildAliasMap(DnsResponse response, DnsCnameCache cache, EventLoop loop) (package private) abstract voidCaches a successful resolution.(package private) abstract voidcache(String hostname, DnsRecord[] additionals, UnknownHostException cause) Caches a failed resolution.private static Throwablecause(DnsResponseCode code) (package private) Channelchannel()TheChannelused.private static voidcheckCnameLoop(String hostname, String first, String second) (package private) DnsCnameCacheTheDnsCnameCachethat is used for resolving.(package private) static StringcnameResolveFromCache(DnsCnameCache cnameCache, String name) private static StringcnameResolveFromCacheLoop(DnsCnameCache cnameCache, String hostname, String first, String mapping) (package private) abstract TconvertRecord(DnsRecord record, String hostname, DnsRecord[] additionals, EventLoop eventLoop) Converts the givenDnsRecordintoT.(package private) static String(package private) voiddoSearchDomainQuery(String hostname, Promise<List<T>> nextPromise) private static DnsResolveContext.AuthoritativeNameServerListextractAuthoritativeNameServers(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 voidfinishResolve(Promise<List<T>> promise, Throwable cause) private voidfollowCname(DnsQuestion question, String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private DnsServerAddressStreamgetNameServers(String name) private DnsServerAddressStreamgetNameServersFromCache(String hostname) Returns theDnsServerAddressStreamthat was cached for the given hostname ornullif non could be found.private booleanhandleRedirect(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) Handles a redirect answer if needed and returnstrueif a redirect query has been made.private booleanhasNDots()private static StringhostnameWithDot(String name) private voidinternalResolve(String name, Promise<List<T>> promise) (package private) abstract booleanisCompleteEarly(T resolved) (package private) abstract booleanReturnstrueif we should allow duplicates in the result orfalseif no duplicates should be included.private DnsQueryLifecycleObservernewDnsQueryLifecycleObserver(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 voidonExpectedResponse(DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private voidonResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse, InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private voidonResponseCNAME(DnsQuestion question, Map<String, String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise) private voidquery(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, boolean flush, Promise<List<T>> promise, Throwable cause) private booleanquery(String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<List<T>> promise) private voidqueryUnresolvedNameServer(InetSocketAddress nameServerAddr, DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<List<T>> promise, Throwable cause) private static AuthoritativeDnsServerCacheredirectAuthoritativeDnsServerCache(AuthoritativeDnsServerCache authoritativeDnsServerCache) (package private) void(package private) DnsCacheTheDnsCacheto use while resolving.private voidtryToFinishResolve(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()TheChannelused. -
resolveCache
DnsCache resolveCache()TheDnsCacheto use while resolving. -
cnameCache
DnsCnameCache cnameCache()TheDnsCnameCachethat is used for resolving. -
authoritativeDnsServerCache
AuthoritativeDnsServerCache authoritativeDnsServerCache()TheAuthoritativeDnsServerCacheto 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 givenDnsRecordintoT. -
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()Returnstrueif we should allow duplicates in the result orfalseif 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 theDnsServerAddressStreamthat was cached for the given hostname ornullif 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 returnstrueif 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
-