summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <daniel.silverstone@codethink.co.uk>2023-04-26 09:44:57 +0100
committerDaniel Stenberg <daniel@haxx.se>2023-05-15 13:20:47 +0200
commite915b6904c02294dc5ccd9b7c95d46af2839dd1c (patch)
treea4abacc77e8c530b19971e7db3ac74bc96b24f21
parentf157610d30e981b2f5553c0f212adfdc75881ab5 (diff)
downloadcurl-e915b6904c02294dc5ccd9b7c95d46af2839dd1c.tar.gz
ssh: Add support for libssh2 read timeout
Hook the new (1.11.0 or newer) libssh2 support for setting a read timeout into the SERVER_RESPONSE_TIMEOUT option. With this done, clients can use the standard curl response timeout setting to also control the time that libssh2 will wait for packets from a slow server. This is necessary to enable use of very slow SFTP servers. Signed-off-by: Daniel Silverstone <daniel.silverstone@codethink.co.uk> Closes #10965
-rw-r--r--docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.35
-rw-r--r--lib/vssh/libssh2.c10
2 files changed, 14 insertions, 1 deletions
diff --git a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3 b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
index 69d892e65..46d6fdaa7 100644
--- a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
+++ b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
@@ -45,7 +45,7 @@ This option was formerly known as \fBCURLOPT_FTP_RESPONSE_TIMEOUT\fP.
.SH DEFAULT
None
.SH PROTOCOLS
-FTP, IMAP, POP3 and SMTP
+FTP, IMAP, POP3, SMTP, and SSH
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
@@ -60,6 +60,9 @@ if(curl) {
.fi
.SH AVAILABILITY
Added in 7.10.8. Used under this name since 7.20.0
+
+Support for SSH is predicated on a new enough (1.11.0) version of libssh2
+being available when compiling libcurl.
.SH RETURN VALUE
Returns CURLE_OK if supported, and CURLE_UNKNOWN_OPTION if not. Returns
CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value or a value that when
diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c
index dd39a844c..14c2784fe 100644
--- a/lib/vssh/libssh2.c
+++ b/lib/vssh/libssh2.c
@@ -3280,6 +3280,16 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done)
return CURLE_FAILED_INIT;
}
+#ifdef HAVE_LIBSSH2_VERSION
+ /* Set the packet read timeout if the libssh2 version supports it */
+#if LIBSSH2_VERSION_NUM >= 0x010B00
+ if(data->set.server_response_timeout > 0) {
+ libssh2_session_set_read_timeout(sshc->ssh_session,
+ data->set.server_response_timeout / 1000);
+ }
+#endif
+#endif
+
#ifndef CURL_DISABLE_PROXY
if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) {
/*