public class Message
extends java.lang.Object
implements java.lang.Cloneable
| Modifier and Type | Field and Description |
|---|---|
static int |
MAXLENGTH
The maximum length of a message in wire format.
|
| Constructor and Description |
|---|
Message()
Creates a new Message with a random Message ID
|
Message(byte[] b)
Creates a new Message from its DNS wire format representation
|
Message(int id)
Creates a new Message with the specified Message ID
|
| Modifier and Type | Method and Description |
|---|---|
void |
addRecord(Record r,
int section)
Adds a record to a section of the Message, and adjusts the header.
|
java.lang.Object |
clone()
Creates a copy of this Message.
|
boolean |
findRecord(Record r)
Determines if the given record is already present in any section.
|
boolean |
findRecord(Record r,
int section)
Determines if the given record is already present in the given section.
|
boolean |
findRRset(Name name,
int type)
Determines if an RRset with the given name and type is already
present in any section.
|
boolean |
findRRset(Name name,
int type,
int section)
Determines if an RRset with the given name and type is already
present in the given section.
|
Header |
getHeader()
Retrieves the Header.
|
OPTRecord |
getOPT()
Returns the OPT record from the ADDITIONAL section, if one is present.
|
Record |
getQuestion()
Returns the first record in the QUESTION section.
|
int |
getRcode()
Returns the message's rcode (error code).
|
Record[] |
getSectionArray(int section)
Returns an array containing all records in the given section, or an
empty array if the section is empty.
|
RRset[] |
getSectionRRsets(int section)
Returns an array containing all records in the given section grouped into
RRsets.
|
TSIGRecord |
getTSIG()
Returns the TSIG record from the ADDITIONAL section, if one is present.
|
boolean |
isSigned()
Was this message signed by a TSIG?
|
boolean |
isVerified()
If this message was signed by a TSIG, was the TSIG verified?
|
static Message |
newQuery(Record r)
Creates a new Message with a random Message ID suitable for sending as a
query.
|
static Message |
newUpdate(Name zone)
Creates a new Message to contain a dynamic update.
|
Message |
normalize(Message query)
Creates a normalized copy of this message by following xNAME chains, synthesizing CNAMEs from
DNAMEs if necessary, and removing illegal RRsets from
Section.AUTHORITY and Section.ADDITIONAL. |
Message |
normalize(Message query,
boolean throwOnIrrelevantRecord)
Creates a normalized copy of this message by following xNAME chains, synthesizing CNAMEs from
DNAMEs if necessary, and removing illegal RRsets from
Section.AUTHORITY and Section.ADDITIONAL. |
int |
numBytes()
Returns the size of the message.
|
void |
removeAllRecords(int section)
Removes all records from a section of the Message, and adjusts the header.
|
boolean |
removeRecord(Record r,
int section)
Removes a record from a section of the Message, and adjusts the header.
|
java.lang.String |
sectionToString(int i)
Converts the given section of the Message to a String.
|
void |
setHeader(Header h)
Replaces the Header with a new one.
|
void |
setTSIG(TSIG key,
int error,
TSIGRecord querytsig)
Sets the TSIG key and other necessary information to sign a message.
|
java.lang.String |
toString()
Converts the Message to a String.
|
byte[] |
toWire()
Returns an array containing the wire format representation of the Message.
|
byte[] |
toWire(int maxLength)
Returns an array containing the wire format representation of the Message
with the specified maximum length.
|
public static final int MAXLENGTH
public Message(int id)
public Message()
public Message(byte[] b)
throws java.io.IOException
b - A byte array containing the DNS Message.java.io.IOExceptionpublic static Message newQuery(Record r)
r - A record containing the questionpublic static Message newUpdate(Name zone)
zone - The zone to be updatedpublic void addRecord(Record r, int section)
public boolean removeRecord(Record r, int section)
public void removeAllRecords(int section)
public boolean findRecord(Record r, int section)
public boolean findRecord(Record r)
public boolean findRRset(Name name, int type, int section)
public boolean findRRset(Name name, int type)
public Record getQuestion()
public TSIGRecord getTSIG()
TSIGRecord,
TSIG,
Sectionpublic boolean isSigned()
TSIGpublic boolean isVerified()
TSIGpublic OPTRecord getOPT()
public int getRcode()
public Record[] getSectionArray(int section)
public RRset[] getSectionRRsets(int section)
public byte[] toWire()
public byte[] toWire(int maxLength)
public void setTSIG(TSIG key, int error, TSIGRecord querytsig)
key - The TSIG key.error - The value of the TSIG error field.querytsig - If this is a response, the TSIG from the request.public int numBytes()
public java.lang.String sectionToString(int i)
Sectionpublic java.lang.String toString()
toString in class java.lang.Objectpublic java.lang.Object clone()
clone in class java.lang.ObjectResolver,
TSIGRecord,
OPTRecordpublic Message normalize(Message query)
Section.AUTHORITY and Section.ADDITIONAL.
Normalization is only applied to Rcode.NOERROR and Rcode.NXDOMAIN responses.
This method is equivalent to calling normalize(Message, boolean) with false.
query - The query that produced this message.null if the message could not be normalized or is otherwise invalid.public Message normalize(Message query, boolean throwOnIrrelevantRecord) throws WireParseException
Section.AUTHORITY and Section.ADDITIONAL.
Normalization is only applied to Rcode.NOERROR and Rcode.NXDOMAIN responses.
query - The query that produced this message.throwOnIrrelevantRecord - If true, throw an exception instead of silently ignoring
irrelevant records.null if the message could not be normalized or is otherwise invalid.WireParseException - when throwOnIrrelevantRecord is true and an invalid
or irrelevant record was found.