From 8cfaa76a5e77a8cf9768a5315646647610ff49c7 Mon Sep 17 00:00:00 2001 From: Stephan Holljes Date: Thu, 4 Jun 2015 01:20:28 +0200 Subject: [PATCH] lavf/http: Rudimentary error handling for HTTP requests received from clients. Signed-off-by: Stephan Holljes --- libavformat/http.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libavformat/http.c b/libavformat/http.c index e51f524560..a5b3e2942d 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -299,6 +299,23 @@ int ff_http_averror(int status_code, int default_averror) return default_averror; } +static void handle_http_errors(URLContext *h, int error) +{ + static const char bad_request[] = "HTTP/1.1 400 Bad Request\r\nContent-Type: text/plain\r\n\r\n400 Bad Request\r\n"; + static const char internal_server_error[] = "HTTP/1.1 500 Internal server error\r\nContent-Type: text/plain\r\n\r\n500 Internal server error\r\n"; + HTTPContext *s = h->priv_data; + if (h->is_connected) { + switch(error) { + case AVERROR_HTTP_BAD_REQUEST: + ffurl_write(s->hd, bad_request, strlen(bad_request)); + break; + default: + av_log(h, AV_LOG_ERROR, "Unhandled HTTP error.\n"); + ffurl_write(s->hd, internal_server_error, strlen(internal_server_error)); + } + } +} + static int http_listen(URLContext *h, const char *uri, int flags, AVDictionary **options) { HTTPContext *s = h->priv_data; @@ -325,6 +342,7 @@ static int http_listen(URLContext *h, const char *uri, int flags, return 0; fail: + handle_http_errors(h, ret); av_dict_free(&s->chained_options); return ret; }