From: Vsevolod Stakhov Date: Sat, 21 Nov 2015 13:17:05 +0000 (+0000) Subject: Parse rotation type for upstreams list X-Git-Tag: 1.1.0~515 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0af6082b4444aa613bef109c6edd44509aa732ec;p=thirdparty%2Frspamd.git Parse rotation type for upstreams list --- diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c index 9ed483f18d..33c5e4403f 100644 --- a/src/libutil/upstream.c +++ b/src/libutil/upstream.c @@ -67,6 +67,7 @@ struct upstream_list { rspamd_mutex_t *lock; guint64 hash_seed; guint cur_elt; + enum rspamd_upstream_rotation rot_alg; }; struct upstream_ctx { @@ -407,6 +408,7 @@ rspamd_upstreams_create (struct upstream_ctx *ctx) ls->lock = rspamd_mutex_new (); ls->cur_elt = 0; ls->ctx = ctx; + ls->rot_alg = RSPAMD_UPSTREAM_UNDEF; return ls; } @@ -540,6 +542,35 @@ rspamd_upstreams_parse_line (struct upstream_list *ups, guint len; gboolean ret = FALSE; + if (g_ascii_strncasecmp (p, "random:", sizeof ("random:") - 1) == 0) { + ups->rot_alg = RSPAMD_UPSTREAM_RANDOM; + p += sizeof ("random:") - 1; + } + else if (g_ascii_strncasecmp (p, + "master-slave:", + sizeof ("master-slave:") - 1) == 0) { + ups->rot_alg = RSPAMD_UPSTREAM_MASTER_SLAVE; + p += sizeof ("master-slave:") - 1; + } + else if (g_ascii_strncasecmp (p, + "round-robin:", + sizeof ("round-robin:") - 1) == 0) { + ups->rot_alg = RSPAMD_UPSTREAM_ROUND_ROBIN; + p += sizeof ("round-robin:") - 1; + } + else if (g_ascii_strncasecmp (p, + "hash:", + sizeof ("hash:") - 1) == 0) { + ups->rot_alg = RSPAMD_UPSTREAM_HASHED; + p += sizeof ("hash:") - 1; + } + else if (g_ascii_strncasecmp (p, + "sequential:", + sizeof ("sequential:") - 1) == 0) { + ups->rot_alg = RSPAMD_UPSTREAM_SEQUENTIAL; + p += sizeof ("sequential:") - 1; + } + while (p < end) { len = strcspn (p, separators); if (len > 0) { diff --git a/src/libutil/upstream.h b/src/libutil/upstream.h index eab2be368d..c239a0e34a 100644 --- a/src/libutil/upstream.h +++ b/src/libutil/upstream.h @@ -7,11 +7,12 @@ #include "ucl.h" enum rspamd_upstream_rotation { - RSPAMD_UPSTREAM_RANDOM, + RSPAMD_UPSTREAM_RANDOM = 0, RSPAMD_UPSTREAM_HASHED, RSPAMD_UPSTREAM_ROUND_ROBIN, RSPAMD_UPSTREAM_MASTER_SLAVE, - RSPAMD_UPSTREAM_SEQUENTIAL + RSPAMD_UPSTREAM_SEQUENTIAL, + RSPAMD_UPSTREAM_UNDEF };