From c7764f8d4ea4b03b7f87888cc6ee199110efcc3c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 21 Aug 2021 21:55:02 +0100 Subject: [PATCH] wip server ipif Signed-off-by: Ian Jackson --- server/server.rs | 21 ++++++++++++++++----- server/slocal.rs | 21 +++++++++++++++++---- server/suser.rs | 2 ++ 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/server/server.rs b/server/server.rs index 5da413c..b8cedaf 100644 --- a/server/server.rs +++ b/server/server.rs @@ -26,6 +26,7 @@ pub const INTERNAL_QUEUE: usize = 15; // xxx: config #[derive(Debug)] pub struct Global { config: config::InstanceConfigGlobal, + local_rx: mpsc::Sender, all_clients: HashMap, } @@ -72,7 +73,7 @@ async fn main() { String, )> = vec![]; - let (global, ipif) = config::startup( + let global = config::startup( "hippotatd", LinkEnd::Server, &opts.config, &opts.log, |ics| { @@ -105,8 +106,13 @@ async fn main() { }) }).collect(); + let (local_rx_send, local_tx_recv) = mpsc::channel( + 50 // xxx configurable? + ); + let global = Arc::new(Global { config: global_config, + local_rx: local_rx_send, all_clients, }); @@ -148,8 +154,15 @@ async fn main() { }); tasks.push((task, format!("http server {}", addr))); } - - Ok((global, ipif)) + + let global_ = global.clone(); + let ipif = tokio::task::spawn(async move { + slocal::run(global_, local_tx_recv, ipif).await + .void_unwrap_err() + }); + tasks.push((ipif, format!("ipif"))); + + Ok(global) }); let died = future::select_all( @@ -157,7 +170,5 @@ async fn main() { ).await; error!("xxx {:?}", &died); - ipif.quitting(None).await; - dbg!(global); } diff --git a/server/slocal.rs b/server/slocal.rs index 919c338..374849b 100644 --- a/server/slocal.rs +++ b/server/slocal.rs @@ -5,8 +5,21 @@ use super::*; #[allow(dead_code)] // xxx -#[throws(PacketError)] -pub async fn run(_global: &Global, - _rx: mpsc::Receiver) { - +#[allow(unused_variables)] // xxx +pub async fn run(global: Arc, + rx: mpsc::Receiver, + mut ipif: Ipif) -> Result { + let r = async { + loop { + select!{ + data = ipif.tx.next_segment() => + { + let data = data.context("read from ipif")?; + } + } + } + }.await; + + ipif.quitting(None).await; + r } diff --git a/server/suser.rs b/server/suser.rs index acae5dc..dc4358b 100644 --- a/server/suser.rs +++ b/server/suser.rs @@ -59,6 +59,8 @@ pub async fn run(global: Arc, } select!{ + biased; + req = web.recv() => { let WebRequest { -- 2.30.2