diff options
author | Søren Sandmann <sandmann@redhat.com> | 2007-07-30 06:41:15 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2007-07-30 06:41:15 -0400 |
commit | 368a7df9bc400edbe9226838ebfde4ac98a8321c (patch) | |
tree | 22fdf3c8975ec9b7bebcba79c464bec8d9f4ece3 /src | |
parent | 0c87c11dd40692a3d9edff224ac8b2b5f482e01a (diff) |
Fix a couple of bugs
Diffstat (limited to 'src')
-rw-r--r-- | src/lactlsconnection.c | 71 |
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; } |