diff options
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | docs/TODO | 3 | ||||
-rw-r--r-- | lib/http.c | 8 | ||||
-rw-r--r-- | lib/transfer.c | 22 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test194 | 46 |
6 files changed, 79 insertions, 8 deletions
@@ -7,6 +7,12 @@ Changelog Daniel (25 October 2004) +- Tomas Pospisek filed bug report #1053287 that proved -C - and --fail on a + file that was already completely downloaded caused an error, while it + doesn't if you don't use --fail! I added test case 194 to verify the fix. + Grrr. CURLOPT_FAILONERROR is now added to the list stuff to remove in + libcurl v8 due to all the kludges needed to support it. + - Mohun Biswas found out that formposting a zero-byte file didn't work very good. I fixed. @@ -250,3 +250,6 @@ TODO They will instead become curlx_ - alternatives. That makes the curl app still capable of building with them from source. + + * Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird + internally. Let the app judge success or not for itself. 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; } diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 0f63d5f6f..7298caf7a 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -27,7 +27,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test172 test204 test205 test173 test174 test175 test176 test177 \ test513 test514 test178 test179 test180 test181 test182 test183 \ test184 test185 test186 test187 test188 test189 test191 test192 \ - test193 + test193 test194 # The following tests have been removed from the dist since they no longer # work. We need to fix the test suite's FTPS server first, then bring them diff --git a/tests/data/test194 b/tests/data/test194 new file mode 100644 index 000000000..4e6e0f386 --- /dev/null +++ b/tests/data/test194 @@ -0,0 +1,46 @@ +# Server-side +<reply> +<data> +HTTP/1.1 416 Requested Range Not Satisfiable swsclose
+Date: Fri, 24 Oct 2003 21:33:12 GMT
+Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
+Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
+ETag: "ab57a-507-3f9968f3"
+Accept-Ranges: bytes
+Content-Length: 87
+Content-Range: bytes */87
+Content-Type: image/gif
+Connection: close
+
+</data> + +</reply> + +# Client-side +<client> +<server> +http +</server> + <name> +HTTP resume transfer with the whole file already downloaded and --fail + </name> + <command> +http://%HOSTIP:%HTTPPORT/want/194 -C 87 --fail +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET /want/194 HTTP/1.1
+Range: bytes=87-
+Host: 127.0.0.1:%HTTPPORT
+Pragma: no-cache
+Accept: */*
+
+</protocol> + +</verify> |