aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/binlog.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/binlog.h
parentad5bf825b7f33bc10311673991f0cc888e69c0b1 (diff)
downloadrspamd-61555065f3d1c8badcc9573691232f1b6e42988c.tar.gz
rspamd-61555065f3d1c8badcc9573691232f1b6e42988c.zip
Rework project structure, remove trash files.
Diffstat (limited to 'src/libserver/binlog.h')
-rw-r--r--src/libserver/binlog.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/libserver/binlog.h b/src/libserver/binlog.h
new file mode 100644
index 000000000..9e1a786d3
--- /dev/null
+++ b/src/libserver/binlog.h
@@ -0,0 +1,93 @@
+#ifndef RSPAMD_BINLOG_H
+#define RSPAMD_BINLOG_H
+
+#include "config.h"
+#include "main.h"
+#include "statfile.h"
+
+/* How much records are in a single index */
+#define BINLOG_IDX_LEN 200
+#define METAINDEX_LEN 1024
+
+/* Assume 8 bytes words */
+struct rspamd_binlog_header {
+ gchar magic[3];
+ gchar version[2];
+ gchar padding[3];
+ guint64 create_time;
+};
+
+struct rspamd_binlog_index {
+ guint64 time;
+ guint64 seek;
+ guint32 len;
+};
+
+struct rspamd_index_block {
+ struct rspamd_binlog_index indexes[BINLOG_IDX_LEN];
+ guint32 last_index;
+};
+
+struct rspamd_binlog_metaindex {
+ guint64 indexes[METAINDEX_LEN];
+ guint64 last_index;
+};
+
+struct rspamd_binlog_element {
+ guint32 h1;
+ guint32 h2;
+ float value;
+} __attribute__((__packed__));
+
+struct rspamd_binlog {
+ gchar *filename;
+ time_t rotate_time;
+ gint rotate_jitter;
+ guint64 cur_seq;
+ guint64 cur_time;
+ gint fd;
+ rspamd_mempool_t *pool;
+
+ struct rspamd_binlog_header header;
+ struct rspamd_binlog_metaindex *metaindex;
+ struct rspamd_index_block *cur_idx;
+};
+
+struct classifier_config;
+
+/*
+ * Open binlog at specified path with specified rotate params
+ */
+struct rspamd_binlog* binlog_open (rspamd_mempool_t *pool, const gchar *path, time_t rotate_time, gint rotate_jitter);
+
+/*
+ * Get and open binlog for specified statfile
+ */
+struct rspamd_binlog* get_binlog_by_statfile (struct statfile *st);
+
+/*
+ * Close binlog
+ */
+void binlog_close (struct rspamd_binlog *log);
+
+/*
+ * Insert new nodes inside binlog
+ */
+gboolean binlog_insert (struct rspamd_binlog *log, GTree *nodes);
+
+/*
+ * Sync binlog from specified revision
+ * @param log binlog structure
+ * @param from_rev from revision
+ * @param from_time from time
+ * @param rep a portion of changes for revision is stored here
+ * @return TRUE if there are more revisions to get and FALSE if synchronization is complete
+ */
+gboolean binlog_sync (struct rspamd_binlog *log, guint64 from_rev, guint64 *from_time, GByteArray **rep);
+
+/*
+ * Conditional write to a binlog for specified statfile
+ */
+gboolean maybe_write_binlog (struct classifier_config *ccf, struct statfile *st, stat_file_t *file, GTree *nodes);
+
+#endif