Struct packet_formats::tcp::TcpSegment
source · 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: ByteSlice> TcpSegment<B>
impl<B: ByteSlice> 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.
Trait Implementations§
source§impl<B: ByteSlice, A: IpAddress> FromRaw<TcpSegmentRaw<B>, TcpParseArgs<A>> for TcpSegment<B>
impl<B: ByteSlice, A: IpAddress> FromRaw<TcpSegmentRaw<B>, TcpParseArgs<A>> for TcpSegment<B>
§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: ByteSlice, A: IpAddress> ParsablePacket<B, TcpParseArgs<A>> for TcpSegment<B>
impl<B: ByteSlice, A: IpAddress> ParsablePacket<B, TcpParseArgs<A>> for TcpSegment<B>
§type Error = ParseError
type Error = ParseError
source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse
]. Read more