diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-11-21 13:17:05 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-11-21 13:17:05 +0000 |
commit | 0af6082b4444aa613bef109c6edd44509aa732ec (patch) | |
tree | 5ae302c0ef818625c2cccc232e40677d141093c3 /src/libutil/upstream.c | |
parent | dc0fe13726696bf2ec39fbea6d8e6e5c0893cd76 (diff) | |
download | rspamd-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.c | 31 |
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) { |