diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-07-21 09:54:43 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-07-21 09:54:43 +0100 |
commit | 40df5a7d2c66ee42daba6f98afc07cbb3f3223e5 (patch) | |
tree | 88181aed8ab0cd4555c8fd850671ac15a12b9a75 | |
parent | b5f639d991c4cbeca0328578bf41ca957a03e596 (diff) | |
download | rspamd-40df5a7d2c66ee42daba6f98afc07cbb3f3223e5.tar.gz rspamd-40df5a7d2c66ee42daba6f98afc07cbb3f3223e5.zip |
[Fix] Various fixes to SSL state machine handler
-rw-r--r-- | src/libutil/ssl_util.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/libutil/ssl_util.c b/src/libutil/ssl_util.c index 54322918c..f26bd063a 100644 --- a/src/libutil/ssl_util.c +++ b/src/libutil/ssl_util.c @@ -408,8 +408,17 @@ rspamd_ssl_event_handler (gint fd, short what, gpointer ud) if (what == EV_TIMER) { c->shut = ssl_shut_unclean; + rspamd_ev_watcher_stop (c->event_loop, c->ev); + g_set_error (&err, rspamd_ssl_quark (), ETIMEDOUT, + "ssl connection timed out"); + c->err_handler (c->handler_data, err); + g_error_free (err); + + return; } + msg_debug ("ssl event; what=%d; c->state=%d", (int)what, (int)c->state); + switch (c->state) { case ssl_conn_init: /* Continue connection */ @@ -453,6 +462,10 @@ rspamd_ssl_event_handler (gint fd, short what, gpointer ud) c->handler (fd, EV_READ, c->handler_data); break; case ssl_next_write: + rspamd_ev_watcher_reschedule (c->event_loop, c->ev, EV_WRITE); + c->state = ssl_conn_connected; + c->handler (fd, EV_WRITE, c->handler_data); + break; case ssl_conn_connected: rspamd_ev_watcher_reschedule (c->event_loop, c->ev, what); c->state = ssl_conn_connected; @@ -697,7 +710,7 @@ gssize rspamd_ssl_writev (struct rspamd_ssl_connection *conn, struct iovec *iov, gsize iovlen) { - static guchar ssl_buf[16000]; + guchar ssl_buf[16000]; guchar *p; struct iovec *cur; guint i, remain; |