lite-rpc/quic-forward-proxy/src/main.rs

64 lines
1.7 KiB
Rust

use crate::cli::Args;
use crate::proxy::QuicForwardProxy;
use crate::tls_self_signed_pair_generator::SelfSignedTlsConfigProvider;
use anyhow::bail;
use clap::Parser;
use dotenv::dotenv;
use log::info;
use solana_lite_rpc_core::keypair_loader::load_identity_keypair;
use std::sync::Arc;
use crate::validator_identity::ValidatorIdentity;
pub mod cli;
mod inbound;
mod outbound;
pub mod proxy;
pub mod proxy_request_format;
pub mod quic_util;
mod quinn_auto_reconnect;
mod shared;
pub mod tls_config_provider_client;
pub mod tls_config_provider_server;
pub mod tls_self_signed_pair_generator;
mod util;
mod validator_identity;
#[tokio::main(flavor = "multi_thread", worker_threads = 16)]
pub async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
let Args {
identity_keypair,
proxy_listen_addr,
} = Args::parse();
dotenv().ok();
let proxy_listener_addr = proxy_listen_addr.parse().unwrap();
let validator_identity = ValidatorIdentity::new(
load_identity_keypair(Some(identity_keypair).filter(|s| !s.is_empty())).await?,
);
let tls_config = Arc::new(SelfSignedTlsConfigProvider::new_singleton_self_signed_localhost());
let main_services = QuicForwardProxy::new(proxy_listener_addr, tls_config, validator_identity)
.await?
.start_services();
let ctrl_c_signal = tokio::signal::ctrl_c();
tokio::select! {
res = main_services => {
bail!("Services quit unexpectedly {res:?}");
},
// res = test_client => {
// bail!("Test Client quit unexpectedly {res:?}");
// },
_ = ctrl_c_signal => {
info!("Received ctrl+c signal");
Ok(())
}
}
}