souphttpsrc: retry request on early termination from the server
authorArnaud Vrac <avrac@freebox.fr>
Thu, 19 Jan 2017 10:08:11 +0000 (11:08 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 26 Jan 2017 13:59:46 +0000 (15:59 +0200)
Fix a regression introduced by commit 183695c61a54f1 (refactor to use
Soup's sync API). The code previously attempted to reconnect when the
server closed the connection early, for example when the stream was put
in pause for some time.

Reintroduce this feature by checking if EOS is received before the
expected content size is downloaded. In this case, do the request
starting at the previous read position.

https://bugzilla.gnome.org/show_bug.cgi?id=776720

ext/soup/gstsouphttpsrc.c

index 73f9e1c55d48d6cb688b1c22da4d8b18ca1d10ed..78ca199ef3e12dfd48386b01fd841418a36179a0 100644 (file)
@@ -1467,7 +1467,7 @@ gst_soup_http_src_do_request (GstSoupHTTPSrc * src, const gchar * method)
   GST_LOG_OBJECT (src, "Running request for method: %s", method);
 
   /* Update the position if we are retrying */
-  if (src->msg && (src->request_position != src->read_position)) {
+  if (src->msg && src->request_position > 0) {
     gst_soup_http_src_add_range_header (src, src->request_position,
         src->stop_position);
   }
@@ -1637,7 +1637,8 @@ gst_soup_http_src_read_buffer (GstSoupHTTPSrc * src, GstBuffer ** outbuf)
     }
   } else {
     gst_buffer_unref (*outbuf);
-    if (read_bytes < 0) {
+    if (read_bytes < 0 ||
+        (src->have_size && src->read_position < src->content_size)) {
       /* Maybe the server disconnected, retry */
       ret = GST_FLOW_CUSTOM_ERROR;
     } else {