Imported Upstream version 0.66.1
[hcoop/debian/courier-authlib.git] / libs / rfc822 / imaprefs.h
CommitLineData
d9898ee8 1/*
d9898ee8 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
b0322a85 12#include "rfc822/config.h"
d9898ee8 13#endif
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19/*
20** Implement REFERENCES threading.
21*/
22
23/* The data structures */
24
25struct 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
41struct 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
53struct imap_refmsgtable *rfc822_threadalloc(void);
54void rfc822_threadfree(struct imap_refmsgtable *);
55struct 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
66struct 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
74struct imap_refmsg *rfc822_thread(struct imap_refmsgtable *mt);
75
76 /* INTERNAL FUNCTIONS FOLLOW */
77
78
79struct imap_refmsghash {
80 struct imap_refmsghash *nexthash;
81 struct imap_refmsg *msg;
82} ;
83
84struct imap_subjlookup {
85 struct imap_subjlookup *nextsubj;
86 char *subj;
87 struct imap_refmsg *msg;
88 int msgisrefwd;
89} ;
90
91struct imap_refmsg *rfc822_threadallocmsg(struct imap_refmsgtable *mt,
92 const char *msgid);
93void rfc822_threadprune(struct imap_refmsgtable *mt);
94struct imap_refmsg *rfc822_threadgetroot(struct imap_refmsgtable *mt);
95struct imap_refmsg *rfc822_threadsearchmsg(struct imap_refmsgtable *mt,
96 const char *msgid);
97int rfc822_threadsortsubj(struct imap_refmsg *root);
98int rfc822_threadgathersubj(struct imap_refmsgtable *mt,
99 struct imap_refmsg *root);
100int rfc822_threadmergesubj(struct imap_refmsgtable *mt,
101 struct imap_refmsg *root);
102int rfc822_threadsortbydate(struct imap_refmsgtable *mt);
103
104
105#ifdef __cplusplus
106}
107#endif
108
109#endif