view src/director/mail-host.h @ 19310:7f718c840aff

director: Remember backends' hostnames and send them in login reply. This allows login processes to verify the remote server's hostname in SSL certificate.
author Timo Sirainen <tss@iki.fi>
date Mon, 19 Oct 2015 13:49:54 +0300
parents eb9b9519db7a
children 39cfca637d60
line wrap: on
line source

#ifndef MAIL_HOST_H
#define MAIL_HOST_H

#include "net.h"

struct mail_host_list;

struct mail_host {
	unsigned int user_count;
	unsigned int vhost_count;
	/* server up/down. down=TRUE has effectively the same result as if
	   vhost_count=0. */
	bool down;
	time_t last_updown_change;

	struct ip_addr ip;
	char *hostname;
	char *tag;

	/* host was recently changed and ring hasn't synced yet since */
	unsigned int desynced:1;
};
ARRAY_DEFINE_TYPE(mail_host, struct mail_host *);

struct mail_host *
mail_host_add_ip(struct mail_host_list *list, const struct ip_addr *ip,
		 const char *tag);
struct mail_host *
mail_host_add_hostname(struct mail_host_list *list, const char *hostname,
		       const struct ip_addr *ip, const char *tag);
struct mail_host *
mail_host_lookup(struct mail_host_list *list, const struct ip_addr *ip);
struct mail_host *
mail_host_get_by_hash(struct mail_host_list *list, unsigned int hash,
		      const char *tag);

int mail_hosts_parse_and_add(struct mail_host_list *list,
			     const char *hosts_string);
void mail_host_set_tag(struct mail_host *host, const char *tag);
void mail_host_set_down(struct mail_host_list *list,
			struct mail_host *host, bool down, time_t timestamp);
void mail_host_set_vhost_count(struct mail_host_list *list,
			       struct mail_host *host,
			       unsigned int vhost_count);
void mail_host_remove(struct mail_host_list *list, struct mail_host *host);

void mail_hosts_set_synced(struct mail_host_list *list);
unsigned int mail_hosts_hash(struct mail_host_list *list);
bool mail_hosts_have_usable(struct mail_host_list *list);
const ARRAY_TYPE(mail_host) *mail_hosts_get(struct mail_host_list *list);

struct mail_host_list *mail_hosts_init(bool consistent_hashing);
void mail_hosts_deinit(struct mail_host_list **list);

struct mail_host_list *mail_hosts_dup(const struct mail_host_list *src);

#endif