From: Stephan Bosch Date: Tue, 16 Oct 2018 21:58:23 +0000 (+0200) Subject: submission: relay backend: Provide access to the client connection and transaction... X-Git-Tag: 2.3.9~1124 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=56b9f1ba787c331ea53d34456b8c473c4b6e549d;p=thirdparty%2Fdovecot%2Fcore.git submission: relay backend: Provide access to the client connection and transaction for plugins. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index 85591c76fe..d5e8b2995b 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -981,7 +981,7 @@ backend_relay_cmd_quit(struct submission_backend *_backend, * Relay backend */ -struct submission_backend * +struct submission_backend_relay * submission_backend_relay_create( struct client *client, const struct submision_backend_relay_settings *set) @@ -1041,9 +1041,29 @@ submission_backend_relay_create( smtp_client, set->protocol, set->path, &smtp_set); } + return backend; +} + +struct submission_backend * +submission_backend_relay_get(struct submission_backend_relay *backend) +{ return &backend->backend; } +struct smtp_client_connection * +submission_backend_relay_get_connection( + struct submission_backend_relay *backend) +{ + return backend->conn; +} + +struct smtp_client_transaction * +submission_backend_relay_get_transaction( + struct submission_backend_relay *backend) +{ + return backend->trans; +} + static void backend_relay_destroy(struct submission_backend *_backend) { struct submission_backend_relay *backend = diff --git a/src/submission/submission-backend-relay.h b/src/submission/submission-backend-relay.h index 7242702dc6..cf55d0821e 100644 --- a/src/submission/submission-backend-relay.h +++ b/src/submission/submission-backend-relay.h @@ -6,6 +6,7 @@ #include "submission-backend.h" struct client; +struct submission_backend_relay; struct submision_backend_relay_settings { const char *my_hostname; @@ -29,9 +30,23 @@ struct submision_backend_relay_settings { bool trusted:1; }; -struct submission_backend * +struct submission_backend_relay * submission_backend_relay_create( struct client *client, const struct submision_backend_relay_settings *set); +/* Returns the base backend object for this relay backend */ +struct submission_backend * +submission_backend_relay_get(struct submission_backend_relay *backend) + ATTR_PURE; + +/* Returns the client connection for this relay backend */ +struct smtp_client_connection * +submission_backend_relay_get_connection( + struct submission_backend_relay *backend) ATTR_PURE; +/* Returns the current client transaction for this relay backend */ +struct smtp_client_transaction * +submission_backend_relay_get_transaction( + struct submission_backend_relay *backend) ATTR_PURE; + #endif diff --git a/src/submission/submission-client.c b/src/submission/submission-client.c index 1625fd37b9..e3e2b1f35b 100644 --- a/src/submission/submission-client.c +++ b/src/submission/submission-client.c @@ -160,8 +160,10 @@ client_create_backend_default(struct client *client, relay_set.ssl_mode = SMTP_CLIENT_SSL_MODE_NONE; relay_set.ssl_verify = set->submission_relay_ssl_verify; - client->backend_default = + client->backend_default_relay = submission_backend_relay_create(client, &relay_set); + client->backend_default = + submission_backend_relay_get(client->backend_default_relay); } static void client_init_urlauth(struct client *client) diff --git a/src/submission/submission-client.h b/src/submission/submission-client.h index e83a6cb6e8..0fc46b1cec 100644 --- a/src/submission/submission-client.h +++ b/src/submission/submission-client.h @@ -7,6 +7,7 @@ struct smtp_reply; struct submission_recipient; struct submission_backend; +struct submission_backend_relay; struct client; struct client_state { @@ -101,6 +102,7 @@ struct client { enum smtp_capability backend_capabilities; struct submission_backend *backend_default; + struct submission_backend_relay *backend_default_relay; struct submission_backend *backends; unsigned int backends_count;