vector_core/tls/
outgoing.rs1use std::{net::SocketAddr, pin::Pin};
2
3use snafu::ResultExt;
4use tokio::net::TcpStream;
5use tokio_openssl::SslStream;
6
7use super::{
8 tls_connector, ConnectSnafu, HandshakeSnafu, MaybeTlsSettings, MaybeTlsStream, SslBuildSnafu,
9};
10
11impl MaybeTlsSettings {
12 pub async fn connect(
13 &self,
14 host: &str,
15 addr: &SocketAddr,
16 ) -> crate::tls::Result<MaybeTlsStream<TcpStream>> {
17 let stream = TcpStream::connect(addr).await.context(ConnectSnafu)?;
18
19 match self {
20 MaybeTlsSettings::Raw(()) => Ok(MaybeTlsStream::Raw(stream)),
21 MaybeTlsSettings::Tls(_) => {
22 let config = tls_connector(self)?;
23 let ssl = config.into_ssl(host).context(SslBuildSnafu)?;
24
25 let mut stream = SslStream::new(ssl, stream).context(SslBuildSnafu)?;
26 Pin::new(&mut stream)
27 .connect()
28 .await
29 .context(HandshakeSnafu)?;
30
31 debug!(message = "Negotiated TLS.");
32
33 Ok(MaybeTlsStream::Tls(stream))
34 }
35 }
36 }
37}