1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
#ifndef maildirfilter_h
#define maildirfilter_h
/*
** Copyright 2000-2004 Double Precision, Inc.
** See COPYING for distribution information.
*/
static const char maildirfilter_h_rcsid[]="$Id: maildirfilter.h,v 1.12 2006/07/01 00:37:09 mrsam Exp $";
#include "config.h"
#ifdef __cplusplus
extern "C" {
#endif
enum maildirfiltertype {
startswith,
endswith,
contains,
hasrecipient,
mimemultipart,
textplain,
islargerthan, /* Use negation for the opposite! */
anymessage
} ;
struct maildirfilterrule {
struct maildirfilterrule *next, *prev;
char *rulename;
enum maildirfiltertype type;
int flags;
#define MFR_DOESNOT 1 /* Negates pretty much every condition */
#define MFR_BODY 2 /* startswith/endswith/contains applied
** to body.
*/
#define MFR_CONTINUE 4 /* Continue filtering (cc instead of to) */
#define MFR_PLAINSTRING 8 /* Pattern is a plain string, not a regex */
char *fieldname; /* Match this header */
char *fieldvalue; /* Match/search value */
char *tofolder; /* Destination folder, fwd address, err msg */
char *fromhdr; /* From: header on autoreplies. */
} ;
struct maildirfilter {
struct maildirfilterrule *first, *last;
} ;
/****************************************************************************/
/* Low-level filter access functions */
/****************************************************************************/
/*
** A maildirfilter structure is initialized simply by nulling it out, then: */
struct maildirfilterrule *maildir_filter_appendrule(struct maildirfilter *r,
const char *name,
enum maildirfiltertype type,
int flags,
const char *header,
const char *value,
const char *folder,
const char *fromhdr,
int *errcode); /* Append a new rule */
int maildir_filter_setautoreplyfrom(struct maildirfilter *, const char *);
/* Move a given rule up or down in the hierarchy */
void maildir_filter_ruleup(struct maildirfilter *, struct maildirfilterrule *);
void maildir_filter_ruledown(struct maildirfilter *, struct maildirfilterrule *);
/* Delete a given rule */
void maildir_filter_ruledel(struct maildirfilter *, struct maildirfilterrule *);
/* Update an existing rule */
int maildir_filter_ruleupdate(struct maildirfilter *, struct maildirfilterrule *,
const char *,
enum maildirfiltertype,
int,
const char *,
const char *,
const char *,
const char *,
int *);
#define maildir_filter_freerules(r) do { \
while ( (r)->first ) \
maildir_filter_ruledel( (r), (r)->first ); \
} while (0)
/*
** maildir_filter_appendrule and maildir_filter_ruleupdate set err_code to the following upon an error
** exit
*/
#define MF_ERR_BADRULENAME 1
#define MF_ERR_BADRULETYPE 2
#define MF_ERR_BADRULEHEADER 3
#define MF_ERR_BADRULEVALUE 4
#define MF_ERR_BADRULEFOLDER 5
#define MF_ERR_BADFROMHDR 6
#define MF_ERR_EXISTS 7
#define MF_ERR_INTERNAL 100
/* Save/Load rules from the given file */
int maildir_filter_saverules(struct maildirfilter *,
const char *, /* Filename */
const char *, /* Maildir */
const char *, /* Path to maildir from mailfilter */
const char *); /* The return address */
int maildir_filter_loadrules(struct maildirfilter *, const char *);
#define MF_LOADOK 0
#define MF_LOADNOTFOUND 1
#define MF_LOADFOREIGN 2
#define MF_LOADERROR 3
/****************************************************************************/
/* High-level filter access functions */
/****************************************************************************/
int maildir_filter_importmaildirfilter(const char *); /* Get the maildir filter */
int maildir_filter_loadmaildirfilter(struct maildirfilter *, const char *);
int maildir_filter_savemaildirfilter(struct maildirfilter *, const char *, const char *);
int maildir_filter_exportmaildirfilter(const char *);
/* Commit the maildir filter */
int maildir_filter_hasmaildirfilter(const char *); /* Is maildir filter defined? */
void maildir_filter_endmaildirfilter(const char *); /* Remove the temp file */
/*
** A convenient structure to parse autoresponder parameters.
*/
struct maildir_filter_autoresp_info {
char *name;
int dsnflag;
unsigned days;
} ;
int maildir_filter_autoresp_info_init_str(struct maildir_filter_autoresp_info *, const char *);
int maildir_filter_autoresp_info_init(struct maildir_filter_autoresp_info *, const char *);
void maildir_filter_autoresp_info_free(struct maildir_filter_autoresp_info *);
char *maildir_filter_autoresp_info_asstr(struct maildir_filter_autoresp_info *);
#ifdef __cplusplus
}
#endif
#endif
|