From 210aa06ea8299e9e164e37f8506925e142b2d3fe Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 17 Aug 2021 00:25:15 +0100 Subject: [PATCH] server: reorg Global Signed-off-by: Ian Jackson --- src/bin/server.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 4b5fc52..8effeff 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -15,8 +15,13 @@ pub struct Opts { const METADATA_MAX_LEN: usize = MAX_OVERHEAD; -type AllClients = HashMap; +#[derive(Debug)] +struct Global { + config: config::InstanceConfigGlobal, + all_clients: HashMap, +} +#[derive(Debug)] struct ClientHandles { ic: Arc, web: tokio::sync::mpsc::Sender, @@ -60,7 +65,7 @@ pub fn route_packet(conn: &str, link: &dyn Display, async fn handle( conn: Arc, - all_clients: Arc, + global: Arc, req: hyper::Request ) -> Result, hyper::http::Error> { if req.method() == Method::GET { @@ -157,7 +162,7 @@ async fn handle( let hmac_got = &hmac_got[0..hmac_got_l]; let client_name = client; - let client = all_clients.get(&client_name); + let client = global.all_clients.get(&client_name); // We attempt to hide whether the client exists we don't try to // hide the hash lookup computationgs, but we do try to hide the @@ -416,10 +421,10 @@ async fn main() { "hippotatd", LinkEnd::Server, &opts.config, &opts.log, |ics| { - let global = config::InstanceConfigGlobal::from(&ics); - let ipif = Ipif::start(&global.ipif, None)?; + let global_config = config::InstanceConfigGlobal::from(&ics); + let ipif = Ipif::start(&global_config.ipif, None)?; - let all_clients: AllClients = ics.into_iter().map(|ic| { + let all_clients = ics.into_iter().map(|ic| { let ic = Arc::new(ic); let (web_send, web_recv) = mpsc::channel( @@ -438,21 +443,24 @@ async fn main() { web: web_send, }) }).collect(); - let all_clients = Arc::new(all_clients); + let global = Arc::new(Global { + config: global_config, + all_clients, + }); - for addr in &global.addrs { - let all_clients_ = all_clients.clone(); + for addr in &global.config.addrs { + let global_ = global.clone(); let make_service = hyper::service::make_service_fn( move |conn: &hyper::server::conn::AddrStream| { - let all_clients_ = all_clients_.clone(); + let global_ = global_.clone(); let conn = Arc::new(format!("[{}]", conn.remote_addr())); async { Ok::<_, Void>( hyper::service::service_fn(move |req| { - handle(conn.clone(), all_clients_.clone(), req) + handle(conn.clone(), global_.clone(), req) }) ) } } ); - let addr = SocketAddr::new(*addr, global.port); + let addr = SocketAddr::new(*addr, global.config.port); let server = hyper::Server::try_bind(&addr) .context("bind")? .http1_preserve_header_case(true) -- 2.30.2