diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-07-13 20:54:13 +0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-07-13 20:54:13 +0400 |
commit | a8cdd33ac7ee59e195dca03a395c264877ee5168 (patch) | |
tree | 077413b678005aad4f66dbeae82a982cb71ce75f /src/symbols_cache.h | |
parent | 74b38eb87d0ee6e401e06d8c604d55be2d93a1b2 (diff) | |
download | rspamd-a8cdd33ac7ee59e195dca03a395c264877ee5168.tar.gz rspamd-a8cdd33ac7ee59e195dca03a395c264877ee5168.zip |
* Rework the whole filters system
* Add metrics optimization and symbols cache
* Change all plugins
[DRAGONS]: not for production usage, some things are still not working!
Diffstat (limited to 'src/symbols_cache.h')
-rw-r--r-- | src/symbols_cache.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/symbols_cache.h b/src/symbols_cache.h new file mode 100644 index 000000000..e8e0be24f --- /dev/null +++ b/src/symbols_cache.h @@ -0,0 +1,54 @@ +#ifndef RSPAMD_SYMBOLS_CACHE_H +#define RSPAMD_SYMBOLS_CACHE_H + +#include "config.h" + +#define MAX_SYMBOL 128 + +struct worker_task; + +typedef void (*symbol_func_t)(struct worker_task *task, gpointer user_data); + +struct saved_cache_item { + char symbol[MAX_SYMBOL]; + double weight; + uint32_t frequency; + double avg_time; +}; + +struct cache_item { + struct saved_cache_item *s; + symbol_func_t func; + gpointer user_data; +}; + +struct symbols_cache { + struct cache_item *items; + guint cur_items; + guint used_items; + guint uses; + memory_pool_rwlock_t *lock; +}; + +/** + * Load symbols cache from file, must be called _after_ init_symbols_cache + */ +gboolean init_symbols_cache (memory_pool_t *pool, struct symbols_cache *cache, const char *filename); + +/** + * 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 char *name, double weight, symbol_func_t func, gpointer user_data); + +/** + * 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 worker_task *task, struct symbols_cache *cache, struct cache_item **saved_item); + +#endif |