aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--RELEASE-NOTES3
-rw-r--r--TODO-RELEASE2
-rw-r--r--lib/ssh.c33
4 files changed, 35 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index a683aa8a5..8b9f552c4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@
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.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 4ff8386a4..7a71b6824 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -29,6 +29,7 @@ This release includes the following bugfixes:
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:
@@ -44,6 +45,6 @@ advice from friends like these:
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)
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 66d8ff56c..8b9af6f32 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -17,8 +17,6 @@ To be addressed before 7.19.1 (planned release: October/November 2008)
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"
diff --git a/lib/ssh.c b/lib/ssh.c
index b968dcf36..005eb265f 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -101,6 +101,7 @@
#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 */
@@ -1631,9 +1632,35 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
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 */