Switch trust-dns to an off-by-default optional feature

This commit is contained in:
Sean McArthur
2019-01-11 16:12:17 -08:00
parent 81b4d26682
commit 4d221533a2
5 changed files with 25 additions and 17 deletions

View File

@@ -26,6 +26,9 @@ matrix:
- rust: stable - rust: stable
env: FEATURES="--features hyper-011" env: FEATURES="--features hyper-011"
- rust: stable
env: FEATURES="--features trust-dns"
# android # android
- rust: stable - rust: stable
env: TARGET=aarch64-linux-android env: TARGET=aarch64-linux-android

View File

@@ -31,6 +31,7 @@ tokio-executor = "0.1.4" # a minimum version so trust-dns-resolver compiles
tokio-io = "0.1" tokio-io = "0.1"
tokio-threadpool = "0.1.8" # a minimum version so tokio compiles tokio-threadpool = "0.1.8" # a minimum version so tokio compiles
tokio-timer = "0.2.6" # a minimum version so trust-dns-resolver compiles tokio-timer = "0.2.6" # a minimum version so trust-dns-resolver compiles
trust-dns-resolver = { version = "0.10", optional = true }
url = "1.2" url = "1.2"
uuid = { version = "0.7", features = ["v4"] } uuid = { version = "0.7", features = ["v4"] }
hyper-rustls = { version = "0.15", optional = true } hyper-rustls = { version = "0.15", optional = true }
@@ -38,12 +39,10 @@ tokio-rustls = { version = "0.8", optional = true }
webpki-roots = { version = "0.15", optional = true } webpki-roots = { version = "0.15", optional = true }
rustls = { version = "0.14", features = ["dangerous_configuration"], optional = true } rustls = { version = "0.14", features = ["dangerous_configuration"], optional = true }
[target.'cfg(not(any(target_os = "android", windows)))'.dependencies]
trust-dns-resolver = "0.10"
[dev-dependencies] [dev-dependencies]
env_logger = "0.6" env_logger = "0.6"
serde_derive = "1.0" serde_derive = "1.0"
tokio-tcp = "0.1"
[features] [features]
default = ["default-tls"] default = ["default-tls"]
@@ -55,6 +54,8 @@ default-tls-vendored = ["default-tls", "native-tls/vendored"]
rustls-tls = ["hyper-rustls", "tokio-rustls", "webpki-roots", "rustls", "tls"] rustls-tls = ["hyper-rustls", "tokio-rustls", "webpki-roots", "rustls", "tls"]
trust-dns = ["trust-dns-resolver"]
hyper-011 = ["hyper-old-types"] hyper-011 = ["hyper-old-types"]
[package.metadata.docs.rs] [package.metadata.docs.rs]

View File

@@ -13,13 +13,13 @@ use bytes::BufMut;
use std::io; use std::io;
use std::sync::Arc; use std::sync::Arc;
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
use dns::TrustDnsResolver; use dns::TrustDnsResolver;
use Proxy; use Proxy;
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
type HttpConnector = ::hyper::client::HttpConnector<TrustDnsResolver>; type HttpConnector = ::hyper::client::HttpConnector<TrustDnsResolver>;
#[cfg(any(target_os = "android", windows))] #[cfg(not(feature = "trust-dns"))]
type HttpConnector = ::hyper::client::HttpConnector; type HttpConnector = ::hyper::client::HttpConnector;
@@ -74,14 +74,14 @@ impl Connector {
} }
} }
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
fn http_connector() -> ::Result<HttpConnector> { fn http_connector() -> ::Result<HttpConnector> {
TrustDnsResolver::new() TrustDnsResolver::new()
.map(HttpConnector::new_with_resolver) .map(HttpConnector::new_with_resolver)
.map_err(::error::dns_system_conf) .map_err(::error::dns_system_conf)
} }
#[cfg(any(target_os = "android", windows))] #[cfg(not(feature = "trust-dns"))]
fn http_connector() -> ::Result<HttpConnector> { fn http_connector() -> ::Result<HttpConnector> {
Ok(HttpConnector::new(4)) Ok(HttpConnector::new(4))
} }
@@ -279,12 +279,14 @@ fn tunnel_eof() -> io::Error {
#[cfg(feature = "tls")] #[cfg(feature = "tls")]
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
extern crate tokio_tcp;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::net::TcpListener; use std::net::TcpListener;
use std::thread; use std::thread;
use futures::Future; use futures::Future;
use tokio::runtime::current_thread::Runtime; use tokio::runtime::current_thread::Runtime;
use tokio::net::TcpStream; use self::tokio_tcp::TcpStream;
use super::tunnel; use super::tunnel;
use proxy; use proxy;

View File

@@ -140,7 +140,7 @@ impl Error {
Kind::NativeTls(ref e) => Some(e), Kind::NativeTls(ref e) => Some(e),
#[cfg(feature = "rustls-tls")] #[cfg(feature = "rustls-tls")]
Kind::Rustls(ref e) => Some(e), Kind::Rustls(ref e) => Some(e),
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
Kind::DnsSystemConf(ref e) => Some(e), Kind::DnsSystemConf(ref e) => Some(e),
Kind::Io(ref e) => Some(e), Kind::Io(ref e) => Some(e),
Kind::UrlEncoded(ref e) => Some(e), Kind::UrlEncoded(ref e) => Some(e),
@@ -239,7 +239,7 @@ impl fmt::Display for Error {
Kind::NativeTls(ref e) => fmt::Display::fmt(e, f), Kind::NativeTls(ref e) => fmt::Display::fmt(e, f),
#[cfg(feature = "rustls-tls")] #[cfg(feature = "rustls-tls")]
Kind::Rustls(ref e) => fmt::Display::fmt(e, f), Kind::Rustls(ref e) => fmt::Display::fmt(e, f),
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
Kind::DnsSystemConf(ref e) => { Kind::DnsSystemConf(ref e) => {
write!(f, "failed to load DNS system conf: {}", e) write!(f, "failed to load DNS system conf: {}", e)
}, },
@@ -274,7 +274,7 @@ impl StdError for Error {
Kind::NativeTls(ref e) => e.description(), Kind::NativeTls(ref e) => e.description(),
#[cfg(feature = "rustls-tls")] #[cfg(feature = "rustls-tls")]
Kind::Rustls(ref e) => e.description(), Kind::Rustls(ref e) => e.description(),
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
Kind::DnsSystemConf(_) => "failed to load DNS system conf", Kind::DnsSystemConf(_) => "failed to load DNS system conf",
Kind::Io(ref e) => e.description(), Kind::Io(ref e) => e.description(),
Kind::UrlEncoded(ref e) => e.description(), Kind::UrlEncoded(ref e) => e.description(),
@@ -299,7 +299,7 @@ impl StdError for Error {
Kind::NativeTls(ref e) => e.cause(), Kind::NativeTls(ref e) => e.cause(),
#[cfg(feature = "rustls-tls")] #[cfg(feature = "rustls-tls")]
Kind::Rustls(ref e) => e.cause(), Kind::Rustls(ref e) => e.cause(),
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
Kind::DnsSystemConf(ref e) => e.cause(), Kind::DnsSystemConf(ref e) => e.cause(),
Kind::Io(ref e) => e.cause(), Kind::Io(ref e) => e.cause(),
Kind::UrlEncoded(ref e) => e.cause(), Kind::UrlEncoded(ref e) => e.cause(),
@@ -326,7 +326,7 @@ pub(crate) enum Kind {
NativeTls(::native_tls::Error), NativeTls(::native_tls::Error),
#[cfg(feature = "rustls-tls")] #[cfg(feature = "rustls-tls")]
Rustls(::rustls::TLSError), Rustls(::rustls::TLSError),
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
DnsSystemConf(io::Error), DnsSystemConf(io::Error),
Io(io::Error), Io(io::Error),
UrlEncoded(::serde_urlencoded::ser::Error), UrlEncoded(::serde_urlencoded::ser::Error),
@@ -501,7 +501,7 @@ pub(crate) fn url_bad_scheme(url: Url) -> Error {
Error::new(Kind::UrlBadScheme, Some(url)) Error::new(Kind::UrlBadScheme, Some(url))
} }
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
pub(crate) fn dns_system_conf(io: io::Error) -> Error { pub(crate) fn dns_system_conf(io: io::Error) -> Error {
Error::new(Kind::DnsSystemConf(io), None) Error::new(Kind::DnsSystemConf(io), None)
} }

View File

@@ -155,6 +155,8 @@
//! `native-tls` library to connect over HTTPS. //! `native-tls` library to connect over HTTPS.
//! - **default-tls-vendored**: Enables the `vendored` feature of `native-tls`. //! - **default-tls-vendored**: Enables the `vendored` feature of `native-tls`.
//! - **rustls-tls**: Provides TLS support via the `rustls` library. //! - **rustls-tls**: Provides TLS support via the `rustls` library.
//! - **trust-dns**: Enables a trust-dns async resolver instead of default
//! threadpool using `getaddrinfo`.
//! - **hyper-011**: Provides support for hyper's old typed headers. //! - **hyper-011**: Provides support for hyper's old typed headers.
//! //!
//! //!
@@ -196,7 +198,7 @@ extern crate serde_urlencoded;
extern crate tokio; extern crate tokio;
#[cfg_attr(feature = "default-tls", macro_use)] #[cfg_attr(feature = "default-tls", macro_use)]
extern crate tokio_io; extern crate tokio_io;
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
extern crate trust_dns_resolver; extern crate trust_dns_resolver;
extern crate url; extern crate url;
extern crate uuid; extern crate uuid;
@@ -238,7 +240,7 @@ mod connect;
mod connect_async; mod connect_async;
mod body; mod body;
mod client; mod client;
#[cfg(not(any(target_os = "android", windows)))] #[cfg(feature = "trust-dns")]
mod dns; mod dns;
mod into_url; mod into_url;
mod proxy; mod proxy;