diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-11-21 13:20:37 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-11-21 13:20:37 +0000 |
commit | 19fdaf580a3746442173f10da662629bdc1b62b9 (patch) | |
tree | 3dc19676bfa5036b7a075dd67639ef995d8614a2 | |
parent | 0af6082b4444aa613bef109c6edd44509aa732ec (diff) | |
download | rspamd-19fdaf580a3746442173f10da662629bdc1b62b9.tar.gz rspamd-19fdaf580a3746442173f10da662629bdc1b62b9.zip |
Rework rotation for upstreams
-rw-r--r-- | src/libutil/upstream.c | 19 | ||||
-rw-r--r-- | src/libutil/upstream.h | 3 |
2 files changed, 13 insertions, 9 deletions
diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c index 33c5e4403..0054be93a 100644 --- a/src/libutil/upstream.c +++ b/src/libutil/upstream.c @@ -741,11 +741,10 @@ rspamd_upstream_get_hashed (struct upstream_list *ups, const guint8 *key, guint struct upstream* rspamd_upstream_get (struct upstream_list *ups, - enum rspamd_upstream_rotation type, ...) + enum rspamd_upstream_rotation default_type, + const guchar *key, gsize keylen) { - va_list ap; - const guint8 *key; - guint keylen; + enum rspamd_upstream_rotation type; rspamd_mutex_lock (ups->lock); if (ups->alive->len == 0) { @@ -754,14 +753,18 @@ rspamd_upstream_get (struct upstream_list *ups, } rspamd_mutex_unlock (ups->lock); + type = ups->rot_alg != RSPAMD_UPSTREAM_UNDEF ? ups->rot_alg : default_type; + + if (type == RSPAMD_UPSTREAM_HASHED && (keylen == 0 || key == NULL)) { + /* Cannot use hashed rotation when no key is specified, switch to random */ + type = RSPAMD_UPSTREAM_RANDOM; + } + switch (type) { + default: case RSPAMD_UPSTREAM_RANDOM: return rspamd_upstream_get_random (ups); case RSPAMD_UPSTREAM_HASHED: - va_start (ap, type); - key = va_arg (ap, const guint8 *); - keylen = va_arg (ap, guint); - va_end (ap); return rspamd_upstream_get_hashed (ups, key, keylen); case RSPAMD_UPSTREAM_ROUND_ROBIN: return rspamd_upstream_get_round_robin (ups, TRUE); diff --git a/src/libutil/upstream.h b/src/libutil/upstream.h index c239a0e34..4694900bb 100644 --- a/src/libutil/upstream.h +++ b/src/libutil/upstream.h @@ -147,7 +147,8 @@ const gchar* rspamd_upstream_name (struct upstream *up); * @return */ struct upstream* rspamd_upstream_get (struct upstream_list *ups, - enum rspamd_upstream_rotation type, ...); + enum rspamd_upstream_rotation default_type, + const guchar *key, gsize keylen); #endif /* UPSTREAM_H */ /* |