2005-02-18 [colin] 1.0.1cvs13
[claws.git] / src / plugins / pgpmime / pgpmime.c
index fd5d4b5..4484bc0 100644 (file)
@@ -49,7 +49,9 @@ struct _PrivacyDataPGP
        GpgmeCtx        ctx;
 };
 
-PGPMIME pgpmime_system;
+static PrivacySystem pgpmime_system;
+
+static gint pgpmime_check_signature(MimeInfo *mimeinfo);
 
 static PrivacyDataPGP *pgpmime_new_privacydata()
 {
@@ -65,29 +67,14 @@ static PrivacyDataPGP *pgpmime_new_privacydata()
        return data;
 }
 
-PGPMIME::PGPMIME()
-{
-}
-
-const gchar *PGPMIME::getId()
-{
-       return "pgpmime";
-}
-
-const gchar *PGPMIME::getName()
-{
-       return "PGP/MIME";
-}
-
-void PGPMIME::freePrivacyData(PrivacyData *_data)
+static void pgpmime_free_privacydata(PrivacyData *_data)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) _data;
        gpgme_release(data->ctx);
-
-       PrivacySystem::freePrivacyData(_data);
+       g_free(data);
 }
 
-gboolean PGPMIME::isSigned(MimeInfo *mimeinfo)
+static gboolean pgpmime_is_signed(MimeInfo *mimeinfo)
 {
        MimeInfo *parent;
        MimeInfo *signature;
@@ -166,7 +153,7 @@ static gchar *get_canonical_content(FILE *fp, const gchar *boundary)
        return ret;
 }
 
-gint PGPMIME::checkSignature(MimeInfo *mimeinfo)
+static gint pgpmime_check_signature(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data;
        MimeInfo *parent, *signature;
@@ -185,7 +172,7 @@ gint PGPMIME::checkSignature(MimeInfo *mimeinfo)
        fp = fopen(parent->data.filename, "rb");
        g_return_val_if_fail(fp != NULL, SIGNATURE_INVALID);
        
-       boundary = (gchar *) g_hash_table_lookup(parent->typeparameters, "boundary");
+       boundary = g_hash_table_lookup(parent->typeparameters, "boundary");
        if (!boundary)
                return 0;
 
@@ -206,7 +193,7 @@ gint PGPMIME::checkSignature(MimeInfo *mimeinfo)
        return 0;
 }
 
-SignatureStatus PGPMIME::getSigStatus(MimeInfo *mimeinfo)
+static SignatureStatus pgpmime_get_sig_status(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -214,12 +201,12 @@ SignatureStatus PGPMIME::getSigStatus(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               checkSignature(mimeinfo);
+               pgpmime_check_signature(mimeinfo);
        
        return sgpgme_sigstat_gpgme_to_privacy(data->ctx, data->sigstatus);
 }
 
-gchar *PGPMIME::getSigInfoShort(MimeInfo *mimeinfo)
+static gchar *pgpmime_get_sig_info_short(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -227,12 +214,12 @@ gchar *PGPMIME::getSigInfoShort(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               checkSignature(mimeinfo);
+               pgpmime_check_signature(mimeinfo);
        
        return sgpgme_sigstat_info_short(data->ctx, data->sigstatus);
 }
 
-gchar *PGPMIME::getSigInfoFull(MimeInfo *mimeinfo)
+static gchar *pgpmime_get_sig_info_full(MimeInfo *mimeinfo)
 {
        PrivacyDataPGP *data = (PrivacyDataPGP *) mimeinfo->privacy;
        
@@ -240,12 +227,12 @@ gchar *PGPMIME::getSigInfoFull(MimeInfo *mimeinfo)
 
        if (data->sigstatus == GPGME_SIG_STAT_NONE && 
            prefs_gpg_get_config()->auto_check_signatures)
-               checkSignature(mimeinfo);
+               pgpmime_check_signature(mimeinfo);
        
        return sgpgme_sigstat_info_full(data->ctx, data->sigstatus);
 }
 
-gboolean PGPMIME::isEncrypted(MimeInfo *mimeinfo)
+static gboolean pgpmime_is_encrypted(MimeInfo *mimeinfo)
 {
        MimeInfo *tmpinfo;
        const gchar *tmpstr;
@@ -275,16 +262,16 @@ gboolean PGPMIME::isEncrypted(MimeInfo *mimeinfo)
        return TRUE;
 }
 
-MimeInfo *PGPMIME::decrypt(MimeInfo *mimeinfo)
+static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo)
 {
        MimeInfo *encinfo, *decinfo, *parseinfo;
        GpgmeData cipher, plain;
        static gint id = 0;
        FILE *dstfp;
-       size_t nread;
+       gint nread;
        gchar *fname;
        gchar buf[BUFFSIZE];
-       GpgmeSigStat sigstat = GPGME_SIG_STAT_NONE;
+       GpgmeSigStat sigstat = 0;
        PrivacyDataPGP *data = NULL;
        GpgmeCtx ctx;
        
@@ -292,7 +279,7 @@ MimeInfo *PGPMIME::decrypt(MimeInfo *mimeinfo)
                return NULL;
 
        
-       g_return_val_if_fail(isEncrypted(mimeinfo), NULL);
+       g_return_val_if_fail(pgpmime_is_encrypted(mimeinfo), NULL);
        
        encinfo = (MimeInfo *) g_node_nth_child(mimeinfo->node, 1)->data;
 
@@ -332,7 +319,7 @@ MimeInfo *PGPMIME::decrypt(MimeInfo *mimeinfo)
                return NULL;
        }
        decinfo = g_node_first_child(parseinfo->node) != NULL ?
-               (MimeInfo *) g_node_first_child(parseinfo->node)->data : NULL;
+               g_node_first_child(parseinfo->node)->data : NULL;
        if (decinfo == NULL) {
                gpgme_release(ctx);
                return NULL;
@@ -362,7 +349,6 @@ 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. 
@@ -411,7 +397,7 @@ extract_micalg (char *xml)
                 if (s && s < s_end2) {
                     s_end = strchr (s, '<');
                     if (s_end) {
-                        char *p = (gchar *) g_malloc (s_end - s + 1);
+                        char *p = g_malloc (s_end - s + 1);
                         memcpy (p, s, s_end - s);
                         p[s_end-s] = 0;
                         return p;
@@ -423,7 +409,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;
@@ -509,12 +495,12 @@ gboolean PGPMIME::sign(MimeInfo *mimeinfo, PrefsAccount *account)
        return TRUE;
 }
 
-gchar *PGPMIME::getEncryptData(GSList *recp_names)
+gchar *pgpmime_get_encrypt_data(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;
@@ -602,7 +588,28 @@ gboolean PGPMIME::encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data)
        return TRUE;
 }
 
-#endif
+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,
+};
 
 void pgpmime_init()
 {