packet_formats::udp

Struct UdpPacket

Source
pub struct UdpPacket<B> { /* private fields */ }
Expand description

A UDP packet.

A UdpPacket shares its underlying memory with the byte slice it was parsed from or serialized to, meaning that no copying or extra allocation is necessary.

A UdpPacket - whether parsed using parse or created using serialize - maintains the invariant that the checksum is always valid.

Implementations§

Source§

impl<B: SplitByteSlice> UdpPacket<B>

Source

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

The packet body.

Source

pub fn into_body(self) -> B

Consumes this packet and returns the body.

Note that the returned B has the same lifetime as the buffer from which this packet was parsed. By contrast, the body method returns a slice with the same lifetime as the receiver.

Source

pub fn src_port(&self) -> Option<NonZeroU16>

The source UDP port, if any.

The source port is optional, and may have been omitted by the sender.

Source

pub fn dst_port(&self) -> NonZeroU16

The destination UDP port.

Source

pub fn checksummed(&self) -> bool

Did this packet have a checksum?

On IPv4, the sender may optionally omit the checksum. If this function returns false, the sender omitted the checksum, and parse will not have validated it.

On IPv6, it is guaranteed that checksummed will return true because IPv6 requires a checksum, and so any UDP packet missing one will fail validation in parse.

Source

pub fn builder<A: IpAddress>(&self, src_ip: A, dst_ip: A) -> UdpPacketBuilder<A>

Constructs a builder with the same contents as this packet.

Source

pub fn into_serializer<'a, A: IpAddress>( self, src_ip: A, dst_ip: A, ) -> impl Serializer<Buffer = EmptyBuf> + Debug + 'a
where B: 'a,

Consumes this packet and constructs a [Serializer] with the same contents.

The returned Serializer has the Buffer type [EmptyBuf], which means it is not able to reuse the buffer backing this UdpPacket when serializing, and will always need to allocate a new buffer.

By consuming self instead of taking it by-reference, into_serializer is able to return a Serializer whose lifetime is restricted by the lifetime of the buffer from which this UdpPacket was parsed rather than by the lifetime on &self, which may be more restricted.

Source§

impl<B: SplitByteSliceMut> UdpPacket<B>

Source

pub fn set_src_port(&mut self, new: u16)

Set the source port of the UDP packet.

Source

pub fn set_dst_port(&mut self, new: NonZeroU16)

Set the destination port of the UDP packet.

Source

pub fn update_checksum_pseudo_header_address<A: IpAddress>( &mut self, old: A, new: A, )

Update the checksum to reflect an updated address in the pseudo header.

Trait Implementations§

Source§

impl<B: SplitByteSlice, A: IpAddress> FromRaw<UdpPacketRaw<B>, UdpParseArgs<A>> for UdpPacket<B>

Source§

type Error = ParseError

The type of error that may happen during validation.
Source§

fn try_from_raw_with( raw: UdpPacketRaw<B>, args: UdpParseArgs<A>, ) -> Result<Self, Self::Error>

Attempts to create Self from the raw form in raw with args.
Source§

impl<B: SplitByteSlice, A: IpAddress> ParsablePacket<B, UdpParseArgs<A>> for UdpPacket<B>

Source§

type Error = ParseError

The type of errors returned from parse and parse_mut.
Source§

fn parse_metadata(&self) -> ParseMetadata

Gets metadata about this packet required by [GrowBuffer::undo_parse]. Read more
Source§

fn parse<BV: BufferView<B>>( buffer: BV, args: UdpParseArgs<A>, ) -> ParseResult<Self>

Parses a packet from a buffer. Read more
§

fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>
where BV: BufferViewMut<B>, B: SplitByteSliceMut,

Parses a packet from a mutable buffer. Read more

Auto Trait Implementations§

§

impl<B> Freeze for UdpPacket<B>
where B: Freeze,

§

impl<B> RefUnwindSafe for UdpPacket<B>
where B: RefUnwindSafe,

§

impl<B> Send for UdpPacket<B>
where B: Send,

§

impl<B> Sync for UdpPacket<B>
where B: Sync,

§

impl<B> Unpin for UdpPacket<B>
where B: Unpin,

§

impl<B> UnwindSafe for UdpPacket<B>
where B: UnwindSafe,

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, 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.