@@ -10,7 +10,7 @@ use rocket::{
1010 listener:: { Bind , DefaultListener } ,
1111} ;
1212use rocket_vsock_listener:: VsockListener ;
13- use rpc_service:: { AppState , ExternalRpcHandler , InternalRpcHandler } ;
13+ use rpc_service:: { AppState , ExternalRpcHandler , InternalRpcHandler , InternalRpcHandlerV0 } ;
1414use sd_notify:: { notify as sd_notify, NotifyState } ;
1515use std:: time:: Duration ;
1616use tracing:: { error, info} ;
@@ -44,9 +44,36 @@ struct Args {
4444 watchdog : bool ,
4545}
4646
47+ async fn run_internal_v0 ( state : AppState , figment : Figment ) -> Result < ( ) > {
48+ let rocket = rocket:: custom ( figment)
49+ . mount (
50+ "/prpc/" ,
51+ ra_rpc:: prpc_routes!( AppState , InternalRpcHandlerV0 ) ,
52+ )
53+ . manage ( state) ;
54+ let ignite = rocket
55+ . ignite ( )
56+ . await
57+ . map_err ( |err| anyhow ! ( "Failed to ignite rocket: {err}" ) ) ?;
58+ let endpoint = DefaultListener :: bind_endpoint ( & ignite)
59+ . map_err ( |err| anyhow ! ( "Failed to get endpoint: {err}" ) ) ?;
60+ let listener = DefaultListener :: bind ( & ignite)
61+ . await
62+ . map_err ( |err| anyhow ! ( "Failed to bind on {endpoint}: {err}" ) ) ?;
63+ if let Some ( path) = endpoint. unix ( ) {
64+ // Allow any user to connect to the socket
65+ fs_err:: set_permissions ( path, Permissions :: from_mode ( 0o777 ) ) ?;
66+ }
67+ ignite
68+ . launch_on ( listener)
69+ . await
70+ . map_err ( |err| anyhow ! ( err. to_string( ) ) ) ?;
71+ Ok ( ( ) )
72+ }
73+
4774async fn run_internal ( state : AppState , figment : Figment ) -> Result < ( ) > {
4875 let rocket = rocket:: custom ( figment)
49- . mount ( "/prpc/ " , ra_rpc:: prpc_routes!( AppState , InternalRpcHandler ) )
76+ . mount ( "/" , ra_rpc:: prpc_routes!( AppState , InternalRpcHandler ) )
5077 . manage ( state) ;
5178 let ignite = rocket
5279 . ignite ( )
@@ -165,7 +192,7 @@ async fn main() -> Result<()> {
165192 . context ( "Failed to extract bind address" ) ?;
166193 let guest_api_figment = figment. select ( "guest-api" ) ;
167194 tokio:: select!(
168- res = run_internal ( state. clone( ) , internal_v0_figment) => res?,
195+ res = run_internal_v0 ( state. clone( ) , internal_v0_figment) => res?,
169196 res = run_internal( state. clone( ) , internal_figment) => res?,
170197 res = run_external( state. clone( ) , external_figment) => res?,
171198 res = run_guest_api( state. clone( ) , guest_api_figment) => res?,
0 commit comments