diff --git a/src/main.rs b/src/main.rs index 0946f0f..937d6ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -76,7 +76,7 @@ fn get_config_file_source() -> impl Source { } #[tokio::main] -async fn main() { +async fn main() -> anyhow::Result<()> { env_logger::init(); let args = Args::parse(); @@ -88,13 +88,16 @@ async fn main() { match args.command { Commands::CliClient => { - let ip_addr_str = config().get_string("remote_endpoint").unwrap(); - let ip_sock = SocketAddr::from_str(&ip_addr_str).unwrap(); + let ip_addr_str = config().get_string("remote_endpoint")?; + let ip_sock = SocketAddr::from_str(&ip_addr_str)?; + let client_endpoint = quic::client::make_client_endpoint(ip_sock.clone(), None)?; + let client = client_endpoint.connect(ip_sock, "localhost")?.await?; + println!("[client] connected: addr={}", client.remote_address()); } Commands::Shadow => { bininfo::print_info(); - return; + return Ok(()); } Commands::GuiClient => { @@ -102,7 +105,7 @@ async fn main() { if let Err(e) = res { println!("{}", e); } - return; + return Ok(()); } Commands::Devtest => { @@ -121,4 +124,5 @@ async fn main() { //handling anything here for gui wont work println!("exit"); + Ok(()) } diff --git a/src/quic/client.rs b/src/quic/client.rs index eeb6f12..7b42544 100644 --- a/src/quic/client.rs +++ b/src/quic/client.rs @@ -10,14 +10,18 @@ use rustls::pki_types::CertificateDer; /// /// - server_certs: a list of trusted certificates in DER format. fn configure_client( - server_certs: &[&[u8]], + server_certs: Option<&[&[u8]]>, ) -> Result> { - let mut certs = rustls::RootCertStore::empty(); - for cert in server_certs { - certs.add(CertificateDer::from(*cert))?; - } + if let Some(server_certs) = server_certs { + let mut certs = rustls::RootCertStore::empty(); + for cert in server_certs { + certs.add(CertificateDer::from(*cert))?; + } - Ok(ClientConfig::with_root_certificates(Arc::new(certs))?) + Ok(ClientConfig::with_root_certificates(Arc::new(certs))?) + } else { + Ok(ClientConfig::with_platform_verifier()) + } } /// Constructs a QUIC endpoint configured for use a client only. @@ -28,7 +32,7 @@ fn configure_client( #[allow(unused)] pub fn make_client_endpoint( bind_addr: SocketAddr, - server_certs: &[&[u8]], + server_certs: Option<&[&[u8]]>, ) -> Result> { let client_cfg = configure_client(server_certs)?; let mut endpoint = Endpoint::client(bind_addr)?; diff --git a/src/quic/mod.rs b/src/quic/mod.rs index 76c4929..92b78e2 100644 --- a/src/quic/mod.rs +++ b/src/quic/mod.rs @@ -1,2 +1,2 @@ -mod server; -mod client; \ No newline at end of file +pub(crate) mod server; +pub(crate) mod client; \ No newline at end of file