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
 
bool WaitWriteable (Deadline) override
 
size_t RecvSome (void *buf, size_t len, Deadline deadline)
 Receives at least one byte from the socket.
 
std::optional< size_t > RecvNoblock (void *buf, size_t len)
 Receives up to len bytes 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.
 
std::optional< size_t > ReadNoblock (void *buf, size_t len) override
 Receives up to len bytes from the stream.
 
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 ()
 
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::CertificatesChain &cert_chain, 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 110 of file common.hpp.

◆ GetWritableBase()

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

Definition at line 112 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 113 of file tls_wrapper.hpp.

◆ ReadNoblock()

std::optional< size_t > engine::io::TlsWrapper::ReadNoblock ( void *  buf,
size_t  len 
)
inlineoverridevirtual

Receives up to len bytes from the stream.

Returns
  • nullopt on data absence
  • optional{0} if socket is closed by peer.
  • optional{data_bytes_available} otherwise, 1 <= data_bytes_available <= len

Reimplemented from engine::io::ReadableBase.

Definition at line 102 of file tls_wrapper.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 107 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.

◆ RecvNoblock()

std::optional< size_t > engine::io::TlsWrapper::RecvNoblock ( void *  buf,
size_t  len 
)

Receives up to len bytes from the socket.

Returns
  • nullopt on data absence
  • optional{0} if socket is closed by peer.
  • optional{data_bytes_available} otherwise, 1 <= data_bytes_available <= len

◆ 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 58 of file common.hpp.

◆ SetWritableContextAccessor()

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

Definition at line 96 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 55 of file common.hpp.

◆ TryGetContextAccessor() [2/2]

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

For internal use only.

Definition at line 93 of file common.hpp.

◆ WaitReadable()

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

Suspends current task until the socket has data available.

Returns
false on timeout or on task cancellations; true otherwise.

Implements engine::io::ReadableBase.

◆ WaitWriteable()

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

Suspends current task until the socket can accept more data.

Returns
false on timeout or on task cancellations; true otherwise.

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 119 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: