use std::{net::SocketAddr, time::Duration}; use crate::{session::NegotiatedParams, timing::ClientTimestamp}; #[derive(Debug, Clone, PartialEq, Eq)] pub enum OpenOutcome { Started { remote: SocketAddr, token: u64, negotiated: NegotiatedParams, event: ClientEvent, }, NoTestCompleted { remote: SocketAddr, negotiated: NegotiatedParams, event: ClientEvent, }, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum ClientEvent { SessionStarted { remote: SocketAddr, token: u64, negotiated: NegotiatedParams, at: ClientTimestamp, }, NoTestCompleted { remote: SocketAddr, negotiated: NegotiatedParams, at: ClientTimestamp, }, SessionClosed { remote: SocketAddr, token: u64, at: ClientTimestamp, }, EchoReply { seq: u32, logical_seq: u64, remote: SocketAddr, sent_at: ClientTimestamp, received_at: ClientTimestamp, rtt: RttSample, server_timing: Option, one_way: Option, received_stats: Option, packet_meta: PacketMeta, }, EchoLoss { seq: u32, logical_seq: u64, sent_at: ClientTimestamp, timeout_at: std::time::Instant, }, DuplicateReply { seq: u32, remote: SocketAddr, received_at: ClientTimestamp, }, LateReply { seq: u32, logical_seq: Option, highest_seen: u32, remote: SocketAddr, sent_at: Option, received_at: ClientTimestamp, rtt: Option, server_timing: Option, one_way: Option, received_stats: Option, packet_meta: PacketMeta, }, Warning { message: String, }, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct RttSample { pub raw: Duration, pub adjusted: Option, pub effective: Duration, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct ServerTiming { pub receive_wall_ns: Option, pub receive_mono_ns: Option, pub send_wall_ns: Option, pub send_mono_ns: Option, pub midpoint_wall_ns: Option, pub midpoint_mono_ns: Option, pub processing: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct OneWayDelaySample { pub client_to_server: Option, pub server_to_client: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct ReceivedStatsSample { pub count: Option, pub window: Option, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct PacketMeta { pub traffic_class: Option, pub dscp: Option, pub ecn: Option, pub kernel_rx_timestamp: Option, }