daemon.c File Reference

A minimal-HTTP server library. More...

#include "platform.h"
#include "internal.h"
#include "response.h"
#include "connection.h"
#include "memorypool.h"

Include dependency graph for daemon.c:

Go to the source code of this file.

Defines

#define MHD_MAX_CONNECTIONS_DEFAULT   FD_SETSIZE -4
#define MHD_POOL_SIZE_DEFAULT   (1024 * 1024)
#define DEBUG_CLOSE   MHD_NO
#define DEBUG_CONNECT   MHD_NO
#define MSG_NOSIGNAL   0

Functions

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 MHD_accept_connection (struct MHD_Daemon *daemon)
static void MHD_cleanup_connections (struct MHD_Daemon *daemon)
int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout)
static int MHD_select (struct MHD_Daemon *daemon, int may_block)
int MHD_run (struct MHD_Daemon *daemon)
static void * MHD_select_thread (void *cls)
struct MHD_DaemonMHD_start_daemon (unsigned int options, unsigned short port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls,...)
struct MHD_DaemonMHD_start_daemon_va (unsigned int options, unsigned short port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls, va_list ap)
void MHD_stop_daemon (struct MHD_Daemon *daemon)
union MHD_DaemonInfoMHD_get_daemon_info (struct MHD_Daemon *daemon, enum MHD_DaemonInfoType infoType,...)
static void sigalrmHandler (int sig)
void __attribute__ ((constructor))
void __attribute__ ((destructor))

Variables

static struct sigaction sig
static struct sigaction old


Detailed Description

A minimal-HTTP server library.

Author:
Daniel Pittman

Christian Grothoff

Definition in file daemon.c.


Define Documentation

#define DEBUG_CLOSE   MHD_NO

Print extra messages with reasons for closing sockets? (only adds non-error messages).

Definition at line 53 of file daemon.c.

#define DEBUG_CONNECT   MHD_NO

Print extra messages when establishing connections? (only adds non-error messages).

Definition at line 59 of file daemon.c.

#define MHD_MAX_CONNECTIONS_DEFAULT   FD_SETSIZE -4

Default connection limit.

Definition at line 42 of file daemon.c.

Referenced by MHD_start_daemon_va().

#define MHD_POOL_SIZE_DEFAULT   (1024 * 1024)

Default memory allowed per connection.

Definition at line 47 of file daemon.c.

Referenced by MHD_start_daemon_va().

#define MSG_NOSIGNAL   0

Definition at line 63 of file daemon.c.

Referenced by recv_param_adapter(), and send_param_adapter().


Function Documentation

void __attribute__ ( (destructor)   ) 

Definition at line 1154 of file daemon.c.

References MHD_gnutls_init_mutex, old, sig, and SIGALRM.

void __attribute__ ( (constructor)   ) 

Initialize the signal handler for SIGALRM and do other setup work.

Definition at line 1136 of file daemon.c.

References MHD_gnutls_init_mutex, old, sig, SIGALRM, and sigalrmHandler().

Here is the call graph for this function:

static int MHD_accept_connection ( struct MHD_Daemon daemon  )  [static]

static void MHD_cleanup_connections ( struct MHD_Daemon daemon  )  [static]

Free resources associated with all closed connections. (destroy responses, free buffers, etc.). A connection is known to be closed if the socket_fd is -1.

Definition at line 541 of file daemon.c.

References MHD_Connection::addr, MHD_Daemon::connections, MHD_Connection::daemon, MHD_Daemon::max_connections, MHD__gnutls_deinit(), MHD_destroy_response(), MHD_pool_destroy(), MHD_USE_THREAD_PER_CONNECTION, MHD_Connection::next, MHD_Daemon::options, MHD_Connection::pid, MHD_Connection::pool, MHD_Connection::response, MHD_Daemon::shutdown, SIGALRM, and MHD_Connection::socket_fd.

Referenced by MHD_run(), MHD_select_thread(), and MHD_stop_daemon().

Here is the call graph for this function:

Here is the caller graph for this function:

union MHD_DaemonInfo* MHD_get_daemon_info ( struct MHD_Daemon daemon,
enum MHD_DaemonInfoType  infoType,
  ... 
) [write]

Obtain information about the given daemon (not fully implemented!).

Parameters:
daemon what daemon to get information about
infoType what information is desired?
... depends on infoType
Returns:
NULL if this information is not available (or if the infoType is unknown)

Definition at line 1114 of file daemon.c.

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 
)

Obtain the select sets for this daemon.

Returns:
MHD_YES on success, MHD_NO if this daemon was not started with the right options for this call.

Definition at line 181 of file daemon.c.

References MHD_Daemon::connections, MHD_connection_get_fdset(), MHD_NO, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Connection::next, MHD_Daemon::options, MHD_Daemon::shutdown, and MHD_Daemon::socket_fd.

Referenced by MHD_select().

Here is the call graph for this function:

Here is the caller graph for this function:

int MHD_get_timeout ( struct MHD_Daemon daemon,
unsigned long long *  timeout 
)

Obtain timeout value for select for this daemon (only needed if connection timeout is used). The returned value is how long select should at most block, not the timeout value set for connections.

Parameters:
timeout set to the timeout (in milliseconds)
Returns:
MHD_YES on success, MHD_NO if timeouts are not used (or no connections exist that would necessiate the use of a timeout right now).

Definition at line 596 of file daemon.c.

References MHD_Daemon::connection_timeout, MHD_Daemon::connections, MHD_Connection::last_activity, MHD_NO, MHD_YES, and MHD_Connection::next.

Referenced by MHD_select().

Here is the caller graph for this function:

static void* MHD_handle_connection ( void *  data  )  [static]

int MHD_run ( struct MHD_Daemon daemon  ) 

Run webserver operations (without blocking unless in client callbacks). This method should be called by clients in combination with MHD_get_fdset if the client-controlled select method is used.

Returns:
MHD_YES on success, MHD_NO if this daemon was not started with the right options for this call.

Definition at line 743 of file daemon.c.

References MHD_cleanup_connections(), MHD_NO, MHD_select(), MHD_USE_SELECT_INTERNALLY, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::options, and MHD_Daemon::shutdown.

Here is the call graph for this function:

static int MHD_select ( struct MHD_Daemon daemon,
int  may_block 
) [static]

Main select call.

Parameters:
may_block YES if blocking, NO if non-blocking
Returns:
MHD_NO on serious errors, MHD_YES on success

Definition at line 632 of file daemon.c.

References MHD_Daemon::connections, MHD_Connection::idle_handler, MHD_accept_connection(), MHD_get_fdset(), MHD_get_timeout(), MHD_NO, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Connection::next, MHD_Daemon::options, MHD_Connection::read_handler, MHD_Daemon::shutdown, MHD_Connection::socket_fd, MHD_Daemon::socket_fd, STRERROR, and MHD_Connection::write_handler.

Referenced by MHD_run(), and MHD_select_thread().

Here is the call graph for this function:

Here is the caller graph for this function:

static void* MHD_select_thread ( void *  cls  )  [static]

Thread that runs the select loop until the daemon is explicitly shut down.

Definition at line 759 of file daemon.c.

References MHD_cleanup_connections(), MHD_NO, MHD_select(), MHD_YES, and MHD_Daemon::shutdown.

Referenced by MHD_start_daemon_va().

Here is the call graph for this function:

Here is the caller graph for this function:

struct MHD_Daemon* MHD_start_daemon ( unsigned int  options,
unsigned short  port,
MHD_AcceptPolicyCallback  apc,
void *  apc_cls,
MHD_AccessHandlerCallback  dh,
void *  dh_cls,
  ... 
) [read]

Start a webserver on the given port.

Parameters:
port port to bind to
apc callback to call to check which clients will be allowed to connect
apc_cls extra argument to apc
dh default handler for all URIs
dh_cls extra argument to dh
Returns:
NULL on error, handle to daemon on success

Definition at line 782 of file daemon.c.

References MHD_start_daemon_va().

Here is the call graph for this function:

struct MHD_Daemon* MHD_start_daemon_va ( unsigned int  options,
unsigned short  port,
MHD_AcceptPolicyCallback  apc,
void *  apc_cls,
MHD_AccessHandlerCallback  dh,
void *  dh_cls,
va_list  ap 
) [read]

Start a webserver on the given port.

Parameters:
port port to bind to
apc callback to call to check which clients will be allowed to connect
apc_cls extra argument to apc
dh default handler for all URIs
dh_cls extra argument to dh
Returns:
NULL on error, handle to daemon on success

Definition at line 809 of file daemon.c.

References _set_priority(), MHD_Daemon::apc, MHD_Daemon::apc_cls, BIND, CLOSE, MHD_Daemon::connection_timeout, MHD_Daemon::default_handler, MHD_Daemon::default_handler_cls, FPRINTF, LISTEN, MHD_Daemon::max_connections, MHD__gnutls_global_init(), MHD_GNUTLS_CRD_CERTIFICATE, MHD_gnutls_init_mutex, MHD_MAX_CONNECTIONS_DEFAULT, MHD_OPTION_CIPHER_ALGORITHM, MHD_OPTION_CONNECTION_LIMIT, MHD_OPTION_CONNECTION_MEMORY_LIMIT, MHD_OPTION_CONNECTION_TIMEOUT, MHD_OPTION_END, MHD_OPTION_EXTERNAL_LOGGER, MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_KEY, MHD_OPTION_NOTIFY_COMPLETED, MHD_OPTION_PER_IP_CONNECTION_LIMIT, MHD_OPTION_PROTOCOL_VERSION, MHD_OPTION_SOCK_ADDR, MHD_OPTION_URI_LOG_CALLBACK, MHD_POOL_SIZE_DEFAULT, MHD_select_thread(), MHD_tls_set_default_priority(), MHD_USE_DEBUG, MHD_USE_IPv6, MHD_USE_SELECT_INTERNALLY, MHD_USE_SSL, MHD_USE_THREAD_PER_CONNECTION, MHD_Daemon::notify_completed, MHD_Daemon::notify_completed_cls, MHD_Daemon::options, MHD_Daemon::per_ip_connection_limit, MHD_Daemon::pid, MHD_Daemon::pool_size, MHD_Daemon::port, SETSOCKOPT, SOCKET, MHD_Daemon::socket_fd, STRERROR, MHD_Daemon::uri_log_callback, and MHD_Daemon::uri_log_callback_cls.

Referenced by MHD_start_daemon().

Here is the call graph for this function:

Here is the caller graph for this function:

void MHD_stop_daemon ( struct MHD_Daemon daemon  ) 

static ssize_t recv_param_adapter ( struct MHD_Connection connection,
void *  other,
size_t  i 
) [static]

Callback for receiving data from the socket.

Parameters:
conn the MHD connection structure
other where to write received data to
i maximum size of other (in bytes)
Returns:
number of bytes actually received

Definition at line 297 of file daemon.c.

References MSG_NOSIGNAL, RECV, and MHD_Connection::socket_fd.

Referenced by MHD_accept_connection().

Here is the caller graph for this function:

static ssize_t send_param_adapter ( struct MHD_Connection connection,
const void *  other,
size_t  i 
) [static]

Callback for writing data to the socket.

Parameters:
conn the MHD connection structure
other data to write
i number of bytes to write
Returns:
actual number of bytes written

Definition at line 313 of file daemon.c.

References MSG_NOSIGNAL, SEND, and MHD_Connection::socket_fd.

Referenced by MHD_accept_connection().

Here is the caller graph for this function:

static void sigalrmHandler ( int  sig  )  [static]

Definition at line 1127 of file daemon.c.

Referenced by __attribute__().

Here is the caller graph for this function:


Variable Documentation

struct sigaction old [static]

Definition at line 1124 of file daemon.c.

Referenced by __attribute__(), MHD_gtls_bin2hex(), and parse_cookie_header().

struct sigaction sig [static]

Definition at line 1122 of file daemon.c.

Referenced by __attribute__(), and MHD_gtls_proc_cert_client_cert_vrfy().


Generated on Fri Feb 27 18:18:48 2009 for GNU libmicrohttpd by  doxygen 1.5.8