Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ jobs:

runs-on: ${{ matrix.os || 'ubuntu-latest' }}

env:
AWS_LC_SYS_PREBUILT_NASM: ${{ matrix.aws_lc_sys_prebuilt_nasm || 0 }}

# The build matrix does not yet support 'allow failures' at job level.
# See `jobs.nightly` for the active nightly job definition.
strategy:
Expand Down Expand Up @@ -105,22 +108,25 @@ jobs:
os: windows-latest
target: x86_64-pc-windows-msvc
features: "--features blocking,gzip,brotli,zstd,deflate,query,form,json,multipart,stream"
aws_lc_sys_prebuilt_nasm: 1
- name: windows / stable-i686-msvc
os: windows-latest
target: i686-pc-windows-msvc
features: "--features blocking,gzip,brotli,zstd,deflate,query,form,json,multipart,stream"
aws_lc_sys_prebuilt_nasm: 1
- name: windows / stable-x86_64-gnu
os: windows-latest
rust: stable-x86_64-pc-windows-gnu
target: x86_64-pc-windows-gnu
features: "--features blocking,gzip,brotli,zstd,deflate,query,form,json,multipart,stream"
package_name: mingw-w64-x86_64-gcc
mingw64_path: "C:\\msys64\\mingw64\\bin"
aws_lc_sys_prebuilt_nasm: 1
- name: windows / stable-i686-gnu
os: windows-latest
rust: stable-i686-pc-windows-gnu
target: i686-pc-windows-gnu
features: "--features blocking,gzip,brotli,zstd,deflate,query,form,json,multipart,stream"
features: "--no-default-features --features blocking,gzip,brotli,zstd,deflate,query,form,json,multipart,stream,native-tls,http2"
package_name: mingw-w64-i686-gcc
mingw64_path: "C:\\msys64\\mingw32\\bin"

Expand Down Expand Up @@ -188,6 +194,16 @@ jobs:
if: matrix.mingw64_path
shell: bash

- name: Install x86_64 Clang & NASM
if: ${{ matrix.target == 'x86_64-pc-windows-gnu' }}
run: pacman.exe -Sy --noconfirm mingw-w64-x86_64-clang mingw-w64-x86_64-nasm
shell: bash

- name: Add libclang to the environment for windows x86_64-gnu
run: echo "LIBCLANG_PATH=C:\msys64\mingw64\bin" >> $env:GITHUB_ENV
if: ${{ matrix.target == 'x86_64-pc-windows-gnu' }}
shell: bash

- name: Update gcc
if: matrix.package_name
run: pacman.exe -Sy --noconfirm ${{ matrix.package_name }}
Expand Down Expand Up @@ -225,7 +241,7 @@ jobs:
- uses: Swatinem/rust-cache@v2

- name: check --feature-powerset
run: cargo hack --no-dev-deps check --feature-powerset --depth 2 --skip http3,__tls,__rustls,__rustls-ring,native-tls-vendored,trust-dns
run: cargo hack --no-dev-deps check --feature-powerset --depth 2 --skip http3,__tls,__rustls,__rustls-ring,__rustls-aws-lc-rs,native-tls-vendored,trust-dns
env:
RUSTFLAGS: "-D dead_code -D unused_imports"

Expand Down Expand Up @@ -290,6 +306,8 @@ jobs:
cargo clean
cargo update -Z minimal-versions
cargo update -p proc-macro2 --precise 1.0.87
cargo update -p aws-lc-rs --precise 1.13.1
cargo update -p aws-lc-sys --precise 0.29.0
cargo update -p openssl-sys
cargo update -p openssl
cargo check
Expand Down
18 changes: 8 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,11 @@ features = [
[features]
default = ["default-tls", "charset", "http2", "system-proxy"]

# Note: this doesn't enable the 'native-tls' feature, which adds specific
# functionality for it.
default-tls = ["dep:hyper-tls", "dep:native-tls-crate", "__tls", "dep:tokio-native-tls"]
default-tls = ["rustls-tls"]

http2 = ["h2", "hyper/http2", "hyper-util/http2", "hyper-rustls?/http2"]

# Enables native-tls specific functionality not available by default.
native-tls = ["default-tls"]
native-tls = ["dep:hyper-tls", "dep:native-tls-crate", "__tls", "dep:tokio-native-tls"]
native-tls-alpn = ["native-tls", "native-tls-crate?/alpn", "hyper-tls?/alpn"]
native-tls-vendored = ["native-tls", "native-tls-crate?/vendored"]

Expand All @@ -58,9 +55,9 @@ rustls-tls-manual-roots-no-provider = ["__rustls"]
rustls-tls-webpki-roots-no-provider = ["dep:webpki-roots", "hyper-rustls?/webpki-tokio", "__rustls"]
rustls-tls-native-roots-no-provider = ["dep:rustls-native-certs", "hyper-rustls?/native-tokio", "__rustls"]

rustls-tls-manual-roots = ["rustls-tls-manual-roots-no-provider", "__rustls-ring"]
rustls-tls-webpki-roots = ["rustls-tls-webpki-roots-no-provider", "__rustls-ring"]
rustls-tls-native-roots = ["rustls-tls-native-roots-no-provider", "__rustls-ring"]
rustls-tls-manual-roots = ["rustls-tls-manual-roots-no-provider", "__rustls-aws-lc-rs"]
rustls-tls-webpki-roots = ["rustls-tls-webpki-roots-no-provider", "__rustls-aws-lc-rs"]
rustls-tls-native-roots = ["rustls-tls-native-roots-no-provider", "__rustls-aws-lc-rs"]

blocking = ["dep:futures-channel", "futures-channel?/sink", "dep:futures-util", "futures-util?/io", "futures-util?/sink", "tokio/sync"]

Expand Down Expand Up @@ -110,6 +107,7 @@ __tls = ["dep:rustls-pki-types", "tokio/io-util"]
# Equivalent to rustls-tls-manual-roots but shorter :)
__rustls = ["dep:hyper-rustls", "dep:tokio-rustls", "dep:rustls", "__tls"]
__rustls-ring = ["hyper-rustls?/ring", "tokio-rustls?/ring", "rustls?/ring", "quinn?/ring"]
__rustls-aws-lc-rs = ["hyper-rustls?/aws-lc-rs", "tokio-rustls?/aws-lc-rs", "rustls?/aws-lc-rs", "quinn?/aws-lc-rs"]

[dependencies]
base64 = "0.22"
Expand Down Expand Up @@ -149,12 +147,12 @@ pin-project-lite = "0.2.11"
rustls-pki-types = { version = "1.9.0", features = ["std"], optional = true }
mime = { version = "0.3.16", optional = true }

## default-tls
# native-tls
hyper-tls = { version = "0.6", optional = true }
native-tls-crate = { version = "0.2.10", optional = true, package = "native-tls" }
tokio-native-tls = { version = "0.3.0", optional = true }

# rustls-tls
# default-tls and rustls-tls
hyper-rustls = { version = "0.27.0", default-features = false, optional = true, features = ["http1", "tls12"] }
rustls = { version = "0.23.4", optional = true, default-features = false, features = ["std", "tls12"] }
tokio-rustls = { version = "0.26", optional = true, default-features = false, features = ["tls12"] }
Expand Down
32 changes: 19 additions & 13 deletions src/async_impl/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ use http::header::{Entry, HeaderMap, HeaderValue, ACCEPT, PROXY_AUTHORIZATION, U
use http::uri::Scheme;
use http::Uri;
use hyper_util::client::legacy::connect::HttpConnector;
#[cfg(feature = "default-tls")]
#[cfg(feature = "native-tls")]
use native_tls_crate::TlsConnector;
use pin_project_lite::pin_project;
#[cfg(feature = "http3")]
Expand Down Expand Up @@ -524,8 +524,8 @@ impl ClientBuilder {

#[cfg(feature = "__tls")]
match config.tls {
#[cfg(feature = "default-tls")]
TlsBackend::Default => {
#[cfg(feature = "native-tls")]
TlsBackend::NativeTls => {
let mut tls = TlsConnector::builder();

#[cfg(all(feature = "native-tls-alpn", not(feature = "http3")))]
Expand Down Expand Up @@ -591,7 +591,7 @@ impl ClientBuilder {
tls.max_protocol_version(Some(protocol));
}

ConnectorBuilder::new_default_tls(
ConnectorBuilder::new_native_tls(
http,
tls,
proxies.clone(),
Expand All @@ -615,7 +615,7 @@ impl ClientBuilder {
)?
}
#[cfg(feature = "native-tls")]
TlsBackend::BuiltNativeTls(conn) => ConnectorBuilder::from_built_default_tls(
TlsBackend::BuiltNativeTls(conn) => ConnectorBuilder::from_built_native_tls(
http,
conn,
proxies.clone(),
Expand Down Expand Up @@ -762,13 +762,7 @@ impl ClientBuilder {
// If not, we use ring.
let provider = rustls::crypto::CryptoProvider::get_default()
.map(|arc| arc.clone())
.unwrap_or_else(|| {
#[cfg(not(feature = "__rustls-ring"))]
panic!("No provider set");

#[cfg(feature = "__rustls-ring")]
Arc::new(rustls::crypto::ring::default_provider())
});
.unwrap_or_else(default_rustls_crypto_provider);

// Build TLS config
let signature_algorithms = provider.signature_verification_algorithms;
Expand Down Expand Up @@ -2116,7 +2110,7 @@ impl ClientBuilder {
#[cfg(feature = "native-tls")]
#[cfg_attr(docsrs, doc(cfg(feature = "native-tls")))]
pub fn use_native_tls(mut self) -> ClientBuilder {
self.config.tls = TlsBackend::Default;
self.config.tls = TlsBackend::NativeTls;
self
}

Expand Down Expand Up @@ -2457,6 +2451,18 @@ impl Default for Client {
}
}

#[cfg(feature = "__rustls")]
fn default_rustls_crypto_provider() -> Arc<rustls::crypto::CryptoProvider> {
#[cfg(not(any(feature = "__rustls-ring", feature = "__rustls-aws-lc-rs")))]
panic!("No provider set");

#[cfg(all(feature = "__rustls-ring", not(feature = "__rustls-aws-lc-rs")))]
return Arc::new(rustls::crypto::ring::default_provider());

#[cfg(feature = "__rustls-aws-lc-rs")]
Arc::new(rustls::crypto::aws_lc_rs::default_provider())
}

impl Client {
/// Constructs a new `Client`.
///
Expand Down
Loading