Libevhtp
0.3.7
|
#include <evhtp-config.h>
#include <evthr.h>
#include <htparse.h>
#include <onigposix.h>
#include <sys/queue.h>
#include <event2/event.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_s |
struct | evhtp_alias_s |
struct | evhtp_s |
main structure containing all configuration information More... | |
struct | evhtp_callback_s |
structure containing a single callback and configuration More... | |
struct | evhtp_kv_s |
a generic key/value structure More... | |
struct | evhtp_uri_s |
a generic container representing an entire URI strucutre More... | |
struct | evhtp_authority_s |
structure which represents authority information in a URI More... | |
struct | evhtp_path_s |
structure which represents a URI path and or file More... | |
struct | evhtp_request_s |
a structure containing all information for a http request. More... | |
struct | evhtp_connection_s |
struct | evhtp_hooks_s |
struct | evhtp_ssl_cfg_s |
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. When the timeout expires your error hook will be called with the libevent supplied event flags. 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. i.e., what to parse and not to parse. 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) |
EVHTP_EXPORT void | evhtp_set_post_accept_cb (evhtp_t *htp, evhtp_post_accept_cb, void *arg) |
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. This is technically faster than regex. 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. 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. 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. 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). 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. Follows the rules in RFC 2616 section 4.3. More... | |
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. 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. This will add the last 0CRLFCRCL and call send_reply_end(). 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. 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. More... | |
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. 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 void | evhtp_connection_pause (evhtp_connection_t *connection) |
pauses a connection (disables reading) More... | |
EVHTP_EXPORT void | evhtp_connection_resume (evhtp_connection_t *connection) |
resumes a connection (enables reading) and activates resume event. More... | |
EVHTP_EXPORT void | evhtp_request_pause (evhtp_request_t *request) |
Wrapper around evhtp_connection_pause. More... | |
EVHTP_EXPORT void | evhtp_request_resume (evhtp_request_t *request) |
Wrapper around evhtp_connection_resume. More... | |
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_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 int | evhtp_connection_set_ratelimit (evhtp_connection_t *c, size_t read_rate, size_t read_burst, size_t write_rate, size_t write_burst, const struct timeval *tick) |
set a bufferevent ratelimit on a evhtp_connection_t structure. The logic is the same as libevent's rate-limiting code. 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_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_header_t evhtp_kv_t |
#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 struct evhtp_alias_s evhtp_alias_t |
typedef struct evhtp_authority_s evhtp_authority_t |
typedef void(* evhtp_callback_cb) (evhtp_request_t *req, void *arg) |
typedef struct evhtp_callback_s evhtp_callback_t |
typedef enum evhtp_callback_type evhtp_callback_type |
typedef struct evhtp_callbacks_s evhtp_callbacks_t |
typedef struct evhtp_connection_s evhtp_connection_t |
typedef struct evhtp_defaults_s evhtp_defaults_5 |
typedef struct evhtp_defaults_s evhtp_defaults_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_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 enum evhtp_hook_type evhtp_hook_type |
typedef evhtp_res(* evhtp_hook_write_cb) (evhtp_connection_t *conn, void *arg) |
typedef struct evhtp_hooks_s evhtp_hooks_t |
typedef struct evhtp_kv_s evhtp_kv_t |
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 struct evhtp_path_s evhtp_path_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 struct evhtp_request_s evhtp_request_t |
typedef struct evhtp_ssl_cfg_s evhtp_ssl_cfg_t |
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 struct evhtp_uri_s evhtp_uri_t |
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 | ||
) |
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 |
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.
NOTE: If SSL is being used and the vhost was found via SNI, the Host: header will NOT be used to find a matching vhost.
Also, any hooks which are set prior to finding a vhost that are hooks which are after the host hook, they are overwritten by the callbacks and hooks set for the vhost specific evhtp_t structure.
evhtp | |
name | |
vhost |
EVHTP_EXPORT int evhtp_bind_sockaddr | ( | evhtp_t * | htp, |
struct sockaddr * | , | ||
size_t | sin_len, | ||
int | 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 | ) |
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 | ||
) |
EVHTP_EXPORT void evhtp_connection_free | ( | evhtp_connection_t * | connection | ) |
EVHTP_EXPORT evbev_t* evhtp_connection_get_bev | ( | evhtp_connection_t * | conn | ) |
EVHTP_EXPORT evhtp_connection_t* evhtp_connection_new | ( | evbase_t * | evbase, |
const char * | addr, | ||
uint16_t | port | ||
) |
EVHTP_EXPORT evhtp_connection_t* evhtp_connection_new_dns | ( | evbase_t * | evbase, |
struct evdns_base * | dns_base, | ||
const char * | addr, | ||
uint16_t | port | ||
) |
EVHTP_EXPORT void evhtp_connection_pause | ( | evhtp_connection_t * | c | ) |
EVHTP_EXPORT void evhtp_connection_resume | ( | evhtp_connection_t * | c | ) |
EVHTP_EXPORT void evhtp_connection_set_bev | ( | evhtp_connection_t * | conn, |
evbev_t * | bev | ||
) |
EVHTP_EXPORT void evhtp_connection_set_max_body_size | ( | evhtp_connection_t * | conn, |
uint64_t | len | ||
) |
EVHTP_EXPORT int evhtp_connection_set_ratelimit | ( | evhtp_connection_t * | c, |
size_t | read_rate, | ||
size_t | read_burst, | ||
size_t | write_rate, | ||
size_t | write_burst, | ||
const struct timeval * | tick | ||
) |
set a bufferevent ratelimit on a evhtp_connection_t structure. The logic is the same as libevent's rate-limiting code.
c | |
read_rate | |
read_burst | |
write_rate | |
write_burst | |
tick |
|
inline |
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 | ) |
EVHTP_EXPORT void evhtp_free | ( | evhtp_t * | evhtp | ) |
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 | ||
) |
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 | ||
) |
EVHTP_EXPORT void evhtp_kv_free | ( | evhtp_kv_t * | 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 | ||
) |
EVHTP_EXPORT void evhtp_kvs_add_kv | ( | evhtp_kvs_t * | kvs, |
evhtp_kv_t * | kv | ||
) |
EVHTP_EXPORT void evhtp_kvs_add_kvs | ( | evhtp_kvs_t * | dst, |
evhtp_kvs_t * | src | ||
) |
EVHTP_EXPORT evhtp_kv_t* evhtp_kvs_find_kv | ( | evhtp_kvs_t * | kvs, |
const char * | key | ||
) |
EVHTP_EXPORT int evhtp_kvs_for_each | ( | evhtp_kvs_t * | kvs, |
evhtp_kvs_iterator | cb, | ||
void * | arg | ||
) |
EVHTP_EXPORT void evhtp_kvs_free | ( | evhtp_kvs_t * | kvs | ) |
EVHTP_EXPORT evhtp_kvs_t* evhtp_kvs_new | ( | void | ) |
EVHTP_EXPORT int evhtp_make_request | ( | evhtp_connection_t * | c, |
evhtp_request_t * | r, | ||
htp_method | meth, | ||
const char * | uri | ||
) |
EVHTP_EXPORT evhtp_t* evhtp_new | ( | evbase_t * | evbase, |
void * | arg | ||
) |
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 | ) |
EVHTP_EXPORT evhtp_connection_t* evhtp_request_get_connection | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT htp_method evhtp_request_get_method | ( | evhtp_request_t * | r | ) |
EVHTP_EXPORT evhtp_request_t* evhtp_request_new | ( | evhtp_callback_cb | cb, |
void * | arg | ||
) |
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 | ||
) |
EVHTP_EXPORT void evhtp_request_set_max_body_size | ( | evhtp_request_t * | request, |
uint64_t | 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 | ||
) |
EVHTP_EXPORT void evhtp_send_reply | ( | 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_chunk | ( | evhtp_request_t * | request, |
evbuf_t * | buf | ||
) |
EVHTP_EXPORT void evhtp_send_reply_chunk_end | ( | evhtp_request_t * | request | ) |
EVHTP_EXPORT void evhtp_send_reply_chunk_start | ( | evhtp_request_t * | request, |
evhtp_res | 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 | ||
) |
EVHTP_EXPORT evhtp_callback_t* evhtp_set_cb | ( | evhtp_t * | htp, |
const char * | path, | ||
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
EVHTP_EXPORT void evhtp_set_gencb | ( | evhtp_t * | htp, |
evhtp_callback_cb | cb, | ||
void * | arg | ||
) |
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 | ||
) |
EVHTP_EXPORT void evhtp_set_max_keepalive_requests | ( | evhtp_t * | htp, |
uint64_t | 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 | ||
) |
EVHTP_EXPORT void evhtp_set_pre_accept_cb | ( | evhtp_t * | htp, |
evhtp_pre_accept_cb | , | ||
void * | 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 | ||
) |
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 | ) |
EVHTP_EXPORT int evhtp_unescape_string | ( | unsigned char ** | out, |
unsigned char * | str, | ||
size_t | str_len | ||
) |
EVHTP_EXPORT int evhtp_unset_all_hooks | ( | evhtp_hooks_t ** | hooks | ) |
EVHTP_EXPORT int evhtp_unset_hook | ( | evhtp_hooks_t ** | hooks, |
evhtp_hook_type | type | ||
) |
EVHTP_EXPORT int evhtp_use_callback_locks | ( | evhtp_t * | 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 | |||
) |