feat: add use-rustls-ring feature
This commit is contained in:
parent
64c77ee1bc
commit
8d71f9597c
1
.github/workflows/cont_integration.yml
vendored
1
.github/workflows/cont_integration.yml
vendored
@ -45,3 +45,4 @@ jobs:
|
||||
- run: cargo check --verbose --no-default-features --features=minimal,debug-calls
|
||||
- run: cargo check --verbose --no-default-features --features=proxy,use-openssl
|
||||
- run: cargo check --verbose --no-default-features --features=proxy,use-rustls
|
||||
- run: cargo check --verbose --no-default-features --features=proxy,use-rustls-ring
|
||||
|
||||
@ -25,7 +25,7 @@ serde_json = { version = "^1.0" }
|
||||
|
||||
# Optional dependencies
|
||||
openssl = { version = "0.10", optional = true }
|
||||
rustls = { version = "0.23", optional = true }
|
||||
rustls = { version = "0.23", optional = true, default-features = false }
|
||||
webpki-roots = { version = "0.25", optional = true }
|
||||
|
||||
byteorder = { version = "1.0", optional = true }
|
||||
@ -41,5 +41,6 @@ default = ["proxy", "use-rustls"]
|
||||
minimal = []
|
||||
debug-calls = []
|
||||
proxy = ["byteorder", "winapi", "libc"]
|
||||
use-rustls = ["webpki-roots", "rustls"]
|
||||
use-rustls = ["webpki-roots", "rustls/default"]
|
||||
use-rustls-ring = ["webpki-roots", "rustls/ring", "rustls/logging", "rustls/std", "rustls/tls12"]
|
||||
use-openssl = ["openssl"]
|
||||
|
||||
18
src/lib.rs
18
src/lib.rs
@ -25,14 +25,22 @@ extern crate log;
|
||||
#[cfg(feature = "use-openssl")]
|
||||
extern crate openssl;
|
||||
#[cfg(all(
|
||||
any(feature = "default", feature = "use-rustls"),
|
||||
any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
),
|
||||
not(feature = "use-openssl")
|
||||
))]
|
||||
extern crate rustls;
|
||||
extern crate serde;
|
||||
extern crate serde_json;
|
||||
|
||||
#[cfg(any(feature = "use-rustls", feature = "default"))]
|
||||
#[cfg(any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
))]
|
||||
extern crate webpki_roots;
|
||||
|
||||
#[cfg(any(feature = "default", feature = "proxy"))]
|
||||
@ -51,7 +59,8 @@ mod batch;
|
||||
|
||||
#[cfg(any(
|
||||
all(feature = "proxy", feature = "use-openssl"),
|
||||
all(feature = "proxy", feature = "use-rustls")
|
||||
all(feature = "proxy", feature = "use-rustls"),
|
||||
all(feature = "proxy", feature = "use-rustls-ring")
|
||||
))]
|
||||
pub mod client;
|
||||
|
||||
@ -66,7 +75,8 @@ pub use api::ElectrumApi;
|
||||
pub use batch::Batch;
|
||||
#[cfg(any(
|
||||
all(feature = "proxy", feature = "use-openssl"),
|
||||
all(feature = "proxy", feature = "use-rustls")
|
||||
all(feature = "proxy", feature = "use-rustls"),
|
||||
all(feature = "proxy", feature = "use-rustls-ring")
|
||||
))]
|
||||
pub use client::*;
|
||||
pub use config::{Config, ConfigBuilder, Socks5Config};
|
||||
|
||||
@ -23,7 +23,11 @@ use bitcoin::{Script, Txid};
|
||||
use openssl::ssl::{SslConnector, SslMethod, SslStream, SslVerifyMode};
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "default", feature = "use-rustls"),
|
||||
any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
),
|
||||
not(feature = "use-openssl")
|
||||
))]
|
||||
use rustls::{
|
||||
@ -286,7 +290,11 @@ impl RawClient<ElectrumSslStream> {
|
||||
}
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "default", feature = "use-rustls"),
|
||||
any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
),
|
||||
not(feature = "use-openssl")
|
||||
))]
|
||||
mod danger {
|
||||
@ -336,13 +344,21 @@ mod danger {
|
||||
}
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "default", feature = "use-rustls"),
|
||||
any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
),
|
||||
not(feature = "use-openssl")
|
||||
))]
|
||||
/// Transport type used to establish a Rustls TLS encrypted/authenticated connection with the server
|
||||
pub type ElectrumSslStream = StreamOwned<ClientConnection, TcpStream>;
|
||||
#[cfg(all(
|
||||
any(feature = "default", feature = "use-rustls"),
|
||||
any(
|
||||
feature = "default",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
),
|
||||
not(feature = "use-openssl")
|
||||
))]
|
||||
impl RawClient<ElectrumSslStream> {
|
||||
@ -451,7 +467,11 @@ impl RawClient<ElectrumProxyStream> {
|
||||
Ok(stream.into())
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "use-openssl", feature = "use-rustls"))]
|
||||
#[cfg(any(
|
||||
feature = "use-openssl",
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring"
|
||||
))]
|
||||
/// Creates a new TLS client that connects to `target_addr` using `proxy_addr` as a socks proxy
|
||||
/// server. The DNS resolution of `target_addr`, if required, is done through the proxy. This
|
||||
/// allows to specify, for instance, `.onion` addresses.
|
||||
|
||||
@ -315,8 +315,7 @@ pub enum Error {
|
||||
CouldntLockReader,
|
||||
/// Broken IPC communication channel: the other thread probably has exited
|
||||
Mpsc,
|
||||
|
||||
#[cfg(feature = "use-rustls")]
|
||||
#[cfg(any(feature = "use-rustls", feature = "use-rustls-ring"))]
|
||||
/// Could not create a rustls client connection
|
||||
CouldNotCreateConnection(rustls::Error),
|
||||
|
||||
@ -340,7 +339,10 @@ impl Display for Error {
|
||||
Error::SslHandshakeError(e) => Display::fmt(e, f),
|
||||
#[cfg(feature = "use-openssl")]
|
||||
Error::InvalidSslMethod(e) => Display::fmt(e, f),
|
||||
#[cfg(feature = "use-rustls")]
|
||||
#[cfg(any(
|
||||
feature = "use-rustls",
|
||||
feature = "use-rustls-ring",
|
||||
))]
|
||||
Error::CouldNotCreateConnection(e) => Display::fmt(e, f),
|
||||
|
||||
Error::Message(e) => f.write_str(e),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user