| From 9a7321872f6902dd829599aab02f193eec307ac7 Mon Sep 17 00:00:00 2001 |
| From: Thiago Santos <thiago.sousa.santos@collabora.com> |
| Date: Thu, 11 Jul 2013 20:41:23 -0300 |
| Subject: [PATCH 1/2] souphttpsrc: ignore errors from HEAD request |
| |
| HEAD requests are used to check the server headers to see if it |
| seekable. Ignore errors from those requests as they shouldn't be |
| critical. |
| |
| https://bugzilla.gnome.org/show_bug.cgi?id=704053 |
| --- |
| ext/soup/gstsouphttpsrc.c | 82 ++++++++++++++++++++++++++--------------------- |
| 1 file changed, 46 insertions(+), 36 deletions(-) |
| |
| diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c |
| index 79f6109..b7f6de0 100644 |
| --- a/ext/soup/gstsouphttpsrc.c |
| +++ b/ext/soup/gstsouphttpsrc.c |
| @@ -937,10 +937,15 @@ gst_soup_http_src_finished_cb (SoupMessage * msg, GstSoupHTTPSrc * src) |
| src->ret = GST_FLOW_CUSTOM_ERROR; |
| } else if (G_UNLIKELY (src->session_io_status != |
| GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_RUNNING)) { |
| - /* FIXME: reason_phrase is not translated, add proper error message */ |
| - GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, |
| - ("%s", msg->reason_phrase), |
| - ("libsoup status code %d", msg->status_code)); |
| + if (msg->method == SOUP_METHOD_HEAD) { |
| + GST_DEBUG_OBJECT (src, "Ignoring error %d:%s during HEAD request", |
| + msg->status_code, msg->reason_phrase); |
| + } else { |
| + /* FIXME: reason_phrase is not translated, add proper error message */ |
| + GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, |
| + ("%s", msg->reason_phrase), |
| + ("libsoup status code %d", msg->status_code)); |
| + } |
| } |
| if (src->loop) |
| g_main_loop_quit (src->loop); |
| @@ -1112,38 +1117,43 @@ static void |
| gst_soup_http_src_parse_status (SoupMessage * msg, GstSoupHTTPSrc * src) |
| { |
| if (SOUP_STATUS_IS_TRANSPORT_ERROR (msg->status_code)) { |
| - switch (msg->status_code) { |
| - case SOUP_STATUS_CANT_RESOLVE: |
| - case SOUP_STATUS_CANT_RESOLVE_PROXY: |
| - SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, NOT_FOUND, |
| - _("Could not resolve server name.")); |
| - src->ret = GST_FLOW_ERROR; |
| - break; |
| - case SOUP_STATUS_CANT_CONNECT: |
| - case SOUP_STATUS_CANT_CONNECT_PROXY: |
| - SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, OPEN_READ, |
| - _("Could not establish connection to server.")); |
| - src->ret = GST_FLOW_ERROR; |
| - break; |
| - case SOUP_STATUS_SSL_FAILED: |
| - SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, OPEN_READ, |
| - _("Secure connection setup failed.")); |
| - src->ret = GST_FLOW_ERROR; |
| - break; |
| - case SOUP_STATUS_IO_ERROR: |
| - SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, READ, |
| - _("A network error occured, or the server closed the connection " |
| - "unexpectedly.")); |
| - src->ret = GST_FLOW_ERROR; |
| - break; |
| - case SOUP_STATUS_MALFORMED: |
| - SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, READ, |
| - _("Server sent bad data.")); |
| - src->ret = GST_FLOW_ERROR; |
| - break; |
| - case SOUP_STATUS_CANCELLED: |
| - /* No error message when interrupted by program. */ |
| - break; |
| + if (msg->method == SOUP_METHOD_HEAD) { |
| + GST_DEBUG_OBJECT (src, "Ignoring error %d during HEAD request", |
| + msg->status_code); |
| + } else { |
| + switch (msg->status_code) { |
| + case SOUP_STATUS_CANT_RESOLVE: |
| + case SOUP_STATUS_CANT_RESOLVE_PROXY: |
| + SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, NOT_FOUND, |
| + _("Could not resolve server name.")); |
| + src->ret = GST_FLOW_ERROR; |
| + break; |
| + case SOUP_STATUS_CANT_CONNECT: |
| + case SOUP_STATUS_CANT_CONNECT_PROXY: |
| + SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, OPEN_READ, |
| + _("Could not establish connection to server.")); |
| + src->ret = GST_FLOW_ERROR; |
| + break; |
| + case SOUP_STATUS_SSL_FAILED: |
| + SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, OPEN_READ, |
| + _("Secure connection setup failed.")); |
| + src->ret = GST_FLOW_ERROR; |
| + break; |
| + case SOUP_STATUS_IO_ERROR: |
| + SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, READ, |
| + _("A network error occured, or the server closed the connection " |
| + "unexpectedly.")); |
| + src->ret = GST_FLOW_ERROR; |
| + break; |
| + case SOUP_STATUS_MALFORMED: |
| + SOUP_HTTP_SRC_ERROR (src, msg, RESOURCE, READ, |
| + _("Server sent bad data.")); |
| + src->ret = GST_FLOW_ERROR; |
| + break; |
| + case SOUP_STATUS_CANCELLED: |
| + /* No error message when interrupted by program. */ |
| + break; |
| + } |
| } |
| } else if (SOUP_STATUS_IS_CLIENT_ERROR (msg->status_code) || |
| SOUP_STATUS_IS_REDIRECTION (msg->status_code) || |
| -- |
| 1.8.3.2 |
| |