aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/re_cache.h
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-12-01 17:09:06 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-12-01 17:09:06 +0000
commite9d134bb883087391bcc998042be89d79f668683 (patch)
tree71c7160332e9dd966019c00faa2fe9505f0b6c3f /src/libserver/re_cache.h
parente50ff44d757e06bf0c17f7bd6a7b834a3285d37d (diff)
downloadrspamd-e9d134bb883087391bcc998042be89d79f668683.tar.gz
rspamd-e9d134bb883087391bcc998042be89d79f668683.zip
Start new regexp cache optimizer
Diffstat (limited to 'src/libserver/re_cache.h')
-rw-r--r--src/libserver/re_cache.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/libserver/re_cache.h b/src/libserver/re_cache.h
new file mode 100644
index 000000000..0cc77eae1
--- /dev/null
+++ b/src/libserver/re_cache.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef RSPAMD_RE_CACHE_H
+#define RSPAMD_RE_CACHE_H
+
+#include "config.h"
+#include "libserver/task.h"
+#include "libutil/regexp.h"
+
+struct rspamd_re_cache;
+struct rspamd_re_runtime;
+
+enum rspamd_re_type {
+ RSPAMD_RE_HEADER,
+ RSPAMD_RE_MIME,
+ RSPAMD_RE_URL,
+ RSPAMD_RE_BODY
+};
+
+/**
+ * Initialize re_cache persistent structure
+ */
+struct rspamd_re_cache *rspamd_re_cache_new (void);
+
+/**
+ * Add the existing regexp to the cache
+ * @param cache cache object
+ * @param re regexp object
+ * @param type type of object
+ * @param type_data associated data with the type (e.g. header name)
+ * @param datalen associated data length
+ */
+void rspamd_re_cache_add (struct rspamd_re_cache *cache, rspamd_regexp_t *re,
+ enum rspamd_re_type type, gpointer type_data, gsize datalen);
+
+/**
+ * Initialize and optimize re cache structure
+ */
+void rspamd_re_cache_init (struct rspamd_re_cache *cache);
+
+/**
+ * Get runtime data for a cache
+ */
+struct rspamd_re_runtime* rspamd_re_cache_runtime_new (struct rspamd_re_cache *cache);
+
+/**
+ * Process regexp runtime and return the result for a specific regexp
+ * @param task task object
+ * @param rt cache runtime object
+ * @param re regexp object
+ * @param type type of object
+ * @param type_data associated data with the type (e.g. header name)
+ * @param datalen associated data length
+ */
+gboolean rspamd_re_cache_process (struct rspamd_task *task,
+ struct rspamd_re_runtime *rt,
+ rspamd_regexp_t *re,
+ enum rspamd_re_type type,
+ gpointer type_data,
+ gsize datalen);
+
+/**
+ * Destroy runtime data
+ */
+void rspamd_re_cache_runtime_destroy (struct rspamd_re_runtime *rt);
+
+/**
+ * Destroy re cache
+ */
+void rspamd_re_cache_destroy (struct rspamd_re_cache *cache);
+
+#endif