summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2010-09-07 20:18:52 (GMT)
committerMark Brand <mabrand@mabrand.nl>2010-09-07 20:18:52 (GMT)
commitb3da2fc9bb6e3fa30c71f8d95b256f8a66a1067d (patch)
tree214a762f1827a81c3f83d1aede92cccfceba0844
parent5aabdb94dfdd403e43adebfd8e3c5156eed2ab86 (diff)
downloadmxe-b3da2fc9bb6e3fa30c71f8d95b256f8a66a1067d.zip
mxe-b3da2fc9bb6e3fa30c71f8d95b256f8a66a1067d.tar.gz
mxe-b3da2fc9bb6e3fa30c71f8d95b256f8a66a1067d.tar.bz2
upgrade package vmime
-rw-r--r--src/vmime-1-fastforward.patch258
1 files changed, 258 insertions, 0 deletions
diff --git a/src/vmime-1-fastforward.patch b/src/vmime-1-fastforward.patch
index c1769ae..d6a3ef1 100644
--- a/src/vmime-1-fastforward.patch
+++ b/src/vmime-1-fastforward.patch
@@ -17304,3 +17304,261 @@ index d923e68..91a7e5c 100644
break;
}
+
+commit a5a7e03fd144e6c46e5418f8bdd0e3f754bd980f
+Author: vincent-richard <vincent-richard@5301114d-f842-0410-bbdd-996ee0417009>
+Date: Tue Sep 7 10:46:24 2010 +0000
+
+ Added an option to recognize inline objects as attachments.
+
+ git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@565 5301114d-f842-0410-bbdd-996ee0417009
+
+diff --git a/src/attachmentHelper.cpp b/src/attachmentHelper.cpp
+index 65e8c88..c23ee95 100644
+--- a/src/attachmentHelper.cpp
++++ b/src/attachmentHelper.cpp
+@@ -36,7 +36,8 @@ namespace vmime
+
+
+ // static
+-bool attachmentHelper::isBodyPartAnAttachment(ref <const bodyPart> part)
++bool attachmentHelper::isBodyPartAnAttachment
++ (ref <const bodyPart> part, const unsigned int options)
+ {
+ try
+ {
+@@ -49,54 +50,63 @@ bool attachmentHelper::isBodyPartAnAttachment(ref <const bodyPart> part)
+ if (disp.getName() != contentDispositionTypes::INLINE)
+ return true;
+
+- // If the Content-Disposition is 'inline' and there is no
+- // Content-Id or Content-Location field, it may be an attachment
+- if (!part->getHeader()->hasField(vmime::fields::CONTENT_ID) &&
+- !part->getHeader()->hasField(vmime::fields::CONTENT_LOCATION))
++ if ((options & INLINE_OBJECTS) == 0)
+ {
+- // If this is the root part, it might not be an attachment
+- if (part->getParentPart() == NULL)
+- return false;
++ // If the Content-Disposition is 'inline' and there is no
++ // Content-Id or Content-Location field, it may be an attachment
++ if (!part->getHeader()->hasField(vmime::fields::CONTENT_ID) &&
++ !part->getHeader()->hasField(vmime::fields::CONTENT_LOCATION))
++ {
++ // If this is the root part, it might not be an attachment
++ if (part->getParentPart() == NULL)
++ return false;
+
+- return true;
++ return true;
++ }
++
++ return false;
+ }
+ }
+ catch (exceptions::no_such_field&)
+ {
+- // No "Content-disposition" field: assume "attachment" if
+- // type is not "text/..." or "multipart/...".
+- mediaType type;
++ // Will try using Content-Type
++ }
+
+- try
+- {
+- const contentTypeField& ctf = dynamic_cast<contentTypeField&>
+- (*part->getHeader()->findField(fields::CONTENT_TYPE));
++ // Assume "attachment" if type is not "text/..." or "multipart/...".
++ mediaType type;
+
+- type = *ctf.getValue().dynamicCast <const mediaType>();
+- }
+- catch (exceptions::no_such_field&)
+- {
+- // If this is the root part and no Content-Type field is present,
+- // then this may not be a MIME message, so do not assume it is
+- // an attachment
+- if (part->getParentPart() == NULL)
+- return false;
++ try
++ {
++ const contentTypeField& ctf = dynamic_cast<contentTypeField&>
++ (*part->getHeader()->findField(fields::CONTENT_TYPE));
+
+- // No "Content-type" field: assume "application/octet-stream".
+- type = mediaType(mediaTypes::APPLICATION,
+- mediaTypes::APPLICATION_OCTET_STREAM);
+- }
++ type = *ctf.getValue().dynamicCast <const mediaType>();
++ }
++ catch (exceptions::no_such_field&)
++ {
++ // If this is the root part and no Content-Type field is present,
++ // then this may not be a MIME message, so do not assume it is
++ // an attachment
++ if (part->getParentPart() == NULL)
++ return false;
++
++ // No "Content-type" field: assume "application/octet-stream".
++ type = mediaType(mediaTypes::APPLICATION,
++ mediaTypes::APPLICATION_OCTET_STREAM);
++ }
+
+- if (type.getType() != mediaTypes::TEXT &&
+- type.getType() != mediaTypes::MULTIPART)
++ if (type.getType() != mediaTypes::TEXT &&
++ type.getType() != mediaTypes::MULTIPART)
++ {
++ if ((options & INLINE_OBJECTS) == 0)
+ {
+ // If a "Content-Id" field is present, it might be an
+ // embedded object (MHTML messages)
+ if (part->getHeader()->hasField(vmime::fields::CONTENT_ID))
+ return false;
+-
+- return true;
+ }
++
++ return true;
+ }
+
+ return false;
+@@ -104,10 +114,10 @@ bool attachmentHelper::isBodyPartAnAttachment(ref <const bodyPart> part)
+
+
+ // static
+-ref <const attachment>
+- attachmentHelper::getBodyPartAttachment(ref <const bodyPart> part)
++ref <const attachment> attachmentHelper::getBodyPartAttachment
++ (ref <const bodyPart> part, const unsigned int options)
+ {
+- if (!isBodyPartAnAttachment(part))
++ if (!isBodyPartAnAttachment(part, options))
+ return NULL;
+
+ mediaType type;
+@@ -140,22 +150,24 @@ ref <const attachment>
+
+ // static
+ const std::vector <ref <const attachment> >
+- attachmentHelper::findAttachmentsInMessage(ref <const message> msg)
++ attachmentHelper::findAttachmentsInMessage
++ (ref <const message> msg, const unsigned int options)
+ {
+- return findAttachmentsInBodyPart(msg);
++ return findAttachmentsInBodyPart(msg, options);
+ }
+
+
+ // static
+ const std::vector <ref <const attachment> >
+- attachmentHelper::findAttachmentsInBodyPart(ref <const bodyPart> part)
++ attachmentHelper::findAttachmentsInBodyPart
++ (ref <const bodyPart> part, const unsigned int options)
+ {
+ std::vector <ref <const attachment> > atts;
+
+ // Test this part
+- if (isBodyPartAnAttachment(part))
++ if (isBodyPartAnAttachment(part, options))
+ {
+- atts.push_back(getBodyPartAttachment(part));
++ atts.push_back(getBodyPartAttachment(part, options));
+ }
+ // Find in sub-parts
+ else
+@@ -165,7 +177,7 @@ const std::vector <ref <const attachment> >
+ for (int i = 0 ; i < bdy->getPartCount() ; ++i)
+ {
+ std::vector <ref <const attachment> > partAtts =
+- findAttachmentsInBodyPart(bdy->getPartAt(i));
++ findAttachmentsInBodyPart(bdy->getPartAt(i), options);
+
+ std::copy(partAtts.begin(), partAtts.end(), std::back_inserter(atts));
+ }
+diff --git a/vmime/attachmentHelper.hpp b/vmime/attachmentHelper.hpp
+index 3ce86c8..a383367 100644
+--- a/vmime/attachmentHelper.hpp
++++ b/vmime/attachmentHelper.hpp
+@@ -30,10 +30,6 @@
+ #include "vmime/attachment.hpp"
+ #include "vmime/message.hpp"
+
+-#if VMIME_HAVE_MESSAGING_FEATURES
+- #include "vmime/net/message.hpp"
+-#endif
+-
+
+ namespace vmime
+ {
+@@ -45,31 +41,57 @@ class attachmentHelper
+ {
+ public:
+
++ /** Options for use with the following functions:
++ * findAttachmentsInMessage,
++ * getBodyPartAttachment,
++ * and isBodyPartAnAttachment.
++ */
++ enum FindOptions
++ {
++ INLINE_OBJECTS = (1 << 0) /**< Recognize and return inline objects. The aim is to
++ consider MHTML objects (parts with a "Content-Id" or
++ a "Content-Location", such as inline images) as attachments. */
++ };
++
+ /** Test whether a body part is an attachment.
+ *
+ * @param part message part to test
++ * @param options search options (see FindOptions)
+ * @return true if the part is an attachment, false otherwise
+ */
+- static bool isBodyPartAnAttachment(ref <const bodyPart> part);
++ static bool isBodyPartAnAttachment(ref <const bodyPart> part, const unsigned int options = 0);
+
+ /** Return attachment information in the specified body part.
+ * If the specified body part does not contain attachment
+ * information (ie. is not an attachment), NULL is returned.
+ *
+ * @param part message part in which to search
++ * @param options search options (see FindOptions)
+ * @return attachment found in the part, or NULL
+ */
+ static ref <const attachment>
+- getBodyPartAttachment(ref <const bodyPart> part);
++ getBodyPartAttachment(ref <const bodyPart> part, const unsigned int options = 0);
++
++ /** Find all attachments contained in the specified part
++ * and all its children parts.
++ * This is simply a recursive call to getBodyPartAttachment().
++ *
++ * @param part part in which to search
++ * @param options search options (see FindOptions)
++ * @return a list of attachments found
++ */
++ static const std::vector <ref <const attachment> >
++ findAttachmentsInBodyPart(ref <const bodyPart> part, const unsigned int options = 0);
+
+ /** Find all attachments contained in the specified message.
+ * This is simply a recursive call to getBodyPartAttachment().
+ *
+ * @param msg message in which to search
++ * @param options search options (see FindOptions)
+ * @return a list of attachments found
+ */
+ static const std::vector <ref <const attachment> >
+- findAttachmentsInMessage(ref <const message> msg);
++ findAttachmentsInMessage(ref <const message> msg, const unsigned int options = 0);
+
+ /** Add an attachment to the specified message.
+ *
+@@ -87,9 +109,6 @@ public:
+
+ protected:
+
+- static const std::vector <ref <const attachment> >
+- findAttachmentsInBodyPart(ref <const bodyPart> part);
+-
+ static ref <bodyPart> findBodyPart
+ (ref <bodyPart> part, const mediaType& type);
+ };