From b738fdbffa67e92630fa314140b0da5eb7842ee7 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka <valenok@gmail.com> Date: Tue, 8 Jul 2014 11:28:03 +0100 Subject: [PATCH] updated net skeleton --- mongoose.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/mongoose.c b/mongoose.c index eee7667ea..1ca9e5eb2 100644 --- a/mongoose.c +++ b/mongoose.c @@ -713,6 +713,15 @@ int ns_hexdump(const void *buf, int len, char *dst, int dst_len) { return n; } +#ifdef NS_ENABLE_SSL +static int ns_ssl_err(struct ns_connection *conn, int res) { + int ssl_err = SSL_get_error(conn->ssl, res); + if (ssl_err == SSL_ERROR_WANT_READ) conn->flags |= NSF_WANT_READ; + if (ssl_err == SSL_ERROR_WANT_WRITE) conn->flags |= NSF_WANT_WRITE; + return ssl_err; +} +#endif + static void ns_read_from_socket(struct ns_connection *conn) { char buf[2048]; int n = 0; @@ -726,10 +735,7 @@ static void ns_read_from_socket(struct ns_connection *conn) { #ifdef NS_ENABLE_SSL if (ret == 0 && ok == 0 && conn->ssl != NULL) { int res = SSL_connect(conn->ssl); - int ssl_err = SSL_get_error(conn->ssl, res); - DBG(("%p %d wres %d %d", conn, conn->flags, res, ssl_err)); - if (ssl_err == SSL_ERROR_WANT_READ) conn->flags |= NSF_WANT_READ; - if (ssl_err == SSL_ERROR_WANT_WRITE) conn->flags |= NSF_WANT_WRITE; + int ssl_err = ns_ssl_err(conn, res); if (res == 1) { conn->flags |= NSF_SSL_HANDSHAKE_DONE; } else if (ssl_err == SSL_ERROR_WANT_READ || @@ -760,12 +766,10 @@ static void ns_read_from_socket(struct ns_connection *conn) { iobuf_append(&conn->recv_iobuf, buf, n); ns_call(conn, NS_RECV, &n); } + ns_ssl_err(conn, n); } else { int res = SSL_accept(conn->ssl); - int ssl_err = SSL_get_error(conn->ssl, res); - DBG(("%p %d rres %d %d", conn, conn->flags, res, ssl_err)); - if (ssl_err == SSL_ERROR_WANT_READ) conn->flags |= NSF_WANT_READ; - if (ssl_err == SSL_ERROR_WANT_WRITE) conn->flags |= NSF_WANT_WRITE; + int ssl_err = ns_ssl_err(conn, res); if (res == 1) { conn->flags |= NSF_SSL_HANDSHAKE_DONE; } else if (ssl_err == SSL_ERROR_WANT_READ || @@ -798,10 +802,9 @@ static void ns_write_to_socket(struct ns_connection *conn) { #ifdef NS_ENABLE_SSL if (conn->ssl != NULL) { n = SSL_write(conn->ssl, io->buf, io->len); - if (n < 0) { - int ssl_err = SSL_get_error(conn->ssl, n); - DBG(("%p %d %d", conn, n, ssl_err)); - if (ssl_err == 2 || ssl_err == 3) { + if (n <= 0) { + int ssl_err = ns_ssl_err(conn, n); + if (ssl_err == SSL_ERROR_WANT_READ || ssl_err == SSL_ERROR_WANT_WRITE) { return; // Call us again } else { conn->flags |= NSF_CLOSE_IMMEDIATELY; -- GitLab