Imported Upstream version 0.66.1
[hcoop/debian/courier-authlib.git] / libs / rfc822 / imaprefs.h
1 /*
2 */
3 #ifndef imaprefs_h
4 #define imaprefs_h
5
6 /*
7 ** Copyright 2000-2003 Double Precision, Inc.
8 ** See COPYING for distribution information.
9 */
10
11 #if HAVE_CONFIG_H
12 #include "rfc822/config.h"
13 #endif
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 /*
20 ** Implement REFERENCES threading.
21 */
22
23 /* The data structures */
24
25 struct imap_refmsg {
26 struct imap_refmsg *next, *last; /* Link list of all msgs */
27 struct imap_refmsg *parent; /* my parent */
28 struct imap_refmsg *firstchild, *lastchild; /* Children link list */
29 struct imap_refmsg *prevsib, *nextsib; /* Link list of siblings */
30
31 char isdummy; /* this is a dummy node (for now) */
32 char flag2; /* Additional flag */
33
34 char *msgid; /* msgid of this message */
35
36 char *subj; /* dynalloced subject of this msg */
37 time_t timestamp; /* Timestamp */
38 unsigned long seqnum; /* Sequence number */
39 } ;
40
41 struct imap_refmsgtable {
42 struct imap_refmsg *firstmsg, *lastmsg; /* Link list of all msgs */
43
44 /* hash table message id lookup */
45
46 struct imap_refmsghash *hashtable[512];
47
48 struct imap_subjlookup *subjtable[512];
49
50 struct imap_refmsg *rootptr; /* The root */
51 } ;
52
53 struct imap_refmsgtable *rfc822_threadalloc(void);
54 void rfc822_threadfree(struct imap_refmsgtable *);
55 struct imap_refmsg *rfc822_threadmsg(struct imap_refmsgtable *mt,
56 const char *msgidhdr,
57 const char *refhdr,
58 const char *subjheader,
59
60 const char *dateheader,
61 time_t dateheader_tm,
62 /* Set one or other */
63
64 unsigned long seqnum);
65
66 struct imap_refmsg *rfc822_threadmsgrefs(struct imap_refmsgtable *mt,
67 const char *msgid_s,
68 const char * const * msgidList,
69 const char *subjheader,
70 const char *dateheader,
71 time_t dateheader_tm,
72 unsigned long seqnum);
73
74 struct imap_refmsg *rfc822_thread(struct imap_refmsgtable *mt);
75
76 /* INTERNAL FUNCTIONS FOLLOW */
77
78
79 struct imap_refmsghash {
80 struct imap_refmsghash *nexthash;
81 struct imap_refmsg *msg;
82 } ;
83
84 struct imap_subjlookup {
85 struct imap_subjlookup *nextsubj;
86 char *subj;
87 struct imap_refmsg *msg;
88 int msgisrefwd;
89 } ;
90
91 struct imap_refmsg *rfc822_threadallocmsg(struct imap_refmsgtable *mt,
92 const char *msgid);
93 void rfc822_threadprune(struct imap_refmsgtable *mt);
94 struct imap_refmsg *rfc822_threadgetroot(struct imap_refmsgtable *mt);
95 struct imap_refmsg *rfc822_threadsearchmsg(struct imap_refmsgtable *mt,
96 const char *msgid);
97 int rfc822_threadsortsubj(struct imap_refmsg *root);
98 int rfc822_threadgathersubj(struct imap_refmsgtable *mt,
99 struct imap_refmsg *root);
100 int rfc822_threadmergesubj(struct imap_refmsgtable *mt,
101 struct imap_refmsg *root);
102 int rfc822_threadsortbydate(struct imap_refmsgtable *mt);
103
104
105 #ifdef __cplusplus
106 }
107 #endif
108
109 #endif