dovecot-2.2: login proxy: Include some extra information in disc...

dovecot at dovecot.org dovecot at dovecot.org
Wed Nov 11 15:35:43 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/9dd14c376418
changeset: 19351:9dd14c376418
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Nov 11 17:35:10 2015 +0200
description:
login proxy: Include some extra information in disconnect log lines.

diffstat:

 src/login-common/login-proxy.c |  28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)

diffs (43 lines):

diff -r ca91d540fd87 -r 9dd14c376418 src/login-common/login-proxy.c
--- a/src/login-common/login-proxy.c	Wed Nov 11 13:15:30 2015 +0200
+++ b/src/login-common/login-proxy.c	Wed Nov 11 17:35:10 2015 +0200
@@ -79,18 +79,32 @@
 login_proxy_free_delayed(struct login_proxy **_proxy, const char *reason)
 	ATTR_NULL(2);
 
-static void login_proxy_free_errno(struct login_proxy **proxy,
+static void login_proxy_free_errno(struct login_proxy **_proxy,
 				   int err, bool server)
 {
-	const char *reason, *who = server ? "server" : "client";
+	struct login_proxy *proxy = *_proxy;
+	string_t *reason = t_str_new(128);
 
-	reason = err == 0 || err == EPIPE ?
-		t_strdup_printf("Disconnected by %s", who) :
-		t_strdup_printf("Disconnected by %s: %s", who, strerror(errno));
+	str_printfa(reason, "Disconnected by %s", server ? "server" : "client");
+	if (err != 0 && err != EPIPE)
+		str_printfa(reason, ": %s", strerror(errno));
+
+	str_printfa(reason, "(%ds idle, in=%"PRIuUOFF_T", out=%"PRIuUOFF_T,
+		    (int)(ioloop_time - proxy->last_io),
+		    proxy->server_output->offset, proxy->client_output->offset);
+	if (o_stream_get_buffer_used_size(proxy->client_output) > 0) {
+		str_printfa(reason, "+%"PRIuSIZE_T,
+			    o_stream_get_buffer_used_size(proxy->client_output));
+	}
+	if (proxy->server_io == NULL)
+		str_append(reason, ", client output blocked");
+	if (proxy->client_io == NULL)
+		str_append(reason, ", server output blocked");
+	str_append_c(reason, ')');
 	if (server)
-		login_proxy_free_delayed(proxy, reason);
+		login_proxy_free_delayed(_proxy, str_c(reason));
 	else
-		login_proxy_free_reason(proxy, reason);
+		login_proxy_free_reason(_proxy, str_c(reason));
 }
 
 static void server_input(struct login_proxy *proxy)


More information about the dovecot-cvs mailing list