aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test13.c
blob: 3e191eddf5c32fd36729d4da787a7395a352c7b2 (plain) (blame)
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
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* tests mime message file parsing */
#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 {
            stream = camel_data_wrapper_get_output_stream(containee);
            left = 0;

            if (stream) {
                while ( (len = camel_stream_read(stream, buffer+left, sizeof(buffer)-left, NULL)) > 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)
{
    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", O_RDONLY, 0, NULL);
    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_mime_part_construct_from_parser(CAMEL_MIME_PART (message),
                          parser);

    dump_message_content(CAMEL_DATA_WRAPPER (message));

    gtk_object_unref (GTK_OBJECT (input_stream));

    output_stream = camel_stream_fs_new_with_name ("mail2.test", O_WRONLY|O_CREAT|O_TRUNC, 0600, NULL);
    camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream, NULL);
    camel_stream_flush (output_stream, NULL);
    gtk_object_unref (GTK_OBJECT (output_stream));
    
    //gtk_object_unref (GTK_OBJECT (message));
    return 0;

}