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
This commit is contained in:
Daniel Silverstone 2023-04-26 09:44:57 +01:00 committed by Daniel Stenberg
parent f157610d30
commit e915b6904c
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 14 additions and 1 deletions

View File

@ -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

View File

@ -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) {
/*