From 257c55a31143878486bc4564e70e449258d8d2f0 Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Wed, 6 Apr 2022 22:14:42 +0200 Subject: [PATCH] examples: allow bidirectional shutdown in UDP This commit allows the examples to perform a bidirectional shutdown also when using UDP. It is useful to test DTLS retransmission. Signed-off-by: Marco Oliverio --- examples/client/client.c | 21 +++++++++++++-------- examples/server/server.c | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/examples/client/client.c b/examples/client/client.c index 3fc2b715a..8a242f86b 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -4059,17 +4059,22 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) } #endif - if (dtlsUDP == 0) { /* don't send alert after "break" command */ - ret = wolfSSL_shutdown(ssl); - if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { - if (tcp_select(sockfd, DEFAULT_TIMEOUT_SEC) == TEST_RECV_READY) { - ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ - if (ret == WOLFSSL_SUCCESS) - printf("Bidirectional shutdown complete\n"); + ret = wolfSSL_shutdown(ssl); + if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { + while (tcp_select(wolfSSL_get_fd(ssl), DEFAULT_TIMEOUT_SEC) == + TEST_RECV_READY) { + ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ + if (ret == WOLFSSL_SUCCESS) { + printf("Bidirectional shutdown complete\n"); + break; } - if (ret != WOLFSSL_SUCCESS) + else if (ret != WOLFSSL_SHUTDOWN_NOT_DONE) { printf("Bidirectional shutdown failed\n"); + break; + } } + if (ret != WOLFSSL_SUCCESS) + printf("Bidirectional shutdown failed\n"); } #if defined(ATOMIC_USER) && !defined(WOLFSSL_AEAD_ONLY) if (atomicUser) diff --git a/examples/server/server.c b/examples/server/server.c index 9536ce6e4..fb82b03dd 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -3356,9 +3356,20 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) ret = SSL_shutdown(ssl); if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { - ret = SSL_shutdown(ssl); /* bidirectional shutdown */ - if (ret == WOLFSSL_SUCCESS) - printf("Bidirectional shutdown complete\n"); + while (tcp_select(wolfSSL_get_fd(ssl), DEFAULT_TIMEOUT_SEC) == + TEST_RECV_READY) { + ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ + if (ret == WOLFSSL_SUCCESS) { + printf("Bidirectional shutdown complete\n"); + break; + } + else if (ret != WOLFSSL_SHUTDOWN_NOT_DONE) { + printf("Bidirectional shutdown failed\n"); + break; + } + } + if (ret != WOLFSSL_SUCCESS) + printf("Bidirectional shutdown failed\n"); } /* display collected statistics */