Skip to content

Commit

Permalink
qssl: reflect recent code changes in SSL interface
Browse files Browse the repository at this point in the history
Reported by Guenter Knauf.
  • Loading branch information
kdudka committed Apr 7, 2010
1 parent ef1ac36 commit 10977f5
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
23 changes: 15 additions & 8 deletions lib/qssl.c
Expand Up @@ -374,8 +374,9 @@ int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex)
}


/* for documentation see Curl_ssl_send() in sslgen.h */
ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
const void * mem, size_t len)
const void * mem, size_t len, int * curlcode)

{
/* SSL_Write() is said to return 'int' while write() and send() returns
Expand All @@ -391,31 +392,36 @@ ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
/* The operation did not complete; the same SSL I/O function
should be called again later. This is basicly an EWOULDBLOCK
equivalent. */
return 0;
*curlcode = -1; /* EWOULDBLOCK */
return -1;

case SSL_ERROR_IO:
switch (errno) {
case EWOULDBLOCK:
case EINTR:
return 0;
*curlcode = -1; /* EWOULDBLOCK */
return -1;
}

failf(conn->data, "SSL_Write() I/O error: %s", strerror(errno));
*curlcode = CURLE_SEND_ERROR;
return -1;
}

/* An SSL error. */
failf(conn->data, "SSL_Write() returned error %s",
SSL_Strerror(rc, NULL));
*curlcode = CURLE_SEND_ERROR;
return -1;
}

return (ssize_t) rc; /* number of bytes */
}


/* for documentation see Curl_ssl_recv() in sslgen.h */
ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
size_t buffersize, bool * wouldblock)
size_t buffersize, int * curlcode)

{
char error_buffer[120]; /* OpenSSL documents that this must be at
Expand All @@ -426,7 +432,6 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,

buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
nread = SSL_Read(conn->ssl[num].handle, buf, buffsize);
*wouldblock = FALSE;

if(nread < 0) {
/* failed SSL_read */
Expand All @@ -435,21 +440,23 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,

case SSL_ERROR_BAD_STATE:
/* there's data pending, re-invoke SSL_Read(). */
*wouldblock = TRUE;
return -1; /* basically EWOULDBLOCK */
*curlcode = -1; /* EWOULDBLOCK */
return -1;

case SSL_ERROR_IO:
switch (errno) {
case EWOULDBLOCK:
*wouldblock = TRUE;
*curlcode = -1; /* EWOULDBLOCK */
return -1;
}

failf(conn->data, "SSL_Read() I/O error: %s", strerror(errno));
*curlcode = CURLE_RECV_ERROR;
return -1;

default:
failf(conn->data, "SSL read error: %s", SSL_Strerror(nread, NULL));
*curlcode = CURLE_RECV_ERROR;
return -1;
}
}
Expand Down
8 changes: 6 additions & 2 deletions lib/qssl.h
Expand Up @@ -36,15 +36,19 @@ void Curl_qsossl_close(struct connectdata *conn, int sockindex);
int Curl_qsossl_close_all(struct SessionHandle * data);
int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex);

/* for documentation see Curl_ssl_send() in sslgen.h */
ssize_t Curl_qsossl_send(struct connectdata * conn,
int sockindex,
const void * mem,
size_t len);
size_t len,
int * curlcode);

/* for documentation see Curl_ssl_recv() in sslgen.h */
ssize_t Curl_qsossl_recv(struct connectdata * conn, /* connection data */
int num, /* socketindex */
char * buf, /* store read data here */
size_t buffersize, /* max amount to read */
bool * wouldblock);
int * curlcode);

size_t Curl_qsossl_version(char * buffer, size_t size);
int Curl_qsossl_check_cxn(struct connectdata * cxn);
Expand Down
2 changes: 1 addition & 1 deletion lib/sendf.c
Expand Up @@ -553,7 +553,7 @@ int Curl_read(struct connectdata *conn, /* connection data */
}

if(conn->ssl[num].state == ssl_connection_complete) {
int curlcode;
int curlcode = CURLE_RECV_ERROR;
nread = Curl_ssl_recv(conn, num, buffertofill, bytesfromsocket, &curlcode);

if(nread == -1)
Expand Down

0 comments on commit 10977f5

Please sign in to comment.