diff options
author | 2014-07-25 11:15:22 +0200 | |
---|---|---|
committer | 2014-07-25 11:15:22 +0200 | |
commit | a54b838b7f14055716b4da64ea18c5652136d052 (patch) | |
tree | 6aeb56eb94b062657d8a763c5c520a0c285633f1 /src/core | |
parent | dfc73dd7ad39d13e2cb06b2a308dbab38105c786 (diff) |
Recognize multipart/signed content type
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/abstract/MCAbstractMultipart.cc | 3 | ||||
-rw-r--r-- | src/core/abstract/MCAbstractPart.cc | 7 | ||||
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 1 | ||||
-rw-r--r-- | src/core/imap/MCIMAPMessage.cc | 1 | ||||
-rw-r--r-- | src/core/renderer/MCHTMLRenderer.cc | 3 | ||||
-rw-r--r-- | src/core/rfc822/MCAttachment.cc | 8 |
6 files changed, 23 insertions, 0 deletions
diff --git a/src/core/abstract/MCAbstractMultipart.cc b/src/core/abstract/MCAbstractMultipart.cc index e3a2f9f7..d46a0c75 100644 --- a/src/core/abstract/MCAbstractMultipart.cc +++ b/src/core/abstract/MCAbstractMultipart.cc @@ -57,6 +57,9 @@ String * AbstractMultipart::description() case PartTypeMultipartAlternative: partTypeName = "alternative"; break; + case PartTypeMultipartSigned: + partTypeName = "signed"; + break; } result->appendUTF8Format("<%s:%p %s %s>", diff --git a/src/core/abstract/MCAbstractPart.cc b/src/core/abstract/MCAbstractPart.cc index 08cd83e3..50f12249 100644 --- a/src/core/abstract/MCAbstractPart.cc +++ b/src/core/abstract/MCAbstractPart.cc @@ -294,6 +294,7 @@ void AbstractPart::applyUniquePartID() case PartTypeMultipartMixed: case PartTypeMultipartRelated: case PartTypeMultipartAlternative: + case PartTypeMultipartSigned: queue->addObjectsFromArray(((AbstractMultipart *) part)->parts()); break; } @@ -348,6 +349,9 @@ HashMap * AbstractPart::serializable() case PartTypeMultipartAlternative: partTypeStr = MCSTR("multipart/alternative"); break; + case PartTypeMultipartSigned: + partTypeStr = MCSTR("multipart/signed"); + break; } result->setObjectForKey(MCSTR("partType"), partTypeStr); @@ -386,5 +390,8 @@ void AbstractPart::importSerializable(HashMap * serializable) else if (value->isEqual(MCSTR("multipart/alternative"))) { setPartType(PartTypeMultipartAlternative); } + else if (value->isEqual(MCSTR("multipart/signed"))) { + setPartType(PartTypeMultipartSigned); + } } } diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index 42d7c332..222ca322 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -255,6 +255,7 @@ namespace mailcore { PartTypeMultipartMixed, PartTypeMultipartRelated, PartTypeMultipartAlternative, + PartTypeMultipartSigned, }; // Private type - It should not be used directly. diff --git a/src/core/imap/MCIMAPMessage.cc b/src/core/imap/MCIMAPMessage.cc index dfb26752..6cb1472c 100644 --- a/src/core/imap/MCIMAPMessage.cc +++ b/src/core/imap/MCIMAPMessage.cc @@ -185,6 +185,7 @@ static AbstractPart * partForPartIDInPart(AbstractPart * part, String * partID) case mailcore::PartTypeMultipartMixed: case mailcore::PartTypeMultipartRelated: case mailcore::PartTypeMultipartAlternative: + case mailcore::PartTypeMultipartSigned: if (partID->isEqual(((IMAPMultipart *) part)->partID())) { return part; } diff --git a/src/core/renderer/MCHTMLRenderer.cc b/src/core/renderer/MCHTMLRenderer.cc index bbc0d591..15f6ade3 100644 --- a/src/core/renderer/MCHTMLRenderer.cc +++ b/src/core/renderer/MCHTMLRenderer.cc @@ -147,6 +147,7 @@ static bool partContainsMimeType(AbstractPart * part, String * mimeType) case PartTypeMultipartMixed: case PartTypeMultipartRelated: case PartTypeMultipartAlternative: + case PartTypeMultipartSigned: return multipartContainsMimeType((AbstractMultipart *) part, mimeType); default: return false; @@ -254,6 +255,8 @@ static String * htmlForAbstractPart(AbstractPart * part, htmlRendererContext * c return htmlForAbstractMultipartRelated((AbstractMultipart *) part, context); case PartTypeMultipartAlternative: return htmlForAbstractMultipartAlternative((AbstractMultipart *) part, context); + case PartTypeMultipartSigned: + return htmlForAbstractMultipartMixed((AbstractMultipart *) part, context); default: MCAssert(0); } diff --git a/src/core/rfc822/MCAttachment.cc b/src/core/rfc822/MCAttachment.cc index 331d7d28..d016ad0e 100644 --- a/src/core/rfc822/MCAttachment.cc +++ b/src/core/rfc822/MCAttachment.cc @@ -341,6 +341,14 @@ AbstractPart * Attachment::attachmentsWithMIMEWithMain(struct mailmime * mime, b fillMultipartSubAttachments(attachment, mime); return (Multipart *) attachment->autorelease(); } + else if ((mime->mm_content_type != NULL) && (mime->mm_content_type->ct_subtype != NULL) && + (strcasecmp(mime->mm_content_type->ct_subtype, "signed") == 0)) { + Multipart * attachment; + attachment = new Multipart(); + attachment->setPartType(PartTypeMultipartSigned); + fillMultipartSubAttachments(attachment, mime); + return (Multipart *) attachment->autorelease(); + } else { Multipart * attachment; attachment = new Multipart(); |