mod builder;
use std::{fmt, io};
pub use builder::TlsAcceptorBuilder;
use openssl::ssl::SslAcceptor;
use crate::{sync_io::TlsStream, HandshakeError, Identity, Protocol};
#[derive(Clone)]
pub struct TlsAcceptor(pub(crate) SslAcceptor);
impl fmt::Debug for TlsAcceptor {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("TlsAcceptor").finish()
}
}
impl TlsAcceptor {
pub fn new(identity: Identity) -> crate::Result<TlsAcceptor> {
Self::builder(identity).build()
}
pub fn builder(identity: Identity) -> TlsAcceptorBuilder {
TlsAcceptorBuilder {
identity,
min_protocol: Some(Protocol::Tlsv10),
max_protocol: None,
}
}
pub fn accept<S>(&self, stream: S) -> Result<TlsStream<S>, HandshakeError<S>>
where
S: io::Read + io::Write,
{
let s = self.0.accept(stream)?;
Ok(TlsStream(s))
}
}