]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: relay backend: Turn client_proxy_start() into a relay backend vfunc.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 15 Sep 2018 12:35:10 +0000 (14:35 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 9 Oct 2018 06:41:17 +0000 (06:41 +0000)
src/submission/submission-backend-relay.c
src/submission/submission-backend-relay.h
src/submission/submission-client.c

index 6a848e08b2c9dff1b7c21bf8113f76e0a436960e..32cd8f545ecdd8551d1e9ee0655a850734794eaf 100644 (file)
@@ -171,8 +171,6 @@ backend_relay_cmd_helo(struct submission_backend *_backend,
                (struct submission_backend_relay *)_backend;
        struct relay_cmd_helo_context *helo;
 
-       client_proxy_start(_backend->client);
-
        helo = p_new(cmd->pool, struct relay_cmd_helo_context, 1);
        helo->backend = backend;
        helo->cmd = cmd;
@@ -329,8 +327,6 @@ backend_relay_cmd_mail(struct submission_backend *_backend,
 
        relay_cmd_mail_update_xclient(backend);
 
-       client_proxy_start(_backend->client);
-
        /* queue command (pipeline) */
        mail_cmd = p_new(cmd->pool, struct relay_cmd_mail_context, 1);
        mail_cmd->backend = backend;
@@ -819,11 +815,11 @@ static void backend_relay_destroy(struct submission_backend *_backend)
                smtp_client_connection_close(&backend->conn);
 }
 
-static void client_proxy_ready_cb(const struct smtp_reply *reply,
-                                 void *context)
+static void backend_relay_ready_cb(const struct smtp_reply *reply,
+                                  void *context)
 {
-       struct client *client = context;
-       struct submission_backend_relay *backend = &client->backend;
+       struct submission_backend_relay *backend = context;
+       struct client *client = backend->backend.client;
 
        /* check relay status */
        if ((reply->status / 100) != 2) {
@@ -834,23 +830,19 @@ static void client_proxy_ready_cb(const struct smtp_reply *reply,
                return;
        }
 
-       /* notify the client about the fact that we're ready and propagate our
-          capabilities */
-       client_default_backend_started(client,
+       /* notify the backend API about the fact that we're ready and propagate
+          our capabilities */
+       submission_backend_started(&backend->backend,
                smtp_client_connection_get_capabilities(backend->conn));
 }
 
-void client_proxy_start(struct client *client)
+static void backend_relay_start(struct submission_backend *_backend)
 {
-       struct submission_backend_relay *backend = &client->backend;
-
-       if (backend->started)
-               return;
+       struct submission_backend_relay *backend =
+               (struct submission_backend_relay *)_backend;
 
        smtp_client_connection_connect(backend->conn,
-                                      client_proxy_ready_cb, client);
-
-       backend->started = TRUE;
+                                      backend_relay_ready_cb, backend);
 }
 
 /* try to proxy pipelined commands in a similarly pipelined fashion */
@@ -879,6 +871,8 @@ uoff_t client_proxy_get_max_mail_size(struct client *client)
 static struct submission_backend_vfuncs backend_relay_vfuncs = {
        .destroy = backend_relay_destroy,
 
+       .start = backend_relay_start,
+
        .cmd_helo = backend_relay_cmd_helo,
 
        .cmd_mail = backend_relay_cmd_mail,
index 2f0f2d41a1c6b1c0cebf946f04cfb72609571949..db08c147ace28f88829273871fd495c67329ddd7 100644 (file)
@@ -13,12 +13,10 @@ struct submission_backend_relay {
        struct smtp_client_connection *conn;
 
        bool xclient_sent:1;
-       bool started:1;
 };
 
 void client_proxy_create(struct client *client,
                         const struct submission_settings *set);
-void client_proxy_start(struct client *client);
 
 void client_proxy_input_pre(struct client *client);
 void client_proxy_input_post(struct client *client);
index 0bf3353a0818a329374a99c9860211fdcd437465..807c27d901ab6e662ac5764207ad1626f7f7e1e4 100644 (file)
@@ -210,7 +210,7 @@ struct client *client_create(int fd_in, int fd_out,
                client_apply_backend_capabilities(client);
                smtp_server_connection_start(client->conn);
        } else {
-               client_proxy_start(client);
+               submission_backend_start(client->backend_default);
                smtp_server_connection_start_pending(client->conn);
        }