aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/abstract/MCMessageHeader.cc36
-rw-r--r--src/core/abstract/MCMessageHeader.h9
-rw-r--r--src/core/basetypes/MCHashMap.cc9
-rw-r--r--src/core/basetypes/MCHashMap.h12
4 files changed, 52 insertions, 14 deletions
diff --git a/src/core/abstract/MCMessageHeader.cc b/src/core/abstract/MCMessageHeader.cc
index ac792111..a91396e5 100644
--- a/src/core/abstract/MCMessageHeader.cc
+++ b/src/core/abstract/MCMessageHeader.cc
@@ -45,6 +45,7 @@ MessageHeader::MessageHeader(MessageHeader * other)
setDate(other->date());
setReceivedDate(other->receivedDate());
setUserAgent(other->mUserAgent);
+ setExtraHeaders(other->mExtraHeaders);
}
void MessageHeader::init(bool generateDate, bool generateMessageID)
@@ -62,6 +63,7 @@ void MessageHeader::init(bool generateDate, bool generateMessageID)
mDate = (time_t) -1;
mReceivedDate = (time_t) -1;
mUserAgent = NULL;
+ mExtraHeaders = NULL;
if (generateDate) {
time_t date;
@@ -113,6 +115,7 @@ MessageHeader::~MessageHeader()
MC_SAFE_RELEASE(mReplyTo);
MC_SAFE_RELEASE(mSubject);
MC_SAFE_RELEASE(mUserAgent);
+ MC_SAFE_RELEASE(mExtraHeaders);
}
String * MessageHeader::description()
@@ -292,6 +295,24 @@ String * MessageHeader::userAgent()
return mUserAgent;
}
+void MessageHeader::setExtraHeaders(HashMap * headers) {
+ MC_SAFE_REPLACE_COPY(HashMap, mExtraHeaders, headers);
+}
+
+void MessageHeader::addHeader(String * header, String * value) {
+ if (!mExtraHeaders) {
+ mExtraHeaders = new HashMap();
+ }
+ mExtraHeaders->setObjectForKey(header, value);
+}
+
+String * MessageHeader::getHeader(String *header) {
+ if (mExtraHeaders) {
+ return (String *)mExtraHeaders->objectForKey(header);
+ }
+ return NULL;
+}
+
String * MessageHeader::extractedSubject()
{
if (subject() == NULL)
@@ -822,6 +843,21 @@ struct mailimf_fields * MessageHeader::createIMFFieldsAndFilterBcc(bool filterBc
field = mailimf_field_new_custom(strdup("X-Mailer"), strdup(mUserAgent->UTF8Characters()));
mailimf_fields_add(fields, field);
}
+
+ if (mExtraHeaders != NULL) {
+ HashMapIter *iter;
+
+ for (iter = mExtraHeaders->iteratorBegin(); iter != NULL; iter = mExtraHeaders->iteratorNext(iter)) {
+ struct mailimf_field * field;
+ String * key;
+ String * value;
+
+ key = (String *)iter->key;
+ value = (String *)iter->value;
+ field = mailimf_field_new_custom(strdup(key->UTF8Characters()), strdup(value->UTF8Characters()));
+ mailimf_fields_add(fields, field);
+ }
+ }
return fields;
}
diff --git a/src/core/abstract/MCMessageHeader.h b/src/core/abstract/MCMessageHeader.h
index f90c1c2d..b48c461e 100644
--- a/src/core/abstract/MCMessageHeader.h
+++ b/src/core/abstract/MCMessageHeader.h
@@ -54,8 +54,12 @@ namespace mailcore {
virtual void setUserAgent(String * userAgent);
virtual String * userAgent();
-
- virtual String * extractedSubject();
+
+ virtual void addHeader(String *header, String *value);
+ virtual void setExtraHeaders(HashMap *headers);
+ virtual String * getHeader(String *header);
+
+ String * extractedSubject();
virtual String * partialExtractedSubject();
virtual void importHeadersData(Data * data);
@@ -89,6 +93,7 @@ namespace mailcore {
time_t mDate;
time_t mReceivedDate;
String * mUserAgent;
+ HashMap * mExtraHeaders;
void init(bool generateDate, bool generateMessageID);
Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails);
};
diff --git a/src/core/basetypes/MCHashMap.cc b/src/core/basetypes/MCHashMap.cc
index 164198f5..524221fa 100644
--- a/src/core/basetypes/MCHashMap.cc
+++ b/src/core/basetypes/MCHashMap.cc
@@ -10,15 +10,6 @@
using namespace mailcore;
-namespace mailcore {
- struct HashMapCell {
- unsigned int func;
- Object * key;
- Object * value;
- HashMapCell * next;
- };
-}
-
#define CHASH_DEFAULTSIZE 13
#define CHASH_MAXDEPTH 3
diff --git a/src/core/basetypes/MCHashMap.h b/src/core/basetypes/MCHashMap.h
index 40751b8e..75bcab47 100644
--- a/src/core/basetypes/MCHashMap.h
+++ b/src/core/basetypes/MCHashMap.h
@@ -10,7 +10,12 @@ namespace mailcore {
class String;
class Array;
- struct HashMapCell;
+ struct HashMapCell {
+ unsigned int func;
+ Object * key;
+ Object * value;
+ HashMapCell * next;
+ };
typedef HashMapCell HashMapIter;
class HashMap : public Object {
@@ -28,6 +33,9 @@ namespace mailcore {
virtual Array * allValues();
virtual void removeAllObjects();
+ HashMapIter * iteratorBegin();
+ HashMapIter * iteratorNext(HashMapIter * iter);
+
public: // subclass behavior
HashMap(HashMap * o);
virtual String * description();
@@ -37,8 +45,6 @@ namespace mailcore {
unsigned int mAllocated;
unsigned int mCount;
void ** mCells;
- HashMapIter * iteratorBegin();
- HashMapIter * iteratorNext(HashMapIter * iter);
void allocate(unsigned int size);
void init();
};