From: Ian Jackson Date: Sun, 15 Aug 2021 23:41:50 +0000 (+0100) Subject: slip: Make addr check be able to return a value, from checkn X-Git-Tag: hippotat/1.0.0~151 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=ef7d0fdd79e351a4f185f8dd406db65a236b0626;p=hippotat.git slip: Make addr check be able to return a value, from checkn Signed-off-by: Ian Jackson --- diff --git a/src/bin/client.rs b/src/bin/client.rs index 2642e22..10b2076 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -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 1282bf3..2d376a3 100644 --- a/src/slip.rs +++ b/src/slip.rs @@ -28,15 +28,15 @@ impl SlipMime for SlipNoConv { const CONV_TO: Option = None; } pub struct ErrorOnlyBad; #[throws(ErrorOnlyBad)] -pub fn checkn( +pub fn checkn( mime: M, mtu: u32, data: &[u8], addr_chk: AC, mut out: OUT, mut error_handler: EH -) where AC: Fn(&[u8]) -> Result<(), PacketError> + Copy, - OUT: FnMut(Box<[u8]>) -> Result<(), PacketError>, +) where AC: Fn(&[u8]) -> Result + Copy, + OUT: FnMut((Box<[u8]>, ACR)) -> Result<(), PacketError>, EH: FnMut(PacketError), { // eprintln!("before: {:?}", DumpHex(data)); @@ -47,8 +47,7 @@ pub fn checkn( match (||{ let checked = check1(mime, mtu, packet, addr_chk); if matches!(checked, Err(PacketError::Empty)) { return Ok::<_,PE>(()) } - let (packet, _acr) = checked?; - out(packet)?; + out(checked?)?; ok = true; Ok::<_,PE>(()) })() {