java.lang.Object
org.minidns.record.Record<D>
Type Parameters:
D - type of data stored in this record

public final class Record<D extends Data>extends Object
A generic DNS record.
  • Field Details

    • name

      public final DnsName name
      The generic name of this record.
    • type

      public final Record.TYPE type
      The type (and payload type) of this record.
    • clazz

      public final Record.CLASS clazz
      The record class (usually CLASS.IN).
    • clazzValue

      public final int clazzValue
      The value of the class field of a RR. According to RFC 2671 (OPT RR) this is not necessarily representable using clazz field and unicastQuery bit
    • ttl

      public final long ttl
      The ttl of this record.
    • payloadData

      public final D extends Data payloadData
      The payload object of this record.
    • unicastQuery

      public final boolean unicastQuery
      MDNS defines the highest bit of the class as the unicast query bit.
    • bytes

      private transient byte[] bytes
      Cached serialized bytes.
    • hashCodeCache

      private transient Integer hashCodeCache
      Cached hash code.
  • Constructor Details

    • Record

      public Record(DnsName name, Record.TYPE type, Record.CLASS clazz, long ttl, D payloadData, boolean unicastQuery)
      Create a new record.
      Parameters:
      name - the record name
      type - the record type
      clazz - the record class
      ttl - the time to live
      payloadData - the record payload data
      unicastQuery - whether the unicast query bit is set
    • Record

      public Record(String name, Record.TYPE type, Record.CLASS clazz, long ttl, D payloadData, boolean unicastQuery)
      Create a new record.
      Parameters:
      name - the record name
      type - the record type
      clazz - the record class
      ttl - the time to live
      payloadData - the record payload data
      unicastQuery - whether the unicast query bit is set
    • Record

      public Record(String name, Record.TYPE type, int clazzValue, long ttl, D payloadData)
      Create a new record with a raw class value.
      Parameters:
      name - the record name
      type - the record type
      clazzValue - the raw class value
      ttl - the time to live
      payloadData - the record payload data
    • Record

      public Record(DnsName name, Record.TYPE type, int clazzValue, long ttl, D payloadData)
      Create a new record with a raw class value.
      Parameters:
      name - the record name
      type - the record type
      clazzValue - the raw class value
      ttl - the time to live
      payloadData - the record payload data
    • Record

      private Record(DnsName name, Record.TYPE type, Record.CLASS clazz, int clazzValue, long ttl, D payloadData, boolean unicastQuery)
      Builds a record from its fields.
      Parameters:
      name - the record name
      type - the record type
      clazz - the record class
      clazzValue - the class number from the wire
      ttl - the time to live in seconds
      payloadData - the record's data
      unicastQuery - true when this is a unicast query
  • Method Details

    • parse

      public static Record<Data> parse(DataInputStream dis, byte[] data) throws IOException
      Parse a given record based on the full message data and the current stream position.
      Parameters:
      dis - The DataInputStream positioned at the first record byte.
      data - The full message data.
      Returns:
      the record which was parsed.
      Throws:
      IOException - In case of malformed replies.
    • toOutputStream

      public void toOutputStream(OutputStream outputStream) throws IOException
      Write this record to the given output stream.
      Parameters:
      outputStream - the output stream to write to
      Throws:
      IOException - if an I/O error occurs
    • toByteArray

      public byte[] toByteArray()
      Serialize this record to a byte array.
      Returns:
      the serialized record bytes
    • toString

      public String toString()
      Retrieve a textual representation of this resource record.
      Overrides:
      toString in class Object
      Returns:
      String
    • isAnswer

      public boolean isAnswer(Question q)
      Check if this record answers a given query.
      Parameters:
      q - The query; its type and class match when equal to that value or to ANY
      Returns:
      True if this record is a valid answer.
    • isUnicastQuery

      public boolean isUnicastQuery()
      See if this query/response was a unicast query (highest class bit set).
      Returns:
      True if it is a unicast query/response record.
    • getPayload

      public D getPayload()
      The payload data, usually a subclass of data (A, AAAA, CNAME, ...).
      Returns:
      The payload data.
    • getTtl

      public long getTtl()
      Retrieve the record ttl.
      Returns:
      The record ttl.
    • getQuestion

      public Question getQuestion()
      Get the question asking for this resource record. This will return null if the record is not retrievable, i.e. Record.TYPE.OPT.
      Returns:
      the question for this resource record or null.
    • getQuestionMessage

      public DnsMessage.Builder getQuestionMessage()
      Get a message builder for the question that this record answers.
      Returns:
      the message builder, or null if the record type is not retrievable
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object other)
      Overrides:
      equals in class Object
    • ifPossibleAs

      public <E extends Data> Record<E> ifPossibleAs(Class<E> dataClass)
      Return the record if possible as record with the given Data class. If the record does not hold payload of the given data class type, then null will be returned.
      Type Parameters:
      E - a subtype of Data.
      Parameters:
      dataClass - a class of the Data type.
      Returns:
      the record with a specialized payload type or null.
      See Also:
    • as

      public <E extends Data> Record<E> as(Class<E> dataClass)
      Return the record as record with the given Data class. If the record does not hold payload of the given data class type, then a IllegalArgumentException will be thrown.
      Type Parameters:
      E - a subtype of Data.
      Parameters:
      dataClass - a class of the Data type.
      Returns:
      the record with a specialized payload type.
      See Also:
    • filter

      public static <E extends Data> void filter(Collection<Record<E>> result, Class<E> dataClass, Collection<Record<? extends Data>> input)
      Filter a collection of records by data class, adding matching records to the result.
      Type Parameters:
      E - the target data type
      Parameters:
      result - the collection to add filtered records to
      dataClass - the class to filter by
      input - the input collection of records
    • filter

      public static <E extends Data> List<Record<E>> filter(Class<E> dataClass, Collection<Record<? extends Data>> input)
      Filter a collection of records by data class, returning a new list.
      Type Parameters:
      E - the target data type
      Parameters:
      dataClass - the class to filter by
      input - the input collection of records
      Returns:
      a list of records matching the data class