[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