aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil/upstream.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-11-21 13:17:05 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-11-21 13:17:05 +0000
commit0af6082b4444aa613bef109c6edd44509aa732ec (patch)
tree5ae302c0ef818625c2cccc232e40677d141093c3 /src/libutil/upstream.c
parentdc0fe13726696bf2ec39fbea6d8e6e5c0893cd76 (diff)
downloadrspamd-0af6082b4444aa613bef109c6edd44509aa732ec.tar.gz
rspamd-0af6082b4444aa613bef109c6edd44509aa732ec.zip
Parse rotation type for upstreams list
Diffstat (limited to 'src/libutil/upstream.c')
-rw-r--r--src/libutil/upstream.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c
index 9ed483f18..33c5e4403 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) {