conn->state.pending_rcpt_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_rcpt_check_state(cmd);
return;
+ }
/* success */
rcpt = smtp_server_transaction_add_rcpt(trans, data->path,
}
}
-static void
-cmd_rcpt_replied(struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_rcpt *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_rcpt_check_state(cmd);
- return;
- }
-}
-
static void
cmd_rcpt_recheck(struct smtp_server_cmd_ctx *cmd,
struct smtp_server_cmd_rcpt *data ATTR_UNUSED)
smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_NEXT,
cmd_rcpt_recheck, rcpt_data);
- smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_REPLIED,
- cmd_rcpt_replied, rcpt_data);
smtp_server_command_add_hook(command, SMTP_SERVER_COMMAND_HOOK_COMPLETED,
cmd_rcpt_completed, rcpt_data);