o_sfu/runtime/http_server/
mod.rs1use std::{net::SocketAddr, sync::Arc};
12
13use axum::{Router, middleware, response::IntoResponse, routing::get};
14use tracing::Instrument;
15
16use self::contract::{NoopResponse, route};
17use super::{RuntimeState, telemetry, websocket_server};
18
19#[cfg(test)]
20#[expect(non_snake_case, reason = "test modules map to local TESTS directories")]
21mod TESTS;
22mod access;
23pub(crate) mod contract;
24mod operator;
25mod request_metrics;
26mod rooms;
27mod server;
28
29pub(crate) use self::server::{serve_http, serve_http_on};
30
31pub(super) fn app(state: RuntimeState, listener_address: SocketAddr) -> Router {
37 Router::new()
38 .route(route::v1::NOOP, get(noop))
39 .merge(rooms::routes())
40 .merge(operator::routes(&state, listener_address))
41 .route_layer(middleware::from_fn_with_state(
42 Arc::clone(&state.metrics),
43 request_metrics::track_request,
44 ))
45 .route(route::WEBSOCKET, get(websocket_server::upgrade))
46 .with_state(state)
47}
48
49async fn noop() -> impl IntoResponse {
51 async { axum::Json(NoopResponse::ok()) }
52 .instrument(telemetry::http_request_span("noop"))
53 .await
54}