diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapsession/src/cimaprfc822headerfields.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapsession/src/cimaprfc822headerfields.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,252 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// cimaprfc822headerfields.cpp +// + +#include "cimaprfc822headerfields.h" +#include "cimapsessionconsts.h" + +class CDesC8Array; + +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include "timrfc822datefield.h" +#endif + +CImapRfc822HeaderFields* CImapRfc822HeaderFields::NewL() + { + CImapRfc822HeaderFields* self = new (ELeave) CImapRfc822HeaderFields(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CImapRfc822HeaderFields::CImapRfc822HeaderFields() + { + } + +void CImapRfc822HeaderFields::ConstructL() + { + CImapHeaderFields::ConstructL(EImapCountFields); + } + +CImapRfc822HeaderFields::~CImapRfc822HeaderFields() + { + } + +/** +Returns the value of the field identified by the supplied field index. +If the field has not been populated, a null descriptor is returned. +@param aFieldId index of the field value to return. +@return The value of the filed or a null descriptor. +*/ +EXPORT_C const TDesC8& CImapRfc822HeaderFields::FieldValue(THeaderFields aFieldId) + { + return CImapHeaderFields::FieldValue(aFieldId); + } + +/** +Returns whether the field identified by the supplied field index has been populated. +This indicates whether the field value was supplied by the server. +@param aFieldId index of the field value to return. +@return Whether field has been populated. +*/ +EXPORT_C TBool CImapRfc822HeaderFields::FieldExists(THeaderFields aFieldId) + { + return CImapHeaderFields::FieldExists(aFieldId); + } + +/** +Returns the numerical priority for an email based on the various priority fields that can +be received in the header fields. +If no priority is found, then the returned value will be set to medium priority. +@return Extracted numerical priority. If no priority is found, then medium priority is returned. +*/ +EXPORT_C TMsvPriority CImapRfc822HeaderFields::PriorityL() + { + CImcvUtils* imcvUtils = CImcvUtils::NewLC(); + TMsvPriority priority(EMsvMediumPriority); + + if (FieldExists(EImapPriority)) + { + priority = imcvUtils->EvaluatePriorityText(FieldValue(EImapPriority)); + } + else if (FieldExists(EImapXPriority)) + { + priority = imcvUtils->EvaluatePriorityText(FieldValue(EImapXPriority)); + } + else if (FieldExists(EImapXMSMailPriority)) + { + priority = imcvUtils->EvaluatePriorityText(FieldValue(EImapXMSMailPriority)); + } + else if (FieldExists(EImapImportance)) + { + priority = imcvUtils->EvaluatePriorityText(FieldValue(EImapImportance)); + } + + CleanupStack::PopAndDestroy(imcvUtils); + + return priority; + } + +/** +Returns a date for an email. If the 'date' header field exists, then this is used. If not, +then a check is made to see if a 'received' header field exists containing a date. +@return Date value. If no date found, then the date value will be set to 0. +*/ +EXPORT_C TTime CImapRfc822HeaderFields::Date() + { + TTime date(0); + TImRfc822DateField dateField; + + if (FieldExists(EImapDate)) + { + dateField.ParseDateField(FieldValue(EImapDate), date); + } + else if (FieldExists(EImapReceived)) + { + TPtrC8 ptr(FieldValue(EImapReceived)); + + _LIT8(KSemiColonSpace, "; "); + TInt semicolonPos = ptr.Find(KSemiColonSpace); + + if (semicolonPos >= 0) + { + ptr.Set(ptr.Right(ptr.Length() - semicolonPos - 2)); + + if (ptr.Length() > 0) + { + dateField.ParseDateField(ptr, date); + } + } + } + + return date; + } + +/** +Returns the return receipt value from the header fields based on the various 'return receipt' +header fields that can be received. +@return Return receipt field value. Null descriptor if no 'return receipt' fields exist. +*/ +EXPORT_C const TDesC8& CImapRfc822HeaderFields::ReturnReceiptField() + { + if (FieldExists(EImapReturnReceiptTo)) + { + return FieldValue(EImapReturnReceiptTo); + } + + if (FieldExists(EImapXReturnReceiptTo)) + { + return FieldValue(EImapXReturnReceiptTo); + } + + if (FieldExists(EImapDispositionNotificationTo)) + { + return FieldValue(EImapDispositionNotificationTo); + } + + return KNullDesC8(); + } + + +TInt CImapRfc822HeaderFields::Match(const TDesC8& aFieldName, TBool& /*aNeedToStripSpaces*/) + { + THeaderFields fieldId; + + if (aFieldName.CompareF(KImapTxtFrom) == 0) + { + fieldId = EImapFrom; + } + else if (aFieldName.CompareF(KImapTxtReplyTo) == 0) + { + fieldId = EImapReplyTo; + } + else if (aFieldName.CompareF(KImapTxtTo) == 0) + { + fieldId = EImapTo; + } + else if (aFieldName.CompareF(KImapTxtCc) == 0) + { + fieldId = EImapCc; + } + else if (aFieldName.CompareF(KImapTxtBcc) == 0) + { + fieldId = EImapBcc; + } + else if (aFieldName.CompareF(KImapTxtSubject) == 0) + { + fieldId = EImapSubject; + } + else if (aFieldName.CompareF(KImapTxtReceived) == 0) + { + fieldId = EImapReceived; + } + else if (aFieldName.CompareF(KImapTxtDate) == 0) + { + fieldId = EImapDate; + } + else if (aFieldName.CompareF(KImapTxtMessageId) == 0) + { + fieldId = EImapMessageId; + } + else if (aFieldName.CompareF(KImapTxtXMailer) == 0) + { + fieldId = EImapXMailer; + } + else if (aFieldName.CompareF(KImapTxtPriority) == 0) + { + fieldId = EImapPriority; + } + else if (aFieldName.CompareF(KImapTxtXPriority) == 0) + { + fieldId = EImapXPriority; + } + else if (aFieldName.CompareF(KImapTxtXMSMailPriority) == 0) + { + fieldId = EImapXMSMailPriority; + } + else if (aFieldName.CompareF(KImapTxtPrecedence) == 0) + { + fieldId = EImapPrecedence; + } + else if (aFieldName.CompareF(KImapTxtImportance) == 0) + { + fieldId = EImapImportance; + } + else if (aFieldName.CompareF(KImapTxtReturnReceiptTo) == 0) + { + fieldId = EImapReturnReceiptTo; + } + else if (aFieldName.CompareF(KImapTxtXReturnReceiptTo) == 0) + { + fieldId = EImapXReturnReceiptTo; + } + else if (aFieldName.CompareF(KImapTxtDispositionNotificationTo) == 0) + { + fieldId = EImapDispositionNotificationTo; + } + else if (aFieldName.CompareF(KImapTxtDispositionNotificationOptions) == 0) + { + fieldId = EImapDispositionNotificationOptions; + } + else + { + return KErrNotFound; + } + + return fieldId; + }