TcpSegment

Struct 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: SplitByteSlice> TcpSegment<B>

Source

pub fn iter_options( &self, ) -> impl Iterator<Item = TcpOption<'_>> + Debug + Clone

Iterate over the TCP header options.

Source

pub fn body(&self) -> &[u8]

The segment body.

Source

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.

Source

pub fn src_port(&self) -> NonZeroU16

The source port.

Source

pub fn dst_port(&self) -> NonZeroU16

The destination port.

Source

pub fn seq_num(&self) -> u32

The sequence number.

Source

pub fn ack_num(&self) -> Option<u32>

The acknowledgement number.

If the ACK flag is not set, ack_num returns None.

Source

pub fn psh(&self) -> bool

The PSH flag.

Source

pub fn rst(&self) -> bool

The RST flag.

Source

pub fn syn(&self) -> bool

The SYN flag.

Source

pub fn fin(&self) -> bool

The FIN flag.

Source

pub fn window_size(&self) -> u16

The sender’s window size.

Source

pub fn header_len(&self) -> usize

The length of the header prefix and options.

Source

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.

Source

pub fn as_bytes(&self) -> [&[u8]; 3]

Returns packet headers and the body as a list of slices.

Source

pub fn into_serializer<'a, A: IpAddress>( self, src_ip: A, dst_ip: A, ) -> impl Serializer<Buffer = EmptyBuf> + Debug + 'a
where 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>

Source

pub fn set_src_port(&mut self, new: NonZeroU16)

Set the source port of the TCP packet.

Source

pub fn set_dst_port(&mut self, new: NonZeroU16)

Set the destination port of the TCP packet.

Source

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>

Source§

type Error = ParseError

The type of error that may happen during validation.
Source§

fn try_from_raw_with( raw: TcpSegmentRaw<B>, args: TcpParseArgs<A>, ) -> Result<Self, Self::Error>

Attempts to create Self from the raw form in raw with args.
Source§

impl<B: SplitByteSlice, A: IpAddress> ParsablePacket<B, TcpParseArgs<A>> for TcpSegment<B>

Source§

type Error = ParseError

The type of errors returned from parse and parse_mut.
Source§

fn parse_metadata(&self) -> ParseMetadata

Gets metadata about this packet required by GrowBuffer::undo_parse. Read more
Source§

fn parse<BV: BufferView<B>>( buffer: BV, args: TcpParseArgs<A>, ) -> ParseResult<Self>

Parses a packet from a buffer. Read more
Source§

fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>

Parses a packet from a mutable buffer. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.