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

Reply via email to