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:
parent
c185cdf2b4
commit
abe90019d3
16
lib/sendf.c
16
lib/sendf.c
@ -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 {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user