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