From 2bc1aa315f54a4e5c13f6d2c70c74f88f7b88c0e Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Mon, 27 Jul 2020 20:01:09 -0400 Subject: [PATCH] use async-std and tokio i guess --- CHANGELOG.md | 2 +- Cargo.toml | 5 ++++- src/client.rs | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 109c639..69b7288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 0.4.0 -Tokio has been purged. This crate now uses async-std. +Tokio has been somewhat purged. ## 0.3.0 diff --git a/Cargo.toml b/Cargo.toml index 6b6fe9b..01dfe8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,10 @@ num = "0.2" num-derive = "0.3" num-traits = "0.2" rustls = { version = "0.18", optional = true, features = ["dangerous_configuration"] } +tokio-rustls = { version = "0.14", features = ["dangerous_configuration"], optional = true } webpki = { version = "0.21.0", optional = true } webpki-roots = { version = "0.20", optional = true } +tokio = { version = "0.2", features = ["full"], optional = true } async-tls = { version = "0.9.0", default-features = false, optional = true } async-std = { version = "1.6", optional = true } log = "0.4" @@ -32,9 +34,10 @@ pretty_env_logger = "0.4" default = ["client", "server"] client = [ - "rustls", + "tokio-rustls", "webpki", "webpki-roots", + "tokio", "async-std", "async-tls/client" ] diff --git a/src/client.rs b/src/client.rs index 07d0a23..e1db0a6 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,8 +1,13 @@ use crate::Response; -use async_std::{io::prelude::*, net::TcpStream}; -use async_tls::TlsConnector; -use rustls::TLSError; use std::{io::Cursor, sync::Arc}; +use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::TcpStream, +}; +use tokio_rustls::{ + rustls::{TLSError}, + TlsConnector, +}; use url::Url; #[derive(thiserror::Error, Debug)] @@ -26,7 +31,7 @@ pub enum Error { InvalidScheme(String), } -pub async fn get(u: T, cfg: rustls::ClientConfig) -> Result +pub async fn get(u: T, cfg: tokio_rustls::rustls::ClientConfig) -> Result where T: Into, { @@ -42,10 +47,11 @@ where let cfg = Arc::new(cfg); let host = ur.host_str().unwrap(); + let name_ref = webpki::DNSNameRef::try_from_ascii_str(host)?; let config = TlsConnector::from(cfg); let sock = TcpStream::connect(&format!("{}:{}", host, ur.port().unwrap())).await?; - let mut tls = config.connect(host, sock).await?; + let mut tls = config.connect(name_ref, sock).await?; let req = format!("{}\r\n", u); log::trace!("writing request {:?}", req); @@ -57,6 +63,8 @@ where #[cfg(test)] mod tests { + use tokio_rustls::rustls; + fn config() -> rustls::ClientConfig { let mut config = rustls::ClientConfig::new(); config