From: Stephan Bosch Date: Sun, 30 Sep 2018 21:35:58 +0000 (+0200) Subject: lib-smtp: client: transaction: Move smtp_client_transaction_submit_more(). X-Git-Tag: 2.3.5~168 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=142cd3710e5d4da092c87fe0fa013403557a5fbf;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: client: transaction: Move smtp_client_transaction_submit_more(). --- diff --git a/src/lib-smtp/smtp-client-transaction.c b/src/lib-smtp/smtp-client-transaction.c index 00fdf3b8fa..aadcbdfece 100644 --- a/src/lib-smtp/smtp-client-transaction.c +++ b/src/lib-smtp/smtp-client-transaction.c @@ -582,64 +582,6 @@ smtp_client_transaction_rcpt_cb(const struct smtp_reply *reply, smtp_client_transaction_try_complete(trans); } -static void -smtp_client_transaction_submit_more(struct smtp_client_transaction *trans) -{ - struct smtp_client_transaction_rcpt *const *rcpt; - unsigned int count; - - timeout_remove(&trans->to_send); - - if (trans->failure != NULL) { - smtp_client_transaction_fail_reply(trans, trans->failure); - return; - } - - if (trans->state == SMTP_CLIENT_TRANSACTION_STATE_NEW) { - enum smtp_client_transaction_state state; - struct smtp_client_transaction *tmp_trans = trans; - - smtp_client_transaction_ref(tmp_trans); - smtp_client_transaction_start(tmp_trans, NULL, NULL); - state = trans->state; - smtp_client_transaction_unref(&tmp_trans); - if (state >= SMTP_CLIENT_TRANSACTION_STATE_FINISHED) - return; - } - - if (trans->state <= SMTP_CLIENT_TRANSACTION_STATE_PENDING) - return; - - rcpt = array_get_modifiable(&trans->rcpts_pending, &count); - if (trans->rcpts_next_send_idx < count) { - unsigned int i; - - smtp_client_transaction_debug(trans, "Sending recipients"); - - if (trans->cmd_last != NULL) - smtp_client_command_unlock(trans->cmd_last); - - for (i = trans->rcpts_next_send_idx; i < count; i++) { - rcpt[i]->cmd_rcpt_to = trans->cmd_last = - smtp_client_command_rcpt_submit_after( - trans->conn, 0, trans->cmd_last, - rcpt[i]->rcpt_to, &rcpt[i]->rcpt_params, - smtp_client_transaction_rcpt_cb, rcpt[i]); - } - trans->rcpts_next_send_idx = i; - - smtp_client_command_lock(trans->cmd_last); - - if (trans->cmd_plug != NULL) { - i_assert(trans->cmd_last != trans->cmd_plug); - smtp_client_command_abort(&trans->cmd_plug); - } - } - - if (trans->data_input != NULL) - smtp_client_transaction_send_data(trans); -} - #undef smtp_client_transaction_add_rcpt void smtp_client_transaction_add_rcpt( struct smtp_client_transaction *trans, @@ -786,6 +728,64 @@ void smtp_client_transaction_send( } } +static void +smtp_client_transaction_submit_more(struct smtp_client_transaction *trans) +{ + struct smtp_client_transaction_rcpt *const *rcpt; + unsigned int count; + + timeout_remove(&trans->to_send); + + if (trans->failure != NULL) { + smtp_client_transaction_fail_reply(trans, trans->failure); + return; + } + + if (trans->state == SMTP_CLIENT_TRANSACTION_STATE_NEW) { + enum smtp_client_transaction_state state; + struct smtp_client_transaction *tmp_trans = trans; + + smtp_client_transaction_ref(tmp_trans); + smtp_client_transaction_start(tmp_trans, NULL, NULL); + state = trans->state; + smtp_client_transaction_unref(&tmp_trans); + if (state >= SMTP_CLIENT_TRANSACTION_STATE_FINISHED) + return; + } + + if (trans->state <= SMTP_CLIENT_TRANSACTION_STATE_PENDING) + return; + + rcpt = array_get_modifiable(&trans->rcpts_pending, &count); + if (trans->rcpts_next_send_idx < count) { + unsigned int i; + + smtp_client_transaction_debug(trans, "Sending recipients"); + + if (trans->cmd_last != NULL) + smtp_client_command_unlock(trans->cmd_last); + + for (i = trans->rcpts_next_send_idx; i < count; i++) { + rcpt[i]->cmd_rcpt_to = trans->cmd_last = + smtp_client_command_rcpt_submit_after( + trans->conn, 0, trans->cmd_last, + rcpt[i]->rcpt_to, &rcpt[i]->rcpt_params, + smtp_client_transaction_rcpt_cb, rcpt[i]); + } + trans->rcpts_next_send_idx = i; + + smtp_client_command_lock(trans->cmd_last); + + if (trans->cmd_plug != NULL) { + i_assert(trans->cmd_last != trans->cmd_plug); + smtp_client_command_abort(&trans->cmd_plug); + } + } + + if (trans->data_input != NULL) + smtp_client_transaction_send_data(trans); +} + static void smtp_client_transaction_try_complete(struct smtp_client_transaction *trans) {