Changelog
Daniel Stenberg (29 Sep 2008)
+- Ian Lynagh provided a patch that now makes CURLOPT_RANGE work fine for SFTP
+ downloads!
+
- Maxim Ivanov filed bug report #2107803
(http://curl.haxx.se/bug/view.cgi?id=2107803) "no CURLINFO_REDIRECT_URL in
multi mode" together with a patch that fixed the problem.
o removed the use of mktime() and gmtime(_r)() in date parsing and conversions
o HTTP Digest with a blank realm did wrong
o CURLINFO_REDIRECT_URL didn't work with the multi interface
+ o CURLOPT_RANGE now works for SFTP downloads
This release includes the following known bugs:
Keith Mok, Yang Tse, Daniel Fandrich, Guenter Knauf, Dmitriy Sergeyev,
Linus Nielsen Feltzing, Martin Drasar, Stefan Krause, Dmitry Kurochkin,
Mike Revi, Andres Garcia, Michael Goffioul, Markus Moeller, Rob Crittenden,
- Jamie Lokier, Emanuele Bovisio, Maxim Ivanov
+ Jamie Lokier, Emanuele Bovisio, Maxim Ivanov, Ian Lynagh
Thanks! (and sorry if I forgot to mention someone)
possibly the same or related to "Potential issue when using the new
PRIMARY_IP metric"
-176 - "SFTP and CURLOPT_RANGE"
-
177 - "[Patch] Disable proxy support"
178 - "[Patch] Disable multi API support"
#include "inet_ntop.h"
#include "parsedate.h" /* for the week day and month names */
#include "sockaddr.h" /* required for Curl_sockaddr_storage */
+#include "strtoofft.h"
#include "multiif.h"
#define _MPRINTF_REPLACE /* use our functions only */
data->req.maxdownload = -1;
}
else {
- data->req.size = attrs.filesize;
- data->req.maxdownload = attrs.filesize;
- Curl_pgrsSetDownloadSize(data, attrs.filesize);
+ curl_off_t size;
+
+ size = attrs.filesize;
+ if(conn->data->state.use_range) {
+ curl_off_t from, to;
+ char *ptr;
+ char *ptr2;
+
+ from=curlx_strtoofft(conn->data->state.range, &ptr, 0);
+ while(ptr && *ptr && (isspace((int)*ptr) || (*ptr=='-')))
+ ptr++;
+ to=curlx_strtoofft(ptr, &ptr2, 0);
+ if ((ptr == ptr2) /* no "to" value given */
+ || (to > size)) {
+ to = size;
+ }
+ if (from > to) {
+ from = to;
+ size = 0;
+ }
+ else {
+ size = to - from + 1;
+ }
+
+ libssh2_sftp_seek(conn->proto.sshc.sftp_handle, from);
+ }
+ data->req.size = size;
+ data->req.maxdownload = size;
+ Curl_pgrsSetDownloadSize(data, size);
}
/* We can resume if we can seek to the resume position */