From edd8e2d0542e9301e39f00983db2fb8dc7ac07e7 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 28 Jan 2025 19:10:35 -0300 Subject: [PATCH] Upgrading dependencies (#8) --- Cargo.toml | 17 +++++++++-------- examples/rustls.rs | 34 ++++++++++++---------------------- examples/websocket-chat.rs | 7 ++++--- examples/websocket.rs | 4 ++-- src/upgrade.rs | 9 ++++++--- 5 files changed, 33 insertions(+), 38 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 90d4e0b..17a226f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,10 +20,10 @@ client = [] all-features = true [dependencies] -headers = "0.3.7" -http = "0.2.8" -httparse = "1.7.1" -rustls = { version = "0.20.6", optional = true, default-features = false } +headers = "0.4" +http = "1" +httparse = "1.9" +rustls = { version = "0.23", optional = true, default-features = false, features = ["std"] } thiserror = "1.0.31" threadpool = { version = "1.8.1", optional = true, default-features = false } @@ -33,9 +33,10 @@ flate2 = "1.0.24" futures = "0.3.28" indoc = "1.0.6" md5 = "0.7.0" -rustls-pemfile = "1.0.0" +rustls = { version = "0.23", default-features = false, features = ["std", "ring"] } +rustls-pki-types= "1.10" serde = { version = "1", features = ["derive"] } serde_json = "1" -tokio = { version = "1.29.1", features = ["full"] } -tokio-tungstenite = "0.19.0" -tungstenite = "0.17.3" +tokio = { version = "1.43", features = ["full"] } +tokio-tungstenite = "0.26" +tungstenite = "0.26" diff --git a/examples/rustls.rs b/examples/rustls.rs index aa85842..cc0dd29 100644 --- a/examples/rustls.rs +++ b/examples/rustls.rs @@ -11,9 +11,11 @@ fn main() -> std::io::Result<()> { sync::Arc, }; - use rustls::{ServerConfig, ServerConnection, StreamOwned}; + use rustls::{crypto, ServerConfig, ServerConnection, StreamOwned}; use touche::{Response, Server, StatusCode}; + crypto::ring::default_provider().install_default().ok(); + let listener = TcpListener::bind("0.0.0.0:4444")?; let tls_cfg = { @@ -21,7 +23,6 @@ fn main() -> std::io::Result<()> { let key = certs::load_private_key("examples/tls/key.pem")?; let cfg = ServerConfig::builder() - .with_safe_defaults() .with_no_client_auth() .with_single_cert(certs, key) .map_err(|e| io::Error::new(Other, e))?; @@ -52,29 +53,18 @@ fn main() -> std::io::Result<()> { #[cfg(feature = "rustls")] mod certs { - use std::{ - fs, - io::{self, ErrorKind::Other}, - }; + use std::io::{self, ErrorKind::Other}; - use rustls::{Certificate, PrivateKey}; - use rustls_pemfile as pem; + use rustls_pki_types::{pem::PemObject, CertificateDer, PrivateKeyDer}; - pub fn load_certs(filename: &str) -> io::Result> { - let certfile = fs::File::open(filename)?; - let mut reader = io::BufReader::new(certfile); - - let certs = pem::certs(&mut reader).map_err(|err| io::Error::new(Other, err))?; - - Ok(certs.into_iter().map(Certificate).collect()) + pub fn load_certs(filename: &str) -> io::Result>> { + CertificateDer::pem_file_iter(filename) + .map_err(|err| io::Error::new(Other, err))? + .map(|cert| cert.map_err(|err| io::Error::new(Other, err))) + .collect() } - pub fn load_private_key(filename: &str) -> io::Result { - let keyfile = fs::File::open(filename)?; - let mut reader = io::BufReader::new(keyfile); - - let keys = pem::rsa_private_keys(&mut reader).map_err(|err| io::Error::new(Other, err))?; - - Ok(PrivateKey(keys[0].clone())) + pub fn load_private_key(filename: &str) -> io::Result> { + PrivateKeyDer::from_pem_file(filename).map_err(|err| io::Error::new(Other, err)) } } diff --git a/examples/websocket-chat.rs b/examples/websocket-chat.rs index 0b216aa..9d5c44e 100644 --- a/examples/websocket-chat.rs +++ b/examples/websocket-chat.rs @@ -57,15 +57,16 @@ fn main() -> std::io::Result<()> { let write_ws = thread::spawn(move || { for evt in rx { - let msg = tungstenite::Message::Text(serde_json::to_string(&evt).unwrap()); - if write_ws.write_message(msg).is_err() { + let msg = + tungstenite::Message::Text(serde_json::to_string(&evt).unwrap().into()); + if write_ws.send(msg).is_err() { break; } } }); let read_ws = thread::spawn(move || { - while let Ok(msg) = read_ws.read_message() { + while let Ok(msg) = read_ws.read() { match msg.to_text() { Ok(text) => { let text = text.to_owned(); diff --git a/examples/websocket.rs b/examples/websocket.rs index c4d9751..6b56164 100644 --- a/examples/websocket.rs +++ b/examples/websocket.rs @@ -10,8 +10,8 @@ fn main() -> std::io::Result<()> { Ok::<_, Box>(res.upgrade(|stream: Connection| { let mut ws = WebSocket::from_raw_socket(stream, Role::Server, None); - while let Ok(msg) = ws.read_message() { - if msg.is_text() && ws.write_message(msg).is_err() { + while let Ok(msg) = ws.read() { + if msg.is_text() && ws.send(msg).is_err() { break; } } diff --git a/src/upgrade.rs b/src/upgrade.rs index e223bc2..3639728 100644 --- a/src/upgrade.rs +++ b/src/upgrade.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use thiserror::Error; use crate::connection::Connection; @@ -12,8 +14,9 @@ impl UpgradeHandler for F { } } +#[derive(Clone)] pub(crate) struct UpgradeExtension { - pub(crate) handler: Box, + pub(crate) handler: Arc, } pub trait Upgrade { @@ -23,7 +26,7 @@ pub trait Upgrade { impl Upgrade for http::response::Builder { fn upgrade(self, handle: impl UpgradeHandler + 'static) -> Self { self.extension(UpgradeExtension { - handler: Box::new(handle), + handler: Arc::new(handle), }) } } @@ -31,7 +34,7 @@ impl Upgrade for http::response::Builder { impl Upgrade for http::Response { fn upgrade(mut self, handle: impl UpgradeHandler + 'static) -> Self { self.extensions_mut().insert(UpgradeExtension { - handler: Box::new(handle), + handler: Arc::new(handle), }); self }