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
  • Field Details

    • logger

      private static final InternalLogger logger
    • PROP_TRY_FINAL_CNAME_ON_ADDRESS_LOOKUPS

      private static final java.lang.String 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

      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
    • SERVFAIL_QUERY_FAILED_EXCEPTION

      private static final java.lang.RuntimeException SERVFAIL_QUERY_FAILED_EXCEPTION
    • NXDOMAIN_CAUSE_QUERY_FAILED_EXCEPTION

      private static final java.lang.RuntimeException NXDOMAIN_CAUSE_QUERY_FAILED_EXCEPTION
    • parent

      final DnsNameResolver parent
    • channel

      private final Channel channel
    • 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
    • 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 Details

  • Method Details

    • channel

      Channel channel()
      The Channel used.
    • resolveCache

      DnsCache resolveCache()
      The DnsCache to use while resolving.
    • cnameCache

      DnsCnameCache cnameCache()
      The DnsCnameCache that is used for resolving.
    • authoritativeDnsServerCache

      AuthoritativeDnsServerCache authoritativeDnsServerCache()
      The AuthoritativeDnsServerCache to use while resolving.
    • newResolverContext

      abstract DnsResolveContext<T> newResolverContext(DnsNameResolver parent, Channel channel, Promise<?> originalPromise, java.lang.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, java.lang.String hostname, DnsRecord[] additionals, EventLoop eventLoop)
      Converts the given DnsRecord into T.
    • 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 as NetUtil.isIpV6AddressesPreferred().
    • isCompleteEarly

      abstract boolean isCompleteEarly(T resolved)
    • isDuplicateAllowed

      abstract boolean isDuplicateAllowed()
      Returns true if we should allow duplicates in the result or false 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.
    • resolve

      void resolve(Promise<java.util.List<T>> promise)
    • 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 the DnsServerAddressStream that was cached for the given hostname or null 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 returns true if a redirect query has been made.
    • cause

      private static java.lang.Throwable cause(DnsResponseCode code)
    • extractAuthoritativeNameServers

      private static DnsResolveContext.AuthoritativeNameServerList extractAuthoritativeNameServers(java.lang.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, 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(java.lang.String queryName, 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 name)
    • 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)