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 TCP 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 TCP 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 moreSource§fn parse<BV: BufferView<B>>(
buffer: BV,
args: TcpParseArgs<A>,
) -> ParseResult<Self>
fn parse<BV: BufferView<B>>( buffer: BV, args: TcpParseArgs<A>, ) -> 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 TcpSegment<B>where
B: Freeze,
impl<B> RefUnwindSafe for TcpSegment<B>where
B: RefUnwindSafe,
impl<B> Send for TcpSegment<B>where
B: Send,
impl<B> Sync for TcpSegment<B>where
B: Sync,
impl<B> Unpin for TcpSegment<B>where
B: Unpin,
impl<B> UnwindSafe for TcpSegment<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