Class DnsName
- All Implemented Interfaces:
Serializable
,CharSequence
,Comparable<DnsName>
public final class DnsName extends Object implements CharSequence, Serializable, Comparable<DnsName>
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()
.
- Author:
- Florian Schmaus
- See Also:
- RFC 3696, Serialized Form
-
Field Summary
Fields Modifier and Type Field Description String
ace
The DNS name in ASCII Compatible Encoding (ACE).static DnsName
IN_ADDR_ARPA
static DnsName
IP6_ARPA
(package private) static int
MAX_DNSNAME_LENGTH_IN_OCTETS
static int
MAX_LABELS
static DnsName
ROOT
static boolean
VALIDATE
Whether or not the DNS name is validated on construction. -
Method Summary
Modifier and Type Method Description String
asIdn()
char
charAt(int index)
int
compareTo(DnsName other)
boolean
equals(Object other)
static DnsName
from(CharSequence name)
static DnsName
from(String name)
static DnsName
from(String[] parts)
static DnsName
from(DnsLabel grandchild, DnsLabel child, DnsName parent)
static DnsName
from(DnsLabel child, DnsName parent)
static DnsName
from(DnsName... nameComponents)
static DnsName
from(DnsName child, DnsName parent)
Create a DNS name by "concatenating" the child under the parent name.byte[]
getBytes()
Serialize a domain name under IDN rules.String
getDomainpart()
Domainpart in ACE representation.String
getHostpart()
Hostpart in ACE representation.DnsLabel
getHostpartLabel()
DnsLabel
getLabel(int labelNum)
int
getLabelCount()
DnsLabel[]
getLabels()
Get a copy of the labels of this DNS name.DnsName
getParent()
Return the parent of this DNS label.String
getRawAce()
byte[]
getRawBytes()
DnsLabel[]
getRawLabels()
Get a copy of the raw labels of this DNS name.int
hashCode()
boolean
isChildOf(DnsName parent)
boolean
isDirectChildOf(DnsName parent)
boolean
isRootLabel()
int
length()
static DnsName
parse(DataInputStream dis, byte[] data)
Parse a domain name starting at the current offset and moving the input stream pointer past this domain name (even if cross references occure).int
size()
DnsName
stripToLabels(int labelCount)
CharSequence
subSequence(int start, int end)
String
toString()
void
writeToStream(OutputStream os)
-
Field Details
-
MAX_DNSNAME_LENGTH_IN_OCTETS
static final int MAX_DNSNAME_LENGTH_IN_OCTETS- See Also:
- RFC 1035 § 2.3.4., Constant Field Values
-
MAX_LABELS
public static final int MAX_LABELS- See Also:
- Constant Field Values
-
ROOT
-
IN_ADDR_ARPA
-
IP6_ARPA
-
VALIDATE
public static boolean VALIDATEWhether or not the DNS name is validated on construction. -
ace
The DNS name in ASCII Compatible Encoding (ACE).
-
-
Method Details
-
writeToStream
- Throws:
IOException
-
getBytes
public byte[] getBytes()Serialize a domain name under IDN rules.- Returns:
- The binary domain name representation.
-
getRawBytes
public byte[] getRawBytes() -
getRawAce
-
asIdn
-
getDomainpart
Domainpart in ACE representation.- Returns:
- the domainpart in ACE representation.
-
getHostpart
Hostpart in ACE representation.- Returns:
- the hostpart in ACE representation.
-
getHostpartLabel
-
size
public int size() -
length
public int length()- Specified by:
length
in interfaceCharSequence
-
charAt
public char charAt(int index)- Specified by:
charAt
in interfaceCharSequence
-
subSequence
- Specified by:
subSequence
in interfaceCharSequence
-
toString
- Specified by:
toString
in interfaceCharSequence
- Overrides:
toString
in classObject
-
from
-
from
-
from
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
-
from
-
from
-
from
-
parse
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
- Specified by:
compareTo
in interfaceComparable<DnsName>
-
equals
-
hashCode
public int hashCode() -
isDirectChildOf
-
isChildOf
-
getLabelCount
public int getLabelCount() -
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
-
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
-
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()
-