--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imap4mtm/imapsession/src/cimapheaderfields.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,119 @@
+// 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:
+//
+
+#include "cimapheaderfields.h"
+
+CImapHeaderFields::CImapHeaderFields()
+ {
+ }
+
+void CImapHeaderFields::ConstructL(TInt aStartFieldCount)
+ {
+ for (TInt field = 0; field < aStartFieldCount; ++field)
+ {
+ iImapFieldValueArray.AppendL(NULL);
+ }
+ }
+
+CImapHeaderFields::~CImapHeaderFields()
+ {
+ iImapFieldValueArray.ResetAndDestroy();
+ }
+
+/**
+Sets the value of the field identified by the supplied field name
+@param aFieldname Name of the field to set
+@param aValue Value to set the field to. This routine takes immediate
+ ownership of the buffer
+@return Whether field has been set to the new value
+*/
+TBool CImapHeaderFields::SetFieldL(const TDesC8& aFieldName, HBufC8* aValue)
+ {
+ CleanupStack::PushL(aValue);
+
+ TBool needToStripSpaces = EFalse;
+
+ TInt fieldId = Match(aFieldName, needToStripSpaces);
+
+ if (fieldId != KErrNotFound)
+ {
+ ASSERT(fieldId < iImapFieldValueArray.Count());
+
+ if (needToStripSpaces)
+ {
+ HBufC8* strippedValue = StripSpacesL(*aValue);
+ CleanupStack::PopAndDestroy(aValue);
+ aValue = strippedValue;
+ CleanupStack::PushL(aValue);
+ }
+
+ delete iImapFieldValueArray[fieldId];
+ iImapFieldValueArray[fieldId] = aValue;
+ CleanupStack::Pop(aValue);
+ return ETrue;
+ }
+
+ CleanupStack::PopAndDestroy(aValue);
+ return EFalse;
+ }
+
+/**
+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.
+*/
+const TDesC8& CImapHeaderFields::FieldValue(TInt aFieldId)
+ {
+ ASSERT(aFieldId < iImapFieldValueArray.Count());
+
+ return (iImapFieldValueArray[aFieldId] != NULL) ? *(iImapFieldValueArray[aFieldId]) : KNullDesC8();
+ }
+
+/**
+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.
+*/
+TBool CImapHeaderFields::FieldExists(TInt aFieldId)
+ {
+ ASSERT(aFieldId < iImapFieldValueArray.Count());
+
+ return (iImapFieldValueArray[aFieldId] != NULL) ? ETrue : EFalse;
+ }
+
+/**
+Strips all spaces from a header field
+@param aValue Field value to strip spaces from
+@return Buffer containing stripped value. Ownership is passed back to caller
+*/
+HBufC8* CImapHeaderFields::StripSpacesL(const TDesC8& aBuffer)
+ {
+ TInt bufferLen = aBuffer.Length();
+
+ HBufC8* strippedValue = HBufC8::NewL(bufferLen);
+ TPtr8 strippedBuffer = strippedValue->Des();
+
+ for (TInt bufferPos = 0; bufferPos < bufferLen; ++bufferPos)
+ {
+ if (aBuffer[bufferPos] > ' ')
+ {
+ strippedBuffer.Append(aBuffer[bufferPos]);
+ }
+ }
+
+ return strippedValue;
+ }