]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: connection - Add timeout handlers
authorAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 20 Nov 2018 12:49:51 +0000 (14:49 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 26 Nov 2018 11:33:28 +0000 (13:33 +0200)
Allows specifying custom timeout handlers for connection
and idle timeouts.

src/lib/connection.c
src/lib/connection.h

index a87a40d4db0fa6384c0ea6a84d5d99e40d5bb733..3cad53f4811f030723875b6b77d4985446e79705 100644 (file)
@@ -177,7 +177,7 @@ static void connection_init_streams(struct connection *conn)
        if (conn->input_idle_timeout_secs != 0) {
                conn->to = timeout_add_to(conn->ioloop,
                                          conn->input_idle_timeout_secs*1000,
-                                         connection_idle_timeout, conn);
+                                         *conn->list->v.idle_timeout, conn);
        }
        if (set->major_version != 0 && !set->dont_send_version) {
                e_debug(conn->event, "Sending version handshake");
@@ -407,7 +407,7 @@ int connection_client_connect(struct connection *conn)
                if (set->client_connect_timeout_msecs != 0) {
                        conn->to = timeout_add_to(conn->ioloop,
                                                  set->client_connect_timeout_msecs,
-                                                 connection_connect_timeout, conn);
+                                                 *conn->list->v.connect_timeout, conn);
                }
        } else {
                connection_client_connected(conn, TRUE);
@@ -580,7 +580,10 @@ connection_list_init(const struct connection_settings *set,
                list->v.input = connection_input_default;
        if (list->v.input_line == NULL)
                list->v.input_line = connection_input_line_default;
-
+       if (list->v.idle_timeout == NULL)
+               list->v.idle_timeout = connection_idle_timeout;
+       if (list->v.connect_timeout == NULL)
+               list->v.connect_timeout = connection_connect_timeout;
        return list;
 }
 
index 202daf0bcfc7afe91f8e738cf6bc5d4e33d48450..fe51b7b37e4d21ee5cf59c9d13fd5a5587b7f9f1 100644 (file)
@@ -43,6 +43,11 @@ struct connection_vfuncs {
        void (*input)(struct connection *conn);
        int (*input_line)(struct connection *conn, const char *line);
        int (*input_args)(struct connection *conn, const char *const *args);
+
+       /* Called when input_idle_timeout_secs is reached, defaults to disconnect */
+       void (*idle_timeout)(struct connection *conn);
+       /* Called when client_connect_timeout_msecs is reached, defaults to disconnect */
+       void (*connect_timeout)(struct connection *conn);
 };
 
 struct connection_settings {