/* * libEtPan! -- a mail stuff library * * Copyright (C) 2001, 2005 - DINH Viet Hoa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the libEtPan! project nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Id$ */ #ifndef MAILMIME_TYPES_H #define MAILMIME_TYPES_H #ifdef __cplusplus extern "C" { #endif #include #include #include enum { MAILMIME_COMPOSITE_TYPE_ERROR, MAILMIME_COMPOSITE_TYPE_MESSAGE, MAILMIME_COMPOSITE_TYPE_MULTIPART, MAILMIME_COMPOSITE_TYPE_EXTENSION }; struct mailmime_composite_type { int ct_type; char * ct_token; }; struct mailmime_content { struct mailmime_type * ct_type; char * ct_subtype; clist * ct_parameters; /* elements are (struct mailmime_parameter *) */ }; enum { MAILMIME_DISCRETE_TYPE_ERROR, MAILMIME_DISCRETE_TYPE_TEXT, MAILMIME_DISCRETE_TYPE_IMAGE, MAILMIME_DISCRETE_TYPE_AUDIO, MAILMIME_DISCRETE_TYPE_VIDEO, MAILMIME_DISCRETE_TYPE_APPLICATION, MAILMIME_DISCRETE_TYPE_EXTENSION }; struct mailmime_discrete_type { int dt_type; char * dt_extension; }; enum { MAILMIME_FIELD_NONE, MAILMIME_FIELD_TYPE, MAILMIME_FIELD_TRANSFER_ENCODING, MAILMIME_FIELD_ID, MAILMIME_FIELD_DESCRIPTION, MAILMIME_FIELD_VERSION, MAILMIME_FIELD_DISPOSITION, MAILMIME_FIELD_LANGUAGE, }; struct mailmime_field { int fld_type; union { struct mailmime_content * fld_content; struct mailmime_mechanism * fld_encoding; char * fld_id; char * fld_description; uint32_t fld_version; struct mailmime_disposition * fld_disposition; struct mailmime_language * fld_language; } fld_data; }; enum { MAILMIME_MECHANISM_ERROR, MAILMIME_MECHANISM_7BIT, MAILMIME_MECHANISM_8BIT, MAILMIME_MECHANISM_BINARY, MAILMIME_MECHANISM_QUOTED_PRINTABLE, MAILMIME_MECHANISM_BASE64, MAILMIME_MECHANISM_TOKEN }; struct mailmime_mechanism { int enc_type; char * enc_token; }; struct mailmime_fields { clist * fld_list; /* list of (struct mailmime_field *) */ }; struct mailmime_parameter { char * pa_name; char * pa_value; }; enum { MAILMIME_TYPE_ERROR, MAILMIME_TYPE_DISCRETE_TYPE, MAILMIME_TYPE_COMPOSITE_TYPE }; struct mailmime_type { int tp_type; union { struct mailmime_discrete_type * tp_discrete_type; struct mailmime_composite_type * tp_composite_type; } tp_data; }; void mailmime_attribute_free(char * attribute); struct mailmime_composite_type * mailmime_composite_type_new(int ct_type, char * ct_token); void mailmime_composite_type_free(struct mailmime_composite_type * ct); struct mailmime_content * mailmime_content_new(struct mailmime_type * ct_type, char * ct_subtype, clist * ct_parameters); void mailmime_content_free(struct mailmime_content * content); void mailmime_description_free(char * description); struct mailmime_discrete_type * mailmime_discrete_type_new(int dt_type, char * dt_extension); void mailmime_discrete_type_free(struct mailmime_discrete_type * discrete_type); void mailmime_encoding_free(struct mailmime_mechanism * encoding); void mailmime_extension_token_free(char * extension); void mailmime_id_free(char * id); struct mailmime_mechanism * mailmime_mechanism_new(int enc_type, char * enc_token); void mailmime_mechanism_free(struct mailmime_mechanism * mechanism); struct mailmime_parameter * mailmime_parameter_new(char * pa_name, char * pa_value); void mailmime_parameter_free(struct mailmime_parameter * parameter); void mailmime_subtype_free(char * subtype); void mailmime_token_free(char * token); struct mailmime_type * mailmime_type_new(int tp_type, struct mailmime_discrete_type * tp_discrete_type, struct mailmime_composite_type * tp_composite_type); void mailmime_type_free(struct mailmime_type * type); void mailmime_value_free(char * value); struct mailmime_language { clist * lg_list; /* atom (char *) */ }; struct mailmime_language * mailmime_language_new(clist * lg_list); void mailmime_language_free(struct mailmime_language * lang); /* void mailmime_x_token_free(gchar * x_token); */ struct mailmime_field * mailmime_field_new(int fld_type, struct mailmime_content * fld_content, struct mailmime_mechanism * fld_encoding, char * fld_id, char * fld_description, uint32_t fld_version, struct mailmime_disposition * fld_disposition, struct mailmime_language * fld_language); void mailmime_field_free(struct mailmime_field * field); struct mailmime_fields * mailmime_fields_new(clist * fld_list); void mailmime_fields_free(struct mailmime_fields * fields); struct mailmime_multipart_body { clist * bd_list; }; struct mailmime_multipart_body * mailmime_multipart_body_new(clist * bd_list); void mailmime_multipart_body_free(struct mailmime_multipart_body * mp_body); enum { MAILMIME_DATA_TEXT, MAILMIME_DATA_FILE, }; struct mailmime_data { int dt_type; int dt_encoding; int dt_encoded; union { struct { const char * dt_data; size_t dt_length; } dt_text; char * dt_filename; } dt_data; }; struct mailmime_data * mailmime_data_new(int dt_type, int dt_encoding, int dt_encoded, const char * dt_data, size_t dt_length, char * dt_filename); void mailmime_data_free(struct mailmime_data * mime_data); enum { MAILMIME_NONE, MAILMIME_SINGLE, MAILMIME_MULTIPLE, MAILMIME_MESSAGE, }; struct mailmime { /* parent information */ int mm_parent_type; struct mailmime * mm_parent; clistiter * mm_multipart_pos; int mm_type; const char * mm_mime_start; size_t mm_length; struct mailmime_fields * mm_mime_fields; struct mailmime_content * mm_content_type; struct mailmime_data * mm_body; union { /* single part */ struct mailmime_data * mm_single; /* XXX - was body */ /* multi-part */ struct { struct mailmime_data * mm_preamble; struct mailmime_data * mm_epilogue; clist * mm_mp_list; } mm_multipart; /* message */ struct { struct mailimf_fields * mm_fields; struct mailmime * mm_msg_mime; } mm_message; } mm_data; }; struct mailmime * mailmime_new(int mm_type, const char * mm_mime_start, size_t mm_length, struct mailmime_fields * mm_mime_fields, struct mailmime_content * mm_content_type, struct mailmime_data * mm_body, struct mailmime_data * mm_preamble, struct mailmime_data * mm_epilogue, clist * mm_mp_list, struct mailimf_fields * mm_fields, struct mailmime * mm_msg_mime); void mailmime_free(struct mailmime * mime); struct mailmime_encoded_word { char * wd_charset; char * wd_text; }; struct mailmime_encoded_word * mailmime_encoded_word_new(char * wd_charset, char * wd_text); void mailmime_encoded_word_free(struct mailmime_encoded_word * ew); void mailmime_charset_free(char * charset); void mailmime_encoded_text_free(char * text); struct mailmime_disposition { struct mailmime_disposition_type * dsp_type; clist * dsp_parms; /* struct mailmime_disposition_parm */ }; enum { MAILMIME_DISPOSITION_TYPE_ERROR, MAILMIME_DISPOSITION_TYPE_INLINE, MAILMIME_DISPOSITION_TYPE_ATTACHMENT, MAILMIME_DISPOSITION_TYPE_EXTENSION }; struct mailmime_disposition_type { int dsp_type; char * dsp_extension; }; enum { MAILMIME_DISPOSITION_PARM_FILENAME, MAILMIME_DISPOSITION_PARM_CREATION_DATE, MAILMIME_DISPOSITION_PARM_MODIFICATION_DATE, MAILMIME_DISPOSITION_PARM_READ_DATE, MAILMIME_DISPOSITION_PARM_SIZE, MAILMIME_DISPOSITION_PARM_PARAMETER }; struct mailmime_disposition_parm { int pa_type; union { char * pa_filename; char * pa_creation_date; char * pa_modification_date; char * pa_read_date; size_t pa_size; struct mailmime_parameter * pa_parameter; } pa_data; }; struct mailmime_disposition * mailmime_disposition_new(struct mailmime_disposition_type * dsp_type, clist * dsp_parms); void mailmime_disposition_free(struct mailmime_disposition * dsp); struct mailmime_disposition_type * mailmime_disposition_type_new(int dt_type, char * dt_extension); void mailmime_disposition_type_free(struct mailmime_disposition_type * dsp_type); struct mailmime_disposition_parm * mailmime_disposition_parm_new(int pa_type, char * pa_filename, char * pa_creation_date, char * pa_modification_date, char * pa_read_date, size_t pa_size, struct mailmime_parameter * pa_parameter); void mailmime_disposition_parm_free(struct mailmime_disposition_parm * dsp_parm); void mailmime_filename_parm_free(char * filename); void mailmime_creation_date_parm_free(char * date); void mailmime_modification_date_parm_free(char * date); void mailmime_read_date_parm_free(char * date); void mailmime_quoted_date_time_free(char * date); struct mailmime_section { clist * sec_list; /* list of (uint32 *) */ }; struct mailmime_section * mailmime_section_new(clist * list); void mailmime_section_free(struct mailmime_section * section); void mailmime_decoded_part_free(char * part); struct mailmime_single_fields { struct mailmime_content * fld_content; char * fld_content_charset; char * fld_content_boundary; char * fld_content_name; struct mailmime_mechanism * fld_encoding; char * fld_id; char * fld_description; uint32_t fld_version; struct mailmime_disposition * fld_disposition; char * fld_disposition_filename; char * fld_disposition_creation_date; char * fld_disposition_modification_date; char * fld_disposition_read_date; size_t fld_disposition_size; struct mailmime_language * fld_language; }; #ifdef __cplusplus } #endif #endif