summaryrefslogtreecommitdiffabout
path: root/libical/src/libical/sspm.c
Unidiff
Diffstat (limited to 'libical/src/libical/sspm.c') (more/less context) (ignore whitespace changes)
-rw-r--r--libical/src/libical/sspm.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/libical/src/libical/sspm.c b/libical/src/libical/sspm.c
index 2df581b..17f12ee 100644
--- a/libical/src/libical/sspm.c
+++ b/libical/src/libical/sspm.c
@@ -32,36 +32,33 @@
32 32
33 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org 33 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
34 ======================================================================*/ 34 ======================================================================*/
35 35
36#include <stdio.h> 36#include <stdio.h>
37#include <string.h> 37#include <string.h>
38#include "sspm.h" 38#include "sspm.h"
39#include <assert.h> 39#include <assert.h>
40#include <ctype.h> /* for tolower */ 40#include <ctype.h> /* for tolower */
41#include <stdlib.h> /* for malloc, free */ 41#include <stdlib.h> /* for malloc, free */
42#include <string.h> /* for strcasecmp */ 42#include <string.h> /* for strcasecmp */
43 43
44// Eugen C. <eug@thekompany.com>
45#ifdef _WIN32
46#define strcasecmp _stricmp
47#endif
48// Eugen C. <eug@thekompany.com>
49
50int snprintf(char *str, size_t n, char const *fmt, ...);
51
52#ifdef DMALLOC 44#ifdef DMALLOC
53#include "dmalloc.h" 45#include "dmalloc.h"
54#endif 46#endif
55 47
48#ifdef WIN32
49#define snprintf _snprintf
50#define strcasecmp stricmp
51#endif
52
56#define TMP_BUF_SIZE 1024 53#define TMP_BUF_SIZE 1024
57 54
58 55
59enum mime_state { 56enum mime_state {
60 UNKNOWN_STATE, 57 UNKNOWN_STATE,
61 IN_HEADER, 58 IN_HEADER,
62 END_OF_HEADER, 59 END_OF_HEADER,
63 IN_BODY, 60 IN_BODY,
64 OPENING_PART, 61 OPENING_PART,
65 END_OF_PART, 62 END_OF_PART,
66 TERMINAL_END_OF_PART, 63 TERMINAL_END_OF_PART,
67 END_OF_INPUT 64 END_OF_INPUT
@@ -84,44 +81,44 @@ void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header
84void sspm_read_header(struct mime_impl *impl,struct sspm_header *header); 81void sspm_read_header(struct mime_impl *impl,struct sspm_header *header);
85 82
86char* sspm_strdup(char* str){ 83char* sspm_strdup(char* str){
87 84
88 char* s; 85 char* s;
89 86
90 s = strdup(str); 87 s = strdup(str);
91 88
92 return s; 89 return s;
93} 90}
94 91
95 92
96struct major_content_type_map 93static struct major_content_type_map
97{ 94{
98 enum sspm_major_type type; 95 enum sspm_major_type type;
99 char* str; 96 char* str;
100 97
101} major_content_type_map[] = 98} major_content_type_map[] =
102{ 99{
103 {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, 100 {SSPM_MULTIPART_MAJOR_TYPE,"multipart" },
104 {SSPM_TEXT_MAJOR_TYPE,"text" }, 101 {SSPM_TEXT_MAJOR_TYPE,"text" },
105 {SSPM_TEXT_MAJOR_TYPE,"text" }, 102 {SSPM_TEXT_MAJOR_TYPE,"text" },
106 {SSPM_IMAGE_MAJOR_TYPE,"image" }, 103 {SSPM_IMAGE_MAJOR_TYPE,"image" },
107 {SSPM_AUDIO_MAJOR_TYPE,"audio" }, 104 {SSPM_AUDIO_MAJOR_TYPE,"audio" },
108 {SSPM_VIDEO_MAJOR_TYPE,"video" }, 105 {SSPM_VIDEO_MAJOR_TYPE,"video" },
109 {SSPM_APPLICATION_MAJOR_TYPE,"application" }, 106 {SSPM_APPLICATION_MAJOR_TYPE,"application" },
110 {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, 107 {SSPM_MULTIPART_MAJOR_TYPE,"multipart" },
111 {SSPM_MESSAGE_MAJOR_TYPE,"message" }, 108 {SSPM_MESSAGE_MAJOR_TYPE,"message" },
112 {SSPM_UNKNOWN_MAJOR_TYPE,"" }, 109 {SSPM_UNKNOWN_MAJOR_TYPE,"" },
113}; 110};
114 111
115struct minor_content_type_map 112static struct minor_content_type_map
116{ 113{
117 enum sspm_minor_type type; 114 enum sspm_minor_type type;
118 char* str; 115 char* str;
119 116
120} minor_content_type_map[] = 117} minor_content_type_map[] =
121{ 118{
122 {SSPM_ANY_MINOR_TYPE,"*" }, 119 {SSPM_ANY_MINOR_TYPE,"*" },
123 {SSPM_PLAIN_MINOR_TYPE,"plain" }, 120 {SSPM_PLAIN_MINOR_TYPE,"plain" },
124 {SSPM_RFC822_MINOR_TYPE,"rfc822" }, 121 {SSPM_RFC822_MINOR_TYPE,"rfc822" },
125 {SSPM_DIGEST_MINOR_TYPE,"digest" }, 122 {SSPM_DIGEST_MINOR_TYPE,"digest" },
126 {SSPM_CALENDAR_MINOR_TYPE,"calendar" }, 123 {SSPM_CALENDAR_MINOR_TYPE,"calendar" },
127 {SSPM_MIXED_MINOR_TYPE,"mixed" }, 124 {SSPM_MIXED_MINOR_TYPE,"mixed" },
@@ -232,25 +229,25 @@ char* sspm_value(char* line)
232 for(p=value; c != s; c++){ 229 for(p=value; c != s; c++){
233 if(*c!=' ' && *c!='\n'){ 230 if(*c!=' ' && *c!='\n'){
234 *(p++) = *c; 231 *(p++) = *c;
235 } 232 }
236 } 233 }
237 234
238 *p='\0'; 235 *p='\0';
239 236
240 return value; 237 return value;
241 238
242} 239}
243 240
244char *mime_headers[] = { 241static char *mime_headers[] = {
245 "Content-Type", 242 "Content-Type",
246 "Content-Transfer-Encoding", 243 "Content-Transfer-Encoding",
247 "Content-Disposition", 244 "Content-Disposition",
248 "Content-Id", 245 "Content-Id",
249 "Mime-Version", 246 "Mime-Version",
250 0 247 0
251}; 248};
252 249
253 250
254void* sspm_default_new_part() 251void* sspm_default_new_part()
255{ 252{
256 return 0; 253 return 0;
@@ -357,49 +354,49 @@ int sspm_is_mime_terminating_boundary(char *line)
357enum line_type { 354enum line_type {
358 EMPTY, 355 EMPTY,
359 BLANK, 356 BLANK,
360 MIME_HEADER, 357 MIME_HEADER,
361 MAIL_HEADER, 358 MAIL_HEADER,
362 HEADER_CONTINUATION, 359 HEADER_CONTINUATION,
363 BOUNDARY, 360 BOUNDARY,
364 TERMINATING_BOUNDARY, 361 TERMINATING_BOUNDARY,
365 UNKNOWN_TYPE 362 UNKNOWN_TYPE
366}; 363};
367 364
368 365
369enum line_type get_line_type(char* line){ 366static enum line_type get_line_type(char* line){
370 367
371 if (line == 0){ 368 if (line == 0){
372 return EMPTY; 369 return EMPTY;
373 } else if(sspm_is_blank(line)){ 370 } else if(sspm_is_blank(line)){
374 return BLANK; 371 return BLANK;
375 } else if (sspm_is_mime_header(line)){ 372 } else if (sspm_is_mime_header(line)){
376 return MIME_HEADER; 373 return MIME_HEADER;
377 } else if (sspm_is_mail_header(line)){ 374 } else if (sspm_is_mail_header(line)){
378 return MAIL_HEADER; 375 return MAIL_HEADER;
379 } else if (sspm_is_continuation_line(line)){ 376 } else if (sspm_is_continuation_line(line)){
380 return HEADER_CONTINUATION; 377 return HEADER_CONTINUATION;
381 } else if (sspm_is_mime_terminating_boundary(line)){ 378 } else if (sspm_is_mime_terminating_boundary(line)){
382 return TERMINATING_BOUNDARY; 379 return TERMINATING_BOUNDARY;
383 } else if (sspm_is_mime_boundary(line)) { 380 } else if (sspm_is_mime_boundary(line)) {
384 return BOUNDARY; 381 return BOUNDARY;
385 } else { 382 } else {
386 return UNKNOWN_TYPE; 383 return UNKNOWN_TYPE;
387 } 384 }
388 385
389 386
390} 387}
391 388
392 389
393struct sspm_action_map get_action(struct mime_impl *impl, 390static struct sspm_action_map get_action(struct mime_impl *impl,
394 enum sspm_major_type major, 391 enum sspm_major_type major,
395 enum sspm_minor_type minor) 392 enum sspm_minor_type minor)
396{ 393{
397 int i; 394 int i;
398 395
399 /* Read caller suppled action map */ 396 /* Read caller suppled action map */
400 397
401 if (impl->actions != 0){ 398 if (impl->actions != 0){
402 for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ 399 for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){
403 if((major == impl->actions[i].major && 400 if((major == impl->actions[i].major &&
404 minor == impl->actions[i].minor) || 401 minor == impl->actions[i].minor) ||
405 (major == impl->actions[i].major && 402 (major == impl->actions[i].major &&