Update of /cvsroot/mahogany/M/src/mail
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29655/src/mail
Modified Files:
MimePartVirtual.cpp
Log Message:
implemented full support for showing PGP/MIME encoded messages (i.e. arbitrary MIME
structure inside encoded part)
Index: MimePartVirtual.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/mail/MimePartVirtual.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -b -u -2 -r1.2 -r1.3
--- MimePartVirtual.cpp 13 Jul 2004 23:51:48 -0000 1.2
+++ MimePartVirtual.cpp 16 Jul 2004 23:43:55 -0000 1.3
@@ -29,4 +29,11 @@
#include "MimePartVirtual.h"
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// strlen("\r\n")
+static const size_t lenEOL = 2;
+
// ============================================================================
// MimePartVirtual implementation
@@ -37,8 +44,14 @@
// ----------------------------------------------------------------------------
+// ctor for top level part
MimePartVirtual::MimePartVirtual(const String& msgText)
: m_msgText(msgText)
{
- m_lenHeader = 0;
+ m_pStart = m_msgText;
+
+ m_env = NULL;
+
+ m_lenHeader =
+ m_lenBody = 0;
if ( !CclientParseMessage(msgText, &m_env, &m_body, &m_lenHeader) )
@@ -46,4 +59,66 @@
// no idea what is user supposed to make out of this message...
wxLogError(_("Failed to create a virtual MIME part."));
+
+ return;
+ }
+
+ m_lenBody = m_msgText.length() - m_lenHeader - lenEOL;
+
+ CreateSubParts();
+}
+
+MimePartVirtual::MimePartVirtual(BODY *body,
+ MimePartVirtual *parent,
+ size_t nPart,
+ const char *pHeader)
+{
+ m_env = NULL;
+
+ Create(body, parent, nPart);
+
+ m_pStart = pHeader + body->mime.offset;
+ m_lenHeader = body->mime.text.size - lenEOL;
+ m_lenBody = body->contents.text.size;
+
+ CreateSubParts();
+}
+
+void MimePartVirtual::CreateSubParts()
+{
+ // set up the nested parts, if any
+ switch ( m_body->type )
+ {
+ case TYPEMULTIPART:
+ {
+ // NB: message parts are counted from 1
+ size_t n = 1;
+ MimePartCCBase **prev = &m_nested;
+ const char *pStart = GetBodyStart();
+ for ( PART *part = m_body->nested.part; part; part = part->next )
+ {
+ *prev = new MimePartVirtual(&part->body, this, n++, pStart);
+
+ // static_cast<> needed to access protected member
+ prev = &(static_cast<MimePartVirtual *>(*prev)->m_next);
+ }
+ }
+ break;
+
+ case TYPEMESSAGE:
+ {
+ mail_body_message *msg = m_body->nested.msg;
+ if ( !msg )
+ {
+ wxLogError(_("Corrupted nested message."));
+ break;
+ }
+
+ m_nested = new MimePartVirtual(msg->body, this, 1, GetBodyStart());
+ }
+ break;
+
+ default:
+ // a simple part, nothing to do
+ ;
}
}
@@ -51,6 +126,10 @@
MimePartVirtual::~MimePartVirtual()
{
+ // only the top level part frees the cclient structures
+ if ( !m_parent )
+ {
mail_free_envelope(&m_env);
mail_free_body(&m_body);
+ }
}
@@ -61,15 +140,13 @@
String MimePartVirtual::GetHeaders() const
{
- return String(m_msgText, m_lenHeader);
+ return String(m_pStart, m_lenHeader);
}
const void *MimePartVirtual::GetRawContent(unsigned long *len) const
{
- size_t lenHeader = m_lenHeader + 2; // +2 for "\r\n"
-
if ( len )
- *len = m_msgText.length() - lenHeader;
+ *len = m_lenBody;
- return m_msgText.c_str() + lenHeader;
+ return GetBodyStart();
}
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates