]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-transaction - Manage "finished" status of the transaction.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Mon, 11 Feb 2019 23:59:28 +0000 (00:59 +0100)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 2 Mar 2019 10:57:18 +0000 (11:57 +0100)
src/lib-smtp/smtp-server-cmd-data.c
src/lib-smtp/smtp-server-cmd-rset.c
src/lib-smtp/smtp-server-private.h
src/lib-smtp/smtp-server-transaction.c
src/lib-smtp/smtp-server.h

index 7340cf2f9f55bfa52c0152180062c783e5a788e8..e2b6cb61ca84205670ba36b5d8274afe2bddefd5 100644 (file)
@@ -170,6 +170,9 @@ cmd_data_completed(struct smtp_server_cmd_ctx *cmd,
        i_assert(data_cmd != NULL);
        i_stream_unref(&data_cmd->chunk_input);
 
+       i_assert(conn->state.trans != NULL);
+       smtp_server_transaction_finished(conn->state.trans);
+
        /* reset state */
        smtp_server_connection_reset_state(conn);
 }
index d5b6da03c98acef85b02d65b6798545a73fc19bb..6446a418ac4d212f65ca8ff94354c40362a0e3d3 100644 (file)
@@ -19,6 +19,8 @@ cmd_rset_completed(struct smtp_server_cmd_ctx *cmd, void *context ATTR_UNUSED)
        }
 
        /* success */
+       if (conn->state.trans != NULL)
+               smtp_server_transaction_reset(conn->state.trans);
        smtp_server_connection_reset_state(conn);
 }
 
index e1b20b576540b50eb5234427f305be067384a3e4..bfdda848faecc6e0fdd69dd83176ccadf11b8e00 100644 (file)
@@ -398,6 +398,9 @@ smtp_server_transaction_rcpt_count(struct smtp_server_transaction *trans);
 void smtp_server_transaction_last_data(struct smtp_server_transaction *trans,
                                       struct smtp_server_cmd_ctx *cmd);
 
+void smtp_server_transaction_reset(struct smtp_server_transaction *trans);
+void smtp_server_transaction_finished(struct smtp_server_transaction *trans);
+
 /*
  * Server
  */
index df0d799188a17985a89ca902edb3547aee11759b..79fb945022c52bd171e2d3954c16b31661ee5ba6 100644 (file)
@@ -147,6 +147,18 @@ void smtp_server_transaction_last_data(struct smtp_server_transaction *trans,
                smtp_server_recipient_last_data(*rcptp, cmd);
 }
 
+void smtp_server_transaction_reset(struct smtp_server_transaction *trans)
+{
+       i_assert(!trans->finished);
+       trans->finished = TRUE;
+}
+
+void smtp_server_transaction_finished(struct smtp_server_transaction *trans)
+{
+       i_assert(!trans->finished);
+       trans->finished = TRUE;
+}
+
 void smtp_server_transaction_fail_data(struct smtp_server_transaction *trans,
        struct smtp_server_cmd_ctx *data_cmd,
        unsigned int status, const char *enh_code,
index d1d64144831b5a356ce7d8eb09b8ba4cea346a53..d03e63a967219a9c45e0319b1f18bbd4a2523f16 100644 (file)
@@ -127,6 +127,8 @@ struct smtp_server_transaction {
        struct smtp_server_cmd_ctx *cmd;
 
        void *context;
+
+       bool finished:1;
 };
 
 struct smtp_server_recipient *