Package io.netty.resolver.dns
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-basedInetNameResolver.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classDnsNameResolver.AddressedEnvelopeAdapterprivate classDnsNameResolver.DnsResponseHandler
-
Field Summary
-
Constructor Summary
Constructors Constructor Description DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, ChannelFactory<? extends SocketChannel> socketChannelFactory, DnsCache resolveCache, DnsCnameCache cnameCache, 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, boolean completeOncePreferredResolved)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.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.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static booleananyInterfaceSupportsIpV6()Returnstrueif anyNetworkInterfacesupportsIPv6,falseotherwise.AuthoritativeDnsServerCacheauthoritativeDnsServerCache()Returns the cache used for authoritative DNS servers for a domain.private static Promise<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>cast(Promise<?> promise)voidclose()Closes the internal datagram channel used for sending and receiving DNS messages, and clears all DNS resource records from the cache.(package private) DnsCnameCachecnameCache()Returns theDnsCnameCache.(package private) DnsQueryLifecycleObserverFactorydnsQueryLifecycleObserverFactory()protected voiddoResolve(java.lang.String inetHost, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache)Hook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.protected voiddoResolve(java.lang.String inetHost, Promise<java.net.InetAddress> promise)Invoked bySimpleNameResolver.resolve(String)to perform the actual name resolution.protected voiddoResolveAll(java.lang.String inetHost, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache)Hook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.protected voiddoResolveAll(java.lang.String inetHost, Promise<java.util.List<java.net.InetAddress>> promise)Invoked bySimpleNameResolver.resolveAll(String)to perform the actual name resolution.(package private) static booleandoResolveAllCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, InternetProtocolFamily[] resolvedInternetProtocolFamilies)private voiddoResolveAllUncached(java.lang.String hostname, DnsRecord[] additionals, Promise<?> originalPromise, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)private voiddoResolveAllUncached0(java.lang.String hostname, DnsRecord[] additionals, Promise<?> originalPromise, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)private booleandoResolveCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache)private voiddoResolveUncached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)protected EventLoopexecutor()Returns theEventExecutorwhich is used to notify the listeners of theFuturereturned bySimpleNameResolver.resolve(String).(package private) voidflushQueries()private static java.util.List<java.lang.String>getSearchDomainsHack()private static java.lang.Stringhostname(java.lang.String inetHost)HostsFileEntriesResolverhostsFileEntriesResolver()Returns the component that tries to resolve hostnames against the hosts file prior to asking to remotes DNS servers.(package private) booleanisDecodeIdn()booleanisOptResourceEnabled()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.booleanisRecursionDesired()Returnstrueif and only if this resolver sends a DNS query with the RD (recursion desired) flag set.static booleanisTimeoutError(java.lang.Throwable cause)Returnstrueif theThrowablewas caused by an timeout.static booleanisTransportOrTimeoutError(java.lang.Throwable cause)Returnstrueif theThrowablewas caused by an timeout or transport error.private java.net.InetAddressloopbackAddress()intmaxPayloadSize()Returns the capacity of the datagram packet buffer (in bytes).intmaxQueriesPerResolve()Returns the maximum allowed number of DNS queries to send when resolving a host name.(package private) intndots()(package private) DnsServerAddressStreamnewNameServerAddressStream(java.lang.String hostname)protected DnsServerAddressStreamnewRedirectDnsServerStream(java.lang.String hostname, java.util.List<java.net.InetSocketAddress> nameservers)Creates a newDnsServerAddressStreamto following a redirected DNS query.(package private) java.net.InetSocketAddressnewRedirectServerAddress(java.net.InetAddress server)private java.net.InetSocketAddressnextNameServerAddress()(package private) InternetProtocolFamilypreferredAddressType()(package private) static InternetProtocolFamilypreferredAddressType(ResolvedAddressTypes resolvedAddressTypes)Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>query(DnsQuestion question)Sends a DNS query with the specified question.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.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.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.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.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.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.(package private) Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>>query0(java.net.InetSocketAddress nameServerAddr, DnsQuestion question, DnsRecord[] additionals, boolean flush, ChannelPromise writePromise, Promise<AddressedEnvelope<? extends DnsResponse,java.net.InetSocketAddress>> promise)longqueryTimeoutMillis()Returns the timeout of each DNS query performed by this resolver (in milliseconds).Future<java.net.InetAddress>resolve(java.lang.String inetHost, java.lang.Iterable<DnsRecord> additionals)Resolves the specified name into an address.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.Future<java.util.List<DnsRecord>>resolveAll(DnsQuestion question)Resolves theDnsRecords that are matched by the specifiedDnsQuestion.private Future<java.util.List<DnsRecord>>resolveAll(DnsQuestion question, DnsRecord[] additionals, Promise<java.util.List<DnsRecord>> promise)Future<java.util.List<DnsRecord>>resolveAll(DnsQuestion question, java.lang.Iterable<DnsRecord> additionals)Resolves theDnsRecords that are matched by the specifiedDnsQuestion.Future<java.util.List<DnsRecord>>resolveAll(DnsQuestion question, java.lang.Iterable<DnsRecord> additionals, Promise<java.util.List<DnsRecord>> promise)Resolves theDnsRecords that are matched by the specifiedDnsQuestion.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.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.DnsCacheresolveCache()Returns the resolution cache.ResolvedAddressTypesresolvedAddressTypes()Returns theResolvedAddressTypesresolved bySimpleNameResolver.resolve(String).(package private) InternetProtocolFamily[]resolvedInternetProtocolFamiliesUnsafe()private java.net.InetAddressresolveHostsFileEntry(java.lang.String hostname)(package private) DnsRecordType[]resolveRecordTypes()(package private) java.lang.String[]searchDomains()(package private) booleansupportsAAAARecords()(package private) booleansupportsARecords()private static DnsRecord[]toArray(java.lang.Iterable<DnsRecord> additionals, boolean validateType)private static voidtryFailure(Promise<?> promise, java.lang.Throwable cause)(package private) static <T> voidtrySuccess(Promise<T> promise, T result)private static voidvalidateAdditional(DnsRecord record, boolean validateType)-
Methods inherited from class io.netty.resolver.InetNameResolver
asAddressResolver
-
Methods inherited from class io.netty.resolver.SimpleNameResolver
resolve, resolve, resolveAll, resolveAll
-
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
LOCALHOST
private static final java.lang.String LOCALHOST
- See Also:
- Constant Field Values
-
LOCALHOST_ADDRESS
private static final java.net.InetAddress LOCALHOST_ADDRESS
-
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 InternetProtocolFamily[] 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 InternetProtocolFamily[] 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 InternetProtocolFamily[] 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 InternetProtocolFamily[] IPV6_PREFERRED_RESOLVED_PROTOCOL_FAMILIES
-
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
-
TCP_ENCODER
private static final TcpDnsQueryEncoder TCP_ENCODER
-
ch
final Channel ch
-
nameServerComparator
private final java.util.Comparator<java.net.InetSocketAddress> nameServerComparator
-
queryContextManager
final DnsQueryContextManager queryContextManager
Manages theDnsQueryContexts in progress and their query IDs.
-
resolveCache
private final DnsCache resolveCache
Cache fordoResolve(String, Promise)anddoResolveAll(String, Promise).
-
authoritativeDnsServerCache
private final AuthoritativeDnsServerCache authoritativeDnsServerCache
-
cnameCache
private final DnsCnameCache cnameCache
-
nameServerAddrStream
private final FastThreadLocal<DnsServerAddressStream> nameServerAddrStream
-
queryTimeoutMillis
private final long queryTimeoutMillis
-
maxQueriesPerResolve
private final int maxQueriesPerResolve
-
resolvedAddressTypes
private final ResolvedAddressTypes resolvedAddressTypes
-
resolvedInternetProtocolFamilies
private final InternetProtocolFamily[] 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 InternetProtocolFamily preferredAddressType
-
resolveRecordTypes
private final DnsRecordType[] resolveRecordTypes
-
decodeIdn
private final boolean decodeIdn
-
dnsQueryLifecycleObserverFactory
private final DnsQueryLifecycleObserverFactory dnsQueryLifecycleObserverFactory
-
completeOncePreferredResolved
private final boolean completeOncePreferredResolved
-
socketChannelFactory
private final ChannelFactory<? extends SocketChannel> socketChannelFactory
-
-
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- theEventLoopwhich will perform the communication with the DNS serverschannelFactory- theChannelFactorythat will create aDatagramChannelresolveCache- the DNS resolved entries cacheauthoritativeDnsServerCache- the cache used to find the authoritative DNS server for a domaindnsQueryLifecycleObserverFactory- used to generate new instances ofDnsQueryLifecycleObserverwhich can be used to track metrics for DNS servers.queryTimeoutMillis- timeout of each DNS query in millisresolvedAddressTypes- the preferred address typesrecursionDesired- if recursion desired flag must be setmaxQueriesPerResolve- the maximum allowed number of DNS queries for a given name resolutiontraceEnabled- if trace is enabledmaxPayloadSize- the capacity of the datagram packet bufferoptResourceEnabled- if automatic inclusion of a optional records is enabledhostsFileEntriesResolver- theHostsFileEntriesResolverused to check for local aliasesdnsServerAddressStreamProvider- TheDnsServerAddressStreamProviderused 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 valuedecodeIdn-trueif 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- theEventLoopwhich will perform the communication with the DNS serverschannelFactory- theChannelFactorythat will create aDatagramChannelresolveCache- the DNS resolved entries cacheauthoritativeDnsServerCache- the cache used to find the authoritative DNS server for a domaindnsQueryLifecycleObserverFactory- used to generate new instances ofDnsQueryLifecycleObserverwhich can be used to track metrics for DNS servers.queryTimeoutMillis- timeout of each DNS query in millisresolvedAddressTypes- the preferred address typesrecursionDesired- if recursion desired flag must be setmaxQueriesPerResolve- the maximum allowed number of DNS queries for a given name resolutiontraceEnabled- if trace is enabledmaxPayloadSize- the capacity of the datagram packet bufferoptResourceEnabled- if automatic inclusion of a optional records is enabledhostsFileEntriesResolver- theHostsFileEntriesResolverused to check for local aliasesdnsServerAddressStreamProvider- TheDnsServerAddressStreamProviderused 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 valuedecodeIdn-trueif domain / host names should be decoded to unicode when received. See rfc3492.
-
DnsNameResolver
DnsNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, ChannelFactory<? extends SocketChannel> socketChannelFactory, DnsCache resolveCache, DnsCnameCache cnameCache, 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, boolean completeOncePreferredResolved)
-
-
Method Detail
-
anyInterfaceSupportsIpV6
private static boolean anyInterfaceSupportsIpV6()
Returnstrueif anyNetworkInterfacesupportsIPv6,falseotherwise.
-
getSearchDomainsHack
private static java.util.List<java.lang.String> getSearchDomainsHack() throws java.lang.Exception- Throws:
java.lang.Exception
-
preferredAddressType
static InternetProtocolFamily 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 newDnsServerAddressStreamto 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 usedDnsServerAddressStreammust allow unresolved addresses if you want to include these as well.- Returns:
- A
DnsServerAddressStreamwhich will be used to follow the DNS redirect ornullif none should be followed.
-
resolveCache
public DnsCache resolveCache()
Returns the resolution cache.
-
cnameCache
DnsCnameCache cnameCache()
Returns theDnsCnameCache.
-
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.
-
resolvedAddressTypes
public ResolvedAddressTypes resolvedAddressTypes()
Returns theResolvedAddressTypesresolved bySimpleNameResolver.resolve(String). The default value depends on the value of the system property"java.net.preferIPv6Addresses".
-
resolvedInternetProtocolFamiliesUnsafe
InternetProtocolFamily[] resolvedInternetProtocolFamiliesUnsafe()
-
searchDomains
final java.lang.String[] searchDomains()
-
ndots
final int ndots()
-
supportsAAAARecords
final boolean supportsAAAARecords()
-
supportsARecords
final boolean supportsARecords()
-
preferredAddressType
final InternetProtocolFamily preferredAddressType()
-
resolveRecordTypes
final DnsRecordType[] resolveRecordTypes()
-
isDecodeIdn
final boolean isDecodeIdn()
-
isRecursionDesired
public boolean isRecursionDesired()
Returnstrueif and only if this resolver sends a DNS query with the RD (recursion desired) flag set. The default value istrue.
-
maxQueriesPerResolve
public int maxQueriesPerResolve()
Returns the maximum allowed number of DNS queries to send when resolving a host name. The default value is8.
-
maxPayloadSize
public int maxPayloadSize()
Returns the capacity of the datagram packet buffer (in bytes). The default value is4096bytes.
-
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:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfaceNameResolver<java.net.InetAddress>- Overrides:
closein classSimpleNameResolver<java.net.InetAddress>
-
executor
protected EventLoop executor()
Description copied from class:SimpleNameResolverReturns theEventExecutorwhich is used to notify the listeners of theFuturereturned bySimpleNameResolver.resolve(String).- Overrides:
executorin classSimpleNameResolver<java.net.InetAddress>
-
resolveHostsFileEntry
private java.net.InetAddress resolveHostsFileEntry(java.lang.String hostname)
-
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 resolveadditionals- 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 resolveadditionals- additional records (OPT)promise- thePromisewhich 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 resolveadditionals- 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 resolveadditionals- additional records (OPT)promise- thePromisewhich 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.ExceptionDescription copied from class:SimpleNameResolverInvoked bySimpleNameResolver.resolve(String)to perform the actual name resolution.- Specified by:
doResolvein classSimpleNameResolver<java.net.InetAddress>- Throws:
java.lang.Exception
-
resolveAll
public final Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question)
Resolves theDnsRecords that are matched by the specifiedDnsQuestion. Unlikequery(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specifiedDnsQuestionisAorAAAA, this method looks up the configuredHostsFileEntriesbefore sending a query to the name servers. If a match is found in theHostsFileEntries, a syntheticAorAAAArecord 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 theDnsRecords that are matched by the specifiedDnsQuestion. Unlikequery(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specifiedDnsQuestionisAorAAAA, this method looks up the configuredHostsFileEntriesbefore sending a query to the name servers. If a match is found in theHostsFileEntries, a syntheticAorAAAArecord will be returned.- Parameters:
question- the questionadditionals- 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 theDnsRecords that are matched by the specifiedDnsQuestion. Unlikequery(DnsQuestion), this method handles redirection, CNAMEs and multiple name servers. If the specifiedDnsQuestionisAorAAAA, this method looks up the configuredHostsFileEntriesbefore sending a query to the name servers. If a match is found in theHostsFileEntries, a syntheticAorAAAArecord will be returned.
-
resolveAll
private Future<java.util.List<DnsRecord>> resolveAll(DnsQuestion question, DnsRecord[] additionals, Promise<java.util.List<DnsRecord>> promise)
-
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.ExceptionHook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.- Throws:
java.lang.Exception
-
doResolveCached
private boolean doResolveCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.net.InetAddress> promise, DnsCache resolveCache)
-
trySuccess
static <T> void trySuccess(Promise<T> promise, T result)
-
tryFailure
private static void tryFailure(Promise<?> promise, java.lang.Throwable cause)
-
doResolveUncached
private void doResolveUncached(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.ExceptionDescription copied from class:SimpleNameResolverInvoked bySimpleNameResolver.resolveAll(String)to perform the actual name resolution.- Specified by:
doResolveAllin classSimpleNameResolver<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.ExceptionHook designed for extensibility so one can pass a different cache on each resolution attempt instead of using the global one.- Throws:
java.lang.Exception
-
doResolveAllCached
static boolean doResolveAllCached(java.lang.String hostname, DnsRecord[] additionals, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, InternetProtocolFamily[] resolvedInternetProtocolFamilies)
-
doResolveAllUncached
private void doResolveAllUncached(java.lang.String hostname, DnsRecord[] additionals, Promise<?> originalPromise, Promise<java.util.List<java.net.InetAddress>> promise, DnsCache resolveCache, boolean completeEarlyIfPossible)
-
doResolveAllUncached0
private void doResolveAllUncached0(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)
Returnstrueif theThrowablewas caused by an timeout or transport error. These methods can be used on theFuture.cause()that is returned by the various methods exposed by thisDnsNameResolver.
-
isTimeoutError
public static boolean isTimeoutError(java.lang.Throwable cause)
Returnstrueif theThrowablewas caused by an timeout. These methods can be used on theFuture.cause()that is returned by the various methods exposed by thisDnsNameResolver.
-
flushQueries
final void flushQueries()
-
query0
final Future<AddressedEnvelope<DnsResponse,java.net.InetSocketAddress>> query0(java.net.InetSocketAddress nameServerAddr, DnsQuestion question, DnsRecord[] additionals, boolean flush, ChannelPromise writePromise, Promise<AddressedEnvelope<? extends 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)
-
-