mod comm;
use std::{net::SocketAddr, path::PathBuf, sync::Arc};
use comm::axum_srv;
use faststr::FastStr;
use gway::{CertDir, CertLoader, Protocol, Route, Upstream, shutdown, srv};
const MANIFEST_DIR: &str = env!("CARGO_MANIFEST_DIR");
#[tokio::main]
async fn main() -> anyhow::Result<()> {
log_init::init();
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("failed to install aws-lc-rs as default provider");
let upstream_addr1: SocketAddr = "127.0.0.1:8081".parse()?;
let upstream_addr2: SocketAddr = "127.0.0.1:8082".parse()?;
tokio::spawn(axum_srv(upstream_addr1));
tokio::spawn(axum_srv(upstream_addr2));
let h1_addr: SocketAddr = "0.0.0.0:8080".parse()?;
let h2_addr: SocketAddr = "0.0.0.0:9083".parse()?;
let h3_addr: SocketAddr = "0.0.0.0:9083".parse()?;
let mut route = Route::default();
let upstream = Upstream {
addr_li: vec![upstream_addr1, upstream_addr2].into_boxed_slice(),
connect_timeout_sec: 10,
request_timeout_sec: 10,
max_retry: 3,
protocol: Protocol::H1,
};
let upstream_name = FastStr::from("test_upstream");
route.add_upstream(upstream_name.clone(), upstream);
route.set("test.018007.xyz", "018007.xyz", upstream_name.clone());
route.set("018007.xyz", "018007.xyz", upstream_name);
let cert_db = CertDir {
base: PathBuf::from(MANIFEST_DIR).join("examples/ssl"),
};
let cert_loader = CertLoader::new(cert_db);
srv(
Arc::new(route),
cert_loader,
shutdown::signal(),
h1_addr,
h2_addr,
h3_addr,
)
.await?;
Ok(())
}