Class DnsName

java.lang.Object
org.minidns.dnsname.DnsName
All Implemented Interfaces:
Serializable, CharSequence, Comparable<DnsName>

public final class DnsName extends Object implements CharSequence, Serializable, Comparable<DnsName>
A DNS name, also called "domain name". A DNS name consists of multiple 'labels' and is subject to certain restrictions (see for example RFC 3696 § 2.).

Instances of this class can be created by using from(String).

This class holds three representations of a DNS name: ACE, raw ACE and IDN. ACE (ASCII Compatible Encoding), which can be accessed via ace, represents mostly the data that got send over the wire. But since DNS names are case insensitive, the ACE value is normalized to lower case. You can use getRawAce() to get the raw ACE data that was received, which possibly includes upper case characters. The IDN (Internationalized Domain Name), that is the DNS name as it should be shown to the user, can be retrieved using asIdn().

More information about Internationalized Domain Names can be found at:
Author:
Florian Schmaus
See Also:
  • Field Details

    • MAX_DNSNAME_LENGTH_IN_OCTETS

      static final int MAX_DNSNAME_LENGTH_IN_OCTETS
      See Also:
    • MAX_LABELS

      public static final int MAX_LABELS
      See Also:
    • ROOT

      public static final DnsName ROOT
    • IN_ADDR_ARPA

      public static final DnsName IN_ADDR_ARPA
    • IP6_ARPA

      public static final DnsName IP6_ARPA
    • VALIDATE

      public static boolean VALIDATE
      Whether or not the DNS name is validated on construction.
    • ace

      public final String ace
      The DNS name in ASCII Compatible Encoding (ACE).
  • Method Details

    • writeToStream

      public void writeToStream(OutputStream os) throws IOException
      Throws:
      IOException
    • getBytes

      public byte[] getBytes()
      Serialize a domain name under IDN rules.
      Returns:
      The binary domain name representation.
    • getRawBytes

      public byte[] getRawBytes()
    • getRawAce

      public String getRawAce()
    • asIdn

      public String asIdn()
    • getDomainpart

      public String getDomainpart()
      Domainpart in ACE representation.
      Returns:
      the domainpart in ACE representation.
    • getHostpart

      public String getHostpart()
      Hostpart in ACE representation.
      Returns:
      the hostpart in ACE representation.
    • getHostpartLabel

      public DnsLabel getHostpartLabel()
    • size

      public int size()
    • length

      public int length()
      Specified by:
      length in interface CharSequence
    • charAt

      public char charAt(int index)
      Specified by:
      charAt in interface CharSequence
    • subSequence

      public CharSequence subSequence(int start, int end)
      Specified by:
      subSequence in interface CharSequence
    • toString

      public String toString()
      Specified by:
      toString in interface CharSequence
      Overrides:
      toString in class Object
    • from

      public static DnsName from(CharSequence name)
    • from

      public static DnsName from(String name)
    • from

      public static DnsName from(DnsName child, DnsName parent)
      Create a DNS name by "concatenating" the child under the parent name. The child can also be seen as the "left" part of the resulting DNS name and the parent is the "right" part.

      For example using "i.am.the.child" as child and "of.this.parent.example" as parent, will result in a DNS name: "i.am.the.child.of.this.parent.example".

      Parameters:
      child - the child DNS name.
      parent - the parent DNS name.
      Returns:
      the resulting of DNS name.
    • from

      public static DnsName from(DnsLabel child, DnsName parent)
    • from

      public static DnsName from(DnsLabel grandchild, DnsLabel child, DnsName parent)
    • from

      public static DnsName from(DnsName... nameComponents)
    • from

      public static DnsName from(String[] parts)
    • parse

      public static DnsName parse(DataInputStream dis, byte[] data) throws IOException
      Parse a domain name starting at the current offset and moving the input stream pointer past this domain name (even if cross references occure).
      Parameters:
      dis - The input stream.
      data - The raw data (for cross references).
      Returns:
      The domain name string.
      Throws:
      IOException - Should never happen.
    • compareTo

      public int compareTo(DnsName other)
      Specified by:
      compareTo in interface Comparable<DnsName>
    • equals

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

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

      public boolean isDirectChildOf(DnsName parent)
    • isChildOf

      public boolean isChildOf(DnsName parent)
    • getLabelCount

      public int getLabelCount()
    • getLabels

      public DnsLabel[] getLabels()
      Get a copy of the labels of this DNS name. The resulting array will contain the labels in reverse order, that is, the top-level domain will be at res[0].
      Returns:
      an array of the labels in reverse order.
    • getLabel

      public DnsLabel getLabel(int labelNum)
    • getRawLabels

      public DnsLabel[] getRawLabels()
      Get a copy of the raw labels of this DNS name. The resulting array will contain the labels in reverse order, that is, the top-level domain will be at res[0].
      Returns:
      an array of the raw labels in reverse order.
    • stripToLabels

      public DnsName stripToLabels(int labelCount)
    • getParent

      public DnsName getParent()
      Return the parent of this DNS label. Will return the root label if this label itself is the root label (because there is no parent of root).

      For example:

      • "foo.bar.org".getParent() == "bar.org"
      • ".".getParent() == "."
      Returns:
      the parent of this DNS label.
    • isRootLabel

      public boolean isRootLabel()