chiark / gitweb /
change type of route_packet etc.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 21 Aug 2021 23:10:24 +0000 (00:10 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 21 Aug 2021 23:10:24 +0000 (00:10 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
server/server.rs
server/suser.rs

index b8cedaf9e8cf457597deb5ac2cfe934a22970a68..cfceef6e2783ca7913285b1de42169aa49186392 100644 (file)
@@ -30,18 +30,29 @@ pub struct Global {
   all_clients: HashMap<ClientName, User>,
 }
 
-pub type RoutedPacket = Box<[u8]>; // not MIME data
+pub struct RoutedPacket {
+  pub data: RoutedPacketData,
+  pub source: Option<ClientName>, // 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),
index dc4358b3371918b27cb946468528a513346d0e57..dec1a5aacd4cce857193fcc1cbe80afe224f48da 100644 (file)
@@ -142,7 +142,7 @@ pub async fn run(global: Arc<Global>,
               let daddr = ip_packet_addr::<true>(header)?;
               Ok(daddr)
             }, |(daddr,packet)| route_packet(
-              &global, &conn, &ic.link.client, daddr,packet
+              &global, &conn, Some(&ic.link.client), daddr,packet
             ),
               |e| Ok::<_,SlipFramesError<_>>({ warnings.add(&e)?; })
             ).await?;