1 use crate::tls::TlsConnectionMetadata;
4 use async_tls::TlsAcceptor;
9 local_addrs: SocketAddr,
10 listener: TcpListener,
11 acceptor: TlsAcceptor,
15 pub async fn new<A: ToSocketAddrs + std::fmt::Display>(
17 acceptor: TlsAcceptor,
18 ) -> anyhow::Result<Self> {
19 let listener = TcpListener::bind(ip_addrs).await?;
20 info!("Started TLS server at {}", listener.local_addr()?);
23 local_addrs: listener.local_addr()?,
29 pub async fn accept(&self) -> anyhow::Result<Option<Connection>> {
30 let (tcp_stream, peer_addr) = self.listener.accept().await?;
31 debug!("Received connection attempt from {}", peer_addr);
33 if let Ok(tls_stream) = self.acceptor.accept(tcp_stream).await {
34 debug!("Completed TLS handshake with {}", peer_addr);
35 Ok(Some(Connection::from(TlsConnectionMetadata::Server {
36 local_addr: self.local_addrs.clone(),
41 warn!("Could not encrypt connection with TLS from {}", peer_addr);