hickory_proto::serialize::binary

Struct BinEncoder

Source
pub struct BinEncoder<'a> { /* private fields */ }
Expand description

Encode DNS messages and resource record types.

Implementations§

Source§

impl<'a> BinEncoder<'a>

Source

pub fn new(buf: &'a mut Vec<u8>) -> Self

Create a new encoder with the Vec to fill

Source

pub fn with_mode(buf: &'a mut Vec<u8>, mode: EncodeMode) -> Self

Specify the mode for encoding

§Arguments
  • mode - In Signing mode, canonical forms of all data are encoded, otherwise format matches the source form
Source

pub fn with_offset(buf: &'a mut Vec<u8>, offset: u32, mode: EncodeMode) -> Self

Begins the encoder at the given offset

This is used for pointers. If this encoder is starting at some point further in the sequence of bytes, for the proper offset of the pointer, the offset accounts for that by using the offset to add to the pointer location being written.

§Arguments
  • offset - index at which to start writing into the buffer
Source

pub fn set_max_size(&mut self, max: u16)

Sets the maximum size of the buffer

DNS message lens must be smaller than u16::max_value due to hard limits in the protocol

this method will move to the constructor in a future release

Source

pub fn into_bytes(self) -> &'a Vec<u8>

Returns a reference to the internal buffer

Source

pub fn len(&self) -> usize

Returns the length of the buffer

Source

pub fn is_empty(&self) -> bool

Returns true if the buffer is empty

Source

pub fn offset(&self) -> usize

Returns the current offset into the buffer

Source

pub fn set_offset(&mut self, offset: usize)

sets the current offset to the new offset

Source

pub fn mode(&self) -> EncodeMode

Returns the current Encoding mode

Source

pub fn set_canonical_names(&mut self, canonical_names: bool)

If set to true, then names will be written into the buffer in canonical form

Source

pub fn is_canonical_names(&self) -> bool

Returns true if then encoder is writing in canonical form

Source

pub fn with_canonical_names<F: FnOnce(&mut Self) -> Result<(), ProtoError>>( &mut self, f: F, ) -> Result<(), ProtoError>

Emit all names in canonical form, useful for https://tools.ietf.org/html/rfc3597

Source

pub fn reserve(&mut self, _additional: usize) -> Result<(), ProtoError>

Reserve specified additional length in the internal buffer.

Source

pub fn trim(&mut self)

trims to the current offset

Source

pub fn slice_of(&self, start: usize, end: usize) -> &[u8]

borrow a slice from the encoder

Source

pub fn store_label_pointer(&mut self, start: usize, end: usize)

Stores a label pointer to an already written label

The location is the current position in the buffer implicitly, it is expected that the name will be written to the stream after the current index.

Source

pub fn get_label_pointer(&self, start: usize, end: usize) -> Option<u16>

Looks up the index of an already written label

Source

pub fn emit(&mut self, b: u8) -> Result<(), ProtoError>

Emit one byte into the buffer

Source

pub fn emit_character_data<S: AsRef<[u8]>>( &mut self, char_data: S, ) -> Result<(), ProtoError>

matches description from above.

use hickory_proto::serialize::binary::BinEncoder;

let mut bytes: Vec<u8> = Vec::new();
{
  let mut encoder: BinEncoder = BinEncoder::new(&mut bytes);
  encoder.emit_character_data("abc");
}
assert_eq!(bytes, vec![3,b'a',b'b',b'c']);
Source

pub fn emit_character_data_unrestricted<S: AsRef<[u8]>>( &mut self, data: S, ) -> Result<(), ProtoError>

Emit character data of unrestricted length

Although character strings are typically restricted to being no longer than 255 characters, some modern standards allow longer strings to be encoded.

Source

pub fn emit_u8(&mut self, data: u8) -> Result<(), ProtoError>

Emit one byte into the buffer

Source

pub fn emit_u16(&mut self, data: u16) -> Result<(), ProtoError>

Writes a u16 in network byte order to the buffer

Source

pub fn emit_i32(&mut self, data: i32) -> Result<(), ProtoError>

Writes an i32 in network byte order to the buffer

Source

pub fn emit_u32(&mut self, data: u32) -> Result<(), ProtoError>

Writes an u32 in network byte order to the buffer

Source

pub fn emit_vec(&mut self, data: &[u8]) -> Result<(), ProtoError>

Writes the byte slice to the stream

Source

pub fn emit_all<'e, I: Iterator<Item = &'e E>, E: 'e + BinEncodable>( &mut self, iter: I, ) -> Result<usize, ProtoError>

Emits all the elements of an Iterator to the encoder

Source

pub fn emit_all_refs<'r, 'e, I, E>( &mut self, iter: I, ) -> Result<usize, ProtoError>
where I: Iterator<Item = &'r &'e E>, E: 'r + 'e + BinEncodable, 'e: 'r,

Emits all the elements of an Iterator to the encoder

Source

pub fn emit_iter<'e, I: Iterator<Item = &'e E>, E: 'e + BinEncodable>( &mut self, iter: &mut I, ) -> Result<usize, ProtoError>

emits all items in the iterator, return the number emitted

Source

pub fn place<T: EncodedSize>(&mut self) -> Result<Place<T>, ProtoError>

capture a location to write back to

Source

pub fn len_since_place<T: EncodedSize>(&self, place: &Place<T>) -> usize

calculates the length of data written since the place was creating

Source

pub fn emit_at<T: EncodedSize>( &mut self, place: Place<T>, data: T, ) -> Result<(), ProtoError>

write back to a previously captured location

Auto Trait Implementations§

§

impl<'a> Freeze for BinEncoder<'a>

§

impl<'a> RefUnwindSafe for BinEncoder<'a>

§

impl<'a> Send for BinEncoder<'a>

§

impl<'a> Sync for BinEncoder<'a>

§

impl<'a> Unpin for BinEncoder<'a>

§

impl<'a> !UnwindSafe for BinEncoder<'a>

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> 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<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
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T