]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: Handle output stream errors in a separate function.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 16 Feb 2018 09:11:01 +0000 (10:11 +0100)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 12 Mar 2018 08:42:26 +0000 (10:42 +0200)
src/lib-smtp/smtp-server-connection.c
src/lib-smtp/smtp-server-private.h

index 85003180867b8c00b8218a0322c159d03afc5dd5..6f467e9a44ec9451a876e00ce866eb638b281687 100644 (file)
@@ -592,6 +592,27 @@ bool smtp_server_connection_pending_command_data(
  * Command reply handling
  */
 
+void smtp_server_connection_handle_output_error(
+       struct smtp_server_connection *conn)
+{
+       struct ostream *output = conn->conn.output;
+
+       if (output->stream_errno != EPIPE &&
+           output->stream_errno != ECONNRESET) {
+               smtp_server_connection_error(conn,
+                       "Connection lost: write(%s) failed: %s",
+                       o_stream_get_name(output),
+                       o_stream_get_error(output));
+               smtp_server_connection_close(&conn,
+                       "Write failure");
+       } else {
+               smtp_server_connection_debug(conn,
+                       "Connection lost: Remote disconnected");
+               smtp_server_connection_close(&conn,
+                       "Remote closed connection unexpectedly");
+       }
+}
+
 static bool
 smtp_server_connection_next_reply(struct smtp_server_connection *conn)
 {
@@ -688,22 +709,8 @@ int smtp_server_connection_flush(struct smtp_server_connection *conn)
        int ret;
 
        if ((ret = o_stream_flush(output)) <= 0) {
-               if (ret < 0) {
-                       if (output->stream_errno != EPIPE &&
-                           output->stream_errno != ECONNRESET) {
-                               smtp_server_connection_error(conn,
-                                       "Connection lost: write(%s) failed: %s",
-                                       o_stream_get_name(output),
-                                       o_stream_get_error(output));
-                               smtp_server_connection_close(&conn,
-                                       "Write failure");
-                       } else {
-                               smtp_server_connection_debug(conn,
-                                       "Connection lost: Remote disconnected");
-                               smtp_server_connection_close(&conn,
-                                       "Remote closed connection unexpectedly");
-                       }
-               }
+               if (ret < 0)
+                       smtp_server_connection_handle_output_error(conn);
                return ret;
        }
        return 1;
index bd41896825b8624fe2d161b795a234c3e5208678..8aa5044e4e24a52e735964410b55fe679d53c609 100644 (file)
@@ -296,6 +296,9 @@ void smtp_server_connection_error(struct smtp_server_connection *conn,
 struct connection_list *smtp_server_connection_list_init(void);
 
 void smtp_server_connection_switch_ioloop(struct smtp_server_connection *conn);
+
+void smtp_server_connection_handle_output_error(
+       struct smtp_server_connection *conn);
 void smtp_server_connection_trigger_output(struct smtp_server_connection *conn);
 bool smtp_server_connection_pending_payload(struct smtp_server_connection *conn);