2005-02-15 [christoph] 1.0.1cvs9
authorChristoph Hohmann <reboot@gmx.ch>
Tue, 15 Feb 2005 16:47:56 +0000 (16:47 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Tue, 15 Feb 2005 16:47:56 +0000 (16:47 +0000)
* configure.ac
* src/Makefile.am
* src/privacy.c ** REMOVE **
* src/privacy.cpp ** NEW **
* src/privacy.h
* src/plugins/pgpmime/Makefile.am
* src/plugins/pgpmime/passphrase.h
* src/plugins/pgpmime/pgpmime.c ** REMOVE **
* src/plugins/pgpmime/pgpmime.cpp ** NEW **
* src/plugins/pgpmime/pgpmime.h
* src/plugins/pgpmime/prefs_gpg.h
* src/plugins/pgpmime/select-keys.h
* src/plugins/pgpmime/sgpgme.h
change Privacy-API to C++

13 files changed:
ChangeLog.claws
PATCHSETS
configure.ac
src/Makefile.am
src/plugins/pgpmime/Makefile.am
src/plugins/pgpmime/passphrase.h
src/plugins/pgpmime/pgpmime.cpp [moved from src/plugins/pgpmime/pgpmime.c with 89% similarity]
src/plugins/pgpmime/pgpmime.h
src/plugins/pgpmime/prefs_gpg.h
src/plugins/pgpmime/select-keys.h
src/plugins/pgpmime/sgpgme.h
src/privacy.cpp [moved from src/privacy.c with 76% similarity]
src/privacy.h

index 26717fa..74cdd28 100644 (file)
@@ -1,3 +1,20 @@
+2005-02-15 [christoph] 1.0.1cvs9
+
+       * configure.ac
+       * src/Makefile.am
+       * src/privacy.c                                 ** REMOVE **
+       * src/privacy.cpp                               ** NEW **
+       * src/privacy.h
+       * src/plugins/pgpmime/Makefile.am
+       * src/plugins/pgpmime/passphrase.h
+       * src/plugins/pgpmime/pgpmime.c                 ** REMOVE **
+       * src/plugins/pgpmime/pgpmime.cpp               ** NEW **
+       * src/plugins/pgpmime/pgpmime.h
+       * src/plugins/pgpmime/prefs_gpg.h
+       * src/plugins/pgpmime/select-keys.h
+       * src/plugins/pgpmime/sgpgme.h
+               change Privacy-API to C++
+
 2005-02-15 [colin]     1.0.1cvs8
 
        * src/mimeview.c
index 25a425b..6ed85bd 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.474 -r 1.475 src/compose.c; cvs diff -u -r 1.103 -r 1.104 src/procmime.c; ) > 1.0.1cvs6.patchset
 ( cvs diff -u -r 1.475 -r 1.476 src/compose.c; cvs diff -u -r 1.104 -r 1.105 src/procmime.c; ) > 1.0.1cvs7.patchset
 ( cvs diff -u -r 1.130 -r 1.131 src/mimeview.c; cvs diff -u -r 1.62 -r 1.64 src/common/utils.c; ) > 1.0.1cvs8.patchset
+( cvs diff -u -r 1.1330 -r 1.1331 configure.ac; cvs diff -u -r 1.191 -r 1.192 src/Makefile.am; cvs diff -u -r -1.13 -r -1.14 src/privacy.c; cvs diff -u -r 0 -r 1 src/privacy.cpp; cvs diff -u -r 1.12 -r 1.13 src/privacy.h; cvs diff -u -r 1.3 -r 1.4 src/plugins/pgpmime/Makefile.am; cvs diff -u -r 1.1 -r 1.2 src/plugins/pgpmime/passphrase.h; cvs diff -u -r -1.15 -r -1.16 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 0 -r 1 src/plugins/pgpmime/pgpmime.cpp; cvs diff -u -r 1.1 -r 1.2 src/plugins/pgpmime/pgpmime.h; cvs diff -u -r 1.3 -r 1.4 src/plugins/pgpmime/prefs_gpg.h; cvs diff -u -r 1.1 -r 1.2 src/plugins/pgpmime/select-keys.h; cvs diff -u -r 1.4 -r 1.5 src/plugins/pgpmime/sgpgme.h; ) > 1.0.1cvs9.patchset
index 9a8bf8c..e40be1b 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=8
+EXTRA_VERSION=9
 EXTRA_RELEASE=
 
 if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
@@ -69,6 +69,7 @@ AM_MAINTAINER_MODE
 dnl Checks for programs.
 dnl AC_ARG_PROGRAM
 AC_PROG_CC
+AC_PROG_CXX
 AC_ISC_POSIX
 AC_PROG_INSTALL
 AC_PROG_LN_S
index 2367b26..3e4d2bc 100644 (file)
@@ -100,7 +100,7 @@ sylpheed_SOURCES = \
        prefs_themes.c \
        prefs_toolbar.c \
        prefs_wrapping.c \
-       privacy.c \
+       privacy.cpp \
        procheader.c \
        procmime.c \
        procmsg.c \
index f227817..2431f14 100644 (file)
@@ -5,7 +5,7 @@ plugin_LTLIBRARIES = pgpmime.la
 pgpmime_la_SOURCES = \
        passphrase.c \
        plugin.c \
-       pgpmime.c \
+       pgpmime.cpp \
        prefs_gpg.c \
        select-keys.c \
        sgpgme.c
index 5556a50..3faa406 100644 (file)
 #include <glib.h>
 #include <gpgme.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 struct passphrase_cb_info_s {
     GpgmeCtx c;
     int did_it;
@@ -31,4 +35,8 @@ void gpgmegtk_set_passphrase_grab (gint yesno);
 const char* gpgmegtk_passphrase_cb(void *opaque, const char *desc, void **r_hd);
 void gpgmegtk_free_passphrase (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* GPGMEGTK_PASSPHRASE_H */
similarity index 89%
rename from src/plugins/pgpmime/pgpmime.c
rename to src/plugins/pgpmime/pgpmime.cpp
index 4484bc0..fd5d4b5 100644 (file)
@@ -49,9 +49,7 @@ struct _PrivacyDataPGP
        GpgmeCtx        ctx;
 };
 
-static PrivacySystem pgpmime_system;
-
-static gint pgpmime_check_signature(MimeInfo *mimeinfo);
+PGPMIME pgpmime_system;
 
 static PrivacyDataPGP *pgpmime_new_privacydata()
 {
@@ -67,14 +65,29 @@ static PrivacyDataPGP *pgpmime_new_privacydata()
        return data;
 }
 
-static void pgpmime_free_privacydata(PrivacyData *_data)
+PGPMIME::PGPMIME()
+{
+}
+
+const gchar *PGPMIME::getId()
+{
+       return "pgpmime";
+}
+
+const gchar *PGPMIME::getName()
+{
+       return "PGP/MIME";
+}
+
+void PGPMIME::freePrivacyData(PrivacyData *_data)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) _data;
        gpgme_release(data->ctx);
-       g_free(data);
+
+       PrivacySystem::freePrivacyData(_data);
 }
 
-static gboolean pgpmime_is_signed(MimeInfo *mimeinfo)
+gboolean PGPMIME::isSigned(MimeInfo *mimeinfo)
 {
        MimeInfo *parent;
        MimeInfo *signature;
@@ -153,7 +166,7 @@ static gchar *get_canonical_content(FILE *fp, const gchar *boundary)
        return ret;
 }
 
-static gint pgpmime_check_signature(MimeInfo *mimeinfo)
+gint PGPMIME::checkSignature(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data;
        MimeInfo *parent, *signature;
@@ -172,7 +185,7 @@ static gint pgpmime_check_signature(MimeInfo *mimeinfo)
        fp = fopen(parent->data.filename, "rb");
        g_return_val_if_fail(fp != NULL, SIGNATURE_INVALID);
        
-       boundary = g_hash_table_lookup(parent->typeparameters, "boundary");
+       boundary = (gchar *) g_hash_table_lookup(parent->typeparameters, "boundary");
        if (!boundary)
                return 0;
 
@@ -193,7 +206,7 @@ static gint pgpmime_check_signature(MimeInfo *mimeinfo)
        return 0;
 }
 
-static SignatureStatus pgpmime_get_sig_status(MimeInfo *mimeinfo)
+SignatureStatus PGPMIME::getSigStatus(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -201,12 +214,12 @@ static SignatureStatus pgpmime_get_sig_status(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               pgpmime_check_signature(mimeinfo);
+               checkSignature(mimeinfo);
        
        return sgpgme_sigstat_gpgme_to_privacy(data->ctx, data->sigstatus);
 }
 
-static gchar *pgpmime_get_sig_info_short(MimeInfo *mimeinfo)
+gchar *PGPMIME::getSigInfoShort(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -214,12 +227,12 @@ static gchar *pgpmime_get_sig_info_short(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               pgpmime_check_signature(mimeinfo);
+               checkSignature(mimeinfo);
        
        return sgpgme_sigstat_info_short(data->ctx, data->sigstatus);
 }
 
-static gchar *pgpmime_get_sig_info_full(MimeInfo *mimeinfo)
+gchar *PGPMIME::getSigInfoFull(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -227,12 +240,12 @@ static gchar *pgpmime_get_sig_info_full(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               pgpmime_check_signature(mimeinfo);
+               checkSignature(mimeinfo);
        
        return sgpgme_sigstat_info_full(data->ctx, data->sigstatus);
 }
 
-static gboolean pgpmime_is_encrypted(MimeInfo *mimeinfo)
+gboolean PGPMIME::isEncrypted(MimeInfo *mimeinfo)
 {
        MimeInfo *tmpinfo;
        const gchar *tmpstr;
@@ -262,16 +275,16 @@ static gboolean pgpmime_is_encrypted(MimeInfo *mimeinfo)
        return TRUE;
 }
 
-static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
+MimeInfo *PGPMIME::decrypt(MimeInfo *mimeinfo)
 {
        MimeInfo *encinfo, *decinfo, *parseinfo;
        GpgmeData cipher, plain;
        static gint id = 0;
        FILE *dstfp;
-       gint nread;
+       size_t nread;
        gchar *fname;
        gchar buf[BUFFSIZE];
-       GpgmeSigStat sigstat = 0;
+       GpgmeSigStat sigstat = GPGME_SIG_STAT_NONE;
        PrivacyDataPGP *data = NULL;
        GpgmeCtx ctx;
        
@@ -279,7 +292,7 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
                return NULL;
 
        
-       g_return_val_if_fail(pgpmime_is_encrypted(mimeinfo), NULL);
+       g_return_val_if_fail(isEncrypted(mimeinfo), NULL);
        
        encinfo = (MimeInfo *) g_node_nth_child(mimeinfo->node, 1)->data;
 
@@ -319,7 +332,7 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
                return NULL;
        }
        decinfo = g_node_first_child(parseinfo->node) != NULL ?
-               g_node_first_child(parseinfo->node)->data : NULL;
+               (MimeInfo *) g_node_first_child(parseinfo->node)->data : NULL;
        if (decinfo == NULL) {
                gpgme_release(ctx);
                return NULL;
@@ -349,6 +362,7 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
        return decinfo;
 }
 
+#if 0
 /*
  * Find TAG in XML and return a pointer into xml set just behind the
  * closing angle.  Return NULL if not found. 
@@ -397,7 +411,7 @@ extract_micalg (char *xml)
                 if (s && s < s_end2) {
                     s_end = strchr (s, '<');
                     if (s_end) {
-                        char *p = g_malloc (s_end - s + 1);
+                        char *p = (gchar *) g_malloc (s_end - s + 1);
                         memcpy (p, s, s_end - s);
                         p[s_end-s] = 0;
                         return p;
@@ -409,7 +423,7 @@ extract_micalg (char *xml)
     return NULL;
 }
 
-gboolean pgpmime_sign(MimeInfo *mimeinfo, PrefsAccount *account)
+gboolean PGPMIME::sign(MimeInfo *mimeinfo, PrefsAccount *account)
 {
        MimeInfo *msgcontent, *sigmultipart, *newinfo;
        gchar *textstr, *opinfo, *micalg;
@@ -495,12 +509,12 @@ gboolean pgpmime_sign(MimeInfo *mimeinfo, PrefsAccount *account)
        return TRUE;
 }
 
-gchar *pgpmime_get_encrypt_data(GSList *recp_names)
+gchar *PGPMIME::getEncryptData(GSList *recp_names)
 {
        return sgpgme_get_encrypt_data(recp_names);
 }
 
-gboolean pgpmime_encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
+gboolean PGPMIME::encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
 {
        MimeInfo *msgcontent, *encmultipart, *newinfo;
        FILE *fp;
@@ -588,28 +602,7 @@ gboolean pgpmime_encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
        return TRUE;
 }
 
-static PrivacySystem pgpmime_system = {
-       "pgpmime",                      /* id */
-       "PGP/MIME",                     /* name */
-
-       pgpmime_free_privacydata,       /* free_privacydata */
-
-       pgpmime_is_signed,              /* is_signed(MimeInfo *) */
-       pgpmime_check_signature,        /* check_signature(MimeInfo *) */
-       pgpmime_get_sig_status,         /* get_sig_status(MimeInfo *) */
-       pgpmime_get_sig_info_short,     /* get_sig_info_short(MimeInfo *) */
-       pgpmime_get_sig_info_full,      /* get_sig_info_full(MimeInfo *) */
-
-       pgpmime_is_encrypted,           /* is_encrypted(MimeInfo *) */
-       pgpmime_decrypt,                /* decrypt(MimeInfo *) */
-
-       TRUE,
-       pgpmime_sign,
-
-       TRUE,
-       pgpmime_get_encrypt_data,
-       pgpmime_encrypt,
-};
+#endif
 
 void pgpmime_init()
 {
index a6ce4ce..474e420 100644 (file)
 #ifndef PGPMIME_H
 #define PGPMIME_H 1
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void pgpmime_init(void);
 void pgpmime_done(void);
 
+#ifdef __cplusplus
+}
+
+class PGPMIME: public PrivacySystem {
+        public:
+                                 PGPMIME                ();
+
+       virtual const gchar     *getId                  ();
+       virtual const gchar     *getName                ();
+
+        virtual void             freePrivacyData        (PrivacyData *);
+
+        virtual gboolean         isSigned               (MimeInfo *);
+        virtual gint             checkSignature         (MimeInfo *);
+        virtual SignatureStatus  getSigStatus           (MimeInfo *);
+        virtual gchar           *getSigInfoShort        (MimeInfo *);
+        virtual gchar           *getSigInfoFull         (MimeInfo *);
+
+        virtual gboolean         isEncrypted            (MimeInfo *);
+        virtual MimeInfo        *decrypt                (MimeInfo *);
+};
+
+#endif
+
 #endif /* PGPMIME_H */
index c9ad350..2cc6295 100644 (file)
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef struct GPGConfig GPGConfig;
 typedef struct GPGAccountConfig GPGAccountConfig;
 
@@ -26,8 +30,16 @@ typedef enum {
        SIGN_KEY_CUSTOM,
 } SignKeyType;
 
+#ifdef __cplusplus
+}
+#endif
+
 #include "prefs_account.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 struct GPGConfig
 {
        gboolean         auto_check_signatures;
@@ -50,3 +62,7 @@ struct GPGConfig *prefs_gpg_get_config(void);
 struct GPGAccountConfig *prefs_gpg_account_get_config(PrefsAccount *account);
 void prefs_gpg_account_set_config(PrefsAccount *account, GPGAccountConfig *config);
 void prefs_gpg_account_free_config(GPGAccountConfig *config);
+
+#ifdef __cplusplus
+}
+#endif
index 009afc1..3ab3647 100644 (file)
 #include <glib.h>
 #include <gpgme.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 GpgmeRecipients gpgmegtk_recipient_selection (GSList *recp_names);
 
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* GPGMEGTK_SELECT_KEYS_H */
index 4b30dc8..fc222db 100644 (file)
 
 #include "privacy.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void sgpgme_init(void);
 void sgpgme_done(void);
 
@@ -43,4 +47,8 @@ GpgmeData sgpgme_decrypt_verify               (GpgmeData cipher, GpgmeSigStat *status,
 gchar *sgpgme_get_encrypt_data         (GSList *recp_names);
 gboolean sgpgme_setup_signers          (GpgmeCtx ctx, PrefsAccount *account);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* SGPGME_H */
similarity index 76%
rename from src/privacy.c
rename to src/privacy.cpp
index 27d0cf2..a2339e6 100644 (file)
 
 static GSList *systems = NULL;
 
+void PrivacySystem::freePrivacyData(PrivacyData *data)
+{
+       g_free(data);
+}
+
+gboolean PrivacySystem::isSigned(MimeInfo *mimeinfo)
+{
+       return FALSE;
+}
+
+gint PrivacySystem::checkSignature(MimeInfo *mimeinfo)
+{
+       return -1;
+}
+
+SignatureStatus PrivacySystem::getSigStatus(MimeInfo *mimeinfo)
+{
+       return SIGNATURE_CHECK_FAILED;
+}
+
+gchar *PrivacySystem::getSigInfoShort(MimeInfo *mimeinfo)
+{
+       return g_strdup(_("Error"));
+}
+
+gchar *PrivacySystem::getSigInfoFull(MimeInfo *mimeinfo)
+{
+       return g_strdup(_("Error"));
+}
+
+gboolean PrivacySystem::isEncrypted(MimeInfo *mimeinfo)
+{
+       return FALSE;
+}
+
+MimeInfo *PrivacySystem::decrypt(MimeInfo *mimeinfo)
+{
+       return NULL;
+}
+
+gboolean PrivacySystem::canSign()
+{
+       return FALSE;
+}
+
+gboolean PrivacySystem::sign(MimeInfo *mimeinfo, PrefsAccount *account)
+{
+       return FALSE;
+}
+
+gboolean PrivacySystem::canEncrypt()
+{
+       return FALSE;
+}
+
+gchar *PrivacySystem::getEncryptData(GSList *recp_names)
+{
+       return NULL;
+}
+
+gboolean PrivacySystem::encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
+{
+       return FALSE;
+}
+
 /**
  * Register a new Privacy System
  *
@@ -55,7 +120,7 @@ void privacy_free_privacydata(PrivacyData *privacydata)
 {
        g_return_if_fail(privacydata != NULL);
 
-       privacydata->system->free_privacydata(privacydata);
+       ((PrivacySystem *) privacydata->system)->freePrivacyData(privacydata);
 }
 
 /**
@@ -73,18 +138,15 @@ gboolean privacy_mimeinfo_is_signed(MimeInfo *mimeinfo)
        g_return_val_if_fail(mimeinfo != NULL, FALSE);
 
        if (mimeinfo->privacy != NULL) {
-               PrivacySystem *system = mimeinfo->privacy->system;
+               PrivacySystem *system = (PrivacySystem *) (mimeinfo->privacy->system);
 
-               if (system->is_signed != NULL)
-                       return system->is_signed(mimeinfo);
-               else
-                       return FALSE;
+               return system->isSigned(mimeinfo);
        }
 
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(system->is_signed != NULL && system->is_signed(mimeinfo))
+               if(system->isSigned(mimeinfo))
                        return TRUE;
        }
 
@@ -111,18 +173,16 @@ gint privacy_mimeinfo_check_signature(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return -1;
        
-       system = mimeinfo->privacy->system;
-       if (system->check_signature == NULL)
-               return -1;
-       
-       return system->check_signature(mimeinfo);
+       system = (PrivacySystem *) mimeinfo->privacy->system;
+
+       return system->checkSignature(mimeinfo);
 }
 
 SignatureStatus privacy_mimeinfo_get_sig_status(MimeInfo *mimeinfo)
 {
        PrivacySystem *system;
 
-       g_return_val_if_fail(mimeinfo != NULL, -1);
+       g_return_val_if_fail(mimeinfo != NULL, SIGNATURE_CHECK_FAILED);
 
        if (mimeinfo->privacy == NULL)
                privacy_mimeinfo_is_signed(mimeinfo);
@@ -130,11 +190,9 @@ SignatureStatus privacy_mimeinfo_get_sig_status(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return SIGNATURE_UNCHECKED;
        
-       system = mimeinfo->privacy->system;
-       if (system->get_sig_status == NULL)
-               return SIGNATURE_UNCHECKED;
+       system = (PrivacySystem *) mimeinfo->privacy->system;
        
-       return system->get_sig_status(mimeinfo);
+       return system->getSigStatus(mimeinfo);
 }
 
 gchar *privacy_mimeinfo_sig_info_short(MimeInfo *mimeinfo)
@@ -149,11 +207,9 @@ gchar *privacy_mimeinfo_sig_info_short(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return g_strdup(_("No signature found"));
        
-       system = mimeinfo->privacy->system;
-       if (system->get_sig_info_short == NULL)
-               return g_strdup(_("No information available"));
-       
-       return system->get_sig_info_short(mimeinfo);
+       system = (PrivacySystem *) mimeinfo->privacy->system;
+
+       return system->getSigInfoShort(mimeinfo);
 }
 
 gchar *privacy_mimeinfo_sig_info_full(MimeInfo *mimeinfo)
@@ -168,11 +224,9 @@ gchar *privacy_mimeinfo_sig_info_full(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return g_strdup(_("No signature found"));
        
-       system = mimeinfo->privacy->system;
-       if (system->get_sig_info_full == NULL)
-               return g_strdup(_("No information available"));
-       
-       return system->get_sig_info_full(mimeinfo);
+       system = (PrivacySystem *) mimeinfo->privacy->system;
+
+       return system->getSigInfoFull(mimeinfo);
 }
 
 gboolean privacy_mimeinfo_is_encrypted(MimeInfo *mimeinfo)
@@ -183,7 +237,7 @@ gboolean privacy_mimeinfo_is_encrypted(MimeInfo *mimeinfo)
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(system->is_encrypted != NULL && system->is_encrypted(mimeinfo))
+               if(system->isEncrypted(mimeinfo))
                        return TRUE;
        }
 
@@ -195,8 +249,6 @@ static gint decrypt(MimeInfo *mimeinfo, PrivacySystem *system)
        MimeInfo *decryptedinfo, *parentinfo;
        gint childnumber;
        
-       g_return_val_if_fail(system->decrypt != NULL, -1);
-       
        decryptedinfo = system->decrypt(mimeinfo);
        if (decryptedinfo == NULL)
                return -1;
@@ -219,7 +271,7 @@ gint privacy_mimeinfo_decrypt(MimeInfo *mimeinfo)
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(system->is_encrypted != NULL && system->is_encrypted(mimeinfo))
+               if(system->isEncrypted(mimeinfo))
                        return decrypt(mimeinfo, system);
        }
 
@@ -234,7 +286,7 @@ GSList *privacy_get_system_ids()
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               ret = g_slist_append(ret, g_strdup(system->id));
+               ret = g_slist_append(ret, g_strdup(system->getId()));
        }
 
        return ret;
@@ -249,7 +301,7 @@ static PrivacySystem *privacy_get_system(const gchar *id)
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(strcmp(id, system->id) == 0)
+               if(strcmp(id, system->getId()) == 0)
                        return system;
        }
 
@@ -266,7 +318,7 @@ const gchar *privacy_system_get_name(const gchar *id)
        if (system == NULL)
                return NULL;
 
-       return system->name;
+       return system->getName();
 }
 
 gboolean privacy_system_can_sign(const gchar *id)
@@ -279,7 +331,7 @@ gboolean privacy_system_can_sign(const gchar *id)
        if (system == NULL)
                return FALSE;
 
-       return system->can_sign;
+       return system->canSign();
 }
 
 gboolean privacy_system_can_encrypt(const gchar *id)
@@ -292,7 +344,7 @@ gboolean privacy_system_can_encrypt(const gchar *id)
        if (system == NULL)
                return FALSE;
 
-       return system->can_encrypt;
+       return system->canEncrypt();
 }
 
 gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account)
@@ -305,9 +357,7 @@ gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account)
        system = privacy_get_system(id);
        if (system == NULL)
                return FALSE;
-       if (!system->can_sign)
-               return FALSE;
-       if (system->sign == NULL)
+       if (!system->canSign())
                return FALSE;
 
        return system->sign(target, account);
@@ -323,12 +373,10 @@ gchar *privacy_get_encrypt_data(const gchar *id, GSList *recp_names)
        system = privacy_get_system(id);
        if (system == NULL)
                return NULL;
-       if (!system->can_encrypt)
-               return NULL;
-       if (system->get_encrypt_data == NULL)
+       if (!system->canEncrypt())
                return NULL;
 
-       return system->get_encrypt_data(recp_names);
+       return system->getEncryptData(recp_names);
 }
 
 gboolean privacy_encrypt(const gchar *id, MimeInfo *mimeinfo, const gchar *encdata)
@@ -342,9 +390,7 @@ gboolean privacy_encrypt(const gchar *id, MimeInfo *mimeinfo, const gchar *encda
        system = privacy_get_system(id);
        if (system == NULL)
                return FALSE;
-       if (!system->can_encrypt)
-               return FALSE;
-       if (system->encrypt == NULL)
+       if (!system->canEncrypt())
                return FALSE;
 
        return system->encrypt(mimeinfo, encdata);
index 90c3c7b..17a3511 100644 (file)
@@ -20,7 +20,6 @@
 #ifndef PRIVACY_H
 #define PRIVACY_H
 
-typedef struct _PrivacySystem PrivacySystem;
 typedef struct _PrivacyData PrivacyData;
 
 typedef enum {
@@ -36,8 +35,9 @@ typedef enum {
 #include "procmime.h"
 #include "prefs_account.h"
 
-void privacy_register_system                   (PrivacySystem *system);
-void privacy_unregister_system                 (PrivacySystem *system);
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
 
 void privacy_free_privacydata                  (PrivacyData *);
 
@@ -64,35 +64,42 @@ gboolean privacy_encrypt                    (const gchar  *system,
                                                 MimeInfo     *mimeinfo,
                                                 const gchar  *encdata);
 
-struct _PrivacySystem {
-       /** Identifier for the PrivacySystem that can use in config files */
-       gchar            *id;
-       /** Human readable name for the PrivacySystem for the user interface */
-       gchar            *name;
+struct _PrivacyData {
+       void            *system;
+};
 
-       void             (*free_privacydata)    (PrivacyData *data);
+#ifdef __cplusplus
+}
 
-       gboolean         (*is_signed)           (MimeInfo *mimeinfo);
-       gint             (*check_signature)     (MimeInfo *mimeinfo);
-       SignatureStatus  (*get_sig_status)      (MimeInfo *mimeinfo);
-       gchar           *(*get_sig_info_short)  (MimeInfo *mimeinfo);
-       gchar           *(*get_sig_info_full)   (MimeInfo *mimeinfo);
+class PrivacySystem {
+        public:
+        virtual const gchar             *getId() = 0;
+        virtual const gchar             *getName() = 0;
 
-       gboolean         (*is_encrypted)        (MimeInfo *mimeinfo);
-       MimeInfo        *(*decrypt)             (MimeInfo *mimeinfo);
+        virtual void             freePrivacyData        (PrivacyData *);
 
-       gboolean           can_sign;
-       gboolean         (*sign)                (MimeInfo *mimeinfo,
-                                                PrefsAccount *account);
+        virtual gboolean         isSigned               (MimeInfo *);
+        virtual gint             checkSignature         (MimeInfo *);
+        virtual SignatureStatus  getSigStatus           (MimeInfo *);
+        virtual gchar           *getSigInfoShort        (MimeInfo *);
+        virtual gchar           *getSigInfoFull         (MimeInfo *);
 
-       gboolean           can_encrypt;
-       gchar           *(*get_encrypt_data)    (GSList *recp_names);
-       gboolean         (*encrypt)             (MimeInfo *mimeinfo,
-                                                const gchar *encrypt_data);
-};
+        virtual gboolean         isEncrypted            (MimeInfo *);
+        virtual MimeInfo        *decrypt                (MimeInfo *);
 
-struct _PrivacyData {
-       PrivacySystem   *system;
+       virtual gboolean         canSign                ();
+       virtual gboolean         sign                   (MimeInfo *mimeinfo,
+                                                        PrefsAccount *account);
+
+       virtual gboolean         canEncrypt             ();
+       virtual gchar           *getEncryptData         (GSList *recp_names);
+       virtual gboolean         encrypt                (MimeInfo *mimeinfo,
+                                                        const gchar *encrypt_data);
 };
 
+void privacy_register_system                   (PrivacySystem *system);
+void privacy_unregister_system                 (PrivacySystem *system);
+
+#endif /* __cplusplus */
+
 #endif /* PRIVACY_H */