pub struct TcpSegment<'a, T: 'a> { /* private fields */ }Expand description
Interprets the inner bytes as a TCP segment.
Implementations§
Source§impl<T: NetworkBytes + Debug> TcpSegment<'_, T>
impl<T: NetworkBytes + Debug> TcpSegment<'_, T>
Sourcepub fn source_port(&self) -> u16
pub fn source_port(&self) -> u16
Returns the source port.
Sourcepub fn destination_port(&self) -> u16
pub fn destination_port(&self) -> u16
Returns the destination port.
Sourcepub fn sequence_number(&self) -> u32
pub fn sequence_number(&self) -> u32
Returns the sequence number.
Sourcepub fn ack_number(&self) -> u32
pub fn ack_number(&self) -> u32
Returns the acknowledgement number (only valid if the ACK flag is set).
Sourcepub fn header_len_rsvd_ns(&self) -> (u8, u8, bool)
pub fn header_len_rsvd_ns(&self) -> (u8, u8, bool)
Returns the header length, the value of the reserved bits, and whether the NS flag
is set or not.
Sourcepub fn header_len(&self) -> u8
pub fn header_len(&self) -> u8
Returns the length of the header.
Sourcepub fn flags_after_ns(&self) -> Flags
pub fn flags_after_ns(&self) -> Flags
Returns the TCP header flags, with the exception of NS.
Sourcepub fn window_size(&self) -> u16
pub fn window_size(&self) -> u16
Returns the value of the window size header field.
Sourcepub fn urgent_pointer(&self) -> u16
pub fn urgent_pointer(&self) -> u16
Returns the value of the urgent pointer header field (only valid if the
URG flag is set).
Sourcepub fn options_unchecked(&self, header_len: usize) -> &[u8] ⓘ
pub fn options_unchecked(&self, header_len: usize) -> &[u8] ⓘ
Returns the TCP header options as an [&u8] slice.
§Panics
This method may panic if the value of header_len is invalid.
Sourcepub fn payload_unchecked(&self, header_len: usize) -> &[u8] ⓘ
pub fn payload_unchecked(&self, header_len: usize) -> &[u8] ⓘ
Returns a slice which contains the payload of the segment. May panic if the value of
header_len is invalid.
§Panics
This method may panic if the value of header_len is invalid.
Sourcepub fn payload_len(&self) -> u16
pub fn payload_len(&self) -> u16
Returns the length of the payload.
Sourcepub fn compute_checksum(&self, src_addr: Ipv4Addr, dst_addr: Ipv4Addr) -> u16
pub fn compute_checksum(&self, src_addr: Ipv4Addr, dst_addr: Ipv4Addr) -> u16
Computes the TCP checksum of the segment. More details about TCP checksum computation can be found here.
Sourcepub fn parse_mss_option_unchecked(
&self,
header_len: usize,
) -> Result<Option<NonZeroU16>, TcpError>
pub fn parse_mss_option_unchecked( &self, header_len: usize, ) -> Result<Option<NonZeroU16>, TcpError>
Parses TCP header options (only MSS is supported for now).
If no error is encountered, returns the MSS value, or None if the option is not
present.
§Panics
This method may panic if the value of header_len is invalid.
Sourcepub fn from_bytes_unchecked(bytes: T) -> Self
pub fn from_bytes_unchecked(bytes: T) -> Self
Interprets bytes as a TCP segment without any validity checks.
§Panics
This method does not panic, but further method calls on the resulting object may panic if
bytes contains invalid input.
Sourcepub fn from_bytes(
bytes: T,
verify_checksum: Option<(Ipv4Addr, Ipv4Addr)>,
) -> Result<Self, TcpError>
pub fn from_bytes( bytes: T, verify_checksum: Option<(Ipv4Addr, Ipv4Addr)>, ) -> Result<Self, TcpError>
Attempts to interpret bytes as a TCP segment, checking the validity of the header fields.
The verify_checksum parameter must contain the source and destination addresses from the
enclosing IPv4 packet if the TCP checksum must be validated.
Source§impl<T: NetworkBytesMut + Debug> TcpSegment<'_, T>
impl<T: NetworkBytesMut + Debug> TcpSegment<'_, T>
Sourcepub fn set_source_port(&mut self, value: u16) -> &mut Self
pub fn set_source_port(&mut self, value: u16) -> &mut Self
Sets the source port.
Sourcepub fn set_destination_port(&mut self, value: u16) -> &mut Self
pub fn set_destination_port(&mut self, value: u16) -> &mut Self
Sets the destination port.
Sourcepub fn set_sequence_number(&mut self, value: u32) -> &mut Self
pub fn set_sequence_number(&mut self, value: u32) -> &mut Self
Sets the value of the sequence number field.
Sourcepub fn set_ack_number(&mut self, value: u32) -> &mut Self
pub fn set_ack_number(&mut self, value: u32) -> &mut Self
Sets the value of the acknowledgement number field.
Sourcepub fn set_header_len_rsvd_ns(&mut self, header_len: u8, ns: bool) -> &mut Self
pub fn set_header_len_rsvd_ns(&mut self, header_len: u8, ns: bool) -> &mut Self
Sets the value of the ihl header field based on header_len (which should be a multiple
of 4), clears the reserved bits, and sets the NS flag according to the last parameter.
Sourcepub fn set_flags_after_ns(&mut self, flags: Flags) -> &mut Self
pub fn set_flags_after_ns(&mut self, flags: Flags) -> &mut Self
Sets the value of the header byte containing every TCP flag except NS.
Sourcepub fn set_window_size(&mut self, value: u16) -> &mut Self
pub fn set_window_size(&mut self, value: u16) -> &mut Self
Sets the value of the window size field.
Sourcepub fn set_checksum(&mut self, value: u16) -> &mut Self
pub fn set_checksum(&mut self, value: u16) -> &mut Self
Sets the value of the checksum field.
Sourcepub fn set_urgent_pointer(&mut self, value: u16) -> &mut Self
pub fn set_urgent_pointer(&mut self, value: u16) -> &mut Self
Sets the value of the urgent pointer field.
Sourcepub fn payload_mut_unchecked(&mut self, header_len: usize) -> &mut [u8] ⓘ
pub fn payload_mut_unchecked(&mut self, header_len: usize) -> &mut [u8] ⓘ
Returns a mutable slice containing the segment payload.
§Panics
This method may panic if the value of header_len is invalid.
Sourcepub fn payload_mut(&mut self) -> &mut [u8] ⓘ
pub fn payload_mut(&mut self) -> &mut [u8] ⓘ
Returns a mutable slice containing the segment payload.
Sourcepub fn write_segment<R: ByteBuffer + ?Sized + Debug>(
buf: T,
src_port: u16,
dst_port: u16,
seq_number: u32,
ack_number: u32,
flags_after_ns: Flags,
window_size: u16,
mss_option: Option<u16>,
mss_remaining: u16,
payload: Option<(&R, usize)>,
compute_checksum: Option<(Ipv4Addr, Ipv4Addr)>,
) -> Result<Self, TcpError>
pub fn write_segment<R: ByteBuffer + ?Sized + Debug>( buf: T, src_port: u16, dst_port: u16, seq_number: u32, ack_number: u32, flags_after_ns: Flags, window_size: u16, mss_option: Option<u16>, mss_remaining: u16, payload: Option<(&R, usize)>, compute_checksum: Option<(Ipv4Addr, Ipv4Addr)>, ) -> Result<Self, TcpError>
Writes a complete TCP segment.
§Arguments
buf- Write the segment to this buffer.src_port- Source port.dst_port- Destination port.seq_number- Sequence number.ack_number- Acknowledgement number.flags_after_ns- TCP flags to set (exceptNS, which is always set to 0).window_size- Value to write in thewindow sizefield.mss_option- When a value is specified, use it to add a TCP MSS option to the header.mss_remaining- Represents an upper bound on the payload length (the number of bytes used up by things like IP options have to be subtracted from the MSS). There is some redundancy looking at this argument and the next one, so we might end up removing or changing something.payload- May contain a buffer which holds payload data and the maximum amount of bytes we should read from that buffer. WhenNone, the TCP segment will carry no payload.compute_checksum- May contain the pair addresses from the enclosing IPv4 packet, which are required for TCP checksum computation. Skip the checksum altogether whenNone.
Sourcepub fn write_incomplete_segment<R: ByteBuffer + ?Sized + Debug>(
buf: T,
seq_number: u32,
ack_number: u32,
flags_after_ns: Flags,
window_size: u16,
mss_option: Option<u16>,
mss_remaining: u16,
payload: Option<(&R, usize)>,
) -> Result<Incomplete<Self>, TcpError>
pub fn write_incomplete_segment<R: ByteBuffer + ?Sized + Debug>( buf: T, seq_number: u32, ack_number: u32, flags_after_ns: Flags, window_size: u16, mss_option: Option<u16>, mss_remaining: u16, payload: Option<(&R, usize)>, ) -> Result<Incomplete<Self>, TcpError>
Writes an incomplete TCP segment, which is missing the source port, destination port,
and checksum fields.
This method writes the rest of the segment, including data (when available). Only the MSS
option is supported for now. The NS flag, URG flag, and urgent pointer field are set
to 0.
§Arguments
buf- Write the segment to this buffer.seq_number- Sequence number.ack_number- Acknowledgement number.flags_after_ns- TCP flags to set (exceptNS, which is always set to 0).window_size- Value to write in thewindow sizefield.mss_option- When a value is specified, use it to add a TCP MSS option to the header.mss_remaining- Represents an upper bound on the payload length (the number of bytes used up by things like IP options have to be subtracted from the MSS). There is some redundancy looking at this argument and the next one, so we might end up removing or changing something.payload- May contain a buffer which holds payload data and the maximum amount of bytes we should read from that buffer. WhenNone, the TCP segment will carry no payload.
Trait Implementations§
Auto Trait Implementations§
impl<'a, T> Freeze for TcpSegment<'a, T>where
T: Freeze,
impl<'a, T> RefUnwindSafe for TcpSegment<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Send for TcpSegment<'a, T>
impl<'a, T> Sync for TcpSegment<'a, T>where
T: Sync,
impl<'a, T> Unpin for TcpSegment<'a, T>where
T: Unpin,
impl<'a, T> UnwindSafe for TcpSegment<'a, T>where
T: UnwindSafe + RefUnwindSafe,
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.