--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omacp/omacpadapters/EmailAdapter/src/CWPEmailSaveItem.cpp Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,1653 @@
+/*
+* Copyright (c) 2002 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: Saves CWPEmailItems
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CWPEmailSaveItem.h"
+#include "CWPEmailItem.h"
+#include "EmailAdapter.pan"
+#include "WPEmail.hrh"
+
+#include <wpemailadapterresource.rsg>
+#include <WPAdapterUtil.h> // Adapter utils
+
+#include <ApUtils.h>
+#include <ApDataHandler.h>
+
+#include <CWPParameter.h>
+#include <txtrich.h>
+#include <iapprefs.h>
+#include <MuiuMsvUiServiceUtilities.h>
+
+#include <pop3set.h>
+
+#include <miutpars.h> // TImMessageField
+#include <cemailaccounts.h>
+#include <iapprefs.h>
+
+#include <ImumDaMailboxUtilities.h>
+#include <SendUiConsts.h>
+
+#include <ImumDaSettingsKeys.h>
+#include <ImumDaSettingsDataCollection.h>
+
+#include "../../../group/omacplogger.h"
+#include <PnpProvUtil.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::CWPEmailSaveItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CWPEmailSaveItem::CWPEmailSaveItem()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::ConstructL()
+ {
+ iExistingSettings = new (ELeave) CDesC16ArrayFlat(2); //1 or 2 settings
+
+ TFileName fileName;
+ Dll::FileName( fileName );
+ iDefaultName = WPAdapterUtil::ReadHBufCL( fileName,
+ KAdapterName,
+ R_QTN_SM_DEFAULT_EMAIL_NAME );
+ iDefaultMsvId = 0 ;
+ iDomainApi = CreateDomainApiL();
+ iServices = &iDomainApi->MailboxServicesL();
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CWPEmailSaveItem::~CWPEmailSaveItem()
+ {
+ delete iBufConvert;
+ delete iExistingSettings;
+ delete iDefaultName;
+ delete iIapName;
+ delete iDomainApi;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetAsDefaultL
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::SetAsDefaultL()
+ {
+ iServices->SetDefaultMailboxL( iDefaultMsvId );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SummaryText
+// -----------------------------------------------------------------------------
+//
+const TDesC& CWPEmailSaveItem::SummaryText()
+ {
+ return *iDefaultName;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetDefaultNameL
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::SetDefaultNameL( const TDesC& aDefaultName )
+ {
+ HBufC* temp = aDefaultName.AllocL();
+ delete iDefaultName;
+ iDefaultName = temp;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetCommsDataBase
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::SetCommsDataBase( CCommsDatabase& aCommsDataBase )
+ {
+ iCommDb = &aCommsDataBase;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SaveData
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CWPEmailSaveItem::SaveData()
+ {
+ iUid().iSmtpId = iSmtpTEntry.Id();
+ iUid().iPopImapId = iPopImapTEntry.Id();
+ return iUid;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetMailAccountNamesL
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::GetMailAccountNamesL()
+ {
+ CMsvEntry* centry = iSession->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(centry);
+ TInt count = centry->Count();
+
+ for ( TInt j = 0; j < count; j++ )
+ {
+ if( (*centry)[j].iType == KUidMsvServiceEntry &&
+ ((*centry)[j].iMtm == KUidMsgTypePOP3 ||
+ (*centry)[j].iMtm == KUidMsgTypeIMAP4))
+ {
+ iExistingSettings->AppendL( (*centry)[j].iDetails );
+ }
+ }
+ CleanupStack::PopAndDestroy( centry );
+ return iExistingSettings->Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SettingNameAlreadyExistsL
+// -----------------------------------------------------------------------------
+//
+TBool CWPEmailSaveItem::SettingNameAlreadyExistsL( const TDesC& aName,
+ TBool aReload )
+ {
+ if ( aReload )
+ {
+ GetMailAccountNamesL();
+ }
+ TInt count = iExistingSettings->Count();
+
+ for ( TInt n(0); n < count; n++ )
+ {
+ if (aName.CompareF( (*iExistingSettings)[n]) == 0 )
+ {
+ // found match
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SaveMailSettingsToMessageServerL
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::SaveMailSettingsToMessageServerL( CWPEmailItem& aSmtp,
+ CWPEmailItem& aPopImap,
+ TBool aIsPopNotImap,
+ CMsvSession* aSession )
+ {
+ __ASSERT_ALWAYS( aSession, Panic( EMailAdapterNullPointer ) );
+
+ iSession = aSession;
+ iPopMail = aIsPopNotImap;
+
+ ValidateSettingsNameL();
+
+ delete iIapName;
+ iIapName = NULL;
+ iIapName = aSmtp.AssociatedIapNameL();
+ if ( !iIapName )
+ {
+ iIapName = iDefaultName->Des().AllocL();
+ }
+
+ CreateMailboxEntryL( aPopImap,aSmtp );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::IsValidEmailAddressL
+// -----------------------------------------------------------------------------
+//
+TBool CWPEmailSaveItem::IsValidEmailAddressL( const TDesC& aAddress )
+ {
+ TPtrC string = GetValidEmailAddressL( aAddress );
+ TImMessageField address;
+ return address.ValidInternetEmailAddress( string );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetValidEmailAddressL
+// -----------------------------------------------------------------------------
+//
+TPtrC CWPEmailSaveItem::GetValidEmailAddressL( const TDesC& aAddress )
+ {
+ TImMessageField address;
+ return address.GetValidInternetEmailAddressFromString( aAddress );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::FillTEntryWithSmtpData
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::FillTEntryWithSmtpData( TMsvEntry& aTEntry,
+ const TDesC& aIapName,
+ const TDesC& aMailboxName )
+ {
+ aTEntry.iMtm = KUidMsgTypeSMTP;
+ aTEntry.iType= KUidMsvServiceEntry;
+ aTEntry.iDate.HomeTime();
+ aTEntry.iDescription.Set( aIapName );
+ aTEntry.iDetails.Set( aMailboxName );
+ aTEntry.SetVisible( EFalse );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::FillTEntryWithPopImapData
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::FillTEntryWithPopImapData( TMsvEntry& aTEntry,
+ const TMsvEntry& aSmtpEntry,
+ const TDesC& aMailboxName,
+ TBool aIsPop )
+ {
+ aTEntry = aSmtpEntry;
+ aTEntry.iRelatedId = aSmtpEntry.Id();
+ aTEntry.SetVisible( ETrue );
+ aTEntry.iType = KUidMsvServiceEntry;
+ aTEntry.iDate.HomeTime();
+ aTEntry.iDetails.Set( aMailboxName );
+ if ( aIsPop )
+ {
+ aTEntry.iMtm = KUidMsgTypePOP3;
+ }
+ else
+ {
+ aTEntry.iMtm = KUidMsgTypeIMAP4;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::Des16To8L
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CWPEmailSaveItem::Des16To8L( const TDesC& aDes16 )
+ {
+ HBufC8* text = HBufC8::NewL(aDes16.Length());
+ delete iBufConvert;
+ iBufConvert = text;
+ iBufConvert->Des().Copy(aDes16);
+ return *iBufConvert;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::IapIdFromWapIdL
+// -----------------------------------------------------------------------------
+//
+TUint32 CWPEmailSaveItem::IapIdFromWapIdL( TUint32 aWapId ) const
+ {
+ CApUtils* apUtils = CApUtils::NewLC( *iCommDb );
+ TUint32 iapId = NULL;
+ iapId = apUtils->IapIdFromWapIdL( aWapId );
+ __ASSERT_ALWAYS( iapId, Panic( EMailAdapterInvalidId ) );
+ CleanupStack::PopAndDestroy( apUtils );
+ return iapId;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidateSettingsNameL
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::ValidateSettingsNameL( )
+ {
+ LOGSTRING( "CWPEmailSaveItem::ValidateSettingsNameL : Enter" );
+ if ( SettingNameAlreadyExistsL( *iDefaultName, ETrue ) )
+ {
+
+ //before appending (XX) to name if >26, make sure length is not equal
+ //to KSettingsNameMaxLength
+
+
+ if(iDefaultName->Length() > 26)
+ {
+ TBuf<30> temp_Name (*iDefaultName);
+
+ TInt count = iExistingSettings->Count();
+
+ for ( TInt n(0); n < count; n++ )
+ {
+ if (temp_Name.CompareF( (*iExistingSettings)[n]) == 0 )
+ {
+ // found match
+ User::Leave(KErrAlreadyExists);
+ }
+ }
+
+ }
+
+ HBufC* newName = HBufC::NewLC( KSettingsNameMaxLength );
+ *newName = *iDefaultName;
+
+ TPtr namePtr = newName->Des();
+ IncrementNameL( namePtr );
+
+ while ( SettingNameAlreadyExistsL( namePtr, EFalse ) )
+ {
+ IncrementNameL( namePtr );
+ }
+
+ delete iDefaultName;
+ iDefaultName = NULL;
+ iDefaultName = namePtr.AllocL();
+ CleanupStack::PopAndDestroy( newName );
+ }
+ LOGSTRING( "CWPEmailSaveItem::ValidateSettingsNameL : Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::CreateMailboxEntryL
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::CreateMailboxEntryL( CWPEmailItem& aPopImapItem,
+ CWPEmailItem& aSmtpItem )
+ {
+ LOGSTRING( "CWPEmailSaveItem::CreateMailboxEntryL : Entry" );
+
+ TInt err = KErrNone;
+ TBuf<10> appIdValue;
+
+ CImumDaSettingsData* eMailSettingsData(NULL);
+ eMailSettingsData = iServices->CreateSettingsDataL(KNullUid);
+ CleanupStack::PushL(eMailSettingsData); //1
+
+ CImIAPPreferences* apSet = CImIAPPreferences::NewLC(); //2
+ CImIAPPreferences* popImapIapSet = CImIAPPreferences::NewLC(); //3
+
+ TPtrC emailAddress = GetValidEmailAddressL(aSmtpItem.ParameterValue(
+ EWPParameterFrom));
+ TImumDaSettings::TTextEmailAddress emailAddressText;
+ emailAddressText.Append(emailAddress);
+
+ err = eMailSettingsData->SetAttr(TImumDaSettings::EKeyEmailAddress,
+ emailAddressText);
+ User::LeaveIfError(err);
+
+ TImumDaSettings::TTextMailboxName mailBoxName(*iDefaultName);
+ err = eMailSettingsData->SetAttr(TImumDaSettings::EKeyMailboxName,
+ mailBoxName);
+
+ // set IMAP/POP specific settings, create the account and set as default
+ if ( iPopMail ) // POP3
+ {
+ // Add Pop set
+ MImumDaSettingsDataCollection& pop3Set = eMailSettingsData->AddSetL(
+ KSenduiMtmPop3Uid);
+
+
+ // set access point preferences
+ TImIAPChoice popIapChoice;
+ popIapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
+ popIapChoice.iIAP = 0;
+ // We get Wap AP Uid from AP adapter, so it needs to be converted here.
+ // If correct IAP is not found try to use default IAP from CommsDB
+ TRAPD( error, popIapChoice.iIAP = IapIdFromWapIdL( aPopImapItem.AssociatedIapId() ) );
+ if ( error == KErrNone )
+ {
+ popImapIapSet->AddIAPL(popIapChoice);
+ }
+ else if ( error == KErrNotFound )
+ {
+ popIapChoice.iIAP = 0;
+ popIapChoice.iDialogPref = ECommDbDialogPrefPrompt;
+ popImapIapSet->AddIAPL( popIapChoice );
+ }
+ else
+ {
+ User::Leave( error );
+ }
+
+ //Set Access Point
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyAccessPoint, TInt(
+ popImapIapSet->IAPPreference(0).iIAP));
+ User::LeaveIfError(err);
+
+ TImumDaSettings::TTextServerAddress serverAddress;
+ serverAddress.Append(aPopImapItem.ParameterValue(EWPParameterAddr));
+
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyServer, serverAddress);
+ User::LeaveIfError(err);
+
+ TImumDaSettings::TTextUserName userName(Des16To8L(
+ aPopImapItem.ParameterValue(EWPParameterAAuthName)));
+ TImumDaSettings::TTextPassword passWord(Des16To8L(
+ aPopImapItem.ParameterValue(EWPParameterAAuthSecret)));
+
+ //set application ID
+ const TDesC& appID = aPopImapItem.ParameterValue(EWPParameterAppID);
+ appIdValue.Copy(appID);
+
+ if (userName.Length() > 0)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyUsername, userName);
+ }
+ if (passWord.Length() > 0)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyPassword, passWord);
+ }
+
+ //Set Port Value
+ TInt portVal;
+ if (GetParamValue(aPopImapItem, EWPParameterPortNbr, portVal)
+ == KErrNone)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyPort, portVal);
+ }
+
+ // Set Service parameter values [StartTLS, SSL/TLS, Normal]
+ const TDesC& popSecure = aPopImapItem.ParameterValue(
+ EWPParameterService);
+
+ if (popSecure.Compare(KSecureString) == 0)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityTls);
+ }
+ else if (popSecure.Compare(KEmailSettingSecurePortPOP) == 0)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecuritySsl);
+ if (!err)
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeyPort,
+ KEmailSslWrappedPop3Port);
+ }
+ }
+ else
+ {
+ err = pop3Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityOff);
+ }
+
+ err = SetEmailNotificationRetrievalParamsL(*eMailSettingsData,
+ aPopImapItem, pop3Set);
+
+ }
+ else // IMAP4
+ {
+ // Add Imap set
+ MImumDaSettingsDataCollection& imap4Set = eMailSettingsData->AddSetL(
+ KSenduiMtmImap4Uid);
+ // set access point preferences
+ TImIAPChoice imapIapChoice;
+ imapIapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
+ imapIapChoice.iIAP = 0;
+ // We get Wap AP Uid from AP adapter, so it needs to be converted here.
+ // If correct IAP is not found try to use default IAP from CommsDB
+ TRAPD( error, imapIapChoice.iIAP = IapIdFromWapIdL( aPopImapItem.AssociatedIapId() ) );
+ if ( error == KErrNone )
+ {
+ popImapIapSet->AddIAPL(imapIapChoice);
+ }
+ else if ( error == KErrNotFound )
+ {
+ imapIapChoice.iIAP = 0;
+ imapIapChoice.iDialogPref = ECommDbDialogPrefPrompt;
+ popImapIapSet->AddIAPL( imapIapChoice );
+ }
+ else
+ {
+ User::Leave( error );
+ }
+
+ //Set Access Point
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyAccessPoint, TInt(
+ popImapIapSet->IAPPreference(0).iIAP));
+ User::LeaveIfError(err);
+
+ // Set incoming mail server
+ TImumDaSettings::TTextServerAddress serverAddress;
+ serverAddress.Append(aPopImapItem.ParameterValue(EWPParameterAddr));
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyServer, serverAddress);
+ User::LeaveIfError(err);
+
+ TImumDaSettings::TTextUserName userName(Des16To8L(
+ aPopImapItem.ParameterValue(EWPParameterAAuthName)));
+ TImumDaSettings::TTextPassword passWord(Des16To8L(
+ aPopImapItem.ParameterValue(EWPParameterAAuthSecret)));
+
+ //set application ID
+ const TDesC& appID = aPopImapItem.ParameterValue( EWPParameterAppID );
+ appIdValue.Copy(appID);
+
+ if (userName.Length() > 0)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyUsername, userName);
+ }
+ if (passWord.Length() > 0)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyPassword, passWord);
+ }
+
+ //Set Port Value
+ TInt portVal;
+ if (GetParamValue(aPopImapItem, EWPParameterPortNbr, portVal)
+ == KErrNone)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyPort, portVal);
+ }
+
+ // Set Service parameter values [StartTLS, SSL/TLS, Normal]
+ const TDesC& imapSecure = aPopImapItem.ParameterValue(
+ EWPParameterService);
+ if (imapSecure.Compare(KSecureString) == 0)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityTls);
+ }
+ else if (imapSecure.Compare(KEmailSettingSecurePortIMAP) == 0)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecuritySsl);
+ if (!err)
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeyPort,
+ KEmailSslWrappedImap4Port);
+ }
+ }
+ else
+ {
+ err = imap4Set.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityOff);
+ }
+
+ err = SetEmailNotificationRetrievalParamsL(*eMailSettingsData,
+ aPopImapItem, imap4Set);
+
+ }
+
+ // Add smtp set
+ MImumDaSettingsDataCollection& smtpSet = eMailSettingsData->AddSetL(
+ KSenduiMtmSmtpUid);
+
+ // set access point preferences
+ TImIAPChoice smtpIapChoice;
+ smtpIapChoice.iDialogPref = ECommDbDialogPrefDoNotPrompt;
+ smtpIapChoice.iIAP = 0;
+ // We get Wap AP Uid from AP adapter, so it needs to be converted here.
+ // If correct IAP is not found try to use default IAP from CommsDB
+ LOGSTRING( "CWPEmailSaveItem::IapIdFromWapIdL : Entry" );
+ TRAPD( error, smtpIapChoice.iIAP = IapIdFromWapIdL( aSmtpItem.AssociatedIapId() ) );
+ if (error == KErrNone)
+ {
+ apSet->AddIAPL(smtpIapChoice);
+ }
+ else if (error == KErrNotFound)
+ {
+ smtpIapChoice.iIAP = 0;
+ smtpIapChoice.iDialogPref = ECommDbDialogPrefPrompt;
+ apSet->AddIAPL(smtpIapChoice);
+ }
+ else
+ {
+ User::Leave(error);
+ }
+ LOGSTRING( "CWPEmailSaveItem::IapIdFromWapIdL : Exit" );
+
+ //Set Access Point
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyAccessPoint, TInt(
+ apSet->IAPPreference(0).iIAP));
+ User::LeaveIfError(err);
+
+ // Set outgoing server address
+ TImumDaSettings::TTextServerAddress serverAddress;
+ serverAddress.Append(aSmtpItem.ParameterValue(EWPParameterAddr));
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyServer, serverAddress);
+ User::LeaveIfError(err);
+
+ TInt val;
+ // set port number
+ if (GetParamValue(aSmtpItem, EWPParameterPortNbr, val) == KErrNone)
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyPort, val);
+ }
+
+ // Set Service parameter values [StartTLS, SSL/TLS, Normal]
+ const TDesC& secure = aSmtpItem.ParameterValue(EWPParameterService);
+
+ if (secure.Compare(KSecureString) == 0)
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityTls);
+ }
+ else if (secure.Compare(KEmailSettingSecurePortSMTP) == 0)
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecuritySsl);
+ if (!err)
+ {
+ smtpSet.SetAttr(TImumDaSettings::EKeyPort,
+ KEmailSslWrappedSmtpPort);
+ }
+ }
+ else
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeySecurity,
+ TImumDaSettings::EValueSecurityOff);
+ }
+
+ LOGSTRING( "Des16To8L : Entry" );
+ TImumDaSettings::TTextUserName smtpUserName(Des16To8L(
+ aSmtpItem.ParameterValue(EWPParameterAAuthName)));
+ LOGSTRING( "Des16To8L : Exit" );
+ LOGSTRING( "Des16To8L : Entry" );
+ TImumDaSettings::TTextPassword smtpPassWord(Des16To8L(
+ aSmtpItem.ParameterValue(EWPParameterAAuthSecret)));
+ LOGSTRING( "Des16To8L : Exit" );
+
+ if (smtpUserName.Length() > 0)
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyUsername, smtpUserName);
+ }
+ if (smtpPassWord.Length() > 0)
+ {
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyPassword, smtpPassWord);
+ }
+
+ //Set User Preferences
+ err = smtpSet.SetAttr(TImumDaSettings::EKeyReplyToAddress,
+ emailAddressText);
+
+ LOGSTRING( "Emailservices::CreateMailboxL : Entry" );
+ iDefaultMsvId = iServices->CreateMailboxL(*eMailSettingsData);
+ LOGSTRING( "Emailservices::CreateMailboxL : Exit" );
+
+ SetEmailAppIdForPnpServiceL(appIdValue);
+
+
+ CleanupStack::PopAndDestroy(3);
+ LOGSTRING( "CWPEmailSaveItem::CreateMailboxEntryL : Exit" );
+
+ return err;
+ }
+void CWPEmailSaveItem::SetEmailAppIdForPnpServiceL(TDesC& appIDValue)
+{
+
+
+
+ //if PnPMS service launched by Email client for email settings download
+ //then set application ID of mail box into Cenrep.
+ CPnpProvUtil* prov = CPnpProvUtil::NewLC();
+ // use contant value
+ const TUint32 uidVal = 0x100058C5;
+ TUint32 uidValCenrep = prov->GetApplicationUidL();
+
+ if(uidVal == uidValCenrep)
+ prov->SetProvAdapterAppIdL(appIDValue);
+
+ CleanupStack::PopAndDestroy();
+
+
+}
+
+
+void CWPEmailSaveItem::IncrementNameL(TDes& aName)
+ {
+ LOGSTRING( "CWPEmailSaveItem::IncrementNameL: Enter" );
+
+ TInt length = aName.Length();
+
+ // If this fails it means that at least default name should have been assigned
+ // to item.
+ //__ASSERT_ALWAYS(length > 0, Panic(EMEUNameEmpty));
+
+
+ TInt newOrdinal = 0;
+ TInt index = length-1;
+ TInt charValue = aName[index];
+
+ // Check if name ends with ')'
+ if (charValue == ')')
+ {
+ TBool cutBetweenIndexes = EFalse;
+ index--;
+ TInt multi = 1;
+ while ( index >= 0)
+ {
+ charValue = aName[index];
+ TChar ch(charValue);
+
+ if (!ch.IsDigit())
+ {
+ // There was non-digits inside the brackets.
+ if ( charValue == '(')
+ {
+ // We found the start
+ cutBetweenIndexes = ETrue;
+ index--;
+ break;
+ }
+ else
+ {
+ // There was a non-digit inside the '(' and ')'
+ // We just append after the original name.
+ break;
+ }
+ } // if
+ else
+ {
+ TInt newNum = ch.GetNumericValue();
+ if (multi <= 100000000)
+ {
+ // If there's a pattern (007) then this makes it to be (007)(01)
+ if (newNum == 0 && newOrdinal != 0 && multi > 10)
+ {
+ break;
+ }
+ newOrdinal += newNum * multi;
+ multi*=10;
+ }//0010
+ else
+ {
+ newOrdinal = 0;
+ break;
+ }
+ }
+ index--;
+ } // while
+
+ // There was correct pattern of (0000) so now we delete it.
+ if (cutBetweenIndexes)
+ {
+ aName.Delete(index+1, length-index);
+ }
+ else
+ {
+ // This case is for example 12345) so we get 12345)(01)
+ newOrdinal = 0;
+ }
+ } // if
+
+ // Add one to the ordinal read from the old name
+ newOrdinal++;
+
+ // Check that there's enough space to add the ordinal
+ TInt maxLength = aName.MaxLength();
+ TInt ordinalSpace(4); // Ordinal space comes from (00) so it's 4
+ length = aName.Length();
+ if (length + ordinalSpace > maxLength)
+ {
+ aName.Delete(maxLength-ordinalSpace, ordinalSpace);
+ }
+
+ // Append the ordinal at the end of the name
+ HBufC* old = aName.AllocLC();
+
+ _LIT(KFormatSpecLessTen, "%S(0%d)");
+ _LIT(KFormatSpecOverTen, "%S(%d)");
+ if (newOrdinal < 10)
+ {
+ aName.Format(KFormatSpecLessTen, old, newOrdinal);
+ }
+ else
+ {
+ aName.Format(KFormatSpecOverTen, old, newOrdinal);
+ }
+ CleanupStack::PopAndDestroy(old); // old
+
+ LOGSTRING( "CWPEmailSaveItem::IncrementNameL: Exit" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::IncrementNameL
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::IncrementNameL(TDes& aName, TInt aMaxLength)
+ {
+ LOGSTRING( "CWPEmailSaveItem::IncrementNameL: Enter" );
+
+ TInt length = aName.Length();
+
+ // If this fails it means that at least default name should have been assigned
+ // to item.
+ //__ASSERT_ALWAYS(length > 0, Panic(EMEUNameEmpty));
+
+ TInt newOrdinal = 0;
+ TInt index = length-1;
+ TInt charValue = aName[index];
+
+ // Check if name ends with ')'
+ if (charValue == ')')
+ {
+ TBool cutBetweenIndexes = EFalse;
+ index--;
+ TInt multi = 1;
+ while ( index >= 0)
+ {
+ charValue = aName[index];
+ TChar ch(charValue);
+
+ if (!ch.IsDigit())
+ {
+ // There was non-digits inside the brackets.
+ if ( charValue == '(')
+ {
+ // We found the start
+ cutBetweenIndexes = ETrue;
+ index--;
+ break;
+ }
+ else
+ {
+ // There was a non-digit inside the '(' and ')'
+ // We just append after the original name.
+ break;
+ }
+ } // if
+ else
+ {
+ TInt newNum = ch.GetNumericValue();
+ if (multi <= 100000000)
+ {
+ // If there's a pattern (007) then this makes it to be (007)(01)
+ if (newNum == 0 && newOrdinal != 0 && multi > 10)
+ {
+ break;
+ }
+ newOrdinal += newNum * multi;
+ multi*=10;
+ }//0010
+ else
+ {
+ newOrdinal = 0;
+ break;
+ }
+ }
+ index--;
+ } // while
+
+ // There was correct pattern of (0000) so now we delete it.
+ if (cutBetweenIndexes)
+ {
+ aName.Delete(index+1, length-index);
+ }
+ else
+ {
+ // This case is for example 12345) so we get 12345)(01)
+ newOrdinal = 0;
+ }
+ } // if
+
+ // Add one to the ordinal read from the old name
+ newOrdinal++;
+
+ // Check that there's enough space to add the ordinal
+ TInt maxLength = aMaxLength;
+ TInt ordinalSpace(4); // Ordinal space comes from (00) so it's 4
+ length = aName.Length();
+ if (length + ordinalSpace > maxLength)
+ {
+ aName.Delete(maxLength-ordinalSpace, ordinalSpace);
+ }
+
+ // Append the ordinal at the end of the name
+ HBufC* old = aName.AllocLC();
+
+ _LIT(KFormatSpecLessTen, "%S(0%d)");
+ _LIT(KFormatSpecOverTen, "%S(%d)");
+ if (newOrdinal < 10)
+ {
+ aName.Format(KFormatSpecLessTen, old, newOrdinal);
+ }
+ else
+ {
+ aName.Format(KFormatSpecOverTen, old, newOrdinal);
+ }
+ CleanupStack::PopAndDestroy(old); // old
+
+ LOGSTRING( "CWPEmailSaveItem::IncrementNameL: Exit" );
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidateText
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::ValidateText(const TDesC& serverAddress)
+{
+
+ // Check if the name of the mailbox contains only
+ // white space characters.
+ TInt length = serverAddress.Length();
+
+
+ for( TInt i = 0 ; i < length ; i++ )
+ {
+ TChar tempChar(serverAddress[i]);
+ if( !tempChar.IsSpace() )
+ {
+ // If the character isn't a white space character
+ // then KErrNone is returned.
+ return KErrNone;
+ }
+ }
+ return KErrGeneral;
+
+}
+
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidateServerAddress
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::ValidateServerAddress(const TDesC& serverAddress)
+{
+
+ TInt result = ValidateText(serverAddress);
+
+ // Check for valid server address
+ if ( result == KErrNone )
+ {
+ TBool ok = EFalse;
+ TRAPD( error, ok = MsvUiServiceUtilities::IsValidDomainL(serverAddress) );
+
+ result = ( error == KErrNone ) && ok ? KErrNone : KErrGeneral;
+ }
+
+ return result;
+
+}
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidatePortNo
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::ValidatePortNo(const TUint& portVal)
+{
+ TInt result = (portVal >= KEmailPortMinValue) && (portVal <= KEmailPortMaxValue) ? KErrNone : KErrArgument;
+ return result;
+}
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetEmailNotificationRetrievalParamsL
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::SetEmailNotificationRetrievalParamsL(
+ CImumDaSettingsData& aEmailSettingsData, CWPEmailItem& aPopImapItem,
+ MImumDaSettingsDataCollection& aPopImapSet)
+ {
+ LOGSTRING( "CWPEmailSaveItem::SetEmailNotificationRetrievalParamsL : Entry" );
+ TInt err = KErrGeneral;
+
+ //Set EMN
+ /*
+ Characteristic/name: APPLICATION/EMN
+ Status: Optional.
+ Occurs: 0/1.
+ Default value: 0.
+ Used values: 0, 1, 2.
+ OFF = 0.
+ ON = 1.
+ VALID = 2.
+ Interpretation:
+ Specifies the usage of OMA EMN. If the value is OFF (0), OMA EMN
+ is disabled. If the value is ON (1) OMA EMN is enabled. If the value
+ is VALID (2) OMA EMN is enabled with proxy whitelist validation.
+ This means that OMA EMN messages are accepted only from
+ trusted push proxy gateways. Whitelist validation is made
+ based on Push Validation document available in Forum Nokia.
+ */
+
+ const TDesC& emnParamName(KParamEMN);
+
+ TBool validUserPass = EFalse;
+ // Check whether Username and Password are there in the incoming settings
+
+ err = ValidateUserNamePassword(aPopImapSet, validUserPass);
+ if (!err && validUserPass)
+ {
+ err = SetIntParam(aEmailSettingsData, aPopImapItem, emnParamName);
+ }
+
+ TInt emnValSet;
+ TInt err1;
+ err1 = aEmailSettingsData.GetAttr(TImumDaSettings::EKeyAutoNotifications,
+ emnValSet);
+
+ if (((!err && !err1 && !emnValSet) || err) && validUserPass)
+ {
+ const TDesC& onlineParamName(KParamONLINE);
+ // Check whether Username and Password are there in the incoming settings
+
+ TInt onlineValRec;
+ err = GetParamValue(aPopImapItem, onlineParamName, onlineValRec);
+ if (emnValSet && !err && onlineValRec)
+ {
+ //Set EMN to Off before setting Online
+ err = aEmailSettingsData.SetAttr(
+ TImumDaSettings::EKeyAutoNotifications,
+ TImumDaSettings::EValueNotificationsOff);
+ }
+ //Set Online
+ /*
+ Characteristic/name: APPLICATION/ONLINE
+ Status: Optional.
+ Occurs: 0/1.
+ Default value: 0.
+ Used values: 0 or 1.
+ OFF = 0.
+ ON = 1.
+ Interpretation:
+ Specifies the online mode. Online mode works with APPLICATION/POLL and
+ APPLICATION/CS parameters in following way:
+ Connection shedule parameter specifies time windows when always online mode
+ is used. Polling can be used to shorter polling interval of IMAP IDLE. This
+ is useful option when network/NAT drops connection after short inactivity
+ */
+ if (!err)
+ {
+ err = SetIntParam(aEmailSettingsData, aPopImapItem,
+ onlineParamName);
+ }
+
+ }
+
+ const TDesC& csParamName(KParamCS);
+ const TDesC& csParamVal(aPopImapItem.ParameterValue(csParamName));
+
+ if (csParamVal.Length())
+ {
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::SetEmailNotificationRetrievalParamsL: csParamVal value %i", csParamVal );
+
+ TLex csParamValue(csParamVal);
+ TInt64 retStartHourMinValue = KImumMboxDefaultAutoRetrievalStartHour;
+ TInt64 retEndHourMinValue = KImumMboxDefaultAutoRetrievalEndHour;
+
+ //Get the Retrieval Start and End Hours, first
+ err = GetRetHoursValueL(csParamValue, '-', retStartHourMinValue);
+
+ if (!err)
+ {
+ err = GetRetHoursValueL(csParamValue, '<', retEndHourMinValue);
+ }
+
+ //Set Retrieval Days
+ /*
+ Characteristic/name: APPLICATION/CS
+ Status: Optional.
+ Occurs: 0/1.
+ Default value: empty.
+ Used values: empty or time<days>; 00:00-23:59<0,1,2,3,4,5,6>
+ Sunday = 0.
+ Monday = 1.
+ Tuesday = 2.
+ Wednesday = 3.
+ Thursday = 4.
+ Friday = 5.
+ Saturday = 6.
+ Interpretation:
+ Specifies the connection schedule when always online or polling is
+ active. When value is empty, connection schedule is disabled. If
+ connection shedule is inactivated, polling is still enabled.
+ */
+ //Setting Retrieval Days, first, parse the CS parm, till the end
+ if (!err)
+ {
+ err = SetRetDaysL(csParamValue, aEmailSettingsData);
+ }
+
+ // If there no error in parsing the CS parameter, then set the Retrieval Start and End Hours
+ if (!err && retStartHourMinValue
+ > KImumMboxDefaultAutoRetrievalStartHour)
+ {
+ //Set Retrieval Start Hour
+ err = aEmailSettingsData.SetAttr(
+ TImumDaSettings::EKeyAutoRetrievalStartHour,
+ retStartHourMinValue);
+ }
+
+ if (!err && retEndHourMinValue > KImumMboxDefaultAutoRetrievalEndHour)
+ {
+ //Set Retrieval End Hour
+ err = aEmailSettingsData.SetAttr(
+ TImumDaSettings::EKeyAutoRetrievalEndHour,
+ retEndHourMinValue);
+ }
+
+ }
+
+ const TDesC& pollParamName(KParamPOLL);
+ //Set Poll
+ /*
+ Characteristic/name: APPLICATION/POLL
+ Status: Optional.
+ Occurs: 0/1.
+ Default value: 0.
+ Used values: 0 (off), or 16-bit unsigned integer.
+ Interpretation:
+ Specifies the polling period in minutes. Zero indicates that
+ polling is disabled.
+ */
+ err = SetIntParam(aEmailSettingsData, aPopImapItem, pollParamName);
+
+ const TDesC& lmsParamName(KParamLMS);
+ TInt onlineParamVal;
+ err = aEmailSettingsData.GetAttr(TImumDaSettings::EKeyAutoRetrieval,
+ onlineParamVal);
+
+ if ((!err && onlineParamVal == KImumMboxDefaultAutoRetrieval) || err)
+ {
+ //Automatic Retrieval is off, then set Mailbox Update Limit to the value received
+ /*
+ Characteristic/name: APPLICATION/LMS
+ Status: Optional.
+ Occurs: 0/1.
+ Default value: 0.
+ Used values: 0 (all mails) or 32-bit unsigned integer.
+ Interpretation:
+ Specifies the local mailbox size. This defines the amount of mails kept in
+ local mailbox. If this value has been defined to zero (all), then all mails
+ are fetched to the mobile (local mailbox). If this value is define for
+ example 10, then only 10 newest mails are kept in local mailbox.
+ */
+ err = SetIntParam(aEmailSettingsData, aPopImapItem, lmsParamName);
+ }
+
+ LOGSTRING( "CWPEmailSaveItem::SetEmailNotificationRetrievalParamsL : Exit" );
+
+ return err;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetIntParam
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::SetIntParam(CImumDaSettingsData& aEmailSettingsData,
+ CWPEmailItem& aPopImapItem, const TDesC& aParamName)
+ {
+ TInt err = KErrGeneral;
+ TInt paramMinValue;
+ TInt paramMaxValue;
+ TInt paramKey = 0x0000000;
+
+ if (aParamName.CompareF(KParamEMN) == 0)
+ {
+ paramMinValue = TImumDaSettings::EValueNotificationsOff;
+ paramMaxValue = TImumDaSettings::EValueNotificationsHome;
+ paramKey = TImumDaSettings::EKeyAutoNotifications;
+ }
+ else if (aParamName.CompareF(KParamONLINE) == 0)
+ {
+ paramMinValue = TImumDaSettings::EValueAutoOff;
+ paramMaxValue = TImumDaSettings::EValueAutoHomeNetwork;
+ paramKey = TImumDaSettings::EKeyAutoRetrieval;
+ }
+ else if (aParamName.CompareF(KParamPOLL) == 0)
+ {
+ paramMinValue = KImumPollMinUpdateLimit;
+ paramMaxValue = KImumPollMaxUpdateLimit;
+ }
+
+ else if (aParamName.CompareF(KParamLMS) == 0)
+ {
+ paramMinValue = KImumMboxInboxMinUpdateLimit;
+ paramMaxValue = KImumMboxInboxMaxUpdateLimit;
+ paramKey = TImumDaSettings::EKeyInboxUpdateLimit;
+ }
+
+ else
+ {
+ return err;
+ }
+
+ TInt val;
+ err = GetParamValue(aPopImapItem, aParamName, val);
+ if (!err)
+ {
+ if (val >= paramMinValue && val <= paramMaxValue)
+ {
+ if (aParamName.CompareF(KParamPOLL) != 0)
+ {
+ //Set the value for the Parm
+ err = aEmailSettingsData.SetAttr(paramKey, val);
+ }
+ else
+ {
+ //Set the value for Poll
+ err = SetPollValue(aEmailSettingsData, val);
+ }
+ }
+ else
+ {
+ return KErrOverflow;
+ }
+ }
+ return err;
+ }
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetParamValue
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::GetParamValue(CWPEmailItem& aEmailItem,
+ const TInt aParamID, TInt& aVal)
+ {
+ TLex paramValue(aEmailItem.ParameterValue(aParamID));
+ return (paramValue.Val(aVal));
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetParamValue
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::GetParamValue(CWPEmailItem& aEmailItem,
+ const TDesC& aParamName, TInt& aVal)
+ {
+ TLex paramValue(aEmailItem.ParameterValue(aParamName));
+ return (paramValue.Val(aVal));
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetRetParamValuesFromCS
+// -----------------------------------------------------------------------------
+//
+TBool CWPEmailSaveItem::GetRetParamValuesFromCS(TLex& aCSParamValue,
+ const TInt aTokenMark, TPtrC& aParm)
+ {
+ aCSParamValue.Mark();
+ TInt next = aCSParamValue.Peek();
+ TChar cnext = aCSParamValue.Peek();
+ TInt count = 0;
+
+ while (!cnext.Eos())
+ {
+ if (next == aTokenMark)
+ {
+ aParm.Set(aCSParamValue.MarkedToken());
+ aCSParamValue.Inc();
+ return ETrue;
+ }
+ aCSParamValue.Inc();
+ next = aCSParamValue.Peek();
+ cnext = aCSParamValue.Peek();
+ count++;
+ }
+
+ while (count--)
+ {
+ aCSParamValue.UnGet();
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetRetHoursValueL
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::GetRetHoursValueL(TLex& aCSParamValue,
+ TInt aTokenMark, TInt64& aRetHourMinValue)
+ {
+ TInt err = KErrGeneral;
+ TPtrC retHour(KNullDesC);
+ TPtrC retMin(KNullDesC);
+
+ if (GetRetParamValuesFromCS(aCSParamValue, KColonChar, retHour)
+ && GetRetParamValuesFromCS(aCSParamValue, aTokenMark, retMin))
+ {
+ if (retHour.Length() != KRetHourStandardLength || retMin.Length()
+ != KRetMinStandardLength)
+ {
+ return KErrOverflow;
+ }
+ TLex lexRetHour(retHour);
+ TLex lexRetMin(retMin);
+ TInt64 valRetHour;
+ TInt64 valRetMin;
+
+ err = ValidateRetHourorMin(lexRetHour);
+
+ if (!err)
+ {
+ err = ValidateRetHourorMin(lexRetMin);
+ }
+
+ if (!err)
+ {
+ err = lexRetHour.Val(valRetHour);
+ }
+
+ if (!err)
+ {
+ err = lexRetMin.Val(valRetMin);
+ }
+
+ if (!err)
+ {
+ //Check for the boundary values
+ if (valRetHour >= KRetHourLowerBound && valRetHour
+ <= KRetHourUpperBound && valRetMin >= KRetMinLowerBound
+ && valRetMin <= KRetMinUpperBound)
+ {
+ const TDesC& retSecMilliSec(KRetSecMilliSec);
+ TInt retHourMinMaxSize = retHour.Size() + retMin.Size()
+ + retSecMilliSec.Size();
+ TInt retHourMaxSize = retHour.Size();
+ TInt retMinMaxSize = retMin.Size();
+ HBufC* bufRetHour = HBufC::NewL(retHourMaxSize);
+ HBufC* bufRetMin = HBufC::NewL(retMinMaxSize);
+ HBufC* bufRetHourMin = HBufC::NewL(retHourMinMaxSize);
+
+ TPtr ptrRetHour(bufRetHour->Des());
+ //Change the Absolute Integer Hour value to a string
+ GetRetHourorMinfromIntValue(retHour, valRetHour, ptrRetHour);
+
+ TPtr ptrRetMin(bufRetMin->Des());
+ //Change the Absolute Integer Min value to a string
+ GetRetHourorMinfromIntValue(retMin, valRetMin, ptrRetMin);
+
+ TPtr retHourMin(bufRetHourMin->Des());
+ retHourMin.Append(ptrRetHour);
+ retHourMin.Append(ptrRetMin);
+ //Make the string to be in proper Time format
+ retHourMin.Append(retSecMilliSec);
+
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::GetRetHoursValueL: retHourMin value %i", retHourMin );
+
+ TTime timeretHour(retHourMin);
+ aRetHourMinValue = timeretHour.Int64();
+ delete bufRetHourMin;
+ delete bufRetMin;
+ delete bufRetHour;
+
+ }
+ else
+ {
+ return KErrOverflow;
+ }
+ }
+
+ }
+
+ return err;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetRetDaysL
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::SetRetDaysL(TLex& aCSParamValue,
+ CImumDaSettingsData& aEmailSettingsData)
+ {
+ TInt err = KErrGeneral;
+ TPtrC retDays(KNullDesC);
+
+ if (GetRetParamValuesFromCS(aCSParamValue, KGTChar, retDays))
+ {
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::SetRetDaysL: retDays value, %i", retDays );
+
+ const TDesC& comma(KComma);
+ const TInt retDaysMaxSize = retDays.Size() + comma.Size();
+ HBufC* bufRetDays = HBufC::NewL(retDaysMaxSize);
+ *bufRetDays = retDays;
+
+ TPtr ptrRetDays(bufRetDays->Des());
+ //Append comma to demarcate the last day
+ ptrRetDays.Append(comma);
+
+ if (ptrRetDays.Length() > KRetDaysStandardMaxLength)
+ {
+ delete bufRetDays;
+ return KErrOverflow;
+ }
+
+ TLex lexRetDays(ptrRetDays);
+ TChar next = lexRetDays.Peek();
+ TInt retDaysFlag = 0x0000000;
+
+ while (!next.Eos())
+ {
+ TPtrC retDay(KNullDesC);
+
+ if (GetRetParamValuesFromCS(lexRetDays, KCommaChar, retDay))
+ {
+ if (retDay.Length() != KRetDayStandardLength)
+ {
+ delete bufRetDays;
+ return KErrOverflow;
+ }
+ TLex lexRetDay(retDay);
+ TInt retDayVal;
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::SetRetDaysL: retDay value, %i", retDay );
+
+ err = lexRetDay.Val(retDayVal);
+ if (!err)
+ {
+ switch (retDayVal)
+ {
+ case KRetSunday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagSunday;
+ break;
+ }
+ case KRetMonday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagMonday;
+ break;
+ }
+ case KRetTuesday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagTuesday;
+ break;
+ }
+ case KRetWednesday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagWednesday;
+ break;
+ }
+ case KRetThursday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagThursday;
+ break;
+ }
+ case KRetFriday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagFriday;
+ break;
+ }
+ case KRetSaturday:
+ {
+ retDaysFlag |= TImumDaSettings::EFlagSaturday;
+ break;
+ }
+ default:
+ {
+ delete bufRetDays;
+ return KErrOverflow;
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+
+ }
+
+ next = lexRetDays.Peek();
+ }
+
+ if (!err && retDaysFlag)
+ {
+ //If the flag is set, set the value to Retrieval Days
+ err = aEmailSettingsData.SetAttr(
+ TImumDaSettings::EKeyAutoRetrievalDays, retDaysFlag);
+ }
+
+ delete bufRetDays;
+ }
+
+ return err;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::SetPollValue
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::SetPollValue(CImumDaSettingsData& aEmailSettingsData,
+ TInt aPollValue)
+ {
+ TInt err = KErrGeneral;
+ TInt pollhour = aPollValue / 60;
+ TInt pollmin = aPollValue % 60;
+ TInt pollval = pollhour;
+
+ if (!pollhour)
+ {
+ pollval = pollmin;
+ }
+
+ //Consider only the absolute minutes and absolute hours
+ if ((pollhour && !pollmin) || (!pollhour && pollmin))
+ {
+ TInt val = 0;
+ switch (pollval)
+ {
+ case KPoll5minutes:
+ {
+ val = TImumDaSettings::EValue5Minutes;
+ break;
+ }
+ case KPoll15minutes:
+ {
+ val = TImumDaSettings::EValue15Minutes;
+ break;
+ }
+ case KPoll30minutes:
+ {
+ val = TImumDaSettings::EValue30Minutes;
+ break;
+ }
+ case KPoll1Hour:
+ {
+ val = TImumDaSettings::EValue1Hour;
+ break;
+ }
+ case KPoll2Hours:
+ {
+ val = TImumDaSettings::EValue2Hours;
+ break;
+ }
+ case KPoll4Hours:
+ {
+ val = TImumDaSettings::EValue4Hours;
+ break;
+ }
+ case KPoll6Hours:
+ {
+ val = TImumDaSettings::EValue6Hours;
+ break;
+ }
+ }
+ if (val)
+ {
+ //If val is set, set it to Poll
+ err = aEmailSettingsData.SetAttr(
+ TImumDaSettings::EKeyAutoRetrievalInterval, val);
+ }
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidateUserNamePassword
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::ValidateUserNamePassword(
+ MImumDaSettingsDataCollection& aPopImapSet, TBool& aValidUserPass )
+ {
+ TInt err = KErrGeneral;
+ TImumDaSettings::TTextUserName userName(KNullDesC8);
+ TImumDaSettings::TTextPassword passWord(KNullDesC8);
+
+ err = aPopImapSet.GetAttr(TImumDaSettings::EKeyUsername, userName);
+
+ if (!err)
+ {
+ err = aPopImapSet.GetAttr(TImumDaSettings::EKeyPassword, passWord);
+ }
+
+ if (!err && userName.Length() > 0 && passWord.Length() > 0)
+ {
+ aValidUserPass = ETrue;
+ }
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::GetRetHourorMinfromIntValue
+// -----------------------------------------------------------------------------
+//
+void CWPEmailSaveItem::GetRetHourorMinfromIntValue(TPtrC& aRetHourMin,
+ TInt64 aValRetHourMin, TPtr& aPtrRetHourMin)
+ {
+ const TDesC& retLeadingZero(KRetLeadingZero);
+ TInt retHourMaxSize = aRetHourMin.Size();
+ HBufC* bufRetHourMin = HBufC::NewL(retHourMaxSize);
+ HBufC* TempBufRetHourMin = HBufC::NewL(retHourMaxSize);
+
+ TPtr ptrTempRetHourMin(TempBufRetHourMin->Des());
+ ptrTempRetHourMin.Num(aValRetHourMin);
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::GetRetHoursValueL: ptrTempRetHourMin value, %i ", ptrTempRetHourMin );
+
+ if (aValRetHourMin < KRetHourMinLeadLimit)
+ {
+ aPtrRetHourMin.Append(retLeadingZero);
+ }
+
+ aPtrRetHourMin.Append(ptrTempRetHourMin);
+ LOGSTRING2( "[Provisioning] CWPEmailSaveItem::GetRetHoursValueL: aPtrRetHourMin value %i", aPtrRetHourMin );
+
+ delete TempBufRetHourMin;
+ delete bufRetHourMin;
+ }
+
+// -----------------------------------------------------------------------------
+// CWPEmailSaveItem::ValidateRetHourorMin
+// -----------------------------------------------------------------------------
+//
+TInt CWPEmailSaveItem::ValidateRetHourorMin(TLex& aRetHourMin)
+ {
+ TChar cnext = aRetHourMin.Peek();
+ TInt count = 0;
+
+ while (!cnext.Eos())
+ {
+ if (!(cnext.IsDigit()))
+ {
+ return KErrGeneral;
+ }
+ aRetHourMin.Inc();
+ cnext = aRetHourMin.Peek();
+ count++;
+ }
+
+ while (count--)
+ {
+ aRetHourMin.UnGet();
+ }
+
+ return KErrNone;
+ }
+// End of File