Add minimalistic protected-headers support
[gpgol.git] / src / mapihelp.h
1 /* mapihelp.h - Helper functions for MAPI
2  * Copyright (C) 2005, 2007, 2008 g10 Code GmbH
3  *
4  * This file is part of GpgOL.
5  * 
6  * GpgOL is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  * 
11  * GpgOL is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  * 
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef MAPIHELP_H
21 #define MAPIHELP_H
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include <oomhelp.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 /* The filename of the attachment we create as the result of sign or
33    encrypt operations. */
34 #define MIMEATTACHFILENAME "GpgOL_MIME_structure.txt"
35
36 /* The name of the file we use to store the original body of PGP
37    encrypted messages.  Note that PGP/MIME message don't need that
38    because Outlook carries them as 2 attachments.  */
39 #define PGPBODYFILENAME    "GpgOL_original_OpenPGP_message.txt"
40
41 void log_mapi_property (LPMESSAGE message, ULONG prop, const char *propname);
42 int get_gpgololdmsgclass_tag (LPMESSAGE message, ULONG *r_tag);
43 int get_gpgolattachtype_tag (LPMESSAGE message, ULONG *r_tag);
44 int get_gpgolprotectiv_tag (LPMESSAGE message, ULONG *r_tag);
45 int get_gpgollastdecrypted_tag (LPMESSAGE message, ULONG *r_tag);
46 int get_gpgolmimeinfo_tag (LPMESSAGE message, ULONG *r_tag);
47 int get_gpgolmsgclass_tag (LPMESSAGE message, ULONG *r_tag);
48
49 int mapi_do_save_changes (LPMESSAGE message, ULONG flags, int only_del_body,
50                           const char *dbg_file, const char *dbg_func);
51 #define mapi_save_changes(a,b) \
52         mapi_do_save_changes ((a),(b), 0, __FILE__, __func__)
53 #define mapi_delete_body_props(a,b) \
54         mapi_do_save_changes ((a),(b), 1, __FILE__, __func__)
55
56
57 int mapi_set_header (LPMESSAGE msg, const char *name, const char *val);
58
59 int mapi_change_message_class (LPMESSAGE message, int sync_override,
60                                msgtype_t *r_type);
61 char *mapi_get_message_class (LPMESSAGE message);
62 char *mapi_get_old_message_class (LPMESSAGE message);
63 char *mapi_get_sender (LPMESSAGE message);
64 msgtype_t mapi_get_message_type (LPMESSAGE message);
65 int mapi_to_mime (LPMESSAGE message, const char *filename);
66
67 char *mapi_get_binary_prop (LPMESSAGE message,ULONG proptype,size_t *r_nbytes);
68 int  mapi_get_int_prop (LPMAPIPROP object, ULONG proptype, LONG *r_value);
69
70 char *mapi_get_from_address (LPMESSAGE message);
71 char *mapi_get_subject (LPMESSAGE message);
72
73 LPSTREAM mapi_get_body_as_stream (LPMESSAGE message);
74 char *mapi_get_body (LPMESSAGE message, size_t *r_nbytes);
75
76 mapi_attach_item_t *mapi_create_attach_table (LPMESSAGE message, int fast);
77 void mapi_release_attach_table (mapi_attach_item_t *table);
78 LPSTREAM mapi_get_attach_as_stream (LPMESSAGE message, 
79                                     mapi_attach_item_t *item, 
80                                     LPATTACH *r_attach);
81 char *mapi_get_attach (LPMESSAGE message,
82                        mapi_attach_item_t *item, size_t *r_nbytes);
83 int mapi_mark_moss_attach (LPMESSAGE message, mapi_attach_item_t *item);
84
85 int mapi_set_gpgol_msg_class (LPMESSAGE message, const char *name);
86
87 char *mapi_get_gpgol_charset (LPMESSAGE obj);
88 int mapi_set_gpgol_charset (LPMESSAGE obj, const char *charset);
89
90 char *mapi_get_gpgol_draft_info (LPMESSAGE msg);
91 int   mapi_set_gpgol_draft_info (LPMESSAGE message, const char *string);
92
93
94 int  mapi_set_attach_hidden (LPATTACH attach);
95 int  mapi_test_attach_hidden (LPATTACH attach);
96
97 char *mapi_get_mime_info (LPMESSAGE msg);
98
99 char *mapi_get_message_content_type (LPMESSAGE message, 
100                                      char **r_protocol, char **r_smtype);
101
102 int   mapi_has_last_decrypted (LPMESSAGE message);
103
104 attachtype_t get_gpgolattachtype (LPATTACH obj, ULONG tag);
105
106 int get_gpgol_draft_info_flags (LPMESSAGE message);
107
108 int set_gpgol_draft_info_flags (LPMESSAGE message, int flags);
109
110 /* Mark crypto attachments as hidden. And mark the moss
111  attachment for later use. Returns the attachments position
112  (1 is the first attachment) or 0 in case no attachment was found. */
113 int mapi_mark_or_create_moss_attach (LPMESSAGE message, msgtype_t msgtype);
114
115 /* Copy the MAPI body to a PGPBODY type attachment. */
116 int mapi_body_to_attachment (LPMESSAGE message);
117
118 /* Get malloced uid of a message */
119 char * mapi_get_uid (LPMESSAGE message);
120
121 #ifdef __cplusplus
122 }
123 #include <string>
124
125 /* Parse the headers for additional useful fields.
126
127   r_autocrypt_info: Information about the autocrypt header.
128
129   A return value of false indicates an error. Check the
130   individual info fields "exists" values to check if
131   the header exists in the message */
132 bool mapi_get_header_info (LPMESSAGE message,
133                            autocrypt_s &r_autocrypt_info);
134 std::string mapi_get_header (LPMESSAGE message);
135 #endif
136 #endif /*MAPIHELP_H*/