Mercurial > dovecot > core-2.2
changeset 22660:2668f5707dbd
director: Add kick_callback to director
This callback gets called whenever director has performed
a kick.
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Tue, 07 Nov 2017 14:34:32 +0200 |
parents | 69f827f71014 |
children | 34765a426c56 |
files | src/director/director.c src/director/director.h src/director/main.c |
diffstat | 3 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/director/director.c Fri Oct 27 16:45:16 2017 +0300 +++ b/src/director/director.c Tue Nov 07 14:34:32 2017 +0200 @@ -986,6 +986,9 @@ i_assert(ctx->dir->users_kicking_count > 0); ctx->dir->users_kicking_count--; + if (ctx->dir->kick_callback != NULL) + ctx->dir->kick_callback(ctx->dir); + ctx->callback_pending = FALSE; @@ -1159,6 +1162,8 @@ i_assert(dir->users_kicking_count > 0); dir->users_kicking_count--; + if (dir->kick_callback != NULL) + dir->kick_callback(dir); } void director_kick_user(struct director *dir, struct director_host *src, @@ -1395,7 +1400,8 @@ struct director * director_init(const struct director_settings *set, const struct ip_addr *listen_ip, in_port_t listen_port, - director_state_change_callback_t *callback) + director_state_change_callback_t *callback, + director_kick_callback_t *kick_callback) { struct director *dir; @@ -1404,6 +1410,7 @@ dir->self_port = listen_port; dir->self_ip = *listen_ip; dir->state_change_callback = callback; + dir->kick_callback = kick_callback; i_array_init(&dir->dir_hosts, 16); i_array_init(&dir->pending_requests, 16); i_array_init(&dir->connections, 8);
--- a/src/director/director.h Fri Oct 27 16:45:16 2017 +0300 +++ b/src/director/director.h Tue Nov 07 14:34:32 2017 +0200 @@ -63,6 +63,7 @@ extern const char *user_kill_state_names[USER_KILL_STATE_DELAY+1]; typedef void director_state_change_callback_t(struct director *dir); +typedef director_state_change_callback_t director_kick_callback_t; /* When a user gets freed, the kill_ctx may still be left alive. It's also possible for the user to come back, in which case the kill_ctx is usually @@ -132,6 +133,7 @@ struct timeout *to_handshake_warning; director_state_change_callback_t *state_change_callback; + director_kick_callback_t *kick_callback; /* director hosts are sorted by IP (and port) */ ARRAY(struct director_host *) dir_hosts; @@ -174,7 +176,8 @@ struct director * director_init(const struct director_settings *set, const struct ip_addr *listen_ip, in_port_t listen_port, - director_state_change_callback_t *callback); + director_state_change_callback_t *callback, + director_kick_callback_t *kick_callback); void director_deinit(struct director **dir); void director_find_self(struct director *dir);
--- a/src/director/main.c Fri Oct 27 16:45:16 2017 +0300 +++ b/src/director/main.c Tue Nov 07 14:34:32 2017 +0200 @@ -284,7 +284,7 @@ directors_init(); director = director_init(set, &listen_ip, listen_port, - director_state_changed); + director_state_changed, NULL); director_host_add_from_string(director, set->director_servers); director_find_self(director); if (mail_hosts_parse_and_add(director->mail_hosts,