From 8e848f7afdb1f4ac8ac5a56d20e7ea833c5c840c Mon Sep 17 00:00:00 2001 From: Rene Treffer Date: Fri, 13 Jun 2014 17:51:45 +0200 Subject: Switch to deticated DNSCache interface + reference LRU implementation. --- src/main/java/de/measite/minidns/Client.java | 86 +++++----------------------- 1 file changed, 14 insertions(+), 72 deletions(-) (limited to 'src/main/java/de/measite/minidns/Client.java') diff --git a/src/main/java/de/measite/minidns/Client.java b/src/main/java/de/measite/minidns/Client.java index 3f152346..462d52ff 100644 --- a/src/main/java/de/measite/minidns/Client.java +++ b/src/main/java/de/measite/minidns/Client.java @@ -13,8 +13,6 @@ import java.security.SecureRandom; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map.Entry; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; @@ -48,23 +46,26 @@ public class Client { /** * The internal DNS cache. */ - protected LinkedHashMap cache; + protected DNSCache cache; /** - * Maximum acceptable ttl. + * Create a new DNS client with the given DNS cache. + * @param cache The backend DNS cache. */ - protected long maxTTL = 60 * 60 * 1000; - - /** - * Create a new DNS client. - */ - public Client() { + public Client(DNSCache cache) { try { random = SecureRandom.getInstance("SHA1PRNG"); } catch (NoSuchAlgorithmException e1) { random = new SecureRandom(); } - setCacheSize(10); + this.cache = cache; + } + + /** + * Create a new DNS client. + */ + public Client() { + this(null); } /** @@ -132,19 +133,8 @@ public class Client { */ public DNSMessage query(Question q, String host, int port) throws IOException { DNSMessage dnsMessage = (cache == null) ? null : cache.get(q); - if (dnsMessage != null && dnsMessage.getReceiveTimestamp() > 0l) { - // check the ttl - long ttl = maxTTL; - for (Record r : dnsMessage.getAnswers()) { - ttl = Math.min(ttl, r.ttl); - } - for (Record r : dnsMessage.getAdditionalResourceRecords()) { - ttl = Math.min(ttl, r.ttl); - } - if (dnsMessage.getReceiveTimestamp() + ttl < - System.currentTimeMillis()) { - return dnsMessage; - } + if (dnsMessage != null) { + return dnsMessage; } DNSMessage message = new DNSMessage(); message.setQuestions(new Question[]{q}); @@ -326,52 +316,4 @@ public class Client { return null; } - /** - * Configure the cache size (default 10). - * @param maximumSize The new cache size or 0 to disable. - */ - @SuppressWarnings("serial") - public void setCacheSize(final int maximumSize) { - if (maximumSize == 0) { - this.cache = null; - } else { - LinkedHashMap old = cache; - cache = new LinkedHashMap() { - @Override - protected boolean removeEldestEntry( - Entry eldest) { - return size() > maximumSize; - } - }; - if (old != null) { - cache.putAll(old); - } - } - } - - /** - * Flush the DNS cache. - */ - public void flushCache() { - if (cache != null) { - cache.clear(); - } - } - - /** - * Get the current maximum record ttl. - * @return The maximum record ttl. - */ - public long getMaxTTL() { - return maxTTL; - } - - /** - * Set the maximum record ttl. - * @param maxTTL The new maximum ttl. - */ - public void setMaxTTL(long maxTTL) { - this.maxTTL = maxTTL; - } - } -- cgit v1.2.3