diff --git a/src/serve.rs b/src/serve.rs index 6d218e2..cb36ba4 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -1,9 +1,11 @@ +use std::net::SocketAddr; use std::sync::Mutex; use clap::{App, Arg, ArgMatches, SubCommand}; use hyper::{Body, Client, Method, Request, Response, Server, StatusCode}; use hyper::body::Buf; use hyper::client::HttpConnector; +use hyper::server::conn::AddrStream; use hyper::service::{make_service_fn, service_fn}; use josekit::jwk::alg::rsa::RsaKeyPair; use josekit::jwk::KeyPair; @@ -45,11 +47,12 @@ impl Command for CommandImpl { rt.block_on(async { let addr = listen.parse().expect(&format!("Parse listen error: {}", listen)); let client = Client::new(); - let new_service = make_service_fn(move |_| { + let new_service = make_service_fn(move |conn: &AddrStream| { + let remote_addr = conn.remote_addr(); let client = client.clone(); - async { + async move { Ok::<_, GenericError>(service_fn(move |req| { - response_requests(req, client.to_owned()) + response_requests(remote_addr, req, client.to_owned()) })) } }); @@ -67,9 +70,11 @@ impl Command for CommandImpl { // ref: https://github.com/hyperium/hyper/blob/master/examples/web_api.rs // ref: https://crates.io/crates/rusqlite async fn response_requests( + remote_addr: SocketAddr, req: Request, _client: Client, ) -> Result> { + information!("Receive request: {}, from: {}", req.uri(), remote_addr); match (req.method(), req.uri().path()) { (&Method::POST, "/init") => init(req).await, (&Method::POST, "/update") => update().await,