From 2a596a39381464560b826642d819de310eca091f Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Mon, 20 Jul 2009 14:39:08 -0300 Subject: [PATCH] Report a SSL handshaking error as a CLOSE event. --- hcconn_ssl.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hcconn_ssl.c b/hcconn_ssl.c index 1277207..421d6b4 100644 --- a/hcconn_ssl.c +++ b/hcconn_ssl.c @@ -30,6 +30,7 @@ struct ssl_data gnutls_session_t session; GString *buffer; gboolean handshaking; + gboolean failed; gpointer lowconn; }; @@ -93,6 +94,7 @@ ssl_data_new (int server) ssl_client_session_new (&ssl->session); ssl->buffer = g_string_sized_new (4096); ssl->handshaking = FALSE; + ssl->failed = FALSE; return ssl; } @@ -151,8 +153,11 @@ ssl_server_handshake (struct ssl_data *ssl) if ((error = gnutls_handshake (ssl->session)) < 0) { if (gnutls_error_is_fatal (error)) - g_critical ("Fatal error while doing TLS handshaking: %s\n", - gnutls_strerror (error)); + { + g_critical ("Fatal error while doing TLS handshaking: %s\n", + gnutls_strerror (error)); + ssl->failed = TRUE; + } } else { @@ -210,6 +215,9 @@ hc_conn_ssl_watch (HCConn *conn, HCEvent event, gpointer data) if (ssl->handshaking) { ssl_server_handshake (ssl); + /* FIXME: create HC_CONN_ERROR */ + if (ssl->failed && ssl_conn->func) + ssl_conn->func (ssl_conn, HC_EVENT_CLOSE, ssl_conn->data); return; } while ((r = hc_conn_read (ssl->lowconn, buffer, sizeof (buffer))) > 0) -- 2.20.1