crafter 0.3.1

Packet-level network interaction for Rust tools and agents.
Documentation
//! TCP protocol implementation.

mod constants;
mod decode;
mod flags;
mod option;
mod segment;
mod sizing;

pub use self::constants::{
    IPV4_HEADER_LEN_FOR_MSS, IPV6_HEADER_LEN_FOR_MSS, IPV6_MINIMUM_MTU, TCP_DEFAULT_IPV4_MSS,
    TCP_FIXED_HEADER_LEN, TCP_MAX_OPTION_BYTES,
};
pub use self::constants::{
    MPTCP_SUBTYPE_ADD_ADDR, MPTCP_SUBTYPE_DSS, MPTCP_SUBTYPE_MP_CAPABLE,
    MPTCP_SUBTYPE_MP_EXPERIMENTAL, MPTCP_SUBTYPE_MP_FAIL, MPTCP_SUBTYPE_MP_FASTCLOSE,
    MPTCP_SUBTYPE_MP_JOIN, MPTCP_SUBTYPE_MP_PRIO, MPTCP_SUBTYPE_REMOVE_ADDR, MPTCP_SUBTYPE_TCPRST,
    MPTCP_TCPRST_REASON_ADMINISTRATIVELY_PROHIBITED, MPTCP_TCPRST_REASON_LACK_OF_RESOURCES,
    MPTCP_TCPRST_REASON_MIDDLEBOX_INTERFERENCE, MPTCP_TCPRST_REASON_MPTCP_SPECIFIC,
    MPTCP_TCPRST_REASON_TOO_MUCH_OUTSTANDING_DATA, MPTCP_TCPRST_REASON_UNACCEPTABLE_PERFORMANCE,
    MPTCP_TCPRST_REASON_UNSPECIFIED, TCP_EDO_HEADER_AND_SEGMENT_LEN, TCP_EDO_HEADER_LEN,
    TCP_EDO_REQUEST_LEN, TCP_OPTION_ACCURATE_ECN_MIN_LEN, TCP_OPTION_ACCURATE_ECN_ORDER_0,
    TCP_OPTION_ACCURATE_ECN_ORDER_1, TCP_OPTION_EDO, TCP_OPTION_EOL, TCP_OPTION_EXPERIMENTAL_1,
    TCP_OPTION_EXPERIMENTAL_2, TCP_OPTION_EXPERIMENTAL_MIN_LEN, TCP_OPTION_FAST_OPEN,
    TCP_OPTION_MD5_SIGNATURE, TCP_OPTION_MPTCP, TCP_OPTION_MSS, TCP_OPTION_NOP, TCP_OPTION_SACK,
    TCP_OPTION_SACK_PERMITTED, TCP_OPTION_TCP_AUTHENTICATION,
    TCP_OPTION_TCP_AUTHENTICATION_MIN_LEN, TCP_OPTION_TCP_ENO, TCP_OPTION_TCP_ENO_MIN_LEN,
    TCP_OPTION_TIMESTAMP, TCP_OPTION_USER_TIMEOUT, TCP_OPTION_USER_TIMEOUT_LEN,
    TCP_OPTION_WINDOW_SCALE, TCP_WINDOW_SCALE_MAX_SHIFT,
};
pub(crate) use self::decode::append_tcp_packet_with_registry;
pub use self::flags::{
    TCP_FLAG_ACK, TCP_FLAG_AE, TCP_FLAG_CWR, TCP_FLAG_ECE, TCP_FLAG_FIN, TCP_FLAG_NS, TCP_FLAG_PSH,
    TCP_FLAG_RST, TCP_FLAG_SYN, TCP_FLAG_URG,
};
pub use self::option::{
    tcp_option_kind_class, tcp_option_kind_is_assigned, tcp_option_kind_is_experimental,
    tcp_option_kind_name, valid_window_scale, TcpExtendedDataOffset, TcpOption, TcpOptionIter,
    TcpOptionKindClass, TcpSackBlock, TcpSynOptions,
};
pub use self::segment::Tcp;
pub use self::sizing::{
    effective_mss, effective_mss_ipv4, effective_mss_ipv6, has_fin, has_syn, max_tcp_payload,
    option_budget, remaining_option_budget, sequence_space_len, tcp_header_len, TcpOptionBudget,
};

#[cfg(test)]
mod tests;