diff --git a/tests/x509self.c b/tests/x509self.c index fd95190..180bfd7 100644 --- a/tests/x509self.c +++ b/tests/x509self.c @@ -166,9 +166,38 @@ client (void) /* see the Getting peer's information example */ print_info (session); - gnutls_record_send (session, MSG, strlen (MSG)); + ret = gnutls_record_send (session, MSG, strlen (MSG)); + + if (ret == strlen(MSG)) + { + success ("client: sent record.\n"); + } + else + { + fail ("client: failed to send record.\n"); + gnutls_perror(ret); + goto end; + } ret = gnutls_record_recv (session, buffer, MAX_BUF); + + success ("client: recv returned %d.\n", ret); + + if (ret == GNUTLS_E_REHANDSHAKE) + { + success ("client: doing handshake!\n"); + ret = gnutls_handshake (session); + if (ret == 0) + { + success ("client: handshake complete, reading again.\n"); + ret = gnutls_record_recv (session, buffer, MAX_BUF); + } + else + { + fail ("client: handshake failed.\n"); + } + } + if (ret == 0) { success ("client: Peer has closed the TLS connection\n"); @@ -227,7 +256,7 @@ initialize_tls_session (void) /* request client certificate if any. */ - gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); +// gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); gnutls_dh_set_prime_bits (session, DH_BITS); @@ -408,6 +437,20 @@ server (void) } else if (ret > 0) { + gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); + + success ("server: got data, forcing rehandshake.\n"); + + ret = gnutls_rehandshake(session); + if (ret < 0) + { + fail ("server: rehandshake failed\n"); + gnutls_perror(ret); + break; + } + + success ("server: rehandshake complete.\n"); + /* echo data back to the client */ gnutls_record_send (session, buffer, strlen (buffer));