diff options
Diffstat (limited to 'src/core/abstract/MCMessageHeader.cc')
-rw-r--r-- | src/core/abstract/MCMessageHeader.cc | 36 |
1 files changed, 36 insertions, 0 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; } |