use async_trait::async_trait;
use pingora_core::server::configuration::Opt;
use pingora_core::server::Server;
use pingora_core::upstreams::peer::HttpPeer;
use pingora_core::Result;
use pingora_proxy::{ProxyHttp, Session};
pub struct PipelinedGateway;
#[async_trait]
impl ProxyHttp for PipelinedGateway {
type CTX = ();
fn new_ctx(&self) -> Self::CTX {}
async fn early_request_filter(
&self,
session: &mut Session,
_ctx: &mut Self::CTX,
) -> Result<()> {
session.set_pipelining_enabled(true);
Ok(())
}
async fn upstream_peer(
&self,
_session: &mut Session,
_ctx: &mut Self::CTX,
) -> Result<Box<HttpPeer>> {
let peer = HttpPeer::new(("httpbin.org", 80), false, "httpbin.org".into());
Ok(Box::new(peer))
}
}
fn main() {
env_logger::init();
let opt = Opt::parse_args();
let mut my_server = Server::new(Some(opt)).unwrap();
my_server.bootstrap();
let mut my_proxy =
pingora_proxy::http_proxy_service(&my_server.configuration, PipelinedGateway);
my_proxy.add_tcp("0.0.0.0:6191");
my_server.add_service(my_proxy);
my_server.run_forever();
}