b928782482ebbdec43d45d99366deb26f57a2e65
[gpgol.git] / src / gpgmsg.hh
1 /* gpgmsg.hh - The GpgMsg class
2  *      Copyright (C) 2005 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 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
17  * License along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21 #ifndef GPGMSG_HH
22 #define GPGMSG_HH
23
24 #include <gpgme.h>
25
26 #include "intern.h"
27
28 /* To manage a message we use our own class to keep track about all
29    the information we known on the content of a message.  This is
30    useful to remember the state of conversion (sometimes we need to
31    copy between utf8 and the native character set) and to parse the
32    message down into the MIME structure. */
33
34 class GpgMsg
35 {
36 public:    
37   virtual void destroy () = 0;
38   void operator delete (void *p)
39     {
40       if (p)
41         {
42           GpgMsg *m = (GpgMsg*)(p);
43           m->destroy();
44         }
45     }
46
47   /* Set a new MAPI message into the object. */
48   virtual void setMapiMessage (LPMESSAGE msg) = 0;
49
50   /* Set the callback for Exchange. */
51   virtual void setExchangeCallback (void *cb) = 0;
52
53   /* Don't pop up any message boxes. */
54   virtual void setSilent (bool value) = 0;
55
56   /* Return the type of the message. */
57   virtual openpgp_t getMessageType (void) = 0;
58
59   /* Returns whether the message has any attachments. */
60   virtual bool hasAttachments (void) = 0;
61
62   /* Return the body text as received or composed.  This is guaranteed
63      to never return NULL.  Usually getMessageType is used to check
64      whether there is a suitable message. */
65   virtual const char *getOrigText (void) = 0;
66
67   /* Return the text of the message to be used for the display.  The
68      message objects has intrinsic knowledge about the correct
69      text.  */
70   virtual const char *getDisplayText (void) = 0;
71
72   /* Return a malloced array of malloced strings with the recipients
73      of the message. Caller is responsible for freeing this array and
74      the strings.  On failure NULL is returned.  */
75   virtual char **getRecipients (void) = 0;
76
77   /* Decrypt and verify the message and all attachments.  */
78   virtual int decrypt (HWND hwnd) = 0;
79
80   /* Sign the message and optionally the attachments. */
81   virtual int sign (HWND hwnd) = 0;
82
83   /* Encrypt the entire message including any attachments. Returns 0
84      on success. */
85   virtual int encrypt (HWND hwnd) = 0;
86
87   /* Encrypt and sign the entire message including any
88      attachments. Return 0 on success. */
89   virtual int signEncrypt (HWND hwnd) = 0;
90
91   /* Attach the key identified by KEYID to the message. */
92   virtual int attachPublicKey (const char *keyid) = 0;
93
94   /* Return the number of attachments. */
95   virtual unsigned int getAttachments (void) = 0;
96
97   /* Decrypt the attachment with the internal number POS.
98      SAVE_PLAINTEXT must be true to save the attachemnt; displaying a
99      attachemnt is not yet supported. */
100   virtual void decryptAttachment (HWND hwnd, int pos, bool save_plaintext,
101                                   int ttl, const char *filename) = 0;
102
103   virtual void signAttachment (HWND hwnd, int pos,
104                                gpgme_key_t sign_key, int ttl) = 0;
105
106   virtual int encryptAttachment (HWND hwnd, int pos, gpgme_key_t *keys,
107                                  gpgme_key_t sign_key, int ttl) = 0;
108
109 };
110
111
112 /* Create a new instance and initialize with the MAPI message object
113    MSG. */
114 GpgMsg *CreateGpgMsg (LPMESSAGE msg);
115
116 #endif /*GPGMSG_HH*/