@@ -9,6 +9,7 @@ pub async fn run(
99 external_addr : SocketAddr ,
1010 unified_socket : net:: UnifiedSocket ,
1111 http_socket : SocketAddr ,
12+ enable_tls : bool ,
1213) -> anyhow:: Result < ( ) > {
1314 // Configure CORS
1415 let cors = CorsLayer :: very_permissive ( )
@@ -41,14 +42,30 @@ pub async fn run(
4142 let controller_handle = controller_ready_rx. await ?;
4243 // Set up signaling router
4344 let router = signaling:: router ( controller_handle) . layer ( cors) ;
44- let listener = tokio:: net:: TcpListener :: bind ( http_socket)
45- . await
46- . expect ( "bind to http socket" ) ;
47- let signaling = async move {
48- let _ = axum:: serve ( listener, router) . await ;
49- } ;
50- let signaling_handle = tokio:: spawn ( signaling) ;
51- join_set. push ( signaling_handle. map ( |_| ( ) ) . boxed ( ) ) ;
45+
46+ if enable_tls {
47+ // TODO: exclude from production build
48+ use axum_server:: tls_rustls:: RustlsConfig ;
49+ let cert = include_bytes ! ( "cert.pem" ) ;
50+ let key = include_bytes ! ( "key.pem" ) ;
51+ let config = RustlsConfig :: from_pem ( cert. to_vec ( ) , key. to_vec ( ) ) . await ?;
52+
53+ let signaling = async move {
54+ axum_server:: bind_rustls ( http_socket, config)
55+ . serve ( router. into_make_service ( ) )
56+ . await
57+ . unwrap ( ) ;
58+ } ;
59+ join_set. push ( tokio:: spawn ( signaling) . map ( |_| ( ) ) . boxed ( ) ) ;
60+ } else {
61+ let signaling = async move {
62+ axum_server:: bind ( http_socket)
63+ . serve ( router. into_make_service ( ) )
64+ . await
65+ . unwrap ( ) ;
66+ } ;
67+ join_set. push ( tokio:: spawn ( signaling) . map ( |_| ( ) ) . boxed ( ) ) ;
68+ }
5269
5370 // Wait for all tasks to complete
5471 while join_set. next ( ) . await . is_some ( ) { }
0 commit comments