D++ (DPP)
C++ Discord API Bot Library
dpp::ssl_client Class Reference

Implements a simple non-blocking SSL stream client. More...

#include <sslclient.h>

+ Inheritance diagram for dpp::ssl_client:
+ Collaboration diagram for dpp::ssl_client:

Public Member Functions

uint64_t get_bytes_out ()
 
uint64_t get_bytes_in ()
 
std::string get_cipher ()
 
 ssl_client (const std::string &_hostname, const std::string &_port="443")
 Connect to a specified host and port. Throws std::runtime_error on fatal error. More...
 
void read_loop ()
 Nonblocking I/O loop. More...
 
virtual ~ssl_client ()
 Destroy the ssl_client object. More...
 
virtual bool handle_buffer (std::string &buffer)
 Handle input from the input buffer. More...
 
virtual void write (const std::string &data)
 Write to the output buffer. More...
 
virtual void close ()
 Close SSL connection. More...
 
virtual void log (dpp::loglevel severity, const std::string &msg) const
 Log a message. More...
 

Public Attributes

socket_callback_t custom_readable_fd
 Attaching an additional file descriptor to this function will send notifications when there is data to read. More...
 
socket_callback_t custom_writeable_fd
 Attaching an additional file descriptor to this function will send notifications when you are able to write to the socket. More...
 
socket_notification_t custom_readable_ready
 This event will be called when you can read from the custom fd. More...
 
socket_notification_t custom_writeable_ready
 This event will be called when you can write to a custom fd. More...
 

Protected Member Functions

virtual void one_second_timer ()
 
virtual void connect ()
 Start SSL connection and connect to TCP endpoint. More...
 

Protected Attributes

std::string buffer
 
std::string obuffer
 
bool nonblocking
 
dpp::socket sfd
 
opensslcontext * ssl
 
std::string cipher
 
time_t last_tick
 
std::string hostname
 
std::string port
 
uint64_t bytes_out
 
uint64_t bytes_in
 

Detailed Description

Implements a simple non-blocking SSL stream client.

Note that although the design is non-blocking the run() method will execute in an infinite loop until the socket disconnects. This is intended to be run within a std::thread.

Constructor & Destructor Documentation

◆ ssl_client()

dpp::ssl_client::ssl_client ( const std::string &  _hostname,
const std::string &  _port = "443" 
)

Connect to a specified host and port. Throws std::runtime_error on fatal error.

Parameters
_hostnameThe hostname to connect to
_portthe Port number to connect to
Exceptions
dpp::exceptionFailed to initialise connection

◆ ~ssl_client()

virtual dpp::ssl_client::~ssl_client ( )
virtual

Destroy the ssl_client object.

Member Function Documentation

◆ close()

virtual void dpp::ssl_client::close ( )
virtual

Close SSL connection.

Reimplemented in dpp::websocket_client.

◆ connect()

virtual void dpp::ssl_client::connect ( )
protectedvirtual

Start SSL connection and connect to TCP endpoint.

Exceptions
dpp::exceptionFailed to initialise connection

Reimplemented in dpp::websocket_client.

◆ get_bytes_in()

uint64_t dpp::ssl_client::get_bytes_in ( )

Get total bytes received

◆ get_bytes_out()

uint64_t dpp::ssl_client::get_bytes_out ( )

Get total bytes sent

◆ get_cipher()

std::string dpp::ssl_client::get_cipher ( )

Get SSL cipher name

◆ handle_buffer()

virtual bool dpp::ssl_client::handle_buffer ( std::string &  buffer)
virtual

Handle input from the input buffer.

Parameters
bufferthe buffer content. Will be modified removing any processed front elements

Reimplemented in dpp::websocket_client.

◆ log()

virtual void dpp::ssl_client::log ( dpp::loglevel  severity,
const std::string &  msg 
) const
virtual

Log a message.

Parameters
severityseverity of log message
msgLog message to send

Reimplemented in dpp::discord_client, and dpp::discord_voice_client.

◆ one_second_timer()

virtual void dpp::ssl_client::one_second_timer ( )
protectedvirtual

Called every second

Reimplemented in dpp::discord_client, dpp::discord_voice_client, and dpp::websocket_client.

◆ read_loop()

void dpp::ssl_client::read_loop ( )

Nonblocking I/O loop.

Exceptions
std::exceptionAny std::exception (or derivative) thrown from read_loop() causes reconnection of the shard

◆ write()

virtual void dpp::ssl_client::write ( const std::string &  data)
virtual

Write to the output buffer.

Parameters
dataData to be written to the buffer

Reimplemented in dpp::websocket_client.

Member Data Documentation

◆ buffer

std::string dpp::ssl_client::buffer
protected

Input buffer received from openssl

◆ bytes_in

uint64_t dpp::ssl_client::bytes_in
protected

Bytes in

◆ bytes_out

uint64_t dpp::ssl_client::bytes_out
protected

Bytes out

◆ cipher

std::string dpp::ssl_client::cipher
protected

SSL cipher in use

◆ custom_readable_fd

socket_callback_t dpp::ssl_client::custom_readable_fd

Attaching an additional file descriptor to this function will send notifications when there is data to read.

NOTE: Only hook this if you NEED it as it can increase CPU usage of the thread! Returning -1 means that you don't want to be notified.

◆ custom_readable_ready

socket_notification_t dpp::ssl_client::custom_readable_ready

This event will be called when you can read from the custom fd.

◆ custom_writeable_fd

socket_callback_t dpp::ssl_client::custom_writeable_fd

Attaching an additional file descriptor to this function will send notifications when you are able to write to the socket.

NOTE: Only hook this if you NEED it as it can increase CPU usage of the thread! You should toggle this to -1 when you do not have anything to write otherwise it'll keep triggering repeatedly (it is level triggered).

◆ custom_writeable_ready

socket_notification_t dpp::ssl_client::custom_writeable_ready

This event will be called when you can write to a custom fd.

◆ hostname

std::string dpp::ssl_client::hostname
protected

Hostname connected to

◆ last_tick

time_t dpp::ssl_client::last_tick
protected

For timers

◆ nonblocking

bool dpp::ssl_client::nonblocking
protected

True if in nonblocking mode. The socket switches to nonblocking mode once ReadLoop is called.

◆ obuffer

std::string dpp::ssl_client::obuffer
protected

Output buffer for sending to openssl

◆ port

std::string dpp::ssl_client::port
protected

Port connected to

◆ sfd

dpp::socket dpp::ssl_client::sfd
protected

Raw file descriptor of connection

◆ ssl

opensslcontext* dpp::ssl_client::ssl
protected

Openssl opaque contexts

D++ Library version 10.0.34D++ Library version 10.0.33D++ Library version 10.0.32D++ Library version 10.0.31D++ Library version 10.0.30D++ Library version 10.0.29D++ Library version 10.0.28D++ Library version 10.0.27D++ Library version 10.0.26D++ Library version 10.0.25D++ Library version 10.0.24D++ Library version 10.0.23D++ Library version 10.0.22D++ Library version 10.0.21D++ Library version 10.0.20D++ Library version 10.0.19D++ Library version 10.0.18D++ Library version 10.0.17D++ Library version 10.0.16D++ Library version 10.0.15D++ Library version 10.0.14D++ Library version 10.0.13D++ Library version 10.0.12D++ Library version 10.0.11D++ Library version 10.0.10D++ Library version 10.0.9D++ Library version 10.0.8D++ Library version 10.0.7D++ Library version 10.0.6D++ Library version 10.0.5D++ Library version 10.0.4D++ Library version 10.0.3D++ Library version 10.0.2D++ Library version 10.0.1D++ Library version 10.0.0D++ Library version 9.0.19D++ Library version 9.0.18D++ Library version 9.0.17D++ Library version 9.0.16D++ Library version 9.0.15D++ Library version 9.0.14D++ Library version 9.0.13D++ Library version 9.0.12D++ Library version 9.0.11D++ Library version 9.0.10D++ Library version 9.0.9D++ Library version 9.0.8D++ Library version 9.0.7D++ Library version 9.0.6D++ Library version 9.0.5D++ Library version 9.0.4D++ Library version 9.0.3D++ Library version 9.0.2D++ Library version 9.0.1D++ Library version 9.0.0D++ Library version 1.0.2D++ Library version 1.0.1D++ Library version 1.0.0