From de808a3a0100fcacf65586ed3edfd3c313510154 Mon Sep 17 00:00:00 2001 From: Dominik Nakamura Date: Tue, 12 Jan 2021 09:55:18 +0900 Subject: [PATCH] Only enable rustls if native-tls is not enabled --- src/client.rs | 2 +- src/error.rs | 14 +++++++------- src/lib.rs | 3 --- src/stream.rs | 4 ++-- tests/connection_reset.rs | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/client.rs b/src/client.rs index 8330e02..9ba9f24 100644 --- a/src/client.rs +++ b/src/client.rs @@ -47,7 +47,7 @@ mod encryption { } } -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] mod encryption { use rustls::ClientConfig; pub use rustls::{ClientSession, StreamOwned}; diff --git a/src/error.rs b/src/error.rs index 4ab05a1..c7fe872 100644 --- a/src/error.rs +++ b/src/error.rs @@ -11,7 +11,7 @@ pub mod tls { pub use native_tls::Error; } -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] pub mod tls { //! TLS error wrapper module, feature-gated. pub use rustls::TLSError as Error; @@ -50,10 +50,10 @@ pub enum Error { #[cfg(feature = "use-native-tls")] /// TLS error Tls(tls::Error), - #[cfg(feature = "use-rustls")] + #[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] /// TLS error Tls(tls::Error), - #[cfg(feature = "use-rustls")] + #[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] /// DNS name resolution error. Dns(tls::DnsError), /// - When reading: buffer capacity exhausted. @@ -82,9 +82,9 @@ impl fmt::Display for Error { Error::Io(ref err) => write!(f, "IO error: {}", err), #[cfg(feature = "use-native-tls")] Error::Tls(ref err) => write!(f, "TLS error: {}", err), - #[cfg(feature = "use-rustls")] + #[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] Error::Tls(ref err) => write!(f, "TLS error: {}", err), - #[cfg(feature = "use-rustls")] + #[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] Error::Dns(ref err) => write!(f, "Invalid DNS name: {}", err), Error::Capacity(ref msg) => write!(f, "Space limit exceeded: {}", msg), Error::Protocol(ref msg) => write!(f, "WebSocket protocol error: {}", msg), @@ -160,14 +160,14 @@ impl From for Error { } } -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] impl From for Error { fn from(err: tls::Error) -> Self { Error::Tls(err) } } -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] impl From for Error { fn from(err: tls::DnsError) -> Self { Error::Dns(err) diff --git a/src/lib.rs b/src/lib.rs index 9b1b8e0..82f7822 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -29,6 +29,3 @@ pub use crate::{ protocol::{Message, WebSocket}, server::{accept, accept_hdr}, }; - -#[cfg(all(feature = "use-native-tls", feature = "use-rustls"))] -compile_error!("either \"use-native-tls\" or \"use-rustls\" can be enabled, but not both."); diff --git a/src/stream.rs b/src/stream.rs index 3cdd3ca..4978b80 100644 --- a/src/stream.rs +++ b/src/stream.rs @@ -10,7 +10,7 @@ use std::net::TcpStream; #[cfg(feature = "use-native-tls")] use native_tls::TlsStream; -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] use rustls::StreamOwned as TlsStream; /// Stream mode, either plain TCP or TLS. @@ -41,7 +41,7 @@ impl NoDelay for TlsStream { } } -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] impl NoDelay for TlsStream { fn set_nodelay(&mut self, nodelay: bool) -> IoResult<()> { self.sock.set_nodelay(nodelay) diff --git a/tests/connection_reset.rs b/tests/connection_reset.rs index 6edbd74..3bcd65f 100644 --- a/tests/connection_reset.rs +++ b/tests/connection_reset.rs @@ -15,7 +15,7 @@ use url::Url; #[cfg(feature = "use-native-tls")] type Sock = WebSocket>>; -#[cfg(feature = "use-rustls")] +#[cfg(all(feature = "use-rustls", not(feature = "use-native-tls")))] type Sock = WebSocket>>; fn do_test(port: u16, client_task: CT, server_task: ST)