ah: allow configurable ah hold timeout
authorAndy Green <andy@warmcat.com>
Wed, 26 Jul 2017 03:49:41 +0000 (11:49 +0800)
committerAndy Green <andy@warmcat.com>
Wed, 26 Jul 2017 03:49:41 +0000 (11:49 +0800)
lib/context.c
lib/libwebsockets.h
lib/parsers.c
lib/private-libwebsockets.h

index 93cef20..27c8224 100644 (file)
@@ -470,6 +470,11 @@ lws_create_vhost(struct lws_context *context,
        else
                vh->keepalive_timeout = 5;
 
+       if (info->timeout_secs_ah_idle)
+               vh->timeout_secs_ah_idle = info->timeout_secs_ah_idle;
+       else
+               vh->timeout_secs_ah_idle = 10;
+
        /*
         * give the vhost a unified list of protocols including the
         * ones that came from plugins
index 48ef9e2..ef8efca 100644 (file)
@@ -2115,6 +2115,9 @@ struct lws_context_creation_info {
         * the form SSL_CB_ALERT, defined in openssl/ssl.h.  The default of
         * 0 means no info events will be reported.
         */
+       unsigned int timeout_secs_ah_idle;
+       /**< VHOST: seconds to allow a client to hold an ah without using it.
+        * 0 defaults to 10s. */
 
        void *_unused[8]; /**< dummy */
 };
@@ -3670,6 +3673,7 @@ enum pending_timeout {
        PENDING_TIMEOUT_KILLED_BY_SSL_INFO                      = 22,
        PENDING_TIMEOUT_KILLED_BY_PARENT                        = 23,
        PENDING_TIMEOUT_CLOSE_SEND                              = 24,
+       PENDING_TIMEOUT_HOLDING_AH                              = 25,
 
        /****** add new things just above ---^ ******/
 };
index 172de1d..2f4799e 100644 (file)
@@ -92,6 +92,10 @@ lws_header_table_reset(struct lws *wsi, int autoservice)
        /* since we will restart the ah, our new headers are not completed */
        wsi->hdr_parsing_completed = 0;
 
+       /* while we hold the ah, keep a timeout on the wsi */
+       lws_set_timeout(wsi, PENDING_TIMEOUT_HOLDING_AH,
+                       wsi->vhost->timeout_secs_ah_idle);
+
        /*
         * if we inherited pending rx (from socket adoption deferred
         * processing), apply and free it.
index a527661..1fd06b1 100644 (file)
@@ -891,6 +891,7 @@ struct lws_vhost {
        int ka_probes;
        int ka_interval;
        int keepalive_timeout;
+       int timeout_secs_ah_idle;
        int ssl_info_event_mask;
 #ifdef LWS_WITH_ACCESS_LOG
        int log_fd;