GNU libmicrohttpd
0.9.59
|
internal shared structures More...
#include "mhd_options.h"
#include "platform.h"
#include "microhttpd.h"
#include "mhd_assert.h"
#include "mhd_threads.h"
#include "mhd_locks.h"
#include "mhd_sockets.h"
#include "mhd_itc_types.h"
Go to the source code of this file.
Data Structures | |
struct | MHD_NonceNc |
struct | MHD_HTTP_Header |
struct | MHD_Response |
struct | MHD_Connection |
struct | MHD_Daemon |
Macros | |
#define | MHD_PANIC(msg) do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL); BUILTIN_NOT_REACHED; } while (0) |
#define | MHD_fd_close_chk_(fd) |
#define | EXTRA_CHECKS MHD_NO |
#define | MHD_MAX(a, b) (((a)<(b)) ? (b) : (a)) |
#define | MHD_MIN(a, b) (((a)<(b)) ? (a) : (b)) |
#define | MHD_BUF_INC_SIZE 1024 |
#define | BUILTIN_NOT_REACHED |
#define | MHD_STATICSTR_LEN_(macro) (sizeof(macro)/sizeof(char) - 1) |
#define | MHD_TEST_ALLOW_SUSPEND_RESUME 8192 |
#define | MAX_NONCE_LENGTH 129 |
#define | DEBUG_STATES MHD_NO |
#define | DLL_insert(head, tail, element) |
#define | DLL_remove(head, tail, element) |
#define | XDLL_insert(head, tail, element) |
#define | XDLL_remove(head, tail, element) |
#define | EDLL_insert(head, tail, element) |
#define | EDLL_remove(head, tail, element) |
#define | MHD_check_response_header_s_token_ci(r, k, tkn) MHD_check_response_header_token_ci((r),(k),(tkn),MHD_STATICSTR_LEN_(tkn)) |
Typedefs | |
typedef ssize_t(* | ReceiveCallback) (struct MHD_Connection *conn, void *write_to, size_t max_bytes) |
typedef ssize_t(* | TransmitCallback) (struct MHD_Connection *conn, const void *read_from, size_t max_bytes) |
typedef void *(* | LogCallback) (void *cls, const char *uri, struct MHD_Connection *con) |
typedef size_t(* | UnescapeCallback) (void *cls, struct MHD_Connection *conn, char *uri) |
typedef int(* | MHD_ArgumentIterator_) (struct MHD_Connection *connection, const char *key, const char *value, enum MHD_ValueKind kind) |
Functions | |
void | MHD_unescape_plus (char *arg) |
int | MHD_parse_arguments_ (struct MHD_Connection *connection, enum MHD_ValueKind kind, char *args, MHD_ArgumentIterator_ cb, unsigned int *num_headers) |
bool | MHD_check_response_header_token_ci (const struct MHD_Response *response, const char *key, const char *token, size_t token_len) |
void | internal_suspend_connection_ (struct MHD_Connection *connection) |
Variables | |
MHD_PanicCallback | mhd_panic |
void * | mhd_panic_cls |
internal shared structures
Definition in file internal.h.
#define BUILTIN_NOT_REACHED |
Definition at line 119 of file internal.h.
#define DEBUG_STATES MHD_NO |
Should all state transitions be printed to stderr?
Definition at line 546 of file internal.h.
#define DLL_insert | ( | head, | |
tail, | |||
element | |||
) |
Insert an element at the head of a DLL. Assumes that head, tail and element are structs with prev and next fields.
head | pointer to the head of the DLL |
tail | pointer to the tail of the DLL |
element | element to insert |
Definition at line 1710 of file internal.h.
Referenced by cleanup_connection(), close_connection(), internal_add_connection(), internal_suspend_connection_(), and resume_suspended_connections().
#define DLL_remove | ( | head, | |
tail, | |||
element | |||
) |
Remove an element from a DLL. Assumes that head, tail and element are structs with prev and next fields.
head | pointer to the head of the DLL |
tail | pointer to the tail of the DLL |
element | element to remove |
Definition at line 1731 of file internal.h.
Referenced by cleanup_connection(), close_connection(), internal_add_connection(), internal_suspend_connection_(), MHD_cleanup_connections(), and resume_suspended_connections().
#define EDLL_insert | ( | head, | |
tail, | |||
element | |||
) |
Insert an element at the head of a EDLL. Assumes that head, tail and element are structs with prevE and nextE fields.
head | pointer to the head of the EDLL |
tail | pointer to the tail of the EDLL |
element | element to insert |
Definition at line 1799 of file internal.h.
Referenced by internal_add_connection(), and resume_suspended_connections().
#define EDLL_remove | ( | head, | |
tail, | |||
element | |||
) |
Remove an element from a EDLL. Assumes that head, tail and element are structs with prevE and nextE fields.
head | pointer to the head of the EDLL |
tail | pointer to the tail of the EDLL |
element | element to remove |
Definition at line 1818 of file internal.h.
Referenced by internal_suspend_connection_(), and MHD_cleanup_connections().
#define EXTRA_CHECKS MHD_NO |
Should we perform additional sanity checks at runtime (on our internal invariants)? This may lead to aborts, but can be useful for debugging.
Definition at line 87 of file internal.h.
#define MAX_NONCE_LENGTH 129 |
Maximum length of a nonce in digest authentication. 32(MD5 Hex) + 8(Timestamp Hex) + 1(NULL); hence 41 should suffice, but Opera (already) takes more (see Mantis #1633), so we've increased the value to support something longer...
Definition at line 215 of file internal.h.
Referenced by check_nonce_nc(), and MHD_digest_auth_check().
#define MHD_BUF_INC_SIZE 1024 |
Minimum size by which MHD tries to increment read/write buffers. We usually begin with half the available pool space for the IO-buffer, but if absolutely needed we additively grow by the number of bytes given here (up to – theoretically – the full pool space).
Definition at line 100 of file internal.h.
Referenced by MHD_start_daemon_va(), and try_grow_read_buffer().
#define MHD_check_response_header_s_token_ci | ( | r, | |
k, | |||
tkn | |||
) | MHD_check_response_header_token_ci((r),(k),(tkn),MHD_STATICSTR_LEN_(tkn)) |
Check whether response header contains particular static tkn.
Token could be surrounded by spaces and tabs and delimited by comma. Case-insensitive match used for header names and tokens.
r | the response to query |
k | header name |
tkn | the static string of token to find |
Definition at line 1910 of file internal.h.
Referenced by build_header_response().
#define MHD_fd_close_chk_ | ( | fd | ) |
Close FD and abort execution if error is detected.
fd | the FD to close |
Definition at line 78 of file internal.h.
#define MHD_MAX | ( | a, | |
b | |||
) | (((a)<(b)) ? (b) : (a)) |
Definition at line 89 of file internal.h.
#define MHD_MIN | ( | a, | |
b | |||
) | (((a)<(b)) ? (a) : (b)) |
Definition at line 90 of file internal.h.
Referenced by try_ready_chunked_body(), and try_ready_normal_body().
#define MHD_PANIC | ( | msg | ) | do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL); BUILTIN_NOT_REACHED; } while (0) |
Trigger 'panic' action based on fatal errors.
msg | error message (const char *) |
Definition at line 65 of file internal.h.
Referenced by close_all_connections(), internal_add_connection(), internal_suspend_connection_(), MHD_cleanup_connections(), MHD_connection_handle_write(), MHD_init(), MHD_ip_limit_del(), MHD_quiesce_daemon(), MHD_resume_connection(), MHD_start_daemon_va(), MHD_stop_daemon(), MHD_suspend_connection(), and resume_suspended_connections().
#define MHD_STATICSTR_LEN_ | ( | macro | ) | (sizeof(macro)/sizeof(char) - 1) |
Determine length of static string / macro strings at compile time.
Definition at line 126 of file internal.h.
Referenced by build_header_response(), MHD_basic_auth_get_username_password(), MHD_connection_handle_idle(), MHD_connection_handle_write(), MHD_create_post_processor(), MHD_digest_auth_check(), MHD_digest_auth_get_username(), MHD_post_process(), need_100_continue(), parse_connection_headers(), post_process_multipart(), and process_multipart_headers().
#define MHD_TEST_ALLOW_SUSPEND_RESUME 8192 |
Additional test value for enum MHD_FLAG to check only for MHD_ALLOW_SUSPEND_RESUME and NOT for MHD_USE_ITC.
Definition at line 207 of file internal.h.
Referenced by close_all_connections(), MHD_resume_connection(), MHD_run_from_select(), MHD_select(), MHD_stop_daemon(), and MHD_suspend_connection().
#define XDLL_insert | ( | head, | |
tail, | |||
element | |||
) |
Insert an element at the head of a XDLL. Assumes that head, tail and element are structs with prevX and nextX fields.
head | pointer to the head of the XDLL |
tail | pointer to the tail of the XDLL |
element | element to insert |
Definition at line 1755 of file internal.h.
Referenced by internal_add_connection(), MHD_set_connection_option(), MHD_update_last_activity_(), and resume_suspended_connections().
#define XDLL_remove | ( | head, | |
tail, | |||
element | |||
) |
Remove an element from a XDLL. Assumes that head, tail and element are structs with prevX and nextX fields.
head | pointer to the head of the XDLL |
tail | pointer to the tail of the XDLL |
element | element to remove |
Definition at line 1776 of file internal.h.
Referenced by cleanup_connection(), close_connection(), internal_add_connection(), internal_suspend_connection_(), MHD_set_connection_option(), and MHD_update_last_activity_().
typedef void*(* LogCallback) (void *cls, const char *uri, struct MHD_Connection *con) |
Signature of function called to log URI accesses.
cls | closure |
uri | uri being accessed |
con | connection handle |
Definition at line 1206 of file internal.h.
typedef int(* MHD_ArgumentIterator_) (struct MHD_Connection *connection, const char *key, const char *value, enum MHD_ValueKind kind) |
Callback invoked when iterating over key / value argument pairs during parsing.
connection | context of the iteration |
key | 0-terminated key string, never NULL |
value | 0-terminated value string, may be NULL |
kind | origin of the key-value pair |
Definition at line 1852 of file internal.h.
typedef ssize_t(* ReceiveCallback) (struct MHD_Connection *conn, void *write_to, size_t max_bytes) |
Function to receive plaintext data.
conn | the connection struct |
write_to | where to write received data |
max_bytes | maximum number of bytes to receive |
Definition at line 565 of file internal.h.
typedef ssize_t(* TransmitCallback) (struct MHD_Connection *conn, const void *read_from, size_t max_bytes) |
Function to transmit plaintext data.
conn | the connection struct |
read_from | where to read data to transmit |
max_bytes | maximum number of bytes to transmit |
Definition at line 579 of file internal.h.
typedef size_t(* UnescapeCallback) (void *cls, struct MHD_Connection *conn, char *uri) |
Signature of function called to unescape URIs. See also MHD_http_unescape().
cls | closure |
conn | connection handle |
uri | 0-terminated string to unescape (should be updated) |
Definition at line 1220 of file internal.h.
enum MHD_CONNECTION_STATE |
States in a state machine for a connection.
The main transitions are any-state to MHD_CONNECTION_CLOSED, any state to state+1, MHD_CONNECTION_FOOTERS_SENT to MHD_CONNECTION_INIT. MHD_CONNECTION_CLOSED is the terminal state and MHD_CONNECTION_INIT the initial state.
Note that transitions for reading happen only after the input has been processed; transitions for writing happen after the respective data has been put into the write buffer (the write does not have to be completed yet). A transition to MHD_CONNECTION_CLOSED or MHD_CONNECTION_INIT requires the write to be complete.
Definition at line 403 of file internal.h.
What is this connection waiting for?
Definition at line 179 of file internal.h.
enum MHD_ConnKeepAlive |
Ability to use same connection for next request
Definition at line 587 of file internal.h.
enum MHD_EpollState |
State of the socket with respect to epoll (bitmask).
Definition at line 133 of file internal.h.
enum MHD_TLS_CONN_STATE |
States of TLS transport layer.
Definition at line 529 of file internal.h.
void internal_suspend_connection_ | ( | struct MHD_Connection * | connection | ) |
Internal version of MHD_suspend_connection().
connection | the connection to suspend |
Internal version of MHD_suspend_connection().
connection | the connection to suspend |
Definition at line 2559 of file daemon.c.
References _, MHD_Daemon::cleanup_connection_mutex, MHD_Connection::connection_timeout, MHD_Daemon::connection_timeout, MHD_Daemon::connections_head, MHD_Daemon::connections_tail, MHD_Connection::daemon, DLL_insert, DLL_remove, EDLL_remove, MHD_Daemon::manual_timeout_head, MHD_Daemon::manual_timeout_tail, mhd_assert, MHD_EPOLL_STATE_IN_EPOLL_SET, MHD_EPOLL_STATE_IN_EREADY_EDLL, MHD_EPOLL_STATE_SUSPENDED, MHD_mutex_lock_chk_, MHD_mutex_unlock_chk_, MHD_PANIC, MHD_USE_EPOLL, MHD_USE_THREAD_PER_CONNECTION, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, NULL, MHD_Daemon::options, MHD_Connection::resuming, MHD_Connection::socket_fd, MHD_Connection::suspended, MHD_Daemon::suspended_connections_head, MHD_Daemon::suspended_connections_tail, and XDLL_remove.
Referenced by MHD_suspend_connection().
bool MHD_check_response_header_token_ci | ( | const struct MHD_Response * | response, |
const char * | key, | ||
const char * | token, | ||
size_t | token_len | ||
) |
Check whether response header contains particular token.
Token could be surrounded by spaces and tabs and delimited by comma. Case-insensitive match used for header names and tokens.
response | the response to query |
key | header name |
token | the token to find |
token_len | the length of token, not including optional terminating null-character. |
Check whether response header contains particular token.
Token could be surrounded by spaces and tabs and delimited by comma. Case-insensitive match used for header names and tokens.
response | the response to query |
key | header name |
token | the token to find |
token_len | the length of token, not including optional terminating null-character. |
Definition at line 270 of file response.c.
References MHD_Response::first_header, MHD_HTTP_Header::header, MHD_HTTP_Header::kind, MHD_HEADER_KIND, MHD_str_equal_caseless_(), MHD_str_has_token_caseless_(), MHD_HTTP_Header::next, NULL, and MHD_HTTP_Header::value.
int MHD_parse_arguments_ | ( | struct MHD_Connection * | connection, |
enum MHD_ValueKind | kind, | ||
char * | args, | ||
MHD_ArgumentIterator_ | cb, | ||
unsigned int * | num_headers | ||
) |
Parse and unescape the arguments given by the client as part of the HTTP request URI.
kind | header kind to pass to cb | |
connection | connection to add headers to | |
[in,out] | args | argument URI string (after "?" in URI), clobbered in the process! |
cb | function to call on each key-value pair found | |
[out] | num_headers | set to the number of headers found |
Definition at line 184 of file internal.c.
References MHD_Connection::daemon, MHD_NO, MHD_unescape_plus(), MHD_YES, NULL, MHD_Daemon::unescape_callback, and MHD_Daemon::unescape_callback_cls.
Referenced by check_argument_match(), and parse_initial_message_line().
void MHD_unescape_plus | ( | char * | arg | ) |
Convert all occurrences of '+' to ' '.
arg | string that is modified (in place), must be 0-terminated |
Definition at line 117 of file internal.c.
References NULL.
Referenced by MHD_parse_arguments_(), and post_process_urlencoded().
MHD_PanicCallback mhd_panic |
Handler for fatal errors.
Definition at line 152 of file daemon.c.
Referenced by build_header_response(), MHD_create_post_processor(), MHD_init(), MHD_set_panic_func(), post_process_multipart(), post_process_urlencoded(), and process_request_body().
void* mhd_panic_cls |
Closure argument for "mhd_panic".
Closure argument for mhd_panic.
Definition at line 157 of file daemon.c.
Referenced by build_header_response(), MHD_create_post_processor(), MHD_set_panic_func(), post_process_multipart(), post_process_urlencoded(), and process_request_body().