From a9934a82dc03c998886a0a0c442d171a32ef81aa Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 16 Aug 2021 00:39:48 +0100 Subject: [PATCH] slip: Make addr check be able to return a value Signed-off-by: Ian Jackson --- src/bin/client.rs | 4 ++-- src/slip.rs | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/bin/client.rs b/src/bin/client.rs index d114ace..2642e22 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -234,7 +234,7 @@ async fn run_client( if saddr != ic.link.client.0 { throw!(PE::Src(saddr)) } Ok(()) }) { - Ok(data) => tx_queue.push_back(TxQueued { + Ok((data, ())) => tx_queue.push_back(TxQueued { data, expires: Instant::now() + ic.max_queue_time }), @@ -282,7 +282,7 @@ async fn run_client( let addr = ip_packet_addr::(header)?; if addr != ic.link.client.0 { throw!(PE::Dst(addr)) } Ok(()) - }, |o| Ok({ rx_queue.push(o) }), + }, |o| Ok({ rx_queue.push(o); }), |e| error!("{} #{}: rx discarding: {}", &ic, req_num, e)) { Ok(()) => reporter.lock().success(), diff --git a/src/slip.rs b/src/slip.rs index a382392..1282bf3 100644 --- a/src/slip.rs +++ b/src/slip.rs @@ -45,9 +45,10 @@ pub fn checkn( let mut err = false; for packet in data.split(|&c| c == SLIP_END) { match (||{ - let packet = check1(mime, mtu, packet, addr_chk); - if matches!(packet, Err(PacketError::Empty)) { return Ok::<_,PE>(()) } - out(packet?)?; + let checked = check1(mime, mtu, packet, addr_chk); + if matches!(checked, Err(PacketError::Empty)) { return Ok::<_,PE>(()) } + let (packet, _acr) = checked?; + out(packet)?; ok = true; Ok::<_,PE>(()) })() { @@ -60,13 +61,13 @@ pub fn checkn( } #[throws(PacketError)] -pub fn check1( +pub fn check1( _mime: M, mtu: u32, packet: &[u8], addr_chk: AC, -) -> Box<[u8]> -where AC: Fn(&[u8]) -> Result<(), PacketError>, +) -> (Box<[u8]>, ACR) +where AC: Fn(&[u8]) -> Result, { if packet.len() == 0 { throw!(PacketError::Empty) @@ -112,9 +113,9 @@ where AC: Fn(&[u8]) -> Result<(), PacketError>, throw!(PacketError::MTU { len: decoded_len, mtu }); } - addr_chk(&header)?; + let acr = addr_chk(&header)?; - packet + (packet, acr) } pub type Frame = Vec; -- 2.30.2