summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2007-07-30 06:41:15 -0400
committerSøren Sandmann <sandmann@redhat.com>2007-07-30 06:41:15 -0400
commit368a7df9bc400edbe9226838ebfde4ac98a8321c (patch)
tree22fdf3c8975ec9b7bebcba79c464bec8d9f4ece3 /src
parent0c87c11dd40692a3d9edff224ac8b2b5f482e01a (diff)
Fix a couple of bugs
Diffstat (limited to 'src')
-rw-r--r--src/lactlsconnection.c71
1 files changed, 58 insertions, 13 deletions
diff --git a/src/lactlsconnection.c b/src/lactlsconnection.c
index 45cf7fd..3fe235f 100644
--- a/src/lactlsconnection.c
+++ b/src/lactlsconnection.c
@@ -54,6 +54,18 @@ emit_error (LacTlsConnection *tls,
}
static void
+print_alert (gnutls_session session)
+{
+ gnutls_alert_description_t d;
+
+ d = gnutls_alert_get (session);
+
+ g_print ("alert no: %d\n", d);
+
+ g_print ("alert: %s\n", gnutls_alert_get_name (d));
+}
+
+static void
do_handshake (LacTlsConnection *tls)
{
if (!tls->need_handshake)
@@ -75,15 +87,30 @@ do_handshake (LacTlsConnection *tls)
if (res != GNUTLS_E_INTERRUPTED &&
res != GNUTLS_E_AGAIN)
{
- g_print (" handshake error\n");
+ g_print (" handshake error: %d (%s)\n",
+ res, gnutls_strerror (res));
+
+ if (res == GNUTLS_E_WARNING_ALERT_RECEIVED)
+ {
+ print_alert (tls->session);
+ }
+ else if (res == GNUTLS_E_FATAL_ALERT_RECEIVED)
+ {
+ print_alert (tls->session);
+ }
+
/* FIXME: emit an error */
- lac_connection_close (tls->tcp_connection);
- return;
+ if (gnutls_error_is_fatal (res))
+ {
+ g_print ("fatal\n");
+ lac_connection_close (tls->tcp_connection);
+ }
+ else
+ g_print (" not fatal\n");
}
else
{
g_print (" insufficient data\n");
- return;
}
}
else
@@ -158,6 +185,17 @@ tcp_callback (LacConnection *connection,
case LAC_CONNECTION_EVENT_READ:
g_print ("READ HAPPENED \n");
/* add data to buffer */
+
+ g_print ("bytes read: %d bytes: %x %x %x %x %x %x %x\n",
+ event->read.len,
+ event->read.data[0],
+ event->read.data[1],
+ event->read.data[2],
+ event->read.data[3],
+ event->read.data[4],
+ event->read.data[5],
+ event->read.data[6]);
+
lac_byte_queue_append (tls->buffer, event->read.data, event->read.len);
/* Writing sometimes requires data to be available for reading
@@ -225,13 +263,22 @@ tcp_callback (LacConnection *connection,
static ssize_t
tls_push (gnutls_transport_ptr_t tptr,
- const void *data,
+ const char *data,
size_t n_bytes)
{
LacTlsConnection *tls = (LacTlsConnection *)tptr;
- g_print ("pushing some data\n");
+ g_print ("pushing some data (%d bytes)\n", n_bytes);
+ g_print ("bytes pushed: bytes: %x %x %x %x %x %x %x\n",
+ data[0],
+ data[1],
+ data[2],
+ data[3],
+ data[4],
+ data[5],
+ data[6]);
+
lac_connection_write (tls->tcp_connection, data, n_bytes);
return n_bytes;
@@ -239,15 +286,13 @@ tls_push (gnutls_transport_ptr_t tptr,
static ssize_t
tls_pull (gnutls_transport_ptr_t tptr,
- void *data,
+ char *data,
size_t n_bytes)
{
LacTlsConnection *tls = (LacTlsConnection *)tptr;
const gchar *buf;
gsize n_available;
- g_print ("pulling data\n");
-
buf = lac_byte_queue_peek (tls->buffer, &n_available);
if (n_available > 0)
@@ -258,11 +303,12 @@ tls_pull (gnutls_transport_ptr_t tptr,
errno = 0;
+ lac_byte_queue_delete_head (tls->buffer, minimum);
+
return minimum;
}
else
{
- g_print (" nothing available\n");
errno = EAGAIN;
return -1;
@@ -291,13 +337,12 @@ lac_tls_connection_new (const LacAddress *address,
gnutls_set_default_priority (tls->session);
gnutls_kx_set_priority (tls->session, kx_prio);
gnutls_credentials_set (tls->session,
- GNUTLS_CRD_ANON, &tls->anoncred);
-
+ GNUTLS_CRD_ANON, tls->anoncred);
+
gnutls_transport_set_ptr (tls->session, (gnutls_transport_ptr_t)tls);
gnutls_transport_set_push_function (tls->session, tls_push);
gnutls_transport_set_pull_function (tls->session, tls_pull);
-
return tls;
}