GNU libmicrohttpd
0.9.72
|
public interface to libmicrohttpd More...
#include <stdarg.h>
#include <stdint.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/socket.h>
Go to the source code of this file.
Data Structures | |
struct | MHD_OptionItem |
union | MHD_ConnectionInfo |
union | MHD_DaemonInfo |
Typedefs | |
typedef int | MHD_socket |
typedef void(* | MHD_LogCallback) (void *cls, const char *fm, va_list ap) |
typedef int(* | MHD_PskServerCredentialsCallback) (void *cls, const struct MHD_Connection *connection, const char *username, void **psk, size_t *psk_size) |
typedef void(* | MHD_PanicCallback) (void *cls, const char *file, unsigned int line, const char *reason) |
typedef enum MHD_Result(* | MHD_AcceptPolicyCallback) (void *cls, const struct sockaddr *addr, socklen_t addrlen) |
typedef enum MHD_Result(* | MHD_AccessHandlerCallback) (void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) |
typedef void(* | MHD_RequestCompletedCallback) (void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe) |
typedef void(* | MHD_NotifyConnectionCallback) (void *cls, struct MHD_Connection *connection, void **socket_context, enum MHD_ConnectionNotificationCode toe) |
typedef enum MHD_Result(* | MHD_KeyValueIterator) (void *cls, enum MHD_ValueKind kind, const char *key, const char *value) |
typedef enum MHD_Result(* | MHD_KeyValueIteratorN) (void *cls, enum MHD_ValueKind kind, const char *key, size_t key_size, const char *value, size_t value_size) |
typedef ssize_t(* | MHD_ContentReaderCallback) (void *cls, uint64_t pos, char *buf, size_t max) |
typedef void(* | MHD_ContentReaderFreeCallback) (void *cls) |
typedef enum MHD_Result(* | MHD_PostDataIterator) (void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size) |
typedef void(* | MHD_UpgradeHandler) (void *cls, struct MHD_Connection *connection, void *con_cls, const char *extra_in, size_t extra_in_size, MHD_socket sock, struct MHD_UpgradeResponseHandle *urh) |
Functions | |
_MHD_EXTERN const char * | MHD_get_reason_phrase_for (unsigned int code) |
_MHD_EXTERN struct MHD_Daemon * | MHD_start_daemon_va (unsigned int flags, uint16_t port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls, va_list ap) |
_MHD_EXTERN struct MHD_Daemon * | MHD_start_daemon (unsigned int flags, uint16_t port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls,...) |
_MHD_EXTERN MHD_socket | MHD_quiesce_daemon (struct MHD_Daemon *daemon) |
_MHD_EXTERN void | MHD_stop_daemon (struct MHD_Daemon *daemon) |
_MHD_EXTERN enum MHD_Result | MHD_add_connection (struct MHD_Daemon *daemon, MHD_socket client_socket, const struct sockaddr *addr, socklen_t addrlen) |
_MHD_EXTERN enum MHD_Result | MHD_get_fdset (struct MHD_Daemon *daemon, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *except_fd_set, MHD_socket *max_fd) |
_MHD_EXTERN enum MHD_Result | MHD_get_fdset2 (struct MHD_Daemon *daemon, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *except_fd_set, MHD_socket *max_fd, unsigned int fd_setsize) |
_MHD_EXTERN enum MHD_Result | MHD_get_timeout (struct MHD_Daemon *daemon, MHD_UNSIGNED_LONG_LONG *timeout) |
_MHD_EXTERN enum MHD_Result | MHD_run (struct MHD_Daemon *daemon) |
_MHD_EXTERN enum MHD_Result | MHD_run_from_select (struct MHD_Daemon *daemon, const fd_set *read_fd_set, const fd_set *write_fd_set, const fd_set *except_fd_set) |
_MHD_EXTERN int | MHD_get_connection_values (struct MHD_Connection *connection, enum MHD_ValueKind kind, MHD_KeyValueIterator iterator, void *iterator_cls) |
_MHD_EXTERN int | MHD_get_connection_values_n (struct MHD_Connection *connection, enum MHD_ValueKind kind, MHD_KeyValueIteratorN iterator, void *iterator_cls) |
_MHD_EXTERN enum MHD_Result | MHD_set_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key, const char *value) |
_MHD_EXTERN enum MHD_Result | MHD_set_connection_value_n (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key, size_t key_size, const char *value, size_t value_size) |
_MHD_EXTERN void | MHD_set_panic_func (MHD_PanicCallback cb, void *cls) |
_MHD_EXTERN size_t | MHD_http_unescape (char *val) |
_MHD_EXTERN const char * | MHD_lookup_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key) |
_MHD_EXTERN enum MHD_Result | MHD_lookup_connection_value_n (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key, size_t key_size, const char **value_ptr, size_t *value_size_ptr) |
_MHD_EXTERN enum MHD_Result | MHD_queue_response (struct MHD_Connection *connection, unsigned int status_code, struct MHD_Response *response) |
_MHD_EXTERN void | MHD_suspend_connection (struct MHD_Connection *connection) |
_MHD_EXTERN void | MHD_resume_connection (struct MHD_Connection *connection) |
_MHD_EXTERN enum MHD_Result | MHD_set_response_options (struct MHD_Response *response, enum MHD_ResponseFlags flags,...) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_callback (uint64_t size, size_t block_size, MHD_ContentReaderCallback crc, void *crc_cls, MHD_ContentReaderFreeCallback crfc) |
_MHD_DEPR_FUNC ("MHD_create_response_from_data() is deprecated, use MHD_create_response_from_buffer()") _MHD_EXTERN struct MHD_Response *MHD_create_response_from_data(size_t size | |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_buffer (size_t size, void *buffer, enum MHD_ResponseMemoryMode mode) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_buffer_with_free_callback (size_t size, void *buffer, MHD_ContentReaderFreeCallback crfc) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_fd (size_t size, int fd) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_pipe (int fd) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_fd64 (uint64_t size, int fd) |
_MHD_DEPR_FUNC ("Function MHD_create_response_from_fd_at_offset() is deprecated, use MHD_create_response_from_fd_at_offset64()") _MHD_EXTERN struct MHD_Response *MHD_create_response_from_fd_at_offset(size_t size | |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_from_fd_at_offset64 (uint64_t size, int fd, uint64_t offset) |
_MHD_EXTERN enum MHD_Result | MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh, enum MHD_UpgradeAction action,...) |
_MHD_EXTERN struct MHD_Response * | MHD_create_response_for_upgrade (MHD_UpgradeHandler upgrade_handler, void *upgrade_handler_cls) |
_MHD_EXTERN void | MHD_destroy_response (struct MHD_Response *response) |
_MHD_EXTERN enum MHD_Result | MHD_add_response_header (struct MHD_Response *response, const char *header, const char *content) |
_MHD_EXTERN enum MHD_Result | MHD_add_response_footer (struct MHD_Response *response, const char *footer, const char *content) |
_MHD_EXTERN enum MHD_Result | MHD_del_response_header (struct MHD_Response *response, const char *header, const char *content) |
_MHD_EXTERN int | MHD_get_response_headers (struct MHD_Response *response, MHD_KeyValueIterator iterator, void *iterator_cls) |
_MHD_EXTERN const char * | MHD_get_response_header (struct MHD_Response *response, const char *key) |
_MHD_EXTERN struct MHD_PostProcessor * | MHD_create_post_processor (struct MHD_Connection *connection, size_t buffer_size, MHD_PostDataIterator iter, void *iter_cls) |
_MHD_EXTERN enum MHD_Result | MHD_post_process (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len) |
_MHD_EXTERN enum MHD_Result | MHD_destroy_post_processor (struct MHD_PostProcessor *pp) |
_MHD_EXTERN char * | MHD_digest_auth_get_username (struct MHD_Connection *connection) |
_MHD_EXTERN void | MHD_free (void *ptr) |
_MHD_EXTERN int | MHD_digest_auth_check2 (struct MHD_Connection *connection, const char *realm, const char *username, const char *password, unsigned int nonce_timeout, enum MHD_DigestAuthAlgorithm algo) |
_MHD_EXTERN int | MHD_digest_auth_check (struct MHD_Connection *connection, const char *realm, const char *username, const char *password, unsigned int nonce_timeout) |
_MHD_EXTERN int | MHD_digest_auth_check_digest2 (struct MHD_Connection *connection, const char *realm, const char *username, const uint8_t *digest, size_t digest_size, unsigned int nonce_timeout, enum MHD_DigestAuthAlgorithm algo) |
_MHD_EXTERN int | MHD_digest_auth_check_digest (struct MHD_Connection *connection, const char *realm, const char *username, const uint8_t digest[MHD_MD5_DIGEST_SIZE], unsigned int nonce_timeout) |
_MHD_EXTERN enum MHD_Result | MHD_queue_auth_fail_response2 (struct MHD_Connection *connection, const char *realm, const char *opaque, struct MHD_Response *response, int signal_stale, enum MHD_DigestAuthAlgorithm algo) |
_MHD_EXTERN enum MHD_Result | MHD_queue_auth_fail_response (struct MHD_Connection *connection, const char *realm, const char *opaque, struct MHD_Response *response, int signal_stale) |
_MHD_EXTERN char * | MHD_basic_auth_get_username_password (struct MHD_Connection *connection, char **password) |
_MHD_EXTERN enum MHD_Result | MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, const char *realm, struct MHD_Response *response) |
_MHD_EXTERN const union MHD_ConnectionInfo * | MHD_get_connection_info (struct MHD_Connection *connection, enum MHD_ConnectionInfoType info_type,...) |
_MHD_EXTERN enum MHD_Result | MHD_set_connection_option (struct MHD_Connection *connection, enum MHD_CONNECTION_OPTION option,...) |
_MHD_EXTERN const union MHD_DaemonInfo * | MHD_get_daemon_info (struct MHD_Daemon *daemon, enum MHD_DaemonInfoType info_type,...) |
_MHD_EXTERN const char * | MHD_get_version (void) |
_MHD_EXTERN enum MHD_Result | MHD_is_feature_supported (enum MHD_FEATURE feature) |
Variables | |
void * | data |
void int | must_free |
void int int | must_copy |
int | fd |
int off_t | offset |
public interface to libmicrohttpd
All symbols defined in this header start with MHD. MHD is a small HTTP daemon library. As such, it does not have any API for logging errors (you can only enable or disable logging to stderr). Also, it may not support all of the HTTP features directly, where applicable, portions of HTTP may have to be handled by clients of the library.
The library is supposed to handle everything that it must handle (because the API would not allow clients to do this), such as basic connection management; however, detailed interpretations of headers – such as range requests – and HTTP methods are left to clients. The library does understand HEAD and will only send the headers of the response and not the body, even if the client supplied a body. The library also understands headers that control connection management (specifically, "Connection: close" and "Expect: 100 continue" are understood and handled automatically).
MHD understands POST data and is able to decode certain formats (at the moment only "application/x-www-form-urlencoded" and "multipart/formdata"). Unsupported encodings and large POST submissions may require the application to manually process the stream, which is provided to the main application (and thus can be processed, just not conveniently by MHD).
The header file defines various constants used by the HTTP protocol. This does not mean that MHD actually interprets all of these values. The provided constants are exported as a convenience for users of the library. MHD does not verify that transmitted HTTP headers are part of the standard specification; users of the library are free to define their own extensions of the HTTP standard and use those with MHD.
All functions are guaranteed to be completely reentrant and thread-safe (with the exception of MHD_set_connection_value, which must only be used in a particular context).
Definition in file microhttpd.h.
#define _MHD_DEPR_FUNC | ( | msg | ) |
Definition at line 286 of file microhttpd.h.
#define _MHD_DEPR_IN_MACRO | ( | msg | ) |
Definition at line 260 of file microhttpd.h.
#define _MHD_DEPR_MACRO | ( | msg | ) |
Define MHD_NO_DEPRECATION before including "microhttpd.h" to disable deprecation messages
Definition at line 255 of file microhttpd.h.
#define _MHD_EXTERN extern |
Definition at line 186 of file microhttpd.h.
#define _MHD_NO_DEPR_FUNC 1 |
Definition at line 285 of file microhttpd.h.
#define _MHD_NO_DEPR_IN_MACRO 1 |
Definition at line 259 of file microhttpd.h.
#define MHD_CONTENT_READER_END_OF_STREAM ((size_t) -1LL) |
Definition at line 175 of file microhttpd.h.
#define MHD_CONTENT_READER_END_WITH_ERROR (((size_t) -1LL) - 1) |
Definition at line 176 of file microhttpd.h.
Definition at line 3201 of file microhttpd.h.
#define MHD_INVALID_SOCKET (-1) |
Definition at line 197 of file microhttpd.h.
#define MHD_LONG_LONG long long |
Not all architectures and printf()
's support the long long
type. This gives the ability to replace long long
with just a long
, standard int
or a short
.
Definition at line 298 of file microhttpd.h.
#define MHD_LONG_LONG_PRINTF "ll" |
Format string for printing a variable of type MHD_LONG_LONG. You should only redefine this if you also define MHD_LONG_LONG.
Definition at line 312 of file microhttpd.h.
#define MHD_MD5_DIGEST_SIZE 16 |
Length of the binary output of the MD5 hash function.
Definition at line 323 of file microhttpd.h.
#define MHD_POSIX_SOCKETS 1 |
MHD_socket is type for socket FDs
Definition at line 195 of file microhttpd.h.
#define MHD_RESPONSE_HEADER_KIND |
Definition at line 1788 of file microhttpd.h.
#define MHD_SIZE_UNKNOWN ((uint64_t) -1LL) |
Constant used to indicate unknown size (use when creating a response).
Definition at line 168 of file microhttpd.h.
#define MHD_SOCKET_DEFINED 1 |
Definition at line 204 of file microhttpd.h.
#define MHD_UNSIGNED_LONG_LONG unsigned long long |
Definition at line 299 of file microhttpd.h.
#define MHD_UNSIGNED_LONG_LONG_PRINTF "%llu" |
Definition at line 313 of file microhttpd.h.
#define MHD_VERSION 0x00097200 |
Current version of the library.
Definition at line 136 of file microhttpd.h.
typedef enum MHD_Result(* MHD_AcceptPolicyCallback) (void *cls, const struct sockaddr *addr, socklen_t addrlen) |
Allow or deny a client to connect.
cls | closure |
addr | address information from the client |
addrlen | length of addr |
Definition at line 2130 of file microhttpd.h.
typedef enum MHD_Result(* MHD_AccessHandlerCallback) (void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) |
A client has requested the given url using the given method (MHD_HTTP_METHOD_GET, MHD_HTTP_METHOD_PUT, MHD_HTTP_METHOD_DELETE, MHD_HTTP_METHOD_POST, etc). The callback must call MHD callbacks to provide content to give back to the client and return an HTTP status code (i.e. MHD_HTTP_OK, MHD_HTTP_NOT_FOUND, etc.).
cls | argument given together with the function pointer when the handler was registered with MHD | |
url | the requested url | |
method | the HTTP method used (MHD_HTTP_METHOD_GET, MHD_HTTP_METHOD_PUT, etc.) | |
version | the HTTP version string (i.e. MHD_HTTP_VERSION_1_1) | |
upload_data | the data being uploaded (excluding HEADERS, for a POST that fits into memory and that is encoded with a supported encoding, the POST data will NOT be given in upload_data and is instead available as part of MHD_get_connection_values; very large POST data will be made available incrementally in upload_data) | |
[in,out] | upload_data_size | set initially to the size of the upload_data provided; the method must update this value to the number of bytes NOT processed; |
[in,out] | con_cls | pointer that the callback can set to some address and that will be preserved by MHD for future calls for this request; since the access handler may be called many times (i.e., for a PUT/POST operation with plenty of upload data) this allows the application to easily associate some request-specific state. If necessary, this state can be cleaned up in the global MHD_RequestCompletedCallback (which can be set with the MHD_OPTION_NOTIFY_COMPLETED). Initially, *con_cls will be NULL. |
Definition at line 2130 of file microhttpd.h.
typedef ssize_t(* MHD_ContentReaderCallback) (void *cls, uint64_t pos, char *buf, size_t max) |
Callback used by libmicrohttpd in order to obtain content. The callback is to copy at most max bytes of content into buf. The total number of bytes that has been placed into buf should be returned.
Note that returning zero will cause libmicrohttpd to try again. Thus, returning zero should only be used in conjunction with MHD_suspend_connection() to avoid busy waiting.
cls | extra argument to the callback |
pos | position in the datastream to access; note that if a struct MHD_Response object is re-used, it is possible for the same content reader to be queried multiple times for the same data; however, if a struct MHD_Response is not re-used, libmicrohttpd guarantees that "pos" will be the sum of all non-negative return values obtained from the content reader so far. |
buf | where to copy the data |
max | maximum number of bytes to copy to buf (size of buf) |
Definition at line 2338 of file microhttpd.h.
typedef enum MHD_Result(* MHD_PostDataIterator) (void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size) |
Iterator over key-value pairs where the value maybe made available in increments and/or may not be zero-terminated. Used for processing POST data.
cls | user-specified closure |
kind | type of the value, always MHD_POSTDATA_KIND when called from MHD |
key | 0-terminated key for the value |
filename | name of the uploaded file, NULL if not known |
content_type | mime-type of the data, NULL if not known |
transfer_encoding | encoding of the data, NULL if not known |
data | pointer to size bytes of data at the specified offset |
off | offset of data in the overall value |
size | number of bytes in data available |
Definition at line 2354 of file microhttpd.h.
typedef int(* MHD_PskServerCredentialsCallback) (void *cls, const struct MHD_Connection *connection, const char *username, void **psk, size_t *psk_size) |
Function called to lookup the pre shared key (psk) for a given HTTP connection based on the username.
cls | closure | |
connection | the HTTPS connection | |
username | the user name claimed by the other side | |
[out] | psk | to be set to the pre-shared-key; should be allocated with malloc(), will be freed by MHD |
[out] | psk_size | to be set to the number of bytes in psk |
Definition at line 1369 of file microhttpd.h.
typedef int MHD_socket |
Definition at line 196 of file microhttpd.h.
typedef void(* MHD_UpgradeHandler) (void *cls, struct MHD_Connection *connection, void *con_cls, const char *extra_in, size_t extra_in_size, MHD_socket sock, struct MHD_UpgradeResponseHandle *urh) |
Function called after a protocol "upgrade" response was sent successfully and the socket should now be controlled by some protocol other than HTTP.
Any data already received on the socket will be made available in extra_in. This can happen if the application sent extra data before MHD send the upgrade response. The application should treat data from extra_in as if it had read it from the socket.
Note that the application must not close() sock directly, but instead use MHD_upgrade_action() for special operations on sock.
Data forwarding to "upgraded" sock will be started as soon as this function return.
Except when in 'thread-per-connection' mode, implementations of this function should never block (as it will still be called from within the main event loop).
cls | closure, whatever was given to MHD_create_response_for_upgrade(). |
connection | original HTTP connection handle, giving the function a last chance to inspect the original HTTP request |
con_cls | last value left in con_cls of the MHD_AccessHandlerCallback |
extra_in | if we happened to have read bytes after the HTTP header already (because the client sent more than the HTTP header of the request before we sent the upgrade response), these are the extra bytes already read from sock by MHD. The application should treat these as if it had read them from sock. |
extra_in_size | number of bytes in extra_in |
sock | socket to use for bi-directional communication with the client. For HTTPS, this may not be a socket that is directly connected to the client and thus certain operations (TCP-specific setsockopt(), getsockopt(), etc.) may not work as expected (as the socket could be from a socketpair() or a TCP-loopback). The application is expected to perform read()/recv() and write()/send() calls on the socket. The application may also call shutdown(), but must not call close() directly. |
urh | argument for MHD_upgrade_action()s on this connection. Applications must eventually use this callback to (indirectly) perform the close() action on the sock. |
Definition at line 3332 of file microhttpd.h.
MHD connection options. Given to MHD_set_connection_option to set custom options for a particular connection.
Enumerator | |
---|---|
MHD_CONNECTION_OPTION_TIMEOUT | Set a custom timeout for the given connection. Specified as the number of seconds, given as an |
Definition at line 3793 of file microhttpd.h.
enum MHD_DaemonInfoType |
Values of this enum are used to specify what information about a daemon is desired.
Enumerator | |
---|---|
MHD_DAEMON_INFO_KEY_SIZE | No longer supported (will return NULL). |
MHD_DAEMON_INFO_MAC_KEY_SIZE | No longer supported (will return NULL). |
MHD_DAEMON_INFO_LISTEN_FD | Request the file descriptor for the listening socket. No extra arguments should be passed. |
MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY | Request the file descriptor for the external epoll. No extra arguments should be passed. Waiting on epoll FD must not block longer than value returned by MHD_get_timeout(). |
MHD_DAEMON_INFO_EPOLL_FD | |
MHD_DAEMON_INFO_CURRENT_CONNECTIONS | Request the number of current connections handled by the daemon. No extra arguments should be passed. Note: when using MHD in external polling mode, this type of request could be used only when MHD_run()/MHD_run_from_select is not working in other thread at the same time. |
MHD_DAEMON_INFO_FLAGS | Request the daemon flags. No extra arguments should be passed. Note: flags may differ from original 'flags' specified for daemon, especially if MHD_USE_AUTO was set. |
MHD_DAEMON_INFO_BIND_PORT | Request the port number of daemon's listen socket. No extra arguments should be passed. Note: if port '0' was specified for MHD_start_daemon(), returned value will be real port number. |
Definition at line 2066 of file microhttpd.h.
Which digest algorithm should MHD use for HTTP digest authentication?
Enumerator | |
---|---|
MHD_DIGEST_ALG_AUTO | MHD should pick (currently defaults to SHA-256). |
MHD_DIGEST_ALG_MD5 | Force use of MD5. |
MHD_DIGEST_ALG_SHA256 | Force use of SHA-256. |
Definition at line 3567 of file microhttpd.h.
Bitfield for the MHD_OPTION_SERVER_INSANITY specifying which santiy checks should be disabled.
Enumerator | |
---|---|
MHD_DSC_SANE | All sanity checks are enabled. |
Definition at line 1739 of file microhttpd.h.
enum MHD_FEATURE |
Types of information about MHD features, used by MHD_is_feature_supported().
Enumerator | |
---|---|
MHD_FEATURE_MESSAGES | Get whether messages are supported. If supported then in debug mode messages can be printed to stderr or to external logger. |
MHD_FEATURE_TLS | Get whether HTTPS is supported. If supported then flag MHD_USE_TLS and options MHD_OPTION_HTTPS_MEM_KEY, MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_TRUST, MHD_OPTION_HTTPS_MEM_DHPARAMS, MHD_OPTION_HTTPS_CRED_TYPE, MHD_OPTION_HTTPS_PRIORITIES can be used. |
MHD_FEATURE_SSL | |
MHD_FEATURE_HTTPS_CERT_CALLBACK | Get whether option MHD_OPTION_HTTPS_CERT_CALLBACK is supported. |
MHD_FEATURE_IPv6 | Get whether IPv6 is supported. If supported then flag MHD_USE_IPv6 can be used. |
MHD_FEATURE_IPv6_ONLY | Get whether IPv6 without IPv4 is supported. If not supported then IPv4 is always enabled in IPv6 sockets and flag MHD_USE_DUAL_STACK if always used when MHD_USE_IPv6 is specified. |
MHD_FEATURE_POLL | Get whether |
MHD_FEATURE_EPOLL | Get whether |
MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET | Get whether shutdown on listen socket to signal other threads is supported. If not supported flag MHD_USE_ITC is automatically forced. |
MHD_FEATURE_SOCKETPAIR | Get whether socketpair is used internally instead of pipe to signal other threads. |
MHD_FEATURE_TCP_FASTOPEN | Get whether TCP Fast Open is supported. If supported then flag MHD_USE_TCP_FASTOPEN and option MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used. |
MHD_FEATURE_BASIC_AUTH | Get whether HTTP Basic authorization is supported. If supported then functions MHD_basic_auth_get_username_password and MHD_queue_basic_auth_fail_response can be used. |
MHD_FEATURE_DIGEST_AUTH | Get whether HTTP Digest authorization is supported. If supported then options MHD_OPTION_DIGEST_AUTH_RANDOM, MHD_OPTION_NONCE_NC_SIZE and MHD_digest_auth_check() can be used. |
MHD_FEATURE_POSTPROCESSOR | Get whether postprocessor is supported. If supported then functions MHD_create_post_processor(), MHD_post_process() and MHD_destroy_post_processor() can be used. |
MHD_FEATURE_HTTPS_KEY_PASSWORD | Get whether password encrypted private key for HTTPS daemon is supported. If supported then option MHD_OPTION_HTTPS_KEY_PASSWORD can be used. |
MHD_FEATURE_LARGE_FILE | Get whether reading files beyond 2 GiB boundary is supported. If supported then MHD_create_response_from_fd(), MHD_create_response_from_fd64 MHD_create_response_from_fd_at_offset() and MHD_create_response_from_fd_at_offset64() can be used with sizes and offsets larger than 2 GiB. If not supported value of size+offset is limited to 2 GiB. |
MHD_FEATURE_THREAD_NAMES | Get whether MHD set names on generated threads. |
MHD_THREAD_NAMES | |
MHD_FEATURE_UPGRADE | Get whether HTTP "Upgrade" is supported. If supported then MHD_ALLOW_UPGRADE, MHD_upgrade_action() and MHD_create_response_for_upgrade() can be used. |
MHD_FEATURE_RESPONSES_SHARED_FD | Get whether it's safe to use same FD for multiple calls of MHD_create_response_from_fd() and whether it's safe to use single response generated by MHD_create_response_from_fd() with multiple connections at same time. If MHD_is_feature_supported() return MHD_NO for this feature then usage of responses with same file FD in multiple parallel threads may results in incorrect data sent to remote client. It's always safe to use same file FD in multiple responses if MHD is run in any single thread mode. |
MHD_FEATURE_AUTODETECT_BIND_PORT | Get whether MHD support automatic detection of bind port number.
|
MHD_FEATURE_AUTOSUPPRESS_SIGPIPE | Get whether MHD support SIGPIPE suppression. If SIGPIPE suppression is not supported, application must handle SIGPIPE signal by itself. |
MHD_FEATURE_SENDFILE | Get whether MHD use system's sendfile() function to send file-FD based responses over non-TLS connections.
|
MHD_FEATURE_THREADS | Get whether MHD supports threads. |
MHD_FEATURE_HTTPS_CERT_CALLBACK2 | Get whether option MHD_OPTION_HTTPS_CERT_CALLBACK2 is supported. |
Definition at line 3901 of file microhttpd.h.
enum MHD_FLAG |
Flags for the struct MHD_Daemon
.
Note that MHD will run automatically in background thread(s) only if MHD_USE_INTERNAL_POLLING_THREAD is used. Otherwise caller (application) must use MHD_run() or MHD_run_from_select() to have MHD processed network connections and data.
Starting the daemon may also fail if a particular option is not implemented or not supported on the target platform (i.e. no support for TLS, epoll or IPv6).
Enumerator | |
---|---|
MHD_NO_FLAG | No options selected. |
MHD_USE_ERROR_LOG | Print errors messages to custom error logger or to
|
MHD_USE_DEBUG | Run in debug mode. If this flag is used, the library should print error messages and warnings to |
MHD_USE_TLS | Run in HTTPS mode. The modern protocol is called TLS. |
MHD_USE_SSL | |
MHD_USE_THREAD_PER_CONNECTION | Run using one thread per connection. Must be used only with MHD_USE_INTERNAL_POLLING_THREAD. |
MHD_USE_INTERNAL_POLLING_THREAD | Run using an internal thread (or thread pool) for sockets sending and receiving and data processing. Without this flag MHD will not run automatically in background thread(s). If this flag is set, MHD_run() and MHD_run_from_select() couldn't be used. This flag is set explicitly by MHD_USE_POLL_INTERNAL_THREAD and by MHD_USE_EPOLL_INTERNAL_THREAD. |
MHD_USE_SELECT_INTERNALLY | |
MHD_USE_IPv6 | Run using the IPv6 protocol (otherwise, MHD will just support IPv4). If you want MHD to support IPv4 and IPv6 using a single socket, pass MHD_USE_DUAL_STACK, otherwise, if you only pass this option, MHD will try to bind to IPv6-only (resulting in no IPv4 support). |
MHD_USE_PEDANTIC_CHECKS | Be pedantic about the protocol (as opposed to as tolerant as possible). Specifically, at the moment, this flag causes MHD to reject HTTP 1.1 connections without a "Host" header. This is required by the standard, but of course in violation of the "be as liberal as possible in what you accept" norm. It is recommended to turn this ON if you are testing clients against MHD, and OFF in production. |
MHD_USE_POLL | Use |
MHD_USE_POLL_INTERNAL_THREAD | Run using an internal thread (or thread pool) doing |
MHD_USE_POLL_INTERNALLY | |
MHD_USE_SUPPRESS_DATE_NO_CLOCK | Suppress (automatically) adding the 'Date:' header to HTTP responses. This option should ONLY be used on systems that do not have a clock and that DO provide other mechanisms for cache control. See also RFC 2616, section 14.18 (exception 3). |
MHD_SUPPRESS_DATE_NO_CLOCK | |
MHD_USE_NO_LISTEN_SOCKET | Run without a listen socket. This option only makes sense if MHD_add_connection is to be used exclusively to connect HTTP clients to the HTTP server. This option is incompatible with using a thread pool; if it is used, MHD_OPTION_THREAD_POOL_SIZE is ignored. |
MHD_USE_EPOLL | Use
|
MHD_USE_EPOLL_LINUX_ONLY | |
MHD_USE_EPOLL_INTERNAL_THREAD | Run using an internal thread (or thread pool) doing |
MHD_USE_EPOLL_INTERNALLY | |
MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY | |
MHD_USE_ITC | Use inter-thread communication channel. MHD_USE_ITC can be used with MHD_USE_INTERNAL_POLLING_THREAD and is ignored with any "external" mode. It's required for use of MHD_quiesce_daemon or MHD_add_connection. This option is enforced by MHD_ALLOW_SUSPEND_RESUME or MHD_USE_NO_LISTEN_SOCKET. MHD_USE_ITC is always used automatically on platforms where select()/poll()/other ignore shutdown of listen socket. |
MHD_USE_PIPE_FOR_SHUTDOWN | |
MHD_USE_DUAL_STACK | Use a single socket for IPv4 and IPv6. |
MHD_USE_TURBO | Enable |
MHD_USE_EPOLL_TURBO | |
MHD_ALLOW_SUSPEND_RESUME | Enable suspend/resume functions, which also implies setting up ITC to signal resume. |
MHD_USE_SUSPEND_RESUME | |
MHD_USE_TCP_FASTOPEN | Enable TCP_FASTOPEN option. This option is only available on Linux with a kernel >= 3.6. On other systems, using this option cases MHD_start_daemon to fail. |
MHD_ALLOW_UPGRADE | You need to set this option if you want to use HTTP "Upgrade". "Upgrade" may require usage of additional internal resources, which we do not want to use unless necessary. |
MHD_USE_AUTO | Automatically use best available polling function. Choice of polling function is also depend on other daemon options. If MHD_USE_INTERNAL_POLLING_THREAD is specified then epoll, poll() or select() will be used (listed in decreasing preference order, first function available on system will be used). If MHD_USE_THREAD_PER_CONNECTION is specified then poll() or select() will be used. If those flags are not specified then epoll or select() will be used (as the only suitable for MHD_get_fdset()) |
MHD_USE_AUTO_INTERNAL_THREAD | Run using an internal thread (or thread pool) with best available on system polling function. This is combination of MHD_USE_AUTO and MHD_USE_INTERNAL_POLLING_THREAD flags. |
MHD_USE_POST_HANDSHAKE_AUTH_SUPPORT | Flag set to enable post-handshake client authentication (only useful in combination with MHD_USE_TLS). |
MHD_USE_INSECURE_TLS_EARLY_DATA | Flag set to enable TLS 1.3 early data. This has security implications, be VERY careful when using this. |
Definition at line 1052 of file microhttpd.h.
enum MHD_OPTION |
MHD options.
Passed in the varargs portion of MHD_start_daemon.
Enumerator | |
---|---|
MHD_OPTION_END | No more options / last option. This is used to terminate the VARARGs list. |
MHD_OPTION_CONNECTION_MEMORY_LIMIT | Maximum memory size per connection (followed by a |
MHD_OPTION_CONNECTION_LIMIT | Maximum number of concurrent connections to accept (followed by an |
MHD_OPTION_CONNECTION_TIMEOUT | After how many seconds of inactivity should a connection automatically be timed out? (followed by an |
MHD_OPTION_NOTIFY_COMPLETED | Register a function that should be called whenever a request has been completed (this can be used for application-specific clean up). Requests that have never been presented to the application (via MHD_AccessHandlerCallback) will not result in notifications. This option should be followed by TWO pointers. First a pointer to a function of type MHD_RequestCompletedCallback and second a pointer to a closure to pass to the request completed callback. The second pointer maybe NULL. |
MHD_OPTION_PER_IP_CONNECTION_LIMIT | Limit on the number of (concurrent) connections made to the server from the same IP address. Can be used to prevent one IP from taking over all of the allowed connections. If the same IP tries to establish more than the specified number of connections, they will be immediately rejected. The option should be followed by an |
MHD_OPTION_SOCK_ADDR | Bind daemon to the supplied |
MHD_OPTION_URI_LOG_CALLBACK | Specify a function that should be called before parsing the URI from the client. The specified callback function can be used for processing the URI (including the options) before it is parsed. The URI after parsing will no longer contain the options, which maybe inconvenient for logging. This option should be followed by two arguments, the first one must be of the form void * my_logger(void *cls, const char *uri, struct MHD_Connection *con) where the return value will be passed as ( Note that during the time of this call, most of the connection's state is not initialized (as we have not yet parsed the headers). However, information about the connecting client (IP, socket) is available. The specified function is called only once per request, therefore some programmers may use it to instantiate their own request objects, freeing them in the notifier MHD_OPTION_NOTIFY_COMPLETED. |
MHD_OPTION_HTTPS_MEM_KEY | Memory pointer for the private key (key.pem) to be used by the HTTPS daemon. This option should be followed by a |
MHD_OPTION_HTTPS_MEM_CERT | Memory pointer for the certificate (cert.pem) to be used by the HTTPS daemon. This option should be followed by a |
MHD_OPTION_HTTPS_CRED_TYPE | Daemon credentials type. Followed by an argument of type |
MHD_OPTION_HTTPS_PRIORITIES | Memory pointer to a |
MHD_OPTION_LISTEN_SOCKET | Pass a listen socket for MHD to use (systemd-style). If this option is used, MHD will not open its own listen socket(s). The argument passed must be of type |
MHD_OPTION_EXTERNAL_LOGGER | Use the given function for logging error messages. This option must be followed by two arguments; the first must be a pointer to a function of type MHD_LogCallback and the second a pointer Note that MHD will not generate any log messages if it was compiled without the "--enable-messages" flag being set. |
MHD_OPTION_THREAD_POOL_SIZE | Number ( |
MHD_OPTION_ARRAY | Additional options given in an array of struct MHD_OptionItem ops[] = { { MHD_OPTION_CONNECTION_LIMIT, 100, NULL }, { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL }, { MHD_OPTION_END, 0, NULL } }; d = MHD_start_daemon (0, 8080, NULL, NULL, dh, NULL, MHD_OPTION_ARRAY, ops, MHD_OPTION_END); For options that expect a single pointer argument, the second member of the |
MHD_OPTION_UNESCAPE_CALLBACK | Specify a function that should be called for unescaping escape sequences in URIs and URI arguments. Note that this function will NOT be used by the size_t my_unescaper(void *cls, struct MHD_Connection *c, char *s) where the return value must be the length of the value left in "s" (without the 0-terminator) and "s" should be updated. Note that the unescape function must not lengthen "s" (the result must be shorter than the input and must still be 0-terminated). However, it may also include binary zeros before the 0-termination. "cls" will be set to the second argument following MHD_OPTION_UNESCAPE_CALLBACK. |
MHD_OPTION_DIGEST_AUTH_RANDOM | Memory pointer for the random values to be used by the Digest Auth module. This option should be followed by two arguments. First an integer of type |
MHD_OPTION_NONCE_NC_SIZE | Size of the internal array holding the map of the nonce and the nonce counter. This option should be followed by an |
MHD_OPTION_THREAD_STACK_SIZE | Desired size of the stack for threads created by MHD. Followed by an argument of type |
MHD_OPTION_HTTPS_MEM_TRUST | Memory pointer for the certificate (ca.pem) to be used by the HTTPS daemon for client authentication. This option should be followed by a |
MHD_OPTION_CONNECTION_MEMORY_INCREMENT | Increment to use for growing the read buffer (followed by a |
MHD_OPTION_HTTPS_CERT_CALLBACK | Use a callback to determine which X.509 certificate should be used for a given HTTPS connection. This option should be followed by a argument of type |
MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE | When using MHD_USE_TCP_FASTOPEN, this option changes the default TCP fastopen queue length of 50. Note that having a larger queue size can cause resource exhaustion attack as the TCP stack has to now allocate resources for the SYN packet along with its DATA. This option should be followed by an |
MHD_OPTION_HTTPS_MEM_DHPARAMS | Memory pointer for the Diffie-Hellman parameters (dh.pem) to be used by the HTTPS daemon for key exchange. This option must be followed by a |
MHD_OPTION_LISTENING_ADDRESS_REUSE | If present and set to true, allow reusing address:port socket (by using SO_REUSEPORT on most platform, or platform-specific ways). If present and set to false, disallow reusing address:port socket (does nothing on most platform, but uses SO_EXCLUSIVEADDRUSE on Windows). This option must be followed by a |
MHD_OPTION_HTTPS_KEY_PASSWORD | Memory pointer for a password that decrypts the private key (key.pem) to be used by the HTTPS daemon. This option should be followed by a
|
MHD_OPTION_NOTIFY_CONNECTION | Register a function that should be called whenever a connection is started or closed. This option should be followed by TWO pointers. First a pointer to a function of type MHD_NotifyConnectionCallback and second a pointer to a closure to pass to the request completed callback. The second pointer maybe NULL. |
MHD_OPTION_LISTEN_BACKLOG_SIZE | Allow to change maximum length of the queue of pending connections on listen socket. If not present than default platform-specific SOMAXCONN value is used. This option should be followed by an |
MHD_OPTION_STRICT_FOR_CLIENT | If set to 1 - be strict about the protocol. Use -1 to be as tolerant as possible. Specifically, at the moment, at 1 this flag causes MHD to reject HTTP 1.1 connections without a "Host" header, and to disallow spaces in the URL or (at -1) in HTTP header key strings. These are required by some versions of the standard, but of course in violation of the "be as liberal as possible in what you
accept" norm. It is recommended to set this to 1 if you are testing clients against MHD, and 0 in production. This option should be followed by an |
MHD_OPTION_GNUTLS_PSK_CRED_HANDLER | This should be a pointer to callback of type gnutls_psk_server_credentials_function that will be given to gnutls_psk_set_server_credentials_function. It is used to retrieve the shared key for a given username. |
MHD_OPTION_HTTPS_CERT_CALLBACK2 | Use a callback to determine which X.509 certificate should be used for a given HTTPS connection. This option should be followed by a argument of type |
MHD_OPTION_SERVER_INSANITY | Allows the application to disable certain sanity precautions in MHD. With these, the client can break the HTTP protocol, so this should never be used in production. The options are, however, useful for testing HTTP clients against "broken" server implementations. This argument must be followed by an "unsigned int", corresponding to an |
Definition at line 1381 of file microhttpd.h.
enum MHD_ResponseFlags |
Flags for special handling of responses.
Enumerator | |
---|---|
MHD_RF_NONE | Default: no special flags. |
MHD_RF_HTTP_VERSION_1_0_ONLY | Only respond in conservative HTTP 1.0-mode. In particular, do not (automatically) sent "Connection" headers and always close the connection after generating the response. By default, MHD will respond using the same HTTP version which was set in the request. You can also set the MHD_RF_HTTP_VERSION_1_0_RESPONSE flag to force version 1.0 in the response. |
MHD_RF_HTTP_VERSION_1_0_RESPONSE | Only respond in HTTP 1.0-mode. Contrary to the MHD_RF_HTTP_VERSION_1_0_ONLY flag, the response's HTTP version will always be set to 1.0 and "Connection" headers are still supported. |
MHD_RF_INSANITY_HEADER_CONTENT_LENGTH | Disable sanity check preventing clients from manually setting the HTTP content length option. |
Definition at line 2951 of file microhttpd.h.
enum MHD_ResponseOptions |
MHD options (for future extensions).
Enumerator | |
---|---|
MHD_RO_END | End of the list of options. |
Definition at line 2989 of file microhttpd.h.
enum MHD_Result |
Operational results from MHD calls.
Enumerator | |
---|---|
MHD_NO | MHD result code for "NO". |
MHD_YES | MHD result code for "YES". |
Definition at line 141 of file microhttpd.h.
enum MHD_UpgradeAction |
Enumeration for actions MHD should perform on the underlying socket of the upgrade. This API is not finalized, and in particular the final set of actions is yet to be decided. This is just an idea for what we might want.
Definition at line 3236 of file microhttpd.h.
enum MHD_ValueKind |
The enum MHD_ValueKind
specifies the source of the key-value pairs in the HTTP protocol.
Enumerator | |
---|---|
MHD_RESPONSE_HEADER_KIND | Response header |
MHD_RESPONSE_HEADER_KIND | Response header |
MHD_HEADER_KIND | HTTP header (request/response). |
MHD_COOKIE_KIND | Cookies. Note that the original HTTP header containing the cookie(s) will still be available and intact. |
MHD_POSTDATA_KIND | POST data. This is available only if a content encoding supported by MHD is used (currently only URL encoding), and only if the posted content fits within the available memory pool. Note that in that case, the upload data given to the MHD_AccessHandlerCallback will be empty (since it has already been processed). |
MHD_GET_ARGUMENT_KIND | GET (URI) arguments. |
MHD_FOOTER_KIND | HTTP footer (only for HTTP 1.1 chunked encodings). |
Definition at line 1780 of file microhttpd.h.
_MHD_EXTERN struct MHD_Response* MHD_create_response_for_upgrade | ( | MHD_UpgradeHandler | upgrade_handler, |
void * | upgrade_handler_cls | ||
) |
Create a response object that can be used for 101 UPGRADE responses, for example to implement WebSockets. After sending the response, control over the data stream is given to the callback (which can then, for example, start some bi-directional communication). If the response is queued for multiple connections, the callback will be called for each connection. The callback will ONLY be called after the response header was successfully passed to the OS; if there are communication errors before, the usual MHD connection error handling code will be performed.
Setting the correct HTTP code (i.e. MHD_HTTP_SWITCHING_PROTOCOLS) and setting correct HTTP headers for the upgrade must be done manually (this way, it is possible to implement most existing WebSocket versions using this API; in fact, this API might be useful for any protocol switch, not just WebSockets). Note that draft-ietf-hybi-thewebsocketprotocol-00 cannot be implemented this way as the header "HTTP/1.1 101 WebSocket Protocol Handshake" cannot be generated; instead, MHD will always produce "HTTP/1.1 101 Switching Protocols" (if the response code 101 is used).
As usual, the response object can be extended with header information and then be used any number of times (as long as the header information is not connection-specific).
upgrade_handler | function to call with the "upgraded" socket |
upgrade_handler_cls | closure for upgrade_handler |
_MHD_EXTERN void MHD_free | ( | void * | ptr | ) |
Free the memory given by ptr. Calls "free(ptr)". This function should be used to free the username returned by MHD_digest_auth_get_username().
ptr | pointer to free. |
Definition at line 89 of file memorypool.c.
_MHD_EXTERN const char* MHD_get_reason_phrase_for | ( | unsigned int | code | ) |
Returns the string reason phrase for a response code.
If message string is not available for a status code, "Unknown" string will be returned.
Definition at line 177 of file reason_phrase.c.
References reasons.
Referenced by build_header_response().
_MHD_EXTERN size_t MHD_http_unescape | ( | char * | val | ) |
Process escape sequences ('HH') Updates val in place; the result should be UTF-8 encoded and cannot be larger than the input. The result must also still be 0-terminated.
val | value to unescape (modified in the process) |
strlen(val)
may be shorter afterwards due to elimination of escape sequences)Process escape sequences ('HH') Updates val in place; the result should be UTF-8 encoded and cannot be larger than the input. The result must also still be 0-terminated.
val | value to unescape (modified in the process) |
Definition at line 142 of file internal.c.
References MHD_strx_to_uint32_n_().
Referenced by post_process_urlencoded(), process_value(), and unescape_wrapper().
_MHD_EXTERN void MHD_resume_connection | ( | struct MHD_Connection * | connection | ) |
Resume handling of network data for suspended connection. It is safe to resume a suspended connection at any time. Calling this function on a connection that was not previously suspended will result in undefined behavior.
If you are using this function in `‘external’' select mode, you must make sure to run MHD_run() and MHD_get_timeout() afterwards (before again calling MHD_get_fdset()), as otherwise the change may not be reflected in the set returned by MHD_get_fdset() and you may end up with a connection that is stuck until the next network activity.
connection | the connection to resume |
Resume handling of network data for suspended connection. It is safe to resume a suspended connection at any time. Calling this function on a connection that was not previously suspended will result in undefined behavior.
connection | the connection to resume |
Definition at line 3134 of file daemon.c.
Referenced by close_all_connections().
_MHD_EXTERN enum MHD_Result MHD_set_response_options | ( | struct MHD_Response * | response, |
enum MHD_ResponseFlags | flags, | ||
... | |||
) |
Set special flags and options for a response.
response | the response to modify |
flags | to set for the response |
... | MHD_RO_END terminated list of options |
Definition at line 375 of file response.c.
_MHD_EXTERN void MHD_suspend_connection | ( | struct MHD_Connection * | connection | ) |
Suspend handling of network data for a given connection. This can be used to dequeue a connection from MHD's event loop for a while.
If you use this API in conjunction with a internal select or a thread pool, you must set the option MHD_USE_ITC to ensure that a resumed connection is immediately processed by MHD.
Suspended connections continue to count against the total number of connections allowed (per daemon, as well as per IP, if such limits are set). Suspended connections will NOT time out; timeouts will restart when the connection handling is resumed. While a connection is suspended, MHD will not detect disconnects by the client.
The only safe time to suspend a connection is from the MHD_AccessHandlerCallback.
Finally, it is an API violation to call MHD_stop_daemon while having suspended connections (this will at least create memory and socket leaks or lead to undefined behavior). You must explicitly resume all connections before stopping the daemon.
connection | the connection to suspend |
Suspend handling of network data for a given connection. This can be used to dequeue a connection from MHD's event loop (external select, internal select or thread pool; not applicable to thread-per-connection!) for a while.
If you use this API in conjunction with a internal select or a thread pool, you must set the option MHD_USE_ITC to ensure that a resumed connection is immediately processed by MHD.
Suspended connections continue to count against the total number of connections allowed (per daemon, as well as per IP, if such limits are set). Suspended connections will NOT time out; timeouts will restart when the connection handling is resumed. While a connection is suspended, MHD will not detect disconnects by the client.
The only safe time to suspend a connection is from the MHD_AccessHandlerCallback.
Finally, it is an API violation to call MHD_stop_daemon while having suspended connections (this will at least create memory and socket leaks or lead to undefined behavior). You must explicitly resume all connections before stopping the daemon.
connection | the connection to suspend |
Definition at line 3097 of file daemon.c.
References _, MHD_Connection::daemon, internal_suspend_connection_(), mhd_assert, MHD_PANIC, MHD_TEST_ALLOW_SUSPEND_RESUME, MHD_USE_INTERNAL_POLLING_THREAD, MHD_USE_THREAD_PER_CONNECTION, NULL, MHD_Daemon::options, and MHD_Daemon::pid.
_MHD_EXTERN enum MHD_Result MHD_upgrade_action | ( | struct MHD_UpgradeResponseHandle * | urh, |
enum MHD_UpgradeAction | action, | ||
... | |||
) |
This connection-specific callback is provided by MHD to applications (unusual) during the MHD_UpgradeHandler. It allows applications to perform 'special' actions on the underlying socket from the upgrade.
urh | the handle identifying the connection to perform the upgrade action on. |
action | which action should be performed |
... | arguments to the action (depends on the action) |
void* data |
Definition at line 3053 of file microhttpd.h.
Referenced by build_header_response(), check_nonce_nc(), MHD_create_response_from_data(), MHD_SHA256_update(), sha256_transform(), and thread_main_handle_connection().
int fd |
Definition at line 3195 of file microhttpd.h.
Referenced by MHD_add_to_fd_set_(), MHD_create_response_from_fd(), MHD_create_response_from_fd64(), MHD_create_response_from_fd_at_offset(), MHD_create_response_from_fd_at_offset64(), MHD_create_response_from_pipe(), MHD_daemon_destroy(), MHD_response_from_fd(), MHD_socket_create_listen_(), MHD_stop_daemon(), and stop_workers().
void int int must_copy |
Definition at line 3055 of file microhttpd.h.
Referenced by MHD_create_response_from_data().
void int must_free |
Definition at line 3054 of file microhttpd.h.
Referenced by MHD_create_response_from_data().
int off_t offset |
Definition at line 3196 of file microhttpd.h.
Referenced by MHD_create_response_from_fd_at_offset(), MHD_create_response_from_fd_at_offset64(), and MHD_response_from_fd().