Struct UdpPacketRaw

Source
pub struct UdpPacketRaw<B: SplitByteSlice> { /* private fields */ }
Expand description

A partially-parsed and not yet validated UDP packet.

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

Parsing a UdpPacketRaw from raw data will succeed as long as at least 4 bytes are available, which will be extracted as a [UdpFlowHeader] that contains the UDP source and destination ports. A UdpPacketRaw is, then, guaranteed to always have at least that minimal information available.

UdpPacket provides a FromRaw implementation that can be used to validate a UdpPacketRaw.

Implementations§

Source§

impl<B: SplitByteSlice> UdpPacketRaw<B>

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) -> Option<NonZeroU16>

The destination UDP port.

UDP packets must not have a destination port of 0; thus, if this function returns None, then the packet is malformed.

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.

Note that, since UdpPacketRaw does not validate its header fields, it’s possible for builder to produce a UdpPacketBuilder which describes an invalid UDP packet. In particular, it’s possible that its destination port will be zero, which is illegal.

Source

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

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

Returns None if the body was not fully parsed.

This method has the same validity caveats as builder.

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> UdpPacketRaw<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, I> ParsablePacket<B, IpVersionMarker<I>> for UdpPacketRaw<B>
where B: SplitByteSlice, I: Ip,

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: IpVersionMarker<I>, ) -> ParseResult<Self>

Parses a packet from a buffer. Read more
Source§

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

Parses a packet from a mutable buffer. Read more

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

impl<B> UnwindSafe for UdpPacketRaw<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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. 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.