From: Stephan Bosch Date: Fri, 2 Nov 2018 09:23:42 +0000 (+0100) Subject: lib-smtp: server: connection: Add smtp_server_connection_reply_lines(). X-Git-Tag: 2.3.9~1093 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1f99803d9eb5585703b283b474088f4306c1c203;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: server: connection: Add smtp_server_connection_reply_lines(). This function immediately sends a reply on the connection with the indicated status, enhanced code and text lines. --- diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index c0a0516828..806176da49 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -14,6 +14,7 @@ #include "master-service.h" #include "master-service-ssl.h" +#include "smtp-reply-parser.h" #include "smtp-command-parser.h" #include "smtp-server-private.h" @@ -1203,6 +1204,33 @@ void smtp_server_connection_send_line(struct smtp_server_connection *conn, va_end(args); } +void smtp_server_connection_reply_lines(struct smtp_server_connection *conn, + unsigned int status, + const char *enh_code, + const char *const *text_lines) +{ + struct smtp_reply reply; + + i_zero(&reply); + reply.status = status; + reply.text_lines = text_lines; + + if (!smtp_reply_parse_enhanced_code( + enh_code, &reply.enhanced_code, NULL)) + reply.enhanced_code = SMTP_REPLY_ENH_CODE(status / 100, 0, 0); + + T_BEGIN { + string_t *str; + + smtp_server_connection_debug(conn, "Sent: %s", + smtp_reply_log(&reply)); + + str = t_str_new(256); + smtp_reply_write(str, &reply); + o_stream_nsend(conn->conn.output, str_data(str), str_len(str)); + } T_END; +} + void smtp_server_connection_reply_immediate( struct smtp_server_connection *conn, unsigned int status, const char *fmt, ...) diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index 3805347875..aa1605abdc 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -352,6 +352,10 @@ void smtp_server_connection_timeout_reset(struct smtp_server_connection *conn); void smtp_server_connection_send_line(struct smtp_server_connection *conn, const char *fmt, ...) ATTR_FORMAT(2, 3); +void smtp_server_connection_reply_lines(struct smtp_server_connection *conn, + unsigned int status, + const char *enh_code, + const char *const *text_lines); void smtp_server_connection_reply_immediate( struct smtp_server_connection *conn, unsigned int status, const char *fmt, ...) ATTR_FORMAT(3, 4);