diff --git a/lib/ftp.c b/lib/ftp.c index 3cbaf663d2141bad4ffe45569ed7dccc95a40bd0..bfe6e7a4662f07516dc9be9af618a4c594e8aaca 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. */