GNU libmicrohttpd 0.9.77
|
MHD internal shared structures. More...
#include "mhd_options.h"
#include "platform.h"
#include "microhttpd.h"
#include "mhd_assert.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_iovec_track_ |
struct | MHD_Response |
struct | MHD_Reply_Properties |
struct | MHD_Connection |
struct | MHD_Daemon |
Macros | |
#define | PRIu64 "llu" |
#define | MHD_PANIC(msg) |
#define | _MHD_MACRO_NO 0 |
#define | _MHD_MACRO_YES 1 |
#define | MHD_fd_close_chk_(fd) |
#define | _MHD_DEBUG_CONNECT _MHD_MACRO_NO |
#define | _MHD_DEBUG_SEND_DATA _MHD_MACRO_NO |
#define | _MHD_DEBUG_CLOSE _MHD_MACRO_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 | MHD_IOV_ELMN_MAX_SIZE SIZE_MAX |
#define | DEBUG_STATES _MHD_MACRO_NO |
#define | MHD_IS_HTTP_VER_SUPPORTED(ver) |
#define | MHD_IS_HTTP_VER_1_1_COMPAT(ver) |
#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) |
Typedefs | |
typedef struct MHD_IoVec | MHD_iovec_ |
typedef size_t | MHD_iov_size_ |
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 enum MHD_Result(* | MHD_ArgumentIterator_) (struct MHD_Connection *connection, const char *key, size_t key_size, const char *value, size_t value_size, enum MHD_ValueKind kind) |
Functions | |
void | MHD_unescape_plus (char *arg) |
enum MHD_Result | 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, size_t key_len, const char *token, size_t token_len) |
struct MHD_Daemon * | MHD_get_master (struct MHD_Daemon *daemon) |
void | internal_suspend_connection_ (struct MHD_Connection *connection) |
Variables | |
MHD_PanicCallback | mhd_panic |
void * | mhd_panic_cls |
enum MHD_tristate | _MHD_FIXED_ENUM |
enum MHD_EpollState | _MHD_FIXED_FLAGS_ENUM |
MHD internal shared structures.
Definition in file internal.h.
#define _MHD_DEBUG_CLOSE _MHD_MACRO_NO |
Add extra debug messages with reasons for closing connections (non-error reasons).
Definition at line 134 of file internal.h.
#define _MHD_DEBUG_CONNECT _MHD_MACRO_NO |
Print extra messages when establishing connections? (only adds non-error messages).
Definition at line 119 of file internal.h.
#define _MHD_DEBUG_SEND_DATA _MHD_MACRO_NO |
Should all data send be printed to stderr?
Definition at line 126 of file internal.h.
#define _MHD_MACRO_NO 0 |
"Negative answer"/"false" for use in macros, meaningful for precompiler
Definition at line 91 of file internal.h.
#define _MHD_MACRO_YES 1 |
"Positive answer"/"true" for use in macros, meaningful for precompiler
Definition at line 97 of file internal.h.
#define BUILTIN_NOT_REACHED |
Definition at line 168 of file internal.h.
#define DEBUG_STATES _MHD_MACRO_NO |
Should all state transitions be printed to stderr?
Definition at line 729 of file internal.h.
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 2178 of file internal.h.
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 2200 of file internal.h.
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 2272 of file internal.h.
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 2292 of file internal.h.
#define MAX_NONCE_LENGTH 129 |
Maximum length of a nonce in digest authentication. 64(SHA-256 Hex) + 8(Timestamp Hex) + 1(NULL); hence 73 should suffice, but Opera (already) takes more (see Mantis #1633), so we've increased the value to support something longer...
Definition at line 277 of file internal.h.
#define MHD_BUF_INC_SIZE 1024 |
Minimum reasonable 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 148 of file internal.h.
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 2394 of file internal.h.
Close FD and abort execution if error is detected.
fd | the FD to close |
Definition at line 103 of file internal.h.
Definition at line 402 of file internal.h.
Protocol should be used as HTTP/1.1 protocol.
See the last paragraph of https://datatracker.ietf.org/doc/html/rfc7230#section-2.6
Definition at line 844 of file internal.h.
Returns boolean 'true' if HTTP version is supported by MHD
Definition at line 835 of file internal.h.
Trigger 'panic' action based on fatal errors.
msg | error message (const char *) |
Definition at line 75 of file internal.h.
Determine length of static string / macro strings at compile time.
Definition at line 175 of file internal.h.
#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 269 of file internal.h.
#define PRIu64 "llu" |
Definition at line 53 of file internal.h.
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 2225 of file internal.h.
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 2247 of file internal.h.
Signature of function called to log URI accesses.
cls | closure |
uri | uri being accessed |
con | connection handle |
Definition at line 1573 of file internal.h.
typedef enum MHD_Result(* MHD_ArgumentIterator_) (struct MHD_Connection *connection, const char *key, size_t key_size, const char *value, size_t value_size, 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 |
key_size | number of bytes in key |
value | 0-terminated binary data, may include binary zeros, may be NULL |
value_size | number of bytes in value |
kind | origin of the key-value pair |
Definition at line 2313 of file internal.h.
Definition at line 403 of file internal.h.
Internally used I/O vector type for use when writev or sendmsg is not available.
Definition at line 401 of file internal.h.
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 748 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 762 of file internal.h.
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 1587 of file internal.h.
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 573 of file internal.h.
What is this connection waiting for?
Definition at line 241 of file internal.h.
Ability to use same connection for next request
Definition at line 771 of file internal.h.
State of the socket with respect to epoll (bitmask).
Enumerator | |
---|---|
MHD_EPOLL_STATE_UNREADY | The socket is not involved with a defined state in epoll() right now. |
MHD_EPOLL_STATE_READ_READY | epoll() told us that data was ready for reading, and we did not consume all of it yet. |
MHD_EPOLL_STATE_WRITE_READY | epoll() told us that space was available for writing, and we did not consume all of it yet. |
MHD_EPOLL_STATE_IN_EREADY_EDLL | Is this connection currently in the 'eready' EDLL? |
MHD_EPOLL_STATE_IN_EPOLL_SET | Is this connection currently in the epoll() set? |
MHD_EPOLL_STATE_SUSPENDED | Is this connection currently suspended? |
MHD_EPOLL_STATE_ERROR | Is this connection in some error state? |
Definition at line 195 of file internal.h.
The HTTP method.
Only primary methods (specified in RFC7231) are defined here.
Definition at line 852 of file internal.h.
Definition at line 794 of file internal.h.
Automatically assigned flags
Definition at line 366 of file internal.h.
States of TLS transport layer.
Definition at line 712 of file internal.h.
Tri-state on/off/unknown
Enumerator | |
---|---|
_MHD_UNKNOWN | State is not yet checked nor set |
_MHD_OFF | State is "off" / "disabled" |
_MHD_NO | State is "off" / "disabled" |
_MHD_ON | State is "on" / "enabled" |
_MHD_YES | State is "on" / "enabled" |
Definition at line 182 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 3110 of file daemon.c.
References _, MHD_Daemon::cleanup_connection_mutex, MHD_Connection::connection_timeout_ms, MHD_Daemon::connection_timeout_ms, 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_HTTP_OK, MHD_mutex_lock_chk_, MHD_mutex_unlock_chk_, MHD_PANIC, MHD_USE_EPOLL, MHD_USE_INTERNAL_POLLING_THREAD, MHD_USE_THREAD_PER_CONNECTION, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, NULL, MHD_Daemon::options, MHD_Daemon::pid, 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, | ||
size_t | key_len, | ||
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 |
key_len | the length of key, not including optional terminating null-character. |
token | the token to find |
token_len | the length of token, not including optional terminating null-character. |
Definition at line 773 of file response.c.
References MHD_Response::first_header, MHD_HTTP_Header::header, MHD_HTTP_Header::header_size, MHD_HTTP_Header::kind, mhd_assert, MHD_HEADER_KIND, MHD_HTTP_OK, MHD_str_equal_caseless_bin_n_(), MHD_str_has_token_caseless_(), MHD_HTTP_Header::next, NULL, and MHD_HTTP_Header::value.
struct MHD_Daemon * MHD_get_master | ( | struct MHD_Daemon * | daemon | ) |
Trace up to and return master daemon. If the supplied daemon is a master, then return the daemon itself.
daemon | handle to a daemon |
Definition at line 261 of file daemon.c.
References MHD_Daemon::master, and NULL.
Referenced by check_nonce_nc(), MHD_ip_limit_add(), and MHD_ip_limit_del().
enum MHD_Result 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 194 of file internal.c.
References MHD_Connection::daemon, MHD_HTTP_OK, MHD_NO, MHD_unescape_plus(), MHD_YES, NULL, MHD_Daemon::unescape_callback, and MHD_Daemon::unescape_callback_cls.
Convert all occurrences of '+' to ' '.
arg | string that is modified (in place), must be 0-terminated |
Definition at line 123 of file internal.c.
References MHD_HTTP_OK, and NULL.
Referenced by MHD_parse_arguments_(), MHD_parse_arguments_(), post_process_urlencoded(), and process_value().
enum MHD_HTTP_Method _MHD_FIXED_ENUM |
enum MHD_ResponseAutoFlags _MHD_FIXED_FLAGS_ENUM |
|
extern |
Handler for fatal errors.
Definition at line 31 of file panic.c.
Referenced by MHD_init(), and MHD_set_panic_func().
|
extern |
Closure argument for "mhd_panic".
Closure argument for mhd_panic.
Definition at line 36 of file panic.c.
Referenced by MHD_set_panic_func().