Fix bug #3380. Initialize widget before callback handler for 'clicked'
[claws.git] / src / plugins / mailmbox / mailimf.h
1 /*
2  * libEtPan! -- a mail stuff library
3  *
4  * Copyright (C) 2001, 2002 - DINH Viet Hoa
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the libEtPan! project nor the names of its
16  *    contributors may be used to endorse or promote products derived
17  *    from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  */
31
32 /*
33  * $Id$
34  */
35
36 #ifndef MAILIMF_H
37
38 #define MAILIMF_H
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 #include "mailimf_types.h"
45 #include "mailimf_write.h"
46 #include "mailimf_types_helper.h"
47
48 #include <inttypes.h>
49 #include <sys/types.h>
50
51 /*
52   mailimf_message_parse will parse the given message
53   
54   @param message this is a string containing the message content
55   @param length this is the size of the given string
56   @param index this is a pointer to the start of the message in
57     the given string, (* index) is modified to point at the end
58     of the parsed data
59   @param result the result of the parse operation is stored in
60     (* result)
61
62   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
63 */
64
65 int mailimf_message_parse(const char * message, size_t length,
66                           size_t * index,
67                           struct mailimf_message ** result);
68
69 /*
70   mailimf_body_parse will parse the given text part of a message
71   
72   @param message this is a string containing the message text part
73   @param length this is the size of the given string
74   @param index this is a pointer to the start of the message text part in
75     the given string, (* index) is modified to point at the end
76     of the parsed data
77   @param result the result of the parse operation is stored in
78     (* result)
79
80   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
81 */
82
83 int mailimf_body_parse(const char * message, size_t length,
84                        size_t * index,
85                        struct mailimf_body ** result);
86
87 /*
88   mailimf_fields_parse will parse the given header fields
89   
90   @param message this is a string containing the header fields
91   @param length this is the size of the given string
92   @param index this is a pointer to the start of the header fields in
93     the given string, (* index) is modified to point at the end
94     of the parsed data
95   @param result the result of the parse operation is stored in
96     (* result)
97
98   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
99 */
100
101 int mailimf_fields_parse(const char * message, size_t length,
102                          size_t * index,
103                          struct mailimf_fields ** result);
104
105 /*
106   mailimf_mailbox_list_parse will parse the given mailbox list
107   
108   @param message this is a string containing the mailbox list
109   @param length this is the size of the given string
110   @param index this is a pointer to the start of the mailbox list in
111     the given string, (* index) is modified to point at the end
112     of the parsed data
113   @param result the result of the parse operation is stored in
114     (* result)
115
116   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
117 */
118
119 int
120 mailimf_mailbox_list_parse(const char * message, size_t length,
121                            size_t * index,
122                            struct mailimf_mailbox_list ** result);
123
124 /*
125   mailimf_address_list_parse will parse the given address list
126   
127   @param message this is a string containing the address list
128   @param length this is the size of the given string
129   @param index this is a pointer to the start of the address list in
130     the given string, (* index) is modified to point at the end
131     of the parsed data
132   @param result the result of the parse operation is stored in
133     (* result)
134
135   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
136 */
137
138 int
139 mailimf_address_list_parse(const char * message, size_t length,
140                            size_t * index,
141                            struct mailimf_address_list ** result);
142
143 /*
144   mailimf_address_parse will parse the given address
145   
146   @param message this is a string containing the address
147   @param length this is the size of the given string
148   @param index this is a pointer to the start of the address in
149     the given string, (* index) is modified to point at the end
150     of the parsed data
151   @param result the result of the parse operation is stored in
152     (* result)
153
154   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
155 */
156
157 int mailimf_address_parse(const char * message, size_t length,
158                           size_t * index,
159                           struct mailimf_address ** result);
160
161 /*
162   mailimf_mailbox_parse will parse the given address
163   
164   @param message this is a string containing the mailbox
165   @param length this is the size of the given string
166   @param index this is a pointer to the start of the mailbox in
167     the given string, (* index) is modified to point at the end
168     of the parsed data
169   @param result the result of the parse operation is stored in
170     (* result)
171
172   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
173 */
174
175 int mailimf_mailbox_parse(const char * message, size_t length,
176                           size_t * index,
177                           struct mailimf_mailbox ** result);
178
179 /*
180   mailimf_date_time_parse will parse the given RFC 2822 date
181   
182   @param message this is a string containing the date
183   @param length this is the size of the given string
184   @param index this is a pointer to the start of the date in
185     the given string, (* index) is modified to point at the end
186     of the parsed data
187   @param result the result of the parse operation is stored in
188     (* result)
189
190   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
191 */
192
193 int mailimf_date_time_parse(const char * message, size_t length,
194                             size_t * index,
195                             struct mailimf_date_time ** result);
196
197 /*
198   mailimf_envelope_fields_parse will parse the given fields (Date,
199   From, Sender, Reply-To, To, Cc, Bcc, Message-ID, In-Reply-To,
200   References and Subject)
201   
202   @param message this is a string containing the header fields
203   @param length this is the size of the given string
204   @param index this is a pointer to the start of the header fields in
205     the given string, (* index) is modified to point at the end
206     of the parsed data
207   @param result the result of the parse operation is stored in
208     (* result)
209
210   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
211 */
212
213 int mailimf_envelope_fields_parse(const char * message, size_t length,
214                                   size_t * index,
215                                   struct mailimf_fields ** result);
216
217 /*
218   mailimf_ignore_field_parse will skip the given field
219   
220   @param message this is a string containing the header field
221   @param length this is the size of the given string
222   @param index this is a pointer to the start of the header field in
223     the given string, (* index) is modified to point at the end
224     of the parsed data
225
226   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
227 */
228
229
230 int mailimf_ignore_field_parse(const char * message, size_t length,
231                                size_t * index);
232
233 /*
234   mailimf_envelope_fields will parse the given fields (Date,
235   From, Sender, Reply-To, To, Cc, Bcc, Message-ID, In-Reply-To,
236   References and Subject), other fields will be added as optional
237   fields.
238   
239   @param message this is a string containing the header fields
240   @param length this is the size of the given string
241   @param index this is a pointer to the start of the header fields in
242     the given string, (* index) is modified to point at the end
243     of the parsed data
244   @param result the result of the parse operation is stored in
245     (* result)
246
247   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
248 */
249
250
251 int
252 mailimf_envelope_and_optional_fields_parse(const char * message, size_t length,
253                                            size_t * index,
254                                            struct mailimf_fields ** result);
255
256 /*
257   mailimf_envelope_fields will parse the given fields as optional
258   fields.
259   
260   @param message this is a string containing the header fields
261   @param length this is the size of the given string
262   @param index this is a pointer to the start of the header fields in
263     the given string, (* index) is modified to point at the end
264     of the parsed data
265   @param result the result of the parse operation is stored in
266     (* result)
267
268   @return MAILIMF_NO_ERROR on success, MAILIMF_ERROR_XXX on error
269 */
270
271 int
272 mailimf_optional_fields_parse(const char * message, size_t length,
273                               size_t * index,
274                               struct mailimf_fields ** result);
275
276
277 /* internal use, exported for MIME */
278
279 int mailimf_fws_parse(const char * message, size_t length, size_t * index);
280
281 int mailimf_cfws_parse(const char * message, size_t length,
282                        size_t * index);
283
284 int mailimf_char_parse(const char * message, size_t length,
285                        size_t * index, char token);
286
287 int mailimf_unstrict_char_parse(const char * message, size_t length,
288                                 size_t * index, char token);
289
290 int mailimf_crlf_parse(const char * message, size_t length, size_t * index);
291
292 int
293 mailimf_custom_string_parse(const char * message, size_t length,
294                             size_t * index, char ** result,
295                             int (* is_custom_char)(char));
296
297 int
298 mailimf_token_case_insensitive_len_parse(const char * message, size_t length,
299                                          size_t * index, char * token,
300                                          size_t token_length);
301
302 #define mailimf_token_case_insensitive_parse(message, length, index, token) \
303     mailimf_token_case_insensitive_len_parse(message, length, index, token, \
304                                              sizeof(token) - 1)
305
306 int mailimf_quoted_string_parse(const char * message, size_t length,
307                                 size_t * index, char ** result);
308
309 int
310 mailimf_number_parse(const char * message, size_t length,
311                      size_t * index, uint32_t * result);
312
313 int mailimf_msg_id_parse(const char * message, size_t length,
314                          size_t * index,
315                          char ** result);
316
317 int mailimf_msg_id_list_parse(const char * message, size_t length,
318                               size_t * index, clist ** result);
319
320 int mailimf_word_parse(const char * message, size_t length,
321                        size_t * index, char ** result);
322
323 int mailimf_atom_parse(const char * message, size_t length,
324                        size_t * index, char ** result);
325
326 int mailimf_fws_atom_parse(const char * message, size_t length,
327                            size_t * index, char ** result);
328
329 int mailimf_fws_word_parse(const char * message, size_t length,
330                            size_t * index, char ** result);
331
332 int mailimf_fws_quoted_string_parse(const char * message, size_t length,
333                                     size_t * index, char ** result);
334
335 /* exported for IMAP */
336
337 int mailimf_references_parse(const char * message, size_t length,
338                              size_t * index,
339                              struct mailimf_references ** result);
340
341 #ifdef __cplusplus
342 }
343 #endif
344
345 #endif