struct smtp_server_helo_data {
const char *domain;
- bool domain_valid:1; /* valid domain/literal specified */
- bool old_smtp:1; /* client sent HELO rather than EHLO */
+ bool domain_valid:1; /* Valid domain/literal specified */
+ bool old_smtp:1; /* Client sent HELO rather than EHLO */
};
/*
/* Hooks */
void smtp_server_recipient_add_hook(struct smtp_server_recipient *rcpt,
- enum smtp_server_recipient_hook_type type,
- smtp_server_rcpt_func_t func,
- void *context);
+ enum smtp_server_recipient_hook_type type,
+ smtp_server_rcpt_func_t func,
+ void *context);
#define smtp_server_recipient_add_hook(_rcpt, _type, _func, _context) \
smtp_server_recipient_add_hook((_rcpt), (_type) - \
CALLBACK_TYPECHECK(_func, void (*)( \
struct smtp_server_transaction *trans,
struct smtp_server_recipient *rcpt);
-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,
- const char *fmt, va_list args) ATTR_FORMAT(5, 0);
+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,
+ const char *fmt, va_list args)
+ ATTR_FORMAT(5, 0);
void smtp_server_transaction_write_trace_record(
string_t *str, struct smtp_server_transaction *trans,
struct smtp_server_cmd_helo {
struct smtp_server_helo_data helo;
- bool first:1; /* this is the first */
- bool changed:1; /* this EHLO/HELO/LHLO is the first or
- different from a previous one */
+ bool first:1; /* This is the first */
+ bool changed:1; /* This EHLO/HELO/LHLO is the first or different
+ from a previous one */
};
struct smtp_server_cmd_mail {
*/
/* HELO/EHLO/LHLO */
- int (*conn_cmd_helo)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_helo *data);
+ int (*conn_cmd_helo)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_cmd_helo *data);
/* STARTTLS */
int (*conn_cmd_starttls)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd);
+ struct smtp_server_cmd_ctx *cmd);
/* AUTH */
- int (*conn_cmd_auth)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_auth *data);
+ int (*conn_cmd_auth)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_cmd_auth *data);
int (*conn_cmd_auth_continue)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd, const char *response);
+ struct smtp_server_cmd_ctx *cmd,
+ const char *response);
/* MAIL */
- int (*conn_cmd_mail)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_cmd_mail *data);
+ int (*conn_cmd_mail)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_cmd_mail *data);
/* RCPT */
- int (*conn_cmd_rcpt)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_recipient *rcpt);
+ int (*conn_cmd_rcpt)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_recipient *rcpt);
/* RSET */
- int (*conn_cmd_rset)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd);
+ int (*conn_cmd_rset)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd);
/* DATA */
int (*conn_cmd_data_begin)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_transaction *trans,
- struct istream *data_input);
+ struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_transaction *trans,
+ struct istream *data_input);
int (*conn_cmd_data_continue)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_server_transaction *trans);
+ struct smtp_server_cmd_ctx *cmd,
+ struct smtp_server_transaction *trans);
/* VRFY */
- int (*conn_cmd_vrfy)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- const char *param);
+ int (*conn_cmd_vrfy)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+ const char *param);
/* NOOP */
- int (*conn_cmd_noop)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd);
+ int (*conn_cmd_noop)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd);
/* QUIT */
- int (*conn_cmd_quit)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd);
+ int (*conn_cmd_quit)(void *conn_ctx, struct smtp_server_cmd_ctx *cmd);
/* XCLIENT */
void (*conn_cmd_xclient)(void *conn_ctx,
- struct smtp_server_cmd_ctx *cmd,
- struct smtp_proxy_data *data);
+ struct smtp_server_cmd_ctx *cmd,
+ struct smtp_proxy_data *data);
/* Command input callbacks:
/* Connection */
int (*conn_start_tls)(void *conn_ctx,
- struct istream **input, struct ostream **output);
+ struct istream **input, struct ostream **output);
/* Connection is disconnected. This is always called before
conn_free(). */
void (*conn_disconnect)(void *context, const char *reason);
/* Create connection. It is still inactive and needs to be started with
one of the functions below. */
struct smtp_server_connection *
-smtp_server_connection_create(struct smtp_server *server,
- int fd_in, int fd_out,
- const struct ip_addr *remote_ip, in_port_t remote_port,
- bool ssl_start, const struct smtp_server_settings *set,
+smtp_server_connection_create(
+ struct smtp_server *server, int fd_in, int fd_out,
+ const struct ip_addr *remote_ip, in_port_t remote_port, bool ssl_start,
+ const struct smtp_server_settings *set,
const struct smtp_server_callbacks *callbacks, void *context)
ATTR_NULL(4, 6, 8);
struct smtp_server_connection *
-smtp_server_connection_create_from_streams(struct smtp_server *server,
+smtp_server_connection_create_from_streams(
+ struct smtp_server *server,
struct istream *input, struct ostream *output,
const struct ip_addr *remote_ip, in_port_t remote_port,
const struct smtp_server_settings *set,
void smtp_server_connection_input_unlock(struct smtp_server_connection *conn);
void smtp_server_connection_set_streams(struct smtp_server_connection *conn,
- struct istream *input, struct ostream *output);
+ struct istream *input,
+ struct ostream *output);
void smtp_server_connection_set_ssl_streams(struct smtp_server_connection *conn,
- struct istream *input, struct ostream *output);
+ struct istream *input,
+ struct ostream *output);
void smtp_server_connection_close(struct smtp_server_connection **_conn,
const char *reason) ATTR_NULL(2);
void smtp_server_connection_terminate(struct smtp_server_connection **_conn,
const char *enh_code, const char *reason)
- ATTR_NULL(3);
+ ATTR_NULL(3);
bool smtp_server_connection_data_check_state(struct smtp_server_cmd_ctx *cmd);
void smtp_server_connection_data_chunk_init(struct smtp_server_cmd_ctx *cmd);
int smtp_server_connection_data_chunk_add(struct smtp_server_cmd_ctx *cmd,
- struct istream *chunk, uoff_t chunk_size, bool chunk_last,
- bool client_input);
+ struct istream *chunk,
+ uoff_t chunk_size, bool chunk_last,
+ bool client_input);
enum smtp_server_state
smtp_server_connection_get_state(struct smtp_server_connection *conn,
const struct smtp_server_stats *
smtp_server_connection_get_stats(struct smtp_server_connection *conn);
void *smtp_server_connection_get_context(struct smtp_server_connection *conn)
- ATTR_PURE;
+ ATTR_PURE;
enum smtp_protocol
smtp_server_connection_get_protocol(struct smtp_server_connection *conn)
- ATTR_PURE;
+ ATTR_PURE;
const char *
smtp_server_connection_get_protocol_name(struct smtp_server_connection *conn);
struct smtp_server_helo_data *
smtp_server_connection_get_helo_data(struct smtp_server_connection *conn);
void smtp_server_connection_get_proxy_data(struct smtp_server_connection *conn,
- struct smtp_proxy_data *proxy_data);
+ struct smtp_proxy_data *proxy_data);
void smtp_server_connection_set_capabilities(
struct smtp_server_connection *conn, enum smtp_capability capabilities);
void smtp_server_command_input_lock(struct smtp_server_cmd_ctx *cmd);
void smtp_server_command_input_unlock(struct smtp_server_cmd_ctx *cmd);
-void smtp_server_command_input_capture(struct smtp_server_cmd_ctx *cmd,
+void smtp_server_command_input_capture(
+ struct smtp_server_cmd_ctx *cmd,
smtp_server_cmd_input_callback_t *callback);
/* EHLO */
void smtp_server_cmd_auth_send_challenge(struct smtp_server_cmd_ctx *cmd,
const char *challenge);
void smtp_server_cmd_auth_success(struct smtp_server_cmd_ctx *cmd,
- const char *username, const char *success_msg)
- ATTR_NULL(3);
+ const char *username, const char *success_msg)
+ ATTR_NULL(3);
/* MAIL */
struct smtp_server_reply *
smtp_server_reply_create_index(struct smtp_server_command *cmd,
- unsigned int index, unsigned int status, const char *enh_code)
- ATTR_NULL(3);
+ unsigned int index, unsigned int status,
+ const char *enh_code) ATTR_NULL(3);
struct smtp_server_reply *
-smtp_server_reply_create(struct smtp_server_command *cmd,
- unsigned int status, const char *enh_code) ATTR_NULL(3);
+smtp_server_reply_create(struct smtp_server_command *cmd, unsigned int status,
+ const char *enh_code) ATTR_NULL(3);
struct smtp_server_reply *
smtp_server_reply_create_forward(struct smtp_server_command *cmd,
- unsigned int index, const struct smtp_reply *from);
+ unsigned int index,
+ const struct smtp_reply *from);
void smtp_server_reply_set_status(struct smtp_server_reply *reply,
unsigned int status, const char *enh_code)
const char **enh_code_r) ATTR_NULL(3);
void smtp_server_reply_add_text(struct smtp_server_reply *reply,
- const char *line);
+ const char *line);
void smtp_server_reply_prepend_text(struct smtp_server_reply *reply,
const char *text_prefix);
void smtp_server_reply_replace_path(struct smtp_server_reply *reply,
/* Submit a reply for the command at the specified index (> 0 only if more than
a single reply is expected). */
void smtp_server_reply_indexv(struct smtp_server_cmd_ctx *_cmd,
- unsigned int index, unsigned int status, const char *enh_code,
- const char *fmt, va_list args) ATTR_FORMAT(5, 0);
+ unsigned int index, unsigned int status,
+ const char *enh_code,
+ const char *fmt, va_list args) ATTR_FORMAT(5, 0);
void smtp_server_reply_index(struct smtp_server_cmd_ctx *_cmd,
- unsigned int index, unsigned int status, const char *enh_code,
- const char *fmt, ...) ATTR_FORMAT(5, 6);
+ unsigned int index, unsigned int status,
+ const char *enh_code, const char *fmt, ...)
+ ATTR_FORMAT(5, 6);
/* Submit the reply for the specified command. */
-void smtp_server_reply(struct smtp_server_cmd_ctx *_cmd,
- unsigned int status, const char *enh_code, const char *fmt, ...)
- ATTR_FORMAT(4, 5);
+void smtp_server_reply(struct smtp_server_cmd_ctx *_cmd, unsigned int status,
+ const char *enh_code, const char *fmt, ...)
+ ATTR_FORMAT(4, 5);
/* Forward a reply for the command at the specified index (> 0 only if more
than a single reply is expected). */
void smtp_server_reply_index_forward(struct smtp_server_cmd_ctx *cmd,
- unsigned int index, const struct smtp_reply *from);
+ unsigned int index,
+ const struct smtp_reply *from);
/* Forward the reply for the specified command. */
void smtp_server_reply_forward(struct smtp_server_cmd_ctx *cmd,
const struct smtp_reply *from);
void smtp_server_reply_ehlo_add(struct smtp_server_reply *reply,
const char *keyword);
void smtp_server_reply_ehlo_add_param(struct smtp_server_reply *reply,
- const char *keyword, const char *param_fmt, ...) ATTR_FORMAT(3, 4);
+ const char *keyword,
+ const char *param_fmt, ...)
+ ATTR_FORMAT(3, 4);
void smtp_server_reply_ehlo_add_params(struct smtp_server_reply *reply,
const char *keyword,
const char *const *params) ATTR_NULL(3);