summaryrefslogtreecommitdiffstats
path: root/imap/searchinfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'imap/searchinfo.h')
-rw-r--r--imap/searchinfo.h126
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