1#![recursion_limit = "256"]
2
3#[macro_use]
4extern crate slog_scope;
5
6use actix_web::{
7 Error, HttpRequest, HttpResponse,
8 http::header::{HeaderValue, USER_AGENT},
9 web,
10};
11
12use autoconnect_settings::AppState;
13
14mod error;
15mod handler;
16mod ping;
17mod session;
18#[cfg(test)]
19mod test;
20
21pub async fn ws_handler(
23 req: HttpRequest,
24 body: web::Payload,
25 app_state: web::Data<AppState>,
26) -> Result<HttpResponse, Error> {
27 debug!("🔌 Got connection");
28 let (response, session, msg_stream) = actix_ws::handle(&req, body)?;
29 let ua = req
30 .headers()
31 .get(USER_AGENT)
32 .unwrap_or(&HeaderValue::from_static(""))
33 .to_str()
34 .unwrap_or_default()
35 .to_owned();
36 handler::spawn_webpush_ws(session, msg_stream, app_state.into_inner(), ua);
37 Ok(response)
38}