diff options
Diffstat (limited to 'libkcal/libical/src/libical/icalmime.c')
-rw-r--r-- | libkcal/libical/src/libical/icalmime.c | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/libkcal/libical/src/libical/icalmime.c b/libkcal/libical/src/libical/icalmime.c deleted file mode 100644 index 0a186d144..000000000 --- a/libkcal/libical/src/libical/icalmime.c +++ /dev/null @@ -1,393 +0,0 @@ -/* -*- Mode: C -*-*/ -/*====================================================================== - FILE: icalmime.c - CREATOR: eric 26 July 2000 - - - - (C) COPYRIGHT 2000, Eric Busboom <eric@softwarestudio.org> - http://www.softwarestudio.org - - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: http://www.fsf.org/copyleft/lesser.html - - Or: - - The Mozilla Public License Version 1.0. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - -======================================================================*/ - -#include "icalmime.h" -#include "icalerror.h" -#include "icalmemory.h" -#include "sspm.h" -#include "stdlib.h" -#include <string.h> /* For strdup */ -#include <stdio.h> /* for snprintf*/ - -#ifdef DMALLOC -#include "dmalloc.h" -#endif - -#ifdef WIN32 -#define snprintf _snprintf -#define strcasecmp stricmp -#endif - -/* These *_part routines are called by the MIME parser via the - local_action_map */ - -struct text_part -{ - char* buf; - char* buf_pos; - size_t buf_size; -}; - -void* icalmime_text_new_part() -{ - -#define BUF_SIZE 2048 - - struct text_part* impl; - - if ( ( impl = (struct text_part*) - malloc(sizeof(struct text_part))) == 0) { - return 0; - } - - impl->buf = icalmemory_new_buffer(BUF_SIZE); - impl->buf_pos = impl->buf; - impl->buf_size = BUF_SIZE; - - return impl; -} -void icalmime_text_add_line(void *part, - struct sspm_header *header, - const char* line, size_t size) -{ - struct text_part* impl = (struct text_part*) part; - (void)header; - (void)size; - - icalmemory_append_string(&(impl->buf),&(impl->buf_pos), - &(impl->buf_size),line); - -} - -void* icalmime_textcalendar_end_part(void* part) -{ - - struct text_part* impl = (struct text_part*) part; - icalcomponent *c = icalparser_parse_string(impl->buf); - - icalmemory_free_buffer(impl->buf); - free(impl); - - return c; - -} - -void* icalmime_text_end_part(void* part) -{ - struct text_part* impl = ( struct text_part*) part; - - icalmemory_add_tmp_buffer(impl->buf); - /* What for? free(impl); */ - - return impl->buf; -} - -void icalmime_text_free_part(void *part) -{ - part = part; -} - - -/* Ignore Attachments for now */ - -void* icalmime_attachment_new_part() -{ - return 0; -} -void icalmime_attachment_add_line(void *part, struct sspm_header *header, - const char* line, size_t size) -{ - (void)part; - (void)header; - (void)line; - (void)size; -} - -void* icalmime_attachment_end_part(void* part) -{ - (void)part; - return 0; -} - -void icalmime_attachment_free_part(void *part) -{ - (void)part; -} - - - - -struct sspm_action_map icalmime_local_action_map[] = -{ - {SSPM_TEXT_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_textcalendar_end_part,icalmime_text_free_part}, - {SSPM_TEXT_MAJOR_TYPE,SSPM_ANY_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part}, - {SSPM_TEXT_MAJOR_TYPE,SSPM_PLAIN_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part,icalmime_text_free_part}, - {SSPM_APPLICATION_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, - {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, - {SSPM_AUDIO_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, - {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, - {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,0,0,0,0} -}; - -#define NUM_PARTS 100 /* HACK. Hard Limit */ - - - -struct sspm_part* icalmime_make_part(icalcomponent* comp) -{ - comp = comp; - return 0; -} - -char* icalmime_as_mime_string(char* icalcomponent); - -icalcomponent* icalmime_parse(char* (*get_string)(char *s, size_t size, - void *d), - void *data) -{ - struct sspm_part *parts; - int i, last_level=0; - icalcomponent *root=0, *parent=0, *comp=0, *last = 0; - - if ( (parts = (struct sspm_part *) - malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - memset(parts,0,sizeof(parts)); - - sspm_parse_mime(parts, - NUM_PARTS, /* Max parts */ - icalmime_local_action_map, /* Actions */ - get_string, - data, /* data for get_string*/ - 0 /* First header */); - - - - for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; i++){ - -#define TMPSZ 1024 - char mimetype[TMPSZ]; - const char* major = sspm_major_type_string(parts[i].header.major); - const char* minor = sspm_minor_type_string(parts[i].header.minor); - - if(parts[i].header.minor == SSPM_UNKNOWN_MINOR_TYPE ){ - assert(parts[i].header.minor_text !=0); - minor = parts[i].header.minor_text; - } - - snprintf(mimetype,sizeof(mimetype),"%s/%s",major,minor); - - comp = icalcomponent_new(ICAL_XLICMIMEPART_COMPONENT); - - if(comp == 0){ - /* HACK Handle Error */ - assert(0); - } - - if(parts[i].header.error!=SSPM_NO_ERROR){ - const char *str="Unknown error"; - char temp[256]; - - if(parts[i].header.error==SSPM_UNEXPECTED_BOUNDARY_ERROR){ - str = "Got an unexpected boundary, possibly due to a MIME header for a MULTIPART part that is missing the Content-Type line"; - } - - if(parts[i].header.error==SSPM_WRONG_BOUNDARY_ERROR){ - str = "Got the wrong boundary for the opening of a MULTIPART part."; - } - - if(parts[i].header.error==SSPM_NO_BOUNDARY_ERROR){ - str = "Got a multipart header that did not specify a boundary"; - } - - if(parts[i].header.error==SSPM_NO_HEADER_ERROR){ - str = "Did not get a header for the part. Is there a blank\ -line between the header and the previous boundary\?"; - - } - - if(parts[i].header.error_text != 0){ - snprintf(temp,256, - "%s: %s",str,parts[i].header.error_text); - } else { - strcpy(temp,str); - } - - icalcomponent_add_property - (comp, - icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_MIMEPARSEERROR), - 0)); - } - - if(parts[i].header.major != SSPM_NO_MAJOR_TYPE && - parts[i].header.major != SSPM_UNKNOWN_MAJOR_TYPE){ - - icalcomponent_add_property(comp, - icalproperty_new_xlicmimecontenttype((char*) - icalmemory_strdup(mimetype))); - - } - - if (parts[i].header.encoding != SSPM_NO_ENCODING){ - - icalcomponent_add_property(comp, - icalproperty_new_xlicmimeencoding( - sspm_encoding_string(parts[i].header.encoding))); - } - - if (parts[i].header.filename != 0){ - icalcomponent_add_property(comp, - icalproperty_new_xlicmimefilename(parts[i].header.filename)); - } - - if (parts[i].header.content_id != 0){ - icalcomponent_add_property(comp, - icalproperty_new_xlicmimecid(parts[i].header.content_id)); - } - - if (parts[i].header.charset != 0){ - icalcomponent_add_property(comp, - icalproperty_new_xlicmimecharset(parts[i].header.charset)); - } - - /* Add iCal components as children of the component */ - if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE && - parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE && - parts[i].data != 0){ - - icalcomponent_add_component(comp, - (icalcomponent*)parts[i].data); - parts[i].data = 0; - - } else if(parts[i].header.major == SSPM_TEXT_MAJOR_TYPE && - parts[i].header.minor != SSPM_CALENDAR_MINOR_TYPE && - parts[i].data != 0){ - - /* Add other text components as "DESCRIPTION" properties */ - - icalcomponent_add_property(comp, - icalproperty_new_description( - (char*)icalmemory_strdup((char*)parts[i].data))); - - parts[i].data = 0; - } - - - if(root!= 0 && parts[i].level == 0){ - /* We've already assigned the root, but there is another - part at the root level. This is probably a parse - error*/ - icalcomponent_free(comp); - continue; - } - - if(parts[i].level == last_level && last_level != 0){ - icalerror_assert(parent!=0,"No parent for adding component"); - - icalcomponent_add_component(parent,comp); - - } else if (parts[i].level == last_level && last_level == 0 && - root == 0) { - - root = comp; - parent = comp; - - } else if (parts[i].level > last_level){ - - parent = last; - icalcomponent_add_component(parent,comp); - - last_level = parts[i].level; - - } else if (parts[i].level < last_level){ - - parent = icalcomponent_get_parent(parent); - icalcomponent_add_component(parent,comp); - - last_level = parts[i].level; - } else { - assert(0); - } - - last = comp; - last_level = parts[i].level; - assert(parts[i].data == 0); - } - - sspm_free_parts(parts,NUM_PARTS); - free(parts); - - return root; -} - - - -int icalmime_test(char* (*get_string)(char *s, size_t size, void *d), - void *data) -{ - char *out; - struct sspm_part *parts; - int i; - - if ( (parts = (struct sspm_part *) - malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - memset(parts,0,sizeof(parts)); - - sspm_parse_mime(parts, - NUM_PARTS, /* Max parts */ - icalmime_local_action_map, /* Actions */ - get_string, - data, /* data for get_string*/ - 0 /* First header */); - - for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; - i++){ - if(parts[i].header.minor == SSPM_CALENDAR_MINOR_TYPE){ - parts[i].data = icalmemory_strdup( - icalcomponent_as_ical_string((icalcomponent*)parts[i].data)); - } - } - - sspm_write_mime(parts,NUM_PARTS,&out,"To: bob@bob.org"); - - printf("%s\n",out); - - return 0; - -} - - |