aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Maksim Bauer <m.bauer@zertificon.com>2014-07-25 11:15:22 +0200
committerGravatar Maksim Bauer <m.bauer@zertificon.com>2014-07-25 11:15:22 +0200
commita54b838b7f14055716b4da64ea18c5652136d052 (patch)
tree6aeb56eb94b062657d8a763c5c520a0c285633f1 /src/core
parentdfc73dd7ad39d13e2cb06b2a308dbab38105c786 (diff)
Recognize multipart/signed content type
Diffstat (limited to 'src/core')
-rw-r--r--src/core/abstract/MCAbstractMultipart.cc3
-rw-r--r--src/core/abstract/MCAbstractPart.cc7
-rw-r--r--src/core/abstract/MCMessageConstants.h1
-rw-r--r--src/core/imap/MCIMAPMessage.cc1
-rw-r--r--src/core/renderer/MCHTMLRenderer.cc3
-rw-r--r--src/core/rfc822/MCAttachment.cc8
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();