aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ftp.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index 3cbaf663d..bfe6e7a46 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2032,6 +2032,8 @@ CURLcode ftp_perform(struct connectdata *conn,
may not support it! It is however the only way we have to get a file's
size! */
ssize_t filesize;
+ ssize_t nread;
+ int ftpcode;
ftp->no_transfer = TRUE; /* this means no actual transfer is made */
@@ -2051,6 +2053,18 @@ CURLcode ftp_perform(struct connectdata *conn,
return result;
}
+ /* Determine if server can respond to REST command and therefore
+ whether it can do a range */
+ FTPSENDF(conn, "REST 0", NULL);
+ result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
+
+ if ((CURLE_OK == result) && (ftpcode == 350)) {
+ result = Curl_client_write(data, CLIENTWRITE_BOTH,
+ (char *)"Accept-ranges: bytes\r\n", 0);
+ if(result)
+ return result;
+ }
+
/* If we asked for a time of the file and we actually got one as
well, we "emulate" a HTTP-style header in our output. */