aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/symbols_cache.h
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2014-04-21 16:25:51 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2014-04-21 16:25:51 +0100
commit61555065f3d1c8badcc9573691232f1b6e42988c (patch)
tree563d5b7cb8c468530f7e79c4da0a75267b1184e1 /src/libserver/symbols_cache.h
parentad5bf825b7f33bc10311673991f0cc888e69c0b1 (diff)
downloadrspamd-61555065f3d1c8badcc9573691232f1b6e42988c.tar.gz
rspamd-61555065f3d1c8badcc9573691232f1b6e42988c.zip
Rework project structure, remove trash files.
Diffstat (limited to 'src/libserver/symbols_cache.h')
-rw-r--r--src/libserver/symbols_cache.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h
new file mode 100644
index 000000000..bb2100fc1
--- /dev/null
+++ b/src/libserver/symbols_cache.h
@@ -0,0 +1,150 @@
+#ifndef RSPAMD_SYMBOLS_CACHE_H
+#define RSPAMD_SYMBOLS_CACHE_H
+
+#include "config.h"
+#include "radix.h"
+
+#define MAX_SYMBOL 128
+
+struct rspamd_task;
+struct config_file;
+
+typedef void (*symbol_func_t)(struct rspamd_task *task, gpointer user_data);
+
+struct saved_cache_item {
+ gchar symbol[MAX_SYMBOL];
+ double weight;
+ guint32 frequency;
+ double avg_time;
+};
+
+struct dynamic_map_item {
+ struct in_addr addr;
+ guint32 mask;
+ gboolean negative;
+};
+
+struct cache_item {
+ /* Static item's data */
+ struct saved_cache_item *s;
+
+ /* For dynamic rules */
+ struct dynamic_map_item *networks;
+ guint32 networks_number;
+ gboolean is_dynamic;
+
+ /* Callback data */
+ symbol_func_t func;
+ gpointer user_data;
+
+ /* Flags of virtual symbols */
+ gboolean is_virtual;
+ gboolean is_callback;
+
+ /* Priority */
+ gint priority;
+ gdouble metric_weight;
+};
+
+
+struct symbols_cache {
+ /* Normal cache items */
+ GList *static_items;
+
+ /* Items that have negative weights */
+ GList *negative_items;
+
+ /* Radix map of dynamic rules with ip mappings */
+ radix_tree_t *dynamic_map;
+ radix_tree_t *negative_dynamic_map;
+
+ /* Common dynamic rules */
+ GList *dynamic_items;
+
+ /* Hash table for fast access */
+ GHashTable *items_by_symbol;
+
+ rspamd_mempool_t *static_pool;
+
+ guint cur_items;
+ guint used_items;
+ guint uses;
+ gpointer map;
+ rspamd_mempool_rwlock_t *lock;
+ struct config_file *cfg;
+};
+
+/**
+ * Load symbols cache from file, must be called _after_ init_symbols_cache
+ */
+gboolean init_symbols_cache (rspamd_mempool_t *pool, struct symbols_cache *cache, struct config_file *cfg,
+ const gchar *filename, gboolean ignore_checksum);
+
+/**
+ * Register function for symbols parsing
+ * @param name name of symbol
+ * @param func pointer to handler
+ * @param user_data pointer to user_data
+ */
+void register_symbol (struct symbols_cache **cache, const gchar *name, double weight,
+ symbol_func_t func, gpointer user_data);
+
+
+/**
+ * Register virtual symbol
+ * @param name name of symbol
+ */
+void register_virtual_symbol (struct symbols_cache **cache, const gchar *name, double weight);
+
+/**
+ * Register callback function for symbols parsing
+ * @param name name of symbol
+ * @param func pointer to handler
+ * @param user_data pointer to user_data
+ */
+void register_callback_symbol (struct symbols_cache **cache, const gchar *name, double weight,
+ symbol_func_t func, gpointer user_data);
+
+/**
+ * Register function for symbols parsing with strict priority
+ * @param name name of symbol
+ * @param func pointer to handler
+ * @param user_data pointer to user_data
+ */
+void register_callback_symbol_priority (struct symbols_cache **cache, const gchar *name, double weight,
+ gint priority, symbol_func_t func, gpointer user_data);
+
+/**
+ * Register function for dynamic symbols parsing
+ * @param name name of symbol
+ * @param func pointer to handler
+ * @param user_data pointer to user_data
+ */
+void register_dynamic_symbol (rspamd_mempool_t *pool, struct symbols_cache **cache, const gchar *name,
+ double weight, symbol_func_t func,
+ gpointer user_data, GList *networks);
+
+/**
+ * Call function for cached symbol using saved callback
+ * @param task task object
+ * @param cache symbols cache
+ * @param saved_item pointer to currently saved item
+ */
+gboolean call_symbol_callback (struct rspamd_task *task, struct symbols_cache *cache, gpointer *save);
+
+/**
+ * Remove all dynamic rules from cache
+ * @param cache symbols cache
+ */
+void remove_dynamic_rules (struct symbols_cache *cache);
+
+/**
+ * Validate cache items agains theirs weights defined in metrics
+ * @param cache symbols cache
+ * @param cfg configuration
+ * @param strict do strict checks - symbols MUST be described in metrics
+ */
+gboolean validate_cache (struct symbols_cache *cache, struct config_file *cfg, gboolean strict);
+
+
+#endif