gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r7991 - in libmicrohttpd: . doc src/daemon src/include


From: gnunet
Subject: [GNUnet-SVN] r7991 - in libmicrohttpd: . doc src/daemon src/include
Date: Sat, 6 Dec 2008 22:29:15 -0700 (MST)

Author: grothoff
Date: 2008-12-06 22:29:14 -0700 (Sat, 06 Dec 2008)
New Revision: 7991

Modified:
   libmicrohttpd/ChangeLog
   libmicrohttpd/configure.ac
   libmicrohttpd/doc/microhttpd.texi
   libmicrohttpd/src/daemon/connection.c
   libmicrohttpd/src/daemon/daemon.c
   libmicrohttpd/src/daemon/internal.c
   libmicrohttpd/src/daemon/internal.h
   libmicrohttpd/src/include/microhttpd.h
Log:
fixing 1438 and 1432

Modified: libmicrohttpd/ChangeLog
===================================================================
--- libmicrohttpd/ChangeLog     2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/ChangeLog     2008-12-07 05:29:14 UTC (rev 7991)
@@ -1,3 +1,7 @@
+Sat Dec  6 18:36:17 MST 2008
+        Added configure option to disable checking for CURL support.
+        Added MHD_OPTION to allow specification of custom logger. -CG
+
 Tue Nov 18 01:19:53 MST 2008
         Removed support for untested and/or broken SSL features
         and (largely useless) options. -CG

Modified: libmicrohttpd/configure.ac
===================================================================
--- libmicrohttpd/configure.ac  2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/configure.ac  2008-12-07 05:29:14 UTC (rev 7991)
@@ -175,17 +175,26 @@
 
 # libcurl (required for testing)
 SAVE_LIBS=$LIBS
-LIBCURL_CHECK_CONFIG(,,curl=1,curl=0)
-AM_CONDITIONAL(HAVE_CURL, test x$curl = x1)
-LIBS=$SAVE_LIBS
 
+AC_MSG_CHECKING(whether to use libcurl for testing)
+AC_ARG_ENABLE(curl,
+  [AS_HELP_STRING([--enable-curl],[support cURL based testcases])],
+  [enable_curl=$enableval],
+  [enable_curl="yes"])
+
+if test "$enable_curl" = "yes"
+then
+  LIBCURL_CHECK_CONFIG(,,curl=1,curl=0)
+  AM_CONDITIONAL(HAVE_CURL, test x$curl = x1)
 # Lib cURL & cURL - OpenSSL versions
-MHD_REQ_CURL_VERSION=7.16.4
-MHD_REQ_CURL_OPENSSL_VERSION=0.9.8
-MHD_REQ_CURL_GNUTLS_VERSION=2.2.3
-AC_DEFINE_UNQUOTED([MHD_REQ_CURL_VERSION], "$MHD_REQ_CURL_VERSION", [required 
cURL version to run tests])
-AC_DEFINE_UNQUOTED([MHD_REQ_CURL_OPENSSL_VERSION], 
"$MHD_REQ_CURL_OPENSSL_VERSION", [required cURL SSL version to run tests])
-AC_DEFINE_UNQUOTED([MHD_REQ_CURL_GNUTLS_VERSION], 
"$MHD_REQ_CURL_GNUTLS_VERSION", [gnuTLS lib version - used in conjunction with 
cURL])
+  MHD_REQ_CURL_VERSION=7.16.4
+  MHD_REQ_CURL_OPENSSL_VERSION=0.9.8
+  MHD_REQ_CURL_GNUTLS_VERSION=2.2.3
+  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_VERSION], "$MHD_REQ_CURL_VERSION", 
[required cURL version to run tests])
+  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_OPENSSL_VERSION], 
"$MHD_REQ_CURL_OPENSSL_VERSION", [required cURL SSL version to run tests])
+  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_GNUTLS_VERSION], 
"$MHD_REQ_CURL_GNUTLS_VERSION", [gnuTLS lib version - used in conjunction with 
cURL])
+fi
+LIBS=$SAVE_LIBS
 
 # large file support (> 4 GB)
 AC_SYS_LARGEFILE
@@ -271,9 +280,10 @@
 
 # gcov compilation
 use_gcov=no
-AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage],
-                                        [compile the library with code 
coverage support (default is NO)]),
-                                        [use_gcov=yes], [use_gcov=no])
+AC_ARG_ENABLE([coverage], 
+   AS_HELP_STRING([--enable-coverage],
+                  [compile the library with code coverage support (default is 
NO)]),
+                  [use_gcov=yes], [use_gcov=no])
 AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
 
 

Modified: libmicrohttpd/doc/microhttpd.texi
===================================================================
--- libmicrohttpd/doc/microhttpd.texi   2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/doc/microhttpd.texi   2008-12-07 05:29:14 UTC (rev 7991)
@@ -343,24 +343,18 @@
 representing the cipher priority order to which the HTTPS
 daemon should adhere.
   
address@hidden MHD_OPTION_KX_PRIORITY
-Memory pointer to a zero (MHD_GNUTLS_KX_UNKNOWN)
-terminated (const) array of 'MHD_GNUTLS_KeyExchangeAlgorithm'
-representing the key exchange algorithm priority order to which
-the HTTPS daemon should adhere.
-
address@hidden MHD_OPTION_CERT_TYPE
-Indicate which type of certificate this server will use,
-followed by a value of type 'enum MHD_GNUTLS_CertificateType'.
-
address@hidden MHD_OPTION_MAC_ALGO
-Specify the mac algorithm used by server.
-The argument should be of type "enum MHD_GNUTLS_MacAlgorithm"
-
address@hidden MHD_OPTION_TLS_COMP_ALGO
-Compression algorithm used by server.  Should be followed by an
-option of type 'enum MHD_GNUTLS_CompressionMethod'.
-
address@hidden 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 'void fun(void * arg, const char * fmt, va_list ap)'
+and the second a pointer of type 'void*' which will
+be passed as the "arg" argument to "fun".
+ 
+Note that MHD will not generate any log messages
+if it was compiled without the "--enable-messages"
+flag being set and the MHD_USE_DEBUG flag being set, 
+even if this argument is used.
 @end table
 @end deftp
 
@@ -934,7 +928,11 @@
 
 @deftypefun int MHD_queue_response (struct MHD_Connection *connection, 
unsigned int status_code, struct MHD_Response *response)
 Queue a response to be transmitted to the client as soon as possible
-(increment the reference counter).
+but only after MHD_AccessHandlerCallback returns.  This function
+checks that it is legal to queue a response at this time for the
+given connection.  It also increments the internal reference
+counter for the response object (the counter will be decremented
+automatically once the response has been transmitted).
 
 @table @var
 @item connection

Modified: libmicrohttpd/src/daemon/connection.c
===================================================================
--- libmicrohttpd/src/daemon/connection.c       2008-12-06 17:01:08 UTC (rev 
7990)
+++ libmicrohttpd/src/daemon/connection.c       2008-12-07 05:29:14 UTC (rev 
7991)
@@ -208,7 +208,7 @@
 
 /**
  * Queue a response to be transmitted to the client (as soon as
- * possible).
+ * possible but after MHD_AccessHandlerCallback returns).
  *
  * @param connection the connection identifying the client
  * @param status_code HTTP status code (i.e. 200 for OK)

Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c   2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/src/daemon/daemon.c   2008-12-07 05:29:14 UTC (rev 7991)
@@ -834,6 +834,10 @@
   retVal->max_connections = MHD_MAX_CONNECTIONS_DEFAULT;
   retVal->pool_size = MHD_POOL_SIZE_DEFAULT;
   retVal->connection_timeout = 0;       /* no timeout */
+#if HAVE_MESSAGES
+  retVal->custom_error_log = (void(*)(void*,const char *,va_list)) &vfprintf;
+  retVal->custom_error_log_cls = stderr;
+#endif
 #if HTTPS_SUPPORT
   if (options & MHD_USE_SSL)
     {
@@ -892,6 +896,14 @@
                          va_arg (ap, const int *));
           break;
 #endif
+       case MHD_OPTION_EXTERNAL_LOGGER:
+#if HAVE_MESSAGES
+         retVal->custom_error_log = va_arg(ap, void (*)(void*cls, const char 
*, va_list));
+         retVal->custom_error_log_cls = va_arg(ap, void *);
+#else
+         va_arg(ap, void (*)(void*cls, const char *,...));
+         va_arg(ap, void *);
+#endif
         default:
 #if HAVE_MESSAGES
           if ((opt >= MHD_OPTION_HTTPS_MEM_KEY) &&

Modified: libmicrohttpd/src/daemon/internal.c
===================================================================
--- libmicrohttpd/src/daemon/internal.c 2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/src/daemon/internal.c 2008-12-07 05:29:14 UTC (rev 7991)
@@ -102,7 +102,9 @@
   if ((daemon->options & MHD_USE_DEBUG) == 0)
     return;
   va_start (va, format);
-  VFPRINTF (stderr, format, va);
+  daemon->custom_error_log(daemon->custom_error_log_cls,
+                          format,
+                          va);
   va_end (va);
 }
 #endif

Modified: libmicrohttpd/src/daemon/internal.h
===================================================================
--- libmicrohttpd/src/daemon/internal.h 2008-12-06 17:01:08 UTC (rev 7990)
+++ libmicrohttpd/src/daemon/internal.h 2008-12-07 05:29:14 UTC (rev 7991)
@@ -66,12 +66,26 @@
  */
 struct MHD_HTTP_Header
 {
+  /**
+   * Headers are kept in a linked list.
+   */
   struct MHD_HTTP_Header *next;
 
+  /**
+   * The name of the header (key), without
+   * the colon.
+   */
   char *header;
 
+  /**
+   * The value of the header.
+   */
   char *value;
 
+  /**
+   * Type of the header (where in the HTTP
+   * protocol is this header from).
+   */
   enum MHD_ValueKind kind;
 
 };
@@ -82,68 +96,68 @@
 struct MHD_Response
 {
 
-    /**
-     * Headers to send for the response.  Initially
-     * the linked list is created in inverse order;
-     * the order should be inverted before sending!
-     */
+  /**
+   * Headers to send for the response.  Initially
+   * the linked list is created in inverse order;
+   * the order should be inverted before sending!
+   */
   struct MHD_HTTP_Header *first_header;
 
-    /**
-     * Buffer pointing to data that we are supposed
-     * to send as a response.
-     */
+  /**
+   * Buffer pointing to data that we are supposed
+   * to send as a response.
+   */
   char *data;
 
-    /**
-     * Closure to give to the content reader
-     * free callback.
-     */
+  /**
+   * Closure to give to the content reader
+   * free callback.
+   */
   void *crc_cls;
 
-    /**
-     * How do we get more data?  NULL if we are
-     * given all of the data up front.
-     */
+  /**
+   * How do we get more data?  NULL if we are
+   * given all of the data up front.
+   */
   MHD_ContentReaderCallback crc;
 
-    /**
-     * NULL if data must not be freed, otherwise
-     * either user-specified callback or "&free".
-     */
+  /**
+   * NULL if data must not be freed, otherwise
+   * either user-specified callback or "&free".
+   */
   MHD_ContentReaderFreeCallback crfc;
 
-    /**
-     * Mutex to synchronize access to data/size and
-     * reference counts.
-     */
+  /**
+   * Mutex to synchronize access to data/size and
+   * reference counts.
+   */
   pthread_mutex_t mutex;
 
-    /**
-     * Reference count for this response.  Free
-     * once the counter hits zero.
-     */
+  /**
+   * Reference count for this response.  Free
+   * once the counter hits zero.
+   */
   unsigned int reference_count;
 
-    /**
-     * Set to -1 if size is not known.
-     */
+  /**
+   * Set to -1 if size is not known.
+   */
   size_t total_size;
-
-    /**
-     * Size of data.
-     */
+  
+  /**
+   * Size of data.
+   */
   size_t data_size;
 
-    /**
-     * Size of the data buffer.
-     */
+  /**
+   * Size of the data buffer.
+   */
   size_t data_buffer_size;
-
-    /**
-     * At what offset in the stream is the
-     * beginning of data located?
-     */
+  
+  /**
+   * At what offset in the stream is the
+   * beginning of data located?
+   */
   size_t data_start;
 
 };
@@ -164,124 +178,124 @@
  */
 enum MHD_CONNECTION_STATE
 {
-    /**
-     * Connection just started (no headers received).
-     * Waiting for the line with the request type, URL and version.
-     */
+  /**
+   * Connection just started (no headers received).
+   * Waiting for the line with the request type, URL and version.
+   */
   MHD_CONNECTION_INIT = 0,
 
-    /**
-     * 1: We got the URL (and request type and version).  Wait for a header 
line.
-     */
+  /**
+   * 1: We got the URL (and request type and version).  Wait for a header line.
+   */
   MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,
 
-    /**
-     * 2: We got part of a multi-line request header.  Wait for the rest.
-     */
+  /**
+   * 2: We got part of a multi-line request header.  Wait for the rest.
+   */
   MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,
 
-    /**
-     * 3: We got the request headers.  Process them.
-     */
+  /**
+   * 3: We got the request headers.  Process them.
+   */
   MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,
 
-    /**
-     * 4: We have processed the request headers.  Send 100 continue.
-     */
+  /**
+   * 4: We have processed the request headers.  Send 100 continue.
+   */
   MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,
 
-    /**
-     * 5: We have processed the headers and need to send 100 CONTINUE.
-     */
+  /**
+   * 5: We have processed the headers and need to send 100 CONTINUE.
+   */
   MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,
 
-    /**
-     * 6: We have sent 100 CONTINUE (or do not need to).  Read the message 
body.
-     */
+  /**
+   * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
+   */
   MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,
 
-    /**
-     * 7: We got the request body.  Wait for a line of the footer.
-     */
+  /**
+   * 7: We got the request body.  Wait for a line of the footer.
+   */
   MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,
 
-    /**
-     * 8: We got part of a line of the footer.  Wait for the
-     * rest.
-     */
+  /**
+   * 8: We got part of a line of the footer.  Wait for the
+   * rest.
+   */
   MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,
-
-    /**
-     * 9: We received the entire footer.  Wait for a response to be queued
-     * and prepare the response headers.
-     */
+  
+  /**
+   * 9: We received the entire footer.  Wait for a response to be queued
+   * and prepare the response headers.
+   */
   MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,
 
-    /**
-     * 10: We have prepared the response headers in the writ buffer.
-     * Send the response headers.
-     */
+  /**
+   * 10: We have prepared the response headers in the writ buffer.
+   * Send the response headers.
+   */
   MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,
 
-    /**
-     * 11: We have sent the response headers.  Get ready to send the body.
-     */
+  /**
+   * 11: We have sent the response headers.  Get ready to send the body.
+   */
   MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,
 
-    /**
-     * 12: We are ready to send a part of a non-chunked body.  Send it.
-     */
+  /**
+   * 12: We are ready to send a part of a non-chunked body.  Send it.
+   */
   MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,
 
-    /**
-     * 13: We are waiting for the client to provide more
-     * data of a non-chunked body.
-     */
+  /**
+   * 13: We are waiting for the client to provide more
+   * data of a non-chunked body.
+   */
   MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,
 
-    /**
-     * 14: We are ready to send a chunk.
-     */
+  /**
+   * 14: We are ready to send a chunk.
+   */
   MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,
 
-    /**
-     * 15: We are waiting for the client to provide a chunk of the body.
-     */
+  /**
+   * 15: We are waiting for the client to provide a chunk of the body.
+   */
   MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,
 
-    /**
-     * 16: We have sent the response body. Prepare the footers.
-     */
+  /**
+   * 16: We have sent the response body. Prepare the footers.
+   */
   MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,
 
-    /**
-     * 17: We have prepared the response footer.  Send it.
-     */
+  /**
+   * 17: We have prepared the response footer.  Send it.
+   */
   MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,
 
-    /**
-     * 18: We have sent the response footer.  Shutdown or restart.
-     */
+  /**
+   * 18: We have sent the response footer.  Shutdown or restart.
+   */
   MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,
 
-    /**
-     * 19: This connection is closed (no more activity
-     * allowed).
-     */
+  /**
+   * 19: This connection is closed (no more activity
+   * allowed).
+   */
   MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,
 
   /*
    *  SSL/TLS connection states
    */
 
-  /*
+  /**
    * The initial connection state for all secure connectoins
    * Handshake messages will be processed in this state & while
    * in the 'MHD_TLS_HELLO_REQUEST' state
    */
   MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1,
 
-  /*
+  /**
    * This state indicates the server has send a 'Hello Request' to
    * the client & a renegotiation of the handshake is in progress.
    *
@@ -329,341 +343,416 @@
                                      const void *write_to, size_t max_bytes);
 
 
-
+/**
+ * State kept for each HTTP request.
+ */
 struct MHD_Connection
 {
 
-    /**
-     * This is a linked list.
-     */
+  /**
+   * This is a linked list.
+   */
   struct MHD_Connection *next;
-
-    /**
-     * Reference to the MHD_Daemon struct.
-     */
+  
+  /**
+   * Reference to the MHD_Daemon struct.
+   */
   struct MHD_Daemon *daemon;
 
-    /**
-     * Linked list of parsed headers.
-     */
+  /**
+   * Linked list of parsed headers.
+   */
   struct MHD_HTTP_Header *headers_received;
 
-    /**
-     * Response to transmit (initially NULL).
-     */
+  /**
+   * Response to transmit (initially NULL).
+   */
   struct MHD_Response *response;
 
-    /**
-     * The memory pool is created whenever we first read
-     * from the TCP stream and destroyed at the end of
-     * each request (and re-created for the next request).
-     * In the meantime, this pointer is NULL.  The
-     * pool is used for all connection-related data
-     * except for the response (which maybe shared between
-     * connections) and the IP address (which persists
-     * across individual requests).
-     */
+  /**
+   * The memory pool is created whenever we first read
+   * from the TCP stream and destroyed at the end of
+   * each request (and re-created for the next request).
+   * In the meantime, this pointer is NULL.  The
+   * pool is used for all connection-related data
+   * except for the response (which maybe shared between
+   * connections) and the IP address (which persists
+   * across individual requests).
+   */
   struct MemoryPool *pool;
 
-    /**
-     * We allow the main application to associate some
-     * pointer with the connection.  Here is where we
-     * store it.  (MHD does not know or care what it
-     * is).
-     */
+  /**
+   * We allow the main application to associate some
+   * pointer with the connection.  Here is where we
+   * store it.  (MHD does not know or care what it
+   * is).
+   */
   void *client_context;
 
-    /**
-     * Request method.  Should be GET/POST/etc.  Allocated
-     * in pool.
-     */
+  /**
+   * Request method.  Should be GET/POST/etc.  Allocated
+   * in pool.
+   */
   char *method;
 
-    /**
-     * Requested URL (everything after "GET" only).  Allocated
-     * in pool.
-     */
+  /**
+   * Requested URL (everything after "GET" only).  Allocated
+   * in pool.
+   */
   char *url;
 
-    /**
-     * HTTP version string (i.e. http/1.1).  Allocated
-     * in pool.
-     */
+  /**
+   * HTTP version string (i.e. http/1.1).  Allocated
+   * in pool.
+   */
   char *version;
 
-    /**
-     * Buffer for reading requests.   Allocated
-     * in pool.  Actually one byte larger than
-     * read_buffer_size (if non-NULL) to allow for
-     * 0-termination.
-     */
+  /**
+   * Buffer for reading requests.   Allocated
+   * in pool.  Actually one byte larger than
+   * read_buffer_size (if non-NULL) to allow for
+   * 0-termination.
+   */
   char *read_buffer;
 
-    /**
-     * Buffer for writing response (headers only).  Allocated
-     * in pool.
-     */
+  /**
+   * Buffer for writing response (headers only).  Allocated
+   * in pool.
+   */
   char *write_buffer;
 
-    /**
-     * Last incomplete header line during parsing of headers.
-     * Allocated in pool.  Only valid if state is
-     * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
-     */
+  /**
+   * Last incomplete header line during parsing of headers.
+   * Allocated in pool.  Only valid if state is
+   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
+   */
   char *last;
 
-    /**
-     * Position after the colon on the last incomplete header
-     * line during parsing of headers.
-     * Allocated in pool.  Only valid if state is
-     * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
-     */
+  /**
+   * Position after the colon on the last incomplete header
+   * line during parsing of headers.
+   * Allocated in pool.  Only valid if state is
+   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
+   */
   char *colon;
 
-    /**
-     * Foreign address (of length addr_len).  MALLOCED (not
-     * in pool!).
-     */
+  /**
+   * Foreign address (of length addr_len).  MALLOCED (not
+   * in pool!).
+   */
   struct sockaddr_in *addr;
 
-    /**
-     * Thread for this connection (if we are using
-     * one thread per connection).
-     */
+  /**
+   * Thread for this connection (if we are using
+   * one thread per connection).
+   */
   pthread_t pid;
 
-    /**
-     * Size of read_buffer (in bytes).  This value indicates
-     * how many bytes we're willing to read into the buffer;
-     * the real buffer is one byte longer to allow for
-     * adding zero-termination (when needed).
-     */
+  /**
+   * Size of read_buffer (in bytes).  This value indicates
+   * how many bytes we're willing to read into the buffer;
+   * the real buffer is one byte longer to allow for
+   * adding zero-termination (when needed).
+   */
   size_t read_buffer_size;
 
-    /**
-     * Position where we currently append data in
-     * read_buffer (last valid position).
-     */
+  /**
+   * Position where we currently append data in
+   * read_buffer (last valid position).
+   */
   size_t read_buffer_offset;
 
-    /**
-     * Size of write_buffer (in bytes).
-     */
+  /**
+   * Size of write_buffer (in bytes).
+   */
   size_t write_buffer_size;
-
-    /**
-     * Offset where we are with sending from write_buffer.
-     */
+  
+  /**
+   * Offset where we are with sending from write_buffer.
+   */
   size_t write_buffer_send_offset;
 
-    /**
-     * Last valid location in write_buffer (where do we
-     * append and up to where is it safe to send?)
-     */
+  /**
+   * Last valid location in write_buffer (where do we
+   * append and up to where is it safe to send?)
+   */
   size_t write_buffer_append_offset;
 
-    /**
-     * How many more bytes of the body do we expect
-     * to read? "-1" for unknown.
-     */
+  /**
+   * How many more bytes of the body do we expect
+   * to read? "-1" for unknown.
+   */
   size_t remaining_upload_size;
 
-    /**
-     * Current write position in the actual response
-     * (excluding headers, content only; should be 0
-     * while sending headers).
-     */
+  /**
+   * Current write position in the actual response
+   * (excluding headers, content only; should be 0
+   * while sending headers).
+   */
   size_t response_write_position;
 
-    /**
-     * Position in the 100 CONTINUE message that
-     * we need to send when receiving http 1.1 requests.
-     */
+  /**
+   * Position in the 100 CONTINUE message that
+   * we need to send when receiving http 1.1 requests.
+   */
   size_t continue_message_write_offset;
 
-    /**
-     * Length of the foreign address.
-     */
+  /**
+   * Length of the foreign address.
+   */
   socklen_t addr_len;
 
-    /**
-     * Last time this connection had any activity
-     * (reading or writing).
-     */
+  /**
+   * Last time this connection had any activity
+   * (reading or writing).
+   */
   time_t last_activity;
 
-    /**
-     * Socket for this connection.  Set to -1 if
-     * this connection has died (daemon should clean
-     * up in that case).
-     */
+  /**
+   * Socket for this connection.  Set to -1 if
+   * this connection has died (daemon should clean
+   * up in that case).
+   */
   int socket_fd;
 
-    /**
-     * Has this socket been closed for reading (i.e.
-     * other side closed the connection)?  If so,
-     * we must completely close the connection once
-     * we are done sending our response (and stop
-     * trying to read from this socket).
-     */
+  /**
+   * Has this socket been closed for reading (i.e.
+   * other side closed the connection)?  If so,
+   * we must completely close the connection once
+   * we are done sending our response (and stop
+   * trying to read from this socket).
+   */
   int read_closed;
 
-    /**
-     * State in the FSM for this connection.
-     */
+  /**
+   * State in the FSM for this connection.
+   */
   enum MHD_CONNECTION_STATE state;
 
-     /**
-     * HTTP response code.  Only valid if response object
-     * is already set.
-     */
+  /**
+   * HTTP response code.  Only valid if response object
+   * is already set.
+   */
   unsigned int responseCode;
 
-    /**
-     * Set to MHD_YES if the response's content reader
-     * callback failed to provide data the last time
-     * we tried to read from it.  In that case, the
-     * write socket should be marked as unready until
-     * the CRC call succeeds.
-     */
+  /**
+   * Set to MHD_YES if the response's content reader
+   * callback failed to provide data the last time
+   * we tried to read from it.  In that case, the
+   * write socket should be marked as unready until
+   * the CRC call succeeds.
+   */
   int response_unready;
 
-    /**
-     * Are we sending with chunked encoding?
-     */
+  /**
+   * Are we sending with chunked encoding?
+   */
   int have_chunked_response;
 
-    /**
-     * Are we receiving with chunked encoding?  This will be set to
-     * MHD_YES after we parse the headers and are processing the body
-     * with chunks.  After we are done with the body and we are
-     * processing the footers; once the footers are also done, this will
-     * be set to MHD_NO again (before the final call to the handler).
-     */
+  /**
+   * Are we receiving with chunked encoding?  This will be set to
+   * MHD_YES after we parse the headers and are processing the body
+   * with chunks.  After we are done with the body and we are
+   * processing the footers; once the footers are also done, this will
+   * be set to MHD_NO again (before the final call to the handler).
+   */
   int have_chunked_upload;
 
-    /**
-     * If we are receiving with chunked encoding, where are we right
-     * now?  Set to 0 if we are waiting to receive the chunk size;
-     * otherwise, this is the size of the current chunk.  A value of
-     * zero is also used when we're at the end of the chunks.
-     */
+  /**
+   * If we are receiving with chunked encoding, where are we right
+   * now?  Set to 0 if we are waiting to receive the chunk size;
+   * otherwise, this is the size of the current chunk.  A value of
+   * zero is also used when we're at the end of the chunks.
+   */
   unsigned int current_chunk_size;
 
-    /**
-     * If we are receiving with chunked encoding, where are we currently
-     * with respect to the current chunk (at what offset / position)?
-     */
+  /**
+   * If we are receiving with chunked encoding, where are we currently
+   * with respect to the current chunk (at what offset / position)?
+   */
   unsigned int current_chunk_offset;
-
-  /* handlers used for processing read, write & idle connection operations */
+  
+  /**
+   * Handler used for processing read connection operations 
+   */
   int (*read_handler) (struct MHD_Connection * connection);
 
+  /**
+   * Handler used for processing write connection operations 
+   */
   int (*write_handler) (struct MHD_Connection * connection);
 
+  /**
+   * Handler used for processing idle connection operations 
+   */
   int (*idle_handler) (struct MHD_Connection * connection);
 
+  /**
+   * Function used for reading HTTP request stream.
+   */
   ReceiveCallback recv_cls;
 
+  /**
+   * Function used for writing HTTP response stream.
+   */
   TransmitCallback send_cls;
 
 #if HTTPS_SUPPORT
-  /* TODO rename as this might be an SSL connection */
+  /**
+   * State required for HTTPS/SSL/TLS support.
+   */
   MHD_gtls_session_t tls_session;
 #endif
 };
 
+/**
+ * State kept for each MHD daemon.
+ */
 struct MHD_Daemon
 {
 
-    /**
-     * Callback function for all requests.
-     */
+  /**
+   * Callback function for all requests.
+   */
   MHD_AccessHandlerCallback default_handler;
-
-    /**
-     * Closure argument to default_handler.
-     */
+  
+  /**
+   * Closure argument to default_handler.
+   */
   void *default_handler_cls;
 
-    /**
-     * Linked list of our current connections.
-     */
+  /**
+   * Linked list of our current connections.
+   */
   struct MHD_Connection *connections;
 
+  /**
+   * Function to call to check if we should
+   * accept or reject an incoming request.
+   * May be NULL.
+   */
   MHD_AcceptPolicyCallback apc;
 
+  /**
+   * Closure argument to apc.
+   */
   void *apc_cls;
 
+  /**
+   * Function to call when we are done processing
+   * a particular request.  May be NULL.
+   */
   MHD_RequestCompletedCallback notify_completed;
 
+  /**
+   * Closure argument to notify_completed.
+   */
   void *notify_completed_cls;
 
+  /**
+   * Function to call with the full URI at the
+   * beginning of request processing.  May be NULL.
+   * <p>
+   * Returns the initial pointer to internal state
+   * kept by the client for the request.
+   */
   void *(*uri_log_callback) (void *cls, const char *uri);
 
+  /**
+   * Closure argument to uri_log_callback.
+   */
   void *uri_log_callback_cls;
 
-    /**
-     * PID of the select thread (if we have internal select)
-     */
+#if HAVE_MESSAGES
+  /**
+   * Function for logging error messages (if we 
+   * support error reporting).
+   */
+  void (*custom_error_log) (void *cls, const char *fmt, va_list va);
+
+  /**
+   * Closure argument to custom_error_log.
+   */
+  void *custom_error_log_cls;
+#endif
+
+  /**
+   * PID of the select thread (if we have internal select)
+   */
   pthread_t pid;
 
-    /**
-     * Listen socket.
-     */
+  /**
+   * Listen socket.
+   */
   int socket_fd;
-
-    /**
-     * Are we shutting down?
-     */
+  
+  /**
+   * Are we shutting down?
+   */
   int shutdown;
 
-    /**
-     * Size of the per-connection memory pools.
-     */
+  /**
+   * Size of the per-connection memory pools.
+   */
   unsigned int pool_size;
 
-    /**
-     * Limit on the number of parallel connections.
-     */
+  /**
+   * Limit on the number of parallel connections.
+   */
   unsigned int max_connections;
 
-    /**
-     * After how many seconds of inactivity should
-     * connections time out?  Zero for no timeout.
-     */
+  /**
+   * After how many seconds of inactivity should
+   * connections time out?  Zero for no timeout.
+   */
   unsigned int connection_timeout;
 
-    /**
-     * Maximum number of connections per IP, or 0 for
-     * unlimited.
-     */
+  /**
+   * Maximum number of connections per IP, or 0 for
+   * unlimited.
+   */
   unsigned int per_ip_connection_limit;
 
-    /**
-     * Daemon's options.
-     */
+  /**
+   * Daemon's options.
+   */
   enum MHD_OPTION options;
 
-    /**
-     * Listen port.
-     */
+  /**
+   * Listen port.
+   */
   unsigned short port;
 
 #if HTTPS_SUPPORT
+  /**
+   * What kind of credentials are we offering
+   * for SSL/TLS?
+   */
   enum MHD_GNUTLS_CredentialsType cred_type;
 
-  /* server x509 credintials */
+  /**
+   * Server x509 credentials 
+   */
   MHD_gtls_cert_credentials_t x509_cred;
 
-  /* cipher priority cache */
+  /**
+   * Cipher priority cache 
+   */
   MHD_gnutls_priority_t priority_cache;
 
-  /* Diffie-Hellman parameters */
+  /**
+   * Diffie-Hellman parameters
+   */
   MHD_gtls_dh_params_t dh_params;
 
+  /**
+   * Pointer to our SSL/TLS key (in ASCII) in memory.
+   */
   const char *https_mem_key;
 
+  /**
+   * Pointer to our SSL/TLS certificate (in ASCII) in memory.
+   */
   const char *https_mem_cert;
 #endif
 };

Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h      2008-12-06 17:01:08 UTC (rev 
7990)
+++ libmicrohttpd/src/include/microhttpd.h      2008-12-07 05:29:14 UTC (rev 
7991)
@@ -411,6 +411,21 @@
    * daemon should adhere.
    */
   MHD_OPTION_CIPHER_ALGORITHM = 12,
+
+  /**
+   * 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 "void fun(void * arg, const char * fmt, va_list ap)"
+   * and the second a pointer "void*" which will
+   * be passed as the "arg" argument to "fun".
+   * <p>
+   * Note that MHD will not generate any log messages
+   * if it was compiled without the "--enable-messages"
+   * flag being set.
+   */
+  MHD_OPTION_EXTERNAL_LOGGER = 13,
+
 };
 
 /**
@@ -910,13 +925,14 @@
  * @param key the header to look for
  * @return NULL if no such item was found
  */
-const char *MHD_lookup_connection_value (struct MHD_Connection *connection,
-                                         enum MHD_ValueKind kind,
-                                         const char *key);
+const char *
+MHD_lookup_connection_value (struct MHD_Connection *connection,
+                            enum MHD_ValueKind kind,
+                            const char *key);
 
 /**
  * Queue a response to be transmitted to the client (as soon as
- * possible).
+ * possible but after MHD_AccessHandlerCallback returns).
  *
  * @param connection the connection identifying the client
  * @param status_code HTTP status code (i.e. 200 for OK)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]