chiark / gitweb /
use slip::check1 on already-split frames
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 18:02:22 +0000 (19:02 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 18:02:22 +0000 (19:02 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/slip.rs

index a87c6d1ca89d12b9db70d466bd231ab152df519f..9e9981061edbd5e1bff2160a4b5ad3906ac8c032 100644 (file)
@@ -214,16 +214,17 @@ async fn run_client<C:HCC>(
             .ok_or_else(|| io::Error::from(io::ErrorKind::UnexpectedEof))?;
           //eprintln!("data={:?}", DumpHex(&data));
 
-          check
-            ::<_,_,_,Slip2Mime>(ic.mtu, &data, &mut packets, |header| {
+          match check1
+            ::<_,Slip2Mime>(ic.mtu, &data, |header| {
               let addr = ip_packet_addr::<false>(header)?;
               if addr != ic.link.client.0 { throw!(PE::Src(addr)) }
               Ok(())
-            }, |e| match e {
-              PE::Empty => { },
-              e@ PE::Src(_) => debug!("{}: tx discarding: {}", &ic, e),
-              e => error!("{}: tx discarding: {}", &ic, e),
-            });
+            }) {
+              Ok(packet) => packets.push_back(packet),
+              Err(PE::Empty) => { },
+              Err(e@ PE::Src(_)) => debug!("{}: tx discarding: {}", &ic, e),
+              Err(e) => error!("{}: tx discarding: {}", &ic, e),
+            };
         },
 
         _ = async { },
@@ -256,7 +257,7 @@ async fn run_client<C:HCC>(
 
           if let Some(got) = got {
             //eprintln!("got={:?}", DumpHex(&got));
-            check
+            checkn
               ::<_,_,_,SlipNoConv>(ic.mtu, &got, &mut rx_queue, |header| {
                 let addr = ip_packet_addr::<true>(header)?;
                 if addr != ic.link.client.0 { throw!(PE::Dst(addr)) }
index b179f540dc9df8d149040b714138d7f402fe1471..2f7ba8826e8f2a619d79d6bb576e5824ae0c3078 100644 (file)
@@ -24,7 +24,7 @@ impl SlipMime for Slip2Mime { const CONV_TO: Option<bool> = Some(true); }
 impl SlipMime for Mime2Slip { const CONV_TO: Option<bool> = Some(false); }
 impl SlipMime for SlipNoConv { const CONV_TO: Option<bool> = None; }
 
-pub fn check<AC, EH, OUT, M: SlipMime>(
+pub fn checkn<AC, EH, OUT, M: SlipMime>(
   mtu: u32,
   data: &[u8],
   out: &mut OUT,