/[imapfilter]/imapfilter/filter.h
ViewVC logotype

Contents of /imapfilter/filter.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations)
Fri Feb 13 23:44:50 2004 UTC (20 years, 1 month ago) by lefcha
Branch: MAIN
Changes since 1.5: +1 -1 lines
File MIME type: text/plain
Rephrasing.

1 #ifndef FILTER_H
2 #define FILTER_H
3
4
5 #include <sys/types.h> /* For POSIX.1-2001 non-conformant systems. */
6 #include <regex.h>
7
8 #include "account.h"
9
10
11 /*
12 * Mode for masks that comprise a filter. So if a filter is of AND type then
13 * as default masks are ANDed.
14 */
15 #define FILTER_MODE_OR 1
16 #define FILTER_MODE_AND 2
17
18 /* Action to do in case of filter matching. */
19 #define ACTION_DELETE 1
20 #define ACTION_COPY 2
21 #define ACTION_MOVE 3
22 #define ACTION_RCOPY 4
23 #define ACTION_RMOVE 5
24 #define ACTION_FLAG_REPLACE 6
25 #define ACTION_FLAG_ADD 7
26 #define ACTION_FLAG_REMOVE 8
27 #define ACTION_LIST 9
28
29 /* Message flags to replace/add/remove. */
30 #define MSG_FLAG_NONE 0x00
31 #define MSG_FLAG_SEEN 0x01
32 #define MSG_FLAG_ANSWERED 0x02
33 #define MSG_FLAG_FLAGGED 0x04
34 #define MSG_FLAG_DELETED 0x08
35 #define MSG_FLAG_DRAFT 0x10
36
37 /* Type of mask. This overrides the default filter mode (AND/OR). */
38 #define MASK_TYPE_OR 1
39 #define MASK_TYPE_AND 2
40
41 /* Type of mask match according to the four different regular expressions. */
42 #define MASK_MATCH_1 1
43 #define MASK_MATCH_2 2
44 #define MASK_MATCH_3 3
45 #define MASK_MATCH_4 4
46
47 /* String length of action's arguments. */
48 #define ARGS_LEN 256
49
50 /* String length of mask's body. */
51 #define MASK_BODY_LEN 256
52
53 /* Maximum filters assigned to a mailbox. */
54 #define MBOX_FILTERS_MAX 64
55
56
57 /* Filter. */
58 typedef struct filter {
59 char key[KEY_LEN]; /* Alias of filter. */
60 unsigned int mode; /* AND/OR mode. */
61
62 struct { /* What to do on filter match. */
63 unsigned int type; /* Action. */
64 account_t *raccount; /* Remote account to rcopy/rmove
65 * message. */
66 char destmbox[MBOX_LEN]; /* Destination mailbox. */
67 unsigned int msgflags; /* Message flags to replace/add/remove. */
68 char args[ARGS_LEN]; /* Action's arguments. */
69 } action;
70
71 struct mask *masks; /* Masks comprising the filter. */
72 unsigned int masknum; /* Total number of masks. */
73 unsigned int masklen; /* Total length of body of masks. */
74
75 struct filter *left, *right; /* Left/right node of tree. */
76 } filter_t;
77
78 /* Mask. */
79 typedef struct mask {
80 char body[MASK_BODY_LEN]; /* Body of mask. */
81 unsigned int type; /* AND/OR type. */
82 struct mask *next; /* Next node of linked list. */
83 } mask_t;
84
85
86 /* filter.c */
87 int set_filter(char *line, regmatch_t * match);
88 int set_action(char *line, regmatch_t * match);
89 int set_mask(char *line, regmatch_t * match, int mmt);
90 int set_job(char *line, regmatch_t * match);
91
92
93 #endif /* FILTER_H */

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26