X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=server%2Fserver.rs;h=cfceef6e2783ca7913285b1de42169aa49186392;hb=346a69ffd05f2794710be4ff17346cbe91dbb505;hp=b8cedaf9e8cf457597deb5ac2cfe934a22970a68;hpb=acfc31a83be21d4ab86f25e33bf83af648e65edb;p=hippotat.git diff --git a/server/server.rs b/server/server.rs index b8cedaf..cfceef6 100644 --- a/server/server.rs +++ b/server/server.rs @@ -30,18 +30,29 @@ pub struct Global { all_clients: HashMap, } -pub type RoutedPacket = Box<[u8]>; // not MIME data +pub struct RoutedPacket { + pub data: RoutedPacketData, + pub source: Option, // for eh, tracing, etc. +} + +// not MIME data, valid SLIP (checked) +pub type RoutedPacketData = Box<[u8]>; #[throws(PacketError)] pub async fn route_packet(global: &Global, - conn: &str, link: &(dyn Display + Sync), - packet: RoutedPacket, daddr: IpAddr) + conn: &str, source: Option<&ClientName>, + packet: RoutedPacketData, daddr: IpAddr) { let c = &global.config; let len = packet.len(); let trace = |how: &str, why: &str| { trace!("{} {} {} {} {:?} len={}", - conn, link, how, why, daddr, len); + conn, + match source { + Some(s) => (s as &dyn Display), + None => &"local", + }, + how, why, daddr, len); }; let (dest, why) = @@ -59,6 +70,10 @@ pub async fn route_packet(global: &Global, trace("discard", why); return; }; + let packet = RoutedPacket { + data: packet, + source: source.cloned(), + }; match dest.send(packet).await { Ok(()) => trace("forward", why), Err(_) => trace("task-crashed!", why),