From: Stephan Bosch Date: Sat, 15 Sep 2018 12:35:10 +0000 (+0200) Subject: submission: relay backend: Turn client_proxy_start() into a relay backend vfunc. X-Git-Tag: 2.3.9~1298 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fc5353c0c1c8786d5c0012369e29aa4471aa11b;p=thirdparty%2Fdovecot%2Fcore.git submission: relay backend: Turn client_proxy_start() into a relay backend vfunc. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index 6a848e08b2..32cd8f545e 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -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, diff --git a/src/submission/submission-backend-relay.h b/src/submission/submission-backend-relay.h index 2f0f2d41a1..db08c147ac 100644 --- a/src/submission/submission-backend-relay.h +++ b/src/submission/submission-backend-relay.h @@ -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); diff --git a/src/submission/submission-client.c b/src/submission/submission-client.c index 0bf3353a08..807c27d901 100644 --- a/src/submission/submission-client.c +++ b/src/submission/submission-client.c @@ -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); }