src/jdk.dns.client/share/classes/jdk/dns/client/internal/HostsFileResolver.java
branchaefimov-dns-client-branch
changeset 59101 258033faefc9
parent 58971 465a15dd6bed
equal deleted inserted replaced
59100:b92aac38b046 59101:258033faefc9
    24  */
    24  */
    25 
    25 
    26 package jdk.dns.client.internal;
    26 package jdk.dns.client.internal;
    27 
    27 
    28 import jdk.dns.client.internal.util.ReloadTracker;
    28 import jdk.dns.client.internal.util.ReloadTracker;
       
    29 import jdk.dns.conf.DnsResolverConfiguration;
    29 import sun.net.util.IPAddressUtil;
    30 import sun.net.util.IPAddressUtil;
    30 
    31 
    31 import java.net.InetAddress;
    32 import java.net.InetAddress;
    32 import java.net.ProtocolFamily;
    33 import java.net.ProtocolFamily;
    33 import java.net.UnknownHostException;
    34 import java.net.UnknownHostException;
    51 import java.util.stream.Stream;
    52 import java.util.stream.Stream;
    52 
    53 
    53 public class HostsFileResolver {
    54 public class HostsFileResolver {
    54     private static final String HOSTS_FILE_LOCATION_PROPERTY_VALUE =
    55     private static final String HOSTS_FILE_LOCATION_PROPERTY_VALUE =
    55             AccessController.doPrivileged((PrivilegedAction<String>)
    56             AccessController.doPrivileged((PrivilegedAction<String>)
    56                     () -> System.getProperty("jdk.net.hosts.file", "/etc/hosts")
    57                     () -> System.getProperty("jdk.dns.client.hosts.file",
       
    58                             DnsResolverConfiguration.getDefaultHostsFileLocation())
    57             );
    59             );
    58     private static final ReadWriteLock LOCK = new ReentrantReadWriteLock();
    60     private static final ReadWriteLock LOCK = new ReentrantReadWriteLock();
    59 
    61 
    60     // 300 seconds, similar to DnsResolverConfiguration in millis since Epoch
    62     // 300 seconds, similar to DnsResolverConfiguration in millis since Epoch
    61     private static final long REFRESH_TIMEOUT_MILLIS = 300_000;
    63     private static final long REFRESH_TIMEOUT_NANOS = 300_000_000_000L;
    62     private static final ReloadTracker HOSTS_FILE_TRACKER;
    64     private static final ReloadTracker HOSTS_FILE_TRACKER;
    63     private static volatile Map<String, HostFileEntry> HOST_ADDRESSES = Collections.emptyMap();
    65     private static volatile Map<String, HostFileEntry> HOST_ADDRESSES = Collections.emptyMap();
    64 
    66 
    65     void loadHostsAddresses() {
    67     void loadHostsAddresses() {
    66         LOCK.readLock().lock();
    68         LOCK.readLock().lock();
   260 
   262 
   261     static {
   263     static {
   262         // TODO: Revisit
   264         // TODO: Revisit
   263         try {
   265         try {
   264             var pea = (PrivilegedExceptionAction<ReloadTracker>) () ->
   266             var pea = (PrivilegedExceptionAction<ReloadTracker>) () ->
   265                     ReloadTracker.newInstance(Paths.get(HOSTS_FILE_LOCATION_PROPERTY_VALUE), REFRESH_TIMEOUT_MILLIS);
   267                     ReloadTracker.newInstance(Paths.get(HOSTS_FILE_LOCATION_PROPERTY_VALUE), REFRESH_TIMEOUT_NANOS);
   266             HOSTS_FILE_TRACKER = System.getSecurityManager() == null ? pea.run() :
   268             HOSTS_FILE_TRACKER = System.getSecurityManager() == null ? pea.run() :
   267                     AccessController.doPrivileged(pea);
   269                     AccessController.doPrivileged(pea);
   268         } catch (PrivilegedActionException pae) {
   270         } catch (PrivilegedActionException pae) {
   269             throw new RuntimeException("Error registering hosts file watch service", pae.getCause());
   271             throw new RuntimeException("Error registering hosts file watch service", pae.getCause());
   270         } catch (Exception e) {
   272         } catch (Exception e) {