Class DnsNameResolver

java.lang.Object
io.netty.resolver.SimpleNameResolver<java.net.InetAddress>
io.netty.resolver.InetNameResolver
io.netty.resolver.dns.DnsNameResolver
All Implemented Interfaces:
NameResolver<java.net.InetAddress>, java.io.Closeable, java.lang.AutoCloseable

public class DnsNameResolver extends InetNameResolver
A DNS-based InetNameResolver.
  • Field Details

    • DNS_PIPELINE_ATTRIBUTE

      public static final AttributeKey<java.lang.Boolean> DNS_PIPELINE_ATTRIBUTE
      An attribute used to mark all channels created by the DnsNameResolver.
    • logger

      private static final InternalLogger logger
    • LOCALHOST

      private static final java.lang.String LOCALHOST
      See Also:
    • DOT_LOCALHOST

      private static final java.lang.String DOT_LOCALHOST
      See Also:
    • WINDOWS_HOST_NAME

      private static final java.lang.String WINDOWS_HOST_NAME
    • EMPTY_ADDITIONALS

      private static final DnsRecord[] EMPTY_ADDITIONALS
    • IPV4_ONLY_RESOLVED_RECORD_TYPES

      private static final DnsRecordType[] IPV4_ONLY_RESOLVED_RECORD_TYPES
    • IPV4_ONLY_RESOLVED_PROTOCOL_FAMILIES

      private static final SocketProtocolFamily[] IPV4_ONLY_RESOLVED_PROTOCOL_FAMILIES
    • IPV4_PREFERRED_RESOLVED_RECORD_TYPES

      private static final DnsRecordType[] IPV4_PREFERRED_RESOLVED_RECORD_TYPES
    • IPV4_PREFERRED_RESOLVED_PROTOCOL_FAMILIES

      private static final SocketProtocolFamily[] IPV4_PREFERRED_RESOLVED_PROTOCOL_FAMILIES
    • IPV6_ONLY_RESOLVED_RECORD_TYPES

      private static final DnsRecordType[] IPV6_ONLY_RESOLVED_RECORD_TYPES
    • IPV6_ONLY_RESOLVED_PROTOCOL_FAMILIES

      private static final SocketProtocolFamily[] IPV6_ONLY_RESOLVED_PROTOCOL_FAMILIES
    • IPV6_PREFERRED_RESOLVED_RECORD_TYPES

      private static final DnsRecordType[] IPV6_PREFERRED_RESOLVED_RECORD_TYPES
    • IPV6_PREFERRED_RESOLVED_PROTOCOL_FAMILIES

      private static final SocketProtocolFamily[] IPV6_PREFERRED_RESOLVED_PROTOCOL_FAMILIES
    • NOOP_HANDLER

      private static final ChannelHandler NOOP_HANDLER
    • RESOLVE_LOCALHOST_WITHOUT_DNS_PROPERTY

      private static final java.lang.String RESOLVE_LOCALHOST_WITHOUT_DNS_PROPERTY
      System property to control RFC 6761 localhost resolution.

      When true (the default), localhost and *.localhost are resolved to the loopback address without querying DNS servers. When false, only the pre-#16749 rules apply (Windows localhost and the Windows machine hostname). Set to false when *.localhost hostnames must resolve via DNS to non-loopback addresses.

      See Also:
    • resolveLocalhostWithoutDns

      static boolean resolveLocalhostWithoutDns
    • DEFAULT_RESOLVE_ADDRESS_TYPES

      static final ResolvedAddressTypes DEFAULT_RESOLVE_ADDRESS_TYPES
    • DEFAULT_SEARCH_DOMAINS

      static final java.lang.String[] DEFAULT_SEARCH_DOMAINS
    • DEFAULT_OPTIONS

      private static final UnixResolverOptions DEFAULT_OPTIONS
    • DATAGRAM_DECODER

      private static final DatagramDnsResponseDecoder DATAGRAM_DECODER
    • DATAGRAM_ENCODER

      private static final DatagramDnsQueryEncoder DATAGRAM_ENCODER
    • RELEASE_LISTENER

      private static final GenericFutureListener<Future<? super AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>>> RELEASE_LISTENER
    • nameServerComparator

      private final java.util.Comparator<java.net.InetSocketAddress> nameServerComparator
    • queryContextManager

      private final DnsQueryContextManager queryContextManager
      Manages the DnsQueryContexts in progress and their query IDs.
    • resolveCache

      private final DnsCache resolveCache
    • authoritativeDnsServerCache

      private final AuthoritativeDnsServerCache authoritativeDnsServerCache
    • cnameCache

      private final DnsCnameCache cnameCache
    • queryDnsServerAddressStream

      private final DnsServerAddressStream queryDnsServerAddressStream
    • queryTimeoutMillis

      private final long queryTimeoutMillis
    • maxQueriesPerResolve

      private final int maxQueriesPerResolve
    • resolvedAddressTypes

      private final ResolvedAddressTypes resolvedAddressTypes
    • resolvedInternetProtocolFamilies

      private final SocketProtocolFamily[] resolvedInternetProtocolFamilies
    • recursionDesired

      private final boolean recursionDesired
    • maxPayloadSize

      private final int maxPayloadSize
    • optResourceEnabled

      private final boolean optResourceEnabled
    • hostsFileEntriesResolver

      private final HostsFileEntriesResolver hostsFileEntriesResolver
    • dnsServerAddressStreamProvider

      private final DnsServerAddressStreamProvider dnsServerAddressStreamProvider
    • searchDomains

      private final java.lang.String[] searchDomains
    • ndots

      private final int ndots
    • supportsAAAARecords

      private final boolean supportsAAAARecords
    • supportsARecords

      private final boolean supportsARecords
    • preferredAddressType

      private final SocketProtocolFamily preferredAddressType
    • resolveRecordTypes

      private final DnsRecordType[] resolveRecordTypes
    • decodeIdn

      private final boolean decodeIdn
    • dnsQueryLifecycleObserverFactory

      private final DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory
    • completeOncePreferredResolved

      private final boolean completeOncePreferredResolved
    • queryProtection

      private final DnsQueryProtection queryProtection
    • resolveChannelProvider

      private final DnsNameResolver.DnsResolveChannelProvider resolveChannelProvider
    • socketBootstrap

      private final Bootstrap socketBootstrap
    • retryWithTcpOnTimeout

      private final boolean retryWithTcpOnTimeout
    • maxNumConsolidation

      private final int maxNumConsolidation
    • inflightLookups

      private final java.util.Map<DnsQuestion, Promise<AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>>> inflightLookups
  • Constructor Details

    • DnsNameResolver

      @Deprecated public DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, DnsCache resolveCache, DnsCache authoritativeDnsServerCache, DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory, long queryTimeoutMillis, ResolvedAddressTypes resolvedAddressTypes, boolean recursionDesired, int maxQueriesPerResolve, boolean traceEnabled, int maxPayloadSize, boolean optResourceEnabled, HostsFileEntriesResolver hostsFileEntriesResolver, DnsServerAddressStreamProvider dnsServerAddressStreamProvider, java.lang.String[] searchDomains, int ndots, boolean decodeIdn)
      Deprecated.
      Creates a new DNS-based name resolver that communicates with the specified list of DNS servers.
      Parameters:
      eventLoop - the EventLoop which will perform the communication with the DNS servers
      channelFactory - the ChannelFactory that will create a DatagramChannel
      resolveCache - the DNS resolved entries cache
      authoritativeDnsServerCache - the cache used to find the authoritative DNS server for a domain
      dnsQueryLifecycleObserverFactory - used to generate new instances of DnsQueryLifecycleObserver which can be used to track metrics for DNS servers.
      queryTimeoutMillis - timeout of each DNS query in millis. 0 disables the timeout. If not set or a negative number is set, the default timeout is used.
      resolvedAddressTypes - the preferred address types
      recursionDesired - if recursion desired flag must be set
      maxQueriesPerResolve - the maximum allowed number of DNS queries for a given name resolution
      traceEnabled - if trace is enabled
      maxPayloadSize - the capacity of the datagram packet buffer
      optResourceEnabled - if automatic inclusion of a optional records is enabled
      hostsFileEntriesResolver - the HostsFileEntriesResolver used to check for local aliases
      dnsServerAddressStreamProvider - The DnsServerAddressStreamProvider used to determine the name servers for each hostname lookup.
      searchDomains - the list of search domain (can be null, if so, will try to default to the underlying platform ones)
      ndots - the ndots value
      decodeIdn - true if domain / host names should be decoded to unicode when received. See rfc3492.
    • DnsNameResolver

      @Deprecated public DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, DnsCache resolveCache, AuthoritativeDnsServerCache authoritativeDnsServerCache, DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory, long queryTimeoutMillis, ResolvedAddressTypes resolvedAddressTypes, boolean recursionDesired, int maxQueriesPerResolve, boolean traceEnabled, int maxPayloadSize, boolean optResourceEnabled, HostsFileEntriesResolver hostsFileEntriesResolver, DnsServerAddressStreamProvider dnsServerAddressStreamProvider, java.lang.String[] searchDomains, int ndots, boolean decodeIdn)
      Deprecated.
      Creates a new DNS-based name resolver that communicates with the specified list of DNS servers.
      Parameters:
      eventLoop - the EventLoop which will perform the communication with the DNS servers
      channelFactory - the ChannelFactory that will create a DatagramChannel
      resolveCache - the DNS resolved entries cache
      authoritativeDnsServerCache - the cache used to find the authoritative DNS server for a domain
      dnsQueryLifecycleObserverFactory - used to generate new instances of DnsQueryLifecycleObserver which can be used to track metrics for DNS servers.
      queryTimeoutMillis - timeout of each DNS query in millis. 0 disables the timeout. If not set or a negative number is set, the default timeout is used.
      resolvedAddressTypes - the preferred address types
      recursionDesired - if recursion desired flag must be set
      maxQueriesPerResolve - the maximum allowed number of DNS queries for a given name resolution
      traceEnabled - if trace is enabled
      maxPayloadSize - the capacity of the datagram packet buffer
      optResourceEnabled - if automatic inclusion of a optional records is enabled
      hostsFileEntriesResolver - the HostsFileEntriesResolver used to check for local aliases
      dnsServerAddressStreamProvider - The DnsServerAddressStreamProvider used to determine the name servers for each hostname lookup.
      searchDomains - the list of search domain (can be null, if so, will try to default to the underlying platform ones)
      ndots - the ndots value
      decodeIdn - true if domain / host names should be decoded to unicode when received. See rfc3492.
    • DnsNameResolver

      DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, ChannelFactory<? extends SocketChannel> socketChannelFactory, boolean retryWithTcpOnTimeout, DnsCache resolveCache, DnsCnameCache cnameCache, AuthoritativeDnsServerCache authoritativeDnsServerCache, java.net.SocketAddress localAddress, DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory, long queryTimeoutMillis, ResolvedAddressTypes resolvedAddressTypes, boolean recursionDesired, int maxQueriesPerResolve, boolean traceEnabled, int maxPayloadSize, boolean optResourceEnabled, HostsFileEntriesResolver hostsFileEntriesResolver, DnsServerAddressStreamProvider dnsServerAddressStreamProvider, DnsServerAddressStream queryDnsServerAddressStream, java.lang.String[] searchDomains, int ndots, boolean decodeIdn, boolean completeOncePreferredResolved, int maxNumConsolidation, DnsNameResolverChannelStrategy datagramChannelStrategy)
    • DnsNameResolver

      DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, ChannelFactory<? extends SocketChannel> socketChannelFactory, boolean retryWithTcpOnTimeout, DnsCache resolveCache, DnsCnameCache cnameCache, AuthoritativeDnsServerCache authoritativeDnsServerCache, java.net.SocketAddress localAddress, DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory, long queryTimeoutMillis, ResolvedAddressTypes resolvedAddressTypes, boolean recursionDesired, int maxQueriesPerResolve, boolean traceEnabled, int maxPayloadSize, boolean optResourceEnabled, HostsFileEntriesResolver hostsFileEntriesResolver, DnsServerAddressStreamProvider dnsServerAddressStreamProvider, DnsServerAddressStream queryDnsServerAddressStream, java.lang.String[] searchDomains, int ndots, boolean decodeIdn, boolean completeOncePreferredResolved, int maxNumConsolidation, DnsNameResolverChannelStrategy datagramChannelStrategy, boolean caseRandomizationEnabled, boolean dnsCookiesEnabled)
  • Method Details

    • anyInterfaceSupportsIpV6

      private static boolean anyInterfaceSupportsIpV6()
      Returns true if any NetworkInterface supports IPv6, false otherwise.
    • getSearchDomainsHack

      private static java.util.List<java.lang.String> getSearchDomainsHack() throws java.lang.Exception
      Throws:
      java.lang.Exception
    • newProvider

      private static DnsNameResolver.DnsResolveChannelProvider newProvider(DnsNameResolverChannelStrategy channelStrategy, Bootstrap bootstrap, java.net.SocketAddress localAddress)
    • preferredAddressType

      static SocketProtocolFamily preferredAddressType(ResolvedAddressTypes resolvedAddressTypes)
    • newRedirectServerAddress

      java.net.InetSocketAddress newRedirectServerAddress(java.net.InetAddress server)
    • dnsQueryLifecycleObserverFactory

      final DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory()
    • newRedirectDnsServerStream

      protected DnsServerAddressStream newRedirectDnsServerStream(java.lang.String hostname, java.util.List<java.net.InetSocketAddress> nameservers)
      Creates a new DnsServerAddressStream to following a redirected DNS query. By overriding this it provides the opportunity to sort the name servers before following a redirected DNS query.
      Parameters:
      hostname - the hostname.
      nameservers - The addresses of the DNS servers which are used in the event of a redirect. This may contain resolved and unresolved addresses so the used DnsServerAddressStream must allow unresolved addresses if you want to include these as well.
      Returns:
      A DnsServerAddressStream which will be used to follow the DNS redirect or null if none should be followed.
    • resolveCache

      public DnsCache resolveCache()
      Returns the resolution cache.
    • cnameCache

      public DnsCnameCache cnameCache()
      Returns the DnsCnameCache.
    • authoritativeDnsServerCache

      public AuthoritativeDnsServerCache authoritativeDnsServerCache()
      Returns the cache used for authoritative DNS servers for a domain.
    • queryTimeoutMillis

      public long queryTimeoutMillis()
      Returns the timeout of each DNS query performed by this resolver (in milliseconds). The default value is 5 seconds.
    • queryDnsServerAddressStream

      public DnsServerAddressStream queryDnsServerAddressStream()
      Returns the dns server address stream used for DNS queries (not resolve).
    • resolvedAddressTypes

      public ResolvedAddressTypes resolvedAddressTypes()
      Returns the ResolvedAddressTypes resolved by SimpleNameResolver.resolve(String). The default value depends on the value of the system property "java.net.preferIPv6Addresses".
    • resolvedInternetProtocolFamiliesUnsafe

      SocketProtocolFamily[] resolvedInternetProtocolFamiliesUnsafe()
    • searchDomains

      final java.lang.String[] searchDomains()
    • ndots

      final int ndots()
    • supportsAAAARecords

      final boolean supportsAAAARecords()
    • supportsARecords

      final boolean supportsARecords()
    • preferredAddressType

      final SocketProtocolFamily preferredAddressType()
    • resolveRecordTypes

      final DnsRecordType[] resolveRecordTypes()
    • isDecodeIdn

      final boolean isDecodeIdn()
    • isRecursionDesired

      public boolean isRecursionDesired()
      Returns true if and only if this resolver sends a DNS query with the RD (recursion desired) flag set. The default value is true.
    • maxQueriesPerResolve

      public int maxQueriesPerResolve()
      Returns the maximum allowed number of DNS queries to send when resolving a host name. The default value is 8.
    • maxPayloadSize

      public int maxPayloadSize()
      Returns the capacity of the datagram packet buffer (in bytes). The default value is 4096 bytes.
    • isCaseRandomizationEnabled

      public boolean isCaseRandomizationEnabled()
      Returns true if the case of the name in the questions of UDP queries is randomized ("0x20").
    • isDnsCookiesEnabled

      public boolean isDnsCookiesEnabled()
      Returns true if a client cookie as defined by RFC 7873 is sent with UDP queries and validated in the responses.
    • isOptResourceEnabled

      public boolean isOptResourceEnabled()
      Returns the automatic inclusion of a optional records that tries to give the remote DNS server a hint about how much data the resolver can read per response is enabled.
    • hostsFileEntriesResolver

      public HostsFileEntriesResolver hostsFileEntriesResolver()
      Returns the component that tries to resolve hostnames against the hosts file prior to asking to remotes DNS servers.
    • close

      public void close()
      Closes the internal datagram channel used for sending and receiving DNS messages, and clears all DNS resource records from the cache. Attempting to send a DNS query or to resolve a domain name will fail once this method has been called.
      Specified by:
      close in interface java.lang.AutoCloseable
      Specified by:
      close in interface java.io.Closeable
      Specified by:
      close in interface NameResolver<java.net.InetAddress>
      Overrides:
      close in class SimpleNameResolver<java.net.InetAddress>
    • executor

      protected EventLoop executor()
      Description copied from class: SimpleNameResolver
      Returns the EventExecutor which is used to notify the listeners of the Future returned by SimpleNameResolver.resolve(String).
      Overrides:
      executor in class SimpleNameResolver<java.net.InetAddress>
    • resolveHostsFileEntry

      private java.net.InetAddress resolveHostsFileEntry(java.lang.String hostname)
    • resolveHostsFileEntries

      private java.util.List<java.net.InetAddress> resolveHostsFileEntries(java.lang.String hostname)
    • isLocalHostAddress

      private static boolean isLocalHostAddress(java.lang.String hostname)
      Checks whether the given hostname refers to the current computer. This is the case for:
      • localhost.
      • any domain within .localhost.
      • the hostname of the local computer on Windows

      According to RFC 6761 Section 6.3, localhost and subdomains of localhost should be resolved to the loopback address by name resolution libraries without querying DNS servers. The hostname of the local machine can usually be resolved from the hosts file, but on Windows, this is no longer possible.

      RFC 6761 behavior for localhost and *.localhost can be disabled via the io.netty.resolver.dns.resolveLocalhostWithoutDns system property.

      Parameters:
      hostname - the hostname that's being looked up
      Returns:
      true if the hostname should point to the loopback address. False otherwise.
      See Also:
    • getLocalHostAddress

      private java.net.InetAddress getLocalHostAddress()
    • resolve

      public final Future<java.net.InetAddress> resolve(java.lang.String inetHost, java.lang.Iterable<DnsRecord> additionals)
      Resolves the specified name into an address.
      Parameters:
      inetHost - the name to resolve
      additionals - additional records (OPT)
      Returns:
      the address as the result of the resolution
    • resolve

      public final Future<java.net.InetAddress> resolve(java.lang.String inetHost, java.lang.Iterable<DnsRecord> additionals, Promise<java.net.InetAddress> promise)
      Resolves the specified name into an address.
      Parameters:
      inetHost - the name to resolve
      additionals - additional records (OPT)
      promise - the Promise which will be fulfilled when the name resolution is finished
      Returns:
      the address as the result of the resolution
    • resolveAll

      public final Future<java.util.List<java.net.InetAddress>> resolveAll(java.lang.String inetHost, java.lang.Iterable<DnsRecord> additionals)
      Resolves the specified host name and port into a list of address.
      Parameters:
      inetHost - the name to resolve
      additionals - additional records (OPT)
      Returns:
      the list of the address as the result of the resolution
    • resolveAll

      public final Future<java.util.List<java.net.InetAddress>> resolveAll(java.lang.String inetHost, java.lang.Iterable<DnsRecord> additionals, Promise<java.util.List<java.net.InetAddress>> promise)
      Resolves the specified host name and port into a list of address.
      Parameters:
      inetHost - the name to resolve
      additionals - additional records (OPT)
      promise - the Promise which will be fulfilled when the name resolution is finished
      Returns:
      the list of the address as the result of the resolution
    • doResolve

      protected void doResolve(java.lang.String inetHost, Promise<java.net.InetAddress> promise) throws java.lang.Exception
      Description copied from class: SimpleNameResolver
      Invoked by SimpleNameResolver.resolve(String) to perform the actual name resolution.
      Specified by:
      doResolve in class SimpleNameResolver<java.net.InetAddress>
      Throws:
      java.lang.Exception
    • resolveAll

      public final Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question)
      Resolves the DnsRecords that are matched by the specified DnsQuestion. Unlike query(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specified DnsQuestion is A or AAAA, this method looks up the configured HostsFileEntries before sending a query to the name servers. If a match is found in the HostsFileEntries, a synthetic A or AAAA record will be returned.
      Parameters:
      question - the question
      Returns:
      the list of the DnsRecords as the result of the resolution
    • resolveAll

      public final Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question, java.lang.Iterable<DnsRecord> additionals)
      Resolves the DnsRecords that are matched by the specified DnsQuestion. Unlike query(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specified DnsQuestion is A or AAAA, this method looks up the configured HostsFileEntries before sending a query to the name servers. If a match is found in the HostsFileEntries, a synthetic A or AAAA record will be returned.
      Parameters:
      question - the question
      additionals - additional records (OPT)
      Returns:
      the list of the DnsRecords as the result of the resolution
    • resolveAll

      public final Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question, java.lang.Iterable<DnsRecord> additionals, Promise<java.util.List<DnsRecord>> promise)
      Resolves the DnsRecords that are matched by the specified DnsQuestion. Unlike query(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specified DnsQuestion is A or AAAA, this method looks up the configured HostsFileEntries before sending a query to the name servers. If a match is found in the HostsFileEntries, a synthetic A or AAAA record will be returned.
      Parameters:
      question - the question
      additionals - additional records (OPT)
      promise - the Promise which will be fulfilled when the resolution is finished
      Returns:
      the list of the DnsRecords as the result of the resolution
    • resolveAll

      private Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question, DnsRecord[] additionals, Promise<java.util.List<DnsRecord>> promise)
    • resolveAllNow

      private void resolveAllNow(ChannelFuture f, java.lang.String hostname, DnsQuestion question, DnsRecord[] additionals, Promise<java.util.List<DnsRecord>> promise)
    • toException

      private static java.net.UnknownHostException toException(ChannelFuture f, java.lang.String hostname, DnsQuestion question, DnsRecord[] additionals)
    • toArray

      private static DnsRecord[] toArray(java.lang.Iterable<DnsRecord> additionals, boolean validateType)
    • validateAdditional

      private static void validateAdditional(DnsRecord record, boolean validateType)
    • loopbackAddress

      private java.net.InetAddress loopbackAddress()
    • doResolve

      protected void doResolve(java.lang.String inetHost, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache) throws java.lang.Exception
      Hook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.
      Throws:
      java.lang.Exception
    • doResolveNow

      private void doResolveNow(ChannelFuture f, java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache)
    • doResolveCached

      private boolean doResolveCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache)
    • addressType

      static java.lang.Class<? extends java.net.InetAddress> addressType(SocketProtocolFamily f)
    • trySuccess

      static <T> boolean trySuccess(Promise<T> promise, T result)
    • tryFailure

      private static void tryFailure(Promise<?> promise, java.lang.Throwable cause)
    • doResolveUncached

      private void doResolveUncached(Channel channel, java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)
    • doResolveAll

      protected void doResolveAll(java.lang.String inetHost, Promise<java.util.List<java.net.InetAddress>> promise) throws java.lang.Exception
      Description copied from class: SimpleNameResolver
      Invoked by SimpleNameResolver.resolveAll(String) to perform the actual name resolution.
      Specified by:
      doResolveAll in class SimpleNameResolver<java.net.InetAddress>
      Throws:
      java.lang.Exception
    • doResolveAll

      protected void doResolveAll(java.lang.String inetHost, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache) throws java.lang.Exception
      Hook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.
      Throws:
      java.lang.Exception
    • doResolveAllNow

      private void doResolveAllNow(ChannelFuture f, java.lang.String hostname, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache)
    • hasEntries

      private static boolean hasEntries(java.util.List<? extends DnsCacheEntry> cachedEntries)
    • doResolveAllCached

      static boolean doResolveAllCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, java.lang.String[] searchDomains, int ndots, SocketProtocolFamily[] resolvedInternetProtocolFamilies)
    • doResolveAllUncached

      private void doResolveAllUncached(Channel channel, java.lang.String hostname, DnsRecord[] additionals, Promise<?> originalPromise, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)
    • doResolveAllUncached0

      private void doResolveAllUncached0(Channel channel, java.lang.String hostname, DnsRecord[] additionals, Promise<?> originalPromise, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)
    • hostname

      private static java.lang.String hostname(java.lang.String inetHost)
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(DnsQuestion question)
      Sends a DNS query with the specified question.
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(DnsQuestion question, java.lang.Iterable<DnsRecord> additionals)
      Sends a DNS query with the specified question with additional records.
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(DnsQuestion question, Promise<AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>> promise)
      Sends a DNS query with the specified question.
    • nextNameServerAddress

      private java.net.InetSocketAddress nextNameServerAddress()
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(java.net.InetSocketAddress nameServerAddr, DnsQuestion question)
      Sends a DNS query with the specified question using the specified name server list.
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(java.net.InetSocketAddress nameServerAddr, DnsQuestion question, java.lang.Iterable<DnsRecord> additionals)
      Sends a DNS query with the specified question with additional records using the specified name server list.
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(java.net.InetSocketAddress nameServerAddr, DnsQuestion question, Promise<AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>> promise)
      Sends a DNS query with the specified question using the specified name server list.
    • query

      public Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> query(java.net.InetSocketAddress nameServerAddr, DnsQuestion question, java.lang.Iterable<DnsRecord> additionals, Promise<AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>> promise)
      Sends a DNS query with the specified question with additional records using the specified name server list.
    • isTransportOrTimeoutError

      public static boolean isTransportOrTimeoutError(java.lang.Throwable cause)
      Returns true if the Throwable was caused by an timeout or transport error. These methods can be used on the Future.cause() that is returned by the various methods exposed by this DnsNameResolver.
    • isTimeoutError

      public static boolean isTimeoutError(java.lang.Throwable cause)
      Returns true if the Throwable was caused by an timeout. These methods can be used on the Future.cause() that is returned by the various methods exposed by this DnsNameResolver.
    • doQuery

      final Future<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> doQuery(Channel channel, java.net.InetSocketAddress nameServerAddr, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, DnsRecord[] additionals, boolean flush, Promise<AddressedEnvelope<? extends DnsResponse, java.net.InetSocketAddress>> promise)
    • doQueryNow

      private void doQueryNow(Channel channel, java.net.InetSocketAddress nameServerAddr, DnsQuestion question, DnsQueryLifecycleObserver queryLifecycleObserver, DnsRecord[] additionals, boolean flush, int payloadSize, Promise<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> promise)
    • cast

      private static Promise<AddressedEnvelope<DnsResponse, java.net.InetSocketAddress>> cast(Promise<?> promise)
    • newNameServerAddressStream

      final DnsServerAddressStream newNameServerAddressStream(java.lang.String hostname)
    • registerOrBind

      private static ChannelFuture registerOrBind(Bootstrap bootstrap, java.net.SocketAddress localAddress)