Skip to content

Commit

Permalink
submission: Move generic part of QUIT command to submission-commands.c.
Browse files Browse the repository at this point in the history
  • Loading branch information
stephanbosch authored and villesavolainen committed Feb 12, 2019
1 parent a9a0f6a commit 310f568
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 42 deletions.
42 changes: 0 additions & 42 deletions src/submission/cmd-quit.c
Expand Up @@ -106,45 +106,3 @@ int cmd_quit_relay(struct client *client, struct smtp_server_cmd_ctx *cmd)
relay_cmd_quit_proxy(quit_cmd);
return 0;
}

struct cmd_quit_context {
struct client *client;

struct smtp_server_cmd_ctx *cmd;
};

static void cmd_quit_finish(struct cmd_quit_context *quit_cmd)
{
struct client *client = quit_cmd->client;
struct smtp_server_cmd_ctx *cmd = quit_cmd->cmd;

timeout_remove(&client->to_quit);
smtp_server_reply_quit(cmd);
}

static void
cmd_quit_next(struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
struct cmd_quit_context *quit_cmd)
{
struct client *client = quit_cmd->client;

/* give backend a brief interval to generate a quit reply */
client->to_quit = timeout_add(SUBMISSION_MAX_WAIT_QUIT_REPLY_MSECS,
cmd_quit_finish, quit_cmd);
}

int cmd_quit(void *conn_ctx, struct smtp_server_cmd_ctx *cmd)
{
struct client *client = conn_ctx;
struct cmd_quit_context *quit_cmd;

quit_cmd = p_new(cmd->pool, struct cmd_quit_context, 1);
quit_cmd->client = client;
quit_cmd->cmd = cmd;

smtp_server_command_add_hook(cmd->cmd, SMTP_SERVER_COMMAND_HOOK_NEXT,
cmd_quit_next, quit_cmd);

return cmd_quit_relay(client, cmd);
}

46 changes: 46 additions & 0 deletions src/submission/submission-commands.c
Expand Up @@ -438,3 +438,49 @@ int cmd_noop(void *conn_ctx, struct smtp_server_cmd_ctx *cmd)

return cmd_noop_relay(client, cmd);
}

/*
* QUIT command
*/

struct cmd_quit_context {
struct client *client;

struct smtp_server_cmd_ctx *cmd;
};

static void cmd_quit_finish(struct cmd_quit_context *quit_cmd)
{
struct client *client = quit_cmd->client;
struct smtp_server_cmd_ctx *cmd = quit_cmd->cmd;

timeout_remove(&client->to_quit);
smtp_server_reply_quit(cmd);
}

static void
cmd_quit_next(struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
struct cmd_quit_context *quit_cmd)
{
struct client *client = quit_cmd->client;

/* give backend a brief interval to generate a quit reply */
client->to_quit = timeout_add(SUBMISSION_MAX_WAIT_QUIT_REPLY_MSECS,
cmd_quit_finish, quit_cmd);
}

int cmd_quit(void *conn_ctx, struct smtp_server_cmd_ctx *cmd)
{
struct client *client = conn_ctx;
struct cmd_quit_context *quit_cmd;

quit_cmd = p_new(cmd->pool, struct cmd_quit_context, 1);
quit_cmd->client = client;
quit_cmd->cmd = cmd;

smtp_server_command_add_hook(cmd->cmd, SMTP_SERVER_COMMAND_HOOK_NEXT,
cmd_quit_next, quit_cmd);

return cmd_quit_relay(client, cmd);
}

0 comments on commit 310f568

Please sign in to comment.