lib: unify recv/send function signatures

cfilter/conn: change send/recv function signatures. Unify the
calling/return conventions in our send/receive handling.

Curl_conn_recv(), adjust pnread type

Parameter `pnread` was a `ssize_t *`, but `size_t *` is better since the
function returns any error in its `CURLcode` return value.

Closes #17546
This commit is contained in:
Stefan Eissing 2025-06-11 10:18:15 +02:00 committed by Daniel Stenberg
parent 3934431421
commit 20c90ba298
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
37 changed files with 1114 additions and 1219 deletions

View file

@ -220,37 +220,35 @@ static void wssh_state(struct Curl_easy *data,
sshc->state = nowstate;
}
static ssize_t wscp_send(struct Curl_easy *data, int sockindex,
const void *mem, size_t len, bool eos,
CURLcode *err)
static CURLcode wscp_send(struct Curl_easy *data, int sockindex,
const void *mem, size_t len, bool eos,
size_t *pnwritten)
{
ssize_t nwrite = 0;
(void)data;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
(void)mem;
(void)len;
(void)eos;
(void)err;
return nwrite;
*pnwritten = 0;
return CURLE_OK;
}
static ssize_t wscp_recv(struct Curl_easy *data, int sockindex,
char *mem, size_t len, CURLcode *err)
static CURLcode wscp_recv(struct Curl_easy *data, int sockindex,
char *mem, size_t len, size_t *pnread)
{
ssize_t nread = 0;
(void)data;
(void)sockindex; /* we only support SCP on the fixed known primary socket */
(void)mem;
(void)len;
(void)err;
*pnread = 0;
return nread;
return CURLE_OK;
}
/* return number of sent bytes */
static ssize_t wsftp_send(struct Curl_easy *data, int sockindex,
const void *mem, size_t len, bool eos, CURLcode *err)
static CURLcode wsftp_send(struct Curl_easy *data, int sockindex,
const void *mem, size_t len, bool eos,
size_t *pnwritten)
{
struct connectdata *conn = data->conn;
struct ssh_conn *sshc = Curl_conn_meta_get(conn, CURL_META_SSH_CONN);
@ -259,10 +257,10 @@ static ssize_t wsftp_send(struct Curl_easy *data, int sockindex,
(void)sockindex;
(void)eos;
if(!sshc) {
*err = CURLE_FAILED_INIT;
return -1;
}
*pnwritten = 0;
if(!sshc)
return CURLE_FAILED_INIT;
offset[0] = (word32)sshc->offset & 0xFFFFFFFF;
offset[1] = (word32)(sshc->offset >> 32) & 0xFFFFFFFF;
@ -275,31 +273,30 @@ static ssize_t wsftp_send(struct Curl_easy *data, int sockindex,
rc = wolfSSH_get_error(sshc->ssh_session);
if(rc == WS_WANT_READ) {
conn->waitfor = KEEP_RECV;
*err = CURLE_AGAIN;
return -1;
return CURLE_AGAIN;
}
else if(rc == WS_WANT_WRITE) {
conn->waitfor = KEEP_SEND;
*err = CURLE_AGAIN;
return -1;
return CURLE_AGAIN;
}
if(rc < 0) {
failf(data, "wolfSSH_SFTP_SendWritePacket returned %d", rc);
return -1;
return CURLE_SEND_ERROR;
}
DEBUGASSERT(rc == (int)len);
*pnwritten = (size_t)rc;
sshc->offset += *pnwritten;
infof(data, "sent %zu bytes SFTP from offset %" FMT_OFF_T,
len, sshc->offset);
sshc->offset += len;
return (ssize_t)rc;
*pnwritten, sshc->offset);
return CURLE_OK;
}
/*
* Return number of received (decrypted) bytes
* or <0 on error
*/
static ssize_t wsftp_recv(struct Curl_easy *data, int sockindex,
char *mem, size_t len, CURLcode *err)
static CURLcode wsftp_recv(struct Curl_easy *data, int sockindex,
char *mem, size_t len, size_t *pnread)
{
int rc;
struct connectdata *conn = data->conn;
@ -307,10 +304,10 @@ static ssize_t wsftp_recv(struct Curl_easy *data, int sockindex,
word32 offset[2];
(void)sockindex;
if(!sshc) {
*err = CURLE_FAILED_INIT;
return -1;
}
*pnread = 0;
if(!sshc)
return CURLE_FAILED_INIT;
offset[0] = (word32)sshc->offset & 0xFFFFFFFF;
offset[1] = (word32)(sshc->offset >> 32) & 0xFFFFFFFF;
@ -322,24 +319,22 @@ static ssize_t wsftp_recv(struct Curl_easy *data, int sockindex,
rc = wolfSSH_get_error(sshc->ssh_session);
if(rc == WS_WANT_READ) {
conn->waitfor = KEEP_RECV;
*err = CURLE_AGAIN;
return -1;
return CURLE_AGAIN;
}
else if(rc == WS_WANT_WRITE) {
conn->waitfor = KEEP_SEND;
*err = CURLE_AGAIN;
return -1;
return CURLE_AGAIN;
}
DEBUGASSERT(rc <= (int)len);
if(rc < 0) {
failf(data, "wolfSSH_SFTP_SendReadPacket returned %d", rc);
return -1;
return CURLE_RECV_ERROR;
}
sshc->offset += len;
return (ssize_t)rc;
*pnread = (size_t)rc;
sshc->offset += *pnread;
return CURLE_OK;
}
static void wssh_easy_dtor(void *key, size_t klen, void *entry)