#include "cert-common.h"
#include "cmocka-common.h"
-/* This tests operation under non-blocking mode in TLS1.2/TLS1.3
- * rekey/rehandshake.
+/* This tests the GNUTLS_AUTO_REAUTH flag functionality under non-blocking mode.
*/
static void tls_log_func(int level, const char *str)
{
msglen = strlen(MSG);
TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF);
- assert_true(gnutls_bye(client, GNUTLS_SHUT_WR) >= 0);
- assert_true(gnutls_bye(server, GNUTLS_SHUT_WR) >= 0);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_INTERRUPTED);
+ assert_return_code(cret, 0);
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_INTERRUPTED);
+ assert_return_code(sret, 0);
gnutls_deinit(client);
gnutls_deinit(server);
msglen = strlen(MSG);
TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF);
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_INTERRUPTED);
+ assert_return_code(cret, 0);
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_INTERRUPTED);
+ assert_return_code(sret, 0);
gnutls_deinit(client);
gnutls_deinit(server);
TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF);
TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF);
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_INTERRUPTED);
+ assert(cret == 0);
+
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_INTERRUPTED);
+ assert(sret == 0);
gnutls_deinit(client);
gnutls_deinit(server);
if (debug)
fputs("\n", stdout);
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret < 0 && !gnutls_error_is_fatal(cret));
+ if (cret < 0)
+ fail("error in client bye: %s\n", gnutls_strerror(cret));
+
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret < 0 && !gnutls_error_is_fatal(sret));
+ if (sret < 0)
+ fail("error in server bye: %s\n", gnutls_strerror(sret));
gnutls_deinit(client);
gnutls_deinit(server);
if (debug)
fputs("\n", stdout);
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret < 0 && !gnutls_error_is_fatal(cret));
+ if (cret < 0)
+ fail("Error in client bye %s\n", gnutls_strerror(cret));
+
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret < 0 && !gnutls_error_is_fatal(sret));
+ if (sret < 0)
+ fail("Error in server bye %s\n", gnutls_strerror(sret));
gnutls_deinit(client);
gnutls_deinit(server);
break;
}
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret < 0 && !gnutls_error_is_fatal(cret));
+ if (cret < 0)
+ fail("error in client bye: %s\n", gnutls_strerror(cret));
+
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret < 0 && !gnutls_error_is_fatal(sret));
+ if (sret < 0)
+ fail("error in server bye: %s\n", gnutls_strerror(sret));
gnutls_deinit(client);
gnutls_deinit(server);
EMPTY_BUF(server, client, buffer, MAX_BUF);
}
- gnutls_bye(client, GNUTLS_SHUT_WR);
- gnutls_bye(server, GNUTLS_SHUT_WR);
+ do {
+ cret = gnutls_bye(client, GNUTLS_SHUT_WR);
+ } while (cret == GNUTLS_E_AGAIN || cret == GNUTLS_E_INTERRUPTED);
+ assert(cret >= 0);
+
+ do {
+ sret = gnutls_bye(server, GNUTLS_SHUT_WR);
+ } while (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_INTERRUPTED);
+ assert(sret >= 0);
gnutls_deinit(client);
gnutls_deinit(server);