8 * since we reference time_t...
12 #define LIBCITADEL_VERSION_NUMBER 109
15 * Here's a bunch of stupid magic to make the MIME parser portable.
24 * Note that not all views are implemented in all clients.
26 #define VIEW_BBS 0 /* Bulletin board view */
27 #define VIEW_MAILBOX 1 /* Mailbox summary */
28 #define VIEW_ADDRESSBOOK 2 /* Address book view */
29 #define VIEW_CALENDAR 3 /* Calendar view */
30 #define VIEW_TASKS 4 /* Tasks view */
31 #define VIEW_NOTES 5 /* Notes view */
32 #define VIEW_WIKI 6 /* Wiki view */
33 #define VIEW_CALBRIEF 7 /* Brief Calendar view */
34 #define VIEW_JOURNAL 8 /* Journal view */
38 #define IsEmptyStr(a) ((a)[0] == '\0')
45 char *libcitadel_version_string(void);
46 int libcitadel_version_number(void);
50 * MIME parser declarations
53 void extract_key(char *target, char *source, char *key);
55 void mime_parser(char *content_start, char *content_end,
67 void (*PreMultiPartCallBack)
78 void (*PostMultiPartCallBack)
95 char *fixed_partnum(char *);
96 void mime_decode(char *partnum,
97 char *part_start, size_t length,
98 char *content_type, char *charset, char *encoding,
100 char *name, char *filename,
112 void (*PreMultiPartCallBack)
123 void (*PostMultiPartCallBack)
137 void the_mime_parser(char *partnum,
138 char *content_start, char *content_end,
150 void (*PreMultiPartCallBack)
161 void (*PostMultiPartCallBack)
176 const char *GuessMimeType(char *data, size_t dlen);
177 const char* GuessMimeByFilename(const char *what, size_t len);
179 /* Run once at Programstart */
180 int LoadIconDir(const char *DirName);
182 /* Select the icon for a given MIME type */
183 const char *GetIconFilename(char *MimeType, size_t len);
185 void ShutDownLibCitadel(void);
190 int Ctdl_IsUtf8SequenceStart(char Char);
191 int Ctdl_GetUtf8SequenceLength(char Char);
192 int Ctdl_Utf8StrLen(char *str);
193 char *Ctdl_Utf8StrCut(char *str, int maxlen);
196 int safestrncpy(char *dest, const char *src, size_t n);
197 int num_tokens (const char *source, char tok);
198 long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen);
199 long grab_token(char **dest, const char *source, int parmnum, char separator);
200 int extract_int (const char *source, int parmnum);
201 long extract_long (const char *source, int parmnum);
202 unsigned long extract_unsigned_long(const char *source, int parmnum);
203 void CtdlInitBase64Table(void);
204 size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
205 int CtdlDecodeBase64(char *dest, const char *source, size_t length);
206 int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
207 void striplt(char *);
208 int haschar(const char *st, int ch);
209 void remove_token(char *source, int parmnum, char separator);
210 void fmt_date(char *buf, size_t n, time_t thetime, int seconds);
211 int is_msg_in_sequence_set(char *mset, long msgnum);
212 char *memreadline(char *start, char *buf, int maxlen);
213 char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
214 #define IsEmptyStr(a) ((a)[0] == '\0')
215 #define num_parms(source) num_tokens(source,(char)'|')
216 void stripout(char *str, char leftboundary, char rightboundary);
217 void stripallbut(char *str, char leftboundary, char rightboundary);
218 char *myfgets(char *s, int size, FILE *stream);
219 void urlesc(char *outbuf, size_t oblen, char *strbuf);
220 char *CtdlTempFileName(char *prefix1, int prefix2);
221 FILE *CtdlTempFile(void);
222 void generate_uuid(char *buf);
223 char *bmstrcasestr(char *text, char *pattern);
224 void CtdlMakeTempFileName(char *name, int len);
225 char *rfc2047encode(char *line, long length);
226 int is_msg_in_mset(char *mset, long msgnum);
227 int pattern2(char *search, char *patn);
228 void stripltlen(char *, int *);
229 char *html_to_ascii(char *inputmsg, int msglen, int screenwidth, int do_citaformat);
235 #define CTDL_VCARD_MAGIC 0xa1f9
237 /* This data structure represents a vCard object currently in memory. */
248 struct vCard *vcard_new(void);
249 void vcard_add_prop(struct vCard *v, char *propname, char *propvalue);
250 struct vCard *vcard_load(char *);
251 void vcard_free(struct vCard *);
252 void vcard_set_prop(struct vCard *v, char *name, char *value, int append);
253 char *vcard_get_prop(struct vCard *v, char *propname, int is_partial,
254 int instance, int return_propname);
255 char *vcard_serialize(struct vCard *);
256 void vcard_fn_to_n(char *vname, char *n, size_t vname_size);
257 void remove_charset_attribute(char *strbuf);
260 * Hash list implementation for Citadel
262 #define HKEY(a) a, sizeof(a) - 1
263 typedef struct HashList HashList;
265 typedef struct HashKey HashKey;
267 typedef struct HashPos HashPos;
269 typedef void (*DeleteHashDataFunc)(void * Data);
270 typedef const char *(*PrintHashContent)(void * Data);
271 typedef int (*CompareFunc)(const void* Item1, const void*Item2);
273 HashList *NewHash(void);
275 void DeleteHash(HashList **Hash);
277 int GetHash(HashList *Hash, const char *HKey, long HKLen, void **Data);
279 void Put(HashList *Hash, char *HKey, long HKLen, void *Data, DeleteHashDataFunc DeleteIt);
281 int GetKey(HashList *Hash, char *HKey, long HKLen, void **Data);
283 int GetHashKeys(HashList *Hash, char ***List);
285 int PrintHash(HashList *Hash, PrintHashContent first, PrintHashContent Second);
287 HashPos *GetNewHashPos(void);
289 void DeleteHashPos(HashPos **DelMe);
291 int GetNextHashPos(HashList *Hash, HashPos *At, long *HKLen, char **HashKey, void **Data);
293 void SortByHashKey(HashList *Hash);
294 void SortByHashKeyStr(HashList *Hash);
296 const void *GetSearchPayload(const void *HashVoid);
297 void SortByPayload(HashList *Hash, CompareFunc SortBy);
299 void convert_spaces_to_underscores(char *str);