chiark / gitweb /
server: wip recv
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 23:53:33 +0000 (00:53 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 15 Aug 2021 23:53:33 +0000 (00:53 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/server.rs
src/slip.rs

index 4900e9778559d546035082cad82a1de1798786e2..4a8070481f77e815a776f20863152265b9120adb 100644 (file)
@@ -48,6 +48,11 @@ struct WebResponse {
 
 type WebResponseData = ();
 
+#[throws(PacketError)]
+pub fn route_packet(packet: Box<[u8]>, daddr: IpAddr) {
+  trace!("xxx discarding packet daddr={:?} len={}", daddr, packet.len());
+}
+
 async fn handle(
   all_clients: Arc<AllClients>,
   req: hyper::Request<hyper::Body>
@@ -338,7 +343,14 @@ async fn run_client(ic: Arc<InstanceConfig>,
             if comp.name != PartName::d {
               warnings.add(&format_args!("unexpected part {:?}", comp.name))?;
             }
-            dbg!(comp.name, DumpHex(comp.payload));
+            checkn(Mime2Slip, mtu, comp.payload, |header| {
+              let saddr = ip_packet_addr::<false>(header)?;
+              if saddr != ic.link.client.0 { throw!(PE::Src(saddr)) }
+              let daddr = ip_packet_addr::<true>(header)?;
+              Ok(daddr)
+            }, |(daddr,packet)| route_packet(daddr,packet),
+               |e| { let _xxx = warnings.add(&e); }
+            )?;
           }
 
           let oi = OutstandingInner {
index 2d376a3ef54df6213fe5a76e49094a8a71fe31c0..955c36f624dddd027e0798fe2e7c04947af1d480 100644 (file)
@@ -25,6 +25,8 @@ impl SlipMime for Mime2Slip { const CONV_TO: Option<bool> = Some(false); }
 impl SlipMime for SlipNoConv { const CONV_TO: Option<bool> = None; }
 
 #[derive(Debug)]
+#[derive(Error)]
+#[error("only bad IP datagrams")]
 pub struct ErrorOnlyBad;
 
 #[throws(ErrorOnlyBad)]