diff --git a/Cargo.toml b/Cargo.toml index b690390..61da961 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ dashmap = "7.0.0-rc2" pingora-core = "0.5.0" pingora-proxy = "0.5.0" pingora-http = "0.5.0" +#pingora-pool = "0.5.0" async-trait = "0.1.88" env_logger = "0.11.8" log = "0.4.27" diff --git a/src/utils/structs.rs b/src/utils/structs.rs index 441e4a0..b31b380 100644 --- a/src/utils/structs.rs +++ b/src/utils/structs.rs @@ -73,14 +73,6 @@ pub struct AppConfig { pub config_tls_key_file: Option, pub proxy_address_tls: Option, pub proxy_port_tls: Option, - // pub tls_certificate: Option, - // pub tls_key_file: Option, pub local_server: Option<(String, u16)>, pub proxy_certificates: Option, } - -// #[derive(Debug)] -// pub struct CertificateMove { -// pub cert_tx: Sender, -// pub cert_rx: Receiver, -// } diff --git a/src/web/proxyhttp.rs b/src/web/proxyhttp.rs index 4d618d7..6f80724 100644 --- a/src/web/proxyhttp.rs +++ b/src/web/proxyhttp.rs @@ -34,8 +34,6 @@ pub struct Context { #[async_trait] impl ProxyHttp for LB { - // type CTX = (); - // fn new_ctx(&self) -> Self::CTX {} type CTX = Context; fn new_ctx(&self) -> Self::CTX { Context { @@ -60,7 +58,6 @@ impl ProxyHttp for LB { let host_name = return_header_host(&session); match host_name { Some(hostname) => { - // session.req_header_mut().headers.insert("X-Host-Name", host.to_string().parse().unwrap()); let mut backend_id = None; if self.extraparams.load().sticky_sessions { @@ -82,6 +79,26 @@ impl ProxyHttp for LB { match ddr { Some((address, port, ssl, is_h2, to_https)) => { let mut peer = Box::new(HttpPeer::new((address.clone(), port.clone()), ssl, String::new())); + /* + let key = PeerKey { + addr: address.clone(), + port: port, + ssl: ssl, + }; + + let gk = key.get_hash(); + let pooled_conn = self.connection_pool.connections.get(&gk); + match pooled_conn { + Some(conn) => { + peer = Box::from(conn); + } + None => { + let id = self.connection_pool.next_id(); + self.connection_pool.connections.put(&ConnectionMeta { key: gk, id: id }, *peer.clone()); + debug!("Added peer to pool: {}", id); + } + } + */ // if session.is_http2() { if is_h2 { peer.options.alpn = ALPN::H2; @@ -91,7 +108,7 @@ impl ProxyHttp for LB { peer.options.verify_cert = false; peer.options.verify_hostname = false; } - // println!("{}, {}, alpn {}, h2 {:?}, to_https {}", hostname, address.as_str(), peer.options.alpn, is_h2, _to_https); + if self.extraparams.load().to_https.unwrap_or(false) || to_https { if let Some(stream) = session.stream() { if stream.get_ssl().is_none() { @@ -108,6 +125,11 @@ impl ProxyHttp for LB { } ctx.backend_id = format!("{}:{}:{}", address.clone(), port.clone(), ssl); + /* + ctx.peer = Some(peer.clone()); + ctx.peer_key = Some(key.clone()); + ctx.group_key = Some(gk.clone()); + */ Ok(peer) } None => { @@ -155,6 +177,12 @@ impl ProxyHttp for LB { Ok(()) } + // async fn request_body_filter(&self, _session: &mut Session, _body: &mut Option, _end_of_stream: bool, _ctx: &mut Self::CTX) -> Result<()> + // where + // Self::CTX: Send + Sync, + // { + // Ok(()) + // } async fn response_filter(&self, session: &mut Session, _upstream_response: &mut ResponseHeader, ctx: &mut Self::CTX) -> Result<()> { // _upstream_response.insert_header("X-Proxied-From", "Fooooooooooooooo").unwrap(); if self.extraparams.load().sticky_sessions { @@ -195,6 +223,7 @@ impl ProxyHttp for LB { } None => {} } + session.set_keepalive(Some(300)); Ok(()) } @@ -227,10 +256,3 @@ fn return_header_host(session: &Session) -> Option<&str> { } } } - -// fn return_no_host(inp: &Option<(String, u16)>) -> Box { -// match inp { -// Some(t) => Box::new(HttpPeer::new(t, false, String::new())), -// None => Box::new(HttpPeer::new(("0.0.0.0", 0), false, String::new())), -// } -// } diff --git a/src/web/start.rs b/src/web/start.rs index 5a56e8d..b02f47e 100644 --- a/src/web/start.rs +++ b/src/web/start.rs @@ -28,6 +28,7 @@ pub fn run() { let ff_config = Arc::new(DashMap::new()); let im_config = Arc::new(DashMap::new()); let hh_config = Arc::new(DashMap::new()); + let ec_config = Arc::new(ArcSwap::from_pointee(Extraparams { sticky_sessions: false, to_https: None, @@ -37,25 +38,13 @@ pub fn run() { let cfg = Arc::new(maincfg); let lb = LB { - ump_upst: uf_config.clone(), - ump_full: ff_config.clone(), - ump_byid: im_config.clone(), + ump_upst: uf_config, + ump_full: ff_config, + ump_byid: im_config, config: cfg.clone(), - headers: hh_config.clone(), - extraparams: ec_config.clone(), + headers: hh_config, + extraparams: ec_config, }; - // let bg = LB { - // ump_upst: uf_config.clone(), - // ump_full: ff_config.clone(), - // ump_byid: im_config.clone(), - // config: cfg.clone(), - // headers: hh_config.clone(), - // extraparams: ec_config.clone(), - // config_rx: Arc::from(Mutex::new(rx)), - // }; - - // env_logger::Env::new(); - // env_logger::init(); let log_level = cfg.log_level.clone(); unsafe {