Add support for distribution lists (groups)
[gpgol.git] / src / oomhelp.h
index e296283..4430b0c 100644 (file)
@@ -1,7 +1,7 @@
 /* oomhelp.h - Defs for helper functions for the Outlook Object Model
- *     Copyright (C) 2009 g10 Code GmbH
- *     Copyright (C) 2015 by Bundesamt für Sicherheit in der Informationstechnik
- *    Software engineering by 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.
  * 
@@ -24,7 +24,9 @@
 
 #include <unknwn.h>
 #include "mymapi.h"
-#include "myexchext.h"
+
+#include <vector>
+#include <string>
 
 #define MSOCONTROLBUTTON    1
 #define MSOCONTROLEDIT      2
@@ -63,6 +65,8 @@ 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,
@@ -85,11 +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 \
@@ -108,12 +127,16 @@ DEFINE_OLEGUID(IID_IOleWindow,                0x00000114, 0, 0);
   "http://schemas.microsoft.com/mapi/proptag/0x370E001F"
 #define PR_ATTACH_CONTENT_ID_DASL \
   "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
-#ifdef __cplusplus
-extern "C" {
-#if 0
-}
-#endif
-#endif
+#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);
@@ -136,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);
 
@@ -161,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
@@ -315,7 +343,30 @@ get_unique_id (LPDISPATCH mail, int create, const char* uuid);
    through FindWindow and the caption. Does not use IOleWindow
    because that was unreliable somhow. */
 HWND get_active_hwnd (void);
-#ifdef __cplusplus
-}
-#endif
+
+/* 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*/