diff options
Diffstat (limited to 'imap/searchinfo.h')
| -rw-r--r-- | imap/searchinfo.h | 126 | 
1 files changed, 126 insertions, 0 deletions
| diff --git a/imap/searchinfo.h b/imap/searchinfo.h new file mode 100644 index 0000000..e80f6a0 --- /dev/null +++ b/imap/searchinfo.h @@ -0,0 +1,126 @@ +#ifndef	searchinfo_h +#define	searchinfo_h + +#include "maildir/maildirsearch.h" + +/* +** Copyright 1998 - 2002 Double Precision, Inc. +** See COPYING for distribution information. +*/ + + +	/* Search keys */ + +typedef enum { +	search_messageset, +	search_all, +	search_msgflag,	/* Includes ANSWERED DELETED DRAFT FLAGGED RECENT SEEN */ +	search_msgkeyword, /* KEYWORD */ + +	search_not,	/* Logical NOT, used to implement UNANSWERED +			UNDELETED UNDRAFT UNFLAGGED UNKEYWORD UNSEEN, etc... */ + +	/* NOTE: NEW gets parsed as ( RECENT UNSEEN )  OLD gets parsed as +	NOT RECENT */ + +	search_and, +	search_or, + + +	search_header, /* Also used to implement BCC, CC, FROM, TO, SUBJECT */ + +	search_before, +	search_body, +	search_larger, +	search_on, +	search_sentbefore, +	search_senton, +	search_sentsince, +	search_since, +	search_smaller, +	search_text, +	search_uid, + +	/* +	** search_orderedsubj is a dummy node that's allocated in order to +	** implement an ORDEREDSUBJ THREAD/SORT. as points to the stripped +	** subject from the message. +	*/ + +	search_orderedsubj, + +	/* +	** search_references? are dummy nodes that are allocated in order to +	** implement a REFERENCES THREAD. +	*/ + +	search_references1,	/*  References: and In-Reply-To: header */ +	search_references2,	/*  Date: header */ +	search_references3,	/*  Subject: header */ +	search_references4,	/*  Message-ID: header */ + +	/* +	** And the following dummies are used for similar purposes for the +	** SORT command. +	*/ + +	search_arrival, +	search_cc, +	search_date, +	search_from, +	search_reverse, +	search_size, +	search_to + +	} search_type; + +/* This structure is used when doing content searching */ + + + +/* A SEARCH request gets parsed into the following structure */ + +struct searchinfo { +	struct searchinfo *next;	/* Link list of all searchinfos */ + +	struct searchinfo *a, *b;	/* Nested search requests */ + +	search_type	type; + +	char	*as, *bs, *cs;		/* As needed */ + +	const struct unicode_info *bs_charset; +	/* search_text: text string in orig charset is as, text string in +	   bs_charset charset is in bs */ + + +	int	value;	/* When evaluating: 0 - false, 1 - true, -1 - unknown */ +			/* Not used in AND, OR, and NOT nodes */ + +	struct maildir_searchengine sei;	/* Used when searching */ + +	struct libmail_keywordEntry *ke; +	} ; + +void free_search(struct searchinfo *); +struct searchinfo *alloc_search(struct searchinfo **); + +struct searchinfo *alloc_parsesearch(struct searchinfo **); +struct searchinfo *alloc_searchextra(struct searchinfo *, +	struct searchinfo **, search_type); +void debug_search(struct searchinfo *); + +struct unicode_info; + +void dosearch(struct searchinfo *, struct searchinfo *, +	      const char *, int); + +void search_internal(struct searchinfo *, struct searchinfo *, +		     const char *, +		     int, void (*)(struct searchinfo *, +				   struct searchinfo *, int, +				   unsigned long, void *), void *); + +void search_set_charset_conv(struct searchinfo *, const char *); + +#endif | 
