/* $Id: hash_drv.h,v 1.19 2011/06/28 00:13:48 sbajic Exp $ */
/*
DSPAM
COPYRIGHT (C) 2002-2012 DSPAM PROJECT
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
#ifndef _HASH_DRV_H
# define _HASH_DRV_H
#ifdef HAVE_CONFIG_H
#include
#endif
#include "config.h"
#include "nodetree.h"
#include "libdspam.h"
#define HASH_REC_MAX 98317
#define HASH_EXTENT_MAX 49157
#define HASH_SEEK_MAX 100
typedef struct _hash_drv_header
{
unsigned long hash_rec_max;
struct _ds_spam_totals totals;
char padding[4]; /* Keep 8-byte alignment */
} *hash_drv_header_t;
typedef struct _hash_drv_map
{
void *addr;
int fd;
size_t file_len;
hash_drv_header_t header;
char filename[MAX_FILENAME_LENGTH];
unsigned long max_seek;
unsigned long max_extents;
unsigned long extent_size;
int pctincrease;
int flags;
} *hash_drv_map_t;
struct _hash_drv_storage
{
hash_drv_map_t map;
FILE *lock;
int dbh_attached;
unsigned long offset_nexttoken;
hash_drv_header_t offset_header;
unsigned long hash_rec_max;
unsigned long max_seek;
unsigned long max_extents;
unsigned long extent_size;
int pctincrease;
int flags;
struct nt *dir_handles;
} *hash_drv_storage_t;
typedef struct _hash_drv_spam_record
{
unsigned long long hashcode;
unsigned long nonspam;
unsigned long spam;
} *hash_drv_spam_record_t;
int _hash_drv_get_spamtotals
(DSPAM_CTX * CTX);
int _hash_drv_set_spamtotals
(DSPAM_CTX * CTX);
int _hash_drv_lock_get (
DSPAM_CTX *CTX,
struct _hash_drv_storage *s,
const char *username);
int _hash_drv_lock_free (
struct _hash_drv_storage *s,
const char *username);
/* lock variant used by css tools */
FILE* _hash_tools_lock_get (const char *cssfilename);
int _hash_tools_lock_free (
const char *cssfilename,
FILE* lockfile);
int _hash_drv_open(
const char *filename,
hash_drv_map_t map,
unsigned long recmaxifnew,
unsigned long max_seek,
unsigned long max_extents,
unsigned long extent_size,
int pctincrease,
int flags);
int _hash_drv_close
(hash_drv_map_t map);
int _hash_drv_autoextend
(hash_drv_map_t map, int extents, unsigned long last_extent_size);
unsigned long _hash_drv_seek(
hash_drv_map_t map,
unsigned long offset,
unsigned long long hashcode,
int flags);
int
_hash_drv_set_spamrecord (
hash_drv_map_t map,
hash_drv_spam_record_t wrec,
unsigned long map_offset);
unsigned long
_hash_drv_get_spamrecord (
hash_drv_map_t map,
hash_drv_spam_record_t wrec);
#define HSEEK_INSERT 0x01
#define HMAP_AUTOEXTEND 0x01
#endif /* _HASH_DRV_H */