]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Parse rotation type for upstreams list
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 21 Nov 2015 13:17:05 +0000 (13:17 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 21 Nov 2015 13:17:05 +0000 (13:17 +0000)
src/libutil/upstream.c
src/libutil/upstream.h

index 9ed483f18d6bcdb6fc38ff943726afbf79fbcbf0..33c5e4403f3a3977e8dfe4bd73949350b6353592 100644 (file)
@@ -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) {
index eab2be368d3be7540d5427a2e5d654848a2692a6..c239a0e34afc7a6e04a59d25590d7aed44177256 100644 (file)
@@ -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
 };