aboutsummaryrefslogtreecommitdiff
path: root/src/rfc2015.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-09-05 10:00:53 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-09-05 10:00:53 +0000
commit3bf24b9336184fe9e28f7e09b9c5200a5f82b7d2 (patch)
tree51ccac6f26dcdf9fcfac1a7879477bfde2759b80 /src/rfc2015.c
parent11776e5a524745b01ac145439ac2892a29bd0826 (diff)
moved more modules to libsylph.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@548 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/rfc2015.c')
-rw-r--r--src/rfc2015.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/rfc2015.c b/src/rfc2015.c
index ef6a9230..8708dc81 100644
--- a/src/rfc2015.c
+++ b/src/rfc2015.c
@@ -35,6 +35,7 @@
#include <gpgme.h>
+#include "procmsg.h"
#include "procmime.h"
#include "procheader.h"
#include "base64.h"
@@ -637,6 +638,55 @@ void rfc2015_decrypt_message(MsgInfo *msginfo, MimeInfo *mimeinfo, FILE *fp)
#undef DECRYPTION_ABORT
+FILE *rfc2015_open_message_decrypted(MsgInfo *msginfo, MimeInfo **mimeinfo)
+{
+ FILE *fp;
+ MimeInfo *mimeinfo_;
+ glong fpos;
+
+ g_return_val_if_fail(msginfo != NULL, NULL);
+
+ if (mimeinfo) *mimeinfo = NULL;
+
+ if ((fp = procmsg_open_message(msginfo)) == NULL) return NULL;
+
+ mimeinfo_ = procmime_scan_mime_header(fp);
+ if (!mimeinfo_) {
+ fclose(fp);
+ return NULL;
+ }
+
+ if (!MSG_IS_ENCRYPTED(msginfo->flags) &&
+ rfc2015_is_encrypted(mimeinfo_)) {
+ MSG_SET_TMP_FLAGS(msginfo->flags, MSG_ENCRYPTED);
+ }
+
+ if (MSG_IS_ENCRYPTED(msginfo->flags) &&
+ !msginfo->plaintext_file &&
+ !msginfo->decryption_failed) {
+ fpos = ftell(fp);
+ rfc2015_decrypt_message(msginfo, mimeinfo_, fp);
+ if (msginfo->plaintext_file &&
+ !msginfo->decryption_failed) {
+ fclose(fp);
+ procmime_mimeinfo_free_all(mimeinfo_);
+ if ((fp = procmsg_open_message(msginfo)) == NULL)
+ return NULL;
+ mimeinfo_ = procmime_scan_mime_header(fp);
+ if (!mimeinfo_) {
+ fclose(fp);
+ return NULL;
+ }
+ } else {
+ if (fseek(fp, fpos, SEEK_SET) < 0)
+ perror("fseek");
+ }
+ }
+
+ if (mimeinfo) *mimeinfo = mimeinfo_;
+ return fp;
+}
+
/*
* plain contains an entire mime object.