From 2566d930bf55a9dc00beda51f8d186c1fac9c928 Mon Sep 17 00:00:00 2001 From: Emi Tatsuo Date: Thu, 10 Dec 2020 14:51:40 -0500 Subject: [PATCH 1/2] Remove dependency on async-std & async-tls in maj, upgrade Tokio Still gotta patch out the other crates tho --- Cargo.toml | 12 +++--------- src/server/files.rs | 6 +++--- src/server/mod.rs | 19 ++++++++----------- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a494d5c..c4227c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,6 @@ repository = "https://tulpa.dev/cadey/maj" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -async-std = { version = "1.6", optional = true } -async-tls = { default-features = false, optional = true, version = "0" } async-trait = { version = "0", optional = true } log = "0.4" mime_guess = "2.0" @@ -19,11 +17,11 @@ num = "0.2" num-derive = "0.3" num-traits = "0.2" once_cell = "1.4" -rustls = { version = "0.18", optional = true, features = ["dangerous_configuration"] } +rustls = { version = "0.19", optional = true, features = ["dangerous_configuration"] } structopt = "0.3" thiserror = "1" -tokio-rustls = { version = "0.14", features = ["dangerous_configuration"], optional = true } -tokio = { version = "0.2", features = ["full"], optional = true } +tokio-rustls = { version = "0.21", features = ["dangerous_configuration"], optional = true } +tokio = { version = "0.3", features = ["full"], optional = true } url = "2" webpki-roots = { version = "0.20", optional = true } webpki = { version = "0.21.0", optional = true } @@ -41,8 +39,6 @@ client = [ "webpki", "webpki-roots", "tokio", - "async-std", - "async-tls/client" ] server = [ @@ -50,8 +46,6 @@ server = [ "webpki", "webpki-roots", "async-trait", - "async-std", - "async-tls/server" ] [workspace] diff --git a/src/server/files.rs b/src/server/files.rs index bceb1a7..b4b735c 100644 --- a/src/server/files.rs +++ b/src/server/files.rs @@ -26,7 +26,7 @@ impl MajHandler for Handler { log::debug!("opening file {:?}", path); - match async_std::fs::metadata(&path).await { + match tokio::fs::metadata(&path).await { Ok(stat) => { if stat.is_dir() { if r.url.as_str().ends_with('/') { @@ -43,9 +43,9 @@ impl MajHandler for Handler { } } - let mut file = async_std::fs::File::open(&path).await?; + let mut file = tokio::fs::File::open(&path).await?; let mut buf: Vec = Vec::new(); - async_std::io::copy(&mut file, &mut buf).await?; + tokio::io::copy(&mut file, &mut buf).await?; // Send header. if path.extension() == Some(OsStr::new("gmi")) diff --git a/src/server/mod.rs b/src/server/mod.rs index 5562919..884c287 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,11 +1,10 @@ use crate::{Response, StatusCode}; -use async_std::{ - io::prelude::*, +use tokio::{ + prelude::*, net::{TcpListener, TcpStream}, - stream::StreamExt, task, }; -use async_tls::TlsAcceptor; +use tokio_rustls::TlsAcceptor; use async_trait::async_trait; use rustls::Certificate; use std::{error::Error as StdError, net::SocketAddr, sync::Arc}; @@ -53,12 +52,10 @@ where { let cfg = Arc::new(cfg); let listener = TcpListener::bind(&format!("{}:{}", host, port)).await?; - let mut incoming = listener.incoming(); let acceptor = Arc::new(TlsAcceptor::from(cfg.clone())); - while let Some(Ok(stream)) = incoming.next().await { + while let Ok((stream, addr)) = listener.accept().await { let h = h.clone(); let acceptor = acceptor.clone(); - let addr = stream.peer_addr().unwrap(); let port = port.clone(); task::spawn(handle_request(h, stream, acceptor, addr, port)); @@ -83,7 +80,7 @@ async fn handle_request( if let Some(u_port) = url.port() { if port != u_port { let _ = write_header( - &mut stream, + stream, StatusCode::ProxyRequestRefused, "Cannot proxy to that URL", ) @@ -117,7 +114,7 @@ async fn handle_request( Ok(()) } -pub async fn write_header( +pub async fn write_header( mut stream: W, status: StatusCode, meta: &str, @@ -129,7 +126,7 @@ pub async fn write_header( } /// Return the URL requested by the client. -async fn parse_request(mut stream: R) -> Result { +async fn parse_request(mut stream: R) -> Result { // Because requests are limited to 1024 bytes (plus 2 bytes for CRLF), we // can use a fixed-sized buffer on the stack, avoiding allocations and // copying, and stopping bad clients from making us use too much memory. @@ -167,7 +164,7 @@ async fn handle( stream: &mut T, addr: SocketAddr, ) where - T: Write + Unpin, + T: AsyncWrite + Unpin, { let u = req.url.clone(); match h.handle(req).await { From aaac9d0c934e5ab6504461c3a9684cb9f1bcedf0 Mon Sep 17 00:00:00 2001 From: Emi Tatsuo Date: Fri, 11 Dec 2020 10:07:01 -0500 Subject: [PATCH 2/2] Updated other workspace members --- Cargo.toml | 6 ++---- majc/Cargo.toml | 2 +- pilno/karnycukta/Cargo.toml | 5 ++--- site/Cargo.toml | 4 ++-- site/src/main.rs | 7 ++++--- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c4227c5..7d3a86b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,8 +20,8 @@ once_cell = "1.4" rustls = { version = "0.19", optional = true, features = ["dangerous_configuration"] } structopt = "0.3" thiserror = "1" -tokio-rustls = { version = "0.21", features = ["dangerous_configuration"], optional = true } -tokio = { version = "0.3", features = ["full"], optional = true } +tokio-rustls = { version = "0.21", features = ["dangerous_configuration"] } +tokio = { version = "0.3", features = ["full"] } url = "2" webpki-roots = { version = "0.20", optional = true } webpki = { version = "0.21.0", optional = true } @@ -35,10 +35,8 @@ pretty_env_logger = "0.4" default = ["client", "server"] client = [ - "tokio-rustls", "webpki", "webpki-roots", - "tokio", ] server = [ diff --git a/majc/Cargo.toml b/majc/Cargo.toml index d5b75c9..fc3c021 100644 --- a/majc/Cargo.toml +++ b/majc/Cargo.toml @@ -11,7 +11,7 @@ cursive = "0.15" log = "0.4" url = "2" webpki = "0.21.0" -rustls = { version = "0.18", features = ["dangerous_configuration"] } +rustls = { version = "0.19", features = ["dangerous_configuration"] } smol = { version = "0.3", features = ["tokio02"] } maj = { path = ".." } diff --git a/pilno/karnycukta/Cargo.toml b/pilno/karnycukta/Cargo.toml index 5a75a51..5c1c53d 100644 --- a/pilno/karnycukta/Cargo.toml +++ b/pilno/karnycukta/Cargo.toml @@ -8,15 +8,14 @@ edition = "2018" [dependencies] anyhow = "1" -async-std = "1.5" async-trait = "0" atom_syndication = "0.9" chrono = "*" log = "0" pretty_env_logger = "0.4" webpki = "0.21.0" -rustls = { version = "0.18", features = ["dangerous_configuration"] } +rustls = { version = "0.19", features = ["dangerous_configuration"] } structopt = "0.3" -tokio = { version = "0.2", features = ["full"] } +tokio = { version = "0.3", features = ["full"] } maj = { path = "../..", features = ["server", "client"], default-features = false } diff --git a/site/Cargo.toml b/site/Cargo.toml index 87b29b7..5c42166 100644 --- a/site/Cargo.toml +++ b/site/Cargo.toml @@ -9,7 +9,6 @@ build = "build.rs" [dependencies] anyhow = "1" -async-std = "1.5" async-trait = "0" dnd_dice_roller = "0.3" env_logger = "0" @@ -17,13 +16,14 @@ log = "0" mime = "0.3.0" percent-encoding = "2" rand = "0" -rustls = { version = "0.18", features = ["dangerous_configuration"] } +rustls = { version = "0.19", features = ["dangerous_configuration"] } serde = { version = "1", features = ["derive"] } serde_json = "1" smol = { version = "0.3", features = ["tokio02"] } structopt = "0.3" url = "2" warp = "0.2" +tokio = { version = "0.3", features = ["rt"] } maj = { path = "..", features = ["server"], default-features = false } diff --git a/site/src/main.rs b/site/src/main.rs index 229d07f..2270953 100644 --- a/site/src/main.rs +++ b/site/src/main.rs @@ -1,8 +1,8 @@ -use async_std::task; use rustls::{ internal::pemfile::{certs, pkcs8_private_keys}, AllowAnyAnonymousOrAuthenticatedClient, Certificate, PrivateKey, RootCertStore, ServerConfig, }; + use std::{ fs::File, io::{self, BufReader}, @@ -64,7 +64,8 @@ fn load_keys(path: &Path) -> io::Result> { .map_err(|_| io::Error::new(io::ErrorKind::InvalidInput, "invalid key")) } -fn main() -> Result<(), maj::server::Error> { +#[tokio::main] +async fn main() -> Result<(), maj::server::Error> { env_logger::init(); let opts = Options::from_args(); let certs = load_certs(&opts.cert).unwrap(); @@ -96,7 +97,7 @@ fn main() -> Result<(), maj::server::Error> { thread::spawn(move || http::run(h.clone(), port)); } - task::block_on(maj::server::serve(h.clone(), config, opts.host, opts.port))?; + maj::server::serve(h.clone(), config, opts.host, opts.port).await?; Ok(()) }