]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Improved connection_disconnect_reason()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 6 May 2016 11:22:29 +0000 (14:22 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 6 May 2016 11:24:05 +0000 (14:24 +0300)
src/lib/connection.c

index f9fab8f798b9abda9cff1e47643b59fb45fd55b1..b73a8c32412798c5daded75e0d97a0ca3f1c6d45 100644 (file)
@@ -359,7 +359,26 @@ int connection_input_read(struct connection *conn)
 
 const char *connection_disconnect_reason(struct connection *conn)
 {
-       return io_stream_get_disconnect_reason(conn->input, conn->output);
+       switch (conn->disconnect_reason) {
+       case CONNECTION_DISCONNECT_DEINIT:
+               return "Deinitializing";
+       case CONNECTION_DISCONNECT_CONNECT_TIMEOUT: {
+               unsigned int msecs =
+                       conn->list->set.client_connect_timeout_msecs;
+               return t_strdup_printf("connect() timed out in %u.%03u secs",
+                                      msecs/1000, msecs%1000);
+       }
+       case CONNECTION_DISCONNECT_IDLE_TIMEOUT:
+               return "Idle timeout";
+       case CONNECTION_DISCONNECT_CONN_CLOSED:
+               if (conn->input == NULL)
+                       return t_strdup_printf("connect() failed: %m");
+               /* fall through */
+       case CONNECTION_DISCONNECT_NOT:
+       case CONNECTION_DISCONNECT_BUFFER_FULL:
+               return io_stream_get_disconnect_reason(conn->input, conn->output);
+       }
+       i_unreached();
 }
 
 void connection_switch_ioloop(struct connection *conn)