diff --git a/rpxy-lib/src/backend/backend_main.rs b/rpxy-lib/src/backend/backend_main.rs index af05704..5524956 100644 --- a/rpxy-lib/src/backend/backend_main.rs +++ b/rpxy-lib/src/backend/backend_main.rs @@ -26,6 +26,7 @@ pub struct BackendApp { pub https_redirection: Option, /// tls settings: mutual TLS is enabled #[builder(default)] + #[allow(unused)] pub mutual_tls: Option, } impl<'a> BackendAppBuilder { diff --git a/rpxy-lib/src/proxy/proxy_h3.rs b/rpxy-lib/src/proxy/proxy_h3.rs index acfe07d..1eed0c5 100644 --- a/rpxy-lib/src/proxy/proxy_h3.rs +++ b/rpxy-lib/src/proxy/proxy_h3.rs @@ -68,7 +68,7 @@ where h3_conn.shutdown(0).await?; break; } - debug!("Request incoming: current # {}", request_count.current()); + trace!("Request incoming: current # {}", request_count.current()); let self_inner = self.clone(); let tls_server_name_inner = tls_server_name.clone(); @@ -82,7 +82,7 @@ where warn!("HTTP/3 error on serve stream: {}", e); } request_count.decrement(); - debug!("Request processed: current # {}", request_count.current()); + trace!("Request processed: current # {}", request_count.current()); }); } } diff --git a/rpxy-lib/src/proxy/proxy_main.rs b/rpxy-lib/src/proxy/proxy_main.rs index cfc8b6e..b858072 100644 --- a/rpxy-lib/src/proxy/proxy_main.rs +++ b/rpxy-lib/src/proxy/proxy_main.rs @@ -80,7 +80,7 @@ where request_count.decrement(); return; } - debug!("Request incoming: current # {}", request_count.current()); + trace!("Request incoming: current # {}", request_count.current()); let server_clone = self.connection_builder.clone(); let message_handler_clone = self.message_handler.clone(); @@ -110,7 +110,7 @@ where } request_count.decrement(); - debug!("Request processed: current # {}", request_count.current()); + trace!("Request processed: current # {}", request_count.current()); }); } @@ -131,52 +131,55 @@ where /// Start with TLS (HTTPS) pub(super) async fn start_with_tls(&self, cancel_token: CancellationToken) -> RpxyResult<()> { + // By default, TLS listener is spawned + let join_handle_tls = self.globals.runtime_handle.spawn({ + let self_clone = self.clone(); + let cancel_token = cancel_token.clone(); + async move { + select! { + _ = self_clone.tls_listener_service().fuse() => { + error!("TCP proxy service for TLS exited"); + cancel_token.cancel(); + }, + _ = cancel_token.cancelled().fuse() => { + debug!("Cancel token is called for TLS listener"); + } + } + } + }); + #[cfg(not(any(feature = "http3-quinn", feature = "http3-s2n")))] { - self.tls_listener_service().await?; - error!("TCP proxy service for TLS exited"); + let _ = join_handle_tls.await; Ok(()) } + #[cfg(any(feature = "http3-quinn", feature = "http3-s2n"))] { - if self.globals.proxy_config.http3 { - let jh_tls = self.globals.runtime_handle.spawn({ - let self_clone = self.clone(); - let cancel_token = cancel_token.clone(); - async move { - select! { - _ = self_clone.tls_listener_service().fuse() => { - error!("TCP proxy service for TLS exited"); - cancel_token.cancel(); - }, - _ = cancel_token.cancelled().fuse() => { - debug!("Cancel token is called for TLS listener"); - } - } - } - }); - let jh_h3 = self.globals.runtime_handle.spawn({ - let self_clone = self.clone(); - async move { - select! { - _ = self_clone.h3_listener_service().fuse() => { - error!("UDP proxy service for QUIC exited"); - cancel_token.cancel(); - }, - _ = cancel_token.cancelled().fuse() => { - debug!("Cancel token is called for QUIC listener"); - } - } - } - }); - let _ = futures::future::join(jh_tls, jh_h3).await; - - Ok(()) - } else { - self.tls_listener_service().await?; - error!("TCP proxy service for TLS exited"); - Ok(()) + // If HTTP/3 is not enabled, wait for TLS listener to finish + if !self.globals.proxy_config.http3 { + let _ = join_handle_tls.await; + return Ok(()); } + + // If HTTP/3 is enabled, spawn a task to handle HTTP/3 connections + let join_handle_h3 = self.globals.runtime_handle.spawn({ + let self_clone = self.clone(); + async move { + select! { + _ = self_clone.h3_listener_service().fuse() => { + error!("UDP proxy service for QUIC exited"); + cancel_token.cancel(); + }, + _ = cancel_token.cancelled().fuse() => { + debug!("Cancel token is called for QUIC listener"); + } + } + } + }); + let _ = futures::future::join(join_handle_tls, join_handle_h3).await; + + Ok(()) } } diff --git a/rpxy-lib/src/proxy/socket.rs b/rpxy-lib/src/proxy/socket.rs index 322b42b..fbb810d 100644 --- a/rpxy-lib/src/proxy/socket.rs +++ b/rpxy-lib/src/proxy/socket.rs @@ -16,10 +16,12 @@ pub(super) fn bind_tcp_socket(listening_on: &SocketAddr) -> RpxyResult RpxyResult