From: Stephan Bosch Date: Sun, 13 May 2018 09:15:59 +0000 (+0200) Subject: submission: Implement basic client vfuncs. X-Git-Tag: 2.3.9~1233 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79e4f34a1ba4c5beb46fdac0388b260259b3163e;p=thirdparty%2Fdovecot%2Fcore.git submission: Implement basic client vfuncs. Currently, only client_destroy can be overriden. --- diff --git a/src/submission/submission-client.c b/src/submission/submission-client.c index 62258123db..e01a861345 100644 --- a/src/submission/submission-client.c +++ b/src/submission/submission-client.c @@ -41,11 +41,12 @@ /* Disconnect client after idling this many milliseconds */ #define CLIENT_IDLE_TIMEOUT_MSECS (10*60*1000) +static const struct smtp_server_callbacks smtp_callbacks; +static const struct submission_client_vfuncs submission_client_vfuncs; + struct client *submission_clients; unsigned int submission_client_count; -static const struct smtp_server_callbacks smtp_callbacks; - static void client_input_pre(void *context) { struct client *client = context; @@ -195,6 +196,7 @@ struct client *client_create(int fd_in, int fd_out, pool = pool_alloconly_create("submission client", 2048); client = p_new(pool, struct client, 1); client->pool = pool; + client->v = submission_client_vfuncs; client->user = user; client->service_user = service_user; client->set = set; @@ -277,6 +279,13 @@ static void client_state_reset(struct client *client) void client_destroy(struct client *client, const char *prefix, const char *reason) +{ + client->v.destroy(client, prefix, reason); +} + +static void +client_default_destroy(struct client *client, const char *prefix, + const char *reason) { if (client->destroyed) return; @@ -508,3 +517,7 @@ static const struct smtp_server_callbacks smtp_callbacks = { .conn_disconnect = client_connection_disconnect, .conn_destroy = client_connection_destroy, }; + +static const struct submission_client_vfuncs submission_client_vfuncs = { + client_default_destroy, +}; diff --git a/src/submission/submission-client.h b/src/submission/submission-client.h index f6f89c9602..98fb9d1242 100644 --- a/src/submission/submission-client.h +++ b/src/submission/submission-client.h @@ -17,11 +17,17 @@ struct client_state { uoff_t data_size; }; +struct submission_client_vfuncs { + void (*destroy)(struct client *client, const char *prefix, + const char *reason); +}; + struct client { struct client *prev, *next; pool_t pool; - const char *session_id; + struct submission_client_vfuncs v; + char *session_id; const struct setting_parser_info *user_set_info; const struct submission_settings *set;