package com.theotherian.dns; import java.net.InetAddress; import java.net.UnknownHostException; import org.apache.log4j.Logger; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; final class CacheFactory { private static final Logger LOGGER = Logger.getLogger(CacheLoader.class); static LoadingCache<String, InetAddress[]> newCache() { return CacheBuilder.newBuilder().build(new CacheLoader<String, InetAddress[]>() { @Override public InetAddress[] load(String key) throws Exception { LOGGER.debug("Looking up " + key); if (OverrideNameServiceManager.hasIpForHost(key)) { String ipAddress = OverrideNameServiceManager.getIpForHost(key); LOGGER.debug("Found thread local override for " + key + " of " + ipAddress); return convertToInetAddress(ipAddress); } else if (HostsFileResolver.hasOverride(key)) { String ipAddress = HostsFileResolver.getOverride(key); LOGGER.debug("Found hosts entry for " + key + " of " + ipAddress); return convertToInetAddress(ipAddress); } else { LOGGER.debug("No override found for " + key + ""); return new InetAddress[]{}; } } private InetAddress[] convertToInetAddress(String ipAddress) throws UnknownHostException { byte[] ipAsBytes = TextToNumeric.convert(ipAddress); InetAddress[] address = new InetAddress[1]; address[0] = InetAddress.getByAddress(ipAsBytes); return address; } }); } }