dovecot-2.1: imapc: Added imapc_max_idle_time setting to force a...

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 14 23:11:04 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/f33e3ac28e1d
changeset: 14668:f33e3ac28e1d
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 14 23:09:44 2012 +0300
description:
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.

diffstat:

 src/lib-imap-client/imapc-client.h           |  1 +
 src/lib-imap-client/imapc-connection.c       |  4 +---
 src/lib-storage/index/imapc/imapc-settings.c |  4 ++++
 src/lib-storage/index/imapc/imapc-settings.h |  2 ++
 src/lib-storage/index/imapc/imapc-storage.c  |  1 +
 5 files changed, 9 insertions(+), 3 deletions(-)

diffs (76 lines):

diff -r 7a1f49b588a8 -r f33e3ac28e1d src/lib-imap-client/imapc-client.h
--- 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;
diff -r 7a1f49b588a8 -r f33e3ac28e1d src/lib-imap-client/imapc-connection.c
--- 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,
diff -r 7a1f49b588a8 -r f33e3ac28e1d src/lib-storage/index/imapc/imapc-settings.c
--- 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 = ""
 };
 
diff -r 7a1f49b588a8 -r f33e3ac28e1d src/lib-storage/index/imapc/imapc-settings.h
--- 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;
diff -r 7a1f49b588a8 -r f33e3ac28e1d src/lib-storage/index/imapc/imapc-storage.c
--- 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, "/",


More information about the dovecot-cvs mailing list