Mercurial > dovecot > core-2.2
changeset 14933:f33e3ac28e1d
imapc: Added imapc_max_idle_time setting to force activity on connection.
Reducing this from the default 29 minutes should help when there's a
stateful firewall between imapc and the backend server.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 14 Aug 2012 23:09:44 +0300 |
parents | 7a1f49b588a8 |
children | 501f22bf92c3 |
files | 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 |
diffstat | 5 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap-client/imapc-client.h Tue Aug 14 03:03:26 2012 +0300 +++ b/src/lib-imap-client/imapc-client.h Tue Aug 14 23:09:44 2012 +0300 @@ -52,6 +52,7 @@ 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;
--- a/src/lib-imap-client/imapc-connection.c Tue Aug 14 03:03:26 2012 +0300 +++ b/src/lib-imap-client/imapc-connection.c Tue Aug 14 23:09:44 2012 +0300 @@ -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 @@ 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,
--- a/src/lib-storage/index/imapc/imapc-settings.c Tue Aug 14 03:03:26 2012 +0300 +++ b/src/lib-storage/index/imapc/imapc-settings.c Tue Aug 14 23:09:44 2012 +0300 @@ -28,6 +28,8 @@ 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 @@ .imapc_features = "", .imapc_rawlog_dir = "", .imapc_list_prefix = "", + .imapc_max_idle_time = 60*29, + .ssl_crypto_device = "" };
--- a/src/lib-storage/index/imapc/imapc-settings.h Tue Aug 14 03:03:26 2012 +0300 +++ b/src/lib-storage/index/imapc/imapc-settings.h Tue Aug 14 23:09:44 2012 +0300 @@ -23,6 +23,8 @@ 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;
--- a/src/lib-storage/index/imapc/imapc-storage.c Tue Aug 14 03:03:26 2012 +0300 +++ b/src/lib-storage/index/imapc/imapc-storage.c Tue Aug 14 23:09:44 2012 +0300 @@ -228,6 +228,7 @@ *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, "/",