gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r5279 - in libmicrohttpd: . src/daemon src/include
Date: Sun, 8 Jul 2007 21:20:43 -0600 (MDT)

Author: grothoff
Date: 2007-07-08 21:20:40 -0600 (Sun, 08 Jul 2007)
New Revision: 5279

Modified:
   libmicrohttpd/README
   libmicrohttpd/src/daemon/Makefile.am
   libmicrohttpd/src/daemon/daemon.c
   libmicrohttpd/src/daemon/session.c
   libmicrohttpd/src/daemon/session.h
   libmicrohttpd/src/include/microhttpd.h
Log:
stuff

Modified: libmicrohttpd/README
===================================================================
--- libmicrohttpd/README        2007-07-09 02:32:35 UTC (rev 5278)
+++ libmicrohttpd/README        2007-07-09 03:20:40 UTC (rev 5279)
@@ -14,7 +14,10 @@
 session.c:
 - send proper error code back if headers are too long
   (investigate what we should do with those headers,
-   read?  give user control?)
+   read?  give user control?) 
+  ALSO: should this limit be per-line or for the
+  entire header? (currently,  we enforce per-line,
+  but the entire header might make more sense!)
 - http 1.0 compatibility (if 1.0, force connection
   close at the end!)
 
@@ -22,9 +25,8 @@
 =========
 daemon.c:
 - fix start daemon and accept handlers
-  (tricky bit will be supporting both on 
-   the same socket / port!)
 
+
 For SSL:
 ========
 microhttpd.h:
@@ -38,5 +40,7 @@
   (API extension)
 - allow client to control size of input/output
   buffers
+- allow client to limit total number of connections
 
 
+

Modified: libmicrohttpd/src/daemon/Makefile.am
===================================================================
--- libmicrohttpd/src/daemon/Makefile.am        2007-07-09 02:32:35 UTC (rev 
5278)
+++ libmicrohttpd/src/daemon/Makefile.am        2007-07-09 03:20:40 UTC (rev 
5279)
@@ -8,11 +8,11 @@
 libmicrohttpd_la_LDFLAGS = \
   -export-dynamic -version-info 0:0:0 
 libmicrohttpd_la_SOURCES = \
+  connection.c connection.h \
   daemon.c  \
   internal.c internal.h \
   plibc.h \
-  response.c response.h \
-  session.c session.h
+  response.c response.h 
 
 # example programs
 

Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c   2007-07-09 02:32:35 UTC (rev 5278)
+++ libmicrohttpd/src/daemon/daemon.c   2007-07-09 03:20:40 UTC (rev 5279)
@@ -27,7 +27,7 @@
 
 #include "internal.h"
 #include "response.h"
-#include "session.h"
+#include "connection.h"
 
 #define MHD_MAX_CONNECTIONS FD_SETSIZE -4
 
@@ -120,7 +120,7 @@
              fd_set * write_fd_set,
              fd_set * except_fd_set,
              int * max_fd) {
-  struct MHD_Session * pos;
+  struct MHD_Connection * pos;
 
   if ( (daemon == NULL) ||
        (read_fd_set == NULL) ||
@@ -135,7 +135,7 @@
     *max_fd = daemon->socket_fd;
   pos = daemon->connections;
   while (pos != NULL) {
-    if (MHD_YES != MHD_session_get_fdset(pos,
+    if (MHD_YES != MHD_connection_get_fdset(pos,
                                         read_fd_set,
                                         write_fd_set,
                                         except_fd_set,
@@ -153,7 +153,7 @@
  */
 static void *
 MHD_handle_connection(void * data) {
-  struct MHD_Session * con = data;
+  struct MHD_Connection * con = data;
   int num_ready;
   fd_set rs;
   fd_set ws;
@@ -168,7 +168,7 @@
     FD_ZERO(&ws);
     FD_ZERO(&es);
     max = 0;
-    MHD_session_get_fdset(con,
+    MHD_connection_get_fdset(con,
                          &rs,
                          &ws,
                          &es,
@@ -184,14 +184,14 @@
       break;
     }
     if ( ( (FD_ISSET(con->socket_fd, &rs)) &&
-          (MHD_YES != MHD_session_handle_read(con)) ) ||
+          (MHD_YES != MHD_connection_handle_read(con)) ) ||
         ( (con->socket_fd != -1) &&
           (FD_ISSET(con->socket_fd, &ws)) &&
-          (MHD_YES != MHD_session_handle_write(con)) ) )
+          (MHD_YES != MHD_connection_handle_write(con)) ) )
       break;
     if ( (con->headersReceived == 1) &&
         (con->response == NULL) )
-      MHD_call_session_handler(con);
+      MHD_call_connection_handler(con);
   }
   if (con->socket_fd != -1) {
     CLOSE(con->socket_fd);
@@ -202,13 +202,13 @@
 
 
 /**
- * Accept an incoming connection and create the MHD_Session object for
+ * 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.
  */
 static int
 MHD_accept_connection(struct MHD_Daemon * daemon) {
-  struct MHD_Session * session;
+  struct MHD_Connection * connection;
   struct sockaddr addr;
   socklen_t addrlen;
   int s;
@@ -233,50 +233,50 @@
     CLOSE(s);
     return MHD_YES;
   }
-  session = malloc(sizeof(struct MHD_Session));
-  memset(session,
+  connection = malloc(sizeof(struct MHD_Connection));
+  memset(connection,
         0,
-        sizeof(struct MHD_Session));
-  session->addr = malloc(addrlen);
-  memcpy(session->addr,
+        sizeof(struct MHD_Connection));
+  connection->addr = malloc(addrlen);
+  memcpy(connection->addr,
         &addr,
         addrlen);
-  session->addr_len = addrlen;
-  session->socket_fd = s;
-  session->daemon = daemon;
+  connection->addr_len = addrlen;
+  connection->socket_fd = s;
+  connection->daemon = daemon;
   if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION) ) &&
-       (0 != pthread_create(&session->pid,
+       (0 != pthread_create(&connection->pid,
                            NULL,
                            &MHD_handle_connection,
-                           session)) ) {
+                           connection)) ) {
     MHD_DLOG(daemon,
             "Failed to create a thread: %s\n",
             STRERROR(errno));
-    free(session->addr);
+    free(connection->addr);
     CLOSE(s);
-    free(session);
+    free(connection);
     return MHD_NO;
   }
-  session->next = daemon->connections;
-  daemon->connections = session;
+  connection->next = daemon->connections;
+  daemon->connections = connection;
   return MHD_YES;
 }
 
 
 /**
- * Free resources associated with all closed sessions.
- * (destroy responses, free buffers, etc.).  A session
+ * 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.
  *
- * Also performs session actions that need to be run
- * even if the session is not selectable (such as
+ * Also performs connection actions that need to be run
+ * even if the connection is not selectable (such as
  * calling the application again with upload data when
  * the upload data buffer is full).
  */
 static void
-MHD_cleanup_sessions(struct MHD_Daemon * daemon) {
-  struct MHD_Session * pos;
-  struct MHD_Session * prev;
+MHD_cleanup_connections(struct MHD_Daemon * daemon) {
+  struct MHD_Connection * pos;
+  struct MHD_Connection * prev;
   struct MHD_HTTP_Header * hpos;
   void * unused;
 
@@ -320,7 +320,7 @@
 
     if ( (pos->headersReceived == 1) &&
         (pos->response == NULL) )
-      MHD_call_session_handler(pos);
+      MHD_call_connection_handler(pos);
 
     prev = pos;
     pos = pos->next;
@@ -337,7 +337,7 @@
 static int
 MHD_select(struct MHD_Daemon * daemon,
           int may_block) {
-  struct MHD_Session * pos;
+  struct MHD_Connection * pos;
   int num_ready;
   fd_set rs;
   fd_set ws;
@@ -397,9 +397,9 @@
        continue;
       }
       if (FD_ISSET(ds, &rs))
-       MHD_session_handle_read(pos);
+       MHD_connection_handle_read(pos);
       if (FD_ISSET(ds, &ws))
-       MHD_session_handle_write(pos);
+       MHD_connection_handle_write(pos);
       pos = pos->next;
     }
   }
@@ -424,7 +424,7 @@
        (0 != (daemon->options & MHD_USE_SELECT_INTERNALLY)) )
     return MHD_NO;
   MHD_select(daemon, MHD_NO);
-  MHD_cleanup_sessions(daemon);
+  MHD_cleanup_connections(daemon);
   return MHD_YES;
 }
 
@@ -438,7 +438,7 @@
   struct MHD_Daemon * daemon = cls;
   while (daemon->shutdown == 0) {
     MHD_select(daemon, MHD_YES);
-    MHD_cleanup_sessions(daemon);
+    MHD_cleanup_connections(daemon);
   }
   return NULL;
 }
@@ -559,7 +559,7 @@
       CLOSE(daemon->connections->socket_fd);
       daemon->connections->socket_fd = -1;
     }
-    MHD_cleanup_sessions(daemon);
+    MHD_cleanup_connections(daemon);
   }
   free(daemon);
 }

Modified: libmicrohttpd/src/daemon/session.c
===================================================================
--- libmicrohttpd/src/daemon/session.c  2007-07-09 02:32:35 UTC (rev 5278)
+++ libmicrohttpd/src/daemon/session.c  2007-07-09 03:20:40 UTC (rev 5279)
@@ -19,14 +19,14 @@
 */
 
 /**
- * @file session.c
- * @brief  Methods for managing sessions
+ * @file connection.c
+ * @brief  Methods for managing connections
  * @author Daniel Pittman
  * @author Christian Grothoff
  */
 
 #include "internal.h"
-#include "session.h"
+#include "connection.h"
 #include "response.h"
 
 
@@ -39,17 +39,17 @@
  * @return number of entries iterated over
  */
 int
-MHD_get_session_values(struct MHD_Session * session,
+MHD_get_connection_values(struct MHD_Connection * connection,
                       enum MHD_ValueKind kind,
                       MHD_KeyValueIterator iterator,
                       void * iterator_cls) {
   int ret;
   struct MHD_HTTP_Header * pos;
 
-  if (session == NULL)
+  if (connection == NULL)
     return -1;
   ret = 0;
-  pos = session->headers_received;
+  pos = connection->headers_received;
   while (pos != NULL) {
     if (0 != (pos->kind & kind)) {
       ret++;
@@ -74,14 +74,14 @@
  * @return NULL if no such item was found
  */
 const char *
-MHD_lookup_session_value(struct MHD_Session * session,
+MHD_lookup_connection_value(struct MHD_Connection * connection,
                         enum MHD_ValueKind kind,
                         const char * key) {
   struct MHD_HTTP_Header * pos;
 
-  if (session == NULL)
+  if (connection == NULL)
     return NULL;
-  pos = session->headers_received;
+  pos = connection->headers_received;
   while (pos != NULL) {
     if ( (0 != (pos->kind & kind)) &&
         (0 == strcasecmp(key,
@@ -96,55 +96,55 @@
  * Queue a response to be transmitted to the client (as soon as
  * possible).
  *
- * @param session the session identifying the client
+ * @param connection the connection identifying the client
  * @param status_code HTTP status code (i.e. 200 for OK)
  * @param response response to transmit
  * @return MHD_NO on error (i.e. reply already sent),
  *         MHD_YES on success or if message has been queued
  */
 int
-MHD_queue_response(struct MHD_Session * session,
+MHD_queue_response(struct MHD_Connection * connection,
                   unsigned int status_code,
                   struct MHD_Response * response) {
-  if ( (session == NULL) ||
+  if ( (connection == NULL) ||
        (response == NULL) ||
-       (session->response != NULL) ||
-       (session->bodyReceived == 0) ||
-       (session->headersReceived == 0) )
+       (connection->response != NULL) ||
+       (connection->bodyReceived == 0) ||
+       (connection->headersReceived == 0) )
     return MHD_NO;     
   MHD_increment_response_rc(response);
-  session->response = response;
-  session->responseCode = status_code;
+  connection->response = response;
+  connection->responseCode = status_code;
   return MHD_YES;
 }
 
 
 /**
- * Obtain the select sets for this session
+ * Obtain the select sets for this connection
  *
  * @return MHD_YES on success
  */
 int
-MHD_session_get_fdset(struct MHD_Session * session,
+MHD_connection_get_fdset(struct MHD_Connection * connection,
                      fd_set * read_fd_set,
                      fd_set * write_fd_set,
                      fd_set * except_fd_set,
                      int * max_fd) {
   int fd;
 
-  fd = session->socket_fd;
+  fd = connection->socket_fd;
   if (fd == -1)
     return MHD_YES;
-  if ( (session->read_close == 0) &&
-       ( (session->headersReceived == 0) ||
-        (session->readLoc < session->read_buffer_size) ) )
+  if ( (connection->read_close == 0) &&
+       ( (connection->headersReceived == 0) ||
+        (connection->readLoc < connection->read_buffer_size) ) )
     FD_SET(fd, read_fd_set);
-  if (session->response != NULL)
+  if (connection->response != NULL)
     FD_SET(fd, write_fd_set);
   if ( (fd > *max_fd) &&
-       ( (session->headersReceived == 0) ||
-        (session->readLoc < session->read_buffer_size) ||
-        (session->response != NULL) ) )
+       ( (connection->headersReceived == 0) ||
+        (connection->readLoc < connection->read_buffer_size) ||
+        (connection->response != NULL) ) )
     *max_fd = fd;
   return MHD_YES;
 }
@@ -158,39 +158,39 @@
  * return NULL.  Otherwise return a copy of the line.
  */
 static char *
-MHD_get_next_header_line(struct MHD_Session * session) {
+MHD_get_next_header_line(struct MHD_Connection * connection) {
   char * rbuf;
   size_t pos;
   size_t start;
 
-  if (session->readLoc == 0)
+  if (connection->readLoc == 0)
     return NULL;
   start = 0;
   pos = 0;
-  rbuf = session->read_buffer;
-  while ( (pos < session->readLoc - 1) &&
+  rbuf = connection->read_buffer;
+  while ( (pos < connection->readLoc - 1) &&
          (rbuf[pos] != '\r') &&
          (rbuf[pos] != '\n') )
     pos++;
-  if (pos == session->readLoc - 1) {
+  if (pos == connection->readLoc - 1) {
     /* not found, consider growing... */
-    if (session->readLoc == session->read_buffer_size) {
+    if (connection->readLoc == connection->read_buffer_size) {
       /* grow buffer to read larger header or die... */
-      if (session->read_buffer_size < 4 * MHD_MAX_BUF_SIZE) {
-       rbuf = malloc(session->read_buffer_size * 2);
+      if (connection->read_buffer_size < 4 * MHD_MAX_BUF_SIZE) {
+       rbuf = malloc(connection->read_buffer_size * 2);
        memcpy(rbuf,
-              session->read_buffer,
-              session->readLoc);
-       free(session->read_buffer);
-       session->read_buffer = rbuf;
-       session->read_buffer_size *= 2;
+              connection->read_buffer,
+              connection->readLoc);
+       free(connection->read_buffer);
+       connection->read_buffer = rbuf;
+       connection->read_buffer_size *= 2;
       } else {
        /* die, header far too long to be reasonable */
-       MHD_DLOG(session->daemon,
+       MHD_DLOG(connection->daemon,
                 "Received excessively long header line (>%u), closing 
connection.\n",
                 4 * MHD_MAX_BUF_SIZE);
-       CLOSE(session->socket_fd);
-       session->socket_fd = -1;
+       CLOSE(connection->socket_fd);
+       connection->socket_fd = -1;
       }
     }
     return NULL;
@@ -198,33 +198,33 @@
   /* found, check if we have proper CRLF */
   rbuf = malloc(pos + 1);
   memcpy(rbuf,
-        session->read_buffer,
+        connection->read_buffer,
         pos);
   rbuf[pos] = '\0';
-  if ( (session->read_buffer[pos] == '\r') &&
-       (session->read_buffer[pos+1] == '\n') )
+  if ( (connection->read_buffer[pos] == '\r') &&
+       (connection->read_buffer[pos+1] == '\n') )
     pos++; /* skip both r and n */
   pos++;
-  memmove(session->read_buffer,
-         &session->read_buffer[pos],
-         session->readLoc - pos);
-  session->readLoc -= pos;
+  memmove(connection->read_buffer,
+         &connection->read_buffer[pos],
+         connection->readLoc - pos);
+  connection->readLoc -= pos;
   return rbuf;
 }
 
 static void
-MHD_session_add_header(struct MHD_Session * session,
+MHD_connection_add_header(struct MHD_Connection * connection,
                       const char * key,
                       const char * value,
                       enum MHD_ValueKind kind) {
   struct MHD_HTTP_Header * hdr;
 
   hdr = malloc(sizeof(struct MHD_HTTP_Header));
-  hdr->next = session->headers_received;
+  hdr->next = connection->headers_received;
   hdr->header = strdup(key);
   hdr->value = strdup(value);
   hdr->kind = kind;
-  session->headers_received = hdr;
+  connection->headers_received = hdr;
 }
 
 /**
@@ -254,7 +254,7 @@
 }
 
 static void
-MHD_parse_arguments(struct MHD_Session * session,
+MHD_parse_arguments(struct MHD_Connection * connection,
                    char * args) {
   char * equals;
   char * amper;
@@ -272,7 +272,7 @@
     }
     MHD_http_unescape(args);
     MHD_http_unescape(equals);
-    MHD_session_add_header(session,
+    MHD_connection_add_header(connection,
                           args,
                           equals,
                           MHD_GET_ARGUMENT_KIND);
@@ -284,7 +284,7 @@
  * Parse the cookie header (see RFC 2109).
  */
 static void
-MHD_parse_cookie_header(struct MHD_Session * session) {
+MHD_parse_cookie_header(struct MHD_Connection * connection) {
   const char * hdr;
   char * cpy;
   char * pos;
@@ -292,7 +292,7 @@
   char * equals;
   int quotes;
 
-  hdr = MHD_lookup_session_value(session,
+  hdr = MHD_lookup_connection_value(connection,
                                 MHD_HEADER_KIND,
                                 "Cookie");
   if (hdr == NULL)
@@ -327,7 +327,7 @@
       equals[strlen(equals)-1] = '\0';
       equals++;
     }
-    MHD_session_add_header(session,
+    MHD_connection_add_header(connection,
                           pos,
                           equals,
                           MHD_COOKIE_KIND);
@@ -338,7 +338,7 @@
 
 
 /**
- * This function is designed to parse the input buffer of a given session.
+ * This function is designed to parse the input buffer of a given connection.
  *
  * Once the header is complete, it should have set the
  * headers_received, url and method values and set
@@ -348,7 +348,7 @@
  * size of the body is unknown, it should be set to -1.
  */
 static void
-MHD_parse_session_headers(struct MHD_Session * session) {
+MHD_parse_connection_headers(struct MHD_Connection * connection) {
   char * last;
   char * line;
   char * colon;
@@ -359,10 +359,10 @@
   const char * clen;
   unsigned long long cval;
 
-  if (session->bodyReceived == 1)
+  if (connection->bodyReceived == 1)
     abort();
   last = NULL;
-  while (NULL != (line = MHD_get_next_header_line(session))) {
+  while (NULL != (line = MHD_get_next_header_line(connection))) {
     if (last != NULL) {
       if ( (line[0] == ' ') ||
           (line[0] == '\t') ) {
@@ -373,11 +373,11 @@
          free(line);
          free(last);
          last = NULL;
-         MHD_DLOG(session->daemon,
+         MHD_DLOG(connection->daemon,
                   "Received excessively long header line (>%u), closing 
connection.\n",
                   4 * MHD_MAX_BUF_SIZE);
-         CLOSE(session->socket_fd);
-         session->socket_fd = -1;
+         CLOSE(connection->socket_fd);
+         connection->socket_fd = -1;
          break;
        }
        tmp = malloc(strlen(line) + strlen(last) + 1);
@@ -392,7 +392,7 @@
        free(line);
        continue; /* possibly more than 2 lines... */
       } else {
-       MHD_session_add_header(session,
+       MHD_connection_add_header(connection,
                               last,
                               colon,
                               MHD_HEADER_KIND);
@@ -400,13 +400,13 @@
        last = NULL;    
       }
     }
-    if (session->url == NULL) {
+    if (connection->url == NULL) {
       /* line must be request line */
       uri = strstr(line, " ");
       if (uri == NULL)
        goto DIE;
       uri[0] = '\0';
-      session->method = strdup(line);
+      connection->method = strdup(line);
       uri++;
       httpType = strstr(uri, " ");
       if (httpType != NULL) {
@@ -417,14 +417,14 @@
       if (args != NULL) {
        args[0] = '\0';
        args++;
-       MHD_parse_arguments(session,
+       MHD_parse_arguments(connection,
                            args);
       }
-      session->url = strdup(uri);
+      connection->url = strdup(uri);
       if (httpType == NULL)
-       session->version = strdup("");
+       connection->version = strdup("");
       else
-       session->version = strdup(httpType);
+       connection->version = strdup(httpType);
       free(line);
       continue;
     }
@@ -432,31 +432,31 @@
     if (strlen(line) == 0) {
       free(line);
       /* end of header */
-      session->headersReceived = 1;
-      clen = MHD_lookup_session_value(session,
+      connection->headersReceived = 1;
+      clen = MHD_lookup_connection_value(connection,
                                      MHD_HEADER_KIND,
                                      "Content-Length");
       if (clen != NULL) {
        if (1 != sscanf(clen,
                        "%llu",
                        &cval)) {
-         MHD_DLOG(session->daemon,
+         MHD_DLOG(connection->daemon,
                   "Failed to parse Content-Length header `%s', closing 
connection.\n",
                   clen);
          goto DIE;
        }
-       session->uploadSize = cval;
-       session->bodyReceived = cval == 0 ? 1 : 0;
+       connection->uploadSize = cval;
+       connection->bodyReceived = cval == 0 ? 1 : 0;
       } else {
-       if (NULL == MHD_lookup_session_value(session,
+       if (NULL == MHD_lookup_connection_value(connection,
                                             MHD_HEADER_KIND,
                                             "Transfer-Encoding")) {
          /* this request does not have a body */
-         session->uploadSize = 0;
-         session->bodyReceived = 1;
+         connection->uploadSize = 0;
+         connection->bodyReceived = 1;
        } else {
-         session->uploadSize = -1; /* unknown size */
-         session->bodyReceived = 0;
+         connection->uploadSize = -1; /* unknown size */
+         connection->bodyReceived = 0;
        }
       }
       break;
@@ -465,7 +465,7 @@
     colon = strstr(line, ":");
     if (colon == NULL) {
       /* error in header line, die hard */
-      MHD_DLOG(session->daemon,
+      MHD_DLOG(connection->daemon,
               "Received malformed line (no colon), closing connection.\n");
       goto DIE;
     }
@@ -476,24 +476,24 @@
            ( (colon[0] == ' ') ||
              (colon[0] == '\t') ) )
       colon++;
-    /* we do the actual adding of the session
+    /* we do the actual adding of the connection
        header at the beginning of the while
        loop since we need to be able to inspect
        the *next* header line (in case it starts
        with a space...) */
   }
   if (last != NULL) {
-    MHD_session_add_header(session,
+    MHD_connection_add_header(connection,
                           last,
                           colon,
                           MHD_HEADER_KIND);
     free(last);
   }
-  MHD_parse_cookie_header(session);
+  MHD_parse_cookie_header(connection);
   return;
  DIE:
-  CLOSE(session->socket_fd);
-  session->socket_fd = -1;
+  CLOSE(connection->socket_fd);
+  connection->socket_fd = -1;
 }
 
 
@@ -501,61 +501,61 @@
  * Find the handler responsible for this request.
  */
 static struct MHD_Access_Handler *
-MHD_find_access_handler(struct MHD_Session * session) {
+MHD_find_access_handler(struct MHD_Connection * connection) {
   struct MHD_Access_Handler * pos;
 
-  pos = session->daemon->handlers;
+  pos = connection->daemon->handlers;
   while (pos != NULL) {
-    if (0 == strcmp(session->url,
+    if (0 == strcmp(connection->url,
                    pos->uri_prefix))
       return pos;
     pos = pos->next;
   }
-  return &session->daemon->default_handler;
+  return &connection->daemon->default_handler;
 }
 
 /**
  * Call the handler of the application for this
- * session.
+ * connection.
  */
 void
-MHD_call_session_handler(struct MHD_Session * session) {
+MHD_call_connection_handler(struct MHD_Connection * connection) {
   struct MHD_Access_Handler * ah;
   unsigned int processed;
 
-  if (session->headersReceived == 0)
+  if (connection->headersReceived == 0)
     abort(); /* bad timing... */
-  ah = MHD_find_access_handler(session);
-  processed = session->readLoc;
+  ah = MHD_find_access_handler(connection);
+  processed = connection->readLoc;
   if (MHD_NO == ah->dh(ah->dh_cls,
-                      session,
-                      session->url,
-                      session->method,
-                      session->read_buffer,
+                      connection,
+                      connection->url,
+                      connection->method,
+                      connection->read_buffer,
                       &processed)) {
     /* serios internal error, close connection */
-    MHD_DLOG(session->daemon,
+    MHD_DLOG(connection->daemon,
             "Internal application error, closing connection.");
-    CLOSE(session->socket_fd);
-    session->socket_fd = -1;
+    CLOSE(connection->socket_fd);
+    connection->socket_fd = -1;
     return;
   }
   /* dh left "processed" bytes in buffer for next time... */
-  memmove(session->read_buffer,
-         &session->read_buffer[session->readLoc - processed],
+  memmove(connection->read_buffer,
+         &connection->read_buffer[connection->readLoc - processed],
          processed);
-  if (session->uploadSize != -1)
-    session->uploadSize -= (session->readLoc - processed);
-  session->readLoc = processed;
-  if ( (session->uploadSize == 0) ||
-       ( (session->readLoc == 0) &&
-        (session->uploadSize == -1) &&
-        (session->socket_fd == -1) ) ) {
-    session->bodyReceived = 1;
-    session->readLoc = 0;
-    session->read_buffer_size = 0;
-    free(session->read_buffer);
-    session->read_buffer = NULL;
+  if (connection->uploadSize != -1)
+    connection->uploadSize -= (connection->readLoc - processed);
+  connection->readLoc = processed;
+  if ( (connection->uploadSize == 0) ||
+       ( (connection->readLoc == 0) &&
+        (connection->uploadSize == -1) &&
+        (connection->socket_fd == -1) ) ) {
+    connection->bodyReceived = 1;
+    connection->readLoc = 0;
+    connection->read_buffer_size = 0;
+    free(connection->read_buffer);
+    connection->read_buffer = NULL;
   }
 }
 
@@ -567,54 +567,54 @@
  * to handle reads.
  */
 int
-MHD_session_handle_read(struct MHD_Session * session) {
+MHD_connection_handle_read(struct MHD_Connection * connection) {
   int bytes_read;
   void * tmp;
 
-  if ( (session->readLoc >= session->read_buffer_size) &&
-       (session->headersReceived == 0) ) {
+  if ( (connection->readLoc >= connection->read_buffer_size) &&
+       (connection->headersReceived == 0) ) {
     /* need to grow read buffer */
-    tmp = malloc(session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE);
+    tmp = malloc(connection->read_buffer_size * 2 + MHD_MAX_BUF_SIZE);
     memcpy(tmp,
-          session->read_buffer,
-          session->read_buffer_size);
-    session->read_buffer_size = session->read_buffer_size * 2 + 
MHD_MAX_BUF_SIZE;
-    if (session->read_buffer != NULL)
-      free(session->read_buffer);
-    session->read_buffer = tmp;
+          connection->read_buffer,
+          connection->read_buffer_size);
+    connection->read_buffer_size = connection->read_buffer_size * 2 + 
MHD_MAX_BUF_SIZE;
+    if (connection->read_buffer != NULL)
+      free(connection->read_buffer);
+    connection->read_buffer = tmp;
   }
-  if (session->readLoc >= session->read_buffer_size) {
-    MHD_DLOG(session->daemon,
+  if (connection->readLoc >= connection->read_buffer_size) {
+    MHD_DLOG(connection->daemon,
             "Unexpected call to %s.\n",
             __FUNCTION__);
     return MHD_NO;
   }
-  bytes_read = RECV(session->socket_fd,
-                   &session->read_buffer[session->readLoc],
-                   session->read_buffer_size - session->readLoc,
+  bytes_read = RECV(connection->socket_fd,
+                   &connection->read_buffer[connection->readLoc],
+                   connection->read_buffer_size - connection->readLoc,
                    0);
   if (bytes_read < 0) {
     if (errno == EINTR)
       return MHD_NO;
-    MHD_DLOG(session->daemon,
+    MHD_DLOG(connection->daemon,
             "Failed to receive data: %s\n",
             STRERROR(errno));
-    CLOSE(session->socket_fd);
-    session->socket_fd = -1;
+    CLOSE(connection->socket_fd);
+    connection->socket_fd = -1;
     return MHD_YES;
   }
   if (bytes_read == 0) {
     /* other side closed connection */
-    if (session->readLoc > 0)
-      MHD_call_session_handler(session);
-    shutdown(session->socket_fd, SHUT_RD);
+    if (connection->readLoc > 0)
+      MHD_call_connection_handler(connection);
+    shutdown(connection->socket_fd, SHUT_RD);
     return MHD_YES;
   }
-  session->readLoc += bytes_read;
-  if (session->headersReceived == 0)
-    MHD_parse_session_headers(session);
-  if (session->headersReceived == 1)
-    MHD_call_session_handler(session);
+  connection->readLoc += bytes_read;
+  if (connection->headersReceived == 0)
+    MHD_parse_connection_headers(connection);
+  if (connection->headersReceived == 1)
+    MHD_call_connection_handler(connection);
   return MHD_YES;
 }
 
@@ -623,50 +623,50 @@
  * for http-compiliance.
  */
 static void
-MHD_add_extra_headers(struct MHD_Session * session) {
+MHD_add_extra_headers(struct MHD_Connection * connection) {
   const char * have;
   char buf[128];
 
-  if (session->response->total_size == -1) {
-    have = MHD_get_response_header(session->response,
+  if (connection->response->total_size == -1) {
+    have = MHD_get_response_header(connection->response,
                                   "Connection");
     if (have == NULL)
-      MHD_add_response_header(session->response,
+      MHD_add_response_header(connection->response,
                              "Connection",
                              "close");
-  } else if (NULL == MHD_get_response_header(session->response,
+  } else if (NULL == MHD_get_response_header(connection->response,
                                             "Content-Length")) {
     _REAL_SNPRINTF(buf,
             128,
             "%llu",
-            (unsigned long long) session->response->total_size);
-    MHD_add_response_header(session->response,
+            (unsigned long long) connection->response->total_size);
+    MHD_add_response_header(connection->response,
                            "Content-Length",
                            buf);
   }
 }
 
 /**
- * Allocate the session's write buffer and
+ * Allocate the connection's write buffer and
  * fill it with all of the headers from the
  * HTTPd's response.
  */
 static void
-MHD_build_header_response(struct MHD_Session * session) {
+MHD_build_header_response(struct MHD_Connection * connection) {
   size_t size;
   size_t off;
   struct MHD_HTTP_Header * pos;
   char code[32];
   char * data;
 
-  MHD_add_extra_headers(session);
+  MHD_add_extra_headers(connection);
   SPRINTF(code,
          "HTTP/1.1 %u\r\n",
-         session->responseCode);
+         connection->responseCode);
   off = strlen(code);
   /* estimate size */
   size = off + 2; /* extra \r\n at the end */
-  pos = session->response->first_header;
+  pos = connection->response->first_header;
   while (pos != NULL) {
     size += strlen(pos->header) + strlen(pos->value) + 4; /* colon, space, 
linefeeds */
     pos = pos->next;
@@ -676,7 +676,7 @@
   memcpy(data,
         code,
         off);
-  pos = session->response->first_header;
+  pos = connection->response->first_header;
   while (pos != NULL) {
     SPRINTF(&data[off],
            "%s: %s\r\n",
@@ -690,8 +690,8 @@
   off += 2;
   if (off != size)
     abort();
-  session->write_buffer = data;
-  session->write_buffer_size = size;
+  connection->write_buffer = data;
+  connection->write_buffer_size = size;
 }
 
 /**
@@ -701,53 +701,53 @@
  * call this function
  */
 int
-MHD_session_handle_write(struct MHD_Session * session) {
+MHD_connection_handle_write(struct MHD_Connection * connection) {
   struct MHD_Response * response;
   int ret;
 
-  response = session->response;
+  response = connection->response;
   if(response == NULL) {
-    MHD_DLOG(session->daemon,
+    MHD_DLOG(connection->daemon,
             "Unexpected call to %s.\n",
             __FUNCTION__);
     return MHD_NO;
   }
-  if (! session->headersSent) {
-    if (session->write_buffer == NULL)
-      MHD_build_header_response(session);
-    ret = SEND(session->socket_fd,
-              &session->write_buffer[session->writeLoc],
-              session->write_buffer_size - session->writeLoc,
+  if (! connection->headersSent) {
+    if (connection->write_buffer == NULL)
+      MHD_build_header_response(connection);
+    ret = SEND(connection->socket_fd,
+              &connection->write_buffer[connection->writeLoc],
+              connection->write_buffer_size - connection->writeLoc,
               0);
     if (ret < 0) {
       if (errno == EINTR)
        return MHD_YES;
-      MHD_DLOG(session->daemon,
+      MHD_DLOG(connection->daemon,
               "Failed to send data: %s\n",
               STRERROR(errno));
-      CLOSE(session->socket_fd);
-      session->socket_fd = -1;
+      CLOSE(connection->socket_fd);
+      connection->socket_fd = -1;
       return MHD_YES;
     }
-    session->writeLoc += ret;
-    if (session->writeLoc == session->write_buffer_size) {
-      session->writeLoc = 0;
-      free(session->write_buffer);
-      session->write_buffer = NULL;
-      session->write_buffer_size = 0;
-      session->headersSent = 1;
+    connection->writeLoc += ret;
+    if (connection->writeLoc == connection->write_buffer_size) {
+      connection->writeLoc = 0;
+      free(connection->write_buffer);
+      connection->write_buffer = NULL;
+      connection->write_buffer_size = 0;
+      connection->headersSent = 1;
     }
     return MHD_YES;
   }
-  if (response->total_size <= session->messagePos)
+  if (response->total_size <= connection->messagePos)
     abort(); /* internal error */
   if (response->crc != NULL)
     pthread_mutex_lock(&response->mutex);
 
   /* prepare send buffer */
   if ( (response->data == NULL) ||
-       (response->data_start > session->messagePos) ||
-       (response->data_start + response->data_size < session->messagePos) ) {
+       (response->data_start > connection->messagePos) ||
+       (response->data_start + response->data_size < connection->messagePos) ) 
{
     if (response->data_size == 0) {
       if (response->data != NULL)
        free(response->data);
@@ -755,20 +755,20 @@
       response->data_size = MHD_MAX_BUF_SIZE;
     }
     ret = response->crc(response->crc_cls,
-                       session->messagePos,
+                       connection->messagePos,
                        response->data,
                        MAX(MHD_MAX_BUF_SIZE,
-                           response->data_size - session->messagePos));
+                           response->data_size - connection->messagePos));
     if (ret == -1) {
       /* end of message, signal other side by closing! */
-      response->data_size = session->messagePos;
-      CLOSE(session->socket_fd);
-      session->socket_fd = -1;
+      response->data_size = connection->messagePos;
+      CLOSE(connection->socket_fd);
+      connection->socket_fd = -1;
       if (response->crc != NULL)
        pthread_mutex_unlock(&response->mutex);
       return MHD_YES;
     }
-    response->data_start = session->messagePos;
+    response->data_start = connection->messagePos;
     response->data_size = ret;
     if (ret == 0) {
       if (response->crc != NULL)
@@ -778,54 +778,54 @@
   }
 
   /* transmit */
-  ret = SEND(session->socket_fd,
-            &response->data[session->messagePos - response->data_start],
-            response->data_size - (session->messagePos - response->data_start),
+  ret = SEND(connection->socket_fd,
+            &response->data[connection->messagePos - response->data_start],
+            response->data_size - (connection->messagePos - 
response->data_start),
             0);
   if (response->crc != NULL)
     pthread_mutex_unlock(&response->mutex);
   if (ret < 0) {
     if (errno == EINTR)
       return MHD_YES;
-    MHD_DLOG(session->daemon,
+    MHD_DLOG(connection->daemon,
             "Failed to send data: %s\n",
             STRERROR(errno));
-    CLOSE(session->socket_fd);
-    session->socket_fd = -1;
+    CLOSE(connection->socket_fd);
+    connection->socket_fd = -1;
     return MHD_YES;
   }
-  session->messagePos += ret;
-  if (session->messagePos > response->data_size)
+  connection->messagePos += ret;
+  if (connection->messagePos > response->data_size)
     abort(); /* internal error */
-  if (session->messagePos == response->data_size) {
-    if ( (session->bodyReceived == 0) ||
-        (session->headersReceived == 0) )
+  if (connection->messagePos == response->data_size) {
+    if ( (connection->bodyReceived == 0) ||
+        (connection->headersReceived == 0) )
       abort(); /* internal error */
     MHD_destroy_response(response);
-    session->responseCode = 0;
-    session->response = NULL;
-    session->headersReceived = 0;
-    session->headersSent = 0;
-    session->bodyReceived = 0;
-    session->messagePos = 0;
-    free(session->method);
-    session->method = NULL;
-    free(session->url);
-    session->url = NULL;
-    free(session->version);
-    session->version = NULL;
-    free(session->write_buffer);
-    session->write_buffer = NULL;
-    session->write_buffer_size = 0;
-    if (session->read_close != 0) {
+    connection->responseCode = 0;
+    connection->response = NULL;
+    connection->headersReceived = 0;
+    connection->headersSent = 0;
+    connection->bodyReceived = 0;
+    connection->messagePos = 0;
+    free(connection->method);
+    connection->method = NULL;
+    free(connection->url);
+    connection->url = NULL;
+    free(connection->version);
+    connection->version = NULL;
+    free(connection->write_buffer);
+    connection->write_buffer = NULL;
+    connection->write_buffer_size = 0;
+    if (connection->read_close != 0) {
       /* closed for reading => close for good! */
-      CLOSE(session->socket_fd);
-      session->socket_fd = -1;
+      CLOSE(connection->socket_fd);
+      connection->socket_fd = -1;
     }
   }
   return MHD_YES;
 }
 
-/* end of session.c */
+/* end of connection.c */
 
 

Modified: libmicrohttpd/src/daemon/session.h
===================================================================
--- libmicrohttpd/src/daemon/session.h  2007-07-09 02:32:35 UTC (rev 5278)
+++ libmicrohttpd/src/daemon/session.h  2007-07-09 03:20:40 UTC (rev 5279)
@@ -19,23 +19,23 @@
 */
 
 /**
- * @file session.h
- * @brief  Methods for managing sessions
+ * @file connection.h
+ * @brief  Methods for managing connections
  * @author Daniel Pittman
  * @author Christian Grothoff
  */
 
-#ifndef SESSION_H
-#define SESSION_H
+#ifndef CONNECTION_H
+#define CONNECTION_H
 
 
 /**
- * Obtain the select sets for this session.
+ * Obtain the select sets for this connection.
  *
  * @return MHD_YES on success
  */
 int
-MHD_session_get_fdset(struct MHD_Session * session,
+MHD_connection_get_fdset(struct MHD_Connection * connection,
                      fd_set * read_fd_set,
                      fd_set * write_fd_set,
                      fd_set * except_fd_set,
@@ -44,10 +44,10 @@
 
 /**
  * Call the handler of the application for this
- * session.
+ * connection.
  */
 void
-MHD_call_session_handler(struct MHD_Session * session);
+MHD_call_connection_handler(struct MHD_Connection * connection);
 
 /**
  * This function handles a particular connection when it has been
@@ -56,7 +56,7 @@
  * to handle reads.
  */
 int
-MHD_session_handle_read(struct MHD_Session * session);
+MHD_connection_handle_read(struct MHD_Connection * connection);
 
 
 /**
@@ -66,7 +66,7 @@
  * (multithreaded, external select, internal select) call this function
  */
 int
-MHD_session_handle_write(struct MHD_Session * session);
+MHD_connection_handle_write(struct MHD_Connection * connection);
 
 
 #endif

Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h      2007-07-09 02:32:35 UTC (rev 
5278)
+++ libmicrohttpd/src/include/microhttpd.h      2007-07-09 03:20:40 UTC (rev 
5279)
@@ -133,19 +133,15 @@
  * used, the client wants control over the process and will call the
  * appropriate microhttpd callbacks.<p>
  *
- * Note that it is legal to specify that both IPv4 and IPv6
- * should be used.  However, if neither IPv4 nor IPv6 is
- * specified, starting the daemon will fail.<p>
- *
  * 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 SSL, threads or IPv6).
  */
-enum MHD_OPTION {
+enum MHD_FLAG {
   /**
    * No options selected.
    */
-  MHD_NO_OPTION = 0,
+  MHD_NO_FLAG = 0,
 
   /**
    * Run in debug mode.  If this flag is used, the
@@ -170,14 +166,29 @@
   MHD_USE_SELECT_INTERNALLY = 8,
 
   /**
-   * Run using the IPv4 protocol
+   * Run using the IPv6 protocol (otherwise, MHD will
+   * just support IPv4).
    */
-  MHD_USE_IPv4 = 16,
+  MHD_USE_IPv6 = 16,
 
+};
+
+/**
+ * MHD options.  Passed in the varargs portion 
+ * of MHD_start_daemon.
+ */
+enum MHD_OPTION {
+
   /**
-   * Run using the IPv6 protocol
+   * No more options / last option.  This is used
+   * to terminate the VARARGs list.
    */
-  MHD_USE_IPv6 = 32,
+  MHD_OPTION_END = 0,
+
+  /**
+   * FIXME: add options for buffer sizes here...
+   */
+
 };
 
 /**
@@ -215,7 +226,7 @@
 
 struct MHD_Daemon;
 
-struct MHD_Session;
+struct MHD_Connection;
 
 struct MHD_Response;
 
@@ -238,6 +249,9 @@
  * callbacks to provide content to give back to the client and return
  * an HTTP status code (i.e. 200 for OK, 404, etc.).
  *
+ * @param url the requested url
+ * @param method the HTTP method used ("GET", "PUT", etc.)
+ * @param version the HTTP version string (i.e. "HTTP/1.1")
  * @param 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
@@ -247,9 +261,10 @@
  */
 typedef int
 (*MHD_AccessHandlerCallback)(void * cls,
-                            struct MHD_Session * session,
+                            struct MHD_Connection * connection,
                             const char * url,
                             const char * method,
+                            const char * version,
                             const char * upload_data,
                             unsigned int * upload_data_size);
 
@@ -312,21 +327,25 @@
 
 /**
  * Start a webserver on the given port.
+ * @param flags combination of MHD_FLAG values
  * @param port port to bind to
  * @param apc callback to call to check which clients
  *        will be allowed to connect
  * @param apc_cls extra argument to apc
  * @param dh default handler for all URIs
  * @param dh_cls extra argument to dh
+ * @param ... list of options (type-value pairs,
+ *        terminated with MHD_OPTION_END).
  * @return NULL on error, handle to daemon on success
  */
 struct MHD_Daemon *
-MHD_start_daemon(unsigned int options,
+MHD_start_daemon(unsigned int flags,
                 unsigned short port,
                 MHD_AcceptPolicyCallback apc,
                 void * apc_cls,
                 MHD_AccessHandlerCallback dh,
-                void * dh_cls);
+                void * dh_cls,
+                ...);
 
 
 
@@ -401,10 +420,10 @@
  * @return number of entries iterated over
  */
 int
-MHD_get_session_values(struct MHD_Session * session,
-                      enum MHD_ValueKind kind,
-                      MHD_KeyValueIterator iterator,
-                      void * iterator_cls);
+MHD_get_connection_values(struct MHD_Connection * connection,
+                         enum MHD_ValueKind kind,
+                         MHD_KeyValueIterator iterator,
+                         void * iterator_cls);
 
 /**
  * Get a particular header value.  If multiple
@@ -414,22 +433,22 @@
  * @return NULL if no such item was found
  */
 const char *
-MHD_lookup_session_value(struct MHD_Session * session,
-                        enum MHD_ValueKind kind,
-                        const char * key);
+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).
  *
- * @param session the session identifying the client
+ * @param connection the connection identifying the client
  * @param status_code HTTP status code (i.e. 200 for OK)
  * @param response response to transmit
  * @return MHD_NO on error (i.e. reply already sent),
  *         MHD_YES on success or if message has been queued
  */
 int
-MHD_queue_response(struct MHD_Session * session,
+MHD_queue_response(struct MHD_Connection * connection,
                   unsigned int status_code,
                   struct MHD_Response * response);
 





reply via email to

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