Fix two encoding issues
[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.  Don't change this name as some tests rely on
34    it.  */
35 #define MIMEATTACHFILENAME "gpgolXXX.dat"
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    "gpgolPGP.dat"
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_gpgolsigstatus_tag (LPMESSAGE message, ULONG *r_tag);
45 int get_gpgolprotectiv_tag (LPMESSAGE message, ULONG *r_tag);
46 int get_gpgollastdecrypted_tag (LPMESSAGE message, ULONG *r_tag);
47 int get_gpgolmimeinfo_tag (LPMESSAGE message, ULONG *r_tag);
48 int get_gpgolmsgclass_tag (LPMESSAGE message, ULONG *r_tag);
49
50 int mapi_do_save_changes (LPMESSAGE message, ULONG flags, int only_del_body,
51                           const char *dbg_file, const char *dbg_func);
52 #define mapi_save_changes(a,b) \
53         mapi_do_save_changes ((a),(b), 0, __FILE__, __func__)
54 #define mapi_delete_body_props(a,b) \
55         mapi_do_save_changes ((a),(b), 1, __FILE__, __func__)
56
57
58 int mapi_set_header (LPMESSAGE msg, const char *name, const char *val);
59
60 int mapi_change_message_class (LPMESSAGE message, int sync_override,
61                                msgtype_t *r_type);
62 char *mapi_get_message_class (LPMESSAGE message);
63 char *mapi_get_old_message_class (LPMESSAGE message);
64 char *mapi_get_sender (LPMESSAGE message);
65 msgtype_t mapi_get_message_type (LPMESSAGE message);
66 int mapi_to_mime (LPMESSAGE message, const char *filename);
67
68 char *mapi_get_binary_prop (LPMESSAGE message,ULONG proptype,size_t *r_nbytes);
69 int  mapi_get_int_prop (LPMAPIPROP object, ULONG proptype, LONG *r_value);
70
71 char *mapi_get_from_address (LPMESSAGE message);
72 char *mapi_get_subject (LPMESSAGE message);
73
74 LPSTREAM mapi_get_body_as_stream (LPMESSAGE message);
75 char *mapi_get_body (LPMESSAGE message, size_t *r_nbytes);
76
77 mapi_attach_item_t *mapi_create_attach_table (LPMESSAGE message, int fast);
78 void mapi_release_attach_table (mapi_attach_item_t *table);
79 LPSTREAM mapi_get_attach_as_stream (LPMESSAGE message, 
80                                     mapi_attach_item_t *item, 
81                                     LPATTACH *r_attach);
82 char *mapi_get_attach (LPMESSAGE message,
83                        mapi_attach_item_t *item, size_t *r_nbytes);
84 int mapi_mark_moss_attach (LPMESSAGE message, mapi_attach_item_t *item);
85 int mapi_has_sig_status (LPMESSAGE msg);
86 int mapi_test_sig_status (LPMESSAGE msg);
87 char *mapi_get_sig_status (LPMESSAGE msg);
88
89 int mapi_set_sig_status (LPMESSAGE message, const char *status_string);
90
91 int mapi_set_gpgol_msg_class (LPMESSAGE message, const char *name);
92
93 char *mapi_get_gpgol_charset (LPMESSAGE obj);
94 int mapi_set_gpgol_charset (LPMESSAGE obj, const char *charset);
95
96 char *mapi_get_gpgol_draft_info (LPMESSAGE msg);
97 int   mapi_set_gpgol_draft_info (LPMESSAGE message, const char *string);
98
99
100 int  mapi_set_attach_hidden (LPATTACH attach);
101 int  mapi_test_attach_hidden (LPATTACH attach);
102
103 char *mapi_get_mime_info (LPMESSAGE msg);
104
105 char *mapi_get_message_content_type (LPMESSAGE message, 
106                                      char **r_protocol, char **r_smtype);
107
108 int   mapi_has_last_decrypted (LPMESSAGE message);
109
110 attachtype_t get_gpgolattachtype (LPATTACH obj, ULONG tag);
111
112 int get_gpgol_draft_info_flags (LPMESSAGE message);
113
114 int set_gpgol_draft_info_flags (LPMESSAGE message, int flags);
115
116 /* Mark crypto attachments as hidden. And mark the moss
117  attachment for later use. Returns the attachments position
118  (1 is the first attachment) or 0 in case no attachment was found. */
119 int mapi_mark_or_create_moss_attach (LPMESSAGE message, msgtype_t msgtype);
120
121 /* Copy the MAPI body to a PGPBODY type attachment. */
122 int mapi_body_to_attachment (LPMESSAGE message);
123
124 /* Get malloced uid of a message */
125 char * mapi_get_uid (LPMESSAGE message);
126 #ifdef __cplusplus
127 }
128 #include <string>
129 std::string mapi_get_header (LPMESSAGE message);
130 #endif
131 #endif /*MAPIHELP_H*/