aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2013-02-08 13:23:48 +0000
committerVincent Richard <[email protected]>2013-02-08 13:23:48 +0000
commit173c665e0cefde28ef37034a36031aab96c64ae7 (patch)
tree0b8753efa69abf06b7b75edbcc16c70b16a4ae79
parentFixed linking with pthread library. (diff)
downloadvmime-173c665e0cefde28ef37034a36031aab96c64ae7.tar.gz
vmime-173c665e0cefde28ef37034a36031aab96c64ae7.zip
Additional MDN fields (thanks to Mehmet Bozkurt).
-rw-r--r--src/mdn/MDNHelper.cpp43
-rw-r--r--vmime/mdn/MDNHelper.hpp9
2 files changed, 46 insertions, 6 deletions
diff --git a/src/mdn/MDNHelper.cpp b/src/mdn/MDNHelper.cpp
index ff5924b1..533813b1 100644
--- a/src/mdn/MDNHelper.cpp
+++ b/src/mdn/MDNHelper.cpp
@@ -66,7 +66,7 @@ const std::vector <sendableMDNInfos> MDNHelper::getPossibleMDNs(const ref <const
const mailboxList& dnto = *hdr->DispositionNotificationTo()->getValue()
.dynamicCast <const mailboxList>();
- for (int i = 0 ; i < dnto.getMailboxCount() ; ++i)
+ for (size_t i = 0 ; i < dnto.getMailboxCount() ; ++i)
result.push_back(sendableMDNInfos(msg, *dnto.getMailboxAt(i)));
}
@@ -151,7 +151,8 @@ ref <message> MDNHelper::buildMDN(const sendableMDNInfos& mdnInfos,
const mailbox& expeditor,
const disposition& dispo,
const string& reportingUA,
- const std::vector <string>& reportingUAProducts)
+ const std::vector <string>& reportingUAProducts,
+ const std::map <string, string>& fields)
{
// Create a new message
ref <message> msg = vmime::create <message>();
@@ -178,7 +179,7 @@ ref <message> MDNHelper::buildMDN(const sendableMDNInfos& mdnInfos,
msg->getBody()->appendPart(createFirstMDNPart(mdnInfos, text, ch));
msg->getBody()->appendPart(createSecondMDNPart(mdnInfos,
- dispo, reportingUA, reportingUAProducts));
+ dispo, reportingUA, reportingUAProducts, fields));
msg->getBody()->appendPart(createThirdMDNPart(mdnInfos));
return (msg);
@@ -208,7 +209,8 @@ ref <bodyPart> MDNHelper::createFirstMDNPart(const sendableMDNInfos& /* mdnInfos
ref <bodyPart> MDNHelper::createSecondMDNPart(const sendableMDNInfos& mdnInfos,
const disposition& dispo,
const string& reportingUA,
- const std::vector <string>& reportingUAProducts)
+ const std::vector <string>& reportingUAProducts,
+ const std::map <string, string>& additionalFields)
{
ref <bodyPart> part = vmime::create <bodyPart>();
@@ -281,6 +283,39 @@ ref <bodyPart> MDNHelper::createSecondMDNPart(const sendableMDNInfos& mdnInfos,
// -- Disposition
fields.Disposition()->setValue(dispo);
+ // -- Failure, Error and Warning fields
+ std::map <string, string>::const_iterator it;
+
+ if (additionalFields.size() > 0)
+ {
+ it = additionalFields.find(vmime::fields::ERROR);
+ if (it != additionalFields.end())
+ {
+ ref <headerField> error = headerFieldFactory::getInstance()->
+ create(vmime::fields::ERROR);
+ error->setValue(it->second);
+ fields.appendField(error);
+ }
+
+ it = additionalFields.find(vmime::fields::WARNING);
+ if (it != additionalFields.end())
+ {
+ ref <headerField> warn = headerFieldFactory::getInstance()->
+ create(vmime::fields::WARNING);
+ warn->setValue(it->second);
+ fields.appendField(warn);
+ }
+
+ it = additionalFields.find(vmime::fields::FAILURE);
+ if (it != additionalFields.end())
+ {
+ ref <headerField> fail = headerFieldFactory::getInstance()->
+ create(vmime::fields::FAILURE);
+ fail->setValue(it->second);
+ fields.appendField(fail);
+ }
+ }
+
std::ostringstream oss;
utility::outputStreamAdapter vos(oss);
diff --git a/vmime/mdn/MDNHelper.hpp b/vmime/mdn/MDNHelper.hpp
index 4e2027ca..d06c47ce 100644
--- a/vmime/mdn/MDNHelper.hpp
+++ b/vmime/mdn/MDNHelper.hpp
@@ -102,6 +102,7 @@ public:
* @param dispo disposition information
* @param reportingUA name of reporting user-agent (optional)
* @param reportingUAProducts list of products in the reporting user-agent (optional)
+ * @param fields additional MDN fields, like "Error", "Warning" or "Failure" (optional)
* @return a new message object containing the MDN
*/
static ref <message> buildMDN(const sendableMDNInfos& mdnInfos,
@@ -111,7 +112,9 @@ public:
const disposition& dispo,
const string& reportingUA = NULL_STRING,
const std::vector <string>& reportingUAProducts
- = std::vector <string>());
+ = std::vector <string>(),
+ const std::map <string, string>& fields
+ = (std::map <string, string>()));
private:
@@ -121,7 +124,9 @@ private:
static ref <bodyPart> createSecondMDNPart(const sendableMDNInfos& mdnInfos,
const disposition& dispo,
const string& reportingUA,
- const std::vector <string>& reportingUAProducts);
+ const std::vector <string>& reportingUAProducts,
+ const std::map <string, string>& fields);
+
static ref <bodyPart> createThirdMDNPart(const sendableMDNInfos& mdnInfos);
};