Compare commits
2 commits
1910e1d51a
...
c099817e9a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c099817e9a | ||
|
|
91b2487807 |
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -21,3 +21,4 @@ target/
|
||||||
# Cargo root folder
|
# Cargo root folder
|
||||||
/.cargo
|
/.cargo
|
||||||
|
|
||||||
|
.idea
|
||||||
37
src/quic/client.rs
Normal file
37
src/quic/client.rs
Normal 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)
|
||||||
|
}
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
mod server;
|
mod server;
|
||||||
|
mod client;
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue