DefaultHostsFileEntriesResolver Class — netty Architecture
Architecture documentation for the DefaultHostsFileEntriesResolver class in DefaultHostsFileEntriesResolver.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 83c4d971_a890_4486_222f_80e359b1d367["DefaultHostsFileEntriesResolver"] 60512585_da02_11c1_9d73_64e367e4fce5["DefaultHostsFileEntriesResolver.java"] 83c4d971_a890_4486_222f_80e359b1d367 -->|defined in| 60512585_da02_11c1_9d73_64e367e4fce5 6d321f27_bef1_a66f_c3f3_1f1b623330eb["DefaultHostsFileEntriesResolver()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| 6d321f27_bef1_a66f_c3f3_1f1b623330eb 79ca0289_cf3c_b06c_097e_8071b3a6f965["InetAddress()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| 79ca0289_cf3c_b06c_097e_8071b3a6f965 3cb09067_3835_c48e_0d8b_60b8029fbd6c["addresses()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| 3cb09067_3835_c48e_0d8b_60b8029fbd6c c316ba89_36bf_7fa5_303e_fa5465c36e4f["ensureHostsFileEntriesAreFresh()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| c316ba89_36bf_7fa5_303e_fa5465c36e4f fedb91c3_102e_59bb_e315_afaabd180e84["String()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| fedb91c3_102e_59bb_e315_afaabd180e84 c36f7c2c_425a_58b4_d492_1bff78ecc18a["allAddresses()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| c36f7c2c_425a_58b4_d492_1bff78ecc18a fdf2a7bd_6e8d_457a_0354_94e6dc17fa51["HostsFileEntriesProvider()"] 83c4d971_a890_4486_222f_80e359b1d367 -->|method| fdf2a7bd_6e8d_457a_0354_94e6dc17fa51
Relationship Graph
Source Code
resolver/src/main/java/io/netty/resolver/DefaultHostsFileEntriesResolver.java lines 36–148
public final class DefaultHostsFileEntriesResolver implements HostsFileEntriesResolver {
private static final InternalLogger logger =
InternalLoggerFactory.getInstance(DefaultHostsFileEntriesResolver.class);
private static final long DEFAULT_REFRESH_INTERVAL;
private final long refreshInterval;
private final AtomicLong lastRefresh = new AtomicLong(System.nanoTime());
private final HostsFileEntriesProvider.Parser hostsFileParser;
private volatile Map<String, List<InetAddress>> inet4Entries;
private volatile Map<String, List<InetAddress>> inet6Entries;
static {
DEFAULT_REFRESH_INTERVAL = SystemPropertyUtil.getLong(
"io.netty.hostsFileRefreshInterval", /*nanos*/0);
if (logger.isDebugEnabled()) {
logger.debug("-Dio.netty.hostsFileRefreshInterval: {}", DEFAULT_REFRESH_INTERVAL);
}
}
public DefaultHostsFileEntriesResolver() {
this(HostsFileEntriesProvider.parser(), DEFAULT_REFRESH_INTERVAL);
}
// for testing purpose only
DefaultHostsFileEntriesResolver(HostsFileEntriesProvider.Parser hostsFileParser, long refreshInterval) {
this.hostsFileParser = hostsFileParser;
this.refreshInterval = ObjectUtil.checkPositiveOrZero(refreshInterval, "refreshInterval");
HostsFileEntriesProvider entries = parseEntries(hostsFileParser);
inet4Entries = entries.ipv4Entries();
inet6Entries = entries.ipv6Entries();
}
@Override
public InetAddress address(String inetHost, ResolvedAddressTypes resolvedAddressTypes) {
return firstAddress(addresses(inetHost, resolvedAddressTypes));
}
/**
* Resolves all addresses of a hostname against the entries in a hosts file, depending on the specified
* {@link ResolvedAddressTypes}.
*
* @param inetHost the hostname to resolve
* @param resolvedAddressTypes the address types to resolve
* @return all matching addresses or {@code null} in case the hostname cannot be resolved
*/
public List<InetAddress> addresses(String inetHost, ResolvedAddressTypes resolvedAddressTypes) {
String normalized = normalize(inetHost);
ensureHostsFileEntriesAreFresh();
switch (resolvedAddressTypes) {
case IPV4_ONLY:
return inet4Entries.get(normalized);
case IPV6_ONLY:
return inet6Entries.get(normalized);
case IPV4_PREFERRED:
List<InetAddress> allInet4Addresses = inet4Entries.get(normalized);
return allInet4Addresses != null ? allAddresses(allInet4Addresses, inet6Entries.get(normalized)) :
inet6Entries.get(normalized);
case IPV6_PREFERRED:
List<InetAddress> allInet6Addresses = inet6Entries.get(normalized);
return allInet6Addresses != null ? allAddresses(allInet6Addresses, inet4Entries.get(normalized)) :
inet4Entries.get(normalized);
default:
throw new IllegalArgumentException("Unknown ResolvedAddressTypes " + resolvedAddressTypes);
}
}
private void ensureHostsFileEntriesAreFresh() {
long interval = refreshInterval;
if (interval == 0) {
return;
}
long last = lastRefresh.get();
long currentTime = System.nanoTime();
if (currentTime - last > interval) {
if (lastRefresh.compareAndSet(last, currentTime)) {
HostsFileEntriesProvider entries = parseEntries(hostsFileParser);
inet4Entries = entries.ipv4Entries();
inet6Entries = entries.ipv6Entries();
Source
Frequently Asked Questions
What is the DefaultHostsFileEntriesResolver class?
DefaultHostsFileEntriesResolver is a class in the netty codebase, defined in resolver/src/main/java/io/netty/resolver/DefaultHostsFileEntriesResolver.java.
Where is DefaultHostsFileEntriesResolver defined?
DefaultHostsFileEntriesResolver is defined in resolver/src/main/java/io/netty/resolver/DefaultHostsFileEntriesResolver.java at line 36.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free