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,