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 346