]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/http.c
Merge commit '9ad1e0c12caa440de860bd8f2122beb11d73815c'
[ffmpeg] / libavformat / http.c
index 1eb716b1071eb560911e84d0a6803094d5435945..dfe04ad63af81503fddbcef74b3ce54782bf8d33 100644 (file)
@@ -399,9 +399,9 @@ static int http_handshake(URLContext *c)
     switch (ch->handshake_step) {
     case LOWER_PROTO:
         av_log(c, AV_LOG_TRACE, "Lower protocol\n");
-        if ((ret = ffurl_handshake(cl) > 0))
+        if ((ret = ffurl_handshake(cl)) > 0)
             return 2 + ret;
-        if ((ret < 0))
+        if (ret < 0)
             return ret;
         ch->handshake_step = READ_HEADERS;
         ch->is_connected_server = 1;
@@ -714,7 +714,7 @@ static int process_line(URLContext *h, char *line, int line_count,
         if (s->is_connected_server) {
             // HTTP method
             method = p;
-            while (!av_isspace(*p))
+            while (*p && !av_isspace(*p))
                 p++;
             *(p++) = '\0';
             av_log(h, AV_LOG_TRACE, "Received method: %s\n", method);
@@ -751,7 +751,7 @@ static int process_line(URLContext *h, char *line, int line_count,
             while (av_isspace(*p))
                 p++;
             version = p;
-            while (!av_isspace(*p))
+            while (*p && !av_isspace(*p))
                 p++;
             *p = '\0';
             if (av_strncasecmp(version, "HTTP/", 5)) {
@@ -1242,7 +1242,7 @@ static int http_read_stream(URLContext *h, uint8_t *buf, int size)
 #endif /* CONFIG_ZLIB */
     read_ret = http_buf_read(h, buf, size);
     if (read_ret < 0 && s->reconnect && !h->is_streamed && s->filesize > 0 && s->off < s->filesize) {
-        av_log(h, AV_LOG_INFO, "Will reconnect at %"PRId64".\n", s->off);
+        av_log(h, AV_LOG_INFO, "Will reconnect at %"PRId64" error=%s.\n", s->off, av_err2str(read_ret));
         seek_ret = http_seek_internal(h, s->off, SEEK_SET, 1);
         if (seek_ret != s->off) {
             av_log(h, AV_LOG_ERROR, "Failed to reconnect at %"PRId64".\n", s->off);
@@ -1427,7 +1427,7 @@ static int64_t http_seek_internal(URLContext *h, int64_t off, int whence, int fo
              ((whence == SEEK_CUR && off == 0) ||
               (whence == SEEK_SET && off == s->off)))
         return s->off;
-    else if ((s->filesize == -1 && whence == SEEK_END) || h->is_streamed)
+    else if ((s->filesize == -1 && whence == SEEK_END))
         return AVERROR(ENOSYS);
 
     if (whence == SEEK_CUR)
@@ -1440,6 +1440,9 @@ static int64_t http_seek_internal(URLContext *h, int64_t off, int whence, int fo
         return AVERROR(EINVAL);
     s->off = off;
 
+    if (s->off && h->is_streamed)
+        return AVERROR(ENOSYS);
+
     /* we save the old context in case the seek fails */
     old_buf_size = s->buf_end - s->buf_ptr;
     memcpy(old_buf, s->buf_ptr, old_buf_size);