userver: engine::io::TlsWrapper Class Reference
Loading...
Searching...
No Matches
engine::io::TlsWrapper Class Referencefinal

#include <userver/engine/io/tls_wrapper.hpp>

Detailed Description

Class for TLS communications over a Socket.

Not thread safe. E.g. you MAY NOT read and write concurrently from multiple coroutines.

Usage example:

TcpListener tcp_listener;
auto [server, client] = tcp_listener.MakeSocketPair(deadline);
auto server_task = utils::Async(
"tls-server",
[deadline](auto&& server) {
auto tls_server = io::TlsWrapper::StartTlsServer(
std::forward<decltype(server)>(server),
deadline
);
if (tls_server.SendAll(kData.data(), kData.size(), deadline) != kData.size()) {
throw std::runtime_error("Couldn't send data");
}
},
std::move(server)
);
auto tls_client = io::TlsWrapper::StartTlsClient(std::move(client), {}, deadline);
std::vector<char> buffer(kData.size());
const auto bytes_rcvd = tls_client.RecvAll(buffer.data(), buffer.size(), deadline);

Definition at line 27 of file tls_wrapper.hpp.

+ Inheritance diagram for engine::io::TlsWrapper:

Public Member Functions

 TlsWrapper (const TlsWrapper &)=delete
 
 TlsWrapper (TlsWrapper &&) noexcept
 
 operator bool () const
 Whether the socket is valid.
 
bool IsValid () const override
 Whether the socket is valid.
 
bool WaitReadable (Deadline) override
 Suspends current task until the socket has data available.
 
bool WaitWriteable (Deadline) override
 Suspends current task until the socket can accept more data.
 
size_t RecvSome (void *buf, size_t len, Deadline deadline)
 Receives at least one byte from the socket.
 
size_t RecvAll (void *buf, size_t len, Deadline deadline)
 Receives exactly len bytes from the socket.
 
size_t SendAll (const void *buf, size_t len, Deadline deadline)
 Sends exactly len bytes to the socket.
 
Socket StopTls (Deadline deadline)
 Finishes TLS session and returns the socket.
 
size_t ReadSome (void *buf, size_t len, Deadline deadline) override
 Receives at least one byte from the socket.
 
size_t ReadAll (void *buf, size_t len, Deadline deadline) override
 Receives exactly len bytes from the socket.
 
size_t WriteAll (const void *buf, size_t len, Deadline deadline) override
 Writes exactly len bytes to the socket.
 
size_t WriteAll (std::initializer_list< IoData > list, Deadline deadline) override
 
int GetRawFd ()
 
ReadableBaseGetReadableBase ()
 
WritableBaseGetWritableBase ()
 
virtual std::optional< size_t > ReadNoblock (void *buf, size_t len)
 
impl::ContextAccessor * TryGetContextAccessor ()
 For internal use only.
 
impl::ContextAccessor * TryGetContextAccessor ()
 For internal use only.
 

Static Public Member Functions

static TlsWrapper StartTlsClient (Socket &&socket, const std::string &server_name, Deadline deadline)
 Starts a TLS client on an opened socket.
 
static TlsWrapper StartTlsClient (Socket &&socket, const std::string &server_name, const crypto::Certificate &cert, const crypto::PrivateKey &key, Deadline deadline, const std::vector< crypto::Certificate > &extra_cert_authorities={})
 Starts a TLS client with client cert on an opened socket.
 
static TlsWrapper StartTlsServer (Socket &&socket, const crypto::Certificate &cert, const crypto::PrivateKey &key, Deadline deadline, const std::vector< crypto::Certificate > &extra_cert_authorities={})
 Starts a TLS server on an opened socket.
 

Protected Member Functions

void SetReadableContextAccessor (impl::ContextAccessor *ca)
 
void SetWritableContextAccessor (impl::ContextAccessor *ca)
 

Member Function Documentation

◆ GetReadableBase()

ReadableBase & engine::io::RwBase::GetReadableBase ( )
inlineinherited

Definition at line 109 of file common.hpp.

◆ GetWritableBase()

WritableBase & engine::io::RwBase::GetWritableBase ( )
inlineinherited

Definition at line 111 of file common.hpp.

◆ IsValid()

bool engine::io::TlsWrapper::IsValid ( ) const
overridevirtual

Whether the socket is valid.

Implements engine::io::ReadableBase.

◆ operator bool()

engine::io::TlsWrapper::operator bool ( ) const
inlineexplicit

Whether the socket is valid.

Definition at line 57 of file tls_wrapper.hpp.

◆ ReadAll()

size_t engine::io::TlsWrapper::ReadAll ( void * buf,
size_t len,
Deadline deadline )
inlineoverridevirtual

Receives exactly len bytes from the socket.

Note
Can return less than len if socket is closed by peer.

Implements engine::io::ReadableBase.

Definition at line 95 of file tls_wrapper.hpp.

◆ ReadNoblock()

virtual std::optional< size_t > engine::io::ReadableBase::ReadNoblock ( void * buf,
size_t len )
inlinevirtualinherited

Receives up to len (including zero) bytes from the stream.

Returns
filled-in optional on data presence (e.g. 0, 1, 2... bytes) empty optional otherwise

Reimplemented in engine::io::Socket.

Definition at line 39 of file common.hpp.

◆ ReadSome()

size_t engine::io::TlsWrapper::ReadSome ( void * buf,
size_t len,
Deadline deadline )
inlineoverridevirtual

Receives at least one byte from the socket.

Returns
0 if connection is closed on one side and no data could be received any more, received bytes count otherwise.

Implements engine::io::ReadableBase.

Definition at line 89 of file tls_wrapper.hpp.

◆ RecvAll()

size_t engine::io::TlsWrapper::RecvAll ( void * buf,
size_t len,
Deadline deadline )

Receives exactly len bytes from the socket.

Note
Can return less than len if socket is closed by peer.

◆ RecvSome()

size_t engine::io::TlsWrapper::RecvSome ( void * buf,
size_t len,
Deadline deadline )

Receives at least one byte from the socket.

Returns
0 if connection is closed on one side and no data could be received any more, received bytes count otherwise.

◆ SendAll()

size_t engine::io::TlsWrapper::SendAll ( const void * buf,
size_t len,
Deadline deadline )

Sends exactly len bytes to the socket.

Note
Can return less than len if socket is closed by peer.

◆ SetReadableContextAccessor()

void engine::io::ReadableBase::SetReadableContextAccessor ( impl::ContextAccessor * ca)
inlineprotectedinherited

Definition at line 57 of file common.hpp.

◆ SetWritableContextAccessor()

void engine::io::WritableBase::SetWritableContextAccessor ( impl::ContextAccessor * ca)
inlineprotectedinherited

Definition at line 95 of file common.hpp.

◆ StopTls()

Socket engine::io::TlsWrapper::StopTls ( Deadline deadline)

Finishes TLS session and returns the socket.

Warning
Wrapper becomes invalid on entry and can only be used to retry socket extraction if interrupted.

◆ TryGetContextAccessor() [1/2]

impl::ContextAccessor * engine::io::ReadableBase::TryGetContextAccessor ( )
inlineinherited

For internal use only.

Definition at line 54 of file common.hpp.

◆ TryGetContextAccessor() [2/2]

impl::ContextAccessor * engine::io::WritableBase::TryGetContextAccessor ( )
inlineinherited

For internal use only.

Definition at line 92 of file common.hpp.

◆ WaitReadable()

bool engine::io::TlsWrapper::WaitReadable ( Deadline )
overridevirtual

Suspends current task until the socket has data available.

Implements engine::io::ReadableBase.

◆ WaitWriteable()

bool engine::io::TlsWrapper::WaitWriteable ( Deadline )
overridevirtual

Suspends current task until the socket can accept more data.

Implements engine::io::WritableBase.

◆ WriteAll() [1/2]

size_t engine::io::TlsWrapper::WriteAll ( const void * buf,
size_t len,
Deadline deadline )
inlineoverridevirtual

Writes exactly len bytes to the socket.

Note
Can return less than len if socket is closed by peer.

Implements engine::io::WritableBase.

Definition at line 101 of file tls_wrapper.hpp.

◆ WriteAll() [2/2]

size_t engine::io::TlsWrapper::WriteAll ( std::initializer_list< IoData > list,
Deadline deadline )
overridevirtual

Reimplemented from engine::io::WritableBase.


The documentation for this class was generated from the following file: