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>
impl<B: SplitByteSlice> UdpPacket<B>
Sourcepub fn into_body(self) -> B
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.
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) -> NonZeroU16
pub fn dst_port(&self) -> NonZeroU16
The destination UDP port.
Sourcepub fn checksummed(&self) -> bool
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
.
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.
Sourcepub fn into_serializer<'a, A: IpAddress>(
self,
src_ip: A,
dst_ip: A,
) -> impl Serializer<Buffer = EmptyBuf> + Debug + 'awhere
B: 'a,
pub fn into_serializer<'a, A: IpAddress>(
self,
src_ip: A,
dst_ip: A,
) -> impl Serializer<Buffer = EmptyBuf> + Debug + 'awhere
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>
impl<B: SplitByteSliceMut> UdpPacket<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: SplitByteSlice, A: IpAddress> ParsablePacket<B, UdpParseArgs<A>> for UdpPacket<B>
impl<B: SplitByteSlice, A: IpAddress> ParsablePacket<B, UdpParseArgs<A>> for UdpPacket<B>
Source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse
]. Read more