diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/http.c | 8 | ||||
-rw-r--r-- | lib/transfer.c | 22 |
2 files changed, 23 insertions, 7 deletions
diff --git a/lib/http.c b/lib/http.c index 80484975f..ee5b81ff6 100644 --- a/lib/http.c +++ b/lib/http.c @@ -553,6 +553,14 @@ int Curl_http_should_fail(struct connectdata *conn) if (k->httpcode < 400) return 0; + if (conn->resume_from && + (data->set.httpreq==HTTPREQ_GET) && + (k->httpcode == 416)) { + /* "Requested Range Not Satisfiable", just proceed and + pretend this is no error */ + return 0; + } + /* ** Any code >= 400 that's not 401 or 407 is always ** a terminal error diff --git a/lib/transfer.c b/lib/transfer.c index 14512a774..904dbd15b 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -487,7 +487,6 @@ CURLcode Curl_readwrite(struct connectdata *conn, (100 == k->httpcode)?conn->headerbytecount:0; if (conn->resume_from && - !k->content_range && (data->set.httpreq==HTTPREQ_GET) && (k->httpcode == 416)) { /* "Requested Range Not Satisfiable" */ @@ -613,10 +612,19 @@ CURLcode Curl_readwrite(struct connectdata *conn, (k->httpcode >= 400) && (k->httpcode != 401) && (k->httpcode != 407)) { - /* serious error, go home! */ - failf (data, "The requested URL returned error: %d", - k->httpcode); - return CURLE_HTTP_RETURNED_ERROR; + + if (conn->resume_from && + (data->set.httpreq==HTTPREQ_GET) && + (k->httpcode == 416)) { + /* "Requested Range Not Satisfiable", just proceed and + pretend this is no error */ + } + else { + /* serious error, go home! */ + failf (data, "The requested URL returned error: %d", + k->httpcode); + return CURLE_HTTP_RETURNED_ERROR; + } } if(k->httpversion == 10) @@ -954,8 +962,8 @@ CURLcode Curl_readwrite(struct connectdata *conn, /* we wanted to resume a download, although the server doesn't * seem to support this and we did this with a GET (if it * wasn't a GET we did a POST or PUT resume) */ - failf (data, "HTTP server doesn't seem to support " - "byte ranges. Cannot resume."); + failf(data, "HTTP server doesn't seem to support " + "byte ranges. Cannot resume."); return CURLE_HTTP_RANGE_ERROR; } |