From 956fc9a1b1d4be8f33b77e1fca91519de24476de Mon Sep 17 00:00:00 2001
From: Alessandro Ghedini <al3xbio@gmail.com>
Date: Wed, 24 Oct 2012 14:34:00 +0200
Subject: [PATCH 2/2] gnutls: print alerts during handshake

---
 lib/gtls.c |   24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/lib/gtls.c b/lib/gtls.c
index dbf568c..d8e88e2 100644
--- a/lib/gtls.c
+++ b/lib/gtls.c
@@ -304,10 +304,30 @@ static CURLcode handshake(struct connectdata *conn,
         return CURLE_OK;
     }
     else if((rc < 0) && !gnutls_error_is_fatal(rc)) {
-      failf(data, "gnutls_handshake() warning: %s", gnutls_strerror(rc));
+      char *strerr = NULL;
+
+      if(rc == GNUTLS_E_WARNING_ALERT_RECEIVED) {
+        int alert = gnutls_alert_get(session);
+        strerr = gnutls_alert_get_name(alert);
+      }
+
+      if(strerr == NULL)
+        strerr = gnutls_strerror(rc);
+
+      failf(data, "gnutls_handshake() warning: %s", strerr);
     }
     else if(rc < 0) {
-      failf(data, "gnutls_handshake() failed: %s", gnutls_strerror(rc));
+      char *strerr = NULL;
+
+      if(rc == GNUTLS_E_FATAL_ALERT_RECEIVED) {
+        int alert = gnutls_alert_get(session);
+        strerr = gnutls_alert_get_name(alert);
+      }
+
+      if(strerr == NULL)
+        strerr = gnutls_strerror(rc);
+
+      failf(data, "gnutls_handshake() failed: %s", strerr);
       return CURLE_SSL_CONNECT_ERROR;
     }
 
-- 
1.7.10.4


