chiark / gitweb /
slip: Make addr check be able to return a value, from checkn
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 23:41:50 +0000 (00:41 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 23:41:50 +0000 (00:41 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/slip.rs

index 2642e22760386e0858b2a58291d991fa32358785..10b207698e5c005e90afc7a3caa1d1a218e7c9c3 100644 (file)
@@ -282,7 +282,7 @@ async fn run_client<C:HCC>(
               let addr = ip_packet_addr::<true>(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(),
index 1282bf3bc1c45734d00e4c45e07fab063991b099..2d376a3ef54df6213fe5a76e49094a8a71fe31c0 100644 (file)
@@ -28,15 +28,15 @@ impl SlipMime for SlipNoConv { const CONV_TO: Option<bool> = None; }
 pub struct ErrorOnlyBad;
 
 #[throws(ErrorOnlyBad)]
-pub fn checkn<AC, EH, OUT, M: SlipMime+Copy>(
+pub fn checkn<AC, EH, OUT, ACR, M: SlipMime+Copy>(
   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<ACR, PacketError> + Copy,
+        OUT: FnMut((Box<[u8]>, ACR)) -> Result<(), PacketError>,
         EH: FnMut(PacketError),
 {
   //  eprintln!("before: {:?}", DumpHex(data));
@@ -47,8 +47,7 @@ pub fn checkn<AC, EH, OUT, M: SlipMime+Copy>(
     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>(())
     })() {