Use a "use-*" prefix for the TLS features

pull/166/head
Dominik Nakamura 4 years ago
parent e9aaf9b1e9
commit d4e2d3ecd8
No known key found for this signature in database
GPG Key ID: E4C6A749B2491910
  1. 5
      Cargo.toml
  2. 6
      src/client.rs
  3. 22
      src/error.rs
  4. 4
      src/lib.rs
  5. 8
      src/stream.rs
  6. 6
      tests/connection_reset.rs

@ -17,8 +17,9 @@ features = ["native-tls"]
[features]
default = []
native-tls-vendored = ["native-tls", "native-tls/vendored"]
rustls-tls = ["rustls", "webpki", "webpki-roots"]
use-native-tls = ["native-tls"]
use-native-tls-vendored = ["use-native-tls", "native-tls/vendored"]
use-rustls = ["rustls", "webpki", "webpki-roots"]
[dependencies]
base64 = "0.13.0"

@ -16,7 +16,7 @@ use crate::{
protocol::WebSocketConfig,
};
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
mod encryption {
pub use native_tls::TlsStream;
use native_tls::{HandshakeError as TlsHandshakeError, TlsConnector};
@ -47,7 +47,7 @@ mod encryption {
}
}
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
mod encryption {
use rustls::ClientConfig;
pub use rustls::{ClientSession, StreamOwned};
@ -80,7 +80,7 @@ mod encryption {
}
}
#[cfg(not(any(feature = "native-tls", feature = "rustls-tls")))]
#[cfg(not(any(feature = "use-native-tls", feature = "use-rustls")))]
mod encryption {
use std::net::TcpStream;

@ -5,13 +5,13 @@ use std::{borrow::Cow, error::Error as ErrorTrait, fmt, io, result, str, string}
use crate::protocol::Message;
use http::Response;
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
pub mod tls {
//! TLS error wrapper module, feature-gated.
pub use native_tls::Error;
}
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
pub mod tls {
//! TLS error wrapper module, feature-gated.
pub use rustls::TLSError as Error;
@ -47,13 +47,13 @@ pub enum Error {
/// Input-output error. Apart from WouldBlock, these are generally errors with the
/// underlying connection and you should probably consider them fatal.
Io(io::Error),
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
/// TLS error
Tls(tls::Error),
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
/// TLS error
Tls(tls::Error),
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
/// DNS name resolution error.
Dns(tls::DnsError),
/// - When reading: buffer capacity exhausted.
@ -80,11 +80,11 @@ impl fmt::Display for Error {
Error::ConnectionClosed => write!(f, "Connection closed normally"),
Error::AlreadyClosed => write!(f, "Trying to work with closed connection"),
Error::Io(ref err) => write!(f, "IO error: {}", err),
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
Error::Tls(ref err) => write!(f, "TLS error: {}", err),
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
Error::Tls(ref err) => write!(f, "TLS error: {}", err),
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
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),
@ -153,21 +153,21 @@ impl From<http::Error> for Error {
}
}
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
impl From<tls::Error> for Error {
fn from(err: tls::Error) -> Self {
Error::Tls(err)
}
}
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
impl From<tls::Error> for Error {
fn from(err: tls::Error) -> Self {
Error::Tls(err)
}
}
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
impl From<tls::DnsError> for Error {
fn from(err: tls::DnsError) -> Self {
Error::Dns(err)

@ -30,5 +30,5 @@ pub use crate::{
server::{accept, accept_hdr},
};
#[cfg(all(feature = "native-tls", feature = "rustls-tls"))]
compile_error!("either \"native-tls\" or \"rustls-tls\" can be enabled, but not both.");
#[cfg(all(feature = "use-native-tls", feature = "use-rustls"))]
compile_error!("either \"use-native-tls\" or \"use-rustls\" can be enabled, but not both.");

@ -8,9 +8,9 @@ use std::io::{Read, Result as IoResult, Write};
use std::net::TcpStream;
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
use native_tls::TlsStream;
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
use rustls::StreamOwned as TlsStream;
/// Stream mode, either plain TCP or TLS.
@ -34,14 +34,14 @@ impl NoDelay for TcpStream {
}
}
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
impl<S: Read + Write + NoDelay> NoDelay for TlsStream<S> {
fn set_nodelay(&mut self, nodelay: bool) -> IoResult<()> {
self.get_mut().set_nodelay(nodelay)
}
}
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
impl<S: rustls::Session, T: Read + Write + NoDelay> NoDelay for TlsStream<S, T> {
fn set_nodelay(&mut self, nodelay: bool) -> IoResult<()> {
self.sock.set_nodelay(nodelay)

@ -1,6 +1,6 @@
//! Verifies that the server returns a `ConnectionClosed` error when the connection
//! is closedd from the server's point of view and drop the underlying tcp socket.
#![cfg(any(feature = "native-tls", feature = "rustls-tls"))]
#![cfg(any(feature = "use-native-tls", feature = "use-rustls"))]
use std::{
net::{TcpListener, TcpStream},
@ -13,9 +13,9 @@ use net2::TcpStreamExt;
use tungstenite::{accept, connect, stream::Stream, Error, Message, WebSocket};
use url::Url;
#[cfg(feature = "native-tls")]
#[cfg(feature = "use-native-tls")]
type Sock = WebSocket<Stream<TcpStream, native_tls::TlsStream<TcpStream>>>;
#[cfg(feature = "rustls-tls")]
#[cfg(feature = "use-rustls")]
type Sock = WebSocket<Stream<TcpStream, rustls::StreamOwned<rustls::ClientSession, TcpStream>>>;
fn do_test<CT, ST>(port: u16, client_task: CT, server_task: ST)

Loading…
Cancel
Save