From: Timo Sirainen Date: Wed, 10 Aug 2016 14:54:29 +0000 (+0300) Subject: lib: Added connection_input_timeout_reason() X-Git-Tag: 2.2.26~376 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06a2305b6d98a0c0af8f414c6e50085d6da03625;p=thirdparty%2Fdovecot%2Fcore.git lib: Added connection_input_timeout_reason() --- diff --git a/src/lib/connection.c b/src/lib/connection.c index 2e433ba2b1..551fee38ef 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -8,6 +8,7 @@ #include "net.h" #include "strescape.h" #include "llist.h" +#include "time-util.h" #include "connection.h" #include @@ -386,6 +387,24 @@ const char *connection_disconnect_reason(struct connection *conn) i_unreached(); } +const char *connection_input_timeout_reason(struct connection *conn) +{ + if (conn->last_input_tv.tv_sec != 0) { + int diff = timeval_diff_msecs(&ioloop_timeval, &conn->last_input_tv); + return t_strdup_printf("No input for %u.%03u secs", + diff/1000, diff%1000); + } else if (conn->connect_finished.tv_sec != 0) { + int diff = timeval_diff_msecs(&ioloop_timeval, &conn->connect_finished); + return t_strdup_printf( + "No input since connected %u.%03u secs ago", + diff/1000, diff%1000); + } else { + int diff = timeval_diff_msecs(&ioloop_timeval, &conn->connect_started); + return t_strdup_printf("connect() timed out after %u.%03u secs", + diff/1000, diff%1000); + } +} + void connection_switch_ioloop(struct connection *conn) { if (conn->io != NULL) diff --git a/src/lib/connection.h b/src/lib/connection.h index 5ac6c4d57d..84cc97c2ee 100644 --- a/src/lib/connection.h +++ b/src/lib/connection.h @@ -129,6 +129,9 @@ int connection_verify_version(struct connection *conn, const char *const *args); /* Returns human-readable reason for why connection was disconnected. */ const char *connection_disconnect_reason(struct connection *conn); +/* Returns human-readable reason for why connection timed out, + e.g. "No input for 10.023 secs". */ +const char *connection_input_timeout_reason(struct connection *conn); void connection_switch_ioloop(struct connection *conn);