@@ -169,10 +169,15 @@ impl TriggerExecutor for HttpTrigger {
169
169
let listen_addr = config. address ;
170
170
let tls = config. into_tls_config ( ) ;
171
171
172
+ let listener = TcpListener :: bind ( listen_addr)
173
+ . await
174
+ . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
175
+
176
+ let self_ = Arc :: new ( self ) ;
172
177
if let Some ( tls) = tls {
173
- self . serve_tls ( listen_addr , tls) . await ?
178
+ self_ . serve_tls ( listener , tls) . await ?
174
179
} else {
175
- self . serve ( listen_addr ) . await ?
180
+ self_ . serve ( listener ) . await ?
176
181
} ;
177
182
178
183
Ok ( ( ) )
@@ -350,7 +355,7 @@ impl HttpTrigger {
350
355
}
351
356
352
357
fn serve_connection < S : AsyncRead + AsyncWrite + Unpin + Send + ' static > (
353
- self_ : Arc < Self > ,
358
+ self : Arc < Self > ,
354
359
stream : S ,
355
360
addr : SocketAddr ,
356
361
) {
@@ -359,7 +364,7 @@ impl HttpTrigger {
359
364
. keep_alive ( true )
360
365
. serve_connection (
361
366
TokioIo :: new ( stream) ,
362
- service_fn ( move |request| self_ . clone ( ) . instrumented_service_fn ( addr, request) ) ,
367
+ service_fn ( move |request| self . clone ( ) . instrumented_service_fn ( addr, request) ) ,
363
368
)
364
369
. await
365
370
{
@@ -392,67 +397,43 @@ impl HttpTrigger {
392
397
. await
393
398
}
394
399
395
- async fn serve ( self , listen_addr : SocketAddr ) -> Result < ( ) > {
396
- let self_ = Arc :: new ( self ) ;
397
-
398
- let listener = TcpListener :: bind ( listen_addr)
399
- . await
400
- . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
401
-
402
- // Print startup messages
403
- let scheme = "http" ;
404
- let base_url = format ! ( "{}://{:?}" , scheme, listener. local_addr( ) ?) ;
405
- terminal:: step!( "\n Serving" , "{}" , base_url) ;
406
- log:: info!( "Serving {}" , base_url) ;
407
-
408
- println ! ( "Available Routes:" ) ;
409
- for ( route, component_id) in self_. router . routes ( ) {
410
- println ! ( " {}: {}{}" , component_id, base_url, route) ;
411
- if let Some ( component) = self_. engine . app ( ) . get_component ( component_id) {
412
- if let Some ( description) = component. get_metadata ( APP_DESCRIPTION_KEY ) ? {
413
- println ! ( " {}" , description) ;
414
- }
415
- }
416
- }
417
-
400
+ async fn serve ( self : Arc < Self > , listener : TcpListener ) -> Result < ( ) > {
401
+ self . print_startup_msgs ( "http" , & listener) ?;
418
402
loop {
419
403
let ( stream, addr) = listener. accept ( ) . await ?;
420
- Self :: serve_connection ( self_ . clone ( ) , stream, addr) ;
404
+ Self :: serve_connection ( self . clone ( ) , stream, addr) ;
421
405
}
422
406
}
423
407
424
- async fn serve_tls ( self , listen_addr : SocketAddr , tls : TlsConfig ) -> Result < ( ) > {
425
- let self_ = Arc :: new ( self ) ;
408
+ async fn serve_tls ( self : Arc < Self > , listener : TcpListener , tls : TlsConfig ) -> Result < ( ) > {
409
+ let acceptor = tls. server_config ( ) ?;
410
+ self . print_startup_msgs ( "https" , & listener) ?;
426
411
427
- let listener = TcpListener :: bind ( listen_addr)
428
- . await
429
- . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
412
+ loop {
413
+ let ( stream, addr) = listener. accept ( ) . await ?;
414
+ match acceptor. accept ( stream) . await {
415
+ Ok ( stream) => self . clone ( ) . serve_connection ( stream, addr) ,
416
+ Err ( err) => tracing:: error!( ?err, "Failed to start TLS session" ) ,
417
+ }
418
+ }
419
+ }
430
420
431
- // Print startup messages
432
- let scheme = "https" ;
433
- let base_url = format ! ( "{}://{:?}" , scheme , listener . local_addr ( ) ? ) ;
421
+ fn print_startup_msgs ( & self , scheme : & str , listener : & TcpListener ) -> Result < ( ) > {
422
+ let local_addr = listener . local_addr ( ) ? ;
423
+ let base_url = format ! ( "{scheme }://{local_addr :?}" ) ;
434
424
terminal:: step!( "\n Serving" , "{}" , base_url) ;
435
425
log:: info!( "Serving {}" , base_url) ;
436
426
437
427
println ! ( "Available Routes:" ) ;
438
- for ( route, component_id) in self_ . router . routes ( ) {
428
+ for ( route, component_id) in self . router . routes ( ) {
439
429
println ! ( " {}: {}{}" , component_id, base_url, route) ;
440
- if let Some ( component) = self_ . engine . app ( ) . get_component ( component_id) {
430
+ if let Some ( component) = self . engine . app ( ) . get_component ( component_id) {
441
431
if let Some ( description) = component. get_metadata ( APP_DESCRIPTION_KEY ) ? {
442
432
println ! ( " {}" , description) ;
443
433
}
444
434
}
445
435
}
446
-
447
- let acceptor = tls. server_config ( ) ?;
448
-
449
- loop {
450
- let ( stream, addr) = listener. accept ( ) . await ?;
451
- match acceptor. accept ( stream) . await {
452
- Ok ( stream) => Self :: serve_connection ( self_. clone ( ) , stream, addr) ,
453
- Err ( err) => tracing:: error!( ?err, "Failed to start TLS session" ) ,
454
- }
455
- }
436
+ Ok ( ( ) )
456
437
}
457
438
}
458
439
0 commit comments