2005-02-18 [colin] 1.0.1cvs12
authorColin Leroy <colin@colino.net>
Fri, 18 Feb 2005 08:16:10 +0000 (08:16 +0000)
committerColin Leroy <colin@colino.net>
Fri, 18 Feb 2005 08:16:10 +0000 (08:16 +0000)
* src/Makefile.am
* src/privacy.c ** RE-ADDED **
* src/privacy.cpp ** REMOVED **
* src/privacy.h
* src/plugins/pgpmime/Makefile.am
* src/plugins/pgpmime/passphrase.h
* src/plugins/pgpmime/pgpmime.c ** RE-ADDED **
* src/plugins/pgpmime/pgpmime.cpp ** REMOVED **
* src/plugins/pgpmime/pgpmime.h
* src/plugins/pgpmime/prefs_gpg.h
* src/plugins/pgpmime/select-keys.h
* src/plugins/pgpmime/sgpgme.h
Revert huge API breakage.

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.c [moved from src/plugins/pgpmime/pgpmime.cpp with 98% 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.c [moved from src/privacy.cpp with 76% similarity]
src/privacy.h

index dd24643..1afddca 100644 (file)
@@ -1,3 +1,19 @@
+2005-02-18 [colin]     1.0.1cvs12
+
+       * src/Makefile.am
+       * src/privacy.c         ** RE-ADDED **
+       * src/privacy.cpp       ** REMOVED **
+       * src/privacy.h
+       * src/plugins/pgpmime/Makefile.am
+       * src/plugins/pgpmime/passphrase.h
+       * src/plugins/pgpmime/pgpmime.c         ** RE-ADDED **
+       * src/plugins/pgpmime/pgpmime.cpp       ** REMOVED **
+       * src/plugins/pgpmime/pgpmime.h
+       * src/plugins/pgpmime/prefs_gpg.h
+       * src/plugins/pgpmime/select-keys.h
+       * src/plugins/pgpmime/sgpgme.h
+               Revert huge API breakage.
+
 2005-02-16 [christoph] 1.0.1cvs11
 
        * src/mh.c
index 906d80e..4a8523f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
 ( cvs diff -u -r 1.1 -r 1.2 src/plugins/pgpmime/pgpmime.cpp; cvs diff -u -r 1.2 -r 1.3 src/plugins/pgpmime/pgpmime.h; ) > 1.0.1cvs10.patchset
 ( cvs diff -u -r 1.87 -r 1.88 src/mh.c; ) > 1.0.1cvs11.patchset
+( cvs diff -u -r 1.192 -r 1.193 src/Makefile.am; cvs diff -u -r 0 -r 1 src/privacy.c; cvs diff -u -r -1.1 -r -1.2 src/privacy.cpp; cvs diff -u -r 1.13 -r 1.14 src/privacy.h; cvs diff -u -r 1.4 -r 1.5 src/plugins/pgpmime/Makefile.am; cvs diff -u -r 1.2 -r 1.3 src/plugins/pgpmime/passphrase.h; cvs diff -u -r 0 -r 1 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r -1.2 -r -1.3 src/plugins/pgpmime/pgpmime.cpp; cvs diff -u -r 1.3 -r 1.4 src/plugins/pgpmime/pgpmime.h; cvs diff -u -r 1.4 -r 1.5 src/plugins/pgpmime/prefs_gpg.h; cvs diff -u -r 1.2 -r 1.3 src/plugins/pgpmime/select-keys.h; cvs diff -u -r 1.5 -r 1.6 src/plugins/pgpmime/sgpgme.h; ) > 1.0.1cvs12.patchset
index 12b0b97..a0ca0ca 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=11
+EXTRA_VERSION=12
 EXTRA_RELEASE=
 
 if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
@@ -69,7 +69,6 @@ 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 3e4d2bc..2367b26 100644 (file)
@@ -100,7 +100,7 @@ sylpheed_SOURCES = \
        prefs_themes.c \
        prefs_toolbar.c \
        prefs_wrapping.c \
-       privacy.cpp \
+       privacy.c \
        procheader.c \
        procmime.c \
        procmsg.c \
index 2431f14..f227817 100644 (file)
@@ -5,7 +5,7 @@ plugin_LTLIBRARIES = pgpmime.la
 pgpmime_la_SOURCES = \
        passphrase.c \
        plugin.c \
-       pgpmime.cpp \
+       pgpmime.c \
        prefs_gpg.c \
        select-keys.c \
        sgpgme.c
index 3faa406..5556a50 100644 (file)
 #include <glib.h>
 #include <gpgme.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 struct passphrase_cb_info_s {
     GpgmeCtx c;
     int did_it;
@@ -35,8 +31,4 @@ 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 98%
rename from src/plugins/pgpmime/pgpmime.cpp
rename to src/plugins/pgpmime/pgpmime.c
index f466656..fd5d4b5 100644 (file)
@@ -362,6 +362,7 @@ 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. 
@@ -422,11 +423,6 @@ extract_micalg (char *xml)
     return NULL;
 }
 
-gboolean PGPMIME::canSign()
-{
-       return TRUE;
-}
-
 gboolean PGPMIME::sign(MimeInfo *mimeinfo, PrefsAccount *account)
 {
        MimeInfo *msgcontent, *sigmultipart, *newinfo;
@@ -503,7 +499,7 @@ gboolean PGPMIME::sign(MimeInfo *mimeinfo, PrefsAccount *account)
        newinfo->type = MIMETYPE_APPLICATION;
        newinfo->subtype = g_strdup("pgp-signature");
        newinfo->content = MIMECONTENT_MEM;
-       newinfo->data.mem = (gchar *) g_malloc(len + 1);
+       newinfo->data.mem = g_malloc(len + 1);
        g_memmove(newinfo->data.mem, sigcontent, len);
        newinfo->data.mem[len] = '\0';
        g_node_append(sigmultipart->node, newinfo->node);
@@ -513,11 +509,6 @@ gboolean PGPMIME::sign(MimeInfo *mimeinfo, PrefsAccount *account)
        return TRUE;
 }
 
-gboolean PGPMIME::canEncrypt()
-{
-       return TRUE;
-}
-
 gchar *PGPMIME::getEncryptData(GSList *recp_names)
 {
        return sgpgme_get_encrypt_data(recp_names);
@@ -601,7 +592,7 @@ gboolean PGPMIME::encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
        newinfo->type = MIMETYPE_APPLICATION;
        newinfo->subtype = g_strdup("octet-stream");
        newinfo->content = MIMECONTENT_MEM;
-       newinfo->data.mem = (gchar *) g_malloc(len + 1);
+       newinfo->data.mem = g_malloc(len + 1);
        g_memmove(newinfo->data.mem, enccontent, len);
        newinfo->data.mem[len] = '\0';
        g_node_append(encmultipart->node, newinfo->node);
@@ -611,6 +602,8 @@ gboolean PGPMIME::encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
        return TRUE;
 }
 
+#endif
+
 void pgpmime_init()
 {
        privacy_register_system(&pgpmime_system);
index 785d27c..a6ce4ce 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 *);
-
-       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);
-};
-
-#endif
-
 #endif /* PGPMIME_H */
index 2cc6295..c9ad350 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;
 
@@ -30,16 +26,8 @@ typedef enum {
        SIGN_KEY_CUSTOM,
 } SignKeyType;
 
-#ifdef __cplusplus
-}
-#endif
-
 #include "prefs_account.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 struct GPGConfig
 {
        gboolean         auto_check_signatures;
@@ -62,7 +50,3 @@ 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 3ab3647..009afc1 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 fc222db..4b30dc8 100644 (file)
 
 #include "privacy.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 void sgpgme_init(void);
 void sgpgme_done(void);
 
@@ -47,8 +43,4 @@ 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.cpp
rename to src/privacy.c
index a2339e6..27d0cf2 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
  *
@@ -120,7 +55,7 @@ void privacy_free_privacydata(PrivacyData *privacydata)
 {
        g_return_if_fail(privacydata != NULL);
 
-       ((PrivacySystem *) privacydata->system)->freePrivacyData(privacydata);
+       privacydata->system->free_privacydata(privacydata);
 }
 
 /**
@@ -138,15 +73,18 @@ gboolean privacy_mimeinfo_is_signed(MimeInfo *mimeinfo)
        g_return_val_if_fail(mimeinfo != NULL, FALSE);
 
        if (mimeinfo->privacy != NULL) {
-               PrivacySystem *system = (PrivacySystem *) (mimeinfo->privacy->system);
+               PrivacySystem *system = mimeinfo->privacy->system;
 
-               return system->isSigned(mimeinfo);
+               if (system->is_signed != NULL)
+                       return system->is_signed(mimeinfo);
+               else
+                       return FALSE;
        }
 
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(system->isSigned(mimeinfo))
+               if(system->is_signed != NULL && system->is_signed(mimeinfo))
                        return TRUE;
        }
 
@@ -173,16 +111,18 @@ gint privacy_mimeinfo_check_signature(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return -1;
        
-       system = (PrivacySystem *) mimeinfo->privacy->system;
-
-       return system->checkSignature(mimeinfo);
+       system = mimeinfo->privacy->system;
+       if (system->check_signature == NULL)
+               return -1;
+       
+       return system->check_signature(mimeinfo);
 }
 
 SignatureStatus privacy_mimeinfo_get_sig_status(MimeInfo *mimeinfo)
 {
        PrivacySystem *system;
 
-       g_return_val_if_fail(mimeinfo != NULL, SIGNATURE_CHECK_FAILED);
+       g_return_val_if_fail(mimeinfo != NULL, -1);
 
        if (mimeinfo->privacy == NULL)
                privacy_mimeinfo_is_signed(mimeinfo);
@@ -190,9 +130,11 @@ SignatureStatus privacy_mimeinfo_get_sig_status(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return SIGNATURE_UNCHECKED;
        
-       system = (PrivacySystem *) mimeinfo->privacy->system;
+       system = mimeinfo->privacy->system;
+       if (system->get_sig_status == NULL)
+               return SIGNATURE_UNCHECKED;
        
-       return system->getSigStatus(mimeinfo);
+       return system->get_sig_status(mimeinfo);
 }
 
 gchar *privacy_mimeinfo_sig_info_short(MimeInfo *mimeinfo)
@@ -207,9 +149,11 @@ gchar *privacy_mimeinfo_sig_info_short(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return g_strdup(_("No signature found"));
        
-       system = (PrivacySystem *) mimeinfo->privacy->system;
-
-       return system->getSigInfoShort(mimeinfo);
+       system = mimeinfo->privacy->system;
+       if (system->get_sig_info_short == NULL)
+               return g_strdup(_("No information available"));
+       
+       return system->get_sig_info_short(mimeinfo);
 }
 
 gchar *privacy_mimeinfo_sig_info_full(MimeInfo *mimeinfo)
@@ -224,9 +168,11 @@ gchar *privacy_mimeinfo_sig_info_full(MimeInfo *mimeinfo)
        if (mimeinfo->privacy == NULL)
                return g_strdup(_("No signature found"));
        
-       system = (PrivacySystem *) mimeinfo->privacy->system;
-
-       return system->getSigInfoFull(mimeinfo);
+       system = mimeinfo->privacy->system;
+       if (system->get_sig_info_full == NULL)
+               return g_strdup(_("No information available"));
+       
+       return system->get_sig_info_full(mimeinfo);
 }
 
 gboolean privacy_mimeinfo_is_encrypted(MimeInfo *mimeinfo)
@@ -237,7 +183,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->isEncrypted(mimeinfo))
+               if(system->is_encrypted != NULL && system->is_encrypted(mimeinfo))
                        return TRUE;
        }
 
@@ -249,6 +195,8 @@ 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;
@@ -271,7 +219,7 @@ gint privacy_mimeinfo_decrypt(MimeInfo *mimeinfo)
        for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
                PrivacySystem *system = (PrivacySystem *) cur->data;
 
-               if(system->isEncrypted(mimeinfo))
+               if(system->is_encrypted != NULL && system->is_encrypted(mimeinfo))
                        return decrypt(mimeinfo, system);
        }
 
@@ -286,7 +234,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->getId()));
+               ret = g_slist_append(ret, g_strdup(system->id));
        }
 
        return ret;
@@ -301,7 +249,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->getId()) == 0)
+               if(strcmp(id, system->id) == 0)
                        return system;
        }
 
@@ -318,7 +266,7 @@ const gchar *privacy_system_get_name(const gchar *id)
        if (system == NULL)
                return NULL;
 
-       return system->getName();
+       return system->name;
 }
 
 gboolean privacy_system_can_sign(const gchar *id)
@@ -331,7 +279,7 @@ gboolean privacy_system_can_sign(const gchar *id)
        if (system == NULL)
                return FALSE;
 
-       return system->canSign();
+       return system->can_sign;
 }
 
 gboolean privacy_system_can_encrypt(const gchar *id)
@@ -344,7 +292,7 @@ gboolean privacy_system_can_encrypt(const gchar *id)
        if (system == NULL)
                return FALSE;
 
-       return system->canEncrypt();
+       return system->can_encrypt;
 }
 
 gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account)
@@ -357,7 +305,9 @@ gboolean privacy_sign(const gchar *id, MimeInfo *target, PrefsAccount *account)
        system = privacy_get_system(id);
        if (system == NULL)
                return FALSE;
-       if (!system->canSign())
+       if (!system->can_sign)
+               return FALSE;
+       if (system->sign == NULL)
                return FALSE;
 
        return system->sign(target, account);
@@ -373,10 +323,12 @@ gchar *privacy_get_encrypt_data(const gchar *id, GSList *recp_names)
        system = privacy_get_system(id);
        if (system == NULL)
                return NULL;
-       if (!system->canEncrypt())
+       if (!system->can_encrypt)
+               return NULL;
+       if (system->get_encrypt_data == NULL)
                return NULL;
 
-       return system->getEncryptData(recp_names);
+       return system->get_encrypt_data(recp_names);
 }
 
 gboolean privacy_encrypt(const gchar *id, MimeInfo *mimeinfo, const gchar *encdata)
@@ -390,7 +342,9 @@ gboolean privacy_encrypt(const gchar *id, MimeInfo *mimeinfo, const gchar *encda
        system = privacy_get_system(id);
        if (system == NULL)
                return FALSE;
-       if (!system->canEncrypt())
+       if (!system->can_encrypt)
+               return FALSE;
+       if (system->encrypt == NULL)
                return FALSE;
 
        return system->encrypt(mimeinfo, encdata);
index 17a3511..90c3c7b 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef PRIVACY_H
 #define PRIVACY_H
 
+typedef struct _PrivacySystem PrivacySystem;
 typedef struct _PrivacyData PrivacyData;
 
 typedef enum {
@@ -35,9 +36,8 @@ typedef enum {
 #include "procmime.h"
 #include "prefs_account.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+void privacy_register_system                   (PrivacySystem *system);
+void privacy_unregister_system                 (PrivacySystem *system);
 
 void privacy_free_privacydata                  (PrivacyData *);
 
@@ -64,42 +64,35 @@ gboolean privacy_encrypt                    (const gchar  *system,
                                                 MimeInfo     *mimeinfo,
                                                 const gchar  *encdata);
 
-struct _PrivacyData {
-       void            *system;
-};
-
-#ifdef __cplusplus
-}
-
-class PrivacySystem {
-        public:
-        virtual const gchar             *getId() = 0;
-        virtual const gchar             *getName() = 0;
+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;
 
-        virtual void             freePrivacyData        (PrivacyData *);
+       void             (*free_privacydata)    (PrivacyData *data);
 
-        virtual gboolean         isSigned               (MimeInfo *);
-        virtual gint             checkSignature         (MimeInfo *);
-        virtual SignatureStatus  getSigStatus           (MimeInfo *);
-        virtual gchar           *getSigInfoShort        (MimeInfo *);
-        virtual gchar           *getSigInfoFull         (MimeInfo *);
+       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);
 
-        virtual gboolean         isEncrypted            (MimeInfo *);
-        virtual MimeInfo        *decrypt                (MimeInfo *);
+       gboolean         (*is_encrypted)        (MimeInfo *mimeinfo);
+       MimeInfo        *(*decrypt)             (MimeInfo *mimeinfo);
 
-       virtual gboolean         canSign                ();
-       virtual gboolean         sign                   (MimeInfo *mimeinfo,
-                                                        PrefsAccount *account);
+       gboolean           can_sign;
+       gboolean         (*sign)                (MimeInfo *mimeinfo,
+                                                PrefsAccount *account);
 
-       virtual gboolean         canEncrypt             ();
-       virtual gchar           *getEncryptData         (GSList *recp_names);
-       virtual gboolean         encrypt                (MimeInfo *mimeinfo,
-                                                        const gchar *encrypt_data);
+       gboolean           can_encrypt;
+       gchar           *(*get_encrypt_data)    (GSList *recp_names);
+       gboolean         (*encrypt)             (MimeInfo *mimeinfo,
+                                                const gchar *encrypt_data);
 };
 
-void privacy_register_system                   (PrivacySystem *system);
-void privacy_unregister_system                 (PrivacySystem *system);
-
-#endif /* __cplusplus */
+struct _PrivacyData {
+       PrivacySystem   *system;
+};
 
 #endif /* PRIVACY_H */