summaryrefslogtreecommitdiffstats
path: root/doc/examples/ex-alert.c
diff options
context:
space:
mode:
Diffstat (limited to 'doc/examples/ex-alert.c')
-rw-r--r--doc/examples/ex-alert.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/doc/examples/ex-alert.c b/doc/examples/ex-alert.c
new file mode 100644
index 0000000..868771a
--- /dev/null
+++ b/doc/examples/ex-alert.c
@@ -0,0 +1,36 @@
+/* This example code is placed in the public domain. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <gnutls/gnutls.h>
+
+#include "examples.h"
+
+/* This function will check whether the given return code from
+ * a gnutls function (recv/send), is an alert, and will print
+ * that alert.
+ */
+void check_alert(gnutls_session_t session, int ret)
+{
+ int last_alert;
+
+ if (ret == GNUTLS_E_WARNING_ALERT_RECEIVED
+ || ret == GNUTLS_E_FATAL_ALERT_RECEIVED) {
+ last_alert = gnutls_alert_get(session);
+
+ /* The check for renegotiation is only useful if we are
+ * a server, and we had requested a rehandshake.
+ */
+ if (last_alert == GNUTLS_A_NO_RENEGOTIATION &&
+ ret == GNUTLS_E_WARNING_ALERT_RECEIVED)
+ printf("* Received NO_RENEGOTIATION alert. "
+ "Client Does not support renegotiation.\n");
+ else
+ printf("* Received alert '%d': %s.\n", last_alert,
+ gnutls_alert_get_name(last_alert));
+ }
+}