]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: connection: Add smtp_server_connection_reply_lines().
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 2 Nov 2018 09:23:42 +0000 (10:23 +0100)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 12 Feb 2019 13:41:55 +0000 (15:41 +0200)
This function immediately sends a reply on the connection with the indicated
status, enhanced code and text lines.

src/lib-smtp/smtp-server-connection.c
src/lib-smtp/smtp-server-private.h

index c0a051682866f8e88fb065105746f0409f86e7a3..806176da4965c4b5c3bf70cbb94e0ad74d27537d 100644 (file)
@@ -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, ...)
index 380534787569cb83ab3051083347b9263e64ae4f..aa1605abdcc27d5adf2d9efd76d52c9aa7f34564 100644 (file)
@@ -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);