2014-06-02 17:00:33 +02:00
|
|
|
/*
|
2015-03-16 07:46:14 +01:00
|
|
|
* Copyright 2015 The Netty Project
|
2014-06-02 17:00:33 +02:00
|
|
|
*
|
|
|
|
* The Netty Project licenses this file to you under the Apache License,
|
|
|
|
* version 2.0 (the "License"); you may not use this file except in compliance
|
|
|
|
* with the License. You may obtain a copy of the License at:
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
* License for the specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*/
|
|
|
|
package io.netty.handler.codec.dns;
|
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
import io.netty.util.ReferenceCounted;
|
2016-04-12 14:22:41 +02:00
|
|
|
import io.netty.util.internal.UnstableApi;
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* The superclass which contains core information concerning a {@link DnsQuery} and a {@link DnsResponse}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2016-04-12 14:22:41 +02:00
|
|
|
@UnstableApi
|
2015-03-16 07:46:14 +01:00
|
|
|
public interface DnsMessage extends ReferenceCounted {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the {@code ID} of this DNS message.
|
|
|
|
*/
|
|
|
|
int id();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Sets the {@code ID} of this DNS message.
|
|
|
|
*/
|
|
|
|
DnsMessage setId(int id);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the {@code opCode} of this DNS message.
|
|
|
|
*/
|
|
|
|
DnsOpCode opCode();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Sets the {@code opCode} of this DNS message.
|
|
|
|
*/
|
|
|
|
DnsMessage setOpCode(DnsOpCode opCode);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Returns the {@code RD} (recursion desired} field of this DNS message.
|
|
|
|
*/
|
|
|
|
boolean isRecursionDesired();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Sets the {@code RD} (recursion desired} field of this DNS message.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage setRecursionDesired(boolean recursionDesired);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Returns the {@code Z} (reserved for future use) field of this DNS message.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
int z();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Sets the {@code Z} (reserved for future use) field of this DNS message.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage setZ(int z);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Returns the number of records in the specified {@code section} of this DNS message.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
int count(DnsSection section);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Returns the number of records in this DNS message.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
int count();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Returns the first record in the specified {@code section} of this DNS message.
|
|
|
|
* When the specified {@code section} is {@link DnsSection#QUESTION}, the type of the returned record is
|
|
|
|
* always {@link DnsQuestion}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*
|
2015-03-16 07:46:14 +01:00
|
|
|
* @return {@code null} if this message doesn't have any records in the specified {@code section}
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
<T extends DnsRecord> T recordAt(DnsSection section);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Returns the record at the specified {@code index} of the specified {@code section} of this DNS message.
|
|
|
|
* When the specified {@code section} is {@link DnsSection#QUESTION}, the type of the returned record is
|
|
|
|
* always {@link DnsQuestion}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*
|
2015-03-16 07:46:14 +01:00
|
|
|
* @throws IndexOutOfBoundsException if the specified {@code index} is out of bounds
|
|
|
|
*/
|
|
|
|
<T extends DnsRecord> T recordAt(DnsSection section, int index);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the specified {@code section} of this DNS message to the specified {@code record},
|
|
|
|
* making it a single-record section. When the specified {@code section} is {@link DnsSection#QUESTION},
|
|
|
|
* the specified {@code record} must be a {@link DnsQuestion}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage setRecord(DnsSection section, DnsRecord record);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Sets the specified {@code record} at the specified {@code index} of the specified {@code section}
|
|
|
|
* of this DNS message. When the specified {@code section} is {@link DnsSection#QUESTION},
|
|
|
|
* the specified {@code record} must be a {@link DnsQuestion}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*
|
2015-03-16 07:46:14 +01:00
|
|
|
* @return the old record
|
|
|
|
* @throws IndexOutOfBoundsException if the specified {@code index} is out of bounds
|
2014-06-02 17:00:33 +02:00
|
|
|
*/
|
2015-03-16 07:46:14 +01:00
|
|
|
<T extends DnsRecord> T setRecord(DnsSection section, int index, DnsRecord record);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
/**
|
2015-03-16 07:46:14 +01:00
|
|
|
* Adds the specified {@code record} at the end of the specified {@code section} of this DNS message.
|
|
|
|
* When the specified {@code section} is {@link DnsSection#QUESTION}, the specified {@code record}
|
|
|
|
* must be a {@link DnsQuestion}.
|
|
|
|
*/
|
|
|
|
DnsMessage addRecord(DnsSection section, DnsRecord record);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds the specified {@code record} at the specified {@code index} of the specified {@code section}
|
|
|
|
* of this DNS message. When the specified {@code section} is {@link DnsSection#QUESTION}, the specified
|
|
|
|
* {@code record} must be a {@link DnsQuestion}.
|
2014-06-02 17:00:33 +02:00
|
|
|
*
|
2015-03-16 07:46:14 +01:00
|
|
|
* @throws IndexOutOfBoundsException if the specified {@code index} is out of bounds
|
|
|
|
*/
|
|
|
|
DnsMessage addRecord(DnsSection section, int index, DnsRecord record);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Removes the record at the specified {@code index} of the specified {@code section} from this DNS message.
|
|
|
|
* When the specified {@code section} is {@link DnsSection#QUESTION}, the type of the returned record is
|
|
|
|
* always {@link DnsQuestion}.
|
|
|
|
*
|
|
|
|
* @return the removed record
|
|
|
|
*/
|
|
|
|
<T extends DnsRecord> T removeRecord(DnsSection section, int index);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Removes all the records in the specified {@code section} of this DNS message.
|
|
|
|
*/
|
|
|
|
DnsMessage clear(DnsSection section);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
2015-03-16 07:46:14 +01:00
|
|
|
/**
|
|
|
|
* Removes all the records in this DNS message.
|
|
|
|
*/
|
|
|
|
DnsMessage clear();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
@Override
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage touch();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
@Override
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage touch(Object hint);
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
@Override
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage retain();
|
2014-06-02 17:00:33 +02:00
|
|
|
|
|
|
|
@Override
|
2015-03-16 07:46:14 +01:00
|
|
|
DnsMessage retain(int increment);
|
2014-06-02 17:00:33 +02:00
|
|
|
}
|