diff --git a/tokio-xmpp/src/client/async_client.rs b/tokio-xmpp/src/client/async_client.rs index de2937dc7ec33354a3cdcf6541226bf58d0f5762..cfd5a26027986b6480e6b6bacb9df668e85243ba 100644 --- a/tokio-xmpp/src/client/async_client.rs +++ b/tokio-xmpp/src/client/async_client.rs @@ -7,11 +7,11 @@ use tokio::task::JoinHandle; use xmpp_parsers::{jid::Jid, ns, stream_features::StreamFeatures}; use super::connect::client_login; +#[cfg(feature = "starttls")] +use crate::connect::starttls::ServerConfig; use crate::connect::{AsyncReadAndWrite, ServerConnector}; use crate::error::{Error, ProtocolError}; use crate::event::Event; -#[cfg(feature = "starttls")] -use crate::starttls::ServerConfig; use crate::xmpp_codec::Packet; use crate::xmpp_stream::{add_stanza_id, XMPPStream}; #[cfg(feature = "starttls")] diff --git a/tokio-xmpp/src/connect/mod.rs b/tokio-xmpp/src/connect/mod.rs index 939d0f2c37097125ac18af0828260dbf3c6a54a1..44d1921235f46849c8709ea3b9f751791c90f2af 100644 --- a/tokio-xmpp/src/connect/mod.rs +++ b/tokio-xmpp/src/connect/mod.rs @@ -17,7 +17,9 @@ use xmpp_parsers::jid::Jid; use crate::xmpp_stream::XMPPStream; use crate::Error; -#[cfg(feature="insecure-tcp")] +#[cfg(feature = "starttls")] +pub mod starttls; +#[cfg(feature = "insecure-tcp")] pub mod tcp; /// trait returned wrapped in XMPPStream by ServerConnector diff --git a/tokio-xmpp/src/starttls/mod.rs b/tokio-xmpp/src/connect/starttls.rs similarity index 80% rename from tokio-xmpp/src/starttls/mod.rs rename to tokio-xmpp/src/connect/starttls.rs index 60d70c3857dbd5fb24d50ed9c819ed58e283cd0c..fd27852ddbe44debb7d7ea9446f6c8f7f057754d 100644 --- a/tokio-xmpp/src/starttls/mod.rs +++ b/tokio-xmpp/src/connect/starttls.rs @@ -1,5 +1,14 @@ //! `starttls::ServerConfig` provides a `ServerConnector` for starttls connections +#[cfg(feature = "tls-native")] +use native_tls::Error as TlsError; +use std::error::Error as StdError; +use std::fmt; +#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] +use tokio_rustls::rustls::pki_types::InvalidDnsNameError; +#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] +use tokio_rustls::rustls::Error as TlsError; + use futures::{sink::SinkExt, stream::StreamExt}; #[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] @@ -35,10 +44,6 @@ use crate::{ AsyncClient, }; -use self::error::Error as StartTlsError; - -pub mod error; - /// AsyncClient that connects over StartTls pub type StartTlsAsyncClient = AsyncClient; @@ -162,3 +167,40 @@ pub async fn starttls( get_tls_stream(xmpp_stream).await } + +/// StartTLS ServerConnector Error +#[derive(Debug)] +pub enum StartTlsError { + /// TLS error + Tls(TlsError), + #[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] + /// DNS name parsing error + DnsNameError(InvalidDnsNameError), +} + +impl ServerConnectorError for StartTlsError {} + +impl fmt::Display for StartTlsError { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match self { + Self::Tls(e) => write!(fmt, "TLS error: {}", e), + #[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] + Self::DnsNameError(e) => write!(fmt, "DNS name error: {}", e), + } + } +} + +impl StdError for StartTlsError {} + +impl From for StartTlsError { + fn from(e: TlsError) -> Self { + Self::Tls(e) + } +} + +#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] +impl From for StartTlsError { + fn from(e: InvalidDnsNameError) -> Self { + Self::DnsNameError(e) + } +} diff --git a/tokio-xmpp/src/connect/tcp.rs b/tokio-xmpp/src/connect/tcp.rs index 0ceedc3e0e54e123c1b00418098860809f76a61b..b2c4c216adbfdcd424fac1ca8f198e4da1813af3 100644 --- a/tokio-xmpp/src/connect/tcp.rs +++ b/tokio-xmpp/src/connect/tcp.rs @@ -42,4 +42,3 @@ impl Component { Self::new_with_connector(jid, password, TcpServerConnector::new(server)).await } } - diff --git a/tokio-xmpp/src/lib.rs b/tokio-xmpp/src/lib.rs index dd1d81f4331dd434f7069262a054ea081dbe53bb..f935294aa5babcb5a119122c163ea38d7dee4d6d 100644 --- a/tokio-xmpp/src/lib.rs +++ b/tokio-xmpp/src/lib.rs @@ -20,8 +20,6 @@ compile_error!( "when starttls feature enabled one of tls-native and tls-rust features must be enabled." ); -#[cfg(feature = "starttls")] -pub mod starttls; mod stream_start; mod xmpp_codec; pub use crate::xmpp_codec::{Packet, XmppCodec}; @@ -31,9 +29,7 @@ mod client; pub mod connect; pub mod xmpp_stream; -pub use client::{ - async_client::{Client as AsyncClient, Config as AsyncConfig}, -}; +pub use client::async_client::{Client as AsyncClient, Config as AsyncConfig}; mod component; pub use crate::component::Component; /// Detailed error types diff --git a/tokio-xmpp/src/starttls/error.rs b/tokio-xmpp/src/starttls/error.rs deleted file mode 100644 index 824bde239c71fa1f2048c4473fe32515d39653b7..0000000000000000000000000000000000000000 --- a/tokio-xmpp/src/starttls/error.rs +++ /dev/null @@ -1,49 +0,0 @@ -//! StartTLS ServerConnector Error - -#[cfg(feature = "tls-native")] -use native_tls::Error as TlsError; -use std::error::Error as StdError; -use std::fmt; -#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] -use tokio_rustls::rustls::pki_types::InvalidDnsNameError; -#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] -use tokio_rustls::rustls::Error as TlsError; - -use super::ServerConnectorError; - -/// StartTLS ServerConnector Error -#[derive(Debug)] -pub enum Error { - /// TLS error - Tls(TlsError), - #[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] - /// DNS name parsing error - DnsNameError(InvalidDnsNameError), -} - -impl ServerConnectorError for Error {} - -impl fmt::Display for Error { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match self { - Self::Tls(e) => write!(fmt, "TLS error: {}", e), - #[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] - Self::DnsNameError(e) => write!(fmt, "DNS name error: {}", e), - } - } -} - -impl StdError for Error {} - -impl From for Error { - fn from(e: TlsError) -> Self { - Self::Tls(e) - } -} - -#[cfg(all(feature = "tls-rust", not(feature = "tls-native")))] -impl From for Error { - fn from(e: InvalidDnsNameError) -> Self { - Self::DnsNameError(e) - } -} diff --git a/xmpp/src/builder.rs b/xmpp/src/builder.rs index a620bd717ade94b00915b1e84dd6813bc521fafc..0620f76ba877fcc709bcb01bf3841fc8b30074c0 100644 --- a/xmpp/src/builder.rs +++ b/xmpp/src/builder.rs @@ -52,12 +52,16 @@ pub struct ClientBuilder<'a, C: ServerConnector> { } #[cfg(any(feature = "starttls-rust", feature = "starttls-native"))] -impl ClientBuilder<'_, tokio_xmpp::starttls::ServerConfig> { +impl ClientBuilder<'_, tokio_xmpp::connect::starttls::ServerConfig> { pub fn new<'a>( jid: BareJid, password: &'a str, - ) -> ClientBuilder<'a, tokio_xmpp::starttls::ServerConfig> { - Self::new_with_connector(jid, password, tokio_xmpp::starttls::ServerConfig::UseSrv) + ) -> ClientBuilder<'a, tokio_xmpp::connect::starttls::ServerConfig> { + Self::new_with_connector( + jid, + password, + tokio_xmpp::connect::starttls::ServerConfig::UseSrv, + ) } }