...
1 // This file is under GNU General Public License 3.0
9 #include "identity_list.h"
11 #include "stringlist.h"
12 #include "stringpair.h"
13 #include "timestamp.h"
20 typedef enum _PEP_text_format {
21 PEP_text_format_plain = 0,
23 PEP_text_format_other = 0xff
26 typedef enum _PEP_msg_direction {
31 typedef enum _PEP_enc_format {
32 PEP_enc_none = 0, // message is not encrypted
33 PEP_enc_pieces = 1, // inline PGP + PGP extensions, was removed
34 PEP_enc_inline = 1, // still there
35 PEP_enc_S_MIME, // RFC5751
36 PEP_enc_PGP_MIME, // RFC3156
37 PEP_enc_PEP, // pEp encryption format
38 PEP_enc_PGP_MIME_Outlook1 // Message B0rken by Outlook type 1
41 struct _message_ref_list;
43 typedef struct _message {
44 PEP_msg_direction dir;
45 char *id; // UTF-8 string of message ID
46 char *shortmsg; // UTF-8 string of short message
47 char *longmsg; // UTF-8 string of long message
49 char *longmsg_formatted; // UTF-8 string of long message
51 bloblist_t *attachments; // blobs with attachements
52 char *rawmsg_ref; // reference to raw message data
53 size_t rawmsg_size; // size of raw message data
54 timestamp *sent; // when the message is sent
55 timestamp *recv; // when the message is received
56 pEp_identity *from; // whom the message is from
57 identity_list *to; // whom the message is to
58 pEp_identity *recv_by; // via which identity the message
60 identity_list *cc; // whom a CC is being sent
61 identity_list *bcc; // whom a BCC is being sent
62 identity_list *reply_to; // where a reply should go to
63 stringlist_t *in_reply_to; // list of UTF-8 strings with
64 // MessageIDs of refering messages
65 struct _message *refering_msg_ref; // reference to refering message
66 stringlist_t *references; // list of UTF-8 strings with references
67 struct _message_ref_list *refered_by; // list of references to messages being
69 stringlist_t *keywords; // list of UTF-8 strings with keywords
70 char *comments; // UTF-8 string with comments
71 stringpair_list_t *opt_fields; // optional fields
72 PEP_enc_format enc_format; // format of encrypted data
75 typedef struct _message_ref_list {
76 message *msg_ref; // reference to message
77 struct _message_ref_list *next;
81 // new_message() - allocate new message
84 // dir (in) PEP_dir_incoming or PEP_dir_outgoing
87 // pointer to new message or NULL if out of memory
89 DYNAMIC_API message *new_message(
94 // free_message() - free message struct
97 // msg (in) message struct to free
100 // raw data (msg->rawmsg_ref) and referenced other messages (msg->refering_msg_ref)
101 // aren't freed and remain in the ownership of the caller!
103 DYNAMIC_API void free_message(message *msg);
106 // message_dup - duplicate message (deep copy)
109 // msg (in) message to duplicate
112 // pointer to duplicate of message pointed by msg or NULL
114 // not owned pointees (msg->rawmsg_ref and msg->refering_msg_ref) are shared!
116 DYNAMIC_API message * message_dup(const message *msg);
118 // message_transfer - assign ownership of all fields of the src message to
119 // the dst message object passed in. Free respective memory
120 // in the dst message, and reinitialise and pointers in
121 // the src message to NULL so that it can be freed properly
124 // dst (inout) message to clobber and reassign values to
125 // src (inout) message whose values will be transfered to dst
127 // not owned pointees (msg->rawmsg_ref and msg->refering_msg_ref) are shared!
128 // these are simply transferred.
129 DYNAMIC_API void message_transfer(message* dst, message *src);
132 // new_message_ref_list() - allocate new message reference list
135 // msg (in) message to add a reference to or NULL
138 // pointer to new message_ref_list or NULL if out of memory
140 DYNAMIC_API message_ref_list *new_message_ref_list(message *msg);
143 // free_message_ref_list() - free message reference list
146 // msg_list (in) message_ref_list to free
148 DYNAMIC_API void free_message_ref_list(message_ref_list *msg_list);
151 // message_ref_list_dup() - duplicate message reference list
154 // src (in) message_ref_list to duplicate
157 // pointer to new message_ref_list or NULL if out of memory
159 DYNAMIC_API message_ref_list *message_ref_list_dup(
160 const message_ref_list *src
163 // message_ref_list_add() - add a reference to a message to a message reference
167 // msg_list (in) message_ref_list to add to
168 // msg (in) message to add a reference to
171 // pointer to the last element of message_ref_list or NULL if out of
174 DYNAMIC_API message_ref_list *message_ref_list_add(message_ref_list *msg_list,