domain::base::header

Struct Header

source
pub struct Header { /* private fields */ }
Expand description

The first part of the header of a DNS message.

This type represents the information contained in the first four octets of the header: the message ID, opcode, rcode, and the various flags. It keeps those four octets in wire representation, i.e., in network byte order. The data is layed out like this:

                                1  1  1  1  1  1
  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA|Z |AD|CD|   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Methods are available for accessing each of these fields. For more information on the fields, see these methods in the section Field Access below.

You can create owned values via the new method or the Default trait. However, more often the type will be used via a reference into the octets of an actual message. The functions for_message_slice and for_message_slice_mut create such references from an octets slice.

The basic structure and most of the fields re defined in RFC 1035, except for the AD and CD flags, which are defined in RFC 4035.

Implementations§

source§

impl Header

§Creation and Conversion

source

pub fn new() -> Self

Creates a new header.

The new header has all fields as either zero or false. Thus, the opcode will be Opcode::QUERY and the response code will be Rcode::NOERROR.

source

pub fn for_message_slice(s: &[u8]) -> &Header

Creates a header reference from an octets slice of a message.

§Panics

This function panics if the slice is less than four octets long.

source

pub fn for_message_slice_mut(s: &mut [u8]) -> &mut Header

Creates a mutable header reference from an octets slice of a message.

§Panics

This function panics if the slice is less than four octets long.

source

pub fn as_slice(&self) -> &[u8]

Returns a reference to the underlying octets slice.

source§

impl Header

§Field Access

source

pub fn id(self) -> u16

Returns the value of the ID field.

The ID field is an identifier chosen by whoever created a query and is copied into a response by a server. It allows matching incoming responses to their queries.

When choosing an ID for an outgoing message, make sure it is random to avoid spoofing by guessing the message ID. If std support is enabled, the method set_random_id can be used for this purpose.

source

pub fn set_id(&mut self, value: u16)

Sets the value of the ID field.

source

pub fn set_random_id(&mut self)

Sets the value of the ID field to a randomly chosen number.

source

pub fn qr(self) -> bool

Returns whether the QR bit is set.

source

pub fn set_qr(&mut self, set: bool)

Sets the value of the QR bit.

source

pub fn opcode(self) -> Opcode

Returns the value of the Opcode field.

This field specifies the kind of query a message contains. See the Opcode type for more information on the possible values and their meaning. Normal queries have the variant Opcode::QUERY which is also the default value when creating a new header.

source

pub fn set_opcode(&mut self, opcode: Opcode)

Sets the value of the opcode field.

source

pub fn flags(self) -> Flags

Returns all flags contained in the header.

This is a virtual field composed of all the flag bits that are present in the header. The returned Flags type can be useful when you’re working with all flags, rather than a single one, which can be easily obtained from the header directly.

source

pub fn set_flags(&mut self, flags: Flags)

Sets all flag bits.

source

pub fn aa(self) -> bool

Returns whether the AA bit is set.

source

pub fn set_aa(&mut self, set: bool)

Sets the value of the AA bit.

source

pub fn tc(self) -> bool

Returns whether the TC bit is set.

source

pub fn set_tc(&mut self, set: bool)

Sets the value of the TC bit.

source

pub fn rd(self) -> bool

Returns whether the RD bit is set.

source

pub fn set_rd(&mut self, set: bool)

Sets the value of the RD bit.

source

pub fn ra(self) -> bool

Returns whether the RA bit is set.

source

pub fn set_ra(&mut self, set: bool)

Sets the value of the RA bit.

source

pub fn z(self) -> bool

Returns whether the reserved bit is set.

This bit must be false in all queries and responses.

source

pub fn set_z(&mut self, set: bool)

Sets the value of the reserved bit.

source

pub fn ad(self) -> bool

Returns whether the AD bit is set.

source

pub fn set_ad(&mut self, set: bool)

Sets the value of the AD bit.

source

pub fn cd(self) -> bool

Returns whether the CD bit is set.

source

pub fn set_cd(&mut self, set: bool)

Sets the value of the CD bit.

source

pub fn rcode(self) -> Rcode

Returns the value of the RCODE field.

The response code is used in a response to indicate what happened when processing the query. See the Rcode type for information on possible values and their meaning.

source

pub fn set_rcode(&mut self, rcode: Rcode)

Sets the value of the RCODE field.

Trait Implementations§

source§

impl AsMut<Header> for HeaderSection

source§

fn as_mut(&mut self) -> &mut Header

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl AsRef<Header> for HeaderSection

source§

fn as_ref(&self) -> &Header

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Clone for Header

source§

fn clone(&self) -> Header

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Header

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Header

source§

fn default() -> Header

Returns the “default value” for a type. Read more
source§

impl PartialEq for Header

source§

fn eq(&self, other: &Header) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for Header

source§

impl Eq for Header

source§

impl StructuralPartialEq for Header

Auto Trait Implementations§

§

impl Freeze for Header

§

impl RefUnwindSafe for Header

§

impl Send for Header

§

impl Sync for Header

§

impl Unpin for Header

§

impl UnwindSafe for Header

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<Source, Target> OctetsInto<Target> for Source
where Target: OctetsFrom<Source>,

source§

type Error = <Target as OctetsFrom<Source>>::Error

source§

fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>

Performs the conversion.
source§

fn octets_into(self) -> Target
where Self::Error: Into<Infallible>,

Performs an infallible conversion.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more