diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/servermtmutils/src/IMCVUTIL.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/servermtmutils/src/IMCVUTIL.CPP Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,256 @@ +// IMCVUTIL.CPP + +// Copyright (c) 1998-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 +#include "IMCVUTIL.H" +#include +#include "IMCVTEXT.H" +#include +#include +#include + +#define __IMUT_NO_IM_EMAIL_EVENT_LOGGING //Remove this line to enable e-mail logging + +EXPORT_C CImcvUtils* CImcvUtils::NewL() + { + CImcvUtils* self = NewLC(); + CleanupStack::Pop(); + return self; + } + +EXPORT_C CImcvUtils* CImcvUtils::NewLC() + { + CImcvUtils* self=new (ELeave) CImcvUtils(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CImcvUtils::~CImcvUtils() + { + } + +CImcvUtils::CImcvUtils() + { + } + +void CImcvUtils::ConstructL() + { + iPriority=EMsvMediumPriority; + } + +EXPORT_C void CImcvUtils::ReceiptFieldsL(CDesC8Array& aReceiptFields) + { + aReceiptFields.Reset(); + aReceiptFields.AppendL(KImcvReturnReceiptToPrompt); + aReceiptFields.AppendL(KImcvReturnXReceiptToPrompt); + aReceiptFields.AppendL(KImcvMsgDispositionTo); + aReceiptFields.AppendL(KImcvMsgDispositionOptions); + } + +EXPORT_C void CImcvUtils::PriorityFieldsL(CDesC8Array& aPriorityFields) + { + aPriorityFields.Reset(); + aPriorityFields.AppendL(KImcvPriorityPrompt); + aPriorityFields.AppendL(KImcvXPriorityPrompt); + aPriorityFields.AppendL(KImcvXMSMailPriorityPrompt); + aPriorityFields.AppendL(KImcvImportancePrompt); + } + +EXPORT_C void CImcvUtils::SendReturnReceiptFieldsL(CDesC8Array& aReturnReceiptFields) + { // appends field to the array + //At the moment it returns KImcvMsgDispositionTo only. In future it could change! + aReturnReceiptFields.Reset(); + aReturnReceiptFields.AppendL(KImcvMsgDispositionTo); + } + +EXPORT_C void CImcvUtils::SendPriorityFieldsL(CDesC8Array& aSendPriorityFields) + { + aSendPriorityFields.Reset(); + aSendPriorityFields.AppendL(KImcvXPriorityPrompt); + } + + +void CImcvUtils::SendImportanceFieldsL(CDesC8Array& aSendImportanceFields) + { + aSendImportanceFields.Reset(); + aSendImportanceFields.AppendL(KImcvImportancePrompt); + } + +EXPORT_C TBool CImcvUtils::EvaluateReturnReceiptFields(const TDesC8& aFieldName) + { + if (aFieldName.MatchF(KImcvReturnReceiptToPrompt)>=0 || + aFieldName.MatchF(KImcvReturnXReceiptToPrompt)>=0 || + aFieldName.MatchF(KImcvMsgDispositionTo)>=0) + return ETrue; + return EFalse; + } + + +EXPORT_C TMsvPriority CImcvUtils::EvaluatePriorityText(const TDesC8& aPriority) + {// check for high, low and then medium. + //Precedence: bulk, special-delivery, first-class, list and junk, should not be used to set any Priority as RFC2076 defines + //them as Non-standard controversial and discouraged + TInt number=ConvertPriorityIntoNumber(aPriority); + if (aPriority.MatchF(KImportanceHighest)>=0 || + aPriority.MatchF(KImportanceHigh)>=0 || + number=0 && aPriority.MatchF(KImPriorityNonUrgent)<0)) + { + iPriority=EMsvHighPriority; + return iPriority; + } + if (aPriority.MatchF(KImportanceLowest)>=0 || + aPriority.MatchF(KImportanceLow)>=0 || + aPriority.MatchF(KImPriorityNonUrgent)>=0 || + number>KPriorityNormal) + {//set to low only if it is medium. + if (iPriority==EMsvMediumPriority) + iPriority=EMsvLowPriority; + } + return iPriority; + } + +TInt CImcvUtils::ConvertPriorityIntoNumber(const TDesC8& aPriority) + { + // if aPriority is null string, set priority to normal + if (!aPriority.Length()) + return KPriorityNormal; + // aPriority can be a digit (1..5) or a string or both. In most cases it is digit. + //Hence search for digit in the string first and if it is not found, then search for the strings + //search for digits + TInt p=KPriorityHigh; //1 + while(p<6) + { + TBuf8<4> buf(KWildChars); //set the wild chars when matching + TBuf8<1> num; + num.Num(p); + buf.Insert(1,num); + if (aPriority.Match(buf)>=0) //means found + return p; + p++; + } + return KPriorityNormal; + } + + + +// +//CImLogMessage +// + + +EXPORT_C CImLogMessage* CImLogMessage::NewL(RFs& aFs, TInt aPriority) + { + CImLogMessage* self = new (ELeave) CImLogMessage(aPriority); + CleanupStack::PushL(self); + self->ConstructL(aFs,aPriority); + CleanupStack::Pop(); + return self; + } + +CImLogMessage::CImLogMessage(TInt aPriority) + : CMsgActive(aPriority) + { + } + +void CImLogMessage::ConstructL(RFs& aFs,TInt aPriority) + { + iLogWrapper=CLogWrapper::NewL(aFs,aPriority); + CActiveScheduler::Add(this); + } + +CImLogMessage::~CImLogMessage() + { + Cancel(); + Reset(); + delete iLogWrapper; + } + +EXPORT_C CLogEvent& CImLogMessage::LogEvent() + { + if (!iLogEvent) + { + TRAP_IGNORE(iLogEvent=CLogEvent::NewL()); + } + return *iLogEvent; + } + +EXPORT_C CLogBase& CImLogMessage::LogBase() + { + return iLogWrapper->Log(); + } + + +EXPORT_C void CImLogMessage::Start(TInt aError,TRequestStatus& aStatus) + { + if (aError != KErrNone) + { + TBuf status; + if (GetString(status, R_LOG_DEL_FAILED) == KErrNone) + iLogEvent->SetStatus(status); + } + + Queue(aStatus); + +#ifndef __IMUT_NO_IM_EMAIL_EVENT_LOGGING + iLogWrapper->Log().AddEvent(*iLogEvent,iStatus); + SetActive(); +#else + Complete(KErrNone); +#endif + + } + +EXPORT_C TInt CImLogMessage::GetString(TDes& aString, TInt aId) const + { + return iLogWrapper->Log().GetString(aString, aId); + } + +void CImLogMessage::DoRunL() + { + } + +void CImLogMessage::DoCancel() + { + iLogWrapper->Log().Cancel(); + CMsgActive::DoCancel(); + } + +EXPORT_C void CImLogMessage::Reset() + { + delete iLogEvent; + iLogEvent=NULL; + } + +void CImLogMessage::DoComplete(TInt& aStatus) + {//always complete with KErrnone. We don't care if logging fails. + aStatus=KErrNone; + } + +// +// Check the available disk space and leave if it is insufficient +// +EXPORT_C void ImCheckDiskSpace::LeaveIfLowDiskL(RFs& aFs, TInt aCurrentDrive) + { + TVolumeInfo volumeInfo; + User::LeaveIfError(aFs.Volume(volumeInfo, aCurrentDrive)); + + if (volumeInfo.iFree < KMinimumDiskSpaceForSync) + User::Leave(KErrDiskFull); + }