gnutls-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU gnutls branch, gnutls_2_12_x, updated. gnutls_2_12_2-10-ga8fba


From: Nikos Mavrogiannopoulos
Subject: [SCM] GNU gnutls branch, gnutls_2_12_x, updated. gnutls_2_12_2-10-ga8fba8e
Date: Sun, 10 Apr 2011 22:08:28 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU gnutls".

http://git.savannah.gnu.org/cgit/gnutls.git/commit/?id=a8fba8e8d68134421bbc5027318d06591588c114

The branch, gnutls_2_12_x has been updated
       via  a8fba8e8d68134421bbc5027318d06591588c114 (commit)
       via  d0bb004712e67124c361cdf0be2c273f45a44421 (commit)
      from  1f8cd4eebabb8be5acd99a94547fda66b337a7f7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a8fba8e8d68134421bbc5027318d06591588c114
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Mon Apr 11 00:02:54 2011 +0200

    gnutls_transport_set_global_errno() is deprecated.

commit d0bb004712e67124c361cdf0be2c273f45a44421
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Mon Apr 11 00:02:33 2011 +0200

    Combined the safe renegotiation tests with the again-common lib.

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                 |    5 +-
 lib/includes/gnutls/compat.h         |    2 +
 lib/includes/gnutls/gnutls.h.in      |    1 -
 tests/eagain-common.h                |   13 +-
 tests/safe-renegotiation/Makefile.am |    3 +-
 tests/safe-renegotiation/srn0.c      |  181 ++---------------------
 tests/safe-renegotiation/srn1.c      |  132 ++----------------
 tests/safe-renegotiation/srn2.c      |  261 +++-------------------------------
 tests/safe-renegotiation/srn3.c      |  132 ++----------------
 tests/safe-renegotiation/srn4.c      |  182 ++----------------------
 tests/safe-renegotiation/srn5.c      |  184 ++----------------------
 11 files changed, 101 insertions(+), 995 deletions(-)

diff --git a/NEWS b/NEWS
index ff8d9f9..0fbe56c 100644
--- a/NEWS
+++ b/NEWS
@@ -5,10 +5,13 @@ See the end for copying conditions.
 
 * Version 2.12.3 (unreleased)
 
+* libgnutls: gnutls_transport_set_global_errno() was deprecated.
+Use your system's errno fascility or gnutls_transport_set_errno().
+
 * tests: More fixes and updates for win32. Patches by LRN.
 
 ** API and ABI modifications:
-No changes since last version.
+gnutls_transport_set_global_errno: DEPRECATED
 
 
 * Version 2.12.2 (released 2011-04-08)
diff --git a/lib/includes/gnutls/compat.h b/lib/includes/gnutls/compat.h
index beb9dfc..9fb668d 100644
--- a/lib/includes/gnutls/compat.h
+++ b/lib/includes/gnutls/compat.h
@@ -350,6 +350,8 @@ gnutls_sign_callback_get (gnutls_session_t session, void 
**userdata)
 
   void gnutls_transport_set_lowat (gnutls_session_t session, int num) 
_GNUTLS_GCC_ATTR_DEPRECATED;
 
+  void gnutls_transport_set_global_errno (int err) _GNUTLS_GCC_ATTR_DEPRECATED;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in
index be7b161..e28a666 100644
--- a/lib/includes/gnutls/gnutls.h.in
+++ b/lib/includes/gnutls/gnutls.h.in
@@ -1229,7 +1229,6 @@ extern "C"
                                             gnutls_errno_func errno_func);
 
   void gnutls_transport_set_errno (gnutls_session_t session, int err);
-  void gnutls_transport_set_global_errno (int err);
 
 /* session specific 
  */
diff --git a/tests/eagain-common.h b/tests/eagain-common.h
index 473e236..d75e787 100644
--- a/tests/eagain-common.h
+++ b/tests/eagain-common.h
@@ -1,7 +1,7 @@
 #define min(x,y) ((x)<(y)?(x):(y))
 //#define EAGAIN_DEBUG
 
-#define HANDSHAKE(c, s) \
+#define HANDSHAKE_EXPECT(c, s, clierr, serverr) \
   sret = cret = GNUTLS_E_AGAIN; \
   do \
     { \
@@ -14,8 +14,8 @@
           sret = gnutls_handshake (s); \
         } \
     } \
-  while (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN); \
-  if (cret < 0 || sret < 0) \
+  while ((cret == GNUTLS_E_AGAIN || (cret == 0 && sret == GNUTLS_E_AGAIN)) && 
(sret == GNUTLS_E_AGAIN || (sret == 0 && cret == GNUTLS_E_AGAIN))); \
+  if (cret != clierr || sret != serverr) \
     { \
       fprintf(stderr, "client: %s\n", gnutls_strerror(cret)); \
       fprintf(stderr, "server: %s\n", gnutls_strerror(sret)); \
@@ -23,6 +23,9 @@
       exit(1); \
     }
 
+#define HANDSHAKE(c, s) \
+  HANDSHAKE_EXPECT(c,s,0,0)
+
 #define TRANSFER(c, s, msg, msglen, buf, buflen) \
   do \
     { \
@@ -131,7 +134,7 @@ client_pull (gnutls_transport_ptr_t tr, void *data, size_t 
len)
 #ifdef EAGAIN_DEBUG
       fprintf(stderr, "eagain: Not enough data by server (asked for: %d, have: 
%d)\n", (int)len, (int)to_client_len);
 #endif
-      gnutls_transport_set_global_errno (EAGAIN);
+      gnutls_transport_set_errno ((gnutls_session_t)tr, EAGAIN);
       return -1;
     }
 
@@ -158,7 +161,7 @@ server_pull (gnutls_transport_ptr_t tr, void *data, size_t 
len)
 #ifdef EAGAIN_DEBUG
       fprintf(stderr, "eagain: Not enough data by client (asked for: %d, have: 
%d)\n", (int)len, (int)to_server_len);
 #endif
-      gnutls_transport_set_global_errno (EAGAIN);
+      gnutls_transport_set_errno ((gnutls_session_t)tr, EAGAIN);
       return -1;
     }
 
diff --git a/tests/safe-renegotiation/Makefile.am 
b/tests/safe-renegotiation/Makefile.am
index d6a5593..8b0c658 100644
--- a/tests/safe-renegotiation/Makefile.am
+++ b/tests/safe-renegotiation/Makefile.am
@@ -23,7 +23,8 @@ AM_CPPFLAGS = \
        -I$(top_builddir)/lib/includes
 
 AM_LDFLAGS = -no-install
-LDADD = ../../lib/libgnutls.la $(LTLIBGCRYPT) $(LIBSOCKET)
+LDADD = ../libutils.la \
+       ../../lib/libgnutls.la $(LTLIBGCRYPT) $(LIBSOCKET)
 
 ctests = srn0 srn1 srn2 srn3 srn4 srn5
 
diff --git a/tests/safe-renegotiation/srn0.c b/tests/safe-renegotiation/srn0.c
index 629fd76..71839f7 100644
--- a/tests/safe-renegotiation/srn0.c
+++ b/tests/safe-renegotiation/srn0.c
@@ -37,6 +37,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -44,80 +46,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -159,11 +87,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -176,7 +101,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (2);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -188,6 +113,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (server, "NORMAL", NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -196,53 +122,19 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (client, "NORMAL", NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE(client, server);
 
   if (!gnutls_safe_renegotiation_status (client) ||
       !gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0, "Session not using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -257,52 +149,14 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = 1;
+  HANDSHAKE(client, server);
 
   if (!gnutls_safe_renegotiation_status (client) ||
       !gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0,
                     "Rehandshaked session not using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
@@ -311,20 +165,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }
diff --git a/tests/safe-renegotiation/srn1.c b/tests/safe-renegotiation/srn1.c
index 2b996b0..6907d85 100644
--- a/tests/safe-renegotiation/srn1.c
+++ b/tests/safe-renegotiation/srn1.c
@@ -36,6 +36,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -43,80 +45,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -158,11 +86,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -175,7 +100,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (5);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -187,6 +112,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (server, "NORMAL:%SAFE_RENEGOTIATION", NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -196,6 +122,7 @@ main (int argc, char *argv[])
                               NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
   /* Check that initially no session use the extension. */
   if (gnutls_safe_renegotiation_status (server)
@@ -205,39 +132,7 @@ main (int argc, char *argv[])
       abort ();
     }
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while ((cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_SUCCESS)
-         && (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_SUCCESS));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SAFE_RENEGOTIATION_FAILED)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, 
GNUTLS_E_SAFE_RENEGOTIATION_FAILED);
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
   gnutls_bye (server, GNUTLS_SHUT_RDWR);
@@ -245,20 +140,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }
diff --git a/tests/safe-renegotiation/srn2.c b/tests/safe-renegotiation/srn2.c
index 8c9d444..d006aaa 100644
--- a/tests/safe-renegotiation/srn2.c
+++ b/tests/safe-renegotiation/srn2.c
@@ -34,6 +34,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -41,80 +43,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -156,11 +84,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -173,7 +98,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (2);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -185,6 +110,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (server, "NORMAL", NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -193,6 +119,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (client, "NORMAL", NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
   /* Check that initially no session use the extension. */
   if (gnutls_safe_renegotiation_status (server)
@@ -202,42 +129,7 @@ main (int argc, char *argv[])
       abort ();
     }
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE(client, server);
 
   /* Check that both sessions use the extension. */
   if (!gnutls_safe_renegotiation_status (server)
@@ -248,7 +140,7 @@ main (int argc, char *argv[])
     }
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -263,45 +155,7 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = 1;
+  HANDSHAKE(client, server);
 
   /* Check that session still use the extension. */
   if (!gnutls_safe_renegotiation_status (server)
@@ -316,7 +170,7 @@ main (int argc, char *argv[])
      gnutls_safe_negotiation_set_initial (server, 0); */
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -331,51 +185,13 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = 1;
+  HANDSHAKE(client, server);
 
   /* Check that disabling the extension will break rehandshakes.
      gnutls_safe_renegotiation_set (client, 0); */
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -390,45 +206,7 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = 1;
+  HANDSHAKE(client, server);
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
   gnutls_bye (server, GNUTLS_SHUT_RDWR);
@@ -436,20 +214,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }
diff --git a/tests/safe-renegotiation/srn3.c b/tests/safe-renegotiation/srn3.c
index 71f0ac3..45a8980 100644
--- a/tests/safe-renegotiation/srn3.c
+++ b/tests/safe-renegotiation/srn3.c
@@ -36,6 +36,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -43,80 +45,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -158,11 +86,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -175,7 +100,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (2);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -188,6 +113,7 @@ main (int argc, char *argv[])
                               NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -196,6 +122,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (client, "NORMAL:%SAFE_RENEGOTIATION", NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
   /* Check that initially no session use the extension. */
   if (gnutls_safe_renegotiation_status (server)
@@ -205,39 +132,7 @@ main (int argc, char *argv[])
       abort ();
     }
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while ((cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_SUCCESS)
-         && (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_SUCCESS));
-
-  if (cret != GNUTLS_E_SAFE_RENEGOTIATION_FAILED && sret != GNUTLS_E_SUCCESS)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE_EXPECT(client, server, GNUTLS_E_SAFE_RENEGOTIATION_FAILED, 
GNUTLS_E_AGAIN);
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
   gnutls_bye (server, GNUTLS_SHUT_RDWR);
@@ -245,20 +140,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }
diff --git a/tests/safe-renegotiation/srn4.c b/tests/safe-renegotiation/srn4.c
index 8ab1bb2..aa8ede4 100644
--- a/tests/safe-renegotiation/srn4.c
+++ b/tests/safe-renegotiation/srn4.c
@@ -36,6 +36,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -43,80 +45,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -158,11 +86,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -175,7 +100,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (2);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -187,6 +112,7 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (server, "NORMAL", NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -196,53 +122,19 @@ main (int argc, char *argv[])
                               NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE(client, server);
 
   if (gnutls_safe_renegotiation_status (client) ||
       gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0, "Session using safe renegotiation but shouldn't!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -257,53 +149,14 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_AGAIN
-            && sret == GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_AGAIN && sret != GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED)
-    exit_code = 1;
+  HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, 
GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED);
 
   if (gnutls_safe_renegotiation_status (client) ||
       gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0,
                     "Rehandshaked session not using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
@@ -312,20 +165,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }
diff --git a/tests/safe-renegotiation/srn5.c b/tests/safe-renegotiation/srn5.c
index 2eb1975..569d34c 100644
--- a/tests/safe-renegotiation/srn5.c
+++ b/tests/safe-renegotiation/srn5.c
@@ -37,6 +37,8 @@
 #include <string.h>
 #include <errno.h>
 #include <gnutls/gnutls.h>
+#include "../eagain-common.h"
+#include "../utils.h"
 
 static void
 tls_log_func (int level, const char *str)
@@ -44,80 +46,6 @@ tls_log_func (int level, const char *str)
   fprintf (stderr, "|<%d>| %s", level, str);
 }
 
-static char *to_server;
-static size_t to_server_len;
-
-static char *to_client;
-static size_t to_client_len;
-
-static ssize_t
-client_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_client_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_client, len);
-
-  memmove (to_client, to_client + len, to_client_len - len);
-  to_client_len -= len;
-
-  return len;
-}
-
-static ssize_t
-client_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_server_len + len;
-  char *tmp;
-
-  tmp = realloc (to_server, newlen);
-  if (!tmp)
-    abort ();
-  to_server = tmp;
-
-  memcpy (to_server + to_server_len, data, len);
-  to_server_len = newlen;
-
-  return len;
-}
-
-static ssize_t
-server_pull (gnutls_transport_ptr_t tr, void *data, size_t len)
-{
-  if (to_server_len < len)
-    {
-      gnutls_transport_set_global_errno (EAGAIN);
-      return -1;
-    }
-
-  memcpy (data, to_server, len);
-
-  memmove (to_server, to_server + len, to_server_len - len);
-  to_server_len -= len;
-
-  return len;
-}
-
-static ssize_t
-server_push (gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-  size_t newlen = to_client_len + len;
-  char *tmp;
-
-  tmp = realloc (to_client, newlen);
-  if (!tmp)
-    abort ();
-  to_client = tmp;
-
-  memcpy (to_client + to_client_len, data, len);
-  to_client_len = newlen;
-
-  return len;
-}
-
 static unsigned char server_cert_pem[] =
   "-----BEGIN CERTIFICATE-----\n"
   "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
@@ -159,11 +87,8 @@ const gnutls_datum_t server_key = { server_key_pem,
   sizeof (server_key_pem)
 };
 
-int
-main (int argc, char *argv[])
+void doit(void)
 {
-  int debug_level = argc - 1;
-  int exit_code = EXIT_SUCCESS;
   /* Server stuff. */
   gnutls_certificate_credentials_t serverx509cred;
   gnutls_session_t server;
@@ -176,7 +101,7 @@ main (int argc, char *argv[])
   /* General init. */
   gnutls_global_init ();
   gnutls_global_set_log_function (tls_log_func);
-  gnutls_global_set_log_level (debug_level);
+  if (debug) gnutls_global_set_log_level (2);
 
   /* Init server */
   gnutls_certificate_allocate_credentials (&serverx509cred);
@@ -189,6 +114,7 @@ main (int argc, char *argv[])
                               NULL);
   gnutls_transport_set_push_function (server, server_push);
   gnutls_transport_set_pull_function (server, server_pull);
+  gnutls_transport_set_ptr (server, (gnutls_transport_ptr_t)server);
 
   /* Init client */
   gnutls_certificate_allocate_credentials (&clientx509cred);
@@ -197,58 +123,24 @@ main (int argc, char *argv[])
   gnutls_priority_set_direct (client, "NORMAL", NULL);
   gnutls_transport_set_push_function (client, client_push);
   gnutls_transport_set_pull_function (client, client_pull);
+  gnutls_transport_set_ptr (client, (gnutls_transport_ptr_t)client);
 
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(cret == GNUTLS_E_SUCCESS && sret == GNUTLS_E_SUCCESS)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (cret != GNUTLS_E_SUCCESS && sret != GNUTLS_E_SUCCESS)
-    exit_code = EXIT_FAILURE;
+  HANDSHAKE(client, server);
 
   if (gnutls_safe_renegotiation_status (client))
     {
       tls_log_func (0, "Client thinks it is using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   if (gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0, "Server thinks it is using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   sret = gnutls_rehandshake (server);
-  if (debug_level > 0)
+  if (debug)
     {
       tls_log_func (0, "gnutls_rehandshake (server)...\n");
       tls_log_func (0, gnutls_strerror (sret));
@@ -263,53 +155,14 @@ main (int argc, char *argv[])
       abort ();
   }
 
-  cret = GNUTLS_E_AGAIN;
-  sret = GNUTLS_E_AGAIN;
-
-  do
-    {
-      static int max_iter = 0;
-      if (max_iter++ > 10)
-        abort ();
-
-      if (cret == GNUTLS_E_AGAIN)
-        {
-          cret = gnutls_handshake (client);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (client)...\n");
-              tls_log_func (0, gnutls_strerror (cret));
-              tls_log_func (0, "\n");
-            }
-        }
-
-      if (sret == GNUTLS_E_AGAIN)
-        {
-          sret = gnutls_handshake (server);
-          if (debug_level > 0)
-            {
-              tls_log_func (0, "second gnutls_handshake (server)...\n");
-              tls_log_func (0, gnutls_strerror (sret));
-              tls_log_func (0, "\n");
-            }
-        }
-    }
-  while (
-          /* Not done: */
-          !(sret == GNUTLS_E_AGAIN
-            && cret == GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED)
-          /* No error: */
-          && (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN));
-
-  if (sret != GNUTLS_E_AGAIN && cret != GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED)
-    exit_code = 1;
+  HANDSHAKE_EXPECT(client, server, GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED, 
GNUTLS_E_AGAIN);
 
   if (gnutls_safe_renegotiation_status (client) ||
       gnutls_safe_renegotiation_status (server))
     {
       tls_log_func (0,
                     "Rehandshaked session not using safe renegotiation!\n");
-      exit_code = EXIT_FAILURE;
+      exit(1);
     }
 
   gnutls_bye (client, GNUTLS_SHUT_RDWR);
@@ -318,20 +171,15 @@ main (int argc, char *argv[])
   gnutls_deinit (client);
   gnutls_deinit (server);
 
-  free (to_server);
-  free (to_client);
-
   gnutls_certificate_free_credentials (serverx509cred);
+  gnutls_certificate_free_credentials (clientx509cred);
 
   gnutls_global_deinit ();
 
-  if (debug_level > 0)
+  if (debug)
     {
-      if (exit_code == 0)
-        puts ("Self-test successful");
-      else
-        puts ("Self-test failed");
+      puts ("Self-test successful");
     }
 
-  return exit_code;
+  return;
 }


hooks/post-receive
-- 
GNU gnutls



reply via email to

[Prev in Thread] Current Thread [Next in Thread]