From d2122587075dc94427cf0219863128a78370ddd6 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Tue, 28 Apr 2026 22:44:58 +0700 Subject: [PATCH] feat(client): add specific warning kinds for dropped packets --- crates/irtt-client/src/client.rs | 5 ++++- crates/irtt-client/src/event.rs | 8 ++++++++ crates/irtt-client/src/lib.rs | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/irtt-client/src/client.rs b/crates/irtt-client/src/client.rs index a7e40bd..59e3326 100644 --- a/crates/irtt-client/src/client.rs +++ b/crates/irtt-client/src/client.rs @@ -15,7 +15,7 @@ use crate::{ error::ClientError, event::{ ClientEvent, OneWayDelaySample, OpenOutcome, PacketMeta, ReceivedStatsSample, RttSample, - ServerTiming, + ServerTiming, WarningKind, }, probe::{CompletedSet, PendingMap, PendingProbe}, session::{validate_negotiated_params, ActiveSession, ClientPhase, NegotiatedParams}, @@ -337,6 +337,7 @@ impl Client { Ok(reply) => reply, Err(_) => { return Ok(vec![ClientEvent::Warning { + kind: WarningKind::MalformedOrUnrelatedPacket, message: "dropped malformed or unrelated packet".to_owned(), }]); } @@ -348,6 +349,7 @@ impl Client { }; if reply.token != token { return Ok(vec![ClientEvent::Warning { + kind: WarningKind::WrongToken, message: format!( "dropped reply with wrong token: expected {token:#x}, got {:#x}", reply.token @@ -427,6 +429,7 @@ impl Client { }]) } else { Ok(vec![ClientEvent::Warning { + kind: WarningKind::UntrackedReply, message: format!( "dropped reply with untracked seq {wire_seq} (no pending or completed entry)" ), diff --git a/crates/irtt-client/src/event.rs b/crates/irtt-client/src/event.rs index 023653f..5a04b9c 100644 --- a/crates/irtt-client/src/event.rs +++ b/crates/irtt-client/src/event.rs @@ -77,10 +77,18 @@ pub enum ClientEvent { }, Warning { + kind: WarningKind, message: String, }, } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum WarningKind { + MalformedOrUnrelatedPacket, + WrongToken, + UntrackedReply, +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct RttSample { pub raw: Duration, diff --git a/crates/irtt-client/src/lib.rs b/crates/irtt-client/src/lib.rs index 3d3b05e..c0e3c75 100644 --- a/crates/irtt-client/src/lib.rs +++ b/crates/irtt-client/src/lib.rs @@ -14,7 +14,7 @@ pub use config::{ClientConfig, NegotiationPolicy, RecvBudget, RunMode, SocketCon pub use error::ClientError; pub use event::{ ClientEvent, OneWayDelaySample, OpenOutcome, PacketMeta, ReceivedStatsSample, RttSample, - ServerTiming, + ServerTiming, WarningKind, }; pub use session::NegotiatedParams; pub use timing::ClientTimestamp;