httplib::detail Namespace Reference

Namespaces

namespace  case_ignore
 
namespace  udl
 

Classes

class  BufferStream
 
class  compressor
 
class  ContentProviderAdapter
 
class  decompressor
 
struct  FileStat
 
class  MatcherBase
 
class  mmap
 
class  MultipartFormDataParser
 
class  nocompressor
 
class  PathParamsMatcher
 Captures parameters in request path and stores them in Request::path_params. More...
 
class  RegexMatcher
 Performs std::regex_match on request path and stores the result in Request::matches. More...
 
struct  scope_exit
 
class  SocketStream
 
class  stream_line_reader
 

Enumerations

enum class  EncodingType { None = 0 , Gzip , Brotli }
 

Functions

std::string base64_encode (const std::string &in)
 
bool bind_ip_address (socket_t sock, const std::string &host)
 
bool can_compress_content_type (const std::string &content_type)
 
int close_socket (socket_t sock)
 
socket_t create_client_socket (const std::string &host, const std::string &ip, int port, int address_family, bool tcp_nodelay, bool ipv6_v6only, SocketOptions socket_options, time_t connection_timeout_sec, time_t connection_timeout_usec, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, time_t write_timeout_usec, const std::string &intf, Error &error)
 
template<typename BindOrConnect>
socket_t create_socket (const std::string &host, const std::string &ip, int port, int address_family, int socket_flags, bool tcp_nodelay, bool ipv6_v6only, SocketOptions socket_options, BindOrConnect bind_or_connect)
 
std::string decode_url (const std::string &s, bool convert_plus_to_space)
 
void divide (const char *data, std::size_t size, char d, std::function< void(const char *, std::size_t, const char *, std::size_t)> fn)
 
void divide (const std::string &str, char d, std::function< void(const char *, std::size_t, const char *, std::size_t)> fn)
 
template<typename T, typename U>
void duration_to_sec_and_usec (const T &duration, U callback)
 
std::string encode_query_param (const std::string &value)
 
std::string encode_url (const std::string &s)
 
EncodingType encoding_type (const Request &req, const Response &res)
 
std::string escape_abstract_namespace_unix_domain (const std::string &s)
 
bool expect_content (const Request &req)
 
std::string file_extension (const std::string &path)
 
std::string find_content_type (const std::string &path, const std::map< std::string, std::string > &user_data, const std::string &default_content_type)
 
bool from_hex_to_i (const std::string &s, size_t i, size_t cnt, int &val)
 
std::string from_i_to_hex (size_t n)
 
const char * get_header_value (const Headers &headers, const std::string &key, const char *def, size_t id)
 
uint64_t get_header_value_u64 (const Headers &headers, const std::string &key, uint64_t def, size_t id)
 
bool get_ip_and_port (const struct sockaddr_storage &addr, socklen_t addr_len, std::string &ip, int &port)
 
void get_local_ip_and_port (socket_t sock, std::string &ip, int &port)
 
size_t get_multipart_ranges_data_length (const Request &req, const std::string &boundary, const std::string &content_type, size_t content_length)
 
std::pair< size_t, size_t > get_range_offset_and_length (Range r, size_t content_length)
 
void get_remote_ip_and_port (socket_t sock, std::string &ip, int &port)
 
template<typename T>
ssize_t handle_EINTR (T fn)
 
bool has_crlf (const std::string &s)
 
bool has_header (const Headers &headers, const std::string &key)
 
std::string if2ip (int address_family, const std::string &ifn)
 
bool is_chunked_transfer_encoding (const Headers &headers)
 
bool is_connection_error ()
 
bool is_hex (char c, int &v)
 
bool is_multipart_boundary_chars_valid (const std::string &boundary)
 
bool is_socket_alive (socket_t sock)
 
bool is_space_or_tab (char c)
 
bool is_valid_path (const std::string &path)
 
bool keep_alive (const std::atomic< socket_t > &svr_sock, socket_t sock, time_t keep_alive_timeout_sec)
 
std::string make_content_range_header_field (const std::pair< size_t, size_t > &offset_and_length, size_t content_length)
 
std::string make_multipart_data_boundary ()
 
void make_multipart_ranges_data (const Request &req, Response &res, const std::string &boundary, const std::string &content_type, size_t content_length, std::string &data)
 
template<class T, class... Args>
std::enable_if<!std::is_array< T >::value, std::unique_ptr< T > >::type make_unique (Args &&...args)
 
template<class T>
std::enable_if< std::is_array< T >::value, std::unique_ptr< T > >::type make_unique (std::size_t n)
 
std::string params_to_query_str (const Params &params)
 
void parse_disposition_params (const std::string &s, Params &params)
 
template<typename T>
bool parse_header (const char *beg, const char *end, T fn)
 
bool parse_multipart_boundary (const std::string &content_type, std::string &boundary)
 
void parse_query_text (const char *data, std::size_t size, Params &params)
 
void parse_query_text (const std::string &s, Params &params)
 
bool parse_range_header (const std::string &s, Ranges &ranges)
 
bool parse_www_authenticate (const Response &res, std::map< std::string, std::string > &auth, bool is_proxy)
 
template<typename T, typename U>
bool prepare_content_receiver (T &x, int &status, ContentReceiverWithProgress receiver, bool decompress, U callback)
 
bool process_client_socket (socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, time_t write_timeout_usec, std::function< bool(Stream &)> callback)
 
template<typename SToken, typename CToken, typename Content>
bool process_multipart_ranges_data (const Request &req, const std::string &boundary, const std::string &content_type, size_t content_length, SToken stoken, CToken ctoken, Content content)
 
template<typename T>
bool process_server_socket (const std::atomic< socket_t > &svr_sock, socket_t sock, size_t keep_alive_max_count, time_t keep_alive_timeout_sec, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, time_t write_timeout_usec, T callback)
 
template<typename T>
bool process_server_socket_core (const std::atomic< socket_t > &svr_sock, socket_t sock, size_t keep_alive_max_count, time_t keep_alive_timeout_sec, T callback)
 
std::string random_string (size_t length)
 
bool range_error (Request &req, Response &res)
 
template<typename T>
bool read_content (Stream &strm, T &x, size_t payload_max_length, int &status, Progress progress, ContentReceiverWithProgress receiver, bool decompress)
 
template<typename T>
bool read_content_chunked (Stream &strm, T &x, ContentReceiverWithProgress out)
 
bool read_content_with_length (Stream &strm, uint64_t len, Progress progress, ContentReceiverWithProgress out)
 
bool read_content_without_length (Stream &strm, ContentReceiverWithProgress out)
 
void read_file (const std::string &path, std::string &out)
 
bool read_headers (Stream &strm, Headers &headers)
 
ssize_t read_socket (socket_t sock, void *ptr, size_t size, int flags)
 
template<typename T>
bool redirect (T &cli, Request &req, Response &res, const std::string &path, const std::string &location, Error &error)
 
ssize_t select_read (socket_t sock, time_t sec, time_t usec)
 
ssize_t select_write (socket_t sock, time_t sec, time_t usec)
 
ssize_t send_socket (socket_t sock, const void *ptr, size_t size, int flags)
 
std::string serialize_multipart_formdata (const MultipartFormDataItems &items, const std::string &boundary, bool finish=true)
 
std::string serialize_multipart_formdata_finish (const std::string &boundary)
 
std::string serialize_multipart_formdata_get_content_type (const std::string &boundary)
 
template<typename T>
std::string serialize_multipart_formdata_item_begin (const T &item, const std::string &boundary)
 
std::string serialize_multipart_formdata_item_end ()
 
void set_nonblocking (socket_t sock, bool nonblocking)
 
int shutdown_socket (socket_t sock)
 
void skip_content_with_length (Stream &strm, uint64_t len)
 
void split (const char *b, const char *e, char d, size_t m, std::function< void(const char *, const char *)> fn)
 
void split (const char *b, const char *e, char d, std::function< void(const char *, const char *)> fn)
 
unsigned int str2tag (const std::string &s)
 
constexpr unsigned int str2tag_core (const char *s, size_t l, unsigned int h)
 
size_t to_utf8 (int code, char *buff)
 
std::pair< size_t, size_t > trim (const char *b, const char *e, size_t left, size_t right)
 
std::string trim_copy (const std::string &s)
 
std::string trim_double_quotes_copy (const std::string &s)
 
std::string unescape_abstract_namespace_unix_domain (const std::string &s)
 
Error wait_until_socket_is_ready (socket_t sock, time_t sec, time_t usec)
 
template<typename T>
bool write_content (Stream &strm, const ContentProvider &content_provider, size_t offset, size_t length, const T &is_shutting_down)
 
template<typename T>
bool write_content (Stream &strm, const ContentProvider &content_provider, size_t offset, size_t length, T is_shutting_down, Error &error)
 
template<typename T, typename U>
bool write_content_chunked (Stream &strm, const ContentProvider &content_provider, const T &is_shutting_down, U &compressor)
 
template<typename T, typename U>
bool write_content_chunked (Stream &strm, const ContentProvider &content_provider, const T &is_shutting_down, U &compressor, Error &error)
 
template<typename T>
bool write_content_without_length (Stream &strm, const ContentProvider &content_provider, const T &is_shutting_down)
 
bool write_data (Stream &strm, const char *d, size_t l)
 
ssize_t write_headers (Stream &strm, const Headers &headers)
 
template<typename T>
bool write_multipart_ranges_data (Stream &strm, const Request &req, Response &res, const std::string &boundary, const std::string &content_type, size_t content_length, const T &is_shutting_down)
 
ssize_t write_request_line (Stream &strm, const std::string &method, const std::string &path)
 
ssize_t write_response_line (Stream &strm, int status)
 

Enumeration Type Documentation

◆ EncodingType

enum class EncodingType
strong
Enumerator
None 
Gzip 
Brotli 

Function Documentation

◆ base64_encode()

std::string base64_encode ( const std::string & in)
inline

◆ bind_ip_address()

bool bind_ip_address ( socket_t sock,
const std::string & host )
inline

◆ can_compress_content_type()

bool can_compress_content_type ( const std::string & content_type)
inline

◆ close_socket()

int close_socket ( socket_t sock)
inline

◆ create_client_socket()

socket_t create_client_socket ( const std::string & host,
const std::string & ip,
int port,
int address_family,
bool tcp_nodelay,
bool ipv6_v6only,
SocketOptions socket_options,
time_t connection_timeout_sec,
time_t connection_timeout_usec,
time_t read_timeout_sec,
time_t read_timeout_usec,
time_t write_timeout_sec,
time_t write_timeout_usec,
const std::string & intf,
Error & error )
inline

◆ create_socket()

template<typename BindOrConnect>
socket_t create_socket ( const std::string & host,
const std::string & ip,
int port,
int address_family,
int socket_flags,
bool tcp_nodelay,
bool ipv6_v6only,
SocketOptions socket_options,
BindOrConnect bind_or_connect )

◆ decode_url()

std::string decode_url ( const std::string & s,
bool convert_plus_to_space )
inline

◆ divide() [1/2]

void divide ( const char * data,
std::size_t size,
char d,
std::function< void(const char *, std::size_t, const char *, std::size_t)> fn )
inline

◆ divide() [2/2]

void divide ( const std::string & str,
char d,
std::function< void(const char *, std::size_t, const char *, std::size_t)> fn )
inline

◆ duration_to_sec_and_usec()

template<typename T, typename U>
void duration_to_sec_and_usec ( const T & duration,
U callback )
inline

◆ encode_query_param()

std::string encode_query_param ( const std::string & value)
inline

◆ encode_url()

std::string encode_url ( const std::string & s)
inline

◆ encoding_type()

EncodingType encoding_type ( const Request & req,
const Response & res )
inline

◆ escape_abstract_namespace_unix_domain()

std::string escape_abstract_namespace_unix_domain ( const std::string & s)
inline

◆ expect_content()

bool expect_content ( const Request & req)
inline

◆ file_extension()

std::string file_extension ( const std::string & path)
inline

◆ find_content_type()

std::string find_content_type ( const std::string & path,
const std::map< std::string, std::string > & user_data,
const std::string & default_content_type )
inline

◆ from_hex_to_i()

bool from_hex_to_i ( const std::string & s,
size_t i,
size_t cnt,
int & val )
inline

◆ from_i_to_hex()

std::string from_i_to_hex ( size_t n)
inline

◆ get_header_value()

const char * get_header_value ( const Headers & headers,
const std::string & key,
const char * def,
size_t id )
inline

◆ get_header_value_u64()

uint64_t get_header_value_u64 ( const Headers & headers,
const std::string & key,
uint64_t def,
size_t id )
inline

◆ get_ip_and_port()

bool get_ip_and_port ( const struct sockaddr_storage & addr,
socklen_t addr_len,
std::string & ip,
int & port )
inline

◆ get_local_ip_and_port()

void get_local_ip_and_port ( socket_t sock,
std::string & ip,
int & port )
inline

◆ get_multipart_ranges_data_length()

size_t get_multipart_ranges_data_length ( const Request & req,
const std::string & boundary,
const std::string & content_type,
size_t content_length )
inline

◆ get_range_offset_and_length()

std::pair< size_t, size_t > get_range_offset_and_length ( Range r,
size_t content_length )
inline

◆ get_remote_ip_and_port()

void get_remote_ip_and_port ( socket_t sock,
std::string & ip,
int & port )
inline

◆ handle_EINTR()

template<typename T>
ssize_t handle_EINTR ( T fn)
inline

◆ has_crlf()

bool has_crlf ( const std::string & s)
inline

◆ has_header()

bool has_header ( const Headers & headers,
const std::string & key )
inline

◆ if2ip()

std::string if2ip ( int address_family,
const std::string & ifn )
inline

◆ is_chunked_transfer_encoding()

bool is_chunked_transfer_encoding ( const Headers & headers)
inline

◆ is_connection_error()

bool is_connection_error ( )
inline

◆ is_hex()

bool is_hex ( char c,
int & v )
inline

◆ is_multipart_boundary_chars_valid()

bool is_multipart_boundary_chars_valid ( const std::string & boundary)
inline

◆ is_socket_alive()

bool is_socket_alive ( socket_t sock)
inline

◆ is_space_or_tab()

bool is_space_or_tab ( char c)
inline

◆ is_valid_path()

bool is_valid_path ( const std::string & path)
inline

◆ keep_alive()

bool keep_alive ( const std::atomic< socket_t > & svr_sock,
socket_t sock,
time_t keep_alive_timeout_sec )
inline

◆ make_content_range_header_field()

std::string make_content_range_header_field ( const std::pair< size_t, size_t > & offset_and_length,
size_t content_length )
inline

◆ make_multipart_data_boundary()

std::string make_multipart_data_boundary ( )
inline

◆ make_multipart_ranges_data()

void make_multipart_ranges_data ( const Request & req,
Response & res,
const std::string & boundary,
const std::string & content_type,
size_t content_length,
std::string & data )
inline

◆ make_unique() [1/2]

template<class T, class... Args>
std::enable_if<!std::is_array< T >::value, std::unique_ptr< T > >::type make_unique ( Args &&... args)

◆ make_unique() [2/2]

template<class T>
std::enable_if< std::is_array< T >::value, std::unique_ptr< T > >::type make_unique ( std::size_t n)

◆ params_to_query_str()

std::string params_to_query_str ( const Params & params)
inline

◆ parse_disposition_params()

void parse_disposition_params ( const std::string & s,
Params & params )
inline

◆ parse_header()

template<typename T>
bool parse_header ( const char * beg,
const char * end,
T fn )
inline

◆ parse_multipart_boundary()

bool parse_multipart_boundary ( const std::string & content_type,
std::string & boundary )
inline

◆ parse_query_text() [1/2]

void parse_query_text ( const char * data,
std::size_t size,
Params & params )
inline

◆ parse_query_text() [2/2]

void parse_query_text ( const std::string & s,
Params & params )
inline

◆ parse_range_header()

bool parse_range_header ( const std::string & s,
Ranges & ranges )
inline

◆ parse_www_authenticate()

bool parse_www_authenticate ( const Response & res,
std::map< std::string, std::string > & auth,
bool is_proxy )
inline

◆ prepare_content_receiver()

template<typename T, typename U>
bool prepare_content_receiver ( T & x,
int & status,
ContentReceiverWithProgress receiver,
bool decompress,
U callback )

◆ process_client_socket()

bool process_client_socket ( socket_t sock,
time_t read_timeout_sec,
time_t read_timeout_usec,
time_t write_timeout_sec,
time_t write_timeout_usec,
std::function< bool(Stream &)> callback )
inline

◆ process_multipart_ranges_data()

template<typename SToken, typename CToken, typename Content>
bool process_multipart_ranges_data ( const Request & req,
const std::string & boundary,
const std::string & content_type,
size_t content_length,
SToken stoken,
CToken ctoken,
Content content )

◆ process_server_socket()

template<typename T>
bool process_server_socket ( const std::atomic< socket_t > & svr_sock,
socket_t sock,
size_t keep_alive_max_count,
time_t keep_alive_timeout_sec,
time_t read_timeout_sec,
time_t read_timeout_usec,
time_t write_timeout_sec,
time_t write_timeout_usec,
T callback )
inline

◆ process_server_socket_core()

template<typename T>
bool process_server_socket_core ( const std::atomic< socket_t > & svr_sock,
socket_t sock,
size_t keep_alive_max_count,
time_t keep_alive_timeout_sec,
T callback )
inline

◆ random_string()

std::string random_string ( size_t length)
inline

◆ range_error()

bool range_error ( Request & req,
Response & res )
inline

◆ read_content()

template<typename T>
bool read_content ( Stream & strm,
T & x,
size_t payload_max_length,
int & status,
Progress progress,
ContentReceiverWithProgress receiver,
bool decompress )

◆ read_content_chunked()

template<typename T>
bool read_content_chunked ( Stream & strm,
T & x,
ContentReceiverWithProgress out )
inline

◆ read_content_with_length()

bool read_content_with_length ( Stream & strm,
uint64_t len,
Progress progress,
ContentReceiverWithProgress out )
inline

◆ read_content_without_length()

bool read_content_without_length ( Stream & strm,
ContentReceiverWithProgress out )
inline

◆ read_file()

void read_file ( const std::string & path,
std::string & out )
inline

◆ read_headers()

bool read_headers ( Stream & strm,
Headers & headers )
inline

◆ read_socket()

ssize_t read_socket ( socket_t sock,
void * ptr,
size_t size,
int flags )
inline

◆ redirect()

template<typename T>
bool redirect ( T & cli,
Request & req,
Response & res,
const std::string & path,
const std::string & location,
Error & error )
inline

◆ select_read()

ssize_t select_read ( socket_t sock,
time_t sec,
time_t usec )
inline

◆ select_write()

ssize_t select_write ( socket_t sock,
time_t sec,
time_t usec )
inline

◆ send_socket()

ssize_t send_socket ( socket_t sock,
const void * ptr,
size_t size,
int flags )
inline

◆ serialize_multipart_formdata()

std::string serialize_multipart_formdata ( const MultipartFormDataItems & items,
const std::string & boundary,
bool finish = true )
inline

◆ serialize_multipart_formdata_finish()

std::string serialize_multipart_formdata_finish ( const std::string & boundary)
inline

◆ serialize_multipart_formdata_get_content_type()

std::string serialize_multipart_formdata_get_content_type ( const std::string & boundary)
inline

◆ serialize_multipart_formdata_item_begin()

template<typename T>
std::string serialize_multipart_formdata_item_begin ( const T & item,
const std::string & boundary )
inline

◆ serialize_multipart_formdata_item_end()

std::string serialize_multipart_formdata_item_end ( )
inline

◆ set_nonblocking()

void set_nonblocking ( socket_t sock,
bool nonblocking )
inline

◆ shutdown_socket()

int shutdown_socket ( socket_t sock)
inline

◆ skip_content_with_length()

void skip_content_with_length ( Stream & strm,
uint64_t len )
inline

◆ split() [1/2]

void split ( const char * b,
const char * e,
char d,
size_t m,
std::function< void(const char *, const char *)> fn )
inline

◆ split() [2/2]

void split ( const char * b,
const char * e,
char d,
std::function< void(const char *, const char *)> fn )
inline

◆ str2tag()

unsigned int str2tag ( const std::string & s)
inline

◆ str2tag_core()

unsigned int str2tag_core ( const char * s,
size_t l,
unsigned int h )
inlineconstexpr

◆ to_utf8()

size_t to_utf8 ( int code,
char * buff )
inline

◆ trim()

std::pair< size_t, size_t > trim ( const char * b,
const char * e,
size_t left,
size_t right )
inline

◆ trim_copy()

std::string trim_copy ( const std::string & s)
inline

◆ trim_double_quotes_copy()

std::string trim_double_quotes_copy ( const std::string & s)
inline

◆ unescape_abstract_namespace_unix_domain()

std::string unescape_abstract_namespace_unix_domain ( const std::string & s)
inline

◆ wait_until_socket_is_ready()

Error wait_until_socket_is_ready ( socket_t sock,
time_t sec,
time_t usec )
inline

◆ write_content() [1/2]

template<typename T>
bool write_content ( Stream & strm,
const ContentProvider & content_provider,
size_t offset,
size_t length,
const T & is_shutting_down )
inline

◆ write_content() [2/2]

template<typename T>
bool write_content ( Stream & strm,
const ContentProvider & content_provider,
size_t offset,
size_t length,
T is_shutting_down,
Error & error )
inline

◆ write_content_chunked() [1/2]

template<typename T, typename U>
bool write_content_chunked ( Stream & strm,
const ContentProvider & content_provider,
const T & is_shutting_down,
U & compressor )
inline

◆ write_content_chunked() [2/2]

template<typename T, typename U>
bool write_content_chunked ( Stream & strm,
const ContentProvider & content_provider,
const T & is_shutting_down,
U & compressor,
Error & error )
inline

◆ write_content_without_length()

template<typename T>
bool write_content_without_length ( Stream & strm,
const ContentProvider & content_provider,
const T & is_shutting_down )
inline

◆ write_data()

bool write_data ( Stream & strm,
const char * d,
size_t l )
inline

◆ write_headers()

ssize_t write_headers ( Stream & strm,
const Headers & headers )
inline

◆ write_multipart_ranges_data()

template<typename T>
bool write_multipart_ranges_data ( Stream & strm,
const Request & req,
Response & res,
const std::string & boundary,
const std::string & content_type,
size_t content_length,
const T & is_shutting_down )
inline

◆ write_request_line()

ssize_t write_request_line ( Stream & strm,
const std::string & method,
const std::string & path )
inline

◆ write_response_line()

ssize_t write_response_line ( Stream & strm,
int status )
inline