org.minidns.record

## Class Record<D extends Data>

- 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.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Record.CLASS` The symbolic class of a DNS record (usually `Record.CLASS.IN` for Internet).
    `static class` | `Record.TYPE` The resource record type.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `Record.CLASS` | `clazz` The record class (usually CLASS.IN).
    `int` | `clazzValue` The value of the class field of a RR.
    `DnsName` | `name` The generic name of this record.
    `D` | `payloadData` The payload object of this record.
    `long` | `ttl` The ttl of this record.
    `Record.TYPE` | `type` The type (and payload type) of this record.
    `boolean` | `unicastQuery` MDNS defines the highest bit of the class as the unicast query bit.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Record(DnsName name, Record.TYPE type, int clazzValue, long ttl, D payloadData)`
    `Record(DnsName name, Record.TYPE type, Record.CLASS clazz, long ttl, D payloadData, boolean unicastQuery)`
    `Record(String name, Record.TYPE type, int clazzValue, long ttl, D payloadData)`
    `Record(String name, Record.TYPE type, Record.CLASS clazz, long ttl, D payloadData, boolean unicastQuery)`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `<E extends Data> Record<E>` | `as(Class<E> dataClass)` Return the record as record with the given `Data` class.
    `boolean` | `equals(Object other)`
    `static <E extends Data> List<Record<E>>` | `filter(Class<E> dataClass, Collection<Record<? extends Data>> input)`
    `static <E extends Data> void` | `filter(Collection<Record<E>> result, Class<E> dataClass, Collection<Record<? extends Data>> input)`
    `D` | `getPayload()` The payload data, usually a subclass of data (A, AAAA, CNAME, ...).
    `Question` | `getQuestion()` Get the question asking for this resource record.
    `DnsMessage.Builder` | `getQuestionMessage()`
    `long` | `getTtl()` Retrieve the record ttl.
    `int` | `hashCode()`
    `<E extends Data> Record<E>` | `ifPossibleAs(Class<E> dataClass)` Return the record if possible as record with the given `Data` class.
    `boolean` | `isAnswer(Question q)` Check if this record answers a given query.
    `boolean` | `isUnicastQuery()` See if this query/response was a unicast query (highest class bit set).
    `static Record<Data>` | `parse(DataInputStream dis, byte[] data)` Parse a given record based on the full message data and the current stream position.
    `byte[]` | `toByteArray()`
    `void` | `toOutputStream(OutputStream outputStream)`
    `String` | `toString()` Retrieve a textual representation of this resource record.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### 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

    - #### name

          public final DnsName name

      The generic name of this record.

    - #### payloadData

          public final D extends Data payloadData

      The payload object of this record.

    - #### ttl

          public final long ttl

      The ttl of this record.

    - #### type

          public final Record.TYPE type

      The type (and payload type) of this record.

    - #### unicastQuery

          public final boolean unicastQuery

      MDNS defines the highest bit of the class as the unicast query bit.

  - ### Constructor Detail

    - #### Record

          public Record(DnsName name,
                        Record.TYPE type,
                        int clazzValue,
                        long ttl,
                        D payloadData)

    - #### Record

          public Record(DnsName name,
                        Record.TYPE type,
                        Record.CLASS clazz,
                        long ttl,
                        D payloadData,
                        boolean unicastQuery)

    - #### Record

          public Record(String name,
                        Record.TYPE type,
                        int clazzValue,
                        long ttl,
                        D payloadData)

    - #### Record

          public Record(String name,
                        Record.TYPE type,
                        Record.CLASS clazz,
                        long ttl,
                        D payloadData,
                        boolean unicastQuery)

  - ### Method Detail

    - #### 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)`

    - #### equals

          public boolean equals(Object other)

      Overrides:
        `equals` in class `Object`

    - #### filter

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

    - #### filter

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

    - #### getPayload

          public D getPayload()

      The payload data, usually a subclass of data (A, AAAA, CNAME, ...).
      Returns:
        The payload data.

    - #### 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()

    - #### getTtl

          public long getTtl()

      Retrieve the record ttl.
      Returns:
        The record ttl.

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` 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)`

    - #### 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.

    - #### 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.

    - #### toByteArray

          public byte[] toByteArray()

    - #### toOutputStream

          public void toOutputStream(OutputStream outputStream)
                              throws IOException

      Throws:
        `IOException`

    - #### toString

          public String toString()

      Retrieve a textual representation of this resource record.
      Overrides:
        `toString` in class `Object`
      Returns:
        String