1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

prefer using the (upcoming) non-blocking libssh2 API

This commit is contained in:
Daniel Stenberg 2007-02-02 15:26:57 +00:00
parent c185cdf2b4
commit abe90019d3
2 changed files with 22 additions and 9 deletions

View File

@ -516,13 +516,19 @@ int Curl_read(struct connectdata *conn, /* connection data */
} }
} }
#ifdef USE_LIBSSH2 #ifdef USE_LIBSSH2
else if (conn->protocol & PROT_SCP) { else if (conn->protocol & (PROT_SCP|PROT_SFTP)) {
if(conn->protocol & PROT_SCP)
nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket); nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket);
/* TODO: return CURLE_OK also for nread <= 0 else if (conn->protocol & PROT_SFTP)
read failures and timeouts ? */
}
else if (conn->protocol & PROT_SFTP) {
nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket); nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket);
#ifdef LIBSSH2CHANNEL_EAGAIN
if((nread == LIBSSH2CHANNEL_EAGAIN) || (nread == 0))
/* EWOULDBLOCK */
return -1;
#endif
if(nread < 0)
/* since it is negative and not EGAIN, it was a protocol-layer error */
return CURLE_RECV_ERROR;
} }
#endif /* !USE_LIBSSH2 */ #endif /* !USE_LIBSSH2 */
else { else {

View File

@ -630,6 +630,7 @@ ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
char *mem, size_t len) char *mem, size_t len)
{ {
ssize_t nread; ssize_t nread;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
/* libssh2_channel_read() returns int /* libssh2_channel_read() returns int
* *
@ -637,10 +638,16 @@ ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
* in the SessionHandle struct * in the SessionHandle struct
*/ */
#ifdef LIBSSH2CHANNEL_EAGAIN
/* we prefer the non-blocking API but that didn't exist previously */
nread = (ssize_t)
libssh2_channel_readnb(conn->data->reqdata.proto.ssh->ssh_channel,
mem, len);
#else
nread = (ssize_t) nread = (ssize_t)
libssh2_channel_read(conn->data->reqdata.proto.ssh->ssh_channel, libssh2_channel_read(conn->data->reqdata.proto.ssh->ssh_channel,
mem, len); mem, len);
(void)sockindex; #endif
return nread; return nread;
} }