From 40df5a7d2c66ee42daba6f98afc07cbb3f3223e5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sun, 21 Jul 2019 09:54:43 +0100 Subject: [PATCH] [Fix] Various fixes to SSL state machine handler --- src/libutil/ssl_util.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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; -- 2.39.5