![]() |
D++ (DPP)
C++ Discord API Bot Library
|
#include <http_server_request.h>
Public Member Functions | |
http_state | get_state () const |
Get request state. More... | |
std::string | get_response_body () const |
Get current response body. More... | |
std::string | get_request_body () const |
Get current request body. More... | |
uint16_t | get_status () const |
Get current status code. More... | |
http_server_request (cluster *creator, socket fd, uint16_t port, bool plaintext_downgrade, const std::string &private_key, const std::string &public_key, http_server_request_event handle_request) | |
Construct a new server request object. Server request objects are instantiated for an incoming server connection, as such they already have a file descriptor. More... | |
virtual | ~http_server_request () override |
Destroy the https client object. More... | |
virtual bool | handle_buffer (std::string &buffer) override |
Processes incoming data from the SSL socket input buffer. More... | |
virtual void | close () override |
Close HTTPS socket. More... | |
virtual void | one_second_timer () override |
Fires every second from the underlying socket I/O loop, used for timeouts. More... | |
const std::string | get_header (const std::string &header_name) const |
Get a HTTP request header. More... | |
size_t | get_header_count (const std::string &header_name) const |
Get the number of headers with the same header name. More... | |
std::list< std::string > | get_header_list (const std::string &header_name) const |
Get a set of HTTP request headers with a common name. More... | |
std::multimap< std::string, std::string > | get_headers () const |
Get all HTTP request headers. More... | |
http_server_request & | set_response_header (const std::string &header, const std::string &value) |
Set a response header. More... | |
http_server_request & | set_response_body (const std::string &new_content) |
Set the response content. More... | |
http_server_request & | set_status (uint16_t new_status) |
Set the response HTTP status, e.g. 200 for OK, 404 for not found, 429 for rate limited etc. More... | |
std::string | get_response () |
Get whole response as a string. More... | |
void | enable_raw_tracing () |
For low-level debugging, calling this function will enable low level I/O logging for this connection to the logger. This can be very loud, and output a lot of data, so only enable it selectively where you need it. More... | |
uint64_t | get_bytes_out () |
Get the bytes out objectGet total bytes sent. More... | |
uint64_t | get_bytes_in () |
Get total bytes received. More... | |
uint64_t | get_unique_id () const |
Every request made has a unique ID. This increments for every request, starting at 1. You can use this for statistics, or to associate requests and replies in external event loops. More... | |
std::string | get_cipher () |
Get SSL cipher name. More... | |
void | read_loop () |
Set up non blocking I/O and configure on_read, on_write and on_error. More... | |
void | socket_write (const std::string_view data) |
Write to the output buffer. More... | |
virtual void | log (dpp::loglevel severity, const std::string &msg) const |
Log a message. More... | |
void | complete_handshake (const struct socket_events *ev) |
Called while SSL handshake is in progress. If the handshake completes, the state of the socket is progressed to an established state. More... | |
void | on_read (dpp::socket fd, const struct dpp::socket_events &ev) |
Called when the TCP socket has data to read. More... | |
void | on_write (dpp::socket fd, const struct dpp::socket_events &e) |
Called when the TCP socket can be written to without blocking. More... | |
void | on_error (dpp::socket fd, const struct dpp::socket_events &, int error_code) |
Called when there is an error on the TCP socket. More... | |
Public Attributes | |
bool | timed_out |
If true the response timed out while waiting. More... | |
uint64_t | content_length {ULLONG_MAX} |
Content length sent by client. More... | |
bool | keepalive |
True if we are keeping the connection alive after it has finished. More... | |
class cluster * | owner |
Owning cluster. More... | |
std::string | private_key_file |
Private key PEM file path for inbound SSL connections. More... | |
std::string | public_key_file |
Public key PEM file path for inbound SSL connections. More... | |
Protected Member Functions | |
virtual void | connect () override |
Start the connection. More... | |
void | on_buffer_drained () override |
Called when the output buffer is drained to empty. More... | |
uint64_t | get_max_post_size () const |
Maximum size of POST body. More... | |
uint64_t | get_max_header_size () const |
Maximum size of headers. More... | |
void | generate_error (uint16_t error_code, const std::string &message) |
Reply with an error message. More... | |
void | do_raw_trace (const std::string &message) const |
If raw_trace is set to true, log a debug message for this connection. More... | |
Protected Attributes | |
http_state | state |
Current connection state. More... | |
uint16_t | status {0} |
HTTP status code for response. More... | |
std::string | buffer |
Input buffer received from socket. More... | |
std::string | obuffer |
Output buffer for sending to socket. More... | |
dpp::socket | sfd |
Raw file descriptor of connection. More... | |
openssl_connection * | ssl |
Openssl opaque contexts. More... | |
std::string | cipher |
SSL cipher in use. More... | |
time_t | last_tick |
For timers. More... | |
time_t | start |
Start time of connection. More... | |
uint8_t | connect_retries {0} |
How many times we retried connect() More... | |
std::string | hostname |
Hostname connected to. More... | |
std::string | port |
Port connected to. More... | |
uint64_t | bytes_out |
Bytes out. More... | |
uint64_t | bytes_in |
Bytes in. More... | |
bool | plaintext |
True for a plain text connection. More... | |
bool | connected {false} |
True if connection is completed. More... | |
bool | tcp_connect_done {false} |
True if tcp connect() succeeded. More... | |
timer | timer_handle |
Timer handle for one second timer. More... | |
uint64_t | unique_id |
Unique ID of socket used as a nonce You can use this to identify requests vs reply if you want. D++ itself only sets this, and does not use it in any logic. It starts at 1 and increments for each request made. More... | |
bool | raw_trace {false} |
Set this to true to log all IO to debug for this connection. This is an internal developer facility. Do not enable it unless you need to, as it will be very noisy. More... | |
dpp::http_server_request::http_server_request | ( | cluster * | creator, |
socket | fd, | ||
uint16_t | port, | ||
bool | plaintext_downgrade, | ||
const std::string & | private_key, | ||
const std::string & | public_key, | ||
http_server_request_event | handle_request | ||
) |
Construct a new server request object. Server request objects are instantiated for an incoming server connection, as such they already have a file descriptor.
creator | creating owner |
fd | file descriptor |
port | Port the connection came in on |
plaintext_downgrade | true if plaintext, false if SSL |
private_key | if SSL, the path to the private key PEM |
public_key | if SSL, the path to the public key PEM |
handle_request | request handler callback |
|
overridevirtual |
Destroy the https client object.
|
overridevirtual |
Close HTTPS socket.
Reimplemented from dpp::ssl_connection.
|
inherited |
Called while SSL handshake is in progress. If the handshake completes, the state of the socket is progressed to an established state.
ev | Socket events for the socket |
|
overrideprotectedvirtual |
Start the connection.
Reimplemented from dpp::ssl_connection.
|
protectedinherited |
If raw_trace is set to true, log a debug message for this connection.
message | debug message |
|
inherited |
For low-level debugging, calling this function will enable low level I/O logging for this connection to the logger. This can be very loud, and output a lot of data, so only enable it selectively where you need it.
Generally, you won't need this, it is a library development utility.
|
protected |
Reply with an error message.
error_code | error code |
message | message |
|
inherited |
Get total bytes received.
|
inherited |
Get the bytes out objectGet total bytes sent.
|
inherited |
Get SSL cipher name.
const std::string dpp::http_server_request::get_header | ( | const std::string & | header_name | ) | const |
Get a HTTP request header.
header_name | Header name to find, case insensitive |
size_t dpp::http_server_request::get_header_count | ( | const std::string & | header_name | ) | const |
Get the number of headers with the same header name.
header_name |
std::list< std::string > dpp::http_server_request::get_header_list | ( | const std::string & | header_name | ) | const |
Get a set of HTTP request headers with a common name.
header_name |
std::multimap< std::string, std::string > dpp::http_server_request::get_headers | ( | ) | const |
Get all HTTP request headers.
|
protected |
Maximum size of headers.
|
protected |
Maximum size of POST body.
std::string dpp::http_server_request::get_request_body | ( | ) | const |
Get current request body.
std::string dpp::http_server_request::get_response | ( | ) |
Get whole response as a string.
std::string dpp::http_server_request::get_response_body | ( | ) | const |
Get current response body.
http_state dpp::http_server_request::get_state | ( | ) | const |
Get request state.
uint16_t dpp::http_server_request::get_status | ( | ) | const |
Get current status code.
|
inherited |
Every request made has a unique ID. This increments for every request, starting at 1. You can use this for statistics, or to associate requests and replies in external event loops.
|
overridevirtual |
Processes incoming data from the SSL socket input buffer.
buffer | The buffer contents. Can modify this value removing the head elements when processed. |
Reimplemented from dpp::ssl_connection.
|
virtualinherited |
Log a message.
severity | severity of log message |
msg | Log message to send |
Reimplemented in dpp::discord_client, and dpp::discord_voice_client.
|
overrideprotectedvirtual |
Called when the output buffer is drained to empty.
Reimplemented from dpp::ssl_connection.
|
inherited |
Called when there is an error on the TCP socket.
fd | File descriptor |
error_code | Error code |
|
inherited |
Called when the TCP socket has data to read.
fd | File descriptor |
ev | Socket events |
|
inherited |
Called when the TCP socket can be written to without blocking.
fd | File descriptor |
e | Socket events |
|
overridevirtual |
Fires every second from the underlying socket I/O loop, used for timeouts.
Reimplemented from dpp::ssl_connection.
|
inherited |
Set up non blocking I/O and configure on_read, on_write and on_error.
std::exception | Any std::exception (or derivative) thrown from read_loop() indicates setup failed |
http_server_request & dpp::http_server_request::set_response_body | ( | const std::string & | new_content | ) |
Set the response content.
new_content | response content |
http_server_request & dpp::http_server_request::set_response_header | ( | const std::string & | header, |
const std::string & | value | ||
) |
Set a response header.
header | header name |
value | header value |
http_server_request & dpp::http_server_request::set_status | ( | uint16_t | new_status | ) |
Set the response HTTP status, e.g. 200 for OK, 404 for not found, 429 for rate limited etc.
new_status | HTTP status |
|
inherited |
Write to the output buffer.
data | Data to be written to the buffer. |
|
protectedinherited |
Input buffer received from socket.
|
protectedinherited |
Bytes in.
|
protectedinherited |
Bytes out.
|
protectedinherited |
SSL cipher in use.
|
protectedinherited |
How many times we retried connect()
|
protectedinherited |
True if connection is completed.
uint64_t dpp::http_server_request::content_length {ULLONG_MAX} |
Content length sent by client.
|
protectedinherited |
Hostname connected to.
|
inherited |
True if we are keeping the connection alive after it has finished.
|
protectedinherited |
For timers.
|
protectedinherited |
Output buffer for sending to socket.
|
inherited |
Owning cluster.
|
protectedinherited |
True for a plain text connection.
|
protectedinherited |
Port connected to.
|
inherited |
Private key PEM file path for inbound SSL connections.
|
inherited |
Public key PEM file path for inbound SSL connections.
|
protectedinherited |
Set this to true to log all IO to debug for this connection. This is an internal developer facility. Do not enable it unless you need to, as it will be very noisy.
|
protectedinherited |
Raw file descriptor of connection.
|
protectedinherited |
Openssl opaque contexts.
|
protectedinherited |
Start time of connection.
|
protected |
Current connection state.
|
protected |
HTTP status code for response.
|
protectedinherited |
True if tcp connect() succeeded.
bool dpp::http_server_request::timed_out |
If true the response timed out while waiting.
|
protectedinherited |
Timer handle for one second timer.
|
protectedinherited |
Unique ID of socket used as a nonce You can use this to identify requests vs reply if you want. D++ itself only sets this, and does not use it in any logic. It starts at 1 and increments for each request made.