Merge branch 'master' into refactor/simplify_server_future

This commit is contained in:
fakeshadow 2021-02-04 07:27:55 -08:00 committed by GitHub
commit 6b832b293c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 18 additions and 21 deletions

View File

@ -31,10 +31,10 @@ connect = []
openssl = ["tls-openssl", "tokio-openssl"] openssl = ["tls-openssl", "tokio-openssl"]
# use rustls impls # use rustls impls
rustls = ["tls-rustls", "webpki", "webpki-roots", "tokio-rustls"] rustls = ["tokio-rustls", "webpki-roots"]
# use native-tls impls # use native-tls impls
native-tls = ["tls-native-tls", "tokio-native-tls"] native-tls = ["tokio-native-tls"]
# support http::Uri as connect address # support http::Uri as connect address
uri = ["http"] uri = ["http"]
@ -49,21 +49,17 @@ derive_more = "0.99.5"
futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] }
http = { version = "0.2.3", optional = true } http = { version = "0.2.3", optional = true }
log = "0.4" log = "0.4"
tokio-util = { version = "0.6.3", default-features = false }
# openssl # openssl
tls-openssl = { package = "openssl", version = "0.10", optional = true } tls-openssl = { package = "openssl", version = "0.10", optional = true }
tokio-openssl = { version = "0.6", optional = true } tokio-openssl = { version = "0.6", optional = true }
# TODO: Reduce dependencies where tokio wrappers re-export base crate.
# rustls # rustls
tls-rustls = { package = "rustls", version = "0.19", optional = true }
tokio-rustls = { version = "0.22", optional = true } tokio-rustls = { version = "0.22", optional = true }
webpki = { version = "0.21", optional = true }
webpki-roots = { version = "0.21", optional = true } webpki-roots = { version = "0.21", optional = true }
# native-tls # native-tls
tls-native-tls = { package = "native-tls", version = "0.2", optional = true }
tokio-native-tls = { version = "0.3", optional = true } tokio-native-tls = { version = "0.3", optional = true }
[dev-dependencies] [dev-dependencies]

View File

@ -15,9 +15,9 @@
//! http --verify=false https://127.0.0.1:8443 //! http --verify=false https://127.0.0.1:8443
//! ``` //! ```
// this rename only exists because of how we have organised the crate's feature flags // this use only exists because of how we have organised the crate
// it is not necessary for your actual code // it is not necessary for your actual code
extern crate tls_rustls as rustls; use tokio_rustls::rustls;
use std::{ use std::{
env, env,

View File

@ -5,7 +5,7 @@ use actix_service::{Service, ServiceFactory};
use actix_utils::counter::Counter; use actix_utils::counter::Counter;
use futures_core::future::LocalBoxFuture; use futures_core::future::LocalBoxFuture;
pub use native_tls::Error; pub use tokio_native_tls::native_tls::Error;
pub use tokio_native_tls::{TlsAcceptor, TlsStream}; pub use tokio_native_tls::{TlsAcceptor, TlsStream};
use super::MAX_CONN_COUNTER; use super::MAX_CONN_COUNTER;

View File

@ -12,7 +12,7 @@ use actix_utils::counter::{Counter, CounterGuard};
use futures_core::future::LocalBoxFuture; use futures_core::future::LocalBoxFuture;
use tokio_rustls::{Accept, TlsAcceptor}; use tokio_rustls::{Accept, TlsAcceptor};
pub use rustls::{ServerConfig, Session}; pub use tokio_rustls::rustls::{ServerConfig, Session};
pub use tokio_rustls::server::TlsStream; pub use tokio_rustls::server::TlsStream;
use super::MAX_CONN_COUNTER; use super::MAX_CONN_COUNTER;

View File

@ -11,6 +11,7 @@ use actix_rt::net::TcpStream;
use actix_service::{Service, ServiceFactory}; use actix_service::{Service, ServiceFactory};
use futures_core::{future::LocalBoxFuture, ready}; use futures_core::{future::LocalBoxFuture, ready};
use log::{error, trace}; use log::{error, trace};
use tokio_util::sync::ReusableBoxFuture;
use super::connect::{Address, Connect, ConnectAddrs, Connection}; use super::connect::{Address, Connect, ConnectAddrs, Connection};
use super::error::ConnectError; use super::error::ConnectError;
@ -65,7 +66,7 @@ pub enum TcpConnectorResponse<T> {
req: Option<T>, req: Option<T>,
port: u16, port: u16,
addrs: Option<VecDeque<SocketAddr>>, addrs: Option<VecDeque<SocketAddr>>,
stream: Option<LocalBoxFuture<'static, Result<TcpStream, io::Error>>>, stream: Option<ReusableBoxFuture<Result<TcpStream, io::Error>>>,
}, },
Error(Option<ConnectError>), Error(Option<ConnectError>),
} }
@ -90,7 +91,7 @@ impl<T: Address> TcpConnectorResponse<T> {
req: Some(req), req: Some(req),
port, port,
addrs: None, addrs: None,
stream: Some(Box::pin(TcpStream::connect(addr))), stream: Some(ReusableBoxFuture::new(TcpStream::connect(addr))),
}, },
// when resolver returns multiple socket addr for request they would be popped from // when resolver returns multiple socket addr for request they would be popped from
@ -119,7 +120,7 @@ impl<T: Address> Future for TcpConnectorResponse<T> {
stream, stream,
} => loop { } => loop {
if let Some(new) = stream.as_mut() { if let Some(new) = stream.as_mut() {
match ready!(new.as_mut().poll(cx)) { match ready!(new.poll(cx)) {
Ok(sock) => { Ok(sock) => {
let req = req.take().unwrap(); let req = req.take().unwrap();
trace!( trace!(
@ -146,7 +147,11 @@ impl<T: Address> Future for TcpConnectorResponse<T> {
// try to connect // try to connect
let addr = addrs.as_mut().unwrap().pop_front().unwrap(); let addr = addrs.as_mut().unwrap().pop_front().unwrap();
*stream = Some(Box::pin(TcpStream::connect(addr)));
match stream {
Some(rbf) => rbf.set(TcpStream::connect(addr)),
None => *stream = Some(ReusableBoxFuture::new(TcpStream::connect(addr))),
}
}, },
} }
} }

View File

@ -6,7 +6,7 @@ use std::{
task::{Context, Poll}, task::{Context, Poll},
}; };
pub use rustls::Session; pub use tokio_rustls::rustls::Session;
pub use tokio_rustls::{client::TlsStream, rustls::ClientConfig}; pub use tokio_rustls::{client::TlsStream, rustls::ClientConfig};
pub use webpki_roots::TLS_SERVER_ROOTS; pub use webpki_roots::TLS_SERVER_ROOTS;
@ -15,7 +15,7 @@ use actix_service::{Service, ServiceFactory};
use futures_core::{future::LocalBoxFuture, ready}; use futures_core::{future::LocalBoxFuture, ready};
use log::trace; use log::trace;
use tokio_rustls::{Connect, TlsConnector}; use tokio_rustls::{Connect, TlsConnector};
use webpki::DNSNameRef; use tokio_rustls::webpki::DNSNameRef;
use crate::connect::{Address, Connection}; use crate::connect::{Address, Connection};

View File

@ -4,12 +4,8 @@
#![doc(html_logo_url = "https://actix.rs/img/logo.png")] #![doc(html_logo_url = "https://actix.rs/img/logo.png")]
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")] #![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
#[cfg(feature = "native-tls")]
extern crate tls_native_tls as native_tls;
#[cfg(feature = "openssl")] #[cfg(feature = "openssl")]
extern crate tls_openssl as openssl; extern crate tls_openssl as openssl;
#[cfg(feature = "rustls")]
extern crate tls_rustls as rustls;
#[cfg(feature = "accept")] #[cfg(feature = "accept")]
pub mod accept; pub mod accept;