further on basic implementation
[rxpd] / rxpd.h
1 /*
2     rxpd.h - regex policy daemon
3
4   Copyright (C)
5     2007,               Christian Thaeter <ct@pipapo.org>
6
7   This program is free software; you can redistribute it and/or
8   modify it under the terms of the GNU General Public License as
9   published by the Free Software Foundation; either version 2 of the
10   License, or (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program; if not, write to the Free Software
19   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21 #ifndef RXPD_H
22 #define RXPD_H
23
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #include <unistd.h>
27 #include <regex.h>
28 //#include <>
29 #include "llist.h"
30 #include "psplay.h"
31
32
33 #define RXPD_COMMANDS                           \
34 {                                               \
35   RXPD_CMD(CHECK),                              \
36   RXPD_CMD(APPEND),                             \
37   RXPD_CMD(PREPEND),                            \
38   RXPD_CMD(REMOVE),                             \
39   RXPD_CMD(REPLACE),                            \
40   RXPD_CMD(LOAD),                               \
41   RXPD_CMD(SAVE),                               \
42   RXPD_CMD(DUMP),                               \
43   RXPD_CMD(LIST),                               \
44   RXPD_CMD(END)                                 \
45 }
46
47 #define RXPD_CMD(cmd) RXPD_CMD_##cmd
48 enum RXPD_COMMANDS;
49 #undef RXPD_CMD
50
51 struct rxpd_base;
52 struct rxpd_file;
53 struct rxpd_rule;
54
55 struct rxpd_base
56 {
57   char* rulesdir;
58   psplayroot files;
59 };
60
61
62 struct rxpd_base*
63 rxpd_init (char* rulesdir);
64
65 void
66 rxpd_destroy (void);
67
68
69
70 //
71 struct rxpd_rule
72 {
73   llist node;
74   char* string;
75   regex_t rx;
76 };
77
78 struct rxpd_rule*
79 rxpd_rule_new (const char* buf);
80
81 void
82 rxpd_rule_delete (struct rxpd_rule*);
83
84
85
86 //
87 struct rxpd_file
88 {
89   psplay node;
90   //TODO later     struct stat last_stat;
91   llist rules;
92 };
93
94 int
95 rxpd_file_load (struct rxpd_base* base, const char* filename);
96
97 void
98 rxpd_file_delete (PSplay file);
99
100 int
101 rxpd_file_cmp (const void* A, const void* B);
102
103
104
105 #endif