[vlc-devel] [PATCH 4/5] httpd: set timeout duration per host rather than client

Steve Lhomme robux4 at ycbcr.xyz
Mon Nov 23 08:49:01 CET 2020


On 2020-11-22 17:53, remi at remlab.net wrote:
> From: RĂ©mi Denis-Courmont <remi at remlab.net>
> 
> ---
>   src/network/httpd.c | 31 +++++++++++++++----------------
>   1 file changed, 15 insertions(+), 16 deletions(-)
> 
> diff --git a/src/network/httpd.c b/src/network/httpd.c
> index 5a8aea918d..9a0a352566 100644
> --- a/src/network/httpd.c
> +++ b/src/network/httpd.c
> @@ -96,6 +96,7 @@ struct httpd_host_t
>   
>       size_t client_count;
>       struct vlc_list clients;
> +    unsigned timeout_sec;

Why use an unsigned when we have a type to represent time/duration ? It 
was the type used so far. And it makes hardcoded constants like 10 or 0 
easier to understand.

>   
>       /* TLS data */
>       vlc_tls_server_t *p_tls;
> @@ -147,7 +148,6 @@ struct httpd_client_t
>       uint8_t i_state;
>   
>       vlc_tick_t i_timeout_date;
> -    vlc_tick_t i_activity_timeout;
>   
>       /* buffer for reading header */
>       int     i_buffer_size;
> @@ -882,12 +882,13 @@ void httpd_StreamDelete(httpd_stream_t *stream)
>    *****************************************************************************/
>   static void* httpd_HostThread(void *);
>   static httpd_host_t *httpd_HostCreate(vlc_object_t *, const char *,
> -                                       const char *, vlc_tls_server_t *);
> +                                      const char *, vlc_tls_server_t *,
> +                                      unsigned);
>   
>   /* create a new host */
>   httpd_host_t *vlc_http_HostNew(vlc_object_t *p_this)
>   {
> -    return httpd_HostCreate(p_this, "http-host", "http-port", NULL);
> +    return httpd_HostCreate(p_this, "http-host", "http-port", NULL, 10);
>   }
>   
>   httpd_host_t *vlc_https_HostNew(vlc_object_t *obj)
> @@ -911,12 +912,13 @@ httpd_host_t *vlc_https_HostNew(vlc_object_t *obj)
>       free(key);
>       free(cert);
>   
> -    return httpd_HostCreate(obj, "http-host", "https-port", tls);
> +    return httpd_HostCreate(obj, "http-host", "https-port", tls, 10);
>   }
>   
>   httpd_host_t *vlc_rtsp_HostNew(vlc_object_t *p_this)
>   {
> -    return httpd_HostCreate(p_this, "rtsp-host", "rtsp-port", NULL);
> +    /* XXX: for QT I have to disable timeout. Try to find why */
> +    return httpd_HostCreate(p_this, "rtsp-host", "rtsp-port", NULL, 0);
>   }
>   
>   static struct httpd
> @@ -928,7 +930,8 @@ static struct httpd
>   static httpd_host_t *httpd_HostCreate(vlc_object_t *p_this,
>                                          const char *hostvar,
>                                          const char *portvar,
> -                                       vlc_tls_server_t *p_tls)
> +                                       vlc_tls_server_t *p_tls,
> +                                       unsigned timeout_sec)
>   {
>       httpd_host_t *host;
>       unsigned port = var_InheritInteger(p_this, portvar);
> @@ -975,6 +978,7 @@ static httpd_host_t *httpd_HostCreate(vlc_object_t *p_this,
>       vlc_list_init(&host->urls);
>       host->client_count = 0;
>       vlc_list_init(&host->clients);
> +    host->timeout_sec = timeout_sec;
>       host->p_tls    = p_tls;
>   
>       /* create the thread */
> @@ -1222,7 +1226,7 @@ static void httpd_ClientDestroy(httpd_client_t *cl)
>       free(cl);
>   }
>   
> -static httpd_client_t *httpd_ClientNew(vlc_tls_t *sock, vlc_tick_t now)
> +static httpd_client_t *httpd_ClientNew(vlc_tls_t *sock)
>   {
>       httpd_client_t *cl = malloc(sizeof(httpd_client_t));
>   
> @@ -1231,8 +1235,6 @@ static httpd_client_t *httpd_ClientNew(vlc_tls_t *sock, vlc_tick_t now)
>       cl->sock    = sock;
>       cl->url     = NULL;
>       cl->i_state = HTTPD_CLIENT_RECEIVING;
> -    cl->i_activity_timeout = VLC_TICK_FROM_SEC(10);
> -    cl->i_timeout_date = now + cl->i_activity_timeout;
>       cl->i_buffer_size = HTTPD_CL_BUFSIZE;
>       cl->i_buffer = 0;
>       cl->p_buffer = xmalloc(cl->i_buffer_size);
> @@ -1565,10 +1567,6 @@ static int httpd_ClientRecv(httpd_client_t *cl)
>           return 0;
>       }
>   
> -    /* XXX: for QT I have to disable timeout. Try to find why */
> -    if (cl->query.i_proto == HTTPD_PROTO_RTSP)
> -        cl->i_activity_timeout = 0;
> -
>       return 0;
>   }
>   
> @@ -1738,14 +1736,14 @@ static void httpdLoop(httpd_host_t *host)
>           }
>   
>           if (cl->i_state == HTTPD_CLIENT_DEAD
> -         || (cl->i_activity_timeout > 0 && cl->i_timeout_date < now)) {
> +         || (host->timeout_sec > 0 && cl->i_timeout_date < now)) {
>               host->client_count--;
>               httpd_ClientDestroy(cl);
>               continue;
>           }
>   
>           if (val == 0) {
> -            cl->i_timeout_date = now + cl->i_activity_timeout;
> +            cl->i_timeout_date = now + VLC_TICK_FROM_SEC(host->timeout_sec);
>               delay = 0;
>           }
>   
> @@ -2035,7 +2033,7 @@ static void httpdLoop(httpd_host_t *host)
>               sk = tls;
>           }
>   
> -        cl = httpd_ClientNew(sk, now);
> +        cl = httpd_ClientNew(sk);
>   
>           if (unlikely(cl == NULL))
>           {
> @@ -2046,6 +2044,7 @@ static void httpdLoop(httpd_host_t *host)
>           if (host->p_tls != NULL)
>               cl->i_state = HTTPD_CLIENT_TLS_HS_OUT;
>   
> +        cl->i_timeout_date = now + VLC_TICK_FROM_SEC(host->timeout_sec);
>           host->client_count++;
>           vlc_list_append(&cl->node, &host->clients);
>       }
> -- 
> 2.29.2
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list