aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/abstract/MCAbstractPart.cc51
-rw-r--r--src/core/abstract/MCAbstractPart.h7
-rw-r--r--src/core/abstract/MCMessageHeader.cc35
-rw-r--r--src/core/abstract/MCMessageHeader.h1
-rw-r--r--src/core/basetypes/MCIterator.h4
-rw-r--r--src/core/rfc822/MCAttachment.cc60
-rw-r--r--src/core/rfc822/MCAttachment.h7
7 files changed, 73 insertions, 92 deletions
diff --git a/src/core/abstract/MCAbstractPart.cc b/src/core/abstract/MCAbstractPart.cc
index 50f12249..5b7a1c9a 100644
--- a/src/core/abstract/MCAbstractPart.cc
+++ b/src/core/abstract/MCAbstractPart.cc
@@ -27,6 +27,7 @@ AbstractPart::AbstractPart(AbstractPart * other)
setContentDescription(other->mContentDescription);
setInlineAttachment(other->mInlineAttachment);
setPartType(other->mPartType);
+ setContentTypeParameters(other->mContentTypeParameters);
}
void AbstractPart::init()
@@ -40,6 +41,7 @@ void AbstractPart::init()
mContentDescription = NULL;
mInlineAttachment = false;
mPartType = PartTypeSingle;
+ mContentTypeParameters = NULL;
}
AbstractPart::~AbstractPart()
@@ -51,6 +53,7 @@ AbstractPart::~AbstractPart()
MC_SAFE_RELEASE(mContentID);
MC_SAFE_RELEASE(mContentLocation);
MC_SAFE_RELEASE(mContentDescription);
+ MC_SAFE_RELEASE(mContentTypeParameters);
}
String * AbstractPart::description()
@@ -76,6 +79,11 @@ String * AbstractPart::description()
result->appendUTF8Format("content-description: %s\n", mContentDescription->UTF8Characters());
}
result->appendUTF8Format("inline: %i\n", mInlineAttachment);
+ if (mContentTypeParameters != NULL) {
+ mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) {
+ result->appendUTF8Format("%s: %s\n", key->UTF8Characters(), value->UTF8Characters());
+ }
+ }
result->appendUTF8Format(">");
return result;
@@ -395,3 +403,46 @@ void AbstractPart::importSerializable(HashMap * serializable)
}
}
}
+
+void AbstractPart::setContentTypeParameters(HashMap * parameters)
+{
+ MC_SAFE_REPLACE_COPY(HashMap, mContentTypeParameters, parameters);
+}
+
+Array * AbstractPart::allContentTypeParametersNames()
+{
+ if (mContentTypeParameters == NULL)
+ return Array::array();
+ return mContentTypeParameters->allKeys();
+}
+
+void AbstractPart::setContentTypeParameter(String * name, String * object)
+{
+ if (mContentTypeParameters == NULL) {
+ mContentTypeParameters = new HashMap();
+ }
+ removeContentTypeParameter(name);
+ mContentTypeParameters->setObjectForKey(name, object);
+}
+
+void AbstractPart::removeContentTypeParameter(String * name)
+{
+ if (mContentTypeParameters == NULL)
+ return;
+ mc_foreachhashmapKey(String, key, mContentTypeParameters) {
+ if (key->isEqualCaseInsensitive(name)) {
+ mContentTypeParameters->removeObjectForKey(key);
+ break;
+ }
+ }
+}
+
+String * AbstractPart::contentTypeParameterValueForName(String * name)
+{
+ mc_foreachhashmapKey(String, key, mContentTypeParameters) {
+ if (key->isEqualCaseInsensitive(name)) {
+ return (String *) mContentTypeParameters->objectForKey(key);
+ }
+ }
+ return NULL;
+}
diff --git a/src/core/abstract/MCAbstractPart.h b/src/core/abstract/MCAbstractPart.h
index 7f641205..0fcbf279 100644
--- a/src/core/abstract/MCAbstractPart.h
+++ b/src/core/abstract/MCAbstractPart.h
@@ -48,6 +48,12 @@ namespace mailcore {
virtual String * decodedStringForData(Data * data);
+ void setContentTypeParameters(HashMap * parameters);
+ Array * allContentTypeParametersNames();
+ void setContentTypeParameter(String * name, String * object);
+ void removeContentTypeParameter(String * name);
+ String * contentTypeParameterValueForName(String * name);
+
public: // subclass behavior
AbstractPart(AbstractPart * other);
virtual String * description();
@@ -70,6 +76,7 @@ namespace mailcore {
String * mContentDescription;
bool mInlineAttachment;
PartType mPartType;
+ HashMap * mContentTypeParameters;
void init();
};
diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc
index 6e8d2c09..89dec15c 100644
--- a/src/core/abstract/MCMessageHeader.cc
+++ b/src/core/abstract/MCMessageHeader.cc
@@ -62,7 +62,6 @@ void MessageHeader::init(bool generateDate, bool generateMessageID)
mDate = (time_t) -1;
mReceivedDate = (time_t) -1;
mExtraHeaders = NULL;
- mlcExtraHeaders = NULL;
if (generateDate) {
time_t date;
@@ -116,7 +115,6 @@ MessageHeader::~MessageHeader()
MC_SAFE_RELEASE(mReplyTo);
MC_SAFE_RELEASE(mSubject);
MC_SAFE_RELEASE(mExtraHeaders);
- MC_SAFE_RELEASE(mlcExtraHeaders);
}
String * MessageHeader::description()
@@ -307,13 +305,6 @@ String * MessageHeader::userAgent()
void MessageHeader::setExtraHeaders(HashMap * headers)
{
MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers);
- MC_SAFE_RELEASE(mlcExtraHeaders);
- if (mExtraHeaders != NULL) {
- mlcExtraHeaders = new HashMap();
- mc_foreachhashmapKeyAndValue(String, key, String, value, mExtraHeaders) {
- mlcExtraHeaders->setObjectForKey(key->lowercaseString(), value);
- }
- }
}
Array * MessageHeader::allExtraHeadersNames()
@@ -328,30 +319,30 @@ void MessageHeader::setExtraHeader(String * name, String * object)
if (mExtraHeaders == NULL) {
mExtraHeaders = new HashMap();
}
- if (mlcExtraHeaders == NULL) {
- mlcExtraHeaders = new HashMap();
- }
- if (object == NULL) {
- removeExtraHeader(name);
- return;
- }
+ removeExtraHeader(name);
mExtraHeaders->setObjectForKey(name, object);
- mlcExtraHeaders->setObjectForKey(name->lowercaseString(), object);
}
void MessageHeader::removeExtraHeader(String * name)
{
if (mExtraHeaders == NULL)
return;
- mExtraHeaders->removeObjectForKey(name);
- mlcExtraHeaders->removeObjectForKey(name);
+ mc_foreachhashmapKey(String, key, mExtraHeaders) {
+ if (key->isEqualCaseInsensitive(name)) {
+ mExtraHeaders->removeObjectForKey(key);
+ break;
+ }
+ }
}
String * MessageHeader::extraHeaderValueForName(String * name)
{
- if (mlcExtraHeaders == NULL)
- return NULL;
- return (String *) mlcExtraHeaders->objectForKey(name->lowercaseString());
+ mc_foreachhashmapKey(String, key, mExtraHeaders) {
+ if (key->isEqualCaseInsensitive(name)) {
+ return (String *) mExtraHeaders->objectForKey(key);
+ }
+ }
+ return NULL;
}
String * MessageHeader::extractedSubject()
diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h
index 51b1e2f7..4018343c 100644
--- a/src/core/abstract/MCMessageHeader.h
+++ b/src/core/abstract/MCMessageHeader.h
@@ -99,7 +99,6 @@ namespace mailcore {
time_t mDate;
time_t mReceivedDate;
HashMap * mExtraHeaders;
- HashMap * mlcExtraHeaders;
void init(bool generateDate, bool generateMessageID);
void setExtraHeaders(HashMap *headers);
Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails);
diff --git a/src/core/basetypes/MCIterator.h b/src/core/basetypes/MCIterator.h
index c8b23fab..e1f258d4 100644
--- a/src/core/basetypes/MCIterator.h
+++ b/src/core/basetypes/MCIterator.h
@@ -32,13 +32,13 @@ for (unsigned int __index = 0; NULL != (__variable = (type *) mailcore::ArrayIte
keyType * __key; \
HashMapIterator __key##__iterator = HashMapIteratorInit(__hashmap, true, false); \
while (HashMapIteratorRun(&__key##__iterator)) \
-while (HashMapIteratorNext(&__key##__iterator, &__key, NULL))
+while (HashMapIteratorNext(&__key##__iterator, (Object **) &__key, (Object **) NULL))
#define mc_foreachhashmapValue(valueType, __value, __hashmap) \
valueType * __value; \
HashMapIterator __value##__iterator = HashMapIteratorInit(__hashmap, false, true); \
while (HashMapIteratorRun(&__value##__iterator)) \
-while (HashMapIteratorNext(&__value##__iterator, NULL, (Object **) &__value))
+while (HashMapIteratorNext(&__value##__iterator, (Object **) NULL, (Object **) &__value))
#define mc_foreachhashmapKeyAndValue(keyType, __key, valueType, __value, __hashmap) \
keyType * __key; \
diff --git a/src/core/rfc822/MCAttachment.cc b/src/core/rfc822/MCAttachment.cc
index 172881cb..eae40cb0 100644
--- a/src/core/rfc822/MCAttachment.cc
+++ b/src/core/rfc822/MCAttachment.cc
@@ -211,8 +211,6 @@ Attachment * Attachment::attachmentWithText(String * text)
void Attachment::init()
{
mData = NULL;
- mContentTypeParameters = NULL;
- mlcContentTypeParameters = NULL;
setMimeType(MCSTR("application/octet-stream"));
}
@@ -225,14 +223,11 @@ Attachment::Attachment(Attachment * other) : AbstractPart(other)
{
init();
MC_SAFE_REPLACE_RETAIN(Data, mData, other->mData);
- setContentTypeParameters(other->mContentTypeParameters);
}
Attachment::~Attachment()
{
MC_SAFE_RELEASE(mData);
- MC_SAFE_RELEASE(mContentTypeParameters);
- MC_SAFE_RELEASE(mlcContentTypeParameters);
}
String * Attachment::description()
@@ -261,11 +256,6 @@ String * Attachment::description()
else {
result->appendUTF8Format("no data\n");
}
- if (mContentTypeParameters != NULL) {
- mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) {
- result->appendUTF8Format("%s: %s\n", key->UTF8Characters(), value->UTF8Characters());
- }
- }
result->appendUTF8Format(">");
return result;
@@ -296,56 +286,6 @@ String * Attachment::decodedString()
}
}
-void Attachment::setContentTypeParameters(HashMap * parameters)
-{
- MC_SAFE_REPLACE_COPY(HashMap, mContentTypeParameters, parameters);
- MC_SAFE_RELEASE(mlcContentTypeParameters);
- if (mContentTypeParameters != NULL) {
- mlcContentTypeParameters = new HashMap();
- mc_foreachhashmapKeyAndValue(String, key, String, value, mContentTypeParameters) {
- mlcContentTypeParameters->setObjectForKey(key->lowercaseString(), value);
- }
- }
-}
-
-Array * Attachment::allContentTypeParametersNames()
-{
- if (mContentTypeParameters == NULL)
- return Array::array();
- return mContentTypeParameters->allKeys();
-}
-
-void Attachment::setContentTypeParameter(String * name, String * object)
-{
- if (mContentTypeParameters == NULL) {
- mContentTypeParameters = new HashMap();
- }
- if (mlcContentTypeParameters == NULL) {
- mlcContentTypeParameters = new HashMap();
- }
- if (object == NULL) {
- removeContentTypeParameter(name);
- return;
- }
- mContentTypeParameters->setObjectForKey(name, object);
- mlcContentTypeParameters->setObjectForKey(name->lowercaseString(), object);
-}
-
-void Attachment::removeContentTypeParameter(String * name)
-{
- if (mContentTypeParameters == NULL)
- return;
- mContentTypeParameters->removeObjectForKey(name);
- mlcContentTypeParameters->removeObjectForKey(name);
-}
-
-String * Attachment::contentTypeParameterValueForName(String * name)
-{
- if (mlcContentTypeParameters == NULL)
- return NULL;
- return (String *) mlcContentTypeParameters->objectForKey(name->lowercaseString());
-}
-
AbstractPart * Attachment::attachmentsWithMIME(struct mailmime * mime)
{
return attachmentsWithMIMEWithMain(mime, true);
diff --git a/src/core/rfc822/MCAttachment.h b/src/core/rfc822/MCAttachment.h
index 069688f2..2217bc4c 100644
--- a/src/core/rfc822/MCAttachment.h
+++ b/src/core/rfc822/MCAttachment.h
@@ -29,11 +29,6 @@ namespace mailcore {
virtual Data * data();
virtual String * decodedString();
- virtual void setContentTypeParameter(String * name, String * value);
- virtual void removeContentTypeParameter(String * name);
- virtual String * contentTypeParameterValueForName(String *name);
- virtual Array * allContentTypeParametersNames();
-
public: // subclass behavior
Attachment(Attachment * other);
virtual String * description();
@@ -44,8 +39,6 @@ namespace mailcore {
private:
Data * mData;
- HashMap * mContentTypeParameters;
- HashMap * mlcContentTypeParameters;
void init();
static void fillMultipartSubAttachments(AbstractMultipart * multipart, struct mailmime * mime);
static AbstractPart * attachmentsWithMIMEWithMain(struct mailmime * mime, bool isMain);