Home / Class/ DefaultHostsFileEntriesResolver Class — netty Architecture

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();

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