9b8462be61febea0a83b6324adbd895590e864de
[citadel.git] / libcitadel / lib / libcitadel.h
1 /*
2  * $Id$
3  *
4  */
5
6
7 #define LIBCITADEL_VERSION_NUMBER       102
8
9 /*
10  * Here's a bunch of stupid magic to make the MIME parser portable.
11  */
12 #ifndef SIZ
13 #define SIZ     4096
14 #endif
15
16
17 /*
18  * Views
19  */
20 #define VIEW_BBS                0       /* Bulletin board view */
21 #define VIEW_MAILBOX            1       /* Mailbox summary */
22 #define VIEW_ADDRESSBOOK        2       /* Address book view */
23 #define VIEW_CALENDAR           3       /* Calendar view */
24 #define VIEW_TASKS              4       /* Tasks view */
25 #define VIEW_NOTES              5       /* Notes view */
26 #define VIEW_WIKI               6       /* Wiki view */
27 #define VIEW_CALBRIEF           7       /* Brief Calendar view */
28 #define VIEW_JOURNAL            8       /* Journal view (not yet implemented in native clients) */
29
30
31 #ifndef IsEmptyStr
32 #define IsEmptyStr(a) ((a)[0] == '\0')
33 #endif
34
35 /*
36  * Misc declarations
37  */
38
39 char *libcitadel_version_string(void);
40 int libcitadel_version_number(void);
41
42
43 /*
44  * MIME parser declarations
45  */
46
47 void extract_key(char *target, char *source, char *key);
48
49 void mime_parser(char *content_start, char *content_end,
50                 void (*CallBack)
51                         (char *cbname,
52                         char *cbfilename,
53                         char *cbpartnum,
54                         char *cbdisp,
55                         void *cbcontent,
56                         char *cbtype,
57                         char *cbcharset,
58                         size_t cblength,
59                         char *cbencoding,
60                         void *cbuserdata),
61                 void (*PreMultiPartCallBack)
62                         (char *cbname,
63                         char *cbfilename,
64                         char *cbpartnum,
65                         char *cbdisp,
66                         void *cbcontent,
67                         char *cbtype,
68                         char *cbcharset,
69                         size_t cblength,
70                         char *cbencoding,
71                         void *cbuserdata),
72                 void (*PostMultiPartCallBack)
73                         (char *cbname,
74                         char *cbfilename,
75                         char *cbpartnum,
76                         char *cbdisp,
77                         void *cbcontent,
78                         char *cbtype,
79                         char *cbcharset,
80                         size_t cblength,
81                         char *cbencoding,
82                         void *cbuserdata),
83                 void *userdata,
84                 int dont_decode
85                 );
86
87
88
89 char *fixed_partnum(char *);
90 void mime_decode(char *partnum,
91                  char *part_start, size_t length,
92                  char *content_type, char *charset, char *encoding,
93                  char *disposition,
94                  char *name, char *filename,
95                  void (*CallBack)
96                   (char *cbname,
97                    char *cbfilename,
98                    char *cbpartnum,
99                    char *cbdisp,
100                    void *cbcontent,
101                    char *cbtype,
102                    char *cbcharset,
103                    size_t cblength,
104                    char *cbencoding,
105                    void *cbuserdata),
106                  void (*PreMultiPartCallBack)
107                   (char *cbname,
108                    char *cbfilename,
109                    char *cbpartnum,
110                    char *cbdisp,
111                    void *cbcontent,
112                    char *cbtype,
113                    char *cbcharset,
114                    size_t cblength,
115                    char *cbencoding,
116                    void *cbuserdata),
117                  void (*PostMultiPartCallBack)
118                   (char *cbname,
119                    char *cbfilename,
120                    char *cbpartnum,
121                    char *cbdisp,
122                    void *cbcontent,
123                    char *cbtype,
124                    char *cbcharset,
125                    size_t cblength,
126                    char *cbencoding,
127                    void *cbuserdata),
128                   void *userdata,
129                   int dont_decode
130 );
131 void the_mime_parser(char *partnum,
132                      char *content_start, char *content_end,
133                      void (*CallBack)
134                       (char *cbname,
135                        char *cbfilename,
136                        char *cbpartnum,
137                        char *cbdisp,
138                        void *cbcontent,
139                        char *cbtype,
140                        char *cbcharset,
141                        size_t cblength,
142                        char *cbencoding,
143                        void *cbuserdata),
144                      void (*PreMultiPartCallBack)
145                       (char *cbname,
146                        char *cbfilename,
147                        char *cbpartnum,
148                        char *cbdisp,
149                        void *cbcontent,
150                        char *cbtype,
151                        char *cbcharset,
152                        size_t cblength,
153                        char *cbencoding,
154                        void *cbuserdata),
155                      void (*PostMultiPartCallBack)
156                       (char *cbname,
157                        char *cbfilename,
158                        char *cbpartnum,
159                        char *cbdisp,
160                        void *cbcontent,
161                        char *cbtype,
162                        char *cbcharset,
163                        size_t cblength,
164                        char *cbencoding,
165                        void *cbuserdata),
166                       void *userdata,
167                       int dont_decode
168 );
169
170
171
172 /* tools */
173
174
175
176 char *safestrncpy(char *dest, const char *src, size_t n);
177 int num_tokens (const char *source, char tok);
178 long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen);
179 long grab_token(char **dest, const char *source, int parmnum, char separator);
180 int extract_int (const char *source, int parmnum);
181 long extract_long (const char *source, int parmnum);
182 unsigned long extract_unsigned_long(const char *source, int parmnum);
183 void CtdlInitBase64Table(void);
184 size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
185 int CtdlDecodeBase64(char *dest, const char *source, size_t length);
186 int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
187 void striplt(char *);
188 int haschar(const char *st, int ch);
189 void remove_token(char *source, int parmnum, char separator);
190 void fmt_date(char *buf, size_t n, time_t thetime, int seconds);
191 int is_msg_in_sequence_set(char *mset, long msgnum);
192 char *memreadline(char *start, char *buf, int maxlen);
193 char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
194 #define IsEmptyStr(a) ((a)[0] == '\0')
195 #define num_parms(source)               num_tokens(source,(char)'|')
196 void stripout(char *str, char leftboundary, char rightboundary);
197 void stripallbut(char *str, char leftboundary, char rightboundary);
198 char *myfgets(char *s, int size, FILE *stream);
199 void urlesc(char *outbuf, size_t oblen, char *strbuf);
200 char *CtdlTempFileName(char *prefix1, int prefix2);
201 FILE *CtdlTempFile(void);
202 void generate_uuid(char *buf);
203 char *bmstrcasestr(char *text, char *pattern);
204 void CtdlMakeTempFileName(char *name, int len);
205 char *rfc2047encode(char *line, long length);
206 int is_msg_in_mset(char *mset, long msgnum);
207 int pattern2(char *search, char *patn);
208 void stripltlen(char *, int *);
209
210
211
212 /* vCard stuff */
213
214 #define CTDL_VCARD_MAGIC        0xa1f9
215
216 /* This data structure represents a vCard object currently in memory. */
217 struct vCard {
218         int magic;
219         int numprops;
220         struct vCardProp {
221                 char *name;
222                 char *value;
223         } *prop;
224 };
225
226
227 struct vCard *vcard_new(void);
228 void vcard_add_prop(struct vCard *v, char *propname, char *propvalue);
229 struct vCard *vcard_load(char *);
230 void vcard_free(struct vCard *);
231 void vcard_set_prop(struct vCard *v, char *name, char *value, int append);
232 char *vcard_get_prop(struct vCard *v, char *propname, int is_partial,
233                         int instance, int return_propname);
234 char *vcard_serialize(struct vCard *);
235 void vcard_fn_to_n(char *vname, char *n, size_t vname_size);
236 void remove_charset_attribute(char *strbuf);
237
238 typedef struct HashList HashList;
239
240 typedef struct HashKey HashKey;
241
242 typedef struct HashPos HashPos;
243
244 typedef void (*DeleteHashDataFunc)(void * Data);
245
246
247
248 HashList *NewHash(void);
249 void DeleteHash(HashList **Hash);
250
251
252 int GetHash(HashList *Hash, char *HKey, long HKLen, void **Data);
253
254 void Put(HashList *Hash, char *HKey, long HKLen, void *Data, DeleteHashDataFunc DeleteIt);
255
256 int GetKey(HashList *Hash, char *HKey, long HKLen, void **Data);
257
258 int GetHashKeys(HashList *Hash, const char ***List);
259
260 int PrintHash(HashList *Hash);
261
262 HashPos *GetNewHashPos(void);
263 void DeleteHashPos(HashPos **DelMe);
264
265 int GetNextHashPos(HashList *Hash, HashPos *At, long *HKLen, char **HashKey, void **Data);