From 6db4c4451d93f30ad79fa8a4079bf70064183e75 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 17 Aug 2021 00:49:05 +0100 Subject: [PATCH] server: reorganise setup, pass Global to route Signed-off-by: Ian Jackson --- src/bin/server.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 77a9617..1cc0660 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -16,13 +16,13 @@ pub struct Opts { const METADATA_MAX_LEN: usize = MAX_OVERHEAD; #[derive(Debug)] -struct Global { +pub struct Global { config: config::InstanceConfigGlobal, all_clients: HashMap, } #[derive(Debug)] -struct Client { +pub struct Client { ic: Arc, web: tokio::sync::mpsc::Sender, } @@ -55,7 +55,8 @@ struct WebResponse { type WebResponseData = Vec; #[throws(PacketError)] -pub fn route_packet(conn: &str, link: &dyn Display, +pub fn route_packet(_global: &Global, + conn: &str, link: &dyn Display, packet: Box<[u8]>, daddr: IpAddr) { // xxx @@ -259,7 +260,8 @@ async fn handle( #[allow(unused_variables)] // xxx #[allow(unused_mut)] // xxx -async fn run_client(ic: Arc, +async fn run_client(global: Arc, + ic: Arc, mut web: mpsc::Receiver) -> Result { @@ -384,7 +386,7 @@ async fn run_client(ic: Arc, let daddr = ip_packet_addr::(header)?; Ok(daddr) }, |(daddr,packet)| route_packet( - &conn, &ic.link.client, daddr,packet + &global, &conn, &ic.link.client, daddr,packet ), |e| Ok::<_,SlipFramesError<_>>({ warnings.add(&e)?; }) )?; @@ -443,21 +445,22 @@ async fn main() { }) }).collect(); + let global = Arc::new(Global { + config: global_config, + all_clients, + }); + for (ic, web_recv) in izip!( ics, client_handles_recv, ) { + let global_ = global.clone(); let ic_ = ic.clone(); tasks.push((tokio::spawn(async move { - run_client(ic_, web_recv).await.void_unwrap_err() + run_client(global_, ic_, web_recv).await.void_unwrap_err() }), format!("client {}", &ic))); } - let global = Arc::new(Global { - config: global_config, - all_clients, - }); - for addr in &global.config.addrs { let global_ = global.clone(); let make_service = hyper::service::make_service_fn( -- 2.30.2