}
async fn handle(
-// context: (),
-// addr: SocketAddr,
- req: hyper::Request<hyper::Body>
+ _all_clients: Arc<AllClients>,
+ req: hyper::Request<hyper::Body>
) -> Result<hyper::Response<hyper::Body>, Infallible> {
if req.method() == Method::GET {
let mut resp = hyper::Response::new(hyper::Body::from("hippotat\r\n"));
let client = str::from_utf8(client).context("client addr utf-8")?;
let client: IpAddr = client.parse().context("client address")?;
+
+
eprintln!("boundary={:?} start={} name={:?} client={}",
boundary, start, &comp.name, client);
let global = config::InstanceConfigGlobal::from(&ics);
let ipif = Ipif::start(&global.ipif, None)?;
- let _all_clients: AllClients = ics.into_iter().map(|ic| {
+ let all_clients: AllClients = ics.into_iter().map(|ic| {
let ic = Arc::new(ic);
let (web_send, web_recv) = mpsc::channel(
web: web_send,
})
}).collect();
-
- let make_service = hyper::service::make_service_fn(|_conn| async {
- Ok::<_, Infallible>(hyper::service::service_fn(handle))
- });
+ let all_clients = Arc::new(all_clients);
for addr in &global.addrs {
+ let all_clients_ = all_clients.clone();
+ let make_service = hyper::service::make_service_fn(
+ move |_conn| {
+ let all_clients_ = all_clients_.clone();
+ async move {
+ let all_clients_ = all_clients_.clone();
+ Ok::<_, Void>(hyper::service::service_fn(move |req| {
+ let all_clients_ = all_clients_.clone();
+ handle(all_clients_, req)
+ }))
+ }
+ }
+ );
+
let addr = SocketAddr::new(*addr, global.port);
let server = hyper::Server::try_bind(&addr)
.context("bind")?