9 multipart/mixed: MIME E-mail; Defined in RFC 2045 and RFC 2046
10 multipart/alternative: MIME E-mail; Defined in RFC 2045 and RFC 2046
11 multipart/related: MIME E-mail; Defined in RFC 2387 and used by MHTML (HTML mail)
12 multipart/form-data: MIME Webform; Defined in RFC 2388
13 multipart/signed: Defined in RFC 1847
14 multipart/encrypted: Defined in RFC 1847
28 void mime_content_type(const char *buf
, struct mime_header
*hdr
)
35 while (*p
!= '\0' && isspace(*p
)) {
36 if (*p
== '\n' || *p
== '\r') {
37 hdr
->type
= MIME_TYPE_UNKNOWN
;
43 /* text/plain is the default for e-mail */
44 if (!strncmp(p
, "text", 4)) {
45 hdr
->type
= MIME_TYPE_TEXT
;
47 } else if (!strncmp(p
, "multipart", 9)) {
48 hdr
->type
= MIME_TYPE_MULTIPART
;
50 } else if (!strncmp(p
, "application", 11)) {
51 hdr
->type
= MIME_TYPE_APPLICATION
;
53 } else if (!strncmp(p
, "audio", 5)) {
54 hdr
->type
= MIME_TYPE_AUDIO
;
56 } else if (!strncmp(p
, "example", 7)) {
57 hdr
->type
= MIME_TYPE_EXAMPLE
;
59 } else if (!strncmp(p
, "image", 5)) {
60 hdr
->type
= MIME_TYPE_IMAGE
;
62 } else if (!strncmp(p
, "message", 7)) {
63 hdr
->type
= MIME_TYPE_MESSAGE
;
65 } else if (!strncmp(p
, "model", 5)) {
66 hdr
->type
= MIME_TYPE_MODEL
;
68 } else if (!strncmp(p
, "video", 5)) {
69 hdr
->type
= MIME_TYPE_VIDEO
;
72 hdr
->type
= MIME_TYPE_UNKNOWN
;
76 int mime_content_disposition(const char *buf
)
83 while (*p
!= '\0' && isspace(*p
)) {
84 if (*p
== '\n' || *p
== '\r') {
85 return MIME_DISPOSITION_UNKNOWN
;
90 /* text/plain is the default */
91 if (!strncmp(p
, "inline", 6)) {
92 return MIME_DISPOSITION_INLINE
;
93 } else if (!strncmp(p
, "attachment", 10)) {
94 return MIME_DISPOSITION_ATTACHMENT
;
96 return MIME_DISPOSITION_UNKNOWN
;
99 return MIME_DISPOSITION_UNKNOWN
;
103 int mime_content_transfer_encoding(const char *buf
)
107 p
= strchr(buf
, ':');
110 while (*p
!= '\0' && isspace(*p
)) {
111 if (*p
== '\n' || *p
== '\r') {
112 return MIME_ENCODING_7BIT
;
117 fprintf(stderr, "%s - %s\n", __func__, p);
119 if (!strncmp(p
, "7bit", 4)) {
120 return MIME_ENCODING_7BIT
;
121 } else if (!strncmp(p
, "quoted-printable", 16)) {
122 return MIME_ENCODING_QUOTED_PRINTABLE
;
123 } else if (!strncmp(p
, "base64", 6)) {
124 return MIME_ENCODING_BASE64
;
125 } else if (!strncmp(p
, "8bit", 4)) {
126 return MIME_ENCODING_8BIT
;
127 } else if (!strncmp(p
, "binary", 6)) {
128 return MIME_ENCODING_BINARY
;
130 return MIME_ENCODING_UNKNOWN
;
133 return MIME_ENCODING_UNKNOWN
;
136 void debug_mime_header(const struct mime_header
*hdr
)
138 fprintf(stderr
, "MIME Header:\n");
140 /* MIME Content-Type */
141 fprintf(stderr
, " Content-Type.............: ");
144 fprintf(stderr
, "text\n");
146 case MIME_TYPE_MULTIPART
:
147 fprintf(stderr
, "multipart\n");
149 case MIME_TYPE_UNKNOWN
:
151 fprintf(stderr
, "Unknown\n");
155 /* MIME Content-Disposition */
156 fprintf(stderr
, " Content-Disposition......: ");
157 switch (hdr
->disposition
) {
158 case MIME_DISPOSITION_INLINE
:
159 fprintf(stderr
, "inline\n");
161 case MIME_DISPOSITION_ATTACHMENT
:
162 fprintf(stderr
, "attachment\n");
164 case MIME_DISPOSITION_UNKNOWN
:
166 fprintf(stderr
, "Unknown\n");
170 /* MIME Content-Transfer-Encoding */
171 fprintf(stderr
, " Content-Transfer-Encoding: ");
172 switch (hdr
->transfer_encoding
) {
173 case MIME_ENCODING_7BIT
:
174 fprintf(stderr
, "7bit\n");
176 case MIME_ENCODING_QUOTED_PRINTABLE
:
177 fprintf(stderr
, "quoted-printable\n");
179 case MIME_ENCODING_BASE64
:
180 fprintf(stderr
, "base64\n");
182 case MIME_ENCODING_8BIT
:
183 fprintf(stderr
, "8bit\n");
185 case MIME_ENCODING_BINARY
:
186 fprintf(stderr
, "binary\n");
188 case MIME_ENCODING_UNKNOWN
:
190 fprintf(stderr
, "Unknown\n");