2023-08-02 05:55:11 -07:00
|
|
|
use crate::cli::Args;
|
2023-07-31 05:26:21 -07:00
|
|
|
use crate::proxy::QuicForwardProxy;
|
|
|
|
use crate::tls_self_signed_pair_generator::SelfSignedTlsConfigProvider;
|
2023-06-22 09:54:09 -07:00
|
|
|
use anyhow::bail;
|
2023-06-26 13:10:06 -07:00
|
|
|
use clap::Parser;
|
|
|
|
use dotenv::dotenv;
|
2023-06-22 09:54:09 -07:00
|
|
|
use log::info;
|
2023-09-02 05:59:47 -07:00
|
|
|
use solana_lite_rpc_core::keypair_loader::load_identity_keypair;
|
2023-09-02 09:47:29 -07:00
|
|
|
use std::sync::Arc;
|
2023-07-29 02:26:21 -07:00
|
|
|
|
2023-07-31 01:48:52 -07:00
|
|
|
use crate::validator_identity::ValidatorIdentity;
|
2023-06-22 09:54:09 -07:00
|
|
|
|
2023-07-31 05:26:21 -07:00
|
|
|
pub mod cli;
|
|
|
|
mod inbound;
|
|
|
|
mod outbound;
|
|
|
|
pub mod proxy;
|
|
|
|
pub mod proxy_request_format;
|
2023-07-20 00:28:55 -07:00
|
|
|
pub mod quic_util;
|
2023-07-31 05:26:21 -07:00
|
|
|
mod quinn_auto_reconnect;
|
|
|
|
mod shared;
|
2023-07-31 02:30:53 -07:00
|
|
|
pub mod tls_config_provider_client;
|
|
|
|
pub mod tls_config_provider_server;
|
|
|
|
pub mod tls_self_signed_pair_generator;
|
2023-07-20 00:28:55 -07:00
|
|
|
mod util;
|
2023-07-31 01:48:52 -07:00
|
|
|
mod validator_identity;
|
2023-06-22 09:54:09 -07:00
|
|
|
|
|
|
|
#[tokio::main(flavor = "multi_thread", worker_threads = 16)]
|
|
|
|
pub async fn main() -> anyhow::Result<()> {
|
|
|
|
tracing_subscriber::fmt::init();
|
|
|
|
|
2023-06-26 13:10:06 -07:00
|
|
|
let Args {
|
|
|
|
identity_keypair,
|
2023-08-02 05:55:11 -07:00
|
|
|
proxy_listen_addr,
|
2023-06-26 13:10:06 -07:00
|
|
|
} = Args::parse();
|
|
|
|
dotenv().ok();
|
|
|
|
|
2023-09-08 06:13:20 -07:00
|
|
|
let proxy_listener_addr = proxy_listen_addr.parse().unwrap();
|
2024-04-02 06:52:06 -07:00
|
|
|
|
|
|
|
let validator_identity = ValidatorIdentity::new(
|
|
|
|
load_identity_keypair(Some(identity_keypair).filter(|s| !s.is_empty())).await?,
|
|
|
|
);
|
2023-06-22 09:54:09 -07:00
|
|
|
|
2023-07-31 01:48:52 -07:00
|
|
|
let tls_config = Arc::new(SelfSignedTlsConfigProvider::new_singleton_self_signed_localhost());
|
|
|
|
let main_services = QuicForwardProxy::new(proxy_listener_addr, tls_config, validator_identity)
|
2023-06-22 09:54:09 -07:00
|
|
|
.await?
|
|
|
|
.start_services();
|
|
|
|
|
|
|
|
let ctrl_c_signal = tokio::signal::ctrl_c();
|
|
|
|
|
|
|
|
tokio::select! {
|
|
|
|
res = main_services => {
|
|
|
|
bail!("Services quit unexpectedly {res:?}");
|
|
|
|
},
|
2023-07-20 00:28:55 -07:00
|
|
|
// res = test_client => {
|
|
|
|
// bail!("Test Client quit unexpectedly {res:?}");
|
|
|
|
// },
|
2023-06-22 09:54:09 -07:00
|
|
|
_ = ctrl_c_signal => {
|
|
|
|
info!("Received ctrl+c signal");
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|