pub struct TcpSegment<B> { /* private fields */ }
Expand description
A TCP segment.
A TcpSegment
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 TcpSegment
- whether parsed using parse
or created using
TcpSegmentBuilder
- maintains the invariant that the checksum is always
valid.
Implementations§
Source§impl<B: SplitByteSlice> TcpSegment<B>
impl<B: SplitByteSlice> TcpSegment<B>
Sourcepub fn iter_options(
&self,
) -> impl Iterator<Item = TcpOption<'_>> + Debug + Clone
pub fn iter_options( &self, ) -> impl Iterator<Item = TcpOption<'_>> + Debug + Clone
Iterate over the TCP header options.
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 segment was parsed. By contrast, the body
method returns
a slice with the same lifetime as the receiver.
Sourcepub fn src_port(&self) -> NonZeroU16
pub fn src_port(&self) -> NonZeroU16
The source port.
Sourcepub fn dst_port(&self) -> NonZeroU16
pub fn dst_port(&self) -> NonZeroU16
The destination port.
Sourcepub fn ack_num(&self) -> Option<u32>
pub fn ack_num(&self) -> Option<u32>
The acknowledgement number.
If the ACK flag is not set, ack_num
returns None
.
Sourcepub fn window_size(&self) -> u16
pub fn window_size(&self) -> u16
The sender’s window size.
Sourcepub fn header_len(&self) -> usize
pub fn header_len(&self) -> usize
The length of the header prefix and options.
Sourcepub fn builder<A: IpAddress>(
&self,
src_ip: A,
dst_ip: A,
) -> TcpSegmentBuilderWithOptions<A, ArrayVec<u8, MAX_OPTIONS_LEN>>
pub fn builder<A: IpAddress>( &self, src_ip: A, dst_ip: A, ) -> TcpSegmentBuilderWithOptions<A, ArrayVec<u8, MAX_OPTIONS_LEN>>
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 segment 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 TcpSegment
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 TcpSegment
was parsed rather
than by the lifetime on &self
, which may be more restricted.
Source§impl<B: SplitByteSliceMut> TcpSegment<B>
impl<B: SplitByteSliceMut> TcpSegment<B>
Sourcepub fn set_src_port(&mut self, new: NonZeroU16)
pub fn set_src_port(&mut self, new: NonZeroU16)
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<TcpSegmentRaw<B>, TcpParseArgs<A>> for TcpSegment<B>
impl<B: SplitByteSlice, A: IpAddress> FromRaw<TcpSegmentRaw<B>, TcpParseArgs<A>> for TcpSegment<B>
Source§type Error = ParseError
type Error = ParseError
Source§fn try_from_raw_with(
raw: TcpSegmentRaw<B>,
args: TcpParseArgs<A>,
) -> Result<Self, Self::Error>
fn try_from_raw_with( raw: TcpSegmentRaw<B>, args: TcpParseArgs<A>, ) -> Result<Self, Self::Error>
Self
from the raw form in raw
with args
.Source§impl<B: SplitByteSlice, A: IpAddress> ParsablePacket<B, TcpParseArgs<A>> for TcpSegment<B>
impl<B: SplitByteSlice, A: IpAddress> ParsablePacket<B, TcpParseArgs<A>> for TcpSegment<B>
Source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse
]. Read more