aboutsummaryrefslogtreecommitdiff
path: root/lib/gtls.c
diff options
context:
space:
mode:
authorHoward Chu <hyc@highlandsun.com>2010-05-07 15:05:34 +0200
committerDaniel Stenberg <daniel@haxx.se>2010-05-07 15:05:34 +0200
commitd64bd82bdcb169d0647a80f00068cedd761f8163 (patch)
tree222920db94e7d4ae7df6df1f9a9afd0b78159492 /lib/gtls.c
parentcb6647ce1cfba836203e91057752441302b9c46a (diff)
sendrecv: split the I/O handling into private handler
Howard Chu brought the bulk work of this patch that properly moves out the sending and recving of data to the parts of the code that are properly responsible for the various ways of doing so. Daniel Stenberg assisted with polishing a few bits and fixed some minor flaws in the original patch. Another upside of this patch is that we now abuse CURLcodes less with the "magic" -1 return codes and instead use CURLE_AGAIN more consistently.
Diffstat (limited to 'lib/gtls.c')
-rw-r--r--lib/gtls.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/lib/gtls.c b/lib/gtls.c
index 4f5edaf78..2cb1fae41 100644
--- a/lib/gtls.c
+++ b/lib/gtls.c
@@ -419,6 +419,9 @@ gtls_connect_step1(struct connectdata *conn,
return CURLE_OK;
}
+static Curl_recv gtls_recv;
+static Curl_send gtls_send;
+
static CURLcode
gtls_connect_step3(struct connectdata *conn,
int sockindex)
@@ -630,6 +633,8 @@ gtls_connect_step3(struct connectdata *conn,
infof(data, "\t MAC: %s\n", ptr);
conn->ssl[sockindex].state = ssl_connection_complete;
+ conn->recv = gtls_recv;
+ conn->send = gtls_send;
{
/* we always unconditionally get the session id here, as even if we
@@ -730,18 +735,17 @@ Curl_gtls_connect(struct connectdata *conn,
return CURLE_OK;
}
-/* for documentation see Curl_ssl_send() in sslgen.h */
-ssize_t Curl_gtls_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- int *curlcode)
+static ssize_t gtls_send(struct connectdata *conn,
+ int sockindex,
+ const void *mem,
+ size_t len,
+ CURLcode *curlcode)
{
ssize_t rc = gnutls_record_send(conn->ssl[sockindex].session, mem, len);
if(rc < 0 ) {
*curlcode = (rc == GNUTLS_E_AGAIN)
- ? /* EWOULDBLOCK */ -1
+ ? CURLE_AGAIN
: CURLE_SEND_ERROR;
rc = -1;
@@ -843,18 +847,17 @@ int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
return retval;
}
-/* for documentation see Curl_ssl_recv() in sslgen.h */
-ssize_t Curl_gtls_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- int *curlcode)
+static ssize_t gtls_recv(struct connectdata *conn, /* connection data */
+ int num, /* socketindex */
+ char *buf, /* store read data here */
+ size_t buffersize, /* max amount to read */
+ CURLcode *curlcode)
{
ssize_t ret;
ret = gnutls_record_recv(conn->ssl[num].session, buf, buffersize);
if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) {
- *curlcode = -1;
+ *curlcode = CURLE_AGAIN;
return -1;
}
@@ -866,7 +869,7 @@ ssize_t Curl_gtls_recv(struct connectdata *conn, /* connection data */
/* handshake() writes error message on its own */
*curlcode = rc;
else
- *curlcode = -1; /* then return as if this was a wouldblock */
+ *curlcode = CURLE_AGAIN; /* then return as if this was a wouldblock */
return -1;
}