director.h revision 15ab2452b0220a115f4351ad9d7fd5ec70ae7966
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainentypedef void director_state_change_callback_t(struct director *dir);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* IP and port of this director. self_host->ip/port must equal these. */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* all director connections */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* current mail hosts */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* original mail hosts configured in config file.
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen this is used only for doveadm lookups */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* temporary user -> host associations */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* these requests are waiting for directors to be in synced */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen ARRAY_DEFINE(pending_requests, struct director_request *);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen director_state_change_callback_t *state_change_callback;
4307c886579381dbb1897ea1388ae6978c96f560Timo Sirainen /* director hosts are sorted by IP (and port) */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen ARRAY_DEFINE(dir_hosts, struct director_host *);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen /* director ring handshaking is complete.
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen director can start serving clients. */
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen/* Create a new director. If listen_ip specifies an actual IP, it's used with
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen listen_port for finding ourself from the director_servers setting.
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen listen_port is used regardless by director_host_add_from_string() for hosts
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen without specified port. */
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainendirector_init(const struct director_settings *set,
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen const struct ip_addr *listen_ip, unsigned int listen_port,
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainen/* Start connecting to other directors */
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainenvoid director_set_ring_handshaked(struct director *dir);
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainenvoid director_set_ring_synced(struct director *dir);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainenvoid director_set_state_changed(struct director *dir);
2e533fb1283b5f06a4063b519e47f1861c910386Timo Sirainenvoid director_update_host(struct director *dir, struct director_host *src,
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainenvoid director_remove_host(struct director *dir, struct director_host *src,
1c7d88528a964f0a0e16bfe48d76da1cea94088eTimo Sirainenvoid director_flush_host(struct director *dir, struct director_host *src,
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainenvoid director_update_user(struct director *dir, struct director_host *src,
6ea1de17b3d415f6ff2e6a2af8d34d8f6cf17636Timo Sirainenvoid director_move_user(struct director *dir, struct director_host *src,
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen unsigned int username_hash, struct mail_host *host);
5f252b9777617d67196e59fbd1f1d404a5323719Timo Sirainenvoid director_user_killed(struct director *dir, unsigned int username_hash);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainenvoid director_user_killed_everywhere(struct director *dir,
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainenvoid director_sync_freeze(struct director *dir);
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen/* Send data to all directors using both left and right connections
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen (unless they're the same). */
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainenvoid director_update_send(struct director *dir, struct director_host *src,
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen const char *data);
2b602d8698d82e974eba6339ef96c29e256bde31Timo Sirainenint director_connect_host(struct director *dir, struct director_host *host);