3 #include "silcincludes.h"
6 int main(int argc, char **argv)
8 SilcBool success = FALSE;
9 SilcMime mime, part, part2;
10 SilcMimeAssembler ass;
19 if (argc > 1 && !strcmp(argv[1], "-d")) {
21 silc_log_debug_hexdump(TRUE);
22 silc_log_set_debug_string("*mime*");
25 /* Simple MIME test */
26 SILC_LOG_DEBUG(("Allocating MIME message context"));
27 mime = silc_mime_alloc();
30 SILC_LOG_DEBUG(("Adding MIME fields"));
31 SILC_LOG_DEBUG(("Adding MIME-Version: 1.0"));
32 silc_mime_add_field(mime, "MIME-Version", "1.0");
33 SILC_LOG_DEBUG(("Adding Content-Type: foo/bar"));
34 silc_mime_add_field(mime, "Content-Type", "foo/bar");
35 SILC_LOG_DEBUG(("Adding Content-Transfer-Encoding: binary"));
36 silc_mime_add_field(mime, "Content-Transfer-Encoding", "binary");
37 SILC_LOG_DEBUG(("Adding FOO: BaR"));
38 silc_mime_add_field(mime, "FOO", "BaR");
39 SILC_LOG_DEBUG(("Adding MIME data, 100 A's + 1 B"));
40 for (i = 0; i < 100; i++)
43 silc_mime_add_data(mime, tmp, 101);
44 SILC_LOG_DEBUG(("Encoding MIME context"));
45 enc = silc_mime_encode(mime, &enc_len);
48 SILC_LOG_DEBUG(("Encoded MIME message: \n%s", enc));
50 SILC_LOG_DEBUG(("Decoding MIME message"));
51 mime = silc_mime_decode(enc, enc_len);
54 SILC_LOG_DEBUG(("Re-encoding MIME context"));
56 enc = silc_mime_encode(mime, &enc_len);
59 SILC_LOG_DEBUG(("Re-encoded MIME message: \n%s", enc));
63 /* Multipart test, with nesting */
64 SILC_LOG_DEBUG(("Allocating MIME message context"));
65 mime = silc_mime_alloc();
68 SILC_LOG_DEBUG(("Adding MIME-Version: 1.0"));
69 silc_mime_add_field(mime, "MIME-Version", "1.0");
70 SILC_LOG_DEBUG(("Adding Content-Transfer-Encoding: binary"));
71 silc_mime_add_field(mime, "Content-Transfer-Encoding", "binary");
72 SILC_LOG_DEBUG(("Marking as multipart MIME message"));
73 silc_mime_set_multipart(mime, "mixed", "boundary");
74 SILC_LOG_DEBUG(("Adding FOO: BaR"));
75 silc_mime_add_field(mime, "FOO", "BaR");
76 SILC_LOG_DEBUG(("Allocating part"));
77 part = silc_mime_alloc();
80 SILC_LOG_DEBUG(("Adding MIME fields"));
81 SILC_LOG_DEBUG(("Adding Content-Type: foo/bar"));
82 silc_mime_add_field(part, "Content-Type", "foo/bar");
83 SILC_LOG_DEBUG(("Adding MIME data, 100 A's + 1 B"));
84 for (i = 0; i < 100; i++)
87 silc_mime_add_data(part, tmp, 101);
88 SILC_LOG_DEBUG(("Adding part to MIME message"));
89 if (!silc_mime_add_multipart(mime, part))
91 SILC_LOG_DEBUG(("Allocating part"));
92 part = silc_mime_alloc();
95 SILC_LOG_DEBUG(("Adding Content-Type: image/foobar"));
96 silc_mime_add_field(part, "Content-Type", "image/foobar");
97 SILC_LOG_DEBUG(("Adding MIME data, 50 A's + 1 B"));
98 for (i = 0; i < 50; i++)
101 silc_mime_add_data(part, tmp, 51);
102 SILC_LOG_DEBUG(("Adding part to MIME message"));
103 if (!silc_mime_add_multipart(mime, part))
105 SILC_LOG_DEBUG(("Allocating part"));
106 part = silc_mime_alloc();
109 SILC_LOG_DEBUG(("Adding MIME data, 10 A's + 1 B"));
110 for (i = 0; i < 10; i++)
113 silc_mime_add_data(part, tmp, 11);
114 SILC_LOG_DEBUG(("Adding part to MIME message"));
115 if (!silc_mime_add_multipart(mime, part))
117 SILC_LOG_DEBUG(("Allocating part"));
118 part = silc_mime_alloc();
121 SILC_LOG_DEBUG(("Adding part to MIME message"));
122 if (!silc_mime_add_multipart(mime, part))
124 silc_mime_set_multipart(part, "mixed", "booooooooundary");
125 SILC_LOG_DEBUG(("Allocating part for nested multipart"));
126 part2 = silc_mime_alloc();
129 SILC_LOG_DEBUG(("Adding Content-Type: foo/nested"));
130 silc_mime_add_field(part2, "Content-Type", "foo/nested");
131 SILC_LOG_DEBUG(("Adding MIME data, 150 A's + 1 B"));
132 for (i = 0; i < 150; i++)
135 silc_mime_add_data(part2, tmp, 151);
136 SILC_LOG_DEBUG(("Adding part to another part message"));
137 if (!silc_mime_add_multipart(part, part2))
139 SILC_LOG_DEBUG(("Encoding MIME context"));
140 enc = silc_mime_encode(mime, &enc_len);
143 SILC_LOG_DEBUG(("Encoded MIME message: \n%s", enc));
144 silc_mime_free(mime);
145 SILC_LOG_DEBUG(("Decoding MIME message"));
146 mime = silc_mime_decode(enc, enc_len);
149 SILC_LOG_DEBUG(("Re-encoding MIME context"));
151 enc = silc_mime_encode(mime, &enc_len);
154 SILC_LOG_DEBUG(("Re-encoded MIME message: \n%s", enc));
156 SILC_LOG_DEBUG(("Get multiparts"));
157 frag = silc_mime_get_multiparts(mime, &mtype);
160 SILC_LOG_DEBUG(("Multipart type '%s'", mtype));
161 silc_dlist_start(frag);
162 while ((part = silc_dlist_get(frag)) != SILC_LIST_END) {
163 SILC_LOG_DEBUG(("Encoding MIME part"));
164 enc = silc_mime_encode(part, &enc_len);
167 if (silc_mime_is_multipart(part))
168 SILC_LOG_DEBUG(("Is multipart"));
169 SILC_LOG_DEBUG(("Encoded MIME part: \n%s", enc));
172 silc_mime_free(mime);
174 /* Fragmentation test */
175 SILC_LOG_DEBUG(("Allocating MIME assembler"));
176 ass = silc_mime_assembler_alloc();
179 SILC_LOG_DEBUG(("Allocating MIME message context"));
180 mime = silc_mime_alloc();
183 SILC_LOG_DEBUG(("Adding MIME fields"));
184 SILC_LOG_DEBUG(("Adding MIME-Version: 1.0"));
185 silc_mime_add_field(mime, "MIME-Version", "1.0");
186 SILC_LOG_DEBUG(("Adding Content-Type: foo/bar"));
187 silc_mime_add_field(mime, "Content-Type", "foo/bar");
188 SILC_LOG_DEBUG(("Adding Content-Transfer-Encoding: binary"));
189 silc_mime_add_field(mime, "Content-Transfer-Encoding", "binary");
190 SILC_LOG_DEBUG(("Adding FOO: BaR"));
191 silc_mime_add_field(mime, "FOO", "BaR");
192 SILC_LOG_DEBUG(("Adding MIME data, 300 A's + 1 B"));
193 for (i = 0; i < 300; i++)
196 silc_mime_add_data(mime, tmp, 301);
197 SILC_LOG_DEBUG(("Encoding MIME context"));
198 enc = silc_mime_encode(mime, &enc_len);
201 SILC_LOG_DEBUG(("Encoded MIME message: \n%s", enc));
203 SILC_LOG_DEBUG(("Fragment MIME message in 100 byte chunks"));
204 frag = silc_mime_encode_partial(mime, 100);
207 silc_dlist_start(frag);
208 while ((buf = silc_dlist_get(frag)) != SILC_LIST_END)
209 SILC_LOG_DEBUG(("Fragment \n%s", buf->data, silc_buffer_len(buf)));
210 SILC_LOG_DEBUG(("Defragment"));
211 silc_dlist_start(frag);
212 while ((buf = silc_dlist_get(frag)) != SILC_LIST_END) {
213 part = silc_mime_decode(buf->data, silc_buffer_len(buf));
214 if (!silc_mime_is_partial(part))
216 part = silc_mime_assemble(ass, part);
218 SILC_LOG_DEBUG(("Defragmentation completed"));
219 SILC_LOG_DEBUG(("Encoding MIME context"));
220 enc = silc_mime_encode(mime, &enc_len);
222 SILC_LOG_DEBUG(("Error encoding"));
223 SILC_LOG_DEBUG(("Encoded MIME message: \n%s", enc));
227 silc_mime_partial_free(frag);
228 silc_mime_assembler_free(ass);
233 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
234 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");