A minimal-HTTP server library. More...
#include "platform.h"
#include "internal.h"
#include "response.h"
#include "connection.h"
#include "memorypool.h"
#include <limits.h>
#include "tsearch.h"
Go to the source code of this file.
Defines | |
#define | HAVE_ACCEPT4 0 |
#define | MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE - 4 |
#define | MHD_POOL_SIZE_DEFAULT (32 * 1024) |
#define | DEBUG_CLOSE MHD_NO |
#define | DEBUG_CONNECT MHD_NO |
#define | MSG_NOSIGNAL 0 |
#define | SOCK_CLOEXEC 0 |
#define | EPOLL_CLOEXEC 0 |
#define | ATTRIBUTE_CONSTRUCTOR |
#define | ATTRIBUTE_DESTRUCTOR |
Typedefs | |
typedef void *(* | ThreadStartRoutine )(void *cls) |
typedef void(* | VfprintfFunctionPointerType )(void *cls, const char *format, va_list va) |
Functions | |
static void | mhd_panic_std (void *cls, const char *file, unsigned int line, const char *reason) |
static struct MHD_Daemon * | MHD_get_master (struct MHD_Daemon *daemon) |
static void | MHD_ip_count_lock (struct MHD_Daemon *daemon) |
static void | MHD_ip_count_unlock (struct MHD_Daemon *daemon) |
static int | MHD_ip_addr_compare (const void *a1, const void *a2) |
static int | MHD_ip_addr_to_key (const struct sockaddr *addr, socklen_t addrlen, struct MHD_IPCount *key) |
static int | MHD_ip_limit_add (struct MHD_Daemon *daemon, const struct sockaddr *addr, socklen_t addrlen) |
static void | MHD_ip_limit_del (struct MHD_Daemon *daemon, const struct sockaddr *addr, socklen_t addrlen) |
static void | add_to_fd_set (int fd, fd_set *set, int *max_fd) |
int | MHD_get_fdset (struct MHD_Daemon *daemon, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *except_fd_set, int *max_fd) |
static void * | MHD_handle_connection (void *data) |
static ssize_t | recv_param_adapter (struct MHD_Connection *connection, void *other, size_t i) |
static ssize_t | send_param_adapter (struct MHD_Connection *connection, const void *other, size_t i) |
static int | create_thread (pthread_t *thread, const struct MHD_Daemon *daemon, ThreadStartRoutine start_routine, void *arg) |
static int | internal_add_connection (struct MHD_Daemon *daemon, int client_socket, const struct sockaddr *addr, socklen_t addrlen, int external_add) |
void | MHD_suspend_connection (struct MHD_Connection *connection) |
void | MHD_resume_connection (struct MHD_Connection *connection) |
static void | resume_suspended_connections (struct MHD_Daemon *daemon) |
static void | make_nonblocking_noninheritable (struct MHD_Daemon *daemon, int sock) |
int | MHD_add_connection (struct MHD_Daemon *daemon, int client_socket, const struct sockaddr *addr, socklen_t addrlen) |
static int | MHD_accept_connection (struct MHD_Daemon *daemon) |
static void | MHD_cleanup_connections (struct MHD_Daemon *daemon) |
int | MHD_get_timeout (struct MHD_Daemon *daemon, MHD_UNSIGNED_LONG_LONG *timeout) |
int | 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) |
static int | MHD_select (struct MHD_Daemon *daemon, int may_block) |
static int | MHD_poll (struct MHD_Daemon *daemon, int may_block) |
int | MHD_run (struct MHD_Daemon *daemon) |
static void * | MHD_select_thread (void *cls) |
struct MHD_Daemon * | MHD_start_daemon (unsigned int flags, uint16_t port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls,...) |
int | MHD_quiesce_daemon (struct MHD_Daemon *daemon) |
static int | parse_options_va (struct MHD_Daemon *daemon, const struct sockaddr **servaddr, va_list ap) |
static int | parse_options (struct MHD_Daemon *daemon, const struct sockaddr **servaddr,...) |
static int | create_socket (struct MHD_Daemon *daemon, int domain, int type, int protocol) |
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) |
static void | close_connection (struct MHD_Connection *pos) |
static void | close_all_connections (struct MHD_Daemon *daemon) |
void | MHD_stop_daemon (struct MHD_Daemon *daemon) |
union MHD_DaemonInfo * | MHD_get_daemon_info (struct MHD_Daemon *daemon, enum MHD_DaemonInfoType info_type,...) |
void | MHD_set_panic_func (MHD_PanicCallback cb, void *cls) |
const char * | MHD_get_version (void) |
void ATTRIBUTE_CONSTRUCTOR | MHD_init () |
void ATTRIBUTE_DESTRUCTOR | MHD_fini () |
Variables | |
MHD_PanicCallback | mhd_panic |
void * | mhd_panic_cls |
A minimal-HTTP server library.
Definition in file daemon.c.
#define DEBUG_CLOSE MHD_NO |
#define DEBUG_CONNECT MHD_NO |
#define HAVE_ACCEPT4 0 |
Definition at line 54 of file daemon.c.
Referenced by MHD_accept_connection().
#define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE - 4 |
Default connection limit.
Definition at line 61 of file daemon.c.
Referenced by MHD_start_daemon_va().
#define MHD_POOL_SIZE_DEFAULT (32 * 1024) |
Default memory allowed per connection.
Definition at line 69 of file daemon.c.
Referenced by MHD_start_daemon_va().
#define MSG_NOSIGNAL 0 |
Definition at line 85 of file daemon.c.
Referenced by recv_param_adapter(), and send_param_adapter().
#define SOCK_CLOEXEC 0 |
Definition at line 90 of file daemon.c.
Referenced by create_socket(), and MHD_accept_connection().
typedef void*(* ThreadStartRoutine)(void *cls) |
typedef void(* VfprintfFunctionPointerType)(void *cls, const char *format, va_list va) |
static void add_to_fd_set | ( | int | fd, | |
fd_set * | set, | |||
int * | max_fd | |||
) | [static] |
Add fd to the set. If fd is greater than max_fd, set max_fd to fd.
fd | file descriptor to add to the set | |
set | set to modify | |
max_fd | maximum value to potentially update |
Definition at line 557 of file daemon.c.
References NULL.
Referenced by MHD_get_fdset(), and MHD_handle_connection().
static void close_all_connections | ( | struct MHD_Daemon * | daemon | ) | [static] |
Close all connections for the daemon; must only be called after all of the threads have been joined and there is no more concurrent activity on the connection lists.
daemon | daemon to close down |
Definition at line 3859 of file daemon.c.
References MHD_Daemon::cleanup_connection_mutex, close_connection(), MHD_Daemon::connections_head, MHD_cleanup_connections(), MHD_PANIC, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Connection::nextX, NULL, MHD_Daemon::options, MHD_Connection::pid, MHD_Connection::read_closed, MHD_Connection::socket_fd, and MHD_Connection::thread_joined.
Referenced by MHD_stop_daemon().
static void close_connection | ( | struct MHD_Connection * | pos | ) | [static] |
Close the given connection, remove it from all of its DLLs and move it into the cleanup queue.
pos | connection to move to cleanup |
Definition at line 3827 of file daemon.c.
References MHD_Daemon::cleanup_head, MHD_Daemon::cleanup_tail, MHD_Daemon::connection_timeout, MHD_Connection::connection_timeout, MHD_Daemon::connections_head, MHD_Daemon::connections_tail, MHD_Connection::daemon, DLL_insert, DLL_remove, MHD_Connection::event_loop_info, MHD_Daemon::manual_timeout_head, MHD_Daemon::manual_timeout_tail, MHD_connection_close(), MHD_EVENT_LOOP_INFO_CLEANUP, MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, and XDLL_remove.
Referenced by close_all_connections().
static int create_socket | ( | struct MHD_Daemon * | daemon, | |
int | domain, | |||
int | type, | |||
int | protocol | |||
) | [static] |
Create a listen socket, if possible with SOCK_CLOEXEC flag set.
daemon | daemon for which we create the socket | |
domain | socket domain (i.e. PF_INET) | |
type | socket type (usually SOCK_STREAM) | |
protocol | desired protocol, 0 for default |
Definition at line 3074 of file daemon.c.
References make_nonblocking_noninheritable(), and SOCK_CLOEXEC.
Referenced by MHD_start_daemon_va().
static int create_thread | ( | pthread_t * | thread, | |
const struct MHD_Daemon * | daemon, | |||
ThreadStartRoutine | start_routine, | |||
void * | arg | |||
) | [static] |
Create a thread and set the attributes according to our options.
thread | handle to initialize | |
daemon | daemon with options | |
start_routine | main function of thread | |
arg | argument for start_routine |
Definition at line 955 of file daemon.c.
References NULL, and MHD_Daemon::thread_stack_size.
Referenced by internal_add_connection(), and MHD_start_daemon_va().
static int internal_add_connection | ( | struct MHD_Daemon * | daemon, | |
int | client_socket, | |||
const struct sockaddr * | addr, | |||
socklen_t | addrlen, | |||
int | external_add | |||
) | [static] |
Add another client connection to the set of connections managed by MHD. This API is usually not needed (since MHD will accept inbound connections on the server socket). Use this API in special cases, for example if your HTTP server is behind NAT and needs to connect out to the HTTP client.
The given client socket will be managed (and closed!) by MHD after this call and must no longer be used directly by the application afterwards.
Per-IP connection limits are ignored when using this API.
daemon | daemon that manages the connection | |
client_socket | socket to manage (MHD will expect to receive an HTTP request from this socket next). | |
addr | IP address of the client | |
addrlen | number of bytes in addr | |
external_add | perform additional operations needed due to the application calling us directly |
Definition at line 1026 of file daemon.c.
References MHD_Connection::addr, MHD_Connection::addr_len, MHD_Daemon::apc, MHD_Daemon::apc_cls, cleanup(), MHD_Daemon::cleanup_connection_mutex, MHD_Daemon::connection_timeout, MHD_Connection::connection_timeout, MHD_Daemon::connections_head, MHD_Daemon::connections_tail, create_thread(), MHD_Connection::daemon, DLL_insert, DLL_remove, EDLL_insert, MHD_Connection::last_activity, MHD_Daemon::max_connections, MHD_EPOLL_STATE_IN_EPOLL_SET, MHD_EPOLL_STATE_IN_EREADY_EDLL, MHD_EPOLL_STATE_READ_READY, MHD_EPOLL_STATE_WRITE_READY, MHD_handle_connection(), MHD_ip_limit_add(), MHD_ip_limit_del(), MHD_monotonic_time(), MHD_NO, MHD_PANIC, MHD_pool_create(), MHD_pool_destroy(), MHD_set_http_callbacks_(), MHD_set_https_callbacks(), MHD_TLS_CONNECTION_INIT, MHD_USE_EPOLL_LINUX_ONLY, MHD_USE_EPOLL_TURBO, MHD_USE_POLL, MHD_USE_SSL, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, NULL, MHD_Daemon::options, MHD_Connection::pid, MHD_Connection::pool, MHD_Daemon::pool_size, MHD_Connection::recv_cls, recv_param_adapter(), MHD_Connection::send_cls, send_param_adapter(), MHD_Connection::socket_fd, MHD_Connection::state, MHD_Daemon::worker_pool, MHD_Daemon::worker_pool_size, MHD_Daemon::wpipe, XDLL_insert, and XDLL_remove.
Referenced by MHD_accept_connection(), and MHD_add_connection().
static void make_nonblocking_noninheritable | ( | struct MHD_Daemon * | daemon, | |
int | sock | |||
) | [static] |
Change socket options to be non-blocking, non-inheritable.
daemon | daemon context | |
sock | socket to manipulate |
Definition at line 1571 of file daemon.c.
References MHD_USE_SSL, and MHD_Daemon::options.
Referenced by create_socket(), MHD_accept_connection(), and MHD_add_connection().
static int MHD_accept_connection | ( | struct MHD_Daemon * | daemon | ) | [static] |
Accept an incoming connection and create the MHD_Connection object for it. This function also enforces policy by way of checking with the accept policy callback.
daemon | handle with the listen socket |
Definition at line 1689 of file daemon.c.
References HAVE_ACCEPT4, internal_add_connection(), make_nonblocking_noninheritable(), MHD_NO, MHD_PANIC, MHD_USE_SSL, MHD_YES, MHD_Daemon::options, SOCK_CLOEXEC, and MHD_Daemon::socket_fd.
Referenced by MHD_run_from_select().
static void MHD_cleanup_connections | ( | struct MHD_Daemon * | daemon | ) | [static] |
Free resources associated with all closed connections. (destroy responses, free buffers, etc.). All closed connections are kept in the "cleanup" doubly-linked list.
daemon | daemon to clean up |
Definition at line 1759 of file daemon.c.
References MHD_Connection::addr, MHD_Connection::addr_len, MHD_Daemon::cleanup_connection_mutex, MHD_Daemon::cleanup_head, MHD_Daemon::cleanup_tail, DLL_remove, EDLL_remove, MHD_Daemon::max_connections, MHD_destroy_response(), MHD_EPOLL_STATE_IN_EPOLL_SET, MHD_EPOLL_STATE_IN_EREADY_EDLL, MHD_ip_limit_del(), MHD_NO, MHD_PANIC, MHD_pool_destroy(), MHD_USE_EPOLL_LINUX_ONLY, MHD_USE_THREAD_PER_CONNECTION, NULL, MHD_Daemon::options, MHD_Connection::pid, MHD_Connection::pool, MHD_Connection::response, MHD_Connection::socket_fd, and MHD_Connection::thread_joined.
Referenced by close_all_connections(), MHD_run(), MHD_run_from_select(), and MHD_select_thread().
static struct MHD_Daemon* MHD_get_master | ( | struct MHD_Daemon * | daemon | ) | [static, read] |
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 140 of file daemon.c.
References MHD_Daemon::master, and NULL.
Referenced by MHD_ip_limit_add(), and MHD_ip_limit_del().
static void* MHD_handle_connection | ( | void * | data | ) | [static] |
Main function of the thread that handles an individual connection when MHD_USE_THREAD_PER_CONNECTION is set.
data | the 'struct MHD_Connection' this thread will handle |
Definition at line 661 of file daemon.c.
References add_to_fd_set(), MHD_Daemon::connection_timeout, MHD_Connection::daemon, MHD_Connection::event_loop_info, MHD_Connection::idle_handler, MHD_Connection::last_activity, MHD_connection_close(), MHD_CONNECTION_CLOSED, MHD_CONNECTION_IN_CLEANUP, MHD_destroy_response(), MHD_EVENT_LOOP_INFO_BLOCK, MHD_EVENT_LOOP_INFO_CLEANUP, MHD_EVENT_LOOP_INFO_READ, MHD_EVENT_LOOP_INFO_WRITE, MHD_monotonic_time(), MHD_NO, MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN, MHD_REQUEST_TERMINATED_WITH_ERROR, MHD_USE_POLL, MHD_YES, NULL, MHD_Daemon::options, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, MHD_Connection::read_handler, MHD_Connection::response, MHD_Daemon::shutdown, MHD_Connection::socket_fd, MHD_Connection::state, and MHD_Connection::write_handler.
Referenced by internal_add_connection().
void ATTRIBUTE_CONSTRUCTOR MHD_init | ( | ) |
Initialize do setup work.
Definition at line 4159 of file daemon.c.
References mhd_panic, mhd_panic_cls, mhd_panic_std(), and NULL.
static int MHD_ip_addr_compare | ( | const void * | a1, | |
const void * | a2 | |||
) | [static] |
Tree comparison function for IP addresses (supplied to tsearch() family). We compare everything in the struct up through the beginning of the 'count' field.
a1 | first address to compare | |
a2 | second address to compare |
Definition at line 222 of file daemon.c.
Referenced by MHD_ip_limit_add(), and MHD_ip_limit_del().
static int MHD_ip_addr_to_key | ( | const struct sockaddr * | addr, | |
socklen_t | addrlen, | |||
struct MHD_IPCount * | key | |||
) | [static] |
Parse address and initialize 'key' using the address.
addr | address to parse | |
addrlen | number of bytes in addr | |
key | where to store the parsed address |
Definition at line 237 of file daemon.c.
References MHD_NO, and MHD_YES.
Referenced by MHD_ip_limit_add(), and MHD_ip_limit_del().
static void MHD_ip_count_lock | ( | struct MHD_Daemon * | daemon | ) | [static] |
Lock shared structure for IP connection counts and connection DLLs.
daemon | handle to daemon where lock is |
Definition at line 188 of file daemon.c.
References MHD_PANIC, and MHD_Daemon::per_ip_connection_mutex.
Referenced by MHD_ip_limit_add(), and MHD_ip_limit_del().
static void MHD_ip_count_unlock | ( | struct MHD_Daemon * | daemon | ) | [static] |
Unlock shared structure for IP connection counts and connection DLLs.
daemon | handle to daemon where lock is |
Definition at line 203 of file daemon.c.
References MHD_PANIC, and MHD_Daemon::per_ip_connection_mutex.
Referenced by MHD_ip_limit_add(), and MHD_ip_limit_del().
static int MHD_ip_limit_add | ( | struct MHD_Daemon * | daemon, | |
const struct sockaddr * | addr, | |||
socklen_t | addrlen | |||
) | [static] |
Check if IP address is over its limit.
daemon | handle to daemon where connection counts are tracked | |
addr | address to add (or increment counter) | |
addrlen | number of bytes in addr |
Definition at line 278 of file daemon.c.
References MHD_get_master(), MHD_ip_addr_compare(), MHD_ip_addr_to_key(), MHD_ip_count_lock(), MHD_ip_count_unlock(), MHD_NO, MHD_YES, NULL, MHD_Daemon::per_ip_connection_count, and MHD_Daemon::per_ip_connection_limit.
Referenced by internal_add_connection().
static void MHD_ip_limit_del | ( | struct MHD_Daemon * | daemon, | |
const struct sockaddr * | addr, | |||
socklen_t | addrlen | |||
) | [static] |
Decrement connection count for IP address, removing from table count reaches 0.
daemon | handle to daemon where connection counts are tracked | |
addr | address to remove (or decrement counter) | |
addrlen | number of bytes in addr |
Definition at line 342 of file daemon.c.
References MHD_get_master(), MHD_ip_addr_compare(), MHD_ip_addr_to_key(), MHD_ip_count_lock(), MHD_ip_count_unlock(), MHD_NO, MHD_PANIC, NULL, MHD_Daemon::per_ip_connection_count, and MHD_Daemon::per_ip_connection_limit.
Referenced by internal_add_connection(), and MHD_cleanup_connections().
static void mhd_panic_std | ( | void * | cls, | |
const char * | file, | |||
unsigned int | line, | |||
const char * | reason | |||
) | [static] |
Default implementation of the panic function, prints an error message and aborts.
cls | unused | |
file | name of the file with the problem | |
line | line number with the problem | |
reason | error message with details |
Definition at line 108 of file daemon.c.
Referenced by MHD_init().
static int MHD_poll | ( | struct MHD_Daemon * | daemon, | |
int | may_block | |||
) | [static] |
Do poll()-based processing.
daemon | daemon to run poll()-loop for | |
may_block | MHD_YES if blocking, MHD_NO if non-blocking |
Definition at line 2333 of file daemon.c.
References MHD_NO, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::options, and MHD_Daemon::shutdown.
Referenced by MHD_run(), and MHD_select_thread().
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.
connection | the connection to resume |
Definition at line 1464 of file daemon.c.
References MHD_Daemon::cleanup_connection_mutex, MHD_Connection::daemon, MHD_PANIC, MHD_USE_SUSPEND_RESUME, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::options, MHD_Daemon::resuming, MHD_Connection::resuming, and MHD_Daemon::wpipe.
static int MHD_select | ( | struct MHD_Daemon * | daemon, | |
int | may_block | |||
) | [static] |
Main internal select() call. Will compute select sets, call select() and then MHD_run_from_select with the result.
daemon | daemon to run select() loop for | |
may_block | MHD_YES if blocking, MHD_NO if non-blocking |
Definition at line 2028 of file daemon.c.
References MHD_Daemon::max_connections, MHD_get_fdset(), MHD_get_timeout(), MHD_NO, MHD_run_from_select(), MHD_UNSIGNED_LONG_LONG, MHD_USE_SUSPEND_RESUME, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, NULL, MHD_Daemon::options, resume_suspended_connections(), MHD_Daemon::shutdown, MHD_Daemon::socket_fd, and MHD_Daemon::wpipe.
Referenced by MHD_run(), and MHD_select_thread().
static void* MHD_select_thread | ( | void * | cls | ) | [static] |
Thread that runs the select loop until the daemon is explicitly shut down.
cls | 'struct MHD_Deamon' to run select loop in a thread for |
Definition at line 2619 of file daemon.c.
References MHD_cleanup_connections(), MHD_poll(), MHD_select(), MHD_USE_EPOLL_LINUX_ONLY, MHD_USE_POLL, MHD_YES, NULL, MHD_Daemon::options, and MHD_Daemon::shutdown.
Referenced by MHD_start_daemon_va().
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 (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_PIPE_FOR_SHUTDOWN 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 1403 of file daemon.c.
References MHD_Daemon::cleanup_connection_mutex, MHD_Daemon::connection_timeout, MHD_Connection::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_EPOLL_STATE_IN_EPOLL_SET, MHD_EPOLL_STATE_IN_EREADY_EDLL, MHD_EPOLL_STATE_SUSPENDED, MHD_PANIC, MHD_USE_EPOLL_LINUX_ONLY, MHD_USE_SUSPEND_RESUME, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, NULL, MHD_Daemon::options, MHD_Connection::socket_fd, MHD_Connection::suspended, MHD_Daemon::suspended_connections_head, MHD_Daemon::suspended_connections_tail, and XDLL_remove.
static int parse_options | ( | struct MHD_Daemon * | daemon, | |
const struct sockaddr ** | servaddr, | |||
... | ||||
) | [static] |
Parse a list of options given as varargs.
daemon | the daemon to initialize | |
servaddr | where to store the server's listen address | |
... | the options |
Definition at line 2781 of file daemon.c.
References parse_options_va().
Referenced by parse_options_va().
static int parse_options_va | ( | struct MHD_Daemon * | daemon, | |
const struct sockaddr ** | servaddr, | |||
va_list | ap | |||
) | [static] |
Parse a list of options given as varargs.
daemon | the daemon to initialize | |
servaddr | where to store the server's listen address | |
ap | the options |
Definition at line 2804 of file daemon.c.
References MHD_Daemon::connection_timeout, MHD_Daemon::max_connections, MHD_NO, MHD_OPTION_ARRAY, MHD_OPTION_CONNECTION_LIMIT, MHD_OPTION_CONNECTION_MEMORY_INCREMENT, MHD_OPTION_CONNECTION_MEMORY_LIMIT, MHD_OPTION_CONNECTION_TIMEOUT, MHD_OPTION_DIGEST_AUTH_RANDOM, MHD_OPTION_END, MHD_OPTION_EXTERNAL_LOGGER, MHD_OPTION_HTTPS_CERT_CALLBACK, MHD_OPTION_HTTPS_CRED_TYPE, MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_KEY, MHD_OPTION_HTTPS_MEM_TRUST, MHD_OPTION_HTTPS_PRIORITIES, MHD_OPTION_LISTEN_SOCKET, MHD_OPTION_NONCE_NC_SIZE, MHD_OPTION_NOTIFY_COMPLETED, MHD_OPTION_PER_IP_CONNECTION_LIMIT, MHD_OPTION_SOCK_ADDR, MHD_OPTION_THREAD_POOL_SIZE, MHD_OPTION_THREAD_STACK_SIZE, MHD_OPTION_UNESCAPE_CALLBACK, MHD_OPTION_URI_LOG_CALLBACK, MHD_USE_SSL, MHD_YES, MHD_Daemon::notify_completed, MHD_Daemon::notify_completed_cls, NULL, MHD_OptionItem::option, MHD_Daemon::options, parse_options(), MHD_Daemon::per_ip_connection_limit, MHD_Daemon::pool_increment, MHD_Daemon::pool_size, MHD_OptionItem::ptr_value, MHD_Daemon::socket_fd, MHD_Daemon::thread_stack_size, MHD_Daemon::unescape_callback, MHD_Daemon::unescape_callback_cls, MHD_Daemon::uri_log_callback, MHD_Daemon::uri_log_callback_cls, MHD_OptionItem::value, and MHD_Daemon::worker_pool_size.
Referenced by MHD_start_daemon_va(), and parse_options().
static ssize_t recv_param_adapter | ( | struct MHD_Connection * | connection, | |
void * | other, | |||
size_t | i | |||
) | [static] |
Callback for receiving data from the socket.
connection | the MHD connection structure | |
other | where to write received data to | |
i | maximum size of other (in bytes) |
Definition at line 837 of file daemon.c.
References MHD_CONNECTION_CLOSED, MHD_EPOLL_STATE_READ_READY, MSG_NOSIGNAL, MHD_Connection::socket_fd, and MHD_Connection::state.
Referenced by internal_add_connection().
static void resume_suspended_connections | ( | struct MHD_Daemon * | daemon | ) | [static] |
Run through the suspended connections and move any that are no longer suspended back to the active state.
daemon | daemon context |
Definition at line 1496 of file daemon.c.
References MHD_Daemon::cleanup_connection_mutex, MHD_Daemon::connection_timeout, MHD_Connection::connection_timeout, MHD_Daemon::connections_head, MHD_Daemon::connections_tail, DLL_insert, DLL_remove, EDLL_insert, MHD_Daemon::manual_timeout_head, MHD_Daemon::manual_timeout_tail, MHD_EPOLL_STATE_IN_EPOLL_SET, MHD_EPOLL_STATE_IN_EREADY_EDLL, MHD_EPOLL_STATE_SUSPENDED, MHD_NO, MHD_PANIC, MHD_USE_EPOLL_LINUX_ONLY, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Connection::next, MHD_Daemon::normal_timeout_head, MHD_Daemon::normal_timeout_tail, NULL, MHD_Daemon::options, MHD_Connection::resuming, MHD_Daemon::resuming, MHD_Connection::socket_fd, MHD_Connection::suspended, MHD_Daemon::suspended_connections_head, MHD_Daemon::suspended_connections_tail, and XDLL_insert.
Referenced by MHD_select().
static ssize_t send_param_adapter | ( | struct MHD_Connection * | connection, | |
const void * | other, | |||
size_t | i | |||
) | [static] |
Callback for writing data to the socket.
connection | the MHD connection structure | |
other | data to write | |
i | number of bytes to write |
Definition at line 870 of file daemon.c.
References MHD_Connection::daemon, MHD_Response::fd, MHD_Response::fd_off, MHD_CONNECTION_CLOSED, MHD_EPOLL_STATE_WRITE_READY, MHD_USE_SSL, MSG_NOSIGNAL, NULL, MHD_Daemon::options, MHD_Connection::response, MHD_Connection::response_write_position, MHD_Connection::socket_fd, MHD_Connection::state, MHD_Response::total_size, MHD_Connection::write_buffer_append_offset, and MHD_Connection::write_buffer_send_offset.
Referenced by internal_add_connection().
Handler for fatal errors.
Definition at line 124 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".
Definition at line 129 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().