Package io.netty.resolver.dns
Class DnsResolveContext<T>
- java.lang.Object
-
- io.netty.resolver.dns.DnsResolveContext<T>
-
- Direct Known Subclasses:
DnsAddressResolveContext,DnsRecordResolveContext
abstract class DnsResolveContext<T> extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classDnsResolveContext.AuthoritativeNameServerprivate static classDnsResolveContext.AuthoritativeNameServerListHolds the closed DNS Servers for a domain.private classDnsResolveContext.CombinedDnsServerAddressStreamprivate static classDnsResolveContext.DnsAddressStreamList(package private) static classDnsResolveContext.DnsResolveContextExceptionprivate static classDnsResolveContext.RedirectAuthoritativeDnsServerCacheprivate static classDnsResolveContext.SearchDomainUnknownHostException
-
Field Summary
Fields Modifier and Type Field Description (package private) DnsRecord[]additionalsprivate intallowedQueriesprivate static java.lang.RuntimeExceptionCNAME_NOT_FOUND_QUERY_FAILED_EXCEPTIONprivate booleancompleteEarlyprivate intdnsClassprivate DnsRecordType[]expectedTypesprivate java.util.List<T>finalResultprivate java.lang.Stringhostnameprivate intmaxAllowedQueriesprivate static java.lang.RuntimeExceptionNAME_SERVERS_EXHAUSTED_EXCEPTIONprivate DnsServerAddressStreamnameServerAddrsprivate static java.lang.RuntimeExceptionNO_MATCHING_RECORD_QUERY_FAILED_EXCEPTIONprivate static java.lang.RuntimeExceptionNXDOMAIN_QUERY_FAILED_EXCEPTIONprivate Promise<?>originalPromise(package private) DnsNameResolverparentprivate java.util.Set<Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>>queriesInProgressprivate booleantriedCNAMEprivate static java.lang.RuntimeExceptionUNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION
-
Constructor Summary
Constructors Constructor Description DnsResolveContext(DnsNameResolver parent, Promise<?> originalPromise, java.lang.String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description (package private) AuthoritativeDnsServerCacheauthoritativeDnsServerCache()TheAuthoritativeDnsServerCacheto use while resolving.private static java.util.Map<java.lang.String,java.lang.String>buildAliasMap(DnsResponse response, DnsCnameCache cache, EventLoop loop)(package private) abstract voidcache(java.lang.String hostname, DnsRecord[] additionals, DnsRecord result, T convertedResult)Caches a successful resolution.(package private) abstract voidcache(java.lang.String hostname, DnsRecord[] additionals, java.net.UnknownHostException cause)Caches a failed resolution.private static voidcheckCnameLoop(java.lang.String hostname, java.lang.String first, java.lang.String second)(package private) DnsCnameCachecnameCache()TheDnsCnameCachethat is used for resolving.(package private) static java.lang.StringcnameResolveFromCache(DnsCnameCache cnameCache, java.lang.String name)private static java.lang.StringcnameResolveFromCacheLoop(DnsCnameCache cnameCache, java.lang.String hostname, java.lang.String first, java.lang.String mapping)(package private) abstract TconvertRecord(DnsRecord record, java.lang.String hostname, DnsRecord[] additionals, EventLoop eventLoop)Converts the givenDnsRecordintoT.(package private) static java.lang.StringdecodeDomainName(ByteBuf in)(package private) voiddoSearchDomainQuery(java.lang.String hostname, Promise<java.util.List<T>> nextPromise)private static DnsResolveContext.AuthoritativeNameServerListextractAuthoritativeNameServers(java.lang.String questionName, DnsResponse res)Returns the {@code {@link AuthoritativeNameServerList} which were included in {@link DnsSection#AUTHORITY} or {@code null} if non are found.(package private) abstract java.util.List<T>filterResults(java.util.List<T> unfiltered)Returns a filtered list of results which should be the final result of DNS resolution.private voidfinishResolve(Promise<java.util.List<T>> promise, java.lang.Throwable cause)private voidfollowCname(DnsQuestion question, java.lang.String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)private DnsServerAddressStreamgetNameServers(java.lang.String hostname)private DnsServerAddressStreamgetNameServersFromCache(java.lang.String hostname)Returns theDnsServerAddressStreamthat was cached for the given hostname ornullif non could be found.private booleanhandleRedirect(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)Handles a redirect answer if needed and returnstrueif a redirect query has been made.private booleanhasNDots()private static java.lang.StringhostnameWithDot(java.lang.String name)private voidinternalResolve(java.lang.String name, Promise<java.util.List<T>> promise)(package private) abstract booleanisCompleteEarly(T resolved)(package private) abstract booleanisDuplicateAllowed()Returnstrueif 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, Promise<?> originalPromise, java.lang.String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs)Creates a new context with the given parameters.private voidonExpectedResponse(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)private voidonResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)private voidonResponseCNAME(DnsQuestion question, java.util.Map<java.lang.String,java.lang.String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)private voidquery(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, boolean flush, Promise<java.util.List<T>> promise, java.lang.Throwable cause)private booleanquery(java.lang.String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<java.util.List<T>> promise)private voidqueryUnresolvedNameServer(java.net.InetSocketAddress nameServerAddr, DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise, java.lang.Throwable cause)private static AuthoritativeDnsServerCacheredirectAuthoritativeDnsServerCache(AuthoritativeDnsServerCache authoritativeDnsServerCache)(package private) voidresolve(Promise<java.util.List<T>> promise)(package private) DnsCacheresolveCache()TheDnsCacheto use while resolving.private voidtryToFinishResolve(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise, java.lang.Throwable cause)
-
-
-
Field Detail
-
NXDOMAIN_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException NXDOMAIN_QUERY_FAILED_EXCEPTION
-
CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION
-
NO_MATCHING_RECORD_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException NO_MATCHING_RECORD_QUERY_FAILED_EXCEPTION
-
UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION
private static final java.lang.RuntimeException UNRECOGNIZED_TYPE_QUERY_FAILED_EXCEPTION
-
NAME_SERVERS_EXHAUSTED_EXCEPTION
private static final java.lang.RuntimeException NAME_SERVERS_EXHAUSTED_EXCEPTION
-
parent
final DnsNameResolver parent
-
originalPromise
private final Promise<?> originalPromise
-
nameServerAddrs
private final DnsServerAddressStream nameServerAddrs
-
hostname
private final java.lang.String hostname
-
dnsClass
private final int dnsClass
-
expectedTypes
private final DnsRecordType[] expectedTypes
-
maxAllowedQueries
private final int maxAllowedQueries
-
additionals
final DnsRecord[] additionals
-
queriesInProgress
private final java.util.Set<Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>> queriesInProgress
-
finalResult
private java.util.List<T> finalResult
-
allowedQueries
private int allowedQueries
-
triedCNAME
private boolean triedCNAME
-
completeEarly
private boolean completeEarly
-
-
Constructor Detail
-
DnsResolveContext
DnsResolveContext(DnsNameResolver parent, Promise<?> originalPromise, java.lang.String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs)
-
-
Method Detail
-
cnameCache
DnsCnameCache cnameCache()
TheDnsCnameCachethat is used for resolving.
-
authoritativeDnsServerCache
AuthoritativeDnsServerCache authoritativeDnsServerCache()
TheAuthoritativeDnsServerCacheto use while resolving.
-
newResolverContext
abstract DnsResolveContext<T> newResolverContext(DnsNameResolver parent, Promise<?> originalPromise, java.lang.String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs)
Creates a new context with the given parameters.
-
convertRecord
abstract T convertRecord(DnsRecord record, java.lang.String hostname, DnsRecord[] additionals, EventLoop eventLoop)
Converts the givenDnsRecordintoT.
-
filterResults
abstract java.util.List<T> filterResults(java.util.List<T> unfiltered)
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
abstract boolean isCompleteEarly(T resolved)
-
isDuplicateAllowed
abstract boolean isDuplicateAllowed()
Returnstrueif we should allow duplicates in the result orfalseif no duplicates should be included.
-
cache
abstract void cache(java.lang.String hostname, DnsRecord[] additionals, DnsRecord result, T convertedResult)Caches a successful resolution.
-
cache
abstract void cache(java.lang.String hostname, DnsRecord[] additionals, java.net.UnknownHostException cause)Caches a failed resolution.
-
hasNDots
private boolean hasNDots()
-
doSearchDomainQuery
void doSearchDomainQuery(java.lang.String hostname, Promise<java.util.List<T>> nextPromise)
-
hostnameWithDot
private static java.lang.String hostnameWithDot(java.lang.String name)
-
cnameResolveFromCache
static java.lang.String cnameResolveFromCache(DnsCnameCache cnameCache, java.lang.String name) throws java.net.UnknownHostException
- Throws:
java.net.UnknownHostException
-
cnameResolveFromCacheLoop
private static java.lang.String cnameResolveFromCacheLoop(DnsCnameCache cnameCache, java.lang.String hostname, java.lang.String first, java.lang.String mapping) throws java.net.UnknownHostException
- Throws:
java.net.UnknownHostException
-
checkCnameLoop
private static void checkCnameLoop(java.lang.String hostname, java.lang.String first, java.lang.String second) throws java.net.UnknownHostException- Throws:
java.net.UnknownHostException
-
internalResolve
private void internalResolve(java.lang.String name, Promise<java.util.List<T>> promise)
-
getNameServersFromCache
private DnsServerAddressStream getNameServersFromCache(java.lang.String hostname)
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<java.util.List<T>> promise, java.lang.Throwable cause)
-
queryUnresolvedNameServer
private void queryUnresolvedNameServer(java.net.InetSocketAddress nameServerAddr, DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise, java.lang.Throwable cause)
-
redirectAuthoritativeDnsServerCache
private static AuthoritativeDnsServerCache redirectAuthoritativeDnsServerCache(AuthoritativeDnsServerCache authoritativeDnsServerCache)
-
onResponse
private void onResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
-
handleRedirect
private boolean handleRedirect(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
Handles a redirect answer if needed and returnstrueif a redirect query has been made.
-
extractAuthoritativeNameServers
private static DnsResolveContext.AuthoritativeNameServerList extractAuthoritativeNameServers(java.lang.String questionName, DnsResponse res)
Returns the {@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,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
-
onResponseCNAME
private void onResponseCNAME(DnsQuestion question, java.util.Map<java.lang.String,java.lang.String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
-
buildAliasMap
private static java.util.Map<java.lang.String,java.lang.String> buildAliasMap(DnsResponse response, DnsCnameCache cache, EventLoop loop)
-
tryToFinishResolve
private void tryToFinishResolve(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise, java.lang.Throwable cause)
-
finishResolve
private void finishResolve(Promise<java.util.List<T>> promise, java.lang.Throwable cause)
-
decodeDomainName
static java.lang.String decodeDomainName(ByteBuf in)
-
getNameServers
private DnsServerAddressStream getNameServers(java.lang.String hostname)
-
followCname
private void followCname(DnsQuestion question, java.lang.String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
-
query
private boolean query(java.lang.String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<java.util.List<T>> promise)
-
newDnsQueryLifecycleObserver
private DnsQueryLifecycleObserver newDnsQueryLifecycleObserver(DnsQuestion question)
-
-