From: Stephan Bosch Date: Mon, 11 Feb 2019 23:59:28 +0000 (+0100) Subject: lib-smtp: smtp-server-transaction - Manage "finished" status of the transaction. X-Git-Tag: 2.3.9~694 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d01002daba7eaaa8fabbc601a324f9901b04b5bd;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-server-transaction - Manage "finished" status of the transaction. --- diff --git a/src/lib-smtp/smtp-server-cmd-data.c b/src/lib-smtp/smtp-server-cmd-data.c index 7340cf2f9f..e2b6cb61ca 100644 --- a/src/lib-smtp/smtp-server-cmd-data.c +++ b/src/lib-smtp/smtp-server-cmd-data.c @@ -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); } diff --git a/src/lib-smtp/smtp-server-cmd-rset.c b/src/lib-smtp/smtp-server-cmd-rset.c index d5b6da03c9..6446a418ac 100644 --- a/src/lib-smtp/smtp-server-cmd-rset.c +++ b/src/lib-smtp/smtp-server-cmd-rset.c @@ -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); } diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index e1b20b5765..bfdda848fa 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -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 */ diff --git a/src/lib-smtp/smtp-server-transaction.c b/src/lib-smtp/smtp-server-transaction.c index df0d799188..79fb945022 100644 --- a/src/lib-smtp/smtp-server-transaction.c +++ b/src/lib-smtp/smtp-server-transaction.c @@ -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, diff --git a/src/lib-smtp/smtp-server.h b/src/lib-smtp/smtp-server.h index d1d6414483..d03e63a967 100644 --- a/src/lib-smtp/smtp-server.h +++ b/src/lib-smtp/smtp-server.h @@ -127,6 +127,8 @@ struct smtp_server_transaction { struct smtp_server_cmd_ctx *cmd; void *context; + + bool finished:1; }; struct smtp_server_recipient *