gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [libmicrohttpd] GNU libmicrohttpd branch master updated. 10


From: gitolite
Subject: [GNUnet-SVN] [libmicrohttpd] GNU libmicrohttpd branch master updated. 101fa6ceed4baf7e03a2f24aca4beb6e03dbb9d6
Date: Wed, 2 Nov 2016 20:48:40 +0100 (CET)

The branch, master has been updated
       via  101fa6ceed4baf7e03a2f24aca4beb6e03dbb9d6 (commit)
      from  20bb6c5dc0f4ea03e9a5fc5077f4d04166c0fc08 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 101fa6ceed4baf7e03a2f24aca4beb6e03dbb9d6
Author: Evgeny Grin (Karlson2k) <address@hidden>
Date:   Wed Nov 2 21:21:31 2016 +0300

    Added 'configure' parameter '--disable-httpupgrade'.
    Could be used to reduce complied binary size if HTTP "Upgrade" is not 
required.

-----------------------------------------------------------------------

Summary of changes:
 configure.ac                |  15 +++++
 src/microhttpd/Makefile.am  |   6 +-
 src/microhttpd/connection.c |  34 +++++++---
 src/microhttpd/daemon.c     | 150 +++++++++++++++++++++++++++-----------------
 src/microhttpd/internal.h   |  16 ++++-
 src/microhttpd/response.c   |   2 +
 w32/common/MHD_config.h     |   2 +
 7 files changed, 153 insertions(+), 72 deletions(-)

diff --git a/configure.ac b/configure.ac
index 71e6800..557bd0c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1137,6 +1137,19 @@ AS_IF([[test "x$enable_dauth" != "xno"]],
 AM_CONDITIONAL([ENABLE_DAUTH], [test "x$enable_dauth" != "xno"])
 AC_MSG_RESULT([[$enable_dauth]])
 
+# optional: HTTP "Upgrade" support. Enabled by default
+AC_MSG_CHECKING([[whether to support HTTP "Upgrade"]])
+AC_ARG_ENABLE([[httpupgrade]],
+    AS_HELP_STRING([[--disable-httpupgrade]],
+      [disable HTTP "Upgrade" support]),
+    
[AS_VAR_IF([[enable_httpupgrade]],[["no"]],[],[[enable_httpupgrade='yes']])],
+    [[enable_httpupgrade='yes']])
+AS_VAR_IF([[enable_httpupgrade]],[["yes"]],
+  [
+   AC_DEFINE([[UPGRADE_SUPPORT]],[[1]],[Define to 1 if libmicrohttpd is 
compiled with HTTP Upgrade support.]) ])
+AM_CONDITIONAL([ENABLE_UPGRADE], [[test "x$enable_httpupgrade" = "xyes"]])
+AC_MSG_RESULT([[$enable_httpupgrade]])
+
 
 
 MHD_LIB_LDFLAGS="$MHD_LIB_LDFLAGS -export-dynamic -no-undefined"
@@ -1204,6 +1217,7 @@ AC_MSG_NOTICE([libmicrohttpd ${PACKAGE_VERSION} 
Configuration Summary:
   Messages:          ${enable_messages}
   Basic auth.:       ${enable_bauth}
   Digest auth.:      ${enable_dauth}
+  HTTP "Upgrade":    ${enable_httpupgrade}
   Postproc:          ${enable_postprocessor}
   HTTPS support:     ${MSG_HTTPS}
   poll support:      ${enable_poll=no}
@@ -1225,6 +1239,7 @@ fi
 
 if test "x$enable_bauth" != "xyes" || \
    test "x$enable_dauth" != "xyes" || \
+   test "x$enable_httpupgrade" != "xyes" || \
    test "x$enable_postprocessor" != "xyes"
 then
  AC_MSG_NOTICE([WARNING: This will be a custom build with missing symbols. Do 
NOT use this build in a distribution. Building with these kinds of configure 
options is only for custom builds for embedded systems.])
diff --git a/src/microhttpd/Makefile.am b/src/microhttpd/Makefile.am
index 5984682..81dc95c 100644
--- a/src/microhttpd/Makefile.am
+++ b/src/microhttpd/Makefile.am
@@ -150,12 +150,14 @@ check_PROGRAMS = \
   test_str_to_value \
   test_shutdown_select \
   test_shutdown_poll \
-  test_daemon \
-  test_upgrade
+  test_daemon
 
+if ENABLE_UPGRADE
+  check_PROGRAMS += test_upgrade
 if ENABLE_HTTPS
   check_PROGRAMS += test_upgrade_ssl
 endif
+endif
 
 if HAVE_POSTPROCESSOR
 check_PROGRAMS += \
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 01780f9..c6089ad 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -561,7 +561,7 @@ MHD_connection_close_ (struct MHD_Connection *connection,
 }
 
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
 /**
  * Stop TLS forwarding on upgraded connection and
  * reflect remote disconnect state to socketpair.
@@ -617,7 +617,7 @@ MHD_connection_finish_forward_ (struct MHD_Connection 
*connection)
    * connection's final cleanup.
    */
 }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/
 
 
 /**
@@ -871,13 +871,17 @@ keepalive_possible (struct MHD_Connection *connection)
   {
     if (NULL == end)
       return MHD_YES;
+    if (MHD_str_equal_caseless_ (end,
+                                 "close"))
+      return MHD_NO;
+#ifdef UPGRADE_SUPPORT
     if ( (MHD_str_equal_caseless_ (end,
-                                   "close")) ||
-         ( (MHD_str_equal_caseless_ (end,
-                                     "upgrade")) &&
-           (NULL == connection->response->upgrade_handler) ) )
+                                   "upgrade")) &&
+         (NULL == connection->response->upgrade_handler) )
       return MHD_NO;
-   return MHD_YES;
+#endif /* UPGRADE_SUPPORT */
+
+    return MHD_YES;
   }
   if (MHD_str_equal_caseless_(connection->version,
                               MHD_HTTP_VERSION_1_0))
@@ -2440,11 +2444,13 @@ MHD_connection_handle_read (struct MHD_Connection 
*connection)
           break;
         case MHD_CONNECTION_CLOSED:
           return MHD_YES;
+#ifdef UPGRADE_SUPPORT
         case MHD_CONNECTION_UPGRADE:
           EXTRA_CHECK (0);
           break;
         case MHD_CONNECTION_UPGRADE_CLOSED:
           break;
+#endif /* UPGRADE_SUPPORT */
         default:
           /* shrink read buffer to how much is actually used */
           MHD_pool_reallocate (connection->pool,
@@ -2626,11 +2632,13 @@ MHD_connection_handle_write (struct MHD_Connection 
*connection)
         case MHD_TLS_CONNECTION_INIT:
           EXTRA_CHECK (0);
           break;
+#ifdef UPGRADE_SUPPORT
         case MHD_CONNECTION_UPGRADE:
           EXTRA_CHECK (0);
           break;
         case MHD_CONNECTION_UPGRADE_CLOSED:
           break;
+#endif /* UPGRADE_SUPPORT */
         default:
           EXTRA_CHECK (0);
          CONNECTION_CLOSE_ERROR (connection,
@@ -2984,6 +2992,7 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
           if (MHD_NO != socket_flush_possible (connection))
             socket_start_no_buffering_flush (connection);
 
+#ifdef UPGRADE_SUPPORT
           if (NULL != connection->response->upgrade_handler)
             {
               socket_start_normal_buffering (connection);
@@ -3007,6 +3016,7 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
                 }
               continue;
             }
+#endif /* UPGRADE_SUPPORT */
           if (MHD_NO != socket_flush_possible (connection))
             socket_start_extra_buffering (connection);
           else
@@ -3173,11 +3183,13 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
         case MHD_CONNECTION_CLOSED:
          cleanup_connection (connection);
          return MHD_NO;
-        case MHD_CONNECTION_UPGRADE:
+#ifdef UPGRADE_SUPPORT
+       case MHD_CONNECTION_UPGRADE:
           return MHD_YES; /* keep open */
         case MHD_CONNECTION_UPGRADE_CLOSED:
           return MHD_YES; /* "Upgraded" connection should be closed in special 
way. */
-        default:
+#endif /* UPGRADE_SUPPORT */
+       default:
           EXTRA_CHECK (0);
           break;
         }
@@ -3430,7 +3442,9 @@ MHD_queue_response (struct MHD_Connection *connection,
                     unsigned int status_code,
                     struct MHD_Response *response)
 {
+#ifdef UPGRADE_SUPPORT
   struct MHD_Daemon *daemon;
+#endif /* UPGRADE_SUPPORT */
 
   if ( (NULL == connection) ||
        (NULL == response) ||
@@ -3438,6 +3452,7 @@ MHD_queue_response (struct MHD_Connection *connection,
        ( (MHD_CONNECTION_HEADERS_PROCESSED != connection->state) &&
         (MHD_CONNECTION_FOOTERS_RECEIVED != connection->state) ) )
     return MHD_NO;
+#ifdef UPGRADE_SUPPORT
   daemon = connection->daemon;
   if ( (NULL != response->upgrade_handler) &&
        (0 == (daemon->options & MHD_ALLOW_UPGRADE)) )
@@ -3457,6 +3472,7 @@ MHD_queue_response (struct MHD_Connection *connection,
 #endif
       return MHD_NO;
     }
+#endif /* UPGRADE_SUPPORT */
   MHD_increment_response_rc (response);
   connection->response = response;
   connection->responseCode = status_code;
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 373596e..4149bfc 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -662,7 +662,7 @@ MHD_get_fdset (struct MHD_Daemon *daemon,
 }
 
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
 /**
  * Obtain the select() file descriptor sets for the
  * given @a urh.
@@ -743,7 +743,7 @@ urh_from_fdset (struct MHD_UpgradeResponseHandle *urh,
       FD_ISSET (mhd_sckt, ws))
     urh->mhd.celi |= MHD_EPOLL_STATE_WRITE_READY;
 }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
 
 /**
@@ -844,7 +844,7 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
          break;
        }
     }
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   {
     struct MHD_UpgradeResponseHandle *urh;
 
@@ -867,7 +867,7 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
               _("Maximum socket in select set: %d\n"),
               *max_fd);
 #endif
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   return result;
 }
 
@@ -927,6 +927,7 @@ call_handlers (struct MHD_Connection *con,
 }
 
 
+#ifdef UPGRADE_SUPPORT
 /**
  * Finally cleanup upgrade-related resources. It should
  * be called when TLS buffers have been drained and
@@ -957,9 +958,9 @@ MHD_cleanup_upgraded_connection_ (struct MHD_Connection 
*connection)
   if (NULL != urh)
     free (urh);
 }
+#endif /* UPGRADE_SUPPORT */
 
-
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
 /**
  * Performs bi-directional forwarding on upgraded HTTPS connections
  * based on the readyness state stored in the @a urh handle.
@@ -1218,9 +1219,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
       urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY;
     }
 }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT  && UPGRADE_SUPPORT */
 
 
+#ifdef UPGRADE_SUPPORT
 /**
  * Main function of the thread that handles an individual connection
  * after it was "upgraded" when #MHD_USE_THREAD_PER_CONNECTION is set.
@@ -1367,6 +1369,7 @@ thread_main_connection_upgrade (struct MHD_Connection 
*con)
   /* Do not set 'urh->clean_ready' yet as 'urh' will be used
    * in connection thread for a little while. */
 }
+#endif /* UPGRADE_SUPPORT */
 
 
 /**
@@ -1411,8 +1414,13 @@ thread_main_handle_connection (void *data)
     {
       const unsigned int timeout = daemon->connection_timeout;
       _MHD_bool was_suspended = 0;
+#ifdef UPGRADE_SUPPORT
+      struct MHD_UpgradeResponseHandle * const urh = con->urh;
+#else  /* ! UPGRADE_SUPPORT */
+      static const void * const urh = NULL;
+#endif /* ! UPGRADE_SUPPORT */
 
-      if (MHD_NO != con->suspended && NULL == con->urh)
+      if (MHD_NO != con->suspended && NULL == urh)
         {
           /* Connection was suspended, wait for resume. */
           was_suspended = !0;
@@ -1677,6 +1685,7 @@ thread_main_handle_connection (void *data)
             goto exit;
        }
 #endif
+#ifdef UPGRADE_SUPPORT
       /* Check for 'MHD_CONNECTION_UPGRADE_CLOSED' too:
        * application can finish with "upgraded" connection
        * before this thread process it for the first time. */
@@ -1707,6 +1716,7 @@ thread_main_handle_connection (void *data)
           /* skip usual clean up  */
           return (MHD_THRD_RTRN_TYPE_) 0;
         }
+#endif /* UPGRADE_SUPPORT */
     }
   if (MHD_CONNECTION_IN_CLEANUP != con->state)
     {
@@ -2455,16 +2465,24 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
     daemon->resuming = MHD_NO;
   while (NULL != (pos = next))
     {
+#ifdef UPGRADE_SUPPORT
+      struct MHD_UpgradeResponseHandle * const urh = pos->urh;
+#else  /* ! UPGRADE_SUPPORT */
+      static const void * const urh = NULL;
+#endif /* ! UPGRADE_SUPPORT */
       next = pos->next;
-      if ( (MHD_NO == pos->resuming) ||
-           ((NULL != pos->urh) &&
-            ((MHD_NO == pos->urh->was_closed) || (MHD_NO == 
pos->urh->clean_ready))) )
+      if ( (MHD_NO == pos->resuming)
+#ifdef UPGRADE_SUPPORT
+          || ((NULL != urh) &&
+              ((MHD_NO == urh->was_closed) || (MHD_NO == urh->clean_ready)))
+#endif /* UPGRADE_SUPPORT */
+         )
         continue;
       ret = MHD_YES;
       DLL_remove (daemon->suspended_connections_head,
                   daemon->suspended_connections_tail,
                   pos);
-      if (NULL == pos->urh)
+      if (NULL == urh)
         {
           DLL_insert (daemon->connections_head,
                       daemon->connections_tail,
@@ -2495,6 +2513,7 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
             }
 #endif
         }
+#ifdef UPGRADE_SUPPORT
       else
         {
           /* Data forwarding was finished (for TLS connections) AND
@@ -2505,6 +2524,7 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
                       pos);
 
         }
+#endif /* UPGRADE_SUPPORT */
       pos->suspended = MHD_NO;
       pos->resuming = MHD_NO;
     }
@@ -2741,8 +2761,10 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
           (MHD_NO == pos->thread_joined) &&
            (! MHD_join_thread_ (pos->pid)) )
         MHD_PANIC (_("Failed to join a thread\n"));
+#ifdef UPGRADE_SUPPORT
       if (NULL != pos->urh)
         MHD_cleanup_upgraded_connection_ (pos);
+#endif /* UPGRADE_SUPPORT */
       MHD_pool_destroy (pos->pool);
 #ifdef HTTPS_SUPPORT
       if (NULL != pos->tls_session)
@@ -2929,10 +2951,10 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
   MHD_socket ds;
   struct MHD_Connection *pos;
   struct MHD_Connection *next;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   struct MHD_UpgradeResponseHandle *urh;
   struct MHD_UpgradeResponseHandle *urhn;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   unsigned int mask = MHD_USE_SUSPEND_RESUME | MHD_USE_EPOLL_INTERNALLY |
     MHD_USE_SELECT_INTERNALLY | MHD_USE_POLL_INTERNALLY | 
MHD_USE_THREAD_PER_CONNECTION;
 
@@ -2988,8 +3010,8 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
         }
     }
 
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   /* handle upgraded HTTPS connections */
-#ifdef HTTPS_SUPPORT
   for (urh = daemon->urh_head; NULL != urh; urh = urhn)
     {
       urhn = urh->next;
@@ -3011,7 +3033,7 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
           MHD_resume_connection(urh->connection);
         }
     }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   MHD_cleanup_connections (daemon);
   return MHD_YES;
 }
@@ -3195,10 +3217,10 @@ MHD_poll_all (struct MHD_Daemon *daemon,
   unsigned int num_connections;
   struct MHD_Connection *pos;
   struct MHD_Connection *next;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   struct MHD_UpgradeResponseHandle *urh;
   struct MHD_UpgradeResponseHandle *urhn;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
   if ( (MHD_USE_SUSPEND_RESUME == (daemon->options & MHD_USE_SUSPEND_RESUME)) 
&&
        (MHD_YES == resume_suspended_connections (daemon)) )
@@ -3208,10 +3230,10 @@ MHD_poll_all (struct MHD_Daemon *daemon,
   num_connections = 0;
   for (pos = daemon->connections_head; NULL != pos; pos = pos->next)
     num_connections++;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   for (urh = daemon->urh_head; NULL != urh; urh = urh->next)
     num_connections += 2;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   {
     MHD_UNSIGNED_LONG_LONG ltimeout;
     unsigned int i;
@@ -3289,7 +3311,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
          }
        i++;
       }
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
     for (urh = daemon->urh_head; NULL != urh; urh = urh->next)
       {
         p[poll_server+i].fd = urh->connection->socket_fd;
@@ -3305,7 +3327,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
           p[poll_server+i].events |= POLLOUT;
         i++;
       }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
     if (0 == poll_server + num_connections)
       {
         free(p);
@@ -3358,7 +3380,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
                        MHD_NO);
         i++;
       }
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
     for (urh = daemon->urh_head; NULL != urh; urh = urhn)
       {
         if (i >= num_connections)
@@ -3403,7 +3425,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
             MHD_resume_connection(urh->connection);
           }
       }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
     /* handle 'listen' FD */
     if ( (-1 != poll_listen) &&
         (0 != (p[poll_listen].revents & POLLIN)) )
@@ -3528,7 +3550,7 @@ MHD_poll (struct MHD_Daemon *daemon,
 #define MAX_EVENTS 128
 
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
 
 /**
  * Do epoll()-based processing for TLS connections that have been
@@ -3602,7 +3624,7 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon)
     }
   return MHD_YES;
 }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
 
 /**
@@ -3617,9 +3639,9 @@ static int
 MHD_epoll (struct MHD_Daemon *daemon,
           int may_block)
 {
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   static const char *upgrade_marker = "upgrade_ptr";
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   struct MHD_Connection *pos;
   struct MHD_Connection *next;
   struct epoll_event events[MAX_EVENTS];
@@ -3629,9 +3651,9 @@ MHD_epoll (struct MHD_Daemon *daemon,
   int num_events;
   unsigned int i;
   unsigned int series_length;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
    _MHD_bool run_upgraded = 0;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
   if (-1 == daemon->epoll_fd)
     return MHD_NO; /* we're down! */
@@ -3658,7 +3680,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
        }
       daemon->listen_socket_in_epoll = MHD_YES;
     }
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if ( (MHD_NO == daemon->upgrade_fd_in_epoll) &&
        (-1 != daemon->epoll_upgrade_fd) )
     {
@@ -3678,7 +3700,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
        }
       daemon->upgrade_fd_in_epoll = MHD_YES;
     }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   if ( ( (MHD_YES == daemon->listen_socket_in_epoll) &&
          (daemon->connections == daemon->connection_limit) ) ||
        (MHD_YES == daemon->at_limit) )
@@ -3738,7 +3760,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
              that this event is not about a normal connection. */
          if (NULL == events[i].data.ptr)
            continue; /* shutdown signal! */
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
           if (upgrade_marker == events[i].data.ptr)
             {
               /* activity on an upgraded connection, we process
@@ -3746,7 +3768,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
               run_upgraded = !0;
               continue;
             }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
           /* UGH: we're storing pointers and fds in the same union
              here; incredibly ugly and somewhat risky, even though a
              pointer with the same numeric value as the itc.fd[0] can
@@ -3805,10 +3827,10 @@ MHD_epoll (struct MHD_Daemon *daemon,
         }
     }
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if (run_upgraded)
     run_epoll_for_upgrade (daemon);
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
   /* we handle resumes here because we may have ready connections
      that will not be placed into the epoll list immediately. */
@@ -4607,14 +4629,14 @@ setup_epoll_to_listen (struct MHD_Daemon *daemon)
   daemon->epoll_fd = setup_epoll_fd (daemon);
   if (-1 == daemon->epoll_fd)
     return MHD_NO;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if (0 != (MHD_ALLOW_UPGRADE & daemon->options))
     {
        daemon->epoll_upgrade_fd = setup_epoll_fd (daemon);
        if (MHD_INVALID_SOCKET == daemon->epoll_upgrade_fd)
          return MHD_NO;
     }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   if (MHD_INVALID_SOCKET == daemon->socket_fd)
     return MHD_YES; /* non-listening daemon */
   event.events = EPOLLIN;
@@ -4709,6 +4731,14 @@ MHD_start_daemon_va (unsigned int flags,
   if (0 != (flags & MHD_USE_TCP_FASTOPEN))
     return NULL;
 #endif
+  if (0 != (flags & MHD_ALLOW_UPGRADE))
+    {
+#ifdef UPGRADE_SUPPORT
+      flags |= MHD_USE_SUSPEND_RESUME;
+#else  /* ! UPGRADE_SUPPORT */
+      return NULL;
+#endif /* ! UPGRADE_SUPPORT */
+    }
   if (NULL == dh)
     return NULL;
   if (NULL == (daemon = malloc (sizeof (struct MHD_Daemon))))
@@ -4718,9 +4748,9 @@ MHD_start_daemon_va (unsigned int flags,
           sizeof (struct MHD_Daemon));
 #ifdef EPOLL_SUPPORT
   daemon->epoll_fd = -1;
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   daemon->epoll_upgrade_fd = -1;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 #endif
   /* try to open listen socket */
 #ifdef HTTPS_SUPPORT
@@ -4755,11 +4785,6 @@ MHD_start_daemon_va (unsigned int flags,
   daemon->custom_error_log = (MHD_LogCallback) &vfprintf;
   daemon->custom_error_log_cls = stderr;
 #endif
-  if (0 != (daemon->options & MHD_ALLOW_UPGRADE))
-    {
-      daemon->options |= MHD_USE_SUSPEND_RESUME;
-      flags |= MHD_USE_SUSPEND_RESUME;
-    }
 #ifdef HAVE_LISTEN_SHUTDOWN
   use_itc = (0 != (daemon->options & (MHD_USE_NO_LISTEN_SOCKET | 
MHD_USE_ITC)));
 #else
@@ -5368,7 +5393,7 @@ thread_failed:
   /* clean up basic memory state in 'daemon' and return NULL to
      indicate failure */
 #ifdef EPOLL_SUPPORT
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if (MHD_YES == daemon->upgrade_fd_in_epoll)
     {
       if (0 != epoll_ctl (daemon->epoll_fd,
@@ -5378,13 +5403,13 @@ thread_failed:
        MHD_PANIC (_("Failed to remove FD from epoll set\n"));
       daemon->upgrade_fd_in_epoll = MHD_NO;
     }
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
   if (-1 != daemon->epoll_fd)
     close (daemon->epoll_fd);
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if (-1 != daemon->epoll_upgrade_fd)
     close (daemon->epoll_upgrade_fd);
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 #endif /* EPOLL_SUPPORT */
 #ifdef DAUTH_SUPPORT
   free (daemon->nnc);
@@ -5413,15 +5438,17 @@ static void
 close_all_connections (struct MHD_Daemon *daemon)
 {
   struct MHD_Connection *pos;
-#ifdef HTTPS_SUPPORT
+  const _MHD_bool used_thr_p_c = (0 != (daemon->options & 
MHD_USE_THREAD_PER_CONNECTION));
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   struct MHD_UpgradeResponseHandle *urh;
   struct MHD_UpgradeResponseHandle *urhn;
   const _MHD_bool used_tls = (0 != (daemon->options & MHD_USE_TLS));
-#endif /* HTTPS_SUPPORT */
-  const _MHD_bool used_thr_p_c = (0 != (daemon->options & 
MHD_USE_THREAD_PER_CONNECTION));
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
+#ifdef UPGRADE_SUPPORT
   const _MHD_bool upg_allowed = (0 != (daemon->options & MHD_ALLOW_UPGRADE));
+#endif /* UPGRADE_SUPPORT */
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   /* give upgraded HTTPS connections a chance to finish */
   /* 'daemon->urh_head' is not used in thread-per-connection mode. */
   for (urh = daemon->urh_head; NULL != urh; urh = urhn)
@@ -5435,7 +5462,7 @@ close_all_connections (struct MHD_Daemon *daemon)
       /* Resuming will move connection to cleanup list. */
       MHD_resume_connection(urh->connection);
     }
-#endif
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
   /* Give suspended connections a chance to resume to avoid
      running into the check for there not being any suspended
@@ -5450,6 +5477,7 @@ close_all_connections (struct MHD_Daemon *daemon)
      traverse DLLs in peace... */
   if (used_thr_p_c)
     MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
+#ifdef UPGRADE_SUPPORT
   if (upg_allowed)
     {
       struct MHD_Connection * susp;
@@ -5483,7 +5511,9 @@ close_all_connections (struct MHD_Daemon *daemon)
           susp = susp->next;
         }
     }
-  else if (NULL != daemon->suspended_connections_head)
+  else /* This 'else' is combined with next 'if' */
+#endif /* UPGRADE_SUPPORT */
+  if (NULL != daemon->suspended_connections_head)
     MHD_PANIC (_("MHD_stop_daemon() called while we have suspended 
connections.\n"));
   for (pos = daemon->connections_head; NULL != pos; pos = pos->next)
     {
@@ -5518,6 +5548,7 @@ close_all_connections (struct MHD_Daemon *daemon)
       }
     }
 
+#ifdef UPGRADE_SUPPORT
   /* Finished threads with "upgraded" connections need to be moved
    * to cleanup list by resume_suspended_connections(). */
   /* "Upgraded" connections that were not closed explicitly by
@@ -5527,6 +5558,7 @@ close_all_connections (struct MHD_Daemon *daemon)
       daemon->resuming = MHD_YES; /* Force check for pending resume. */
       resume_suspended_connections (daemon);
     }
+#endif /* UPGRADE_SUPPORT */
 
   /* now that we're alone, move everyone to cleanup */
   while (NULL != (pos = daemon->connections_head))
@@ -5623,10 +5655,10 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
 #ifdef EPOLL_SUPPORT
               if (-1 != daemon->worker_pool[i].epoll_fd)
                 MHD_fd_close_chk_ (daemon->worker_pool[i].epoll_fd);
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
               if (-1 != daemon->worker_pool[i].epoll_upgrade_fd)
                 MHD_fd_close_chk_ (daemon->worker_pool[i].epoll_upgrade_fd);
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 #endif
               if (MHD_ITC_IS_VALID_ (daemon->worker_pool[i].itc) )
                 MHD_itc_destroy_chk_ (daemon->worker_pool[i].itc);
@@ -5672,11 +5704,11 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
   if ( (0 != (daemon->options & MHD_USE_EPOLL)) &&
        (-1 != daemon->epoll_fd) )
     MHD_socket_close_chk_ (daemon->epoll_fd);
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   if ( (0 != (daemon->options & MHD_USE_EPOLL)) &&
        (-1 != daemon->epoll_upgrade_fd) )
     MHD_socket_close_chk_ (daemon->epoll_upgrade_fd);
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 #endif
 
   /* TLS clean up */
diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h
index 451520f..755515d 100644
--- a/src/microhttpd/internal.h
+++ b/src/microhttpd/internal.h
@@ -295,6 +295,7 @@ struct MHD_Response
    */
   MHD_ContentReaderFreeCallback crfc;
 
+#ifdef UPGRADE_SUPPORT
   /**
    * Application function to call once we are done sending the headers
    * of the response; NULL unless this is a response created with
@@ -306,6 +307,7 @@ struct MHD_Response
    * Closure for @e uh.
    */
   void *upgrade_handler_cls;
+#endif /* UPGRADE_SUPPORT */
 
   /**
    * Mutex to synchronize access to @e data, @e size and
@@ -497,6 +499,7 @@ enum MHD_CONNECTION_STATE
    */
   MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_IN_CLEANUP + 1,
 
+#ifdef UPGRADE_SUPPORT
   /**
    * Connection was "upgraded" and socket is now under the
    * control of the application.
@@ -509,6 +512,7 @@ enum MHD_CONNECTION_STATE
    * internal cleanup.
    */
   MHD_CONNECTION_UPGRADE_CLOSED = MHD_CONNECTION_UPGRADE + 1
+#endif /* UPGRADE_SUPPORT */
 
 };
 
@@ -880,6 +884,7 @@ struct MHD_Connection
    */
   TransmitCallback send_cls;
 
+#ifdef UPGRADE_SUPPORT
   /**
    * If this connection was upgraded and if we are using
    * #MHD_USE_THREAD_PER_CONNECTION or #MHD_USE_TLS, this points to
@@ -888,6 +893,7 @@ struct MHD_Connection
    * bi-directional forwarding.
    */
   struct MHD_UpgradeResponseHandle *urh;
+#endif /* UPGRADE_SUPPORT */
 
 #ifdef HTTPS_SUPPORT
 
@@ -930,6 +936,7 @@ struct MHD_Connection
 };
 
 
+#ifdef UPGRADE_SUPPORT
 /**
  * Buffer we use for upgrade response handling in the unlikely
  * case where the memory pool was so small it had no buffer
@@ -1093,6 +1100,7 @@ struct MHD_UpgradeResponseHandle
    */
   int clean_ready;
 };
+#endif /* UPGRADE_SUPPORT */
 
 
 /**
@@ -1369,7 +1377,7 @@ struct MHD_Daemon
    */
   int listen_socket_in_epoll;
 
-#ifdef HTTPS_SUPPORT
+#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
   /**
    * File descriptor associated with the #run_epoll_for_upgrade() loop.
    * Only available if #MHD_USE_HTTPS_EPOLL_UPGRADE is set.
@@ -1381,7 +1389,7 @@ struct MHD_Daemon
    * #MHD_NO if not.
    */
   int upgrade_fd_in_epoll;
-#endif /* HTTPS_SUPPORT */
+#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
 
 #endif
 
@@ -1442,6 +1450,7 @@ struct MHD_Daemon
   uint16_t port;
 
 #ifdef HTTPS_SUPPORT
+#ifdef UPGRADE_SUPPORT
   /**
    * Head of DLL of upgrade response handles we are processing.
    * Used for upgraded TLS connections when thread-per-connection
@@ -1455,6 +1464,7 @@ struct MHD_Daemon
    * is not used.
    */
   struct MHD_UpgradeResponseHandle *urh_tail;
+#endif /* UPGRADE_SUPPORT */
 
   /**
    * Desired cipher algorithms.
@@ -1753,6 +1763,7 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
                      unsigned int *num_headers);
 
 
+#ifdef UPGRADE_SUPPORT
 /**
  * Finally cleanup upgrade-related resources. It should
  * be called when TLS buffers have been drained and
@@ -1762,5 +1773,6 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
  */
 void
 MHD_cleanup_upgraded_connection_ (struct MHD_Connection *connection);
+#endif /* UPGRADE_SUPPORT */
 
 #endif
diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c
index da2f538..17fe812 100644
--- a/src/microhttpd/response.c
+++ b/src/microhttpd/response.c
@@ -610,6 +610,7 @@ MHD_create_response_from_buffer (size_t size,
 }
 
 
+#ifdef UPGRADE_SUPPORT
 /**
  * This connection-specific callback is provided by MHD to
  * applications (unusual) during the #MHD_UpgradeHandler.
@@ -982,6 +983,7 @@ MHD_create_response_for_upgrade (MHD_UpgradeHandler 
upgrade_handler,
     }
   return response;
 }
+#endif /* UPGRADE_SUPPORT */
 
 
 /**
diff --git a/w32/common/MHD_config.h b/w32/common/MHD_config.h
index 548f6a6..bfa7ce8 100644
--- a/w32/common/MHD_config.h
+++ b/w32/common/MHD_config.h
@@ -38,6 +38,8 @@
 /* Enable error messages */
 #define HAVE_MESSAGES 1
 
+/* Enable HTTP Upgrade support. */
+#define UPGRADE_SUPPORT 1
 
 /* *** OS features *** */
 


hooks/post-receive
-- 
GNU libmicrohttpd



reply via email to

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