Browse Source

Parse rotation type for upstreams list

tags/1.1.0
Vsevolod Stakhov 8 years ago
parent
commit
0af6082b44
2 changed files with 34 additions and 2 deletions
  1. 31
    0
      src/libutil/upstream.c
  2. 3
    2
      src/libutil/upstream.h

+ 31
- 0
src/libutil/upstream.c View 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) {

+ 3
- 2
src/libutil/upstream.h View 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
};



Loading…
Cancel
Save