From: Ian Jackson Date: Sun, 15 Aug 2021 23:53:33 +0000 (+0100) Subject: server: wip recv X-Git-Tag: hippotat/1.0.0~150 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=commitdiff_plain;h=7acb1784a9324f7ba2c092953d3c489491ab66cf server: wip recv Signed-off-by: Ian Jackson --- diff --git a/src/bin/server.rs b/src/bin/server.rs index 4900e97..4a80704 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -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, req: hyper::Request @@ -338,7 +343,14 @@ async fn run_client(ic: Arc, 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::(header)?; + if saddr != ic.link.client.0 { throw!(PE::Src(saddr)) } + let daddr = ip_packet_addr::(header)?; + Ok(daddr) + }, |(daddr,packet)| route_packet(daddr,packet), + |e| { let _xxx = warnings.add(&e); } + )?; } let oi = OutstandingInner { diff --git a/src/slip.rs b/src/slip.rs index 2d376a3..955c36f 100644 --- a/src/slip.rs +++ b/src/slip.rs @@ -25,6 +25,8 @@ impl SlipMime for Mime2Slip { const CONV_TO: Option = Some(false); } impl SlipMime for SlipNoConv { const CONV_TO: Option = None; } #[derive(Debug)] +#[derive(Error)] +#[error("only bad IP datagrams")] pub struct ErrorOnlyBad; #[throws(ErrorOnlyBad)]