rspamd_mutex_t *lock;
guint64 hash_seed;
guint cur_elt;
+ enum rspamd_upstream_rotation rot_alg;
};
struct upstream_ctx {
ls->lock = rspamd_mutex_new ();
ls->cur_elt = 0;
ls->ctx = ctx;
+ ls->rot_alg = RSPAMD_UPSTREAM_UNDEF;
return ls;
}
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) {
#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
};