From a0a5cb22ecf4c1760a3eadaea5ed2c0a55aa62c7 Mon Sep 17 00:00:00 2001 From: diogo464 Date: Tue, 17 Feb 2026 14:47:15 +0000 Subject: add wireguard-show binary and optional handshake timestamps --- src/view.rs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/view.rs b/src/view.rs index c0bd807..666f5d4 100644 --- a/src/view.rs +++ b/src/view.rs @@ -28,7 +28,7 @@ pub struct PeerView { pub preshared_key: Option, pub endpoint: Option, pub persistent_keepalive: Option, - pub last_handshake: SystemTime, + pub last_handshake: Option, pub rx_bytes: u64, pub tx_bytes: u64, pub allowed_ips: Vec, @@ -103,20 +103,33 @@ fn peer_from_wg_peer(wg_peer: WireguardPeer) -> Result { } } + let last_handshake = last_handshake.ok_or_else(|| Error::message("missing last_handshake"))?; + let rx_bytes = rx_bytes.ok_or_else(|| Error::message("missing rx_bytes"))?; + let tx_bytes = tx_bytes.ok_or_else(|| Error::message("missing tx_bytes"))?; + + let handshake_is_zero = last_handshake.seconds == 0 && last_handshake.nano_seconds == 0; + let last_handshake = if handshake_is_zero && (rx_bytes == 0 || tx_bytes == 0) { + None + } else { + let duration = Duration::new( + last_handshake.seconds as u64, + last_handshake.nano_seconds as u32, + ); + Some( + SystemTime::UNIX_EPOCH + .checked_add(duration) + .ok_or_else(|| Error::message("invalid last_handshake"))?, + ) + }; + Ok(PeerView { public_key: public_key.ok_or_else(|| Error::message("missing public_key"))?, preshared_key, endpoint, persistent_keepalive, - last_handshake: last_handshake - .map(|ts| { - SystemTime::UNIX_EPOCH - .checked_add(Duration::new(ts.seconds as u64, ts.nano_seconds as u32)) - .unwrap() - }) - .ok_or_else(|| Error::message("missing last_handshake"))?, - rx_bytes: rx_bytes.ok_or_else(|| Error::message("missing rx_bytes"))?, - tx_bytes: tx_bytes.ok_or_else(|| Error::message("missing tx_bytes"))?, + last_handshake, + rx_bytes, + tx_bytes, allowed_ips, }) } -- cgit