Home / Class/ UnixResolverDnsServerAddressStreamProvider Class — netty Architecture

UnixResolverDnsServerAddressStreamProvider Class — netty Architecture

Architecture documentation for the UnixResolverDnsServerAddressStreamProvider class in UnixResolverDnsServerAddressStreamProvider.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  8efad33e_883b_062a_b123_d462f61c3350["UnixResolverDnsServerAddressStreamProvider"]
  2e2012ba_7bee_2f7a_54fd_db424dc4964f["UnixResolverDnsServerAddressStreamProvider.java"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|defined in| 2e2012ba_7bee_2f7a_54fd_db424dc4964f
  f0d7d7b9_4888_e062_b786_3d8a7cdf3161["DnsServerAddressStreamProvider()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| f0d7d7b9_4888_e062_b786_3d8a7cdf3161
  b1d25819_2d2d_59c8_c410_aa8a0ba1f8a5["UnixResolverDnsServerAddressStreamProvider()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| b1d25819_2d2d_59c8_c410_aa8a0ba1f8a5
  b3b93ddb_2755_5d17_42e2_b2bbfc203be3["DnsServerAddressStream()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| b3b93ddb_2755_5d17_42e2_b2bbfc203be3
  767643a9_06e4_cb11_3c15_55e52b876d59["mayOverrideNameServers()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 767643a9_06e4_cb11_3c15_55e52b876d59
  faf5b73b_bdcd_428b_dee7_2e0fd8338002["parse()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| faf5b73b_bdcd_428b_dee7_2e0fd8338002
  9cdf8e90_d3af_1682_4628_58c4abdc22df["putIfAbsent()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 9cdf8e90_d3af_1682_4628_58c4abdc22df
  2d4e0f8a_893c_7cc2_568a_45fb052d5357["UnixResolverOptions()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 2d4e0f8a_893c_7cc2_568a_45fb052d5357
  7d65a810_b871_d729_24ae_110a413428fc["parseResOptions()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 7d65a810_b871_d729_24ae_110a413428fc
  1e1ed8b7_5ca5_b8d2_a518_7dcdfb71c4df["parseResIntOption()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 1e1ed8b7_5ca5_b8d2_a518_7dcdfb71c4df
  7ef57133_3a49_6636_0b01_ce4c7de27829["parseEtcResolverSearchDomains()"]
  8efad33e_883b_062a_b123_d462f61c3350 -->|method| 7ef57133_3a49_6636_0b01_ce4c7de27829

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/UnixResolverDnsServerAddressStreamProvider.java lines 46–410

public final class UnixResolverDnsServerAddressStreamProvider implements DnsServerAddressStreamProvider {
    private static final InternalLogger logger =
            InternalLoggerFactory.getInstance(UnixResolverDnsServerAddressStreamProvider.class);

    private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+");
    private static final String RES_OPTIONS = System.getenv("RES_OPTIONS");

    private static final String ETC_RESOLV_CONF_FILE = "/etc/resolv.conf";
    private static final String ETC_RESOLVER_DIR = "/etc/resolver";
    private static final String NAMESERVER_ROW_LABEL = "nameserver";
    private static final String SORTLIST_ROW_LABEL = "sortlist";
    private static final String OPTIONS_ROW_LABEL = "options ";
    private static final String OPTIONS_ROTATE_FLAG = "rotate";
    private static final String DOMAIN_ROW_LABEL = "domain";
    private static final String SEARCH_ROW_LABEL = "search";
    private static final String PORT_ROW_LABEL = "port";

    private final DnsServerAddresses defaultNameServerAddresses;
    private final Map<String, DnsServerAddresses> domainToNameServerStreamMap;

    /**
     * Attempt to parse {@code /etc/resolv.conf} and files in the {@code /etc/resolver} directory by default.
     * A failure to parse will return {@link DefaultDnsServerAddressStreamProvider}.
     */
    static DnsServerAddressStreamProvider parseSilently() {
        try {
            UnixResolverDnsServerAddressStreamProvider nameServerCache =
                    new UnixResolverDnsServerAddressStreamProvider(ETC_RESOLV_CONF_FILE, ETC_RESOLVER_DIR);
            return nameServerCache.mayOverrideNameServers() ? nameServerCache
                                                            : DefaultDnsServerAddressStreamProvider.INSTANCE;
        } catch (Exception e) {
            if (logger.isDebugEnabled()) {
                logger.debug("failed to parse {} and/or {}", ETC_RESOLV_CONF_FILE, ETC_RESOLVER_DIR, e);
            }
            return DefaultDnsServerAddressStreamProvider.INSTANCE;
        }
    }

    /**
     * Parse a file of the format <a href="https://linux.die.net/man/5/resolver">/etc/resolv.conf</a> which may contain
     * the default DNS server to use, and also overrides for individual domains. Also parse list of files of the format
     * <a href="
     * https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/resolver.5.html">
     * /etc/resolver</a> which may contain multiple files to override the name servers used for multiple domains.
     * @param etcResolvConf <a href="https://linux.die.net/man/5/resolver">/etc/resolv.conf</a>.
     * @param etcResolverFiles List of files of the format defined in
     * <a href="
     * https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/resolver.5.html">
     * /etc/resolver</a>.
     * @throws IOException If an error occurs while parsing the input files.
     */
    public UnixResolverDnsServerAddressStreamProvider(File etcResolvConf, File... etcResolverFiles) throws IOException {
        Map<String, DnsServerAddresses> etcResolvConfMap = parse(checkNotNull(etcResolvConf, "etcResolvConf"));
        final boolean useEtcResolverFiles = etcResolverFiles != null && etcResolverFiles.length != 0;
        domainToNameServerStreamMap = useEtcResolverFiles ? parse(etcResolverFiles) : etcResolvConfMap;

        DnsServerAddresses defaultNameServerAddresses
                = etcResolvConfMap.get(etcResolvConf.getName());
        if (defaultNameServerAddresses == null) {
            Collection<DnsServerAddresses> values = etcResolvConfMap.values();
            if (values.isEmpty()) {
                throw new IllegalArgumentException(etcResolvConf + " didn't provide any name servers");
            }
            this.defaultNameServerAddresses = values.iterator().next();
        } else {
            this.defaultNameServerAddresses = defaultNameServerAddresses;
        }

        if (useEtcResolverFiles) {
            domainToNameServerStreamMap.putAll(etcResolvConfMap);
        }
    }

    /**
     * Parse a file of the format <a href="https://linux.die.net/man/5/resolver">/etc/resolv.conf</a> which may contain
     * the default DNS server to use, and also overrides for individual domains. Also parse a directory of the format
     * <a href="
     * https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/resolver.5.html">
     * /etc/resolver</a> which may contain multiple files to override the name servers used for multiple domains.
     * @param etcResolvConf <a href="https://linux.die.net/man/5/resolver">/etc/resolv.conf</a>.
     * @param etcResolverDir Directory containing files of the format defined in

Frequently Asked Questions

What is the UnixResolverDnsServerAddressStreamProvider class?
UnixResolverDnsServerAddressStreamProvider is a class in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/UnixResolverDnsServerAddressStreamProvider.java.
Where is UnixResolverDnsServerAddressStreamProvider defined?
UnixResolverDnsServerAddressStreamProvider is defined in resolver-dns/src/main/java/io/netty/resolver/dns/UnixResolverDnsServerAddressStreamProvider.java at line 46.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free