From 625e2a5060920abbef1c444bfd4b6378f389ae3d Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 8 Jun 2021 11:59:12 +0100 Subject: [PATCH] Refactor to remove duplicate code. --- lib/net_mosq.c | 68 +++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/lib/net_mosq.c b/lib/net_mosq.c index 16d0e8c9..06aa7e72 100644 --- a/lib/net_mosq.c +++ b/lib/net_mosq.c @@ -943,11 +943,42 @@ int net__socket_connect(struct mosquitto *mosq, const char *host, uint16_t port, } +#ifdef WITH_TLS +static net__handle_ssl(struct mosquitto* mosq, int ret) +{ + int err; + + err = SSL_get_error(mosq->ssl, ret); + if (err == SSL_ERROR_WANT_READ) { + ret = -1; + errno = EAGAIN; + } + else if (err == SSL_ERROR_WANT_WRITE) { + ret = -1; +#ifdef WITH_BROKER + mux__add_out(mosq); +#else + mosq->want_write = true; +#endif + errno = EAGAIN; + } + else { + net__print_ssl_error(mosq); + errno = EPROTO; + } + ERR_clear_error(); +#ifdef WIN32 + WSASetLastError(errno); +#endif + + return ret; +} +#endif + ssize_t net__read(struct mosquitto *mosq, void *buf, size_t count) { #ifdef WITH_TLS int ret; - int err; #endif assert(mosq); errno = 0; @@ -955,22 +986,7 @@ ssize_t net__read(struct mosquitto *mosq, void *buf, size_t count) if(mosq->ssl){ ret = SSL_read(mosq->ssl, buf, (int)count); if(ret <= 0){ - err = SSL_get_error(mosq->ssl, ret); - if(err == SSL_ERROR_WANT_READ){ - ret = -1; - errno = EAGAIN; - }else if(err == SSL_ERROR_WANT_WRITE){ - ret = -1; - mosq->want_write = true; - errno = EAGAIN; - }else{ - net__print_ssl_error(mosq); - errno = EPROTO; - } - ERR_clear_error(); -#ifdef WIN32 - WSASetLastError(errno); -#endif + ret = net__handle_ssl(mosq, ret); } return (ssize_t )ret; }else{ @@ -993,7 +1009,6 @@ ssize_t net__write(struct mosquitto *mosq, const void *buf, size_t count) { #ifdef WITH_TLS int ret; - int err; #endif assert(mosq); @@ -1003,22 +1018,7 @@ ssize_t net__write(struct mosquitto *mosq, const void *buf, size_t count) mosq->want_write = false; ret = SSL_write(mosq->ssl, buf, (int)count); if(ret < 0){ - err = SSL_get_error(mosq->ssl, ret); - if(err == SSL_ERROR_WANT_READ){ - ret = -1; - errno = EAGAIN; - }else if(err == SSL_ERROR_WANT_WRITE){ - ret = -1; - mosq->want_write = true; - errno = EAGAIN; - }else{ - net__print_ssl_error(mosq); - errno = EPROTO; - } - ERR_clear_error(); -#ifdef WIN32 - WSASetLastError(errno); -#endif + ret = net__handle_ssl(mosq, ret); } return (ssize_t )ret; }else{