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 class
DnsResolveContext.AuthoritativeNameServer
private static class
DnsResolveContext.AuthoritativeNameServerList
Holds the closed DNS Servers for a domain.private class
DnsResolveContext.CombinedDnsServerAddressStream
private static class
DnsResolveContext.DnsAddressStreamList
(package private) static class
DnsResolveContext.DnsResolveContextException
private static class
DnsResolveContext.RedirectAuthoritativeDnsServerCache
private static class
DnsResolveContext.SearchDomainUnknownHostException
-
Field Summary
Fields Modifier and Type Field Description (package private) DnsRecord[]
additionals
private int
allowedQueries
private static java.lang.RuntimeException
CNAME_NOT_FOUND_QUERY_FAILED_EXCEPTION
private boolean
completeEarly
private int
dnsClass
private DnsRecordType[]
expectedTypes
private java.util.List<T>
finalResult
private java.lang.String
hostname
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 Promise<?>
originalPromise
(package private) DnsNameResolver
parent
private java.util.Set<Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>>
queriesInProgress
private boolean
triedCNAME
private static java.lang.RuntimeException
UNRECOGNIZED_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) AuthoritativeDnsServerCache
authoritativeDnsServerCache()
TheAuthoritativeDnsServerCache
to use while resolving.private static java.util.Map<java.lang.String,java.lang.String>
buildAliasMap(DnsResponse response, DnsCnameCache cache, EventLoop loop)
(package private) abstract void
cache(java.lang.String hostname, DnsRecord[] additionals, DnsRecord result, T convertedResult)
Caches a successful resolution.(package private) abstract void
cache(java.lang.String hostname, DnsRecord[] additionals, java.net.UnknownHostException cause)
Caches a failed resolution.private static void
checkCnameLoop(java.lang.String hostname, java.lang.String first, java.lang.String second)
(package private) DnsCnameCache
cnameCache()
TheDnsCnameCache
that is used for resolving.(package private) static java.lang.String
cnameResolveFromCache(DnsCnameCache cnameCache, java.lang.String name)
private static java.lang.String
cnameResolveFromCacheLoop(DnsCnameCache cnameCache, java.lang.String hostname, java.lang.String first, java.lang.String mapping)
(package private) abstract T
convertRecord(DnsRecord record, java.lang.String hostname, DnsRecord[] additionals, EventLoop eventLoop)
Converts the givenDnsRecord
intoT
.(package private) static java.lang.String
decodeDomainName(ByteBuf in)
(package private) void
doSearchDomainQuery(java.lang.String hostname, Promise<java.util.List<T>> nextPromise)
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.(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 void
finishResolve(Promise<java.util.List<T>> promise, java.lang.Throwable cause)
private void
followCname(DnsQuestion question, java.lang.String cname, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
private DnsServerAddressStream
getNameServers(java.lang.String hostname)
private DnsServerAddressStream
getNameServersFromCache(java.lang.String hostname)
Returns theDnsServerAddressStream
that was cached for the given hostname ornull
if non could be found.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 returnstrue
if a redirect query has been made.private boolean
hasNDots()
private static java.lang.String
hostnameWithDot(java.lang.String name)
private void
internalResolve(java.lang.String name, Promise<java.util.List<T>> promise)
(package private) abstract boolean
isCompleteEarly(T resolved)
(package private) abstract boolean
isDuplicateAllowed()
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, Promise<?> originalPromise, java.lang.String hostname, int dnsClass, DnsRecordType[] expectedTypes, DnsRecord[] additionals, DnsServerAddressStream nameServerAddrs)
Creates a new context with the given parameters.private void
onExpectedResponse(DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
private void
onResponse(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, AddressedEnvelope<DnsResponse,java.net.InetSocketAddress> envelope, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
private void
onResponseCNAME(DnsQuestion question, java.util.Map<java.lang.String,java.lang.String> cnames, DnsQueryLifecycleObserver queryLifecycleObserver, Promise<java.util.List<T>> promise)
private void
query(DnsServerAddressStream nameServerAddrStream, int nameServerAddrStreamIndex, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, boolean flush, Promise<java.util.List<T>> promise, java.lang.Throwable cause)
private boolean
query(java.lang.String hostname, DnsRecordType type, DnsServerAddressStream dnsServerAddressStream, boolean flush, Promise<java.util.List<T>> promise)
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)
private static AuthoritativeDnsServerCache
redirectAuthoritativeDnsServerCache(AuthoritativeDnsServerCache authoritativeDnsServerCache)
(package private) void
resolve(Promise<java.util.List<T>> promise)
(package private) DnsCache
resolveCache()
TheDnsCache
to use while resolving.private void
tryToFinishResolve(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()
TheDnsCnameCache
that is used for resolving.
-
authoritativeDnsServerCache
AuthoritativeDnsServerCache authoritativeDnsServerCache()
TheAuthoritativeDnsServerCache
to 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 givenDnsRecord
intoT
.
-
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()
Returnstrue
if we should allow duplicates in the result orfalse
if 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 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<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 returnstrue
if 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)
-
-