]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Added connection_input_timeout_reason()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 10 Aug 2016 14:54:29 +0000 (17:54 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 15 Aug 2016 13:14:27 +0000 (16:14 +0300)
src/lib/connection.c
src/lib/connection.h

index 2e433ba2b15bb93d5d3a6312a897ec79f48f1b8f..551fee38efe0aaeadd3b360412766971628b8b03 100644 (file)
@@ -8,6 +8,7 @@
 #include "net.h"
 #include "strescape.h"
 #include "llist.h"
+#include "time-util.h"
 #include "connection.h"
 
 #include <unistd.h>
@@ -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)
index 5ac6c4d57d2fa3c0411c5f16bc9d282fd4e5f160..84cc97c2ee9a5cc40886dfee3e23703e7b8fef63 100644 (file)
@@ -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);