From patchwork Tue Nov 29 21:38:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 1606 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.65.86 with SMTP id o83csp35952vsa; Tue, 29 Nov 2016 13:38:37 -0800 (PST) X-Received: by 10.28.220.5 with SMTP id t5mr25054191wmg.80.1480455516969; Tue, 29 Nov 2016 13:38:36 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 62si4215204wml.99.2016.11.29.13.38.36; Tue, 29 Nov 2016 13:38:36 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 38751689EE9; Tue, 29 Nov 2016 23:38:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vie01a-dmta-pe04-2.mx.upcmail.net (vie01a-dmta-pe04-2.mx.upcmail.net [62.179.121.164]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 31664680B17 for ; Tue, 29 Nov 2016 23:38:22 +0200 (EET) Received: from [172.31.216.43] (helo=vie01a-pemc-psmtp-pe01) by vie01a-dmta-pe04.mx.upcmail.net with esmtp (Exim 4.87) (envelope-from ) id 1cBq6e-00043a-BI for ffmpeg-devel@ffmpeg.org; Tue, 29 Nov 2016 22:38:28 +0100 Received: from localhost ([213.47.41.20]) by vie01a-pemc-psmtp-pe01 with SMTP @ mailcloud.upcmail.net id DxeT1u00K0S5wYM01xeUXD; Tue, 29 Nov 2016 22:38:28 +0100 X-SourceIP: 213.47.41.20 From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Tue, 29 Nov 2016 22:38:26 +0100 Message-Id: <20161129213826.13852-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.10.2 Subject: [FFmpeg-devel] [PATCH] ffserver: Add client requested urls to the status page X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Reynaldo Verdejo MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fixes Ticket3791 Signed-off-by: Michael Niedermayer --- ffserver.c | 38 +++++++++++++++++++++++++++++++++++--- tests/ffserver-regression.sh | 2 +- tests/ffserver.regression.ref | 2 +- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/ffserver.c b/ffserver.c index 20f5995..8745181 100644 --- a/ffserver.c +++ b/ffserver.c @@ -164,6 +164,7 @@ typedef struct HTTPContext { char protocol[16]; char method[16]; char url[128]; + char clean_url[128*7]; int buffer_size; uint8_t *buffer; int is_packetized; /* if true, the stream is packetized */ @@ -1920,6 +1921,34 @@ static inline void print_stream_params(AVIOContext *pb, FFServerStream *stream) avio_printf(pb, "\n"); } +static void clean_html(char *clean, int clean_len, char *dirty) +{ + int i, o; + + for (o = i = 0; o+10 < clean_len && dirty[i];) { + int len = strspn(dirty+i, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$-_.+!*(),?/ :;%"); + if (len) { + if (o + len >= clean_len) + break; + memcpy(clean + o, dirty + i, len); + i += len; + o += len; + } else { + int c = dirty[i++]; + switch (c) { + case '&': av_strlcat(clean+o, "&" , clean_len - o); break; + case '<': av_strlcat(clean+o, "<" , clean_len - o); break; + case '>': av_strlcat(clean+o, ">" , clean_len - o); break; + case '\'': av_strlcat(clean+o, "'" , clean_len - o); break; + case '\"': av_strlcat(clean+o, """ , clean_len - o); break; + default: av_strlcat(clean+o, "☹", clean_len - o); break; + } + o += strlen(clean+o); + } + } + clean[o] = 0; +} + static void compute_status(HTTPContext *c) { HTTPContext *c1; @@ -2107,7 +2136,7 @@ static void compute_status(HTTPContext *c) current_bandwidth, config.max_bandwidth); avio_printf(pb, "\n"); - avio_printf(pb, "
#FileIPProtoStateTarget " + avio_printf(pb, "
#FileIPURLProtoStateTarget " "bit/sActual bit/sBytes transferred\n"); c1 = first_http_ctx; i = 0; @@ -2127,10 +2156,13 @@ static void compute_status(HTTPContext *c) i++; p = inet_ntoa(c1->from_addr.sin_addr); - avio_printf(pb, "
%d%s%s%s%s%s" + clean_html(c1->clean_url, sizeof(c1->clean_url), c1->url); + avio_printf(pb, "
%d%s%s%s%s%s%s" "", i, c1->stream ? c1->stream->filename : "", - c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "", p, + c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "", + p, + c1->clean_url, c1->protocol, http_state[c1->state]); fmt_bytecount(pb, bitrate); avio_printf(pb, ""); diff --git a/tests/ffserver-regression.sh b/tests/ffserver-regression.sh index b776bad..17e9060 100755 --- a/tests/ffserver-regression.sh +++ b/tests/ffserver-regression.sh @@ -28,7 +28,7 @@ sleep 2 fi do_md5sum ff-$file >>ffserver.regression done - wget $WGET_OPTIONS -O - teststat.html http://localhost:9999/teststat.html > ff-stat 2>/dev/null + wget $WGET_OPTIONS -O - 'http://localhost:9999/teststat.html?abc' > ff-stat 2>/dev/null do_md5sum ff-stat >>ffserver.regression ) kill $FFSERVER_PID diff --git a/tests/ffserver.regression.ref b/tests/ffserver.regression.ref index ec7b37c..8629d52 100644 --- a/tests/ffserver.regression.ref +++ b/tests/ffserver.regression.ref @@ -8,4 +8,4 @@ d41d8cd98f00b204e9800998ecf8427e *ff-test_l.rm 4c887dfc1dd0f6ea1a3a2be6dd32e495 *ff-test.jpg 1d04b73b04aad27793cc762d5afabac1 *ff-test_small.jpg bc36c40ee34ebee6ffe50f3094aab733 *ff-test.mjpg -9b72c3d6d89a038fa141fe636baa2c0e *ff-stat +56c8b3ba2c4f3eebfa6d2a895e042ee3 *ff-stat