From 24cae74484f71a2c0a4cc3cf1d101123f63bfe11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 13 Feb 2021 16:03:30 +0200 Subject: [PATCH] Update to tungstenite 0.13 And improve error mapping. Fixes https://github.com/sdroege/async-tungstenite/issues/79 --- Cargo.toml | 10 +++++----- src/async_std.rs | 6 ++++-- src/lib.rs | 6 ++++-- src/tokio/dummy_tls.rs | 4 +++- src/tokio/native_tls.rs | 6 ++++-- src/tokio/rustls.rs | 7 ++----- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 16ca9b8..12c026a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ license = "MIT" homepage = "https://github.com/sdroege/async-tungstenite" repository = "https://github.com/sdroege/async-tungstenite" documentation = "https://docs.rs/async-tungstenite" -version = "0.12.0" +version = "0.13.0" edition = "2018" readme = "README.md" @@ -18,9 +18,9 @@ async-std-runtime = ["async-std"] tokio-runtime = ["tokio"] gio-runtime = ["gio", "glib"] async-tls = ["real-async-tls"] -async-native-tls = ["async-std-runtime", "real-async-native-tls"] -tokio-native-tls = ["tokio-runtime", "real-tokio-native-tls", "real-native-tls", "tungstenite/tls"] -tokio-rustls = ["tokio-runtime", "real-tokio-rustls", "webpki-roots"] +async-native-tls = ["async-std-runtime", "real-async-native-tls", "tungstenite/native-tls"] +tokio-native-tls = ["tokio-runtime", "real-tokio-native-tls", "real-native-tls", "tungstenite/native-tls"] +tokio-rustls = ["tokio-runtime", "real-tokio-rustls", "webpki-roots", "tungstenite/rustls-tls"] tokio-openssl = ["tokio-runtime", "real-tokio-openssl", "openssl"] [package.metadata.docs.rs] @@ -33,7 +33,7 @@ futures-io = { version = "0.3", default-features = false, features = ["std"] } pin-project-lite = "0.2" [dependencies.tungstenite] -version = "0.12.0" +version = "0.13.0" default-features = false [dependencies.async-std] diff --git a/src/async_std.rs b/src/async_std.rs index 1805ca8..bb61263 100644 --- a/src/async_std.rs +++ b/src/async_std.rs @@ -58,7 +58,7 @@ pub(crate) mod async_native_tls { connector .connect(&domain, socket) .await - .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))? + .map_err(|err| Error::Tls(err.into()))? }; Ok(StreamSwitcher::Tls(stream)) } @@ -116,7 +116,9 @@ pub(crate) mod dummy_tls { { match mode { Mode::Plain => Ok(socket), - Mode::Tls => Err(Error::Url("TLS support not compiled in.".into())), + Mode::Tls => Err(Error::Url( + tungstenite::error::UrlError::TlsFeatureNotEnabled, + )), } } diff --git a/src/lib.rs b/src/lib.rs index 1e251f5..8501978 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -370,7 +370,9 @@ pub(crate) fn domain( ) -> Result { match request.uri().host() { Some(d) => Ok(d.to_string()), - None => Err(tungstenite::Error::Url("no host name in the url".into())), + None => Err(tungstenite::Error::Url( + tungstenite::error::UrlError::NoHostName, + )), } } @@ -392,5 +394,5 @@ pub(crate) fn port( Some("ws") => Some(80), _ => None, }) - .ok_or_else(|| tungstenite::Error::Url("Url scheme not supported".into())) + .ok_or_else(|| tungstenite::Error::Url(tungstenite::error::UrlError::UnsupportedUrlScheme)) } diff --git a/src/tokio/dummy_tls.rs b/src/tokio/dummy_tls.rs index 1dd2a38..ecf3550 100644 --- a/src/tokio/dummy_tls.rs +++ b/src/tokio/dummy_tls.rs @@ -22,7 +22,9 @@ where { match mode { Mode::Plain => Ok(TokioAdapter::new(socket)), - Mode::Tls => Err(Error::Url("TLS support not compiled in.".into())), + Mode::Tls => Err(Error::Url( + tungstenite::error::UrlError::TlsFeatureNotEnabled, + )), } } diff --git a/src/tokio/native_tls.rs b/src/tokio/native_tls.rs index ae27281..50a93e7 100644 --- a/src/tokio/native_tls.rs +++ b/src/tokio/native_tls.rs @@ -34,13 +34,15 @@ where let connector = if let Some(connector) = connector { connector } else { - let connector = real_native_tls::TlsConnector::builder().build()?; + let connector = real_native_tls::TlsConnector::builder() + .build() + .map_err(|err| Error::Tls(err.into()))?; AsyncTlsConnector::from(connector) }; connector .connect(&domain, socket) .await - .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))? + .map_err(|err| Error::Tls(err.into()))? }; Ok(StreamSwitcher::Tls(TokioAdapter::new(stream))) } diff --git a/src/tokio/rustls.rs b/src/tokio/rustls.rs index 8b1a9cf..f7ceaab 100644 --- a/src/tokio/rustls.rs +++ b/src/tokio/rustls.rs @@ -42,11 +42,8 @@ where TlsConnector::from(std::sync::Arc::new(config)) }; let domain = DNSNameRef::try_from_ascii_str(&domain) - .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))?; - connector - .connect(domain, socket) - .await - .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, err))? + .map_err(|err| Error::Tls(err.into()))?; + connector.connect(domain, socket).await? }; Ok(StreamSwitcher::Tls(TokioAdapter::new(stream))) }