Trait TlsAcceptor

Source
pub trait TlsAcceptor:
    Sized
    + Sync
    + Send
    + 'static {
    type Builder: TlsAcceptorBuilder<Acceptor = Self>;
    type Underlying;
    type TlsStream: TlsStreamDyn;

    const IMPLEMENTED: bool;
    const SUPPORTS_ALPN: bool;
    const SUPPORTS_DER_KEYS: bool;
    const SUPPORTS_PKCS12_KEYS: bool;
    const TYPE_DYN: &'static dyn TlsAcceptorType = _;

    // Required methods
    fn underlying_mut(&mut self) -> &mut Self::Underlying;
    fn info() -> ImplInfo;
    fn accept_with_socket<S>(
        &self,
        stream: S,
    ) -> BoxFuture<'_, Result<TlsStreamWithSocket<S>>> 
       where S: AsyncSocket + Debug + Unpin;
    fn accept_impl_tls_stream<S>(
        &self,
        stream: S,
    ) -> BoxFuture<'_, Result<Self::TlsStream>> 
       where S: AsyncSocket;

    // Provided methods
    fn into_dyn(self) -> TlsAcceptorBox { ... }
    fn builder_from_der_key(cert: &[u8], key: &[u8]) -> Result<Self::Builder> { ... }
    fn builder_from_pkcs12(
        pkcs12: &[u8],
        passphrase: &str,
    ) -> Result<Self::Builder> { ... }
    fn accept<S>(&self, stream: S) -> BoxFuture<'_, Result<TlsStream>> 
       where S: AsyncSocket + Debug + Unpin { ... }
}
Expand description

A builder for server-side TLS connections.

Required Associated Constants§

Source

const IMPLEMENTED: bool

Whether this acceptor type is implemented.

For example, tls-api-security-framework is available on Linux, but all operations result in error, so IMPLEMENTED = false for that implementation.

Source

const SUPPORTS_ALPN: bool

Whether this implementation supports ALPN negotiation.

Source

const SUPPORTS_DER_KEYS: bool

Whether this implementation supports construction of acceptor using a pair of a DER certificate and file pair.

Source

const SUPPORTS_PKCS12_KEYS: bool

Whether this implementation supports construction of acceptor using PKCS #12 file.

Provided Associated Constants§

Source

const TYPE_DYN: &'static dyn TlsAcceptorType = _

Dynamic (without type parameter) version of the acceptor.

This function returns an acceptor type, which can be used to constructor acceptors.

Required Associated Types§

Source

type Builder: TlsAcceptorBuilder<Acceptor = Self>

Type of the builder for this acceptor.

Source

type Underlying

Type of the underlying acceptor.

Source

type TlsStream: TlsStreamDyn

crate::TlsStream<tls_api::AsyncSocketBox>.

In the world of HKT this would be:

type TlsStream<S: TlsStreamDyn> : TlsStreamWithSocketDyn<S>;

Note each implementation has accept_impl function which returns more specific type, providing both access to implementation details and the underlying socket.

Required Methods§

Source

fn underlying_mut(&mut self) -> &mut Self::Underlying

Get the underlying acceptor.

API intentionally exposes the underlying acceptor builder to allow fine acceptor not possible in common API.

Source

fn info() -> ImplInfo

Implementation info.

Source

fn accept_with_socket<S>( &self, stream: S, ) -> BoxFuture<'_, Result<TlsStreamWithSocket<S>>>
where S: AsyncSocket + Debug + Unpin,

Accept a connection.

This operation returns a future which is resolved when the negotiation is complete, and the stream is ready to send and receive.

This version of accept returns a stream parameterized by the underlying socket type.

Source

fn accept_impl_tls_stream<S>( &self, stream: S, ) -> BoxFuture<'_, Result<Self::TlsStream>>
where S: AsyncSocket,

Accept a connection.

This operation returns a future which is resolved when the negotiation is complete, and the stream is ready to send and receive.

This version of accept returns a stream parameterized by the underlying socket type.

Practically, accept is usually enough.

Provided Methods§

Source

fn into_dyn(self) -> TlsAcceptorBox

Dynamic (without type parameter) version of the connector.

Source

fn builder_from_der_key(cert: &[u8], key: &[u8]) -> Result<Self::Builder>

New builder from given server key.

Parameters are DER-encoded (binary) X509 cert and corresponding private key.

Note if this implementation does not support DER keys directly, openssl command is used to convert the certificate.

Source

fn builder_from_pkcs12(pkcs12: &[u8], passphrase: &str) -> Result<Self::Builder>

New builder from given server key.

Note if this implementation does not support PKCS #12 keys directly, openssl command is used to convert the certificate.

Source

fn accept<S>(&self, stream: S) -> BoxFuture<'_, Result<TlsStream>>
where S: AsyncSocket + Debug + Unpin,

Accept a connection.

This operation returns a future which is resolved when the negotiation is complete, and the stream is ready to send and receive.

This version return a stream of the underlying implementation, which might be useful to obtain some TLS implementation-specific data.

Practically, accept is usually enough.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§