Move vcard.c into libcitadel.
[citadel.git] / libcitadel / lib / libcitadel.h
1 /*
2  * $Id$
3  *
4  */
5
6 /*
7  * Here's a bunch of stupid magic to make the MIME parser portable.
8  */
9 #ifndef SIZ
10 #define SIZ     4096
11 #endif
12
13 #ifndef IsEmptyStr
14 #define IsEmptyStr(a) ((a)[0] == '\0')
15 #endif
16
17 /*
18  * Misc declarations
19  */
20
21 char *libcitadel_version_string(void);
22
23
24 /*
25  * MIME parser declarations
26  */
27
28 void extract_key(char *target, char *source, char *key);
29
30 void mime_parser(char *content_start, char *content_end,
31                 void (*CallBack)
32                         (char *cbname,
33                         char *cbfilename,
34                         char *cbpartnum,
35                         char *cbdisp,
36                         void *cbcontent,
37                         char *cbtype,
38                         char *cbcharset,
39                         size_t cblength,
40                         char *cbencoding,
41                         void *cbuserdata),
42                 void (*PreMultiPartCallBack)
43                         (char *cbname,
44                         char *cbfilename,
45                         char *cbpartnum,
46                         char *cbdisp,
47                         void *cbcontent,
48                         char *cbtype,
49                         char *cbcharset,
50                         size_t cblength,
51                         char *cbencoding,
52                         void *cbuserdata),
53                 void (*PostMultiPartCallBack)
54                         (char *cbname,
55                         char *cbfilename,
56                         char *cbpartnum,
57                         char *cbdisp,
58                         void *cbcontent,
59                         char *cbtype,
60                         char *cbcharset,
61                         size_t cblength,
62                         char *cbencoding,
63                         void *cbuserdata),
64                 void *userdata,
65                 int dont_decode
66                 );
67
68
69
70 char *fixed_partnum(char *);
71 void mime_decode(char *partnum,
72                  char *part_start, size_t length,
73                  char *content_type, char *charset, char *encoding,
74                  char *disposition,
75                  char *name, char *filename,
76                  void (*CallBack)
77                   (char *cbname,
78                    char *cbfilename,
79                    char *cbpartnum,
80                    char *cbdisp,
81                    void *cbcontent,
82                    char *cbtype,
83                    char *cbcharset,
84                    size_t cblength,
85                    char *cbencoding,
86                    void *cbuserdata),
87                  void (*PreMultiPartCallBack)
88                   (char *cbname,
89                    char *cbfilename,
90                    char *cbpartnum,
91                    char *cbdisp,
92                    void *cbcontent,
93                    char *cbtype,
94                    char *cbcharset,
95                    size_t cblength,
96                    char *cbencoding,
97                    void *cbuserdata),
98                  void (*PostMultiPartCallBack)
99                   (char *cbname,
100                    char *cbfilename,
101                    char *cbpartnum,
102                    char *cbdisp,
103                    void *cbcontent,
104                    char *cbtype,
105                    char *cbcharset,
106                    size_t cblength,
107                    char *cbencoding,
108                    void *cbuserdata),
109                   void *userdata,
110                   int dont_decode
111 );
112 void the_mime_parser(char *partnum,
113                      char *content_start, char *content_end,
114                      void (*CallBack)
115                       (char *cbname,
116                        char *cbfilename,
117                        char *cbpartnum,
118                        char *cbdisp,
119                        void *cbcontent,
120                        char *cbtype,
121                        char *cbcharset,
122                        size_t cblength,
123                        char *cbencoding,
124                        void *cbuserdata),
125                      void (*PreMultiPartCallBack)
126                       (char *cbname,
127                        char *cbfilename,
128                        char *cbpartnum,
129                        char *cbdisp,
130                        void *cbcontent,
131                        char *cbtype,
132                        char *cbcharset,
133                        size_t cblength,
134                        char *cbencoding,
135                        void *cbuserdata),
136                      void (*PostMultiPartCallBack)
137                       (char *cbname,
138                        char *cbfilename,
139                        char *cbpartnum,
140                        char *cbdisp,
141                        void *cbcontent,
142                        char *cbtype,
143                        char *cbcharset,
144                        size_t cblength,
145                        char *cbencoding,
146                        void *cbuserdata),
147                       void *userdata,
148                       int dont_decode
149 );
150
151
152
153 /* tools */
154
155
156
157 char *safestrncpy(char *dest, const char *src, size_t n);
158 int num_tokens (const char *source, char tok);
159 long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen);
160 long grab_token(char **dest, const char *source, int parmnum, char separator);
161 int extract_int (const char *source, int parmnum);
162 long extract_long (const char *source, int parmnum);
163 unsigned long extract_unsigned_long(const char *source, int parmnum);
164 void CtdlInitBase64Table(void);
165 size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
166 int CtdlDecodeBase64(char *dest, const char *source, size_t length);
167 int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
168 void striplt(char *);
169 int haschar(const char *st, int ch);
170 void remove_token(char *source, int parmnum, char separator);
171 void fmt_date(char *buf, size_t n, time_t thetime, int seconds);
172 int is_msg_in_sequence_set(char *mset, long msgnum);
173 char *memreadline(char *start, char *buf, int maxlen);
174 char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen);
175 #define IsEmptyStr(a) ((a)[0] == '\0')
176 #define num_parms(source)               num_tokens(source,(char)'|')
177 void stripout(char *str, char leftboundary, char rightboundary);
178 void stripallbut(char *str, char leftboundary, char rightboundary);
179 char *myfgets(char *s, int size, FILE *stream);
180 void urlesc(char *outbuf, char *strbuf);
181 char *CtdlTempFileName(char *prefix1, int prefix2);
182 FILE *CtdlTempFile(void);
183 char *ascmonths[12];
184 void generate_uuid(char *buf);
185 char *bmstrcasestr(char *text, char *pattern);
186 void CtdlMakeTempFileName(char *name, int len);
187 char *rfc2047encode(char *line, long length);
188 int is_msg_in_mset(char *mset, long msgnum);
189 int pattern2(char *search, char *patn);
190 void stripltlen(char *, int *);
191
192
193
194 /* vCard stuff */
195
196 #define CTDL_VCARD_MAGIC        0xa1f9
197
198 /* This data structure represents a vCard object currently in memory. */
199 struct vCard {
200         int magic;
201         int numprops;
202         struct vCardProp {
203                 char *name;
204                 char *value;
205         } *prop;
206 };
207
208
209 struct vCard *vcard_new(void);
210 void vcard_add_prop(struct vCard *v, char *propname, char *propvalue);
211 struct vCard *vcard_load(char *);
212 void vcard_free(struct vCard *);
213 void vcard_set_prop(struct vCard *v, char *name, char *value, int append);
214 char *vcard_get_prop(struct vCard *v, char *propname, int is_partial,
215                         int instance, int return_propname);
216 char *vcard_serialize(struct vCard *);
217 void vcard_fn_to_n(char *vname, char *n, size_t vname_size);
218 void remove_charset_attribute(char *strbuf);