Class DnsNameResolver

    • Field Detail

      • DNS_PIPELINE_ATTRIBUTE

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

      • 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.
    • Method Detail

      • 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.
      • 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).
      • 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.
      • 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>
      • 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
      • 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
      • 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
      • 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
      • 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.
      • 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.