libssh: Use sftp_aio instead of sftp_async for sftp_recv

This commit replaces the usage of the old deprecated
sftp_async API with the new sftp_aio API for remote
file reading.

Signed-off-by: Eshan Kelkar <eshankelkar@galorithm.com>
This commit is contained in:
Eshan Kelkar 2025-05-24 01:56:40 +05:30
parent b81d51e904
commit a2f93579b7
2 changed files with 27 additions and 1 deletions

View file

@ -1464,6 +1464,11 @@ static int myssh_in_SFTP_SHUTDOWN(struct Curl_easy *data,
sftp_aio_free(sshc->sftp_send_aio);
sshc->sftp_send_aio = NULL;
}
if(sshc->sftp_recv_aio) {
sftp_aio_free(sshc->sftp_recv_aio);
sshc->sftp_recv_aio = NULL;
}
#endif
if(sshc->sftp_file) {
@ -3101,16 +3106,28 @@ static CURLcode sftp_recv(struct Curl_easy *data, int sockindex,
switch(sshc->sftp_recv_state) {
case 0:
#if LIBSSH_VERSION_INT > SSH_VERSION_INT(0, 11, 0)
if(sftp_aio_begin_read(sshc->sftp_file, len,
&sshc->sftp_recv_aio) == SSH_ERROR) {
return CURLE_RECV_ERROR;
}
#else
sshc->sftp_file_index =
sftp_async_read_begin(sshc->sftp_file, (uint32_t)len);
if(sshc->sftp_file_index < 0)
return CURLE_RECV_ERROR;
#endif
FALLTHROUGH();
case 1:
sshc->sftp_recv_state = 1;
#if LIBSSH_VERSION_INT > SSH_VERSION_INT(0, 11, 0)
nread = sftp_aio_wait_read(&sshc->sftp_recv_aio, mem, len);
#else
nread = sftp_async_read(sshc->sftp_file, mem, (uint32_t)len,
(uint32_t)sshc->sftp_file_index);
#endif
myssh_block2waitfor(conn, sshc, (nread == SSH_AGAIN));
@ -3119,6 +3136,12 @@ static CURLcode sftp_recv(struct Curl_easy *data, int sockindex,
else if(nread < 0)
return CURLE_RECV_ERROR;
/*
* sftp_aio_wait_read() would free sftp_recv_aio and
* assign it NULL in all cases except when it returns
* SSH_AGAIN.
*/
sshc->sftp_recv_state = 0;
*pnread = (size_t)nread;
return CURLE_OK;

View file

@ -180,10 +180,13 @@ struct ssh_conn {
unsigned sftp_recv_state; /* 0 or 1 */
#if LIBSSH_VERSION_INT > SSH_VERSION_INT(0, 11, 0)
sftp_aio sftp_recv_aio;
sftp_aio sftp_send_aio;
unsigned sftp_send_state; /* 0 or 1 */
#endif
#else
int sftp_file_index; /* for async read */
#endif
sftp_attributes readdir_attrs; /* used by the SFTP readdir actions */
sftp_attributes readdir_link_attrs; /* used by the SFTP readdir actions */
sftp_attributes quote_attrs; /* used by the SFTP_QUOTE state */