]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Added imapc_max_idle_time setting to force activity on connection.
authorTimo Sirainen <tss@iki.fi>
Tue, 14 Aug 2012 20:09:44 +0000 (23:09 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 14 Aug 2012 20:09:44 +0000 (23:09 +0300)
Reducing this from the default 29 minutes should help when there's a
stateful firewall between imapc and the backend server.

src/lib-imap-client/imapc-client.h
src/lib-imap-client/imapc-connection.c
src/lib-storage/index/imapc/imapc-settings.c
src/lib-storage/index/imapc/imapc-settings.h
src/lib-storage/index/imapc/imapc-storage.c

index 1df5c2ac28c888ace62e2c01c096de1ff26e5b0c..a882e5b38e62a1743e5a1fdbf5093967b18784d8 100644 (file)
@@ -52,6 +52,7 @@ struct imapc_client_settings {
        const char *master_user;
        const char *username;
        const char *password;
+       unsigned int max_idle_time;
 
        const char *dns_client_socket_path;
        const char *temp_path_prefix;
index 1512e1063f32976c8690dd41d00c1c1660e4baac..153ea7b3ba36bbec71fb920d82fd551f190904d4 100644 (file)
@@ -24,8 +24,6 @@
 #define IMAPC_CONNECT_TIMEOUT_MSECS (1000*30)
 #define IMAPC_COMMAND_TIMEOUT_MSECS (1000*60*5)
 #define IMAPC_MAX_INLINE_LITERAL_SIZE (1024*32)
-/* IMAP protocol requires activity at least every 30 minutes */
-#define IMAPC_MAX_IDLE_MSECS (1000*60*29)
 
 enum imapc_input_state {
        IMAPC_INPUT_STATE_NONE = 0,
@@ -1306,7 +1304,7 @@ static void imapc_connection_connect_next_ip(struct imapc_connection *conn)
        conn->parser = imap_parser_create(conn->input, NULL, (size_t)-1);
        conn->to = timeout_add(IMAPC_CONNECT_TIMEOUT_MSECS,
                               imapc_connection_timeout, conn);
-       conn->to_output = timeout_add(IMAPC_MAX_IDLE_MSECS,
+       conn->to_output = timeout_add(conn->client->set.max_idle_time*1000,
                                      imapc_connection_reset_idle, conn);
        if (conn->client->set.debug) {
                i_debug("imapc(%s): Connecting to %s:%u", conn->name,
index 86172ae9c5f3fd90a9426860217b07843617d9a8..a1b1a76f5881ae9dcbbaf80168480401959499f0 100644 (file)
@@ -28,6 +28,8 @@ static const struct setting_define imapc_setting_defines[] = {
        DEF(SET_STR, imapc_features),
        DEF(SET_STR, imapc_rawlog_dir),
        DEF(SET_STR, imapc_list_prefix),
+       DEF(SET_TIME, imapc_max_idle_time),
+
        DEF(SET_STR, ssl_crypto_device),
 
        SETTING_DEFINE_LIST_END
@@ -48,6 +50,8 @@ static const struct imapc_settings imapc_default_settings = {
        .imapc_features = "",
        .imapc_rawlog_dir = "",
        .imapc_list_prefix = "",
+       .imapc_max_idle_time = 60*29,
+
        .ssl_crypto_device = ""
 };
 
index 070f8b790da9e782ac11551618c0440f0e3c815f..8cc09efaab5ca1dfb361dd52bb82d10b62a5456a 100644 (file)
@@ -23,6 +23,8 @@ struct imapc_settings {
        const char *imapc_features;
        const char *imapc_rawlog_dir;
        const char *imapc_list_prefix;
+       unsigned int imapc_max_idle_time;
+
        const char *ssl_crypto_device;
 
        enum imapc_features parsed_features;
index e50126797e58399e3d62470c53118066040be7cc..f6fe7818b177c91beca13970204cbf3e721292ae 100644 (file)
@@ -228,6 +228,7 @@ imapc_storage_create(struct mail_storage *_storage,
                *error_r = "missing imapc_password";
                return -1;
        }
+       set.max_idle_time = storage->set->imapc_max_idle_time;
        set.dns_client_socket_path =
                *_storage->user->set->base_dir == '\0' ? "" :
                t_strconcat(_storage->user->set->base_dir, "/",