chiark / gitweb /
pass SlipMime also as value
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 18:04:37 +0000 (19:04 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 3 Aug 2021 18:04:37 +0000 (19:04 +0100)
Reduces type clutter

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/client.rs
src/slip.rs

index 9e9981061edbd5e1bff2160a4b5ad3906ac8c032..46d86095ad6fd40861850a0dba777e42d844257d 100644 (file)
@@ -214,17 +214,16 @@ async fn run_client<C:HCC>(
             .ok_or_else(|| io::Error::from(io::ErrorKind::UnexpectedEof))?;
           //eprintln!("data={:?}", DumpHex(&data));
 
-          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(())
-            }) {
-              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),
-            };
+          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(())
+          }) {
+            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 { },
@@ -257,12 +256,11 @@ async fn run_client<C:HCC>(
 
           if let Some(got) = got {
             //eprintln!("got={:?}", DumpHex(&got));
-            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)) }
-                Ok(())
-              }, |e| error!("{} #{}: rx discarding: {}", &ic, req_num, e));
+            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)) }
+              Ok(())
+            }, |e| error!("{} #{}: rx discarding: {}", &ic, req_num, e));
           
             dbg!(&rx_queue.len());
             rx_queue = default(); // xxx
index 2f7ba8826e8f2a619d79d6bb576e5824ae0c3078..ad6254ddf22b7990d1cf038d9a3a45e02378c4d5 100644 (file)
@@ -24,7 +24,8 @@ 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 checkn<AC, EH, OUT, M: SlipMime>(
+pub fn checkn<AC, EH, OUT, M: SlipMime+Copy>(
+  mime: M,
   mtu: u32,
   data: &[u8],
   out: &mut OUT,
@@ -36,7 +37,7 @@ pub fn checkn<AC, EH, OUT, M: SlipMime>(
 {
 //  eprintln!("before: {:?}", DumpHex(data));
   for packet in data.split(|&c| c == SLIP_END) {
-    match check1::<AC,M>(mtu, packet, addr_chk) {
+    match check1(mime, mtu, packet, addr_chk) {
       Err(e) => error_handler(e),
       Ok(packet) => out.extend(iter::once(packet)),
     }
@@ -46,6 +47,7 @@ pub fn checkn<AC, EH, OUT, M: SlipMime>(
 
 #[throws(PacketError)]
 pub fn check1<AC, M: SlipMime>(
+  _mime: M,
   mtu: u32,
   packet: &[u8],
   addr_chk: AC,