From df257747aeb58f4d8601c5fba5785e9614f41b2c Mon Sep 17 00:00:00 2001 From: moznion Date: Fri, 27 Nov 2020 23:28:05 +0900 Subject: [PATCH] Return `Result` at RequestHandler --- src/request_handler.rs | 6 ++++-- src/server.rs | 23 ++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/request_handler.rs b/src/request_handler.rs index 936af7f..2288791 100644 --- a/src/request_handler.rs +++ b/src/request_handler.rs @@ -1,7 +1,9 @@ +use async_trait::async_trait; use tokio::net::UdpSocket; use crate::request::Request; -pub trait RequestHandler: 'static + Sync + Send { - fn handle_radius_request(&self, conn: &UdpSocket, request: &Request); +#[async_trait] +pub trait RequestHandler: 'static + Sync + Send { + async fn handle_radius_request(&self, conn: &UdpSocket, request: &Request) -> Result; } diff --git a/src/server.rs b/src/server.rs index 360700a..4ad005d 100644 --- a/src/server.rs +++ b/src/server.rs @@ -11,11 +11,12 @@ use crate::packet::Packet; use crate::request::Request; use crate::request_handler::RequestHandler; use crate::secret_provider::SecretProvider; +use std::fmt::Debug; pub struct Server {} impl Server { - pub async fn run( + pub async fn run, U: SecretProvider>( host: &str, port: u16, buf_size: usize, @@ -35,7 +36,7 @@ impl Server { } } - async fn run_loop( + async fn run_loop, U: SecretProvider>( host: &str, port: u16, buf_size: usize, @@ -90,7 +91,7 @@ impl Server { } } - async fn process_request( + async fn process_request, U: SecretProvider>( conn: Arc, request_data: &[u8], local_addr: SocketAddr, @@ -147,10 +148,18 @@ impl Server { undergoing_requests.insert(key); } - request_handler.handle_radius_request( - conn.borrow(), - &Request::new(local_addr, remote_addr, packet), - ); + match request_handler + .handle_radius_request( + conn.borrow(), + &Request::new(local_addr, remote_addr, packet), + ) + .await + { + Ok(_) => {} + Err(e) => { + println!("{:?}", e); + } + } let mut undergoing_requests = undergoing_requests_lock.write().unwrap(); undergoing_requests.remove(&key_for_remove);