From 4933210a7c22b48f57b9e3698be7df180f7646f6 Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Thu, 13 Jan 2022 10:11:37 -0500 Subject: [PATCH] fixup! tonic: implement the server Connected trait for tokio UnixStream --- tonic/src/transport/server/conn.rs | 38 +----------------------------- tonic/src/transport/server/mod.rs | 4 +++- tonic/src/transport/server/unix.rs | 37 +++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 tonic/src/transport/server/unix.rs diff --git a/tonic/src/transport/server/conn.rs b/tonic/src/transport/server/conn.rs index e03d7f847..ea304865b 100644 --- a/tonic/src/transport/server/conn.rs +++ b/tonic/src/transport/server/conn.rs @@ -4,7 +4,7 @@ use tokio::net::TcpStream; #[cfg(feature = "tls")] use crate::transport::Certificate; -#[cfg(any(unix, feature = "tls"))] +#[cfg(feature = "tls")] use std::sync::Arc; #[cfg(feature = "tls")] use tokio_rustls::{rustls::Session, server::TlsStream}; @@ -98,42 +98,6 @@ impl Connected for TcpStream { } } -/// Connection info for Unix domain socket streams. -/// -/// This type will be accessible through [request extensions][ext] if you're using -/// a unix stream. -/// -/// See [`Connected`] for more details. -/// -/// [ext]: crate::Request::extensions -#[cfg(unix)] -#[cfg_attr(docsrs, doc(cfg(unix)))] -#[derive(Clone, Debug)] -pub struct UdsConnectInfo { - /// Peer address. This will be "unnamed" for client unix sockets. - pub peer_addr: Option>, - /// Process credentials for the unix socket. - pub peer_cred: Option, -} - -#[cfg(unix)] -impl Connected for tokio::net::UnixStream { - type ConnectInfo = UdsConnectInfo; - - fn connect_info(&self) -> Self::ConnectInfo { - UdsConnectInfo { - peer_addr: self.peer_addr().ok().map(Arc::new), - peer_cred: self.peer_cred().ok(), - } - } -} - -impl Connected for tokio::io::DuplexStream { - type ConnectInfo = (); - - fn connect_info(&self) -> Self::ConnectInfo {} -} - #[cfg(feature = "tls")] impl Connected for TlsStream where diff --git a/tonic/src/transport/server/mod.rs b/tonic/src/transport/server/mod.rs index bfefff276..6a391cd62 100644 --- a/tonic/src/transport/server/mod.rs +++ b/tonic/src/transport/server/mod.rs @@ -6,6 +6,8 @@ mod recover_error; #[cfg(feature = "tls")] #[cfg_attr(docsrs, doc(cfg(feature = "tls")))] mod tls; +#[cfg(unix)] +mod unix; pub use conn::{Connected, TcpConnectInfo}; #[cfg(feature = "tls")] @@ -18,7 +20,7 @@ pub use conn::TlsConnectInfo; use super::service::TlsAcceptor; #[cfg(unix)] -pub use conn::UdsConnectInfo; +pub use unix::UdsConnectInfo; use incoming::TcpIncoming; diff --git a/tonic/src/transport/server/unix.rs b/tonic/src/transport/server/unix.rs new file mode 100644 index 000000000..7984b13b1 --- /dev/null +++ b/tonic/src/transport/server/unix.rs @@ -0,0 +1,37 @@ +use super::Connected; +use std::sync::Arc; + +/// Connection info for Unix domain socket streams. +/// +/// This type will be accessible through [request extensions][ext] if you're using +/// a unix stream. +/// +/// See [Connected] for more details. +/// +/// [ext]: crate::Request::extensions +/// [Connected]: crate::transport::server::Connected +#[cfg_attr(docsrs, doc(cfg(unix)))] +#[derive(Clone, Debug)] +pub struct UdsConnectInfo { + /// Peer address. This will be "unnamed" for client unix sockets. + pub peer_addr: Option>, + /// Process credentials for the unix socket. + pub peer_cred: Option, +} + +impl Connected for tokio::net::UnixStream { + type ConnectInfo = UdsConnectInfo; + + fn connect_info(&self) -> Self::ConnectInfo { + UdsConnectInfo { + peer_addr: self.peer_addr().ok().map(Arc::new), + peer_cred: self.peer_cred().ok(), + } + } +} + +impl Connected for tokio::io::DuplexStream { + type ConnectInfo = (); + + fn connect_info(&self) -> Self::ConnectInfo {} +}