1 #ifndef _HASHTAB_H
2 #define _HASHTAB_H
3 
4 typedef struct hnode *HNODEPTR;            /* site node (host) pointer     */
5 typedef struct unode *UNODEPTR;            /* url node pointer             */
6 typedef struct rnode *RNODEPTR;            /* referrer node                */
7 typedef struct anode *ANODEPTR;            /* user agent node pointer      */
8 typedef struct snode *SNODEPTR;            /* Search string node pointer   */
9 typedef struct inode *INODEPTR;            /* user (ident) node pointer    */
10 #ifdef USE_DNS
11 typedef struct dnode *DNODEPTR;            /* DNS hash table node struct   */
12 #endif
13 
14 /* Object flags */
15 #define OBJ_REG  0                         /* Regular object               */
16 #define OBJ_HIDE 1                         /* Hidden object                */
17 #define OBJ_GRP  2                         /* Grouped object               */
18 
19 #ifdef USE_DNS
20 struct dnode {  char *string;              /* DNS node hash table struct   */
21               struct sockaddr_storage  addr;
22                  int addrlen;
23               struct dnode    *llist;
24               struct dnode    *next; };
25 #endif
26 
27 struct hnode {  char *string;              /* host hash table structure    */
28                  int flag;
29            u_int64_t count;
30            u_int64_t files;
31            u_int64_t visit;                /* visit information            */
32            u_int64_t tstamp;
33                 char *lasturl;
34               double xfer;
35               struct hnode *next; };
36 
37 struct unode {  char *string;              /* url hash table structure     */
38                  int flag;                 /* Object type (REG, HIDE, GRP) */
39            u_int64_t count;                /* requests counter             */
40            u_int64_t files;                /* files counter                */
41            u_int64_t entry;                /* entry page counter           */
42            u_int64_t exit;                 /* exit page counter            */
43               double xfer;                 /* xfer size in bytes           */
44               struct unode *next; };       /* pointer to next node         */
45 
46 struct rnode {  char *string;              /* referrer hash table struct   */
47                  int flag;
48            u_int64_t count;
49               struct rnode *next; };
50 
51 struct anode {  char *string;
52                  int flag;
53            u_int64_t count;
54               struct anode *next; };
55 
56 struct snode {  char *string;                 /* search string struct      */
57            u_int64_t count;
58               struct snode *next; };
59 
60 struct inode {  char *string;                 /* host hash table struct    */
61                  int flag;
62            u_int64_t count;
63            u_int64_t files;
64            u_int64_t visit;
65            u_int64_t tstamp;
66               double xfer;
67               struct inode *next; };
68 
69 extern HNODEPTR sm_htab[MAXHASH];             /* hash tables               */
70 extern HNODEPTR sd_htab[MAXHASH];
71 extern UNODEPTR um_htab[MAXHASH];             /* for hits, sites,          */
72 extern RNODEPTR rm_htab[MAXHASH];             /* referrers and agents...   */
73 extern ANODEPTR am_htab[MAXHASH];
74 extern SNODEPTR sr_htab[MAXHASH];             /* search string table       */
75 extern INODEPTR im_htab[MAXHASH];             /* ident table (username)    */
76 #ifdef USE_DNS
77 extern DNODEPTR host_table[MAXHASH];          /* DNS resolver table        */
78 #endif
79 
80 extern int    put_hnode(char *, int, u_int64_t, u_int64_t, double,
81                         u_int64_t *, u_int64_t, u_int64_t, char *, HNODEPTR *);
82 extern int    put_unode(char *, int, u_int64_t, double, u_int64_t *,
83                         u_int64_t, u_int64_t, UNODEPTR *);
84 extern int    put_inode(char *, int, u_int64_t, u_int64_t, double,
85                         u_int64_t *, u_int64_t, u_int64_t, INODEPTR *);
86 extern int    put_rnode(char *, int, u_int64_t, u_int64_t *, RNODEPTR *);
87 extern int    put_anode(char *, int, u_int64_t, u_int64_t *, ANODEPTR *);
88 extern int    put_snode(char *, u_int64_t, SNODEPTR *);
89 
90 #ifdef USE_DNS
91 extern int    put_dnode(char *, void *, int, DNODEPTR *);
92 extern void   del_dlist(DNODEPTR *);
93 #endif
94 
95 extern void   del_htabs();                    /* delete hash tables        */
96 extern void   del_hlist(HNODEPTR *);          /* delete host htab          */
97 extern void   del_ulist(UNODEPTR *);          /* delete url htab           */
98 extern void   del_rlist(RNODEPTR *);          /* delete referrer htab      */
99 extern void   del_alist(ANODEPTR *);          /* delete host htab          */
100 extern void   del_slist(SNODEPTR *);          /* delete host htab          */
101 extern void   del_ilist(INODEPTR *);          /* delete host htab          */
102 
103 extern void      month_update_exit(u_int64_t);
104 extern u_int64_t tot_visit(HNODEPTR *);
105 extern char     *find_url(char *);
106 
107 #endif  /* _HASHTAB_H */
108