/* MAIL command */
-static void
-cmd_mail_replied(struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_mail *data);
-
static bool
cmd_mail_check_state(struct smtp_server_cmd_ctx *cmd)
{
conn->state.pending_mail_cmds--;
i_assert(smtp_server_command_is_replied(command));
- if (!smtp_server_command_replied_success(command))
+ if (!smtp_server_command_replied_success(command)) {
+ /* failure; substitute our own error if predictable */
+ if (smtp_server_command_reply_is_forwarded(command))
+ (void)cmd_mail_check_state(cmd);
return;
+ }
/* success */
conn->state.trans = smtp_server_transaction_create(conn,
}
}
-static void
-cmd_mail_replied(struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_mail *data ATTR_UNUSED)
-{
- struct smtp_server_command *command = cmd->cmd;
-
- i_assert(smtp_server_command_is_replied(command));
- if (!smtp_server_command_replied_success(command)) {
- /* failure; substitute our own error if predictable */
- (void)cmd_mail_check_state(cmd);
- return;
- }
-}
-
static void
cmd_mail_recheck(struct smtp_server_cmd_ctx *cmd,
struct smtp_server_cmd_mail *data ATTR_UNUSED)
smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_NEXT,
cmd_mail_recheck, mail_data);
- smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_REPLIED,
- cmd_mail_replied, mail_data);
smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_COMPLETED,
cmd_mail_completed, mail_data);