Class DNSCache

All Implemented Interfaces:
Serializable, ConcurrentMap<String,List<DNSEntry>>, Map<String,List<DNSEntry>>

public class DNSCache extends ConcurrentHashMap<String,List<DNSEntry>>
A table of DNS entries. This is a map table which can handle multiple entries with the same name.

Storing multiple entries with the same name is implemented using a linked list. This is hidden from the user and can change in later implementation.

Here's how to iterate over all entries:

       for (Iterator i=dnscache.allValues().iterator(); i.hasNext(); ) {
             DNSEntry entry = i.next();
             ...do something with entry...
       }
 

And here's how to iterate over all entries having a given name:

       for (Iterator i=dnscache.getDNSEntryList(name).iterator(); i.hasNext(); ) {
             DNSEntry entry = i.next();
           ...do something with entry...
       }
 
See Also:
  • Field Details

    • logger

      private static org.slf4j.Logger logger
    • serialVersionUID

      private static final long serialVersionUID
      See Also:
  • Constructor Details

    • DNSCache

      public DNSCache()
    • DNSCache

      public DNSCache(DNSCache map)
      Parameters:
      map -
    • DNSCache

      public DNSCache(int initialCapacity)
      Create a table with a given initial size.
      Parameters:
      initialCapacity -
  • Method Details

    • clone

      protected Object clone() throws CloneNotSupportedException
      Overrides:
      clone in class AbstractMap<String,List<DNSEntry>>
      Throws:
      CloneNotSupportedException
    • allValues

      public Collection<DNSEntry> allValues()
      Returns all entries in the cache
      Returns:
      all entries in the cache
    • getDNSEntryList

      public Collection<? extends DNSEntry> getDNSEntryList(String name)
      Iterate only over items with matching name. Returns an list of DNSEntry or null. To retrieve all entries, one must iterate over this linked list.
      Parameters:
      name -
      Returns:
      list of DNSEntries
    • _getDNSEntryList

      private Collection<? extends DNSEntry> _getDNSEntryList(String name)
    • getDNSEntry

      public DNSEntry getDNSEntry(DNSEntry dnsEntry)
      Get a matching DNS entry from the table (using isSameEntry). Returns the entry that was found.
      Parameters:
      dnsEntry -
      Returns:
      DNSEntry
    • getDNSEntry

      public DNSEntry getDNSEntry(String name, DNSRecordType type, DNSRecordClass recordClass)
      Get a matching DNS entry from the table.
      Parameters:
      name -
      type -
      recordClass -
      Returns:
      DNSEntry
    • getDNSEntryList

      public Collection<? extends DNSEntry> getDNSEntryList(String name, DNSRecordType type, DNSRecordClass recordClass)
      Get all matching DNS entries from the table.
      Parameters:
      name -
      type -
      recordClass -
      Returns:
      list of entries
    • addDNSEntry

      public boolean addDNSEntry(DNSEntry dnsEntry)
      Adds an entry to the table.
      Parameters:
      dnsEntry -
      Returns:
      true if the entry was added
    • removeDNSEntry

      public boolean removeDNSEntry(DNSEntry dnsEntry)
      Removes a specific entry from the table. Returns true if the entry was found.
      Parameters:
      dnsEntry -
      Returns:
      true if the entry was removed
    • replaceDNSEntry

      public boolean replaceDNSEntry(DNSEntry newDNSEntry, DNSEntry existingDNSEntry)
      Replace an existing entry by a new one.
      Note: the 2 entries must have the same key.
      Parameters:
      newDNSEntry -
      existingDNSEntry -
      Returns:
      true if the entry has been replace, false otherwise.
    • toString

      public String toString()
      Overrides:
      toString in class ConcurrentHashMap<String,List<DNSEntry>>
    • logCachedContent

      public void logCachedContent()
      Prints the content of the cache to the logger.