Compare commits

...

2 commits

Author SHA1 Message Date
aprilthepink c099817e9a add .idea to gitignore 2025-02-25 20:59:54 +01:00
aprilthepink 91b2487807 add stub quic client 2025-02-25 20:59:54 +01:00
4 changed files with 40 additions and 2 deletions

1
.gitignore vendored
View file

@ -21,3 +21,4 @@ target/
# Cargo root folder # Cargo root folder
/.cargo /.cargo
.idea

37
src/quic/client.rs Normal file
View file

@ -0,0 +1,37 @@
use std::error::Error;
use std::net::SocketAddr;
use std::sync::Arc;
use quinn::{ClientConfig, Endpoint};
use rustls::pki_types::CertificateDer;
/// Builds default quinn client config and trusts given certificates.
///
/// ## Args
///
/// - server_certs: a list of trusted certificates in DER format.
fn configure_client(
server_certs: &[&[u8]],
) -> Result<ClientConfig, Box<dyn Error + Send + Sync + 'static>> {
let mut certs = rustls::RootCertStore::empty();
for cert in server_certs {
certs.add(CertificateDer::from(*cert))?;
}
Ok(ClientConfig::with_root_certificates(Arc::new(certs))?)
}
/// Constructs a QUIC endpoint configured for use a client only.
///
/// ## Args
///
/// - server_certs: list of trusted certificates.
#[allow(unused)]
pub fn make_client_endpoint(
bind_addr: SocketAddr,
server_certs: &[&[u8]],
) -> Result<Endpoint, Box<dyn Error + Send + Sync + 'static>> {
let client_cfg = configure_client(server_certs)?;
let mut endpoint = Endpoint::client(bind_addr)?;
endpoint.set_default_client_config(client_cfg);
Ok(endpoint)
}

View file

@ -1 +1,2 @@
mod server; mod server;
mod client;

View file

@ -2,7 +2,6 @@ use std::error::Error;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::Arc; use std::sync::Arc;
use quinn::{Endpoint, ServerConfig}; use quinn::{Endpoint, ServerConfig};
use rcgen::Certificate;
use rustls::pki_types::{CertificateDer, PrivatePkcs8KeyDer}; use rustls::pki_types::{CertificateDer, PrivatePkcs8KeyDer};
use rustls::pki_types::pem::PemObject; use rustls::pki_types::pem::PemObject;