[git] GpgOL - branch, nomapi, updated. gpgol-1.4.0-128-g1d734d5

by Andre Heinecke cvs at cvs.gnupg.org
Fri Oct 28 16:47:26 CEST 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG extension for MS Outlook".

The branch, nomapi has been updated
       via  1d734d5938224e02236245223cf925a61563e2fc (commit)
       via  0431a7025858e1a52f681ae3f2d5e38c00dea26e (commit)
       via  a8a71cbbee57cb732f29fc85b88b0c304514b075 (commit)
       via  43352f377a9ca283428a709a1d6e4d39bee57911 (commit)
       via  2b1d0ffeb16a4ac4b8e63ed9bef2302e10dd850f (commit)
      from  5579c4b4f4edf53c00078d3ac671386ac65492c5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1d734d5938224e02236245223cf925a61563e2fc
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Oct 28 16:44:14 2016 +0200

    Follow Outlook preference in alt. text/html mails
    
    * src/gpgoladdin.cpp (check_html_preferred): New. Read Outlook's
    setting.
    (GpgolAddin::OnStartupComplete): Check html state
    * src/mail.cpp (Mail::decrypt_verify): Use plain placeholder
    if html disabled.
    (Mail::update_body): Use correct parts.
    * src/main.cpp (read_options): Don't read preferHTML.
    (write_options): Don't write preferHTML.
    * src/parsecontroller.cpp: Add plain text template.
    (format_error): Use it.
    (ParseController::parse): Use it.

diff --git a/src/gpgoladdin.cpp b/src/gpgoladdin.cpp
index ac3b216..a9623cd 100644
--- a/src/gpgoladdin.cpp
+++ b/src/gpgoladdin.cpp
@@ -317,6 +317,50 @@ GpgolAddin::OnAddInsUpdate (SAFEARRAY** custom)
   return S_OK;
 }
 
+static void
+check_html_preferred()
+{
+  /* Check if HTML Mail should be enabled. */
+  HKEY h;
+  std::string path = "Software\\Microsoft\\Office\\";
+  path += std::to_string (g_ol_version_major);
+  path += ".0\\Outlook\\Options\\Mail";
+  opt.prefer_html = 1;
+  int err = RegOpenKeyEx (HKEY_CURRENT_USER, path.c_str() , 0, KEY_READ, &h);
+  if (err != ERROR_SUCCESS)
+    {
+      log_debug ("%s:%s: no mail options under %s",
+                 SRCNAME, __func__, path.c_str());
+      return;
+    }
+  else
+    {
+      DWORD type;
+      err = RegQueryValueEx (h, "ReadAsPlain", NULL, &type, NULL, NULL);
+      if (err != ERROR_SUCCESS || type != REG_DWORD)
+        {
+          log_debug ("%s:%s: No type or key for ReadAsPlain",
+                     SRCNAME, __func__);
+          return;
+        }
+      else
+        {
+          DWORD data;
+          DWORD size = sizeof (DWORD);
+          err = RegQueryValueEx (h, "ReadAsPlain", NULL, NULL, (LPBYTE)&data,
+                                 &size);
+          if (err != ERROR_SUCCESS)
+            {
+              log_debug ("%s:%s: Failed to find out ReadAsPlain",
+                         SRCNAME, __func__);
+              return;
+            }
+          opt.prefer_html = data ? 0 : 1;
+          return;
+        }
+    }
+}
+
 STDMETHODIMP
 GpgolAddin::OnStartupComplete (SAFEARRAY** custom)
 {
@@ -343,6 +387,7 @@ GpgolAddin::OnStartupComplete (SAFEARRAY** custom)
   ensure_category_exists (m_application, verifyCategory, 5);
   install_forms ();
   m_applicationEventSink = install_ApplicationEvents_sink(m_application);
+  check_html_preferred ();
   return S_OK;
 }
 
diff --git a/src/mail.cpp b/src/mail.cpp
index 41490cc..c03cb3b 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -496,7 +496,8 @@ Mail::decrypt_verify()
   m_processed = true;
   /* Insert placeholder */
   char *placeholder_buf;
-  if (gpgrt_asprintf (&placeholder_buf, decrypt_template,
+  if (gpgrt_asprintf (&placeholder_buf, opt.prefer_html ? decrypt_template_html :
+                      decrypt_template,
                       is_smime() ? "S/MIME" : "OpenPGP",
                       _("Encrypted message"),
                       _("Please wait while the message is being decrypted / verified...")) == -1)
@@ -506,10 +507,21 @@ Mail::decrypt_verify()
       return 1;
     }
 
-  if (put_oom_string (m_mailitem, "HTMLBody", placeholder_buf))
+  if (opt.prefer_html)
     {
-      log_error ("%s:%s: Failed to modify html body of item.",
-                 SRCNAME, __func__);
+      if (put_oom_string (m_mailitem, "HTMLBody", placeholder_buf))
+        {
+          log_error ("%s:%s: Failed to modify html body of item.",
+                     SRCNAME, __func__);
+        }
+    }
+  else
+    {
+      if (put_oom_string (m_mailitem, "Body", placeholder_buf))
+        {
+          log_error ("%s:%s: Failed to modify body of item.",
+                     SRCNAME, __func__);
+        }
     }
   xfree (placeholder_buf);
 
@@ -545,16 +557,28 @@ Mail::update_body()
   const auto error = m_parser->get_formatted_error ();
   if (!error.empty())
     {
-      if (put_oom_string (m_mailitem, "HTMLBody",
-                          error.c_str ()))
+      if (opt.prefer_html)
         {
-          log_error ("%s:%s: Failed to modify html body of item.",
-                     SRCNAME, __func__);
+          if (put_oom_string (m_mailitem, "HTMLBody",
+                              error.c_str ()))
+            {
+              log_error ("%s:%s: Failed to modify html body of item.",
+                         SRCNAME, __func__);
+            }
+        }
+      else
+        {
+          if (put_oom_string (m_mailitem, "Body",
+                              error.c_str ()))
+            {
+              log_error ("%s:%s: Failed to modify html body of item.",
+                         SRCNAME, __func__);
+            }
         }
       return;
     }
   const auto html = m_parser->get_html_body();
-  if (!html.empty())
+  if (opt.prefer_html && !html.empty())
     {
       char *converted = ansi_charset_to_utf8 (m_parser->get_html_charset().c_str(),
                                               html.c_str(), html.size());
diff --git a/src/main.c b/src/main.c
index a580b11..ba379a2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -366,10 +366,6 @@ read_options (void)
   set_default_key (val);
   xfree (val); val = NULL;
 
-  load_extension_value ("preferHtml", &val);
-  opt.prefer_html = val == NULL || *val != '1'? 0 : 1;
-  xfree (val); val = NULL;
-
   load_extension_value ("gitCommit", &val);
   opt.git_commit = val? strtoul (val, NULL, 16) : 0;
   xfree (val); val = NULL;
@@ -468,7 +464,6 @@ write_options (void)
     {"logFile",                  2, 0, (char*) get_log_file ()},
     {"defaultKey",               2, 0, opt.default_key},
     {"enableDefaultKey",         0, opt.enable_default_key, NULL},
-    {"preferHtml",               0, opt.prefer_html, NULL},
     {"gitCommit",                4, opt.git_commit, NULL},
     {"formsRevision",            1, opt.forms_revision, NULL},
     {"announceNumber",           1, opt.announce_number, NULL},
diff --git a/src/parsecontroller.cpp b/src/parsecontroller.cpp
index 104c3d4..6c47595 100644
--- a/src/parsecontroller.cpp
+++ b/src/parsecontroller.cpp
@@ -41,7 +41,7 @@
 
 
 
-const char decrypt_template[] = {
+const char decrypt_template_html[] = {
 "<html><head></head><body>"
 "<table border=\"0\" width=\"100%%\" cellspacing=\"1\" cellpadding=\"1\" bgcolor=\"#0069cc\">"
 "<tr>"
@@ -54,6 +54,8 @@ const char decrypt_template[] = {
 "</td></tr>"
 "</table></body></html>"};
 
+const char decrypt_template[] = {"%s %s\n\n%s"};
+
 using namespace GpgME;
 
 static bool
@@ -171,7 +173,8 @@ format_error(GpgME::DecryptionResult result, Protocol protocol)
       msg = _("Could not decrypt the data.");
     }
 
-  if (gpgrt_asprintf (&buf, decrypt_template,
+  if (gpgrt_asprintf (&buf, opt.prefer_html ? decrypt_template_html :
+                      decrypt_template,
                       protocol == OpenPGP ? "OpenPGP" : "S/MIME",
                       _("Encrypted message (decryption not possible)"),
                       msg.c_str()) == -1)
@@ -210,7 +213,8 @@ ParseController::parse()
                  SRCNAME, __func__);
       char *buf;
       const char *proto = protocol == OpenPGP ? "OpenPGP" : "S/MIME";
-      if (gpgrt_asprintf (&buf, decrypt_template,
+      if (gpgrt_asprintf (&buf, opt.prefer_html ? decrypt_template_html :
+                          decrypt_template,
                           proto,
                           _("Encrypted message (decryption not possible)"),
                           _("Failed to find GnuPG please ensure that GnuPG or "
diff --git a/src/parsecontroller.h b/src/parsecontroller.h
index 1dd036b..19d622f 100644
--- a/src/parsecontroller.h
+++ b/src/parsecontroller.h
@@ -45,6 +45,7 @@ class MimeDataProvider;
 
 /* A template for decryption errors / status message. */
 extern const char decrypt_template[];
+extern const char decrypt_template_html[];
 
 class ParseController
 {

commit 0431a7025858e1a52f681ae3f2d5e38c00dea26e
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Oct 28 16:43:13 2016 +0200

    Don't confuse Outlook and GpgME Versions
    
    * src/gpgoladdin.cpp (GpgolAddin::OnStartupComplete): Print
    out proper version in debug output.

diff --git a/src/gpgoladdin.cpp b/src/gpgoladdin.cpp
index 6ea357f..ac3b216 100644
--- a/src/gpgoladdin.cpp
+++ b/src/gpgoladdin.cpp
@@ -245,8 +245,6 @@ GpgolAddin::OnConnection (LPDISPATCH Application, ext_ConnectMode ConnectMode,
 
   log_debug ("%s:%s: this is GpgOL %s\n",
              SRCNAME, __func__, PACKAGE_VERSION);
-  log_debug ("%s:%s:   in Outlook %s\n",
-             SRCNAME, __func__, gpgme_check_version (NULL));
 
   can_unload = false;
   m_application = Application;
@@ -256,6 +254,8 @@ GpgolAddin::OnConnection (LPDISPATCH Application, ext_ConnectMode ConnectMode,
   version = get_oom_string (Application, "Version");
 
   log_debug ("%s:%s:   using GPGME %s\n",
+             SRCNAME, __func__, gpgme_check_version (NULL));
+  log_debug ("%s:%s:   in Outlook %s\n",
              SRCNAME, __func__, version);
 
   g_ol_version_major = atoi (version);

commit a8a71cbbee57cb732f29fc85b88b0c304514b075
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Oct 28 15:38:14 2016 +0200

    Add int / string property accessor setters
    
    * src/oomhelp.cpp (put_pa_string, put_pa_int): New.
    (put_pa_variant): Generic version of put_pa_string.
    * src/oomhelp.h: Update accordingly.

diff --git a/src/oomhelp.cpp b/src/oomhelp.cpp
index e232f03..9591f97 100644
--- a/src/oomhelp.cpp
+++ b/src/oomhelp.cpp
@@ -812,7 +812,7 @@ get_oom_context_window (LPDISPATCH context)
 }
 
 int
-put_pa_string (LPDISPATCH pDisp, const char *dasl_id, const char *value)
+put_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *value)
 {
   LPDISPATCH propertyAccessor;
   VARIANT cVariant[2];
@@ -853,11 +853,13 @@ put_pa_string (LPDISPATCH pDisp, const char *dasl_id, const char *value)
   xfree (w_property);
 
   /* Variant 0 carries the data. */
-  wchar_t *w_value = utf8_to_wchar (value);
-  BSTR b_value = SysAllocString(w_value);
   VariantInit (&cVariant[0]);
-  cVariant[0].vt = VT_BSTR;
-  cVariant[0].bstrVal = b_value;
+  if (VariantCopy (&cVariant[0], value))
+    {
+      log_error ("%s:%s: Falied to copy value.",
+                 SRCNAME, __func__);
+      return -1;
+    }
 
   /* Variant 1 is the DASL as found out by experiments. */
   VariantInit (&cVariant[1]);
@@ -889,6 +891,32 @@ put_pa_string (LPDISPATCH pDisp, const char *dasl_id, const char *value)
   return 0;
 }
 
+int
+put_pa_string (LPDISPATCH pDisp, const char *dasl_id, const char *value)
+{
+  wchar_t *w_value = utf8_to_wchar (value);
+  BSTR b_value = SysAllocString(w_value);
+  VARIANT var;
+  VariantInit (&var);
+  var.vt = VT_BSTR;
+  var.bstrVal = b_value;
+  int ret = put_pa_variant (pDisp, dasl_id, &var);
+  VariantClear (&var);
+  return ret;
+}
+
+int
+put_pa_int (LPDISPATCH pDisp, const char *dasl_id, int value)
+{
+  VARIANT var;
+  VariantInit (&var);
+  var.vt = VT_INT;
+  var.intVal = value;
+  int ret = put_pa_variant (pDisp, dasl_id, &var);
+  VariantClear (&var);
+  return ret;
+}
+
 /* Get a MAPI property through OOM using the PropertyAccessor
  * interface and the DASL Uid. Returns -1 on error.
  * Variant has to be cleared with VariantClear.
diff --git a/src/oomhelp.h b/src/oomhelp.h
index e9ab03a..f04487b 100644
--- a/src/oomhelp.h
+++ b/src/oomhelp.h
@@ -187,6 +187,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);

commit 43352f377a9ca283428a709a1d6e4d39bee57911
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Oct 28 11:35:18 2016 +0200

    Pass Mail object to mimemaker
    
    --
    Changelog ommitet because of trivial changes.
    
    Passing the Mail object will allow us to modify / read our central
    Data structure in the old mimemaker code.

diff --git a/src/mail.cpp b/src/mail.cpp
index 0bc5899..41490cc 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -639,17 +639,17 @@ Mail::encrypt_sign ()
       log_debug ("%s:%s: Sign / Encrypting message",
                  SRCNAME, __func__);
       err = message_sign_encrypt (message, proto,
-                                  NULL, get_sender ());
+                                  NULL, get_sender (), this);
     }
   else if (flags == 2)
     {
       err = message_sign (message, proto,
-                          NULL, get_sender ());
+                          NULL, get_sender (), this);
     }
   else if (flags == 1)
     {
       err = message_encrypt (message, proto,
-                             NULL, get_sender ());
+                             NULL, get_sender (), this);
     }
   else
     {
diff --git a/src/message.cpp b/src/message.cpp
index d04e919..cd99913 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -1083,7 +1083,7 @@ release_recipient_array (char **recipients)
 
 static int
 sign_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd, int signflag,
-              const char *sender)
+              const char *sender, Mail* mail)
 {
   gpg_error_t err;
   char **recipients;
@@ -1100,10 +1100,10 @@ sign_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd, int signflag,
     {
       if (signflag)
         err = mime_sign_encrypt (message, hwnd, protocol, recipients,
-                                 sender);
+                                 sender, mail);
       else
         err = mime_encrypt (message, hwnd, protocol, recipients,
-                            sender);
+                            sender, mail);
       if (gpg_err_code (err) == GPG_ERR_NO_DATA)
         {
           MessageBox (hwnd, _("Encrypting or signing an empty message "
@@ -1127,11 +1127,11 @@ sign_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd, int signflag,
 /* Sign the MESSAGE.  */
 int 
 message_sign (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-              const char *sender)
+              const char *sender, Mail *mail)
 {
   gpg_error_t err;
 
-  err = mime_sign (message, hwnd, protocol, sender);
+  err = mime_sign (message, hwnd, protocol, sender, mail);
   if (gpg_err_code (err) == GPG_ERR_NO_DATA)
     {
       MessageBox (hwnd, _("Encrypting or signing an empty message "
@@ -1154,18 +1154,18 @@ message_sign (LPMESSAGE message, protocol_t protocol, HWND hwnd,
 /* Encrypt the MESSAGE.  */
 int 
 message_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-                 const char *sender)
+                 const char *sender, Mail *mail)
 {
-  return sign_encrypt (message, protocol, hwnd, 0, sender);
+  return sign_encrypt (message, protocol, hwnd, 0, sender, mail);
 }
 
 
 /* Sign+Encrypt the MESSAGE.  */
 int 
 message_sign_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-                      const char *sender)
+                      const char *sender, Mail *mail)
 {
-  return sign_encrypt (message, protocol, hwnd, 1, sender);
+  return sign_encrypt (message, protocol, hwnd, 1, sender, mail);
 }
 
 
diff --git a/src/message.h b/src/message.h
index cd743bb..5b5b616 100644
--- a/src/message.h
+++ b/src/message.h
@@ -23,6 +23,8 @@
 #include "myexchext.h"
 #include "mapihelp.h"
 
+class Mail;
+
 int message_incoming_handler (LPMESSAGE message, HWND hwnd, bool force);
 bool message_display_handler (LPMESSAGE message, LPDISPATCH inspector, 
                               HWND hwnd);
@@ -35,11 +37,11 @@ int message_verify (LPMESSAGE message, msgtype_t msgtype, int force,
 int message_decrypt (LPMESSAGE message, msgtype_t msgtype, int force, 
                      HWND hwnd);
 int message_sign (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-                  const char *sender = NULL);
+                  const char *sender = NULL, Mail *mail = NULL);
 int message_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-                     const char *sender = NULL);
+                     const char *sender = NULL, Mail *mail = NULL);
 int message_sign_encrypt (LPMESSAGE message, protocol_t protocol, HWND hwnd,
-                          const char *sender = NULL);
+                          const char *sender = NULL, Mail *mail = NULL);
 
 
 #endif /*MESSAGE_H*/
diff --git a/src/mimemaker.cpp b/src/mimemaker.cpp
index 56c9d9a..39a6a38 100644
--- a/src/mimemaker.cpp
+++ b/src/mimemaker.cpp
@@ -1469,7 +1469,7 @@ do_mime_sign (LPMESSAGE message, HWND hwnd, protocol_t protocol,
    it. */
 int
 mime_sign (LPMESSAGE message, HWND hwnd, protocol_t protocol,
-           const char *sender)
+           const char *sender, Mail *)
 {
   int result = -1;
   mapi_attach_item_t *att_table;
@@ -1660,7 +1660,7 @@ create_top_encryption_header (sink_t sink, protocol_t protocol, char *boundary)
 int
 mime_encrypt (LPMESSAGE message, HWND hwnd,
               protocol_t protocol, char **recipients,
-              const char *sender)
+              const char *sender, Mail*)
 {
   int result = -1;
   int rc;
@@ -1813,7 +1813,7 @@ mime_encrypt (LPMESSAGE message, HWND hwnd,
 int
 mime_sign_encrypt (LPMESSAGE message, HWND hwnd,
                    protocol_t protocol, char **recipients,
-                   const char *sender)
+                   const char *sender, Mail*)
 {
   int result = -1;
   int rc = 0;
diff --git a/src/mimemaker.h b/src/mimemaker.h
index f483120..ee2d83b 100644
--- a/src/mimemaker.h
+++ b/src/mimemaker.h
@@ -19,6 +19,8 @@
 
 #ifndef MIMEMAKER_H
 #define MIMEMAKER_H
+
+class Mail;
 #ifdef __cplusplus
 extern "C" {
 #if 0
@@ -45,13 +47,13 @@ struct sink_s
 };
 
 int mime_sign (LPMESSAGE message, HWND hwnd, protocol_t protocol,
-               const char *sender);
+               const char *sender, Mail* mail);
 int mime_encrypt (LPMESSAGE message, HWND hwnd,
                   protocol_t protocol, char **recipients,
-                  const char *sender);
+                  const char *sender, Mail* mail);
 int mime_sign_encrypt (LPMESSAGE message, HWND hwnd,
                        protocol_t protocol, char **recipients,
-                       const char *sender);
+                       const char *sender, Mail* mail);
 int sink_std_write (sink_t sink, const void *data, size_t datalen);
 int sink_file_write (sink_t sink, const void *data, size_t datalen);
 int sink_encryption_write (sink_t encsink, const void *data, size_t datalen);

commit 2b1d0ffeb16a4ac4b8e63ed9bef2302e10dd850f
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Fri Oct 28 11:23:54 2016 +0200

    Add some helper functions to Mail object
    
    * src/mail.cpp, src/mail.h (Mail::remove_attachments)
    (Mail::add_attachments, get_string, Mail::get_body)
    (Mail::get_html_body, Mail::get_recipients): New.
    
    --
    These helpers can be usefull even if we still use MAPI
    to encrypt.

diff --git a/src/mail.cpp b/src/mail.cpp
index a3c54e9..0bc5899 100644
--- a/src/mail.cpp
+++ b/src/mail.cpp
@@ -873,10 +873,45 @@ Mail::is_smime ()
   return m_is_smime;
 }
 
+static std::string
+get_string (LPDISPATCH item, const char *str)
+{
+  char *buf = get_oom_string (item, str);
+  if (!buf)
+    return std::string();
+  std::string ret = buf;
+  xfree (buf);
+  return ret;
+}
+
+std::string
+Mail::get_subject() const
+{
+  return get_string (m_mailitem, "Subject");
+}
+
+std::string
+Mail::get_body() const
+{
+  return get_string (m_mailitem, "Body");
+}
+
 std::string
-Mail::get_subject()
+Mail::get_html_body() const
+{
+  return get_string (m_mailitem, "HTMLBody");
+}
+
+char **
+Mail::get_recipients() const
 {
-  return std::string(get_oom_string (m_mailitem, "Subject"));
+  LPDISPATCH recipients = get_oom_object (m_mailitem, "Recipients");
+  if (!recipients)
+    {
+      TRACEPOINT;
+      return nullptr;
+    }
+  return get_oom_recipients (recipients);
 }
 
 int
diff --git a/src/mail.h b/src/mail.h
index 83c10ab..d150acc 100644
--- a/src/mail.h
+++ b/src/mail.h
@@ -163,7 +163,7 @@ public:
   /** @brief get the subject string (UTF-8 encoded).
     *
     * @returns the subject or an empty string. */
-  std::string get_subject ();
+  std::string get_subject () const;
 
   /** @brief Is this a crypto mail handled by gpgol.
   *
@@ -243,6 +243,17 @@ public:
   /** Remove all categories of this mail */
   void remove_categories ();
 
+  /** Get the body of the mail */
+  std::string get_body () const;
+
+  /** Get the html of the mail */
+  std::string get_html_body () const;
+
+  /** Get the recipients recipients is a null
+      terminated array of strings. Needs to be freed
+      by the caller. */
+  char ** get_recipients () const;
+
 private:
   void update_categories ();
   void update_body ();

-----------------------------------------------------------------------

Summary of changes:
 src/gpgoladdin.cpp      | 49 ++++++++++++++++++++++++++--
 src/mail.cpp            | 87 +++++++++++++++++++++++++++++++++++++++++--------
 src/mail.h              | 13 +++++++-
 src/main.c              |  5 ---
 src/message.cpp         | 18 +++++-----
 src/message.h           |  8 +++--
 src/mimemaker.cpp       |  6 ++--
 src/mimemaker.h         |  8 +++--
 src/oomhelp.cpp         | 38 ++++++++++++++++++---
 src/oomhelp.h           |  6 ++++
 src/parsecontroller.cpp | 10 ++++--
 src/parsecontroller.h   |  1 +
 12 files changed, 201 insertions(+), 48 deletions(-)


hooks/post-receive
-- 
GnuPG extension for MS Outlook
http://git.gnupg.org




More information about the Gnupg-commits mailing list