DefaultDnsServerAddressStreamProvider Class — netty Architecture
Architecture documentation for the DefaultDnsServerAddressStreamProvider class in DefaultDnsServerAddressStreamProvider.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD be6eae1d_0275_78da_bffc_26f7ae09fa68["DefaultDnsServerAddressStreamProvider"] 2e906854_bec8_eb6d_82d1_98bf7fdc21da["DefaultDnsServerAddressStreamProvider.java"] be6eae1d_0275_78da_bffc_26f7ae09fa68 -->|defined in| 2e906854_bec8_eb6d_82d1_98bf7fdc21da 37f26fd3_813c_9a37_949d_c96217ccb815["DefaultDnsServerAddressStreamProvider()"] be6eae1d_0275_78da_bffc_26f7ae09fa68 -->|method| 37f26fd3_813c_9a37_949d_c96217ccb815 e10c5b1f_8d2f_e9c3_6fce_c9e8e0662c04["DnsServerAddressStream()"] be6eae1d_0275_78da_bffc_26f7ae09fa68 -->|method| e10c5b1f_8d2f_e9c3_6fce_c9e8e0662c04 617e5f5c_3a18_a5be_7066_22ccccc5d463["defaultAddressList()"] be6eae1d_0275_78da_bffc_26f7ae09fa68 -->|method| 617e5f5c_3a18_a5be_7066_22ccccc5d463 644ab94d_cf49_dd4f_c68d_c4dca4dd21ed["DnsServerAddresses()"] be6eae1d_0275_78da_bffc_26f7ae09fa68 -->|method| 644ab94d_cf49_dd4f_c68d_c4dca4dd21ed
Relationship Graph
Source Code
resolver-dns/src/main/java/io/netty/resolver/dns/DefaultDnsServerAddressStreamProvider.java lines 40–181
public final class DefaultDnsServerAddressStreamProvider implements DnsServerAddressStreamProvider {
private static final InternalLogger logger =
InternalLoggerFactory.getInstance(DefaultDnsServerAddressStreamProvider.class);
private static final String DEFAULT_FALLBACK_SERVER_PROPERTY = "io.netty.resolver.dns.defaultNameServerFallback";
public static final DefaultDnsServerAddressStreamProvider INSTANCE = new DefaultDnsServerAddressStreamProvider();
private static final List<InetSocketAddress> DEFAULT_NAME_SERVER_LIST;
private static final DnsServerAddresses DEFAULT_NAME_SERVERS;
static final int DNS_PORT = 53;
static {
final List<InetSocketAddress> defaultNameServers = new ArrayList<InetSocketAddress>(2);
if (!PlatformDependent.isAndroid()) {
// Skip this on Android; it has neither /etc/resolv.conf nor JNDI classes.
// See https://github.com/netty/netty/issues/8654
if (!PlatformDependent.isWindows()) {
// Try reading /etc/resolv.conf. It's usually found on Linux or macOS, but can also be missing.
try {
defaultNameServers.addAll(ResolvConf.system().getNameservers());
} catch (IllegalStateException e) {
String fallbackMessage = "Failed to get name servers from /etc/resolv.conf; will fall back to JNDI";
if (logger.isDebugEnabled()) {
// Always log at INFO, but only include stack trace if DEBUG is enabled.
logger.info(fallbackMessage, e);
} else {
logger.info(fallbackMessage);
}
DirContextUtils.addNameServers(defaultNameServers, DNS_PORT);
}
} else {
DirContextUtils.addNameServers(defaultNameServers, DNS_PORT);
}
}
// Only try when using on Java8 and lower as otherwise it will produce:
// WARNING: Illegal reflective access by io.netty.resolver.dns.DefaultDnsServerAddressStreamProvider
if (PlatformDependent.javaVersion() < 9 && defaultNameServers.isEmpty()) {
try {
Class<?> configClass = Class.forName("sun.net.dns.ResolverConfiguration");
Method open = configClass.getMethod("open");
Method nameservers = configClass.getMethod("nameservers");
Object instance = open.invoke(null);
@SuppressWarnings("unchecked")
final List<String> list = (List<String>) nameservers.invoke(instance);
for (String a: list) {
if (a != null) {
defaultNameServers.add(new InetSocketAddress(SocketUtils.addressByName(a), DNS_PORT));
}
}
} catch (Exception ignore) {
// Failed to get the system name server list via reflection.
// Will add the default name servers afterwards.
}
}
if (!defaultNameServers.isEmpty()) {
if (logger.isDebugEnabled()) {
logger.debug(
"Default DNS servers: {} (sun.net.dns.ResolverConfiguration)", defaultNameServers);
}
} else {
String defaultNameserverString = SystemPropertyUtil.get(DEFAULT_FALLBACK_SERVER_PROPERTY, null);
if (defaultNameserverString != null) {
for (String server : defaultNameserverString.split(",")) {
String dns = server.trim();
if (!NetUtil.isValidIpV4Address(dns) && !NetUtil.isValidIpV6Address(dns)) {
throw new ExceptionInInitializerError(DEFAULT_FALLBACK_SERVER_PROPERTY + " doesn't" +
" contain a valid list of NameServers: " + defaultNameserverString);
}
defaultNameServers.add(SocketUtils.socketAddress(server.trim(), DNS_PORT));
}
if (defaultNameServers.isEmpty()) {
throw new ExceptionInInitializerError(DEFAULT_FALLBACK_SERVER_PROPERTY + " doesn't" +
" contain a valid list of NameServers: " + defaultNameserverString);
}
if (logger.isWarnEnabled()) {
logger.warn(
"Default DNS servers: {} (Configured by {} system property)",
defaultNameServers, DEFAULT_FALLBACK_SERVER_PROPERTY);
Defined In
Source
Frequently Asked Questions
What is the DefaultDnsServerAddressStreamProvider class?
DefaultDnsServerAddressStreamProvider is a class in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/DefaultDnsServerAddressStreamProvider.java.
Where is DefaultDnsServerAddressStreamProvider defined?
DefaultDnsServerAddressStreamProvider is defined in resolver-dns/src/main/java/io/netty/resolver/dns/DefaultDnsServerAddressStreamProvider.java at line 40.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free