#include "ucl.h"
#include "libmime/message.h"
-#define DEFAULT_REDIS_KEY "learned_ids"
+#include <memory>
struct rspamd_redis_cache_ctx {
lua_State *L;
struct rspamd_statfile_config *stcf;
- std::string redis_object = DEFAULT_REDIS_KEY;
int check_ref = -1;
int learn_ref = -1;
}
};
-#if 0
-/* Called when we have checked the specified message id */
-static void
-rspamd_stat_cache_redis_get(redisAsyncContext *c, gpointer r, gpointer priv)
-{
- struct rspamd_redis_cache_runtime *rt = priv;
- redisReply *reply = r;
- struct rspamd_task *task;
- glong val = 0;
-
- task = rt->task;
-
- if (c->err == 0) {
- if (reply) {
- if (G_LIKELY(reply->type == REDIS_REPLY_INTEGER)) {
- val = reply->integer;
- }
- else if (reply->type == REDIS_REPLY_STRING) {
- rspamd_strtol(reply->str, reply->len, &val);
- }
- else {
- if (reply->type == REDIS_REPLY_ERROR) {
- msg_err_task("cannot learn %s: redis error: \"%s\"",
- rt->ctx->stcf->symbol, reply->str);
- }
- else if (reply->type != REDIS_REPLY_NIL) {
- msg_err_task("bad learned type for %s: %d",
- rt->ctx->stcf->symbol, reply->type);
- }
-
- val = 0;
- }
- }
-
- if ((val > 0 && (task->flags & RSPAMD_TASK_FLAG_LEARN_SPAM)) ||
- (val < 0 && (task->flags & RSPAMD_TASK_FLAG_LEARN_HAM))) {
- /* Already learned */
- msg_info_task("<%s> has been already "
- "learned as %s, ignore it",
- MESSAGE_FIELD(task, message_id),
- (task->flags & RSPAMD_TASK_FLAG_LEARN_SPAM) ? "spam" : "ham");
- task->flags |= RSPAMD_TASK_FLAG_ALREADY_LEARNED;
- }
- else if (val != 0) {
- /* Unlearn flag */
- task->flags |= RSPAMD_TASK_FLAG_UNLEARN;
- }
-
- rspamd_upstream_ok(rt->selected);
- }
- else {
- rspamd_upstream_fail(rt->selected, FALSE, c->errstr);
- }
-
- if (rt->has_event) {
- rspamd_session_remove_event(task->s, rspamd_redis_cache_fin, rt);
- }
-}
-#endif
-
static void
rspamd_stat_cache_redis_generate_id(struct rspamd_task *task)
{
rspamd_cryptobox_hash_state_t st;
- rspamd_cryptobox_hash_init(&st, NULL, 0);
+ rspamd_cryptobox_hash_init(&st, nullptr, 0);
const auto *user = (const char *) rspamd_mempool_get_variable(task->task_pool, "stat_user");
/* Use dedicated hash space for per users cache */
- if (user != NULL) {
+ if (user != nullptr) {
rspamd_cryptobox_hash_update(&st, (const unsigned char *) user, strlen(user));
}
if (out_sz > 0) {
/* Zero terminate */
b32out[out_sz] = '\0';
- rspamd_mempool_set_variable(task->task_pool, "words_hash", b32out, NULL);
+ rspamd_mempool_set_variable(task->task_pool, "words_hash", b32out, nullptr);
}
}
{
auto *ctx = (struct rspamd_redis_cache_ctx *) c;
- if (task->tokens == NULL || task->tokens->len == 0) {
- return NULL;
+ if (task->tokens == nullptr || task->tokens->len == 0) {
+ return nullptr;
}
if (!learn) {
auto *ctx = (struct rspamd_redis_cache_ctx *) runtime;
auto *h = (char *) rspamd_mempool_get_variable(task->task_pool, "words_hash");
- if (h == NULL) {
+ if (h == nullptr) {
return RSPAMD_LEARN_IGNORE;
}
}
auto *h = (char *) rspamd_mempool_get_variable(task->task_pool, "words_hash");
- g_assert(h != NULL);
+ g_assert(h != nullptr);
auto *L = ctx->L;
lua_pushcfunction(L, &rspamd_lua_traceback);