Add support for distribution lists (groups)
[gpgol.git] / src / oomhelp.h
index e9ab03a..4430b0c 100644 (file)
@@ -1,6 +1,7 @@
 /* oomhelp.h - Defs for helper functions for the Outlook Object Model
- *     Copyright (C) 2009 g10 Code GmbH
- *     Copyright (C) 2015 Intevation GmbH
+ * Copyright (C) 2009 g10 Code GmbH
+ * Copyright (C) 2015 by Bundesamt für Sicherheit in der Informationstechnik
+ * Software engineering by Intevation GmbH
  *
  * This file is part of GpgOL.
  * 
@@ -23,7 +24,9 @@
 
 #include <unknwn.h>
 #include "mymapi.h"
-#include "myexchext.h"
+
+#include <vector>
+#include <string>
 
 #define MSOCONTROLBUTTON    1
 #define MSOCONTROLEDIT      2
@@ -62,8 +65,14 @@ DEFINE_GUID(IID_IConnectionPointContainer,
 DEFINE_GUID(IID_IPictureDisp,
             0x7bf80981, 0xbf32, 0x101a,
             0x8b, 0xbb, 0x00, 0xaa, 0x00, 0x30, 0x0c, 0xab);
+DEFINE_GUID(IID_FolderEvents, 0x000630F7, 0x0000, 0x0000,
+            0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
 DEFINE_GUID(IID_ApplicationEvents, 0x0006304E, 0x0000, 0x0000,
             0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+DEFINE_GUID(IID_ExplorerEvents, 0x0006300F, 0x0000, 0x0000,
+            0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+DEFINE_GUID(IID_ExplorersEvents, 0x00063078, 0x0000, 0x0000,
+            0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
 DEFINE_GUID(IID_MailItemEvents, 0x0006302B, 0x0000, 0x0000,
             0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
 DEFINE_GUID(IID_MailItem, 0x00063034, 0x0000, 0x0000,
@@ -80,6 +89,26 @@ DEFINE_OLEGUID(IID_IOleWindow,                0x00000114, 0, 0);
   "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
 #endif
 
+#ifndef PR_EMS_AB_PROXY_ADDRESSES_DASL
+#define PR_EMS_AB_PROXY_ADDRESSES_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x800F101E"
+#endif
+
+#ifndef PR_ATTACHMENT_HIDDEN_DASL
+#define PR_ATTACHMENT_HIDDEN_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"
+#endif
+
+#ifndef PR_ADDRTYPE_DASL
+#define PR_ADDRTYPE_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x3002001E"
+#endif
+
+#ifndef PR_EMAIL_ADDRESS_DASL
+#define PR_EMAIL_ADDRESS_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x3003001E"
+#endif
+
 #define PR_MESSAGE_CLASS_W_DASL \
   "http://schemas.microsoft.com/mapi/proptag/0x001A001F"
 #define GPGOL_ATTACHTYPE_DASL \
@@ -96,12 +125,18 @@ DEFINE_OLEGUID(IID_IOleWindow,                0x00000114, 0, 0);
   "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"
 #define PR_ATTACH_MIME_TAG_DASL \
   "http://schemas.microsoft.com/mapi/proptag/0x370E001F"
-#ifdef __cplusplus
-extern "C" {
-#if 0
-}
-#endif
-#endif
+#define PR_ATTACH_CONTENT_ID_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
+#define PR_TAG_SENDER_SMTP_ADDRESS \
+  "http://schemas.microsoft.com/mapi/proptag/0x5D01001F"
+#define PR_TAG_RECEIVED_REPRESENTING_SMTP_ADDRESS \
+  "http://schemas.microsoft.com/mapi/proptag/0x5D08001F"
+#define PR_PIDNameContentType_DASL \
+  "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/content-type/0x0000001F"
+#define PR_BLOCK_STATUS_DASL \
+  "http://schemas.microsoft.com/mapi/proptag/0x10960003"
+
+#define DISTRIBUTION_LIST_ADDRESS_ENTRY_TYPE 11
 
 /* Return the malloced name of an COM+ object.  */
 char *get_object_name (LPUNKNOWN obj);
@@ -124,6 +159,9 @@ int put_oom_int (LPDISPATCH pDisp, const char *name, int value);
 /* Set the property NAME to STRING.  */
 int put_oom_string (LPDISPATCH pDisp, const char *name, const char *string);
 
+/* Set the property NAME to DISP.  */
+int put_oom_disp (LPDISPATCH pDisp, const char *name, LPDISPATCH value);
+
 /* Get the boolean property NAME of the object PDISP.  */
 int get_oom_bool (LPDISPATCH pDisp, const char *name);
 
@@ -149,8 +187,10 @@ void del_oom_button (LPDISPATCH button);
 /* Get the HWND of the active window in the current context */
 HWND get_oom_context_window (LPDISPATCH context);
 
-/* Get the address of the recipients as string list */
-char ** get_oom_recipients (LPDISPATCH recipients);
+/* Get the address of the recipients as string list.
+   If r_err is not null it is set to true in case of an error. */
+std::vector<std::string> get_oom_recipients (LPDISPATCH recipients,
+                                             bool *r_err = nullptr);
 
 /* Add an attachment to a dispatcher */
 int
@@ -187,6 +227,12 @@ get_pa_int (LPDISPATCH pDisp, const char *property, int *rInt);
 int
 put_pa_string (LPDISPATCH pDisp, const char *dasl_id, const char *value);
 
+int
+put_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *value);
+
+int
+put_pa_int (LPDISPATCH pDisp, const char *dasl_id, int value);
+
 /* Look up a variant with the propertyAccessor interface */
 int
 get_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *rVariant);
@@ -284,12 +330,43 @@ remove_category (LPDISPATCH mail, const char *category);
    a new uuid will be added if none exists and the
    value of that uuid returned.
 
+   The optinal uuid value can be set to be used
+   as uuid instead of a generated one.
+
    Return value has to be freed by the caller.
    */
 char *
-get_unique_id (LPDISPATCH mail, int create);
+get_unique_id (LPDISPATCH mail, int create, const char* uuid);
 
-#ifdef __cplusplus
-}
-#endif
+
+/* Uses the Application->ActiveWindow to determine the hwnd
+   through FindWindow and the caption. Does not use IOleWindow
+   because that was unreliable somhow. */
+HWND get_active_hwnd (void);
+
+/* Create a new mailitem and return it */
+LPDISPATCH create_mail (void);
+
+LPDISPATCH get_account_for_mail (const char *mbox);
+
+/* Print all active addins to log */
+void log_addins (void);
+
+/* Sender fallbacks. All return either null or a malloced address. */
+char *get_sender_CurrentUser (LPDISPATCH mailitem);
+char *get_sender_Sender (LPDISPATCH mailitem);
+char *get_sender_SenderEMailAddress (LPDISPATCH mailitem);
+
+/* Get the body of the active inline response */
+char *get_inline_body (void);
+
+/* Get the major version of the exchange server of the account for the
+   mail address "mbox". Returns -1 if no version could be detected
+   or exchange is not used.*/
+int get_ex_major_version_for_addr (const char *mbox);
+
+/* Get the language code used for Outlooks UI */
+int get_ol_ui_language (void);
+
+char *get_sender_SendUsingAccount (LPDISPATCH mailitem, bool *r_is_GSuite);
 #endif /*OOMHELP_H*/