Libevhtp
1.2.10-dev
|
#include <evhtp-config.h>
#include <evthr.h>
#include <htparse.h>
#include <onigposix.h>
#include <sys/queue.h>
#include <event2/listener.h>
#include <event2/buffer.h>
#include <event2/bufferevent.h>
#include <event2/bufferevent_ssl.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/rand.h>
Go to the source code of this file.
Data Structures | |
struct | evhtp_defaults_5 |
struct | evhtp_alias_t |
struct | evhtp_t |
main structure containing all configuration information More... | |
struct | evhtp_callback_t |
structure containing a single callback and configuration More... | |
struct | evhtp_kv_t |
a generic key/value structure More... | |
struct | evhtp_uri_t |
a generic container representing an entire URI strucutre More... | |
struct | evhtp_authority_t |
structure which represents authority information in a URI More... | |
struct | evhtp_path_t |
structure which represents a URI path and or file More... | |
struct | evhtp_request_t |
a structure containing all information for a http request. More... | |
struct | evhtp_connection_t |
struct | evhtp_hooks_t |
struct | evhtp_ssl_cfg_t |
Typedefs | |
typedef SSL_SESSION | evhtp_ssl_sess_t |
typedef SSL | evhtp_ssl_t |
typedef SSL_CTX | evhtp_ssl_ctx_t |
typedef X509 | evhtp_x509_t |
typedef X509_STORE_CTX | evhtp_x509_store_ctx_t |
typedef struct evbuffer | evbuf_t |
typedef struct event | event_t |
typedef struct evconnlistener | evserv_t |
typedef struct bufferevent | evbev_t |
typedef pthread_mutex_t | evhtp_mutex_t |
typedef struct evhtp_callbacks_s | evhtp_callbacks_t |
typedef struct evhtp_kvs_s | evhtp_kvs_t |
typedef uint16_t | evhtp_res |
typedef uint8_t | evhtp_error_flags |
typedef enum evhtp_hook_type | evhtp_hook_type |
typedef enum evhtp_callback_type | evhtp_callback_type |
typedef enum evhtp_proto | evhtp_proto |
typedef enum evhtp_ssl_scache_type | evhtp_ssl_scache_type |
typedef enum evhtp_type | evhtp_type |
typedef void(* | evhtp_thread_init_cb) (evhtp_t *htp, evthr_t *thr, void *arg) |
typedef void(* | evhtp_callback_cb) (evhtp_request_t *req, void *arg) |
typedef void(* | evhtp_hook_err_cb) (evhtp_request_t *req, evhtp_error_flags errtype, void *arg) |
typedef void(* | evhtp_hook_event_cb) (evhtp_connection_t *conn, short events, void *arg) |
typedef evhtp_res(* | evhtp_hook) () |
typedef evhtp_res(* | evhtp_hook_conn_err_cb) (evhtp_connection_t *connection, evhtp_error_flags errtype, void *arg) |
typedef evhtp_res(* | evhtp_pre_accept_cb) (evhtp_connection_t *conn, void *arg) |
typedef evhtp_res(* | evhtp_post_accept_cb) (evhtp_connection_t *conn, void *arg) |
typedef evhtp_res(* | evhtp_hook_header_cb) (evhtp_request_t *req, evhtp_header_t *hdr, void *arg) |
typedef evhtp_res(* | evhtp_hook_headers_cb) (evhtp_request_t *req, evhtp_headers_t *hdr, void *arg) |
typedef evhtp_res(* | evhtp_hook_path_cb) (evhtp_request_t *req, evhtp_path_t *path, void *arg) |
typedef evhtp_res(* | evhtp_hook_read_cb) (evhtp_request_t *req, evbuf_t *buf, void *arg) |
typedef evhtp_res(* | evhtp_hook_request_fini_cb) (evhtp_request_t *req, void *arg) |
typedef evhtp_res(* | evhtp_hook_connection_fini_cb) (evhtp_connection_t *connection, void *arg) |
typedef evhtp_res(* | evhtp_hook_chunk_new_cb) (evhtp_request_t *r, uint64_t len, void *arg) |
typedef evhtp_res(* | evhtp_hook_chunk_fini_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* | evhtp_hook_chunks_fini_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* | evhtp_hook_headers_start_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* | evhtp_hook_hostname_cb) (evhtp_request_t *r, const char *hostname, void *arg) |
typedef evhtp_res(* | evhtp_hook_write_cb) (evhtp_connection_t *conn, void *arg) |
typedef int(* | evhtp_kvs_iterator) (evhtp_kv_t *kv, void *arg) |
typedef int(* | evhtp_headers_iterator) (evhtp_header_t *header, void *arg) |
typedef int(* | evhtp_ssl_verify_cb) (int pre_verify, evhtp_x509_store_ctx_t *ctx) |
typedef int(* | evhtp_ssl_chk_issued_cb) (evhtp_x509_store_ctx_t *ctx, evhtp_x509_t *x, evhtp_x509_t *issuer) |
typedef int(* | evhtp_ssl_scache_add) (evhtp_connection_t *connection, unsigned char *sid, int sid_len, evhtp_ssl_sess_t *sess) |
typedef void(* | evhtp_ssl_scache_del) (evhtp_t *htp, unsigned char *sid, int sid_len) |
typedef evhtp_ssl_sess_t *(* | evhtp_ssl_scache_get) (evhtp_connection_t *connection, unsigned char *sid, int sid_len) |
typedef void *(* | evhtp_ssl_scache_init) (evhtp_t *) |
Enumerations | |
enum | evhtp_ssl_scache_type { evhtp_ssl_scache_type_disabled = 0, evhtp_ssl_scache_type_internal, evhtp_ssl_scache_type_user, evhtp_ssl_scache_type_builtin } |
enum | evhtp_hook_type { evhtp_hook_on_header, evhtp_hook_on_headers, evhtp_hook_on_path, evhtp_hook_on_read, evhtp_hook_on_request_fini, evhtp_hook_on_connection_fini, evhtp_hook_on_new_chunk, evhtp_hook_on_chunk_complete, evhtp_hook_on_chunks_complete, evhtp_hook_on_headers_start, evhtp_hook_on_error, evhtp_hook_on_hostname, evhtp_hook_on_write, evhtp_hook_on_event, evhtp_hook_on_conn_error } |
types associated with where a developer can hook into during the request processing cycle. More... | |
enum | evhtp_callback_type { evhtp_callback_type_hash, evhtp_callback_type_glob, evhtp_callback_type_regex } |
enum | evhtp_proto { EVHTP_PROTO_INVALID, EVHTP_PROTO_10, EVHTP_PROTO_11 } |
enum | evhtp_type { evhtp_type_client, evhtp_type_server } |
Functions | |
TAILQ_HEAD (evhtp_callbacks_s, evhtp_callback_s) | |
TAILQ_HEAD (evhtp_kvs_s, evhtp_kv_s) | |
EVHTP_EXPORT evhtp_t * | evhtp_new (evbase_t *evbase, void *arg) |
creates a new evhtp_t instance More... | |
EVHTP_EXPORT void | evhtp_free (evhtp_t *evhtp) |
EVHTP_EXPORT void | evhtp_set_timeouts (evhtp_t *htp, const struct timeval *r, const struct timeval *w) |
set a read/write timeout on all things evhtp_t. More... | |
EVHTP_EXPORT void | evhtp_set_parser_flags (evhtp_t *htp, int flags) |
during the request processing cycle, these flags will be used to for query argument parsing. More... | |
EVHTP_EXPORT void | evhtp_set_bev_flags (evhtp_t *htp, int flags) |
bufferevent flags which will be used for bev sockets. More... | |
EVHTP_EXPORT int | evhtp_ssl_use_threads (void) |
EVHTP_EXPORT int | evhtp_ssl_init (evhtp_t *htp, evhtp_ssl_cfg_t *ssl_cfg) |
EVHTP_EXPORT void | evhtp_disable_100_continue (evhtp_t *htp) |
when a client sends an Expect: 100-continue, if this is function is called, evhtp will not send a HTTP/x.x continue response. More... | |
EVHTP_EXPORT int | evhtp_use_callback_locks (evhtp_t *htp) |
creates a lock around callbacks and hooks, allowing for threaded applications to add/remove/modify hooks & callbacks in a thread-safe manner. More... | |
EVHTP_EXPORT void | evhtp_set_gencb (evhtp_t *htp, evhtp_callback_cb cb, void *arg) |
sets a callback which is called if no other callbacks are matched More... | |
EVHTP_EXPORT void | evhtp_set_pre_accept_cb (evhtp_t *htp, evhtp_pre_accept_cb, void *arg) |
call a user-defined function before the connection is accepted. More... | |
EVHTP_EXPORT void | evhtp_set_post_accept_cb (evhtp_t *htp, evhtp_post_accept_cb, void *arg) |
call a user-defined function right after a connection is accepted. More... | |
EVHTP_EXPORT evhtp_callback_t * | evhtp_set_cb (evhtp_t *htp, const char *path, evhtp_callback_cb cb, void *arg) |
sets a callback to be executed on a specific path More... | |
EVHTP_EXPORT evhtp_callback_t * | evhtp_set_regex_cb (evhtp_t *htp, const char *pattern, evhtp_callback_cb cb, void *arg) |
sets a callback to be executed based on a regex pattern More... | |
EVHTP_EXPORT evhtp_callback_t * | evhtp_set_glob_cb (evhtp_t *htp, const char *pattern, evhtp_callback_cb cb, void *arg) |
sets a callback to to be executed on simple glob/wildcard patterns this is useful if the app does not care about what was matched, but just that it matched. More... | |
EVHTP_EXPORT evhtp_callback_t * | evhtp_get_cb (evhtp_t *htp, const char *needle) |
attempts to find the callback matching the exact string 'needle'. More... | |
EVHTP_EXPORT int | evhtp_set_hook (evhtp_hooks_t **hooks, evhtp_hook_type type, evhtp_hook cb, void *arg) |
sets a callback hook for either a connection or a path/regex . More... | |
EVHTP_EXPORT int | evhtp_unset_hook (evhtp_hooks_t **hooks, evhtp_hook_type type) |
remove a specific hook from being called. More... | |
EVHTP_EXPORT int | evhtp_unset_all_hooks (evhtp_hooks_t **hooks) |
removes all hooks. More... | |
EVHTP_EXPORT int | evhtp_bind_socket (evhtp_t *htp, const char *addr, uint16_t port, int backlog) |
bind to a socket, optionally with specific protocol support formatting. More... | |
EVHTP_EXPORT void | evhtp_unbind_socket (evhtp_t *htp) |
stops the listening socket. More... | |
EVHTP_EXPORT int | evhtp_bind_sockaddr (evhtp_t *htp, struct sockaddr *, size_t sin_len, int backlog) |
bind to an already allocated sockaddr. More... | |
EVHTP_EXPORT int | evhtp_use_threads (evhtp_t *htp, evhtp_thread_init_cb init_cb, int nthreads, void *arg) |
Enable thread-pool support for an evhtp_t context. More... | |
EVHTP_EXPORT void | evhtp_send_reply (evhtp_request_t *request, evhtp_res code) |
generates all the right information for a reply to be sent to the client More... | |
EVHTP_EXPORT void | evhtp_send_reply_start (evhtp_request_t *request, evhtp_res code) |
EVHTP_EXPORT void | evhtp_send_reply_body (evhtp_request_t *request, evbuf_t *buf) |
EVHTP_EXPORT void | evhtp_send_reply_end (evhtp_request_t *request) |
EVHTP_EXPORT int | evhtp_response_needs_body (const evhtp_res code, const htp_method method) |
Determine if a response should have a body. More... | |
EVHTP_EXPORT void | evhtp_send_reply_chunk_start (evhtp_request_t *request, evhtp_res code) |
start a chunked response. More... | |
EVHTP_EXPORT void | evhtp_send_reply_chunk (evhtp_request_t *request, evbuf_t *buf) |
send a chunk reply. More... | |
EVHTP_EXPORT void | evhtp_send_reply_chunk_end (evhtp_request_t *request) |
call when all chunks have been sent and you wish to send the last bits. More... | |
EVHTP_EXPORT evhtp_callback_t * | evhtp_callback_new (const char *path, evhtp_callback_type type, evhtp_callback_cb cb, void *arg) |
creates a new evhtp_callback_t structure. More... | |
EVHTP_EXPORT void | evhtp_callback_free (evhtp_callback_t *callback) |
frees information associated with a ainflwx callback. More... | |
EVHTP_EXPORT int | evhtp_callbacks_add_callback (evhtp_callbacks_t *cbs, evhtp_callback_t *cb) |
Adds a evhtp_callback_t to the evhtp_callbacks_t list. More... | |
EVHTP_EXPORT int | evhtp_add_vhost (evhtp_t *evhtp, const char *name, evhtp_t *vhost) |
add an evhtp_t structure (with its own callbacks) to a base evhtp_t structure for virtual hosts. More... | |
EVHTP_EXPORT int | evhtp_add_alias (evhtp_t *evhtp, const char *name) |
Add an alias hostname for a virtual-host specific evhtp_t. More... | |
EVHTP_EXPORT evhtp_kv_t * | evhtp_kv_new (const char *key, const char *val, char kalloc, char valloc) |
Allocates a new key/value structure. More... | |
EVHTP_EXPORT evhtp_kvs_t * | evhtp_kvs_new (void) |
creates an empty list of key/values More... | |
EVHTP_EXPORT void | evhtp_kv_free (evhtp_kv_t *kv) |
frees resources allocated for a single key/value More... | |
EVHTP_EXPORT void | evhtp_kvs_free (evhtp_kvs_t *kvs) |
frees a the list of key/values, and all underlying entries More... | |
EVHTP_EXPORT void | evhtp_kv_rm_and_free (evhtp_kvs_t *kvs, evhtp_kv_t *kv) |
free's resources associated with 'kv' if ONLY found within the key/value list More... | |
EVHTP_EXPORT const char * | evhtp_kv_find (evhtp_kvs_t *kvs, const char *key) |
find the string value of 'key' from the key/value list 'kvs' More... | |
EVHTP_EXPORT evhtp_kv_t * | evhtp_kvs_find_kv (evhtp_kvs_t *kvs, const char *key) |
find the evhtp_kv_t reference 'key' from the k/val list 'kvs' More... | |
EVHTP_EXPORT void | evhtp_kvs_add_kv (evhtp_kvs_t *kvs, evhtp_kv_t *kv) |
appends a key/val structure to a evhtp_kvs_t tailq More... | |
EVHTP_EXPORT void | evhtp_kvs_add_kvs (evhtp_kvs_t *dst, evhtp_kvs_t *src) |
appends all key/val structures from src tailq onto dst tailq More... | |
EVHTP_EXPORT int | evhtp_kvs_for_each (evhtp_kvs_t *kvs, evhtp_kvs_iterator cb, void *arg) |
callback iterator which executes 'cb' for every entry in 'kvs' More... | |
EVHTP_EXPORT evhtp_query_t * | evhtp_parse_query_wflags (const char *query, size_t len, int flags) |
Parses the query portion of the uri into a set of key/values. More... | |
EVHTP_EXPORT evhtp_query_t * | evhtp_parse_query (const char *query, size_t len) |
Parses the query portion of the uri into a set of key/values in a strict manner. More... | |
EVHTP_EXPORT int | evhtp_unescape_string (unsigned char **out, unsigned char *str, size_t str_len) |
Unescapes strings like '%7B1,%202,%203%7D' would become '{1, 2, 3}'. More... | |
EVHTP_EXPORT evhtp_header_t * | evhtp_header_new (const char *key, const char *val, char kalloc, char valloc) |
creates a new evhtp_header_t key/val structure More... | |
EVHTP_EXPORT evhtp_header_t * | evhtp_header_key_add (evhtp_headers_t *headers, const char *key, char kalloc) |
creates a new evhtp_header_t, sets only the key, and adds to the evhtp_headers TAILQ More... | |
EVHTP_EXPORT evhtp_header_t * | evhtp_header_val_add (evhtp_headers_t *headers, const char *val, char valloc) |
finds the last header in the headers tailq and adds the value More... | |
EVHTP_EXPORT void | evhtp_headers_add_header (evhtp_headers_t *headers, evhtp_header_t *header) |
adds an evhtp_header_t to the end of the evhtp_headers_t tailq More... | |
EVHTP_EXPORT const char * | evhtp_header_find (evhtp_headers_t *headers, const char *key) |
finds the value of a key in a evhtp_headers_t structure More... | |
EVHTP_EXPORT htp_method | evhtp_request_get_method (evhtp_request_t *r) |
returns the htp_method enum version of the request method. More... | |
EVHTP_EXPORT evhtp_proto | evhtp_request_get_proto (evhtp_request_t *r) |
EVHTP_EXPORT void | evhtp_connection_pause (evhtp_connection_t *connection) |
EVHTP_EXPORT void | evhtp_connection_resume (evhtp_connection_t *connection) |
EVHTP_EXPORT void | evhtp_request_pause (evhtp_request_t *request) |
EVHTP_EXPORT void | evhtp_request_resume (evhtp_request_t *request) |
EVHTP_EXPORT evhtp_connection_t * | evhtp_request_get_connection (evhtp_request_t *request) |
returns the underlying evhtp_connection_t structure from a request More... | |
EVHTP_EXPORT void | evhtp_connection_set_bev (evhtp_connection_t *conn, evbev_t *bev) |
Sets the connections underlying bufferevent. More... | |
EVHTP_EXPORT void | evhtp_request_set_bev (evhtp_request_t *request, evbev_t *bev) |
sets the underlying bufferevent for a evhtp_request More... | |
EVHTP_EXPORT evbev_t * | evhtp_connection_get_bev (evhtp_connection_t *conn) |
returns the underlying connections bufferevent More... | |
EVHTP_EXPORT void | evhtp_connection_set_timeouts (evhtp_connection_t *conn, const struct timeval *r, const struct timeval *w) |
sets a connection-specific read/write timeout which overrides the global read/write settings. More... | |
EVHTP_EXPORT evbev_t * | evhtp_request_get_bev (evhtp_request_t *request) |
returns the underlying requests bufferevent More... | |
EVHTP_EXPORT evbev_t * | evhtp_connection_take_ownership (evhtp_connection_t *connection) |
let a user take ownership of the underlying bufferevent and free all other underlying resources. More... | |
EVHTP_EXPORT void | evhtp_connection_free (evhtp_connection_t *connection) |
free's all connection related resources, this will also call your request fini hook and request fini hook. More... | |
EVHTP_EXPORT void | evhtp_request_free (evhtp_request_t *request) |
EVHTP_EXPORT void | evhtp_set_max_body_size (evhtp_t *htp, uint64_t len) |
set a max body size to accept for an incoming request, this will default to unlimited. More... | |
EVHTP_EXPORT void | evhtp_connection_set_max_body_size (evhtp_connection_t *conn, uint64_t len) |
set a max body size for a specific connection, this will default to the size set by evhtp_set_max_body_size More... | |
EVHTP_EXPORT void | evhtp_request_set_max_body_size (evhtp_request_t *request, uint64_t len) |
just calls evhtp_connection_set_max_body_size for the request. More... | |
EVHTP_EXPORT void | evhtp_request_set_keepalive (evhtp_request_t *request, int val) |
EVHTP_EXPORT void | evhtp_set_max_keepalive_requests (evhtp_t *htp, uint64_t num) |
sets a maximum number of requests that a single connection can make. More... | |
EVHTP_EXPORT evhtp_connection_t * | evhtp_connection_new_dns (evbase_t *evbase, struct evdns_base *dns_base, const char *addr, uint16_t port) |
allocate a new connection More... | |
EVHTP_EXPORT evhtp_connection_t * | evhtp_connection_new (evbase_t *evbase, const char *addr, uint16_t port) |
allocate a new connection More... | |
EVHTP_EXPORT evhtp_connection_t * | evhtp_connection_ssl_new (evbase_t *evbase, const char *addr, uint16_t port, evhtp_ssl_ctx_t *ctx) |
EVHTP_EXPORT evhtp_request_t * | evhtp_request_new (evhtp_callback_cb cb, void *arg) |
allocate a new request More... | |
EVHTP_EXPORT int | evhtp_make_request (evhtp_connection_t *c, evhtp_request_t *r, htp_method meth, const char *uri) |
make a client request More... | |
EVHTP_EXPORT unsigned int | evhtp_request_status (evhtp_request_t *) |
#define evhtp_header_find evhtp_kv_find |
#define evhtp_header_free evhtp_kv_free |
#define evhtp_header_new evhtp_kv_new |
#define evhtp_header_rm_and_free evhtp_kv_rm_and_free |
#define evhtp_header_s evhtp_kv_s |
#define evhtp_headers_add_header evhtp_kvs_add_kv |
#define evhtp_headers_add_headers evhtp_kvs_add_kvs |
#define evhtp_headers_find_header evhtp_kvs_find_kv |
#define evhtp_headers_for_each evhtp_kvs_for_each |
#define evhtp_headers_free evhtp_kvs_free |
#define evhtp_headers_iterator evhtp_kvs_iterator |
#define evhtp_headers_new evhtp_kvs_new |
#define evhtp_headers_t evhtp_kvs_t |
#define EVHTP_PARSE_QUERY_FLAG_LENIENT |
#define EVHTP_PARSE_QUERY_FLAG_TREAT_SEMICOLON_AS_SEP (1 << 3) |
#define evhtp_query_free evhtp_kvs_free |
#define evhtp_query_new evhtp_kvs_new |
#define evhtp_query_t evhtp_kvs_t |
#define evhtp_request_content_len | ( | r | ) | htparser_get_content_length(r->conn->parser) |
typedef void(* evhtp_callback_cb) (evhtp_request_t *req, void *arg) |
typedef enum evhtp_callback_type evhtp_callback_type |
typedef struct evhtp_callbacks_s evhtp_callbacks_t |
typedef uint8_t evhtp_error_flags |
typedef int(* evhtp_headers_iterator) (evhtp_header_t *header, void *arg) |
typedef evhtp_res(* evhtp_hook_chunk_fini_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* evhtp_hook_chunk_new_cb) (evhtp_request_t *r, uint64_t len, void *arg) |
typedef evhtp_res(* evhtp_hook_chunks_fini_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* evhtp_hook_conn_err_cb) (evhtp_connection_t *connection, evhtp_error_flags errtype, void *arg) |
typedef evhtp_res(* evhtp_hook_connection_fini_cb) (evhtp_connection_t *connection, void *arg) |
typedef void(* evhtp_hook_err_cb) (evhtp_request_t *req, evhtp_error_flags errtype, void *arg) |
typedef void(* evhtp_hook_event_cb) (evhtp_connection_t *conn, short events, void *arg) |
typedef evhtp_res(* evhtp_hook_header_cb) (evhtp_request_t *req, evhtp_header_t *hdr, void *arg) |
typedef evhtp_res(* evhtp_hook_headers_cb) (evhtp_request_t *req, evhtp_headers_t *hdr, void *arg) |
typedef evhtp_res(* evhtp_hook_headers_start_cb) (evhtp_request_t *r, void *arg) |
typedef evhtp_res(* evhtp_hook_hostname_cb) (evhtp_request_t *r, const char *hostname, void *arg) |
typedef evhtp_res(* evhtp_hook_path_cb) (evhtp_request_t *req, evhtp_path_t *path, void *arg) |
typedef evhtp_res(* evhtp_hook_request_fini_cb) (evhtp_request_t *req, void *arg) |
typedef enum evhtp_hook_type evhtp_hook_type |
typedef evhtp_res(* evhtp_hook_write_cb) (evhtp_connection_t *conn, void *arg) |
typedef int(* evhtp_kvs_iterator) (evhtp_kv_t *kv, void *arg) |
typedef struct evhtp_kvs_s evhtp_kvs_t |
typedef pthread_mutex_t evhtp_mutex_t |
typedef evhtp_res(* evhtp_post_accept_cb) (evhtp_connection_t *conn, void *arg) |
typedef evhtp_res(* evhtp_pre_accept_cb) (evhtp_connection_t *conn, void *arg) |
typedef enum evhtp_proto evhtp_proto |
typedef int(* evhtp_ssl_chk_issued_cb) (evhtp_x509_store_ctx_t *ctx, evhtp_x509_t *x, evhtp_x509_t *issuer) |
typedef SSL_CTX evhtp_ssl_ctx_t |
typedef int(* evhtp_ssl_scache_add) (evhtp_connection_t *connection, unsigned char *sid, int sid_len, evhtp_ssl_sess_t *sess) |
typedef void(* evhtp_ssl_scache_del) (evhtp_t *htp, unsigned char *sid, int sid_len) |
typedef evhtp_ssl_sess_t*(* evhtp_ssl_scache_get) (evhtp_connection_t *connection, unsigned char *sid, int sid_len) |
typedef enum evhtp_ssl_scache_type evhtp_ssl_scache_type |
typedef SSL_SESSION evhtp_ssl_sess_t |
typedef SSL evhtp_ssl_t |
typedef int(* evhtp_ssl_verify_cb) (int pre_verify, evhtp_x509_store_ctx_t *ctx) |
typedef void(* evhtp_thread_init_cb) (evhtp_t *htp, evthr_t *thr, void *arg) |
typedef enum evhtp_type evhtp_type |
typedef X509_STORE_CTX evhtp_x509_store_ctx_t |
typedef X509 evhtp_x509_t |
enum evhtp_callback_type |
enum evhtp_hook_type |
types associated with where a developer can hook into during the request processing cycle.
enum evhtp_proto |
enum evhtp_type |
EVHTP_EXPORT int evhtp_add_alias | ( | evhtp_t * | evhtp, |
const char * | name | ||
) |
Add an alias hostname for a virtual-host specific evhtp_t.
This avoids having multiple evhtp_t virtual hosts with the same callback for the same vhost.
evhtp | |
name |
EVHTP_EXPORT int evhtp_add_vhost | ( | evhtp_t * | evhtp, |
const char * | name, | ||
evhtp_t * | vhost | ||
) |
add an evhtp_t structure (with its own callbacks) to a base evhtp_t structure for virtual hosts.
It should be noted that if you enable SSL on the base evhtp_t and your version of OpenSSL supports SNI, the SNI hostname will always take precedence over the Host header value.
evhtp | |
name | |
vhost |
EVHTP_EXPORT int evhtp_bind_sockaddr | ( | evhtp_t * | htp, |
struct sockaddr * | , | ||
size_t | sin_len, | ||
int | backlog | ||
) |
bind to an already allocated sockaddr.
htp | s |
sin_len | |
backlog |
EVHTP_EXPORT int evhtp_bind_socket | ( | evhtp_t * | htp, |
const char * | addr, | ||
uint16_t | port, | ||
int | backlog | ||
) |
bind to a socket, optionally with specific protocol support formatting.
The addr can be defined as one of the following: ipv6:<ipv6addr> for binding to an IPv6 address. unix:<named pipe>=""> for binding to a unix named socket ipv4:<ipv4addr> for binding to an ipv4 address Otherwise the addr is assumed to be ipv4.
htp | |
addr | |
port | |
backlog |
EVHTP_EXPORT void evhtp_callback_free | ( | evhtp_callback_t * | callback | ) |
frees information associated with a ainflwx callback.
callback |
EVHTP_EXPORT evhtp_callback_t* evhtp_callback_new | ( | const char * | path, |
evhtp_callback_type | type, | ||
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
creates a new evhtp_callback_t structure.
All callbacks are stored in this structure which define what the final function to be called after all parsing is done. A callback can be either a static string or a regular expression.
path | can either be a static path (/path/to/resource/) or a POSIX compatible regular expression (^/resource/(.*)) |
type | informs the function what type of of information is is contained within the path argument. This can either be callback_type_path, or callback_type_regex. |
cb | the callback function to be invoked |
arg | optional argument which is passed when the callback is executed. |
EVHTP_EXPORT int evhtp_callbacks_add_callback | ( | evhtp_callbacks_t * | cbs, |
evhtp_callback_t * | cb | ||
) |
Adds a evhtp_callback_t to the evhtp_callbacks_t list.
cbs | an allocated evhtp_callbacks_t structure |
cb | an initialized evhtp_callback_t structure |
EVHTP_EXPORT void evhtp_connection_free | ( | evhtp_connection_t * | connection | ) |
free's all connection related resources, this will also call your request fini hook and request fini hook.
connection |
EVHTP_EXPORT evbev_t* evhtp_connection_get_bev | ( | evhtp_connection_t * | conn | ) |
returns the underlying connections bufferevent
conn |
EVHTP_EXPORT evhtp_connection_t* evhtp_connection_new | ( | evbase_t * | evbase, |
const char * | addr, | ||
uint16_t | port | ||
) |
allocate a new connection
EVHTP_EXPORT evhtp_connection_t* evhtp_connection_new_dns | ( | evbase_t * | evbase, |
struct evdns_base * | dns_base, | ||
const char * | addr, | ||
uint16_t | port | ||
) |
allocate a new connection
EVHTP_EXPORT void evhtp_connection_pause | ( | evhtp_connection_t * | connection | ) |
EVHTP_EXPORT void evhtp_connection_resume | ( | evhtp_connection_t * | connection | ) |
EVHTP_EXPORT void evhtp_connection_set_bev | ( | evhtp_connection_t * | conn, |
evbev_t * | bev | ||
) |
Sets the connections underlying bufferevent.
conn | |
bev |
EVHTP_EXPORT void evhtp_connection_set_max_body_size | ( | evhtp_connection_t * | conn, |
uint64_t | len | ||
) |
set a max body size for a specific connection, this will default to the size set by evhtp_set_max_body_size
conn | |
len |
EVHTP_EXPORT void evhtp_connection_set_timeouts | ( | evhtp_connection_t * | conn, |
const struct timeval * | r, | ||
const struct timeval * | w | ||
) |
sets a connection-specific read/write timeout which overrides the global read/write settings.
conn | |
r | timeval for read |
w | timeval for write |
EVHTP_EXPORT evhtp_connection_t* evhtp_connection_ssl_new | ( | evbase_t * | evbase, |
const char * | addr, | ||
uint16_t | port, | ||
evhtp_ssl_ctx_t * | ctx | ||
) |
EVHTP_EXPORT evbev_t* evhtp_connection_take_ownership | ( | evhtp_connection_t * | connection | ) |
let a user take ownership of the underlying bufferevent and free all other underlying resources.
Warning: this will free all evhtp_connection/request structures, remove all associated hooks and reset the bufferevent to defaults, i.e., disable EV_READ, and set all callbacks to NULL.
connection |
EVHTP_EXPORT void evhtp_disable_100_continue | ( | evhtp_t * | htp | ) |
when a client sends an Expect: 100-continue, if this is function is called, evhtp will not send a HTTP/x.x continue response.
htp |
EVHTP_EXPORT void evhtp_free | ( | evhtp_t * | evhtp | ) |
EVHTP_EXPORT evhtp_callback_t* evhtp_get_cb | ( | evhtp_t * | htp, |
const char * | needle | ||
) |
attempts to find the callback matching the exact string 'needle'.
This is useful in cases where we want to get the original handle, but is not in scope.
with pattern based callbacks, this does not attempt to find a callback that would match the string if the pattern matcher was executed.
Meaning: evhtp_set_glob_cb(htp, "/foo/bar*", ....);
Calling evhtp_get_cb(htp, "/foo/bar/baz");
Will return NULL since it's not the exact pattern set
Calling evhtp_get_cb(htp, "/foo/bar*");
Is the correct usage.
htp | |
needle |
EVHTP_EXPORT const char* evhtp_header_find | ( | evhtp_headers_t * | headers, |
const char * | key | ||
) |
finds the value of a key in a evhtp_headers_t structure
headers | the evhtp_headers_t tailq |
key | the key to find |
EVHTP_EXPORT evhtp_header_t* evhtp_header_key_add | ( | evhtp_headers_t * | headers, |
const char * | key, | ||
char | kalloc | ||
) |
creates a new evhtp_header_t, sets only the key, and adds to the evhtp_headers TAILQ
headers | the evhtp_headers_t TAILQ (evhtp_kv_t) |
key | a null terminated string |
kalloc | if 1 the string will be copied, otherwise assigned |
EVHTP_EXPORT evhtp_header_t* evhtp_header_new | ( | const char * | key, |
const char * | val, | ||
char | kalloc, | ||
char | valloc | ||
) |
creates a new evhtp_header_t key/val structure
key | a null terminated string |
val | a null terminated string |
kalloc | if 1, key will be copied, otherwise no copy performed |
valloc | if 1, val will be copied, otehrwise no copy performed |
EVHTP_EXPORT evhtp_header_t* evhtp_header_val_add | ( | evhtp_headers_t * | headers, |
const char * | val, | ||
char | valloc | ||
) |
finds the last header in the headers tailq and adds the value
headers | the evhtp_headers_t TAILQ (evhtp_kv_t) |
val | a null terminated string |
valloc | if 1 the string will be copied, otherwise assigned |
EVHTP_EXPORT void evhtp_headers_add_header | ( | evhtp_headers_t * | headers, |
evhtp_header_t * | header | ||
) |
adds an evhtp_header_t to the end of the evhtp_headers_t tailq
headers | |
header |
EVHTP_EXPORT const char* evhtp_kv_find | ( | evhtp_kvs_t * | kvs, |
const char * | key | ||
) |
find the string value of 'key' from the key/value list 'kvs'
kvs | |
key |
EVHTP_EXPORT void evhtp_kv_free | ( | evhtp_kv_t * | kv | ) |
frees resources allocated for a single key/value
kv |
EVHTP_EXPORT evhtp_kv_t* evhtp_kv_new | ( | const char * | key, |
const char * | val, | ||
char | kalloc, | ||
char | valloc | ||
) |
Allocates a new key/value structure.
key | null terminated string |
val | null terminated string |
kalloc | if set to 1, the key will be copied, if 0 no copy is done. |
valloc | if set to 1, the val will be copied, if 0 no copy is done. |
EVHTP_EXPORT void evhtp_kv_rm_and_free | ( | evhtp_kvs_t * | kvs, |
evhtp_kv_t * | kv | ||
) |
free's resources associated with 'kv' if ONLY found within the key/value list
kvs | |
kv |
EVHTP_EXPORT void evhtp_kvs_add_kv | ( | evhtp_kvs_t * | kvs, |
evhtp_kv_t * | kv | ||
) |
appends a key/val structure to a evhtp_kvs_t tailq
kvs | an evhtp_kvs_t structure |
kv | an evhtp_kv_t structure |
EVHTP_EXPORT void evhtp_kvs_add_kvs | ( | evhtp_kvs_t * | dst, |
evhtp_kvs_t * | src | ||
) |
appends all key/val structures from src tailq onto dst tailq
dst | an evhtp_kvs_t structure |
src | an evhtp_kvs_t structure |
EVHTP_EXPORT evhtp_kv_t* evhtp_kvs_find_kv | ( | evhtp_kvs_t * | kvs, |
const char * | key | ||
) |
find the evhtp_kv_t reference 'key' from the k/val list 'kvs'
kvs | |
key |
EVHTP_EXPORT int evhtp_kvs_for_each | ( | evhtp_kvs_t * | kvs, |
evhtp_kvs_iterator | cb, | ||
void * | arg | ||
) |
callback iterator which executes 'cb' for every entry in 'kvs'
kvs | |
cb | |
arg |
EVHTP_EXPORT void evhtp_kvs_free | ( | evhtp_kvs_t * | kvs | ) |
frees a the list of key/values, and all underlying entries
kvs |
EVHTP_EXPORT evhtp_kvs_t* evhtp_kvs_new | ( | void | ) |
creates an empty list of key/values
EVHTP_EXPORT int evhtp_make_request | ( | evhtp_connection_t * | c, |
evhtp_request_t * | r, | ||
htp_method | meth, | ||
const char * | uri | ||
) |
make a client request
EVHTP_EXPORT evhtp_t* evhtp_new | ( | evbase_t * | evbase, |
void * | arg | ||
) |
creates a new evhtp_t instance
evbase | the initialized event base |
arg | user-defined argument which is evhtp_t specific |
EVHTP_EXPORT evhtp_query_t* evhtp_parse_query | ( | const char * | query, |
size_t | len | ||
) |
Parses the query portion of the uri into a set of key/values in a strict manner.
Parses query arguments like "?herp=derp&foo=bar&blah=baz"
query | data containing the uri query arguments |
len | size of the data |
EVHTP_EXPORT evhtp_query_t* evhtp_parse_query_wflags | ( | const char * | query, |
size_t | len, | ||
int | flags | ||
) |
Parses the query portion of the uri into a set of key/values.
Parses query arguments like "?herp=&foo=bar;blah=baz&a=%3"
query | data containing the uri query arguments |
len | size of the data |
flags | parse query flags to alter 'strictness' (see EVHTP_PARSE_QUERY_FLAG_*) |
EVHTP_EXPORT void evhtp_request_free | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT evbev_t* evhtp_request_get_bev | ( | evhtp_request_t * | request | ) |
returns the underlying requests bufferevent
request |
EVHTP_EXPORT evhtp_connection_t* evhtp_request_get_connection | ( | evhtp_request_t * | request | ) |
returns the underlying evhtp_connection_t structure from a request
request |
EVHTP_EXPORT htp_method evhtp_request_get_method | ( | evhtp_request_t * | r | ) |
returns the htp_method enum version of the request method.
r |
EVHTP_EXPORT evhtp_proto evhtp_request_get_proto | ( | evhtp_request_t * | r | ) |
EVHTP_EXPORT evhtp_request_t* evhtp_request_new | ( | evhtp_callback_cb | cb, |
void * | arg | ||
) |
allocate a new request
EVHTP_EXPORT void evhtp_request_pause | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT void evhtp_request_resume | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT void evhtp_request_set_bev | ( | evhtp_request_t * | request, |
evbev_t * | bev | ||
) |
sets the underlying bufferevent for a evhtp_request
request | |
bev |
EVHTP_EXPORT void evhtp_request_set_keepalive | ( | evhtp_request_t * | request, |
int | val | ||
) |
EVHTP_EXPORT void evhtp_request_set_max_body_size | ( | evhtp_request_t * | request, |
uint64_t | len | ||
) |
just calls evhtp_connection_set_max_body_size for the request.
request | |
len |
EVHTP_EXPORT unsigned int evhtp_request_status | ( | evhtp_request_t * | ) |
EVHTP_EXPORT int evhtp_response_needs_body | ( | const evhtp_res | code, |
const htp_method | method | ||
) |
Determine if a response should have a body.
Follows the rules in RFC 2616 section 4.3.
EVHTP_EXPORT void evhtp_send_reply | ( | evhtp_request_t * | request, |
evhtp_res | code | ||
) |
generates all the right information for a reply to be sent to the client
request | |
code | HTTP return status code |
EVHTP_EXPORT void evhtp_send_reply_body | ( | evhtp_request_t * | request, |
evbuf_t * | buf | ||
) |
EVHTP_EXPORT void evhtp_send_reply_chunk | ( | evhtp_request_t * | request, |
evbuf_t * | buf | ||
) |
send a chunk reply.
request | |
buf |
EVHTP_EXPORT void evhtp_send_reply_chunk_end | ( | evhtp_request_t * | request | ) |
call when all chunks have been sent and you wish to send the last bits.
This will add the last 0CRLFCRCL and call send_reply_end().
request |
EVHTP_EXPORT void evhtp_send_reply_chunk_start | ( | evhtp_request_t * | request, |
evhtp_res | code | ||
) |
start a chunked response.
If data already exists on the output buffer, this will be converted to the first chunk.
request | |
code |
EVHTP_EXPORT void evhtp_send_reply_end | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT void evhtp_send_reply_start | ( | evhtp_request_t * | request, |
evhtp_res | code | ||
) |
EVHTP_EXPORT void evhtp_set_bev_flags | ( | evhtp_t * | htp, |
int | flags | ||
) |
bufferevent flags which will be used for bev sockets.
htp | |
flags |
EVHTP_EXPORT evhtp_callback_t* evhtp_set_cb | ( | evhtp_t * | htp, |
const char * | path, | ||
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
sets a callback to be executed on a specific path
htp | the initialized evhtp_t |
path | the path to match |
cb | the function to be executed |
arg | user-defined argument passed to the callback |
EVHTP_EXPORT void evhtp_set_gencb | ( | evhtp_t * | htp, |
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
sets a callback which is called if no other callbacks are matched
htp | the initialized evhtp_t |
cb | the function to be executed |
arg | user-defined argument passed to the callback |
EVHTP_EXPORT evhtp_callback_t* evhtp_set_glob_cb | ( | evhtp_t * | htp, |
const char * | pattern, | ||
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
sets a callback to to be executed on simple glob/wildcard patterns this is useful if the app does not care about what was matched, but just that it matched.
This is technically faster than regex.
htp | |
pattern | wildcard pattern, the '*' can be set at either or both the front or end. |
cb | |
arg |
EVHTP_EXPORT int evhtp_set_hook | ( | evhtp_hooks_t ** | hooks, |
evhtp_hook_type | type, | ||
evhtp_hook | cb, | ||
void * | arg | ||
) |
sets a callback hook for either a connection or a path/regex .
A user may set a variety of hooks either per-connection, or per-callback. This allows the developer to hook into various parts of the request processing cycle.
a per-connection hook can be set at any time, but it is recommended to set these during either a pre-accept phase, or post-accept phase. This allows a developer to set hooks before any other hooks are called.
a per-callback hook works differently. In this mode a developer can setup a set of hooks prior to starting the event loop for specific callbacks. For example if you wanted to hook something ONLY for a callback set by evhtp_set_cb or evhtp_set_regex_cb this is the method of doing so.
per-callback example:
evhtp_callback_t * cb = evhtp_set_regex_cb(htp, "/anything/(.*)", default_cb, NULL);
evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, anything_headers_cb, NULL);
evhtp_set_hook(&cb->hooks, evhtp_hook_on_fini, anything_fini_cb, NULL);
With the above example, once libevhtp has determined that it has a user-defined callback for /anything/.*; anything_headers_cb will be executed after all headers have been parsed, and anything_fini_cb will be executed before the request is free()'d.
The same logic applies to per-connection hooks, but it should be noted that if a per-callback hook is set, the per-connection hook will be ignored.
hooks | double pointer to the evhtp_hooks_t structure |
type | the hook type |
cb | the callback to be executed. |
arg | optional argument which is passed when the callback is executed |
EVHTP_EXPORT void evhtp_set_max_body_size | ( | evhtp_t * | htp, |
uint64_t | len | ||
) |
set a max body size to accept for an incoming request, this will default to unlimited.
htp | |
len |
EVHTP_EXPORT void evhtp_set_max_keepalive_requests | ( | evhtp_t * | htp, |
uint64_t | num | ||
) |
sets a maximum number of requests that a single connection can make.
htp | |
num |
EVHTP_EXPORT void evhtp_set_parser_flags | ( | evhtp_t * | htp, |
int | flags | ||
) |
during the request processing cycle, these flags will be used to for query argument parsing.
i.e., what to parse and not to parse.
SEE: EVHTP_PARSE_QUERY_* stuff. For example, if you do not wish for the streaming parser attempting the act of fragment parsing: evhtp_set_parser_flags(htp, EVHTP_PARSE_QUERY_FLAG_IGNORE_FRAGMENTS);
htp | |
flags |
EVHTP_EXPORT void evhtp_set_post_accept_cb | ( | evhtp_t * | htp, |
evhtp_post_accept_cb | , | ||
void * | arg | ||
) |
call a user-defined function right after a connection is accepted.
htp | |
evhtp_post_accept_cb | |
arg |
EVHTP_EXPORT void evhtp_set_pre_accept_cb | ( | evhtp_t * | htp, |
evhtp_pre_accept_cb | , | ||
void * | arg | ||
) |
call a user-defined function before the connection is accepted.
htp | |
evhtp_pre_accept_cb | |
arg |
EVHTP_EXPORT evhtp_callback_t* evhtp_set_regex_cb | ( | evhtp_t * | htp, |
const char * | pattern, | ||
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
sets a callback to be executed based on a regex pattern
htp | the initialized evhtp_t |
pattern | a POSIX compat regular expression |
cb | the function to be executed |
arg | user-defined argument passed to the callback |
EVHTP_EXPORT void evhtp_set_timeouts | ( | evhtp_t * | htp, |
const struct timeval * | r, | ||
const struct timeval * | w | ||
) |
set a read/write timeout on all things evhtp_t.
When the timeout expires your error hook will be called with the libevent supplied event flags.
htp | the base evhtp_t struct |
r | read-timeout in timeval |
w | write-timeout in timeval. |
EVHTP_EXPORT int evhtp_ssl_init | ( | evhtp_t * | htp, |
evhtp_ssl_cfg_t * | ssl_cfg | ||
) |
EVHTP_EXPORT int evhtp_ssl_use_threads | ( | void | ) |
EVHTP_EXPORT void evhtp_unbind_socket | ( | evhtp_t * | htp | ) |
stops the listening socket.
htp |
EVHTP_EXPORT int evhtp_unescape_string | ( | unsigned char ** | out, |
unsigned char * | str, | ||
size_t | str_len | ||
) |
Unescapes strings like '%7B1,%202,%203%7D' would become '{1, 2, 3}'.
out | double pointer where output is stored. This is allocated by the user. |
str | the string to unescape |
str_len | the length of the string to unescape |
EVHTP_EXPORT int evhtp_unset_all_hooks | ( | evhtp_hooks_t ** | hooks | ) |
removes all hooks.
hooks |
EVHTP_EXPORT int evhtp_unset_hook | ( | evhtp_hooks_t ** | hooks, |
evhtp_hook_type | type | ||
) |
remove a specific hook from being called.
hooks | |
type |
EVHTP_EXPORT int evhtp_use_callback_locks | ( | evhtp_t * | htp | ) |
creates a lock around callbacks and hooks, allowing for threaded applications to add/remove/modify hooks & callbacks in a thread-safe manner.
htp |
EVHTP_EXPORT int evhtp_use_threads | ( | evhtp_t * | htp, |
evhtp_thread_init_cb | init_cb, | ||
int | nthreads, | ||
void * | arg | ||
) |
Enable thread-pool support for an evhtp_t context.
Connectios are distributed across 'nthreads'. An optional "on-start" callback can be set which allows you to manipulate the thread-specific inforation (such as the thread-specific event_base).
htp | |
init_cb | |
nthreads | |
arg |
TAILQ_HEAD | ( | evhtp_callbacks_s | , |
evhtp_callback_s | |||
) |
TAILQ_HEAD | ( | evhtp_kvs_s | , |
evhtp_kv_s | |||
) |