1 #ifndef __HASH__ 2 #define __HASH__ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 #include "qsheff_parser.h" 8 9 #define NUM_HASH 5381 10 #define CDB_HASHSTART 5381 11 #define RECVFROM 16 12 #define MAIL 256 13 #define SUBJECT 256 14 15 typedef struct IP_bucket IP_bucket; 16 struct IP_bucket { 17 char src; 18 char IP[RECVFROM]; 19 IP_bucket *next; 20 }; 21 extern IP_bucket* IP_bucket_arr[NUM_HASH]; 22 23 24 typedef struct bucket bucket; 25 struct bucket { 26 char mail[MAIL]; 27 char subject[SUBJECT]; 28 char recvfrom[RECVFROM]; 29 int count; 30 int is_spammer; 31 bucket *next; 32 }; 33 extern bucket* bucket_arr[NUM_HASH]; 34 35 extern unsigned int 36 cdbhash(char *buf, unsigned int len); 37 38 extern void 39 hash_add(const char *subject, const char *recvfrom, const char *mail, unsigned int h); 40 41 extern void 42 hash_IP(const char *IP, char src, unsigned int h); 43 44 extern bucket* 45 hash_lookup(const char *target, unsigned int h); 46 47 extern int 48 hash_lookup_IP(const char *target, unsigned int h); 49 50 extern void 51 free_hash_tables(void); 52 53 54 #endif 55