edc_dataplane_proxy/web/proxy/
server.rs1use 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}