]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: Move generic part of DATA command to submission-commands.c.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Wed, 29 Aug 2018 22:59:50 +0000 (00:59 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 9 Oct 2018 06:41:17 +0000 (06:41 +0000)
src/submission/cmd-data.c
src/submission/submission-commands.c

index de0b8c65ea33beb53ba988bd425f6a283f269132..0ec7c780728d33603e29e43a63bf4e57c1470de7 100644 (file)
@@ -3,9 +3,6 @@
 #include "submission-common.h"
 #include "str.h"
 #include "str-sanitize.h"
-#include "istream.h"
-#include "istream-concat.h"
-#include "istream-seekable.h"
 #include "mail-storage.h"
 #include "imap-url.h"
 #include "imap-msgpart.h"
@@ -82,75 +79,6 @@ int cmd_data_relay(struct client *client, struct smtp_server_cmd_ctx *cmd,
        return 0;
 }
 
-int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
-                     struct smtp_server_transaction *trans)
-{
-       struct client *client = conn_ctx;
-       struct istream *data_input = client->state.data_input;
-       struct istream *inputs[3];
-       string_t *added_headers;
-       const unsigned char *data;
-       size_t size;
-       int ret;
-
-       while ((ret = i_stream_read_more(data_input, &data, &size)) > 0) {
-               i_stream_skip(data_input, size);
-               if (!smtp_server_cmd_data_check_size(cmd))
-                       return -1;
-       }
-
-       if (ret == 0)
-               return 0;
-       if (ret < 0 && data_input->stream_errno != 0)
-               return -1;
-
-       /* Done reading DATA stream; remove it from state and continue with
-          local variable. */
-       client->state.data_input = NULL;
-
-       ret = i_stream_get_size(data_input, TRUE,
-                               &client->state.data_size);
-       i_assert(ret > 0); // FIXME
-
-       /* prepend our own headers */
-       added_headers = t_str_new(200);
-       smtp_server_transaction_write_trace_record(added_headers, trans);
-
-       i_stream_seek(data_input, 0);
-       inputs[0] = i_stream_create_copy_from_data(
-               str_data(added_headers), str_len(added_headers));
-       inputs[1] = data_input;
-       inputs[2] = NULL;
-
-       data_input = i_stream_create_concat(inputs);
-       i_stream_unref(&inputs[0]);
-       i_stream_unref(&inputs[1]);
-
-       ret = cmd_data_relay(client, cmd, trans, data_input);
-
-       i_stream_unref(&data_input);
-       return ret;
-}
-
-int cmd_data_begin(void *conn_ctx,
-                  struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
-                  struct smtp_server_transaction *trans ATTR_UNUSED,
-                  struct istream *data_input)
-{
-       struct client *client = conn_ctx;
-       struct istream *inputs[2];
-       string_t *path;
-
-       inputs[0] = data_input;
-       inputs[1] = NULL;
-
-       path = t_str_new(256);
-       mail_user_set_get_temp_prefix(path, client->user->set);
-       client->state.data_input = i_stream_create_seekable_path(inputs,
-               SUBMISSION_MAIL_DATA_MAX_INMEMORY_SIZE, str_c(path));
-       return 0;
-}
-
 /*
  * BURL command
  */
index 8c315f6af69dd4f6c51cf2f65297a04a008ce6fa..1a52acf39a9a9ad1d0d417996f2f1083a0e05417 100644 (file)
@@ -2,6 +2,10 @@
 
 #include "submission-common.h"
 #include "str.h"
+#include "istream.h"
+#include "istream-concat.h"
+#include "istream-seekable.h"
+#include "mail-storage.h"
 #include "smtp-client.h"
 #include "smtp-client-connection.h"
 
@@ -118,3 +122,76 @@ int cmd_rset(void *conn_ctx, struct smtp_server_cmd_ctx *cmd)
        return cmd_rset_relay(client, cmd);
 }
 
+/*
+ * DATA/BDAT commands
+ */
+
+int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
+                     struct smtp_server_transaction *trans)
+{
+       struct client *client = conn_ctx;
+       struct istream *data_input = client->state.data_input;
+       struct istream *inputs[3];
+       string_t *added_headers;
+       const unsigned char *data;
+       size_t size;
+       int ret;
+
+       while ((ret = i_stream_read_more(data_input, &data, &size)) > 0) {
+               i_stream_skip(data_input, size);
+               if (!smtp_server_cmd_data_check_size(cmd))
+                       return -1;
+       }
+
+       if (ret == 0)
+               return 0;
+       if (ret < 0 && data_input->stream_errno != 0)
+               return -1;
+
+       /* Done reading DATA stream; remove it from state and continue with
+          local variable. */
+       client->state.data_input = NULL;
+
+       ret = i_stream_get_size(data_input, TRUE,
+                               &client->state.data_size);
+       i_assert(ret > 0); // FIXME
+
+       /* prepend our own headers */
+       added_headers = t_str_new(200);
+       smtp_server_transaction_write_trace_record(added_headers, trans);
+
+       i_stream_seek(data_input, 0);
+       inputs[0] = i_stream_create_copy_from_data(
+               str_data(added_headers), str_len(added_headers));
+       inputs[1] = data_input;
+       inputs[2] = NULL;
+
+       data_input = i_stream_create_concat(inputs);
+       i_stream_unref(&inputs[0]);
+       i_stream_unref(&inputs[1]);
+
+       ret = cmd_data_relay(client, cmd, trans, data_input);
+
+       i_stream_unref(&data_input);
+       return ret;
+}
+
+int cmd_data_begin(void *conn_ctx,
+                  struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
+                  struct smtp_server_transaction *trans ATTR_UNUSED,
+                  struct istream *data_input)
+{
+       struct client *client = conn_ctx;
+       struct istream *inputs[2];
+       string_t *path;
+
+       inputs[0] = data_input;
+       inputs[1] = NULL;
+
+       path = t_str_new(256);
+       mail_user_set_get_temp_prefix(path, client->user->set);
+       client->state.data_input = i_stream_create_seekable_path(inputs,
+               SUBMISSION_MAIL_DATA_MAX_INMEMORY_SIZE, str_c(path));
+       return 0;
+}
+