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
122
123
124
125
126
127
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* tests mime message file parsing */
#include "gmime-utils.h"
#include "stdio.h"
#include "camel-mime-message.h"
#include "camel-mime-part.h"
#include "camel-stream.h"
#include "camel-stream-fs.h"
#include "camel.h"
static void
dump_message_content(CamelDataWrapper *object)
{
CamelDataWrapper *containee;
CamelStream *stream;
int parts, i;
int len;
int left;
char buffer[128];
printf("Dumping message ...");
containee = camel_medium_get_content_object(CAMEL_MEDIUM(object));
if (containee) {
char *type = gmime_content_field_get_mime_type(containee->mime_type);
printf("type = %s\n", type);
if (CAMEL_IS_MULTIPART(containee)) {
parts = camel_multipart_get_number (CAMEL_MULTIPART(containee));
printf("multipart message, scanning contents %d parts ...\n", parts);
for (i=0;i<parts;i++) {
dump_message_content(CAMEL_DATA_WRAPPER (camel_multipart_get_part(CAMEL_MULTIPART(containee), i)));
}
} else if (CAMEL_IS_MIME_MESSAGE(containee)) {
dump_message_content((CamelDataWrapper *)containee);
} else {
int total=0;
stream = camel_data_wrapper_get_output_stream(containee);
left = 0;
if (stream) {
while ( (len = camel_stream_read(stream, buffer+left, sizeof(buffer)-left)) > 0) {
fwrite(buffer, len, 1, stdout);
}
printf("\n");
} else {
g_warning("cannot get stream for message?");
}
}
g_free(type);
} else {
printf("no containee?\n");
}
}
int
main (int argc, char**argv)
{
GHashTable *header_table;
CamelMimeMessage *message;
CamelStream *input_stream, *output_stream;
CamelMimeParser *parser;
gtk_init (&argc, &argv);
camel_init ();
/* should have another program to test all this internationalisation/header parsing stuff */
#if 0
{
char *s, *o;
s = "This is a test, simple ascii text";
o = header_encode_string(s);
printf("%s -> %s\n", s, o);
s = "To: Markus \"DÅhr\" <doehrm@aubi.de>";
o = header_encode_string(s);
printf("%s -> %s\n", s, o);
s = "From: =?iso-8859-1?Q?Kenneth_ll=E9phaane_Christiansen?= <kenneth@ripen.dk>";
o = header_encode_string(s);
printf("%s -> %s\n", s, o);
printf("decoding ... \n");
s = "From: =?iso-8859-1?Q?Kenneth_ll=E9phaane_Christiansen?= <kenneth@ripen.dk>";
o = header_decode_string(s);
printf("%s -> %s\n", s, o);
printf("reencoded\n");
s = header_encode_string(o);
printf("%s -> %s\n", o, s);
return 0;
}
#endif
message = camel_mime_message_new ();
input_stream = camel_stream_fs_new_with_name ("mail.test", CAMEL_STREAM_FS_READ);
if (!input_stream) {
perror ("could not open input file\n");
printf ("You must create the file mail.test before running this test\n");
exit(2);
}
printf("creating parser to create message\n");
parser = camel_mime_parser_new();
camel_mime_parser_init_with_stream(parser, input_stream);
camel_data_wrapper_construct_from_parser(message, parser);
dump_message_content(message);
camel_stream_close (input_stream);
gtk_object_unref (GTK_OBJECT (input_stream));
output_stream = camel_stream_fs_new_with_name ("mail2.test", CAMEL_STREAM_FS_WRITE);
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream);
camel_stream_close (output_stream);
gtk_object_unref (GTK_OBJECT (output_stream));
//gtk_object_unref (GTK_OBJECT (message));
return 0;
}
|