--- a/src/sock_gnutls.c Sun Feb 22 08:48:21 2009 +0200
+++ b/src/sock_gnutls.c Sun Feb 22 10:16:28 2009 +0200
@@ -4,28 +4,59 @@
#include <stdlib.h>
#include <err.h>
-static err_t sock_gnutls_read (struct sock_stream *base_sock, void *buf, size_t len)
+// XXX: errors
+static err_t sock_gnutls_read (struct sock_stream *base_sock, void *buf, size_t *len)
+{
+ struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
+ int ret;
+
+ // just map to gnutls_record_recv
+ if ((ret = gnutls_record_recv(sock->session, buf, *len)) < 0)
+ RETURN_SET_ERROR_ERRNO(SOCK_GNUTLS_ERR(sock), ERR_GNUTLS_RECORD_RECV);
+
+ // updated length
+ *len = ret;
+
+ return SUCCESS;
+}
+
+static err_t sock_gnutls_write (struct sock_stream *base_sock, const void *buf, size_t *len)
+{
+ struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
+ int ret;
+
+ // just map to gnutls_record_send
+ if ((ret = gnutls_record_send(sock->session, buf, *len)) < 0)
+ RETURN_SET_ERROR_ERRNO(SOCK_GNUTLS_ERR(sock), ERR_GNUTLS_RECORD_SEND);
+
+ // updated length
+ *len = ret;
+
+ return SUCCESS;
+}
+
+static err_t sock_gnutls_event_init (struct sock_stream *base_sock)
{
struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
- // just map to gnutls_record_recv
- return gnutls_record_recv(sock->session, buf, len);
+ return SUCCESS;
}
-static err_t sock_gnutls_write (struct sock_stream *base_sock, const void *buf, size_t len)
+static err_t sock_gnutls_event_enable (struct sock_stream *base_sock, short mask)
{
struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
- // just map to gnutls_record_send
- return gnutls_record_send(sock->session, buf, len);
+ return SUCCESS;
}
/*
* Our sock_stream_Type
*/
struct sock_stream_type sock_gnutls_type = {
- .methods.read = &sock_gnutls_read,
- .methods.write = &sock_gnutls_write,
+ .methods.read = &sock_gnutls_read,
+ .methods.write = &sock_gnutls_write,
+ .methods.event_init = &sock_gnutls_event_init,
+ .methods.event_enable = &sock_gnutls_event_enable,
};
/*