From e1b9840ed7c52346e4e203470210f7821158f708 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Tue, 6 Oct 2015 14:04:11 +0100 Subject: [PATCH] Add s_client support for waiting for async s_server already had the ability to wait on an async file descriptor. This adds it to s_client too. Reviewed-by: Rich Salz --- apps/apps.c | 14 ++++++++++++++ apps/apps.h | 1 + apps/s_client.c | 2 ++ apps/s_server.c | 16 ---------------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/apps/apps.c b/apps/apps.c index 89f43406bf..c6b70d63a8 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -2884,3 +2884,17 @@ BIO *bio_open_default_quiet(const char *filename, char mode, int format) return bio_open_default_(filename, mode, format, 1); } +void wait_for_async(SSL *s) +{ + int width, fd; + fd_set asyncfds; + + fd = SSL_get_async_wait_fd(s); + if (fd < 0) + return; + + width = fd + 1; + FD_ZERO(&asyncfds); + openssl_fdset(fd, &asyncfds); + select(width, (void *)&asyncfds, NULL, NULL, NULL); +} diff --git a/apps/apps.h b/apps/apps.h index 185ac2422e..e259658918 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -162,6 +162,7 @@ CONF *app_load_config(const char *filename); CONF *app_load_config_quiet(const char *filename); int app_load_modules(const CONF *config); void unbuffer(FILE *fp); +void wait_for_async(SSL *s); /* * Common verification options. diff --git a/apps/s_client.c b/apps/s_client.c index 723e7cba3b..4a93b3de54 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -1897,6 +1897,7 @@ int s_client_main(int argc, char **argv) break; case SSL_ERROR_WANT_ASYNC: BIO_printf(bio_c_out, "write A BLOCK\n"); + wait_for_async(con); write_ssl = 1; read_tty = 0; break; @@ -1984,6 +1985,7 @@ int s_client_main(int argc, char **argv) break; case SSL_ERROR_WANT_ASYNC: BIO_printf(bio_c_out, "read A BLOCK\n"); + wait_for_async(con); write_tty = 0; read_ssl = 1; if ((read_tty == 0) && (write_ssl == 0)) diff --git a/apps/s_server.c b/apps/s_server.c index 8645c6c203..c90b700af3 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -194,7 +194,6 @@ typedef unsigned int u_int; static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength); #endif static int not_resumable_sess_cb(SSL *s, int is_forward_secure); -static void wait_for_async(SSL *s); static int sv_body(char *hostname, int s, int stype, unsigned char *context); static int www_body(char *hostname, int s, int stype, unsigned char *context); static int rev_body(char *hostname, int s, int stype, unsigned char *context); @@ -2008,21 +2007,6 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx) SSL_CTX_sess_get_cache_size(ssl_ctx)); } -static void wait_for_async(SSL *s) -{ - int width, fd; - fd_set asyncfds; - - fd = SSL_get_async_wait_fd(s); - if (fd < 0) - return; - - width = fd + 1; - FD_ZERO(&asyncfds); - openssl_fdset(fd, &asyncfds); - select(width, (void *)&asyncfds, NULL, NULL, NULL); -} - static int sv_body(char *hostname, int s, int stype, unsigned char *context) { char *buf = NULL; -- 2.39.5