1
0
mirror of https://github.com/moparisthebest/curl synced 2025-03-11 07:39:50 -04: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)) {
nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket); if(conn->protocol & PROT_SCP)
/* TODO: return CURLE_OK also for nread <= 0 nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket);
read failures and timeouts ? */ else if (conn->protocol & PROT_SFTP)
} nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket);
else if (conn->protocol & PROT_SFTP) { #ifdef LIBSSH2CHANNEL_EAGAIN
nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket); 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

@ -627,9 +627,10 @@ ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
* a regular CURLcode value. * a regular CURLcode value.
*/ */
ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex, 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;
} }