Class Record<D extends Data>

java.lang.Object
org.minidns.record.Record<D>

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.
  • Constructor Details

  • 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
      Throws:
      IOException
    • toByteArray

      public byte[] toByteArray()
    • 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.
      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()
    • 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(Class)
    • 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:
      ifPossibleAs(Class)
    • filter

      public static <E extends Data> void filter​(Collection<Record<E>> result, Class<E> dataClass, Collection<Record<? extends Data>> input)
    • filter

      public static <E extends Data> List<Record<E>> filter​(Class<E> dataClass, Collection<Record<? extends Data>> input)