1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/*======================================================================
FILE: sspm.h Mime Parser
CREATOR: eric 25 June 2000
SPDX-FileCopyrightText: 2000, Eric Busboom <eric@civicknowledge.com>
SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0
The Initial Developer of the Original Code is Eric Busboom
======================================================================*/
#ifndef ICAL_SSPM_H
#define ICAL_SSPM_H
#include "libical_ical_export.h"
enum sspm_major_type
{
SSPM_NO_MAJOR_TYPE,
SSPM_TEXT_MAJOR_TYPE,
SSPM_IMAGE_MAJOR_TYPE,
SSPM_AUDIO_MAJOR_TYPE,
SSPM_VIDEO_MAJOR_TYPE,
SSPM_APPLICATION_MAJOR_TYPE,
SSPM_MULTIPART_MAJOR_TYPE,
SSPM_MESSAGE_MAJOR_TYPE,
SSPM_UNKNOWN_MAJOR_TYPE
};
enum sspm_minor_type
{
SSPM_NO_MINOR_TYPE,
SSPM_ANY_MINOR_TYPE,
SSPM_PLAIN_MINOR_TYPE,
SSPM_RFC822_MINOR_TYPE,
SSPM_DIGEST_MINOR_TYPE,
SSPM_CALENDAR_MINOR_TYPE,
SSPM_MIXED_MINOR_TYPE,
SSPM_RELATED_MINOR_TYPE,
SSPM_ALTERNATIVE_MINOR_TYPE,
SSPM_PARALLEL_MINOR_TYPE,
SSPM_UNKNOWN_MINOR_TYPE
};
enum sspm_encoding
{
SSPM_NO_ENCODING,
SSPM_QUOTED_PRINTABLE_ENCODING,
SSPM_8BIT_ENCODING,
SSPM_7BIT_ENCODING,
SSPM_BINARY_ENCODING,
SSPM_BASE64_ENCODING,
SSPM_UNKNOWN_ENCODING
};
enum sspm_error
{
SSPM_NO_ERROR,
SSPM_UNEXPECTED_BOUNDARY_ERROR,
SSPM_WRONG_BOUNDARY_ERROR,
SSPM_NO_BOUNDARY_ERROR,
SSPM_NO_HEADER_ERROR,
SSPM_MALFORMED_HEADER_ERROR
};
struct sspm_header
{
int def;
char *boundary;
enum sspm_major_type major;
enum sspm_minor_type minor;
char *minor_text;
char **content_type_params;
char *charset;
enum sspm_encoding encoding;
char *filename;
char *content_id;
enum sspm_error error;
char *error_text;
};
struct sspm_part
{
struct sspm_header header;
int level;
size_t data_size;
void *data;
};
struct sspm_action_map
{
enum sspm_major_type major;
enum sspm_minor_type minor;
void *(*new_part) (void);
void (*add_line) (void *part, struct sspm_header * header, const char *line, size_t size);
void *(*end_part) (void *part);
void (*free_part) (void *part);
};
LIBICAL_ICAL_EXPORT const char *sspm_major_type_string(enum sspm_major_type type);
LIBICAL_ICAL_EXPORT const char *sspm_minor_type_string(enum sspm_minor_type type);
LIBICAL_ICAL_EXPORT const char *sspm_encoding_string(enum sspm_encoding type);
LIBICAL_ICAL_EXPORT int sspm_parse_mime(struct sspm_part *parts,
size_t max_parts,
const struct sspm_action_map *actions,
char *(*get_string) (char *s, size_t size, void *data),
void *get_string_data, struct sspm_header *first_header);
LIBICAL_ICAL_EXPORT void sspm_free_parts(struct sspm_part *parts, size_t max_parts);
LIBICAL_ICAL_EXPORT char *decode_quoted_printable(char *dest, char *src, size_t *size);
LIBICAL_ICAL_EXPORT char *decode_base64(char *dest, char *src, size_t *size);
LIBICAL_ICAL_EXPORT int sspm_write_mime(struct sspm_part *parts, size_t num_parts,
char **output_string, const char *header);
#endif /* ICAL_SSPM_H */
|