1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 15:48:49 -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
else if (conn->protocol & PROT_SCP) {
nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket);
/* TODO: return CURLE_OK also for nread <= 0
read failures and timeouts ? */
}
else if (conn->protocol & PROT_SFTP) {
nread = Curl_sftp_recv(conn, num, buffertofill, bytesfromsocket);
else if (conn->protocol & (PROT_SCP|PROT_SFTP)) {
if(conn->protocol & PROT_SCP)
nread = Curl_scp_recv(conn, num, buffertofill, bytesfromsocket);
else if (conn->protocol & PROT_SFTP)
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 */
else {

View File

@ -627,9 +627,10 @@ ssize_t Curl_scp_send(struct connectdata *conn, int sockindex,
* a regular CURLcode value.
*/
ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
char *mem, size_t len)
char *mem, size_t len)
{
ssize_t nread;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
/* libssh2_channel_read() returns int
*
@ -637,10 +638,16 @@ ssize_t Curl_scp_recv(struct connectdata *conn, int sockindex,
* 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)
libssh2_channel_read(conn->data->reqdata.proto.ssh->ssh_channel,
mem, len);
(void)sockindex;
#endif
return nread;
}