GNU libmicrohttpd  0.9.59
internal.h File Reference

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"
Include dependency graph for internal.h:
This graph shows which files directly or indirectly include this file:

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)
 

Enumerations

enum  MHD_EpollState {
  MHD_EPOLL_STATE_UNREADY = 0, MHD_EPOLL_STATE_READ_READY = 1, MHD_EPOLL_STATE_WRITE_READY = 2, MHD_EPOLL_STATE_IN_EREADY_EDLL = 4,
  MHD_EPOLL_STATE_IN_EPOLL_SET = 8, MHD_EPOLL_STATE_SUSPENDED = 16, MHD_EPOLL_STATE_ERROR = 128
}
 
enum  MHD_ConnectionEventLoopInfo { MHD_EVENT_LOOP_INFO_READ = 0, MHD_EVENT_LOOP_INFO_WRITE = 1, MHD_EVENT_LOOP_INFO_BLOCK = 2, MHD_EVENT_LOOP_INFO_CLEANUP = 3 }
 
enum  MHD_CONNECTION_STATE {
  MHD_CONNECTION_INIT = 0, MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1, MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1, MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,
  MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1, MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1, MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1, MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,
  MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1, MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1, MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1, MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,
  MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1, MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1, MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1, MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,
  MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1, MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1, MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1, MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,
  MHD_CONNECTION_IN_CLEANUP = MHD_CONNECTION_CLOSED + 1
}
 
enum  MHD_TLS_CONN_STATE {
  MHD_TLS_CONN_NO_TLS = 0, MHD_TLS_CONN_INIT, MHD_TLS_CONN_HANDSHAKING, MHD_TLS_CONN_CONNECTED,
  MHD_TLS_CONN_WR_CLOSING, MHD_TLS_CONN_WR_CLOSED, MHD_TLS_CONN_TLS_CLOSING, MHD_TLS_CONN_TLS_CLOSED,
  MHD_TLS_CONN_TLS_FAILED, MHD_TLS_CONN_INVALID_STATE
}
 
enum  MHD_ConnKeepAlive { MHD_CONN_MUST_CLOSE = -1, MHD_CONN_KEEPALIVE_UNKOWN = 0, MHD_CONN_USE_KEEPALIVE = 1 }
 

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
 

Detailed Description

internal shared structures

Author
Daniel Pittman
Christian Grothoff

Definition in file internal.h.

Macro Definition Documentation

◆ BUILTIN_NOT_REACHED

#define BUILTIN_NOT_REACHED

Definition at line 119 of file internal.h.

◆ DEBUG_STATES

#define DEBUG_STATES   MHD_NO

Should all state transitions be printed to stderr?

Definition at line 546 of file internal.h.

◆ DLL_insert

#define DLL_insert (   head,
  tail,
  element 
)
Value:
do { \
mhd_assert (NULL == (element)->next); \
mhd_assert (NULL == (element)->prev); \
(element)->next = (head); \
(element)->prev = NULL; \
if ((tail) == NULL) \
(tail) = element; \
else \
(head)->prev = element; \
(head) = (element); } while (0)
#define NULL
Definition: reason_phrase.c:31

Insert an element at the head of a DLL. Assumes that head, tail and element are structs with prev and next fields.

Parameters
headpointer to the head of the DLL
tailpointer to the tail of the DLL
elementelement 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().

◆ DLL_remove

#define DLL_remove (   head,
  tail,
  element 
)
Value:
do { \
mhd_assert ( (NULL != (element)->next) || ((element) == (tail))); \
mhd_assert ( (NULL != (element)->prev) || ((element) == (head))); \
if ((element)->prev == NULL) \
(head) = (element)->next; \
else \
(element)->prev->next = (element)->next; \
if ((element)->next == NULL) \
(tail) = (element)->prev; \
else \
(element)->next->prev = (element)->prev; \
(element)->next = NULL; \
(element)->prev = NULL; } while (0)
#define NULL
Definition: reason_phrase.c:31

Remove an element from a DLL. Assumes that head, tail and element are structs with prev and next fields.

Parameters
headpointer to the head of the DLL
tailpointer to the tail of the DLL
elementelement 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().

◆ EDLL_insert

#define EDLL_insert (   head,
  tail,
  element 
)
Value:
do { \
(element)->nextE = (head); \
(element)->prevE = NULL; \
if ((tail) == NULL) \
(tail) = element; \
else \
(head)->prevE = element; \
(head) = (element); } while (0)
#define NULL
Definition: reason_phrase.c:31

Insert an element at the head of a EDLL. Assumes that head, tail and element are structs with prevE and nextE fields.

Parameters
headpointer to the head of the EDLL
tailpointer to the tail of the EDLL
elementelement to insert

Definition at line 1799 of file internal.h.

Referenced by internal_add_connection(), and resume_suspended_connections().

◆ EDLL_remove

#define EDLL_remove (   head,
  tail,
  element 
)
Value:
do { \
if ((element)->prevE == NULL) \
(head) = (element)->nextE; \
else \
(element)->prevE->nextE = (element)->nextE; \
if ((element)->nextE == NULL) \
(tail) = (element)->prevE; \
else \
(element)->nextE->prevE = (element)->prevE; \
(element)->nextE = NULL; \
(element)->prevE = NULL; } while (0)
#define NULL
Definition: reason_phrase.c:31

Remove an element from a EDLL. Assumes that head, tail and element are structs with prevE and nextE fields.

Parameters
headpointer to the head of the EDLL
tailpointer to the tail of the EDLL
elementelement to remove

Definition at line 1818 of file internal.h.

Referenced by internal_suspend_connection_(), and MHD_cleanup_connections().

◆ EXTRA_CHECKS

#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.

◆ MAX_NONCE_LENGTH

#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().

◆ MHD_BUF_INC_SIZE

#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().

◆ MHD_check_response_header_s_token_ci

#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.

Parameters
rthe response to query
kheader name
tknthe static string of token to find
Returns
true if token is found in specified header, false otherwise

Definition at line 1910 of file internal.h.

Referenced by build_header_response().

◆ MHD_fd_close_chk_

#define MHD_fd_close_chk_ (   fd)
Value:
do { \
if (0 == close ((fd)) && (EBADF == errno)) \
MHD_PANIC(_("Failed to close FD.\n")); \
} while(0)
int fd
Definition: microhttpd.h:2771
#define _(String)
Definition: mhd_options.h:42

Close FD and abort execution if error is detected.

Parameters
fdthe FD to close

Definition at line 78 of file internal.h.

◆ MHD_MAX

#define MHD_MAX (   a,
 
)    (((a)<(b)) ? (b) : (a))

Definition at line 89 of file internal.h.

◆ MHD_MIN

#define MHD_MIN (   a,
 
)    (((a)<(b)) ? (a) : (b))

Definition at line 90 of file internal.h.

Referenced by try_ready_chunked_body(), and try_ready_normal_body().

◆ MHD_PANIC

#define MHD_PANIC (   msg)    do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL); BUILTIN_NOT_REACHED; } while (0)

◆ MHD_STATICSTR_LEN_

#define MHD_STATICSTR_LEN_ (   macro)    (sizeof(macro)/sizeof(char) - 1)

◆ MHD_TEST_ALLOW_SUSPEND_RESUME

#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().

◆ XDLL_insert

#define XDLL_insert (   head,
  tail,
  element 
)
Value:
do { \
mhd_assert (NULL == (element)->nextX); \
mhd_assert (NULL == (element)->prevX); \
(element)->nextX = (head); \
(element)->prevX = NULL; \
if (NULL == (tail)) \
(tail) = element; \
else \
(head)->prevX = element; \
(head) = (element); } while (0)
#define NULL
Definition: reason_phrase.c:31

Insert an element at the head of a XDLL. Assumes that head, tail and element are structs with prevX and nextX fields.

Parameters
headpointer to the head of the XDLL
tailpointer to the tail of the XDLL
elementelement 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().

◆ XDLL_remove

#define XDLL_remove (   head,
  tail,
  element 
)
Value:
do { \
mhd_assert ( (NULL != (element)->nextX) || ((element) == (tail))); \
mhd_assert ( (NULL != (element)->prevX) || ((element) == (head))); \
if (NULL == (element)->prevX) \
(head) = (element)->nextX; \
else \
(element)->prevX->nextX = (element)->nextX; \
if (NULL == (element)->nextX) \
(tail) = (element)->prevX; \
else \
(element)->nextX->prevX = (element)->prevX; \
(element)->nextX = NULL; \
(element)->prevX = NULL; } while (0)
#define NULL
Definition: reason_phrase.c:31

Remove an element from a XDLL. Assumes that head, tail and element are structs with prevX and nextX fields.

Parameters
headpointer to the head of the XDLL
tailpointer to the tail of the XDLL
elementelement 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 Documentation

◆ LogCallback

typedef void*(* LogCallback) (void *cls, const char *uri, struct MHD_Connection *con)

Signature of function called to log URI accesses.

Parameters
clsclosure
uriuri being accessed
conconnection handle
Returns
new closure

Definition at line 1206 of file internal.h.

◆ MHD_ArgumentIterator_

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.

Parameters
connectioncontext of the iteration
key0-terminated key string, never NULL
value0-terminated value string, may be NULL
kindorigin of the key-value pair
Returns
MHD_YES on success (continue to iterate) MHD_NO to signal failure (and abort iteration)

Definition at line 1852 of file internal.h.

◆ ReceiveCallback

typedef ssize_t(* ReceiveCallback) (struct MHD_Connection *conn, void *write_to, size_t max_bytes)

Function to receive plaintext data.

Parameters
connthe connection struct
write_towhere to write received data
max_bytesmaximum number of bytes to receive
Returns
number of bytes written to write_to

Definition at line 565 of file internal.h.

◆ TransmitCallback

typedef ssize_t(* TransmitCallback) (struct MHD_Connection *conn, const void *read_from, size_t max_bytes)

Function to transmit plaintext data.

Parameters
connthe connection struct
read_fromwhere to read data to transmit
max_bytesmaximum number of bytes to transmit
Returns
number of bytes transmitted

Definition at line 579 of file internal.h.

◆ UnescapeCallback

typedef size_t(* UnescapeCallback) (void *cls, struct MHD_Connection *conn, char *uri)

Signature of function called to unescape URIs. See also MHD_http_unescape().

Parameters
clsclosure
connconnection handle
uri0-terminated string to unescape (should be updated)
Returns
length of the resulting string

Definition at line 1220 of file internal.h.

Enumeration Type Documentation

◆ 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.

Enumerator
MHD_CONNECTION_INIT 

Connection just started (no headers received). Waiting for the line with the request type, URL and version.

MHD_CONNECTION_URL_RECEIVED 

1: We got the URL (and request type and version). Wait for a header line.

MHD_CONNECTION_HEADER_PART_RECEIVED 

2: We got part of a multi-line request header. Wait for the rest.

MHD_CONNECTION_HEADERS_RECEIVED 

3: We got the request headers. Process them.

MHD_CONNECTION_HEADERS_PROCESSED 

4: We have processed the request headers. Send 100 continue.

MHD_CONNECTION_CONTINUE_SENDING 

5: We have processed the headers and need to send 100 CONTINUE.

MHD_CONNECTION_CONTINUE_SENT 

6: We have sent 100 CONTINUE (or do not need to). Read the message body.

MHD_CONNECTION_BODY_RECEIVED 

7: We got the request body. Wait for a line of the footer.

MHD_CONNECTION_FOOTER_PART_RECEIVED 

8: We got part of a line of the footer. Wait for the rest.

MHD_CONNECTION_FOOTERS_RECEIVED 

9: We received the entire footer. Wait for a response to be queued and prepare the response headers.

MHD_CONNECTION_HEADERS_SENDING 

10: We have prepared the response headers in the writ buffer. Send the response headers.

MHD_CONNECTION_HEADERS_SENT 

11: We have sent the response headers. Get ready to send the body.

MHD_CONNECTION_NORMAL_BODY_READY 

12: We are ready to send a part of a non-chunked body. Send it.

MHD_CONNECTION_NORMAL_BODY_UNREADY 

13: We are waiting for the client to provide more data of a non-chunked body.

MHD_CONNECTION_CHUNKED_BODY_READY 

14: We are ready to send a chunk.

MHD_CONNECTION_CHUNKED_BODY_UNREADY 

15: We are waiting for the client to provide a chunk of the body.

MHD_CONNECTION_BODY_SENT 

16: We have sent the response body. Prepare the footers.

MHD_CONNECTION_FOOTERS_SENDING 

17: We have prepared the response footer. Send it.

MHD_CONNECTION_FOOTERS_SENT 

18: We have sent the response footer. Shutdown or restart.

MHD_CONNECTION_CLOSED 

19: This connection is to be closed.

MHD_CONNECTION_IN_CLEANUP 

20: This connection is finished (only to be freed)

Definition at line 403 of file internal.h.

◆ MHD_ConnectionEventLoopInfo

What is this connection waiting for?

Enumerator
MHD_EVENT_LOOP_INFO_READ 

We are waiting to be able to read.

MHD_EVENT_LOOP_INFO_WRITE 

We are waiting to be able to write.

MHD_EVENT_LOOP_INFO_BLOCK 

We are waiting for the application to provide data.

MHD_EVENT_LOOP_INFO_CLEANUP 

We are finished and are awaiting cleanup.

Definition at line 179 of file internal.h.

◆ MHD_ConnKeepAlive

Ability to use same connection for next request

Enumerator
MHD_CONN_MUST_CLOSE 

Connection must be closed after sending response.

MHD_CONN_KEEPALIVE_UNKOWN 

KeelAlive state is not yet determined

MHD_CONN_USE_KEEPALIVE 

Connection can be used for serving next request

Definition at line 587 of file internal.h.

◆ MHD_EpollState

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 133 of file internal.h.

◆ MHD_TLS_CONN_STATE

States of TLS transport layer.

Enumerator
MHD_TLS_CONN_NO_TLS 

Not a TLS connection (plain socket).

MHD_TLS_CONN_INIT 

TLS connection is not established yet.

MHD_TLS_CONN_HANDSHAKING 

TLS is in handshake process.

MHD_TLS_CONN_CONNECTED 

TLS is established.

MHD_TLS_CONN_WR_CLOSING 

Closing WR side of TLS layer.

MHD_TLS_CONN_WR_CLOSED 

WR side of TLS layer is closed.

MHD_TLS_CONN_TLS_CLOSING 

TLS session is terminating.

MHD_TLS_CONN_TLS_CLOSED 

TLS session is terminated.

MHD_TLS_CONN_TLS_FAILED 

TLS session failed.

MHD_TLS_CONN_INVALID_STATE 

Sentinel. Not a valid value.

Definition at line 529 of file internal.h.

Function Documentation

◆ internal_suspend_connection_()

void internal_suspend_connection_ ( struct MHD_Connection connection)

Internal version of MHD_suspend_connection().

Remarks
In thread-per-connection mode: can be called from any thread, in any other mode: to be called only from thread that process daemon's select()/poll()/etc.
Parameters
connectionthe connection to suspend

Internal version of MHD_suspend_connection().

Remarks
In thread-per-connection mode: can be called from any thread, in any other mode: to be called only from thread that process daemon's select()/poll()/etc.
Parameters
connectionthe 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().

Here is the caller graph for this function:

◆ MHD_check_response_header_token_ci()

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.

Parameters
responsethe response to query
keyheader name
tokenthe token to find
token_lenthe length of token, not including optional terminating null-character.
Returns
true if token is found in specified header, false otherwise

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.

Parameters
responsethe response to query
keyheader name
tokenthe token to find
token_lenthe length of token, not including optional terminating null-character.
Returns
true if token is found in specified header, false otherwise

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.

Here is the call graph for this function:

◆ MHD_parse_arguments_()

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.

Parameters
kindheader kind to pass to cb
connectionconnection to add headers to
[in,out]argsargument URI string (after "?" in URI), clobbered in the process!
cbfunction to call on each key-value pair found
[out]num_headersset to the number of headers found
Returns
MHD_NO on failure (cb returned MHD_NO), MHD_YES for success (parsing succeeded, cb always returned MHD_YES)

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MHD_unescape_plus()

void MHD_unescape_plus ( char *  arg)

Convert all occurrences of '+' to ' '.

Parameters
argstring 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().

Here is the caller graph for this function:

Variable Documentation

◆ mhd_panic

◆ mhd_panic_cls

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().