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