mail-host.c revision 09060303d565e15d54e42b4ef722f9d3c26f5336
7b59d02d2a384be9a08087b14defadd214b3c1ddjb/* Copyright (c) 2010-2014 Dovecot authors, see the included COPYING file */
7b59d02d2a384be9a08087b14defadd214b3c1ddjb unsigned int hash;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossmail_host_cmp(struct mail_host *const *h1, struct mail_host *const *h2)
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_vhost_cmp(const struct mail_vhost *h1, const struct mail_vhost *h2)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* hash collision. not ideal, but we'll need to keep the order
7b59d02d2a384be9a08087b14defadd214b3c1ddjb consistent across directors so compare the IPs next. */
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_vhost_hash_cmp(const unsigned int *hash, const struct mail_vhost *vhost)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
91d7f85e02991954d1e1bd44673df567ad8dcc87Gordon Rossstatic void mail_vhost_add(struct mail_host_list *list, struct mail_host *host)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb const char *ip_str;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb unsigned int i, j;
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstatic void mail_hosts_sort_ring(struct mail_host_list *list)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* rebuild vhosts */
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstatic void mail_hosts_sort_direct(struct mail_host_list *list)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb unsigned int i;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* rebuild vhosts */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_host_add_ip(struct mail_host_list *list, const struct ip_addr *ip,
7b59d02d2a384be9a08087b14defadd214b3c1ddjb const char *tag)
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_host_add(struct mail_host_list *list, const char *host, const char *tag)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb unsigned int i, ips_count;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb for (i = 0; i < ips_count; i++)
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* make sure initial bits match */
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb return -1;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* create hosts from the final bits */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States do {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States ip1_arr[i] = ntohl(i1);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States (void)mail_host_add_ip(list, &ip1, tag);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
7b59d02d2a384be9a08087b14defadd214b3c1ddjb const char *hosts_string)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States const char *tag, *value = *tmp;
7b59d02d2a384be9a08087b14defadd214b3c1ddjb if (p != NULL) {
7b59d02d2a384be9a08087b14defadd214b3c1ddjb /* see if this is ip1-ip2 range */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States net_addr2ip(host2, &ip2) == 0) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if (mail_hosts_add_range(list, ip1, ip2,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States tag) < 0)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States ret = -1;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States continue;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States i_error("No valid servers specified");
7b59d02d2a384be9a08087b14defadd214b3c1ddjbvoid mail_host_set_tag(struct mail_host *host, const char *tag)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States i_assert(tag != NULL);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States i_free(host->tag);
7b59d02d2a384be9a08087b14defadd214b3c1ddjbvoid mail_host_set_vhost_count(struct mail_host_list *list,
7b59d02d2a384be9a08087b14defadd214b3c1ddjbvoid mail_host_remove(struct mail_host_list *list, struct mail_host *host)
fc724630b14603e4c1147df68b7bf45f7de7431fAlan Wright unsigned int i, count;
fc724630b14603e4c1147df68b7bf45f7de7431fAlan Wright for (i = 0; i < count; i++) {
fc724630b14603e4c1147df68b7bf45f7de7431fAlan Wrightmail_host_lookup(struct mail_host_list *list, const struct ip_addr *ip)
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstatic struct mail_host *
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_host_get_by_hash_ring(struct mail_host_list *list, unsigned int hash,
7b59d02d2a384be9a08087b14defadd214b3c1ddjb const char *tag)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if (idx == count) {
7b59d02d2a384be9a08087b14defadd214b3c1ddjb for (i = 0; i < count; i++) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstatic struct mail_host *
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesmail_host_get_by_hash_direct(struct mail_host_list *list, unsigned int hash,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States const char *tag)
29bd28862cfb8abbd3a0f0a4b17e08bbc3652836Alan Wright unsigned int i, count;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States vhosts = array_get(&list->vhosts, &count);
7b59d02d2a384be9a08087b14defadd214b3c1ddjb for (i = 0; i < count; i++) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States host = vhosts[(hash + i) % count].host;
7b59d02d2a384be9a08087b14defadd214b3c1ddjbmail_host_get_by_hash(struct mail_host_list *list, unsigned int hash,
7b59d02d2a384be9a08087b14defadd214b3c1ddjb const char *tag)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if (list->hosts_unsorted)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States mail_hosts_sort(list);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
7b59d02d2a384be9a08087b14defadd214b3c1ddjbconst ARRAY_TYPE(mail_host) *mail_hosts_get(struct mail_host_list *list)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States mail_hosts_sort(list);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstruct mail_host_list *mail_hosts_init(bool consistent_hashing)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States array_free(&list->vhosts);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstatic struct mail_host *mail_host_dup(const struct mail_host *src)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
7b59d02d2a384be9a08087b14defadd214b3c1ddjbstruct mail_host_list *mail_hosts_dup(const struct mail_host_list *src)