Package org.minidns

Class AbstractDnsClient

  • Direct Known Subclasses:
    DnsClient

    public abstract class AbstractDnsClient
    extends java.lang.Object
    A minimal DNS client for SRV/A/AAAA/NS and CNAME lookups, with IDN support. This circumvents the missing javax.naming package on android.
    • Field Detail

      • DEFAULT_CACHE

        protected static final LruCache DEFAULT_CACHE
      • LOGGER

        protected static final java.util.logging.Logger LOGGER
      • random

        protected final java.util.Random random
        The internal random class for sequence generation.
      • insecureRandom

        protected final java.util.Random insecureRandom
      • cache

        protected final DnsCache cache
        The internal DNS cache.
    • Constructor Detail

      • AbstractDnsClient

        protected AbstractDnsClient​(DnsCache cache)
        Create a new DNS client with the given DNS cache.
        Parameters:
        cache - The backend DNS cache.
      • AbstractDnsClient

        protected AbstractDnsClient()
        Create a new DNS client using the global default cache.
    • Method Detail

      • query

        public final DnsQueryResult query​(java.lang.String name,
                                          org.minidns.record.Record.TYPE type,
                                          org.minidns.record.Record.CLASS clazz)
                                   throws java.io.IOException
        Query the system nameservers for a single entry of any class. This can be used to determine the name server version, if name is version.bind, type is TYPE.TXT and clazz is CLASS.CH.
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        clazz - The class of the request (usually IN for Internet).
        Returns:
        The response (or null on timeout/error).
        Throws:
        java.io.IOException - if an IO error occurs.
      • query

        public final DnsQueryResult query​(org.minidns.dnsname.DnsName name,
                                          org.minidns.record.Record.TYPE type)
                                   throws java.io.IOException
        Query the system nameservers for a single entry of the class IN (which is used for MX, SRV, A, AAAA and most other RRs).
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        Returns:
        The response (or null on timeout/error).
        Throws:
        java.io.IOException - if an IO error occurs.
      • query

        public final DnsQueryResult query​(java.lang.CharSequence name,
                                          org.minidns.record.Record.TYPE type)
                                   throws java.io.IOException
        Query the system nameservers for a single entry of the class IN (which is used for MX, SRV, A, AAAA and most other RRs).
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        Returns:
        The response (or null on timeout/error).
        Throws:
        java.io.IOException - if an IO error occurs.
      • query

        public DnsQueryResult query​(org.minidns.dnsmessage.Question q)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • query

        protected abstract DnsQueryResult query​(org.minidns.dnsmessage.DnsMessage.Builder query)
                                         throws java.io.IOException
        Send a query request to the DNS system.
        Parameters:
        query - The query to send to the server.
        Returns:
        The response (or null).
        Throws:
        java.io.IOException - if an IO error occurs.
      • queryAsync

        public final MiniDnsFuture<DnsQueryResult,​java.io.IOException> queryAsync​(java.lang.CharSequence name,
                                                                                        org.minidns.record.Record.TYPE type)
      • queryAsync

        protected MiniDnsFuture<DnsQueryResult,​java.io.IOException> queryAsync​(org.minidns.dnsmessage.DnsMessage.Builder query)
        Default implementation of an asynchronous DNS query which just wraps the synchronous case.

        Subclasses override this method to support true asynchronous queries.

        Parameters:
        query - the query.
        Returns:
        a future for this query.
      • query

        public final DnsQueryResult query​(org.minidns.dnsmessage.Question q,
                                          java.net.InetAddress server,
                                          int port)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • query

        public final DnsQueryResult query​(org.minidns.dnsmessage.DnsMessage requestMessage,
                                          java.net.InetAddress address,
                                          int port)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • queryAsync

        public final MiniDnsFuture<DnsQueryResult,​java.io.IOException> queryAsync​(org.minidns.dnsmessage.DnsMessage requestMessage,
                                                                                        java.net.InetAddress address,
                                                                                        int port)
      • isResponseCacheable

        protected boolean isResponseCacheable​(org.minidns.dnsmessage.Question q,
                                              DnsQueryResult result)
        Whether a response from the DNS system should be cached or not.
        Parameters:
        q - The question the response message should answer.
        result - The DNS query result.
        Returns:
        True, if the response should be cached, false otherwise.
      • newQuestion

        protected abstract org.minidns.dnsmessage.DnsMessage.Builder newQuestion​(org.minidns.dnsmessage.DnsMessage.Builder questionMessage)
      • query

        public DnsQueryResult query​(java.lang.String name,
                                    org.minidns.record.Record.TYPE type,
                                    org.minidns.record.Record.CLASS clazz,
                                    java.net.InetAddress address,
                                    int port)
                             throws java.io.IOException
        Query a nameserver for a single entry.
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        clazz - The class of the request (usually IN for Internet).
        address - The DNS server address.
        port - The DNS server port.
        Returns:
        The response (or null on timeout / failure).
        Throws:
        java.io.IOException - On IO Errors.
      • query

        public DnsQueryResult query​(java.lang.String name,
                                    org.minidns.record.Record.TYPE type,
                                    org.minidns.record.Record.CLASS clazz,
                                    java.net.InetAddress address)
                             throws java.io.IOException
        Query a nameserver for a single entry.
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        clazz - The class of the request (usually IN for Internet).
        address - The DNS server host.
        Returns:
        The response (or null on timeout / failure).
        Throws:
        java.io.IOException - On IO Errors.
      • query

        public DnsQueryResult query​(java.lang.String name,
                                    org.minidns.record.Record.TYPE type,
                                    java.net.InetAddress address)
                             throws java.io.IOException
        Query a nameserver for a single entry of class IN.
        Parameters:
        name - The DNS name to request.
        type - The DNS type to request (SRV, A, AAAA, ...).
        address - The DNS server host.
        Returns:
        The response (or null on timeout / failure).
        Throws:
        java.io.IOException - On IO Errors.
      • query

        public final DnsQueryResult query​(org.minidns.dnsmessage.DnsMessage query,
                                          java.net.InetAddress host)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • query

        public DnsQueryResult query​(org.minidns.dnsmessage.Question q,
                                    java.net.InetAddress address)
                             throws java.io.IOException
        Query a specific server for one entry.
        Parameters:
        q - The question section of the DNS query.
        address - The dns server address.
        Returns:
        The a DNS query result.
        Throws:
        java.io.IOException - On IOErrors.
      • queryAsync

        public final MiniDnsFuture<DnsQueryResult,​java.io.IOException> queryAsync​(org.minidns.dnsmessage.DnsMessage query,
                                                                                        java.net.InetAddress dnsServer)
      • setDataSource

        public void setDataSource​(DnsDataSource dataSource)
        Set a DnsDataSource to be used by the DnsClient. The default implementation will direct all queries directly to the Internet. This can be used to define a non-default handling for outgoing data. This can be useful to redirect the requests to a proxy or to modify requests after or responses before they are handled by the DnsClient implementation.
        Parameters:
        dataSource - An implementation of DNSDataSource that shall be used.
      • getCache

        public DnsCache getCache()
        Get the cache used by this DNS client.
        Returns:
        the cached used by this DNS client or null.
      • getQueryFor

        protected org.minidns.dnsmessage.DnsMessage getQueryFor​(org.minidns.dnsmessage.Question q)
      • getCachedNameserverRecordsFor

        public java.util.Set<org.minidns.record.NS> getCachedNameserverRecordsFor​(org.minidns.dnsname.DnsName dnsName)
      • getCachedIPv4AddressesFor

        public java.util.Set<org.minidns.record.A> getCachedIPv4AddressesFor​(org.minidns.dnsname.DnsName dnsName)
      • getCachedIPv6AddressesFor

        public java.util.Set<org.minidns.record.AAAA> getCachedIPv6AddressesFor​(org.minidns.dnsname.DnsName dnsName)
      • getCachedIPv4NameserverAddressesFor

        public java.util.Set<org.minidns.record.A> getCachedIPv4NameserverAddressesFor​(org.minidns.dnsname.DnsName dnsName)
      • getCachedIPv6NameserverAddressesFor

        public java.util.Set<org.minidns.record.AAAA> getCachedIPv6NameserverAddressesFor​(org.minidns.dnsname.DnsName dnsName)