From: Timo Sirainen Date: Tue, 14 Aug 2012 20:09:44 +0000 (+0300) Subject: imapc: Added imapc_max_idle_time setting to force activity on connection. X-Git-Tag: 2.1.10~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cee50689ea9f3cfec451a6e105307ee2d86ed5dc;p=thirdparty%2Fdovecot%2Fcore.git 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. --- diff --git a/src/lib-imap-client/imapc-client.h b/src/lib-imap-client/imapc-client.h index 1df5c2ac28..a882e5b38e 100644 --- a/src/lib-imap-client/imapc-client.h +++ b/src/lib-imap-client/imapc-client.h @@ -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; diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 1512e1063f..153ea7b3ba 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -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, diff --git a/src/lib-storage/index/imapc/imapc-settings.c b/src/lib-storage/index/imapc/imapc-settings.c index 86172ae9c5..a1b1a76f58 100644 --- a/src/lib-storage/index/imapc/imapc-settings.c +++ b/src/lib-storage/index/imapc/imapc-settings.c @@ -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 = "" }; diff --git a/src/lib-storage/index/imapc/imapc-settings.h b/src/lib-storage/index/imapc/imapc-settings.h index 070f8b790d..8cc09efaab 100644 --- a/src/lib-storage/index/imapc/imapc-settings.h +++ b/src/lib-storage/index/imapc/imapc-settings.h @@ -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; diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index e50126797e..f6fe7818b1 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -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, "/",