7777
7878 Ok ( async move {
7979 loop {
80- let Ok ( ( stream, _) ) = listener. accept ( ) . await else {
81- continue ;
80+ let ( stream, _) = match listener. accept ( ) . await {
81+ Ok ( conn) => conn,
82+ Err ( err) => {
83+ tracing:: warn!( "Failed to accept connection: {}" , err) ;
84+ continue ;
85+ }
8286 } ;
8387
8488 let service = service. clone ( ) ;
@@ -140,12 +144,16 @@ where
140144 } ;
141145
142146 tokio:: spawn ( async move {
143- let Ok ( client) = hyper:: upgrade:: on ( req) . await else {
144- tracing:: error!(
145- "Bad CONNECT request: {}, Reason: Invalid Upgrade" ,
146- connect_authority
147- ) ;
148- return ;
147+ let client = match hyper:: upgrade:: on ( req) . await {
148+ Ok ( client) => client,
149+ Err ( err) => {
150+ tracing:: error!(
151+ "Failed to upgrade CONNECT request for {}: {}" ,
152+ connect_authority,
153+ err
154+ ) ;
155+ return ;
156+ }
149157 } ;
150158 if let Some ( server_config) =
151159 proxy. server_config ( connect_authority. host ( ) . to_string ( ) , true )
@@ -196,17 +204,22 @@ where
196204 . await
197205 } ;
198206
199- if let Err ( _err) = res {
200- // Suppress error because if we serving HTTPS proxy server and forward to HTTPS server, it will always error when closing connection.
201- // tracing::error!("Error in proxy: {}", err);
207+ if let Err ( err) = res {
208+ tracing:: debug!( "Connection closed: {}" , err) ;
202209 }
203210 } else {
204- let Ok ( mut server) =
205- TcpStream :: connect ( connect_authority. as_str ( ) ) . await
206- else {
207- tracing:: error!( "Failed to connect to {}" , connect_authority) ;
208- return ;
209- } ;
211+ let mut server =
212+ match TcpStream :: connect ( connect_authority. as_str ( ) ) . await {
213+ Ok ( server) => server,
214+ Err ( err) => {
215+ tracing:: error!(
216+ "Failed to connect to {}: {}" ,
217+ connect_authority,
218+ err
219+ ) ;
220+ return ;
221+ }
222+ } ;
210223 let _ = tokio:: io:: copy_bidirectional (
211224 & mut TokioIo :: new ( client) ,
212225 & mut server,
@@ -229,13 +242,21 @@ where
229242 }
230243
231244 fn get_certified_key ( & self , host : String ) -> Option < CertifiedKeyDer > {
232- self . root_cert . as_ref ( ) . map ( |root_cert| {
245+ self . root_cert . as_ref ( ) . and_then ( |root_cert| {
233246 if let Some ( cache) = self . cert_cache . as_ref ( ) {
234- cache. get_with ( host. clone ( ) , move || {
247+ Some ( cache. get_with ( host. clone ( ) , move || {
235248 generate_cert ( host, root_cert. borrow ( ) )
236- } )
249+ . map_err ( |err| {
250+ tracing:: error!( "Failed to generate certificate for host: {}" , err) ;
251+ } )
252+ . unwrap ( )
253+ } ) )
237254 } else {
238255 generate_cert ( host, root_cert. borrow ( ) )
256+ . map_err ( |err| {
257+ tracing:: error!( "Failed to generate certificate: {}" , err) ;
258+ } )
259+ . ok ( )
239260 }
240261 } )
241262 }
0 commit comments