edc_dataplane_proxy/web/proxy/
server.rs

1use std::{net::SocketAddr, thread};
2
3use edc_dataplane_core::web::wait_for_server;
4use pingora::server::{configuration::ServerConf, Server};
5use pingora_proxy::http_proxy_service;
6
7use crate::{extensions::Proxy, service::token::TokenManager, web::state::Context};
8
9use super::public::PublicProxy;
10
11pub async fn start<T: TokenManager + Send + Sync + Clone + 'static>(cfg: &Proxy, ctx: Context<T>) {
12    let mut server = Server::new_with_opt_and_conf(None, ServerConf::default());
13    let addr = format!("{}:{}", cfg.bind, cfg.port);
14    server.bootstrap();
15
16    let mut proxy = http_proxy_service(&server.configuration, PublicProxy::new(ctx));
17
18    proxy.add_tcp(&addr);
19    server.add_service(proxy);
20
21    let srv_addr = addr.parse::<SocketAddr>().unwrap();
22    thread::spawn(move || {
23        tracing::debug!("Launching proxy on {}", addr);
24        server.run_forever();
25    });
26
27    wait_for_server(srv_addr).await;
28}