Fix FSF address (Tobias Mueller, #470445)
[platform/upstream/evolution-data-server.git] / camel / camel-mime-message.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
2 /* camelMimeMessage.h : class for a mime message
3  *
4  * Authors: Bertrand Guiheneuf <bertrand@helixcode.com>
5  *          Michael Zucchi <notzed@ximian.com>
6  *
7  * Copyright 1999, 2000 Ximian, Inc. (www.ximian.com)
8  *
9  * This program is free software; you can redistribute it and/or 
10  * modify it under the terms of version 2 of the GNU Lesser General Public 
11  * License as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
21  * USA
22  */
23
24
25 #ifndef CAMEL_MIME_MESSAGE_H
26 #define CAMEL_MIME_MESSAGE_H 1
27
28 #include <camel/camel-mime-part.h>
29 #include <camel/camel-mime-utils.h>
30 #include <camel/camel-internet-address.h>
31 #include <camel/camel-mime-filter-bestenc.h>
32
33 #define CAMEL_RECIPIENT_TYPE_TO "To"
34 #define CAMEL_RECIPIENT_TYPE_CC "Cc"
35 #define CAMEL_RECIPIENT_TYPE_BCC "Bcc"
36
37 #define CAMEL_RECIPIENT_TYPE_RESENT_TO "Resent-To"
38 #define CAMEL_RECIPIENT_TYPE_RESENT_CC "Resent-Cc"
39 #define CAMEL_RECIPIENT_TYPE_RESENT_BCC "Resent-Bcc"
40
41 #define CAMEL_MIME_MESSAGE_TYPE     (camel_mime_message_get_type ())
42 #define CAMEL_MIME_MESSAGE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessage))
43 #define CAMEL_MIME_MESSAGE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessageClass))
44 #define CAMEL_IS_MIME_MESSAGE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MIME_MESSAGE_TYPE))
45
46 /* specify local time */
47 #define CAMEL_MESSAGE_DATE_CURRENT (~0)
48
49 G_BEGIN_DECLS
50
51 struct _CamelMimeMessage
52 {
53         CamelMimePart parent_object;
54
55         /* header fields */
56         time_t date;
57         int date_offset;        /* GMT offset */
58
59         /* cached internal copy */
60         time_t date_received;
61         int date_received_offset;       /* GMT offset */
62
63         char *subject;
64
65         char *message_id;
66
67         CamelInternetAddress *reply_to;
68         CamelInternetAddress *from;
69
70         GHashTable *recipients; /* hash table of CamelInternetAddress's */
71 };
72
73 typedef struct {
74         CamelMimePartClass parent_class;
75
76         /* Virtual methods */   
77
78 } CamelMimeMessageClass;
79
80
81
82 /* Standard Camel function */
83 CamelType                   camel_mime_message_get_type           (void);
84
85
86 /* public methods */
87 CamelMimeMessage           *camel_mime_message_new                (void);
88 void                        camel_mime_message_set_date           (CamelMimeMessage           *message,
89                                                                    time_t                      date,
90                                                                    int                         offset);
91 time_t                      camel_mime_message_get_date           (CamelMimeMessage           *message,
92                                                                    int                        *offset);
93 time_t                      camel_mime_message_get_date_received  (CamelMimeMessage           *message,
94                                                                    int                        *offset);
95 void                        camel_mime_message_set_message_id     (CamelMimeMessage           *message,
96                                                                    const char                 *message_id);
97 const char                 *camel_mime_message_get_message_id     (CamelMimeMessage           *message);
98 void                        camel_mime_message_set_reply_to       (CamelMimeMessage           *message,
99                                                                    const CamelInternetAddress *reply_to);
100 const CamelInternetAddress *camel_mime_message_get_reply_to       (CamelMimeMessage           *message);
101
102 void                        camel_mime_message_set_subject        (CamelMimeMessage           *message,
103                                                                    const char                 *subject);
104 const char                 *camel_mime_message_get_subject        (CamelMimeMessage           *message);
105 void                        camel_mime_message_set_from           (CamelMimeMessage           *message,
106                                                                    const CamelInternetAddress *from);
107 const CamelInternetAddress *camel_mime_message_get_from           (CamelMimeMessage           *message);
108
109 const CamelInternetAddress *camel_mime_message_get_recipients     (CamelMimeMessage           *message,
110                                                                    const char                 *type);
111 void                        camel_mime_message_set_recipients     (CamelMimeMessage           *message,
112                                                                    const char                 *type,
113                                                                    const CamelInternetAddress *recipients);
114
115 void                        camel_mime_message_set_source         (CamelMimeMessage           *message,
116                                                                    const char                 *identity);
117 const char                 *camel_mime_message_get_source         (CamelMimeMessage           *message);
118                                                                    
119
120 /* utility functions */
121 gboolean                    camel_mime_message_has_8bit_parts     (CamelMimeMessage           *message);
122 void                        camel_mime_message_set_best_encoding  (CamelMimeMessage           *message,
123                                                                    CamelBestencRequired        required,
124                                                                    CamelBestencEncoding        enctype);
125 void                        camel_mime_message_encode_8bit_parts  (CamelMimeMessage           *message);
126
127 CamelMimePart              *camel_mime_message_get_part_by_content_id (CamelMimeMessage *message, const char *content_id);
128
129 char                       *camel_mime_message_build_mbox_from    (CamelMimeMessage           *message);
130
131 void camel_mime_message_dump(CamelMimeMessage *msg, int body);
132
133 G_END_DECLS
134
135 #endif /* CAMEL_MIME_MESSAGE_H */