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>
impl<B: SplitByteSlice> UdpPacketRaw<B>
Sourcepub fn src_port(&self) -> Option<NonZeroU16>
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.
Sourcepub fn dst_port(&self) -> Option<NonZeroU16>
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.
Sourcepub fn builder<A: IpAddress>(&self, src_ip: A, dst_ip: A) -> UdpPacketBuilder<A>
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.
Sourcepub fn into_serializer<'a, A: IpAddress>(
self,
src_ip: A,
dst_ip: A,
) -> Option<impl Serializer<Buffer = EmptyBuf> + 'a>where
B: 'a,
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>
impl<B: SplitByteSliceMut> UdpPacketRaw<B>
Sourcepub fn set_src_port(&mut self, new: u16)
pub fn set_src_port(&mut self, new: u16)
Set the source port of the UDP packet.
Sourcepub fn set_dst_port(&mut self, new: NonZeroU16)
pub fn set_dst_port(&mut self, new: NonZeroU16)
Set the destination port of the UDP packet.
Sourcepub fn update_checksum_pseudo_header_address<A: IpAddress>(
&mut self,
old: A,
new: A,
)
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>
impl<B: SplitByteSlice, A: IpAddress> FromRaw<UdpPacketRaw<B>, UdpParseArgs<A>> for UdpPacket<B>
Source§type Error = ParseError
type Error = ParseError
Source§fn try_from_raw_with(
raw: UdpPacketRaw<B>,
args: UdpParseArgs<A>,
) -> Result<Self, Self::Error>
fn try_from_raw_with( raw: UdpPacketRaw<B>, args: UdpParseArgs<A>, ) -> Result<Self, Self::Error>
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,
impl<B, I> ParsablePacket<B, IpVersionMarker<I>> for UdpPacketRaw<B>where
B: SplitByteSlice,
I: Ip,
Source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse. Read moreSource§fn parse<BV: BufferView<B>>(
buffer: BV,
_args: IpVersionMarker<I>,
) -> ParseResult<Self>
fn parse<BV: BufferView<B>>( buffer: BV, _args: IpVersionMarker<I>, ) -> ParseResult<Self>
Source§fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>where
BV: BufferViewMut<B>,
B: SplitByteSliceMut,
fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>where
BV: BufferViewMut<B>,
B: SplitByteSliceMut,
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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