mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-30 18:34:36 +01:00
Optionally support tokio-uds's UnixStream as IoStream (#472)
This commit is contained in:
parent
8fe30a5b66
commit
bdc9a8bb07
@ -10,6 +10,8 @@
|
|||||||
* Allow to customize connection handshake process via `HttpServer::listen_with()`
|
* Allow to customize connection handshake process via `HttpServer::listen_with()`
|
||||||
and `HttpServer::bind_with()` methods
|
and `HttpServer::bind_with()` methods
|
||||||
|
|
||||||
|
* Support making client connections via `tokio-uds`'s `UnixStream` when "uds" feature is enabled #472
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
* It is allowed to use function with up to 10 parameters for handler with `extractor parameters`.
|
* It is allowed to use function with up to 10 parameters for handler with `extractor parameters`.
|
||||||
|
@ -40,6 +40,9 @@ alpn = ["openssl", "tokio-openssl"]
|
|||||||
# rustls
|
# rustls
|
||||||
rust-tls = ["rustls", "tokio-rustls", "webpki", "webpki-roots"]
|
rust-tls = ["rustls", "tokio-rustls", "webpki", "webpki-roots"]
|
||||||
|
|
||||||
|
# unix sockets
|
||||||
|
uds = ["tokio-uds"]
|
||||||
|
|
||||||
# sessions feature, session require "ring" crate and c compiler
|
# sessions feature, session require "ring" crate and c compiler
|
||||||
session = ["cookie/secure"]
|
session = ["cookie/secure"]
|
||||||
|
|
||||||
@ -112,6 +115,9 @@ tokio-rustls = { version = "0.7", optional = true }
|
|||||||
webpki = { version = "0.18", optional = true }
|
webpki = { version = "0.18", optional = true }
|
||||||
webpki-roots = { version = "0.15", optional = true }
|
webpki-roots = { version = "0.15", optional = true }
|
||||||
|
|
||||||
|
# unix sockets
|
||||||
|
tokio-uds = { version="0.2", optional = true }
|
||||||
|
|
||||||
# forked url_encoded
|
# forked url_encoded
|
||||||
itoa = "0.4"
|
itoa = "0.4"
|
||||||
dtoa = "0.4"
|
dtoa = "0.4"
|
||||||
|
@ -1287,6 +1287,10 @@ impl Connection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new connection from an IO Stream
|
/// Create a new connection from an IO Stream
|
||||||
|
///
|
||||||
|
/// The stream can be a `UnixStream` if the Unix-only "uds" feature is enabled.
|
||||||
|
///
|
||||||
|
/// See also `ClientRequestBuilder::with_connection()`.
|
||||||
pub fn from_stream<T: IoStream + Send>(io: T) -> Connection {
|
pub fn from_stream<T: IoStream + Send>(io: T) -> Connection {
|
||||||
Connection::new(Key::empty(), None, Box::new(io))
|
Connection::new(Key::empty(), None, Box::new(io))
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,8 @@
|
|||||||
//! * `tls` - enables ssl support via `native-tls` crate
|
//! * `tls` - enables ssl support via `native-tls` crate
|
||||||
//! * `alpn` - enables ssl support via `openssl` crate, require for `http/2`
|
//! * `alpn` - enables ssl support via `openssl` crate, require for `http/2`
|
||||||
//! support
|
//! support
|
||||||
|
//! * `uds` - enables support for making client requests via Unix Domain Sockets.
|
||||||
|
//! Unix only. Not necessary for *serving* requests.
|
||||||
//! * `session` - enables session support, includes `ring` crate as
|
//! * `session` - enables session support, includes `ring` crate as
|
||||||
//! dependency
|
//! dependency
|
||||||
//! * `brotli` - enables `brotli` compression support, requires `c`
|
//! * `brotli` - enables `brotli` compression support, requires `c`
|
||||||
@ -120,6 +122,8 @@ extern crate tokio_io;
|
|||||||
extern crate tokio_reactor;
|
extern crate tokio_reactor;
|
||||||
extern crate tokio_tcp;
|
extern crate tokio_tcp;
|
||||||
extern crate tokio_timer;
|
extern crate tokio_timer;
|
||||||
|
#[cfg(all(unix, feature = "uds"))]
|
||||||
|
extern crate tokio_uds;
|
||||||
extern crate url;
|
extern crate url;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
@ -421,6 +421,24 @@ pub trait IoStream: AsyncRead + AsyncWrite + 'static {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(all(unix, feature = "uds"))]
|
||||||
|
impl IoStream for ::tokio_uds::UnixStream {
|
||||||
|
#[inline]
|
||||||
|
fn shutdown(&mut self, how: Shutdown) -> io::Result<()> {
|
||||||
|
::tokio_uds::UnixStream::shutdown(self, how)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn set_nodelay(&mut self, _nodelay: bool) -> io::Result<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn set_linger(&mut self, _dur: Option<time::Duration>) -> io::Result<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl IoStream for TcpStream {
|
impl IoStream for TcpStream {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn shutdown(&mut self, how: Shutdown) -> io::Result<()> {
|
fn shutdown(&mut self, how: Shutdown) -> io::Result<()> {
|
||||||
|
@ -5,6 +5,8 @@ extern crate bytes;
|
|||||||
extern crate flate2;
|
extern crate flate2;
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate rand;
|
extern crate rand;
|
||||||
|
#[cfg(all(unix, feature = "uds"))]
|
||||||
|
extern crate tokio_uds;
|
||||||
|
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
@ -198,6 +200,14 @@ fn test_client_gzip_encoding_large_random() {
|
|||||||
assert_eq!(bytes, Bytes::from(data));
|
assert_eq!(bytes, Bytes::from(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(all(unix, feature = "uds"))]
|
||||||
|
#[test]
|
||||||
|
fn test_compatible_with_unix_socket_stream() {
|
||||||
|
let (stream, _) = tokio_uds::UnixStream::pair().unwrap();
|
||||||
|
let _ = client::Connection::from_stream(stream);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "brotli")]
|
#[cfg(feature = "brotli")]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_client_brotli_encoding() {
|
fn test_client_brotli_encoding() {
|
||||||
|
Loading…
Reference in New Issue
Block a user