diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapsession/src/cimapheaderfields.cpp --- /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; + }