diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/context/error.rs | 12 | ||||
| -rw-r--r-- | src/context/hook.rs | 11 | ||||
| -rw-r--r-- | src/context/route.rs | 11 | ||||
| -rw-r--r-- | src/router.rs | 10 |
4 files changed, 31 insertions, 13 deletions
diff --git a/src/context/error.rs b/src/context/error.rs index 7e02b1a..3540a45 100644 --- a/src/context/error.rs +++ b/src/context/error.rs @@ -22,14 +22,20 @@ use url::Url; #[allow(clippy::module_name_repetitions)] #[derive(Clone)] pub struct ErrorContext { - pub url: Url, - pub certificate: Option<X509>, + pub peer_address: Option<std::net::SocketAddr>, + pub url: Url, + pub certificate: Option<X509>, } impl ErrorContext { #[must_use] - pub const fn new(url: Url, certificate: Option<X509>) -> Self { + pub fn new( + peer_address: std::io::Result<std::net::SocketAddr>, + url: Url, + certificate: Option<X509>, + ) -> Self { Self { + peer_address: peer_address.ok(), url, certificate, } diff --git a/src/context/hook.rs b/src/context/hook.rs index 94a6908..6a4fe72 100644 --- a/src/context/hook.rs +++ b/src/context/hook.rs @@ -23,19 +23,22 @@ use url::Url; #[allow(clippy::module_name_repetitions)] #[derive(Clone)] pub struct HookContext<'a> { - pub url: Url, - pub params: Option<Params<'a, 'a>>, - pub certificate: Option<X509>, + pub peer_address: Option<std::net::SocketAddr>, + pub url: Url, + pub params: Option<Params<'a, 'a>>, + pub certificate: Option<X509>, } impl<'a> HookContext<'a> { #[must_use] - pub const fn new( + pub fn new( + peer_address: std::io::Result<std::net::SocketAddr>, url: Url, params: Option<Params<'a, 'a>>, certificate: Option<X509>, ) -> Self { Self { + peer_address: peer_address.ok(), url, params, certificate, diff --git a/src/context/route.rs b/src/context/route.rs index b3b105d..9ff0b03 100644 --- a/src/context/route.rs +++ b/src/context/route.rs @@ -23,19 +23,22 @@ use url::Url; #[allow(clippy::module_name_repetitions)] #[derive(Clone)] pub struct RouteContext<'a> { - pub url: Url, - pub params: Params<'a, 'a>, - pub certificate: Option<X509>, + pub peer_address: Option<std::net::SocketAddr>, + pub url: Url, + pub params: Params<'a, 'a>, + pub certificate: Option<X509>, } impl<'a> RouteContext<'a> { #[must_use] - pub const fn new( + pub fn new( + peer_address: std::io::Result<std::net::SocketAddr>, url: Url, params: Params<'a, 'a>, certificate: Option<X509>, ) -> Self { Self { + peer_address: peer_address.ok(), url, params, certificate, diff --git a/src/router.rs b/src/router.rs index 5b674a5..c865fa9 100644 --- a/src/router.rs +++ b/src/router.rs @@ -346,6 +346,7 @@ impl Router { let route = &mut self.routes.at(&fixed_path); let peer_certificate = stream.ssl().peer_certificate(); let hook_context = HookContext::new( + stream.get_ref().peer_addr(), url.clone(), route .as_ref() @@ -365,8 +366,12 @@ impl Router { let mut content = if let Ok(ref route) = route { let footers_length = (*self.footers.lock().unwrap()).len(); - let route_context = - RouteContext::new(url.clone(), route.params.clone(), peer_certificate); + let route_context = RouteContext::new( + stream.get_ref().peer_addr(), + url.clone(), + route.params.clone(), + peer_certificate, + ); for partial_header in &mut *self.headers.lock().unwrap() { header @@ -394,6 +399,7 @@ impl Router { handler.await } else { (*self.error_handler).lock().unwrap()(ErrorContext::new( + stream.get_ref().peer_addr(), url.clone(), peer_certificate, )) |