diff -r 000000000000 -r 3ce708148e4d omadm/omadmextensions/adapters/email/src/nsmldmemailadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadm/omadmextensions/adapters/email/src/nsmldmemailadapter.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,3334 @@ +/* +* Copyright (c) 2004 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: DM Email Settings Adapter + * +*/ + + + + +#include // For TImplementationProxy definition +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "nsmldmimpluids.h" +#include "nsmldmemailadapter.h" +#include "nsmldebug.h" +#include "nsmlconstants.h" +#include "nsmldmconst.h" +#include "nsmldmiapmatcher.h" + +#ifndef __WINS__ +// This lowers the unnecessary compiler warning (armv5) to remark. +// "Warning: #174-D: expression has no effect..." is caused by +// DBG_ARGS8 macro in no-debug builds. +#pragma diag_remark 174 +#endif + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter* CNSmlDmEmailAdapter::NewL( ) +// ----------------------------------------------------------------------------- +CNSmlDmEmailAdapter* CNSmlDmEmailAdapter::NewL(MSmlDmCallback* aDmCallback ) + { + _DBG_FILE("CNSmlDmEmailAdapter::NewL(): begin"); + CNSmlDmEmailAdapter* self = new (ELeave) CNSmlDmEmailAdapter(aDmCallback); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + _DBG_FILE("CNSmlDmEmailAdapter::NewL(): end"); + return self; + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::CNSmlDmEmailAdapter() +// ----------------------------------------------------------------------------- + +CNSmlDmEmailAdapter::CNSmlDmEmailAdapter( MSmlDmCallback* aDmCallback ) + : CSmlDmAdapter(aDmCallback) + { + _DBG_FILE("CNSmlDmEmailAdapter::CNSmlDmEmailAdapter(): begin"); + iMsvSession = NULL; + _DBG_FILE("CNSmlDmEmailAdapter::CNSmlDmEmailAdapter(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::ConstructL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::ConstructL() + { + iBuffer = new (ELeave) CArrayFixFlat + (KNSmlDmEmailGranularity); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::~CNSmlDmEmailAdapter() +// ----------------------------------------------------------------------------- +CNSmlDmEmailAdapter::~CNSmlDmEmailAdapter() + { + _DBG_FILE("CNSmlDmEmailAdapter::~CNSmlDmEmailAdapter(): begin"); + delete iMsvSession; + if(iBuffer) + { + for(TInt i=0;iCount();i++) + { + delete iBuffer->At(i).iMappingName; + delete iBuffer->At(i).iName; + delete iBuffer->At(i).iSmtpSettings; + delete iBuffer->At(i).iPop3Settings; + delete iBuffer->At(i).iImap4Settings; + delete iBuffer->At(i).iIapPref; + delete iBuffer->At(i).iSmtpIapPref; + + if(iBuffer->At(i).iNodeBuf) + { + for(TInt j=0;jAt(i).iNodeBuf->Count();j++) + { + delete iBuffer->At(i).iNodeBuf->At(j).iLastUriSeg; + delete iBuffer->At(i).iNodeBuf->At(j).iData; + } + iBuffer->At(i).iNodeBuf->Reset(); + delete iBuffer->At(i).iNodeBuf; + } + } + iBuffer->Reset(); + delete iBuffer; + } + + _DBG_FILE("CNSmlDmEmailAdapter::~CNSmlDmEmailAdapter(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::DDFVersionL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::DDFVersionL(CBufBase& aDDFVersion) + { + _DBG_FILE("CNSmlDmEmailAdapter::DDFVersionL(TDes& aDDFVersion): begin"); + aDDFVersion.InsertL(0,KNSmlDMEmailDDFVersion); + _DBG_FILE("CNSmlDmEmailAdapter::DDFVersionL(TDes& aDDFVersion): end"); + } + + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::DDFStructureL() +// +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::DDFStructureL(MSmlDmDDFObject& aDDF) + { + _DBG_FILE("CNSmlDmEmailAdapter::DDFStructureL(): begin"); + + TSmlDmAccessTypes accessTypesNode; + + accessTypesNode.SetGet(); + + // Email + MSmlDmDDFObject& email = aDDF.AddChildObjectL(KNSmlDMEmailNodeName); + FillNodeInfoL(email,accessTypesNode,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EPermanent, + MSmlDmDDFObject::ENode,KNSmlDMEmailDescription); + + accessTypesNode.SetAdd(); + accessTypesNode.SetDelete(); + accessTypesNode.SetReplace(); + MSmlDmDDFObject& rtNode = email.AddChildObjectGroupL(); + + + FillNodeInfoL(rtNode,accessTypesNode,MSmlDmDDFObject::EZeroOrMore, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::ENode, + KNSmlDMDynamicNodeDescription); + + TSmlDmAccessTypes accessTypes; + accessTypes.SetGet(); + accessTypes.SetAdd(); + accessTypes.SetReplace(); + //displayable account name + MSmlDmDDFObject& name = rtNode.AddChildObjectL(KNSmlDMEmailName); + FillNodeInfoL(name,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMNameDescription); + + //user id for email account + MSmlDmDDFObject& uid = rtNode.AddChildObjectL(KNSmlDMEmailUID); + FillNodeInfoL(uid,accessTypes,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMUIDDescription); + + //password for email account + TSmlDmAccessTypes accessTypesPw; + accessTypesPw.SetAdd(); + accessTypesPw.SetReplace(); + MSmlDmDDFObject& pw = rtNode.AddChildObjectL(KNSmlDMEmailPW); + FillNodeInfoL(pw,accessTypesPw,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMPWDescription); + + //user's email address + MSmlDmDDFObject& uaddr = rtNode.AddChildObjectL(KNSmlDMEmailUAddr); + FillNodeInfoL(uaddr,accessTypes,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMUAddrDescription); + + //Displayable name for the user + MSmlDmDDFObject& uname = rtNode.AddChildObjectL(KNSmlDMEmailUName); + FillNodeInfoL(uname,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMUNameDescription); + + //Host name for the receiving server + MSmlDmDDFObject& mrcv = rtNode.AddChildObjectL(KNSmlDMEmailMrcv); + FillNodeInfoL(mrcv,accessTypes,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMMrcvDescription); + + //Host name for the sending server + MSmlDmDDFObject& msnd = rtNode.AddChildObjectL(KNSmlDMEmailMsnd); + FillNodeInfoL(msnd,accessTypes,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMMsndDescription); + + //Remote mailbox protocol + MSmlDmDDFObject& mpro = rtNode.AddChildObjectL(KNSmlDMEmailMpro); + FillNodeInfoL(mpro,accessTypes,MSmlDmDDFObject::EOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMMproDescription); + + //Use secure connection + MSmlDmDDFObject& useSecCon = rtNode.AddChildObjectL(KNSmlDMEmailUseSecCon); + FillNodeInfoL(useSecCon,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMUseSecConDescription); + + //Use APop + MSmlDmDDFObject& useAPOP = rtNode.AddChildObjectL(KNSmlDMEmailUseAPOP); + FillNodeInfoL(useAPOP, accessTypes, MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EBool, + KNSmlDMUseAPOPDescription ); + + //Use smtp authentication + MSmlDmDDFObject& useSauth = rtNode.AddChildObjectL(KNSmlDMEmailUseSauth); + FillNodeInfoL(useSauth,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMUseSauthDescription); + + //smtp authentication user id + MSmlDmDDFObject& sauthUid = rtNode.AddChildObjectL(KNSmlDMEmailSauthUID); + FillNodeInfoL(sauthUid,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMSauthUIDDescription); + + //Use smtp authentication + MSmlDmDDFObject& sauthPw = rtNode.AddChildObjectL(KNSmlDMEmailSauthPW); + FillNodeInfoL(sauthPw,accessTypesPw,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMSauthPWDescription); + + //Use smtp authentication + MSmlDmDDFObject& ptxtSAuth = rtNode.AddChildObjectL(KNSmlDMEmailPtxtSAuth); + FillNodeInfoL(ptxtSAuth,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMPtxtSAuthDescription); + + //Link to IAP + MSmlDmDDFObject& toNapId = rtNode.AddChildObjectL(KNSmlDMEmailToNapID); + FillNodeInfoL(toNapId,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMToNapIDDescription); + + //Link to IAP for SMTP + MSmlDmDDFObject& sToNapId = rtNode.AddChildObjectL(KNSmlDMEmailSToNapID); + FillNodeInfoL(sToNapId,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMSToNapIDDescription); + + //SSL/TLS used in SMTP + MSmlDmDDFObject& sUseSecCon = rtNode. + AddChildObjectL(KNSmlDMEmailSUseSecCon); + FillNodeInfoL(sUseSecCon,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMSUseSecConDescription); + + //StartTLS used in IMAP/POP + MSmlDmDDFObject& useStartTls = rtNode. + AddChildObjectL(KNSmlDMEmailUseStartTLS); + FillNodeInfoL(useStartTls,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMUseStartTLSDescription); + + //StartTLS used in SMTP + MSmlDmDDFObject& sUseStartTls = rtNode. + AddChildObjectL(KNSmlDMEmailSUseStartTLS); + FillNodeInfoL(sUseStartTls,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EBool, + KNSmlDMSUseStartTLSDescription); + + //port of IMAP/POP server + MSmlDmDDFObject& mrcvPort = rtNode.AddChildObjectL(KNSmlDMEmailMrcvPort); + FillNodeInfoL(mrcvPort,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EInt, + KNSmlDMMrcvPortDescription); + + //port of SMTP server + MSmlDmDDFObject& msndPort = rtNode.AddChildObjectL(KNSmlDMEmailMsndPort); + FillNodeInfoL(msndPort,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EInt, + KNSmlDMMsndPortDescription); + + //IMAP folder path + MSmlDmDDFObject& folderPath = rtNode. + AddChildObjectL(KNSmlDMEmailFolderPath); + FillNodeInfoL(folderPath,accessTypes,MSmlDmDDFObject::EZeroOrOne, + MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::EChr, + KNSmlDMFolderPathDescription); + + _DBG_FILE("CNSmlDmEmailAdapter::DDFStructureL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::UpdateLeafObjectL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::UpdateLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TDesC8& /*aType*/, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): begin"); + + TInt index = -1; + TBool firstAdd = EFalse; + + for(TInt i = 0; iCount(); i++) + { + TPtrC8 parentUri = RemoveLastURISeg(aURI); + //Check Node from buffer if match + if(iBuffer->At(i).iMappingName->Compare(parentUri) == 0 ) + { + firstAdd = ETrue; + index = i; + break; + } + } + + TInt luid = DesToInt(aLUID); + + if(aLUID.Length()==0 && index<0) + { + luid = ConstructTreeL(aURI); + if(luid == -1) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + return; + } + } + + if( OpenSessionL() != KErrNone ) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + return; + } + + if(!firstAdd) + { + + if(LastURISeg(aURI).Compare(KNSmlDMEmailMpro)==0) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + return; + } + index = -1; + for(TInt i=0;iCount();i++) + { + if(iBuffer->At(i).iLuid == luid) + { + index = i; + break; + } + } + + if(index<0) + { + TNSmlEmailSettingsElement newNode; + newNode.iImap4Settings = NULL; + newNode.iPop3Settings = NULL; + newNode.iSmtpSettings = NULL; + newNode.iIapPref = NULL; + newNode.iSmtpIapPref = NULL; + newNode.iLuid = luid; + newNode.iMappingName = aURI.AllocLC(); + newNode.iName = HBufC::NewLC(0); + newNode.iNodeBuf = new (ELeave) CArrayFixFlat + (KNSmlDmEmailGranularity); + newNode.iExecuted = ETrue; + GetIdByLuid(newNode.iAccType, newNode.iAccId, luid); + iBuffer->AppendL(newNode); + index = iBuffer->Count() - 1; + TInt err = DoRestoreSettingsL(index); + if(err!=KErrNone) + { + CleanupStack::PopAndDestroy(2); //newNode.iMappingName,newNode.iName + newNode.iMappingName = NULL; + newNode.iName = NULL; + iBuffer->At(index).iNodeBuf->Reset(); + delete iBuffer->At(index).iNodeBuf; + iBuffer->Delete(index); + } + if(err==KErrNotFound) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + return; + } + else if(err!=KErrNone) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + return; + } + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + } + TNSmlEmailCommandElement newCommand; + newCommand.iLastUriSeg = LastURISeg(aURI).AllocLC(); + newCommand.iData = NULL; + newCommand.iStatusRef = aStatusRef; + newCommand.iLeaf = ETrue; + newCommand.iStatus = CSmlDmAdapter::EOk; + iBuffer->At(index).iNodeBuf->AppendL(newCommand); + CleanupStack::Pop(); //newCommand.iLastUriSeg + iBuffer->At(index).iJustFetch=EFalse; + DoAddLeafObjectL(newCommand.iLastUriSeg->Des(),aObject,index, + iBuffer->At(index).iNodeBuf->Count()-1); + } + else + { + FirstAddLeafL(aURI,aObject,aStatusRef,index); + } + + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::DeleteObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, +// const TInt aStatusRef ) +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::DeleteObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): begin"); + if(NumOfURISegs(aURI)==2) + { + if(aLUID.Length()==0) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): ENotFound end"); + return; + } + + TInt luid = DesToInt(aLUID); + TInt err = OpenSessionL(); + if(err!=KErrNone) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): EError end"); + return; + } + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + TNSmlEmailAccountType accType; + TInt id; + GetIdByLuid(accType, id, luid ); + if( AccountExistsL( emailAccs, accType, id, -1 ) ) + { + switch ( accType ) + { + case EImap: + { + RArray imap4Accs; + CleanupClosePushL( imap4Accs ); + emailAccs->GetImapAccountsL( imap4Accs ); + + for (TInt i(0); i < imap4Accs.Count(); i++) + { + if ( imap4Accs[i].iImapAccountId == id ) + { + // Delete also related Smtp account + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( imap4Accs[i].iSmtpService, relatedSmtp ); + emailAccs->DeleteImapAccountL( imap4Accs[i] ); + emailAccs->DeleteSmtpAccountL( relatedSmtp ); + //The only email a/c in phone gettiong deleted , so delete the default sntp a/c + if( imap4Accs.Count() == 1 ) + { + TInt deferr = KErrNone; + TRAP(deferr, emailAccs->DeleteDefaultSmtpAccountL()); + DBG_ARGS(_S16("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): Delete default smtp account Error code %d"),deferr); + } + break; + } + } + + CleanupStack::PopAndDestroy(&imap4Accs); //imap4Accs + + // If the default account was just deleted, + // new one needs to be set. + // + TSmtpAccount defaultSmtp; + TInt retVal = emailAccs->DefaultSmtpAccountL( defaultSmtp ); + if ( retVal != KErrNone ) + { + RArray imapAccs; + CleanupClosePushL( imapAccs ); + emailAccs->GetImapAccountsL( imapAccs ); + if ( imapAccs.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( imapAccs[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &imapAccs ); + RArray popAccounts; + CleanupClosePushL( popAccounts ); + emailAccs->GetPopAccountsL( popAccounts ); + if ( popAccounts.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( popAccounts[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &popAccounts ); + } + break; + } + + case EPop: + { + RArray popAccs; + CleanupClosePushL( popAccs ); + emailAccs->GetPopAccountsL( popAccs ); + + for (TInt i(0); i < popAccs.Count(); i++) + { + if ( popAccs[i].iPopAccountId == id ) + { + // Delete also related Smtp account + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( popAccs[i].iSmtpService, relatedSmtp ); + emailAccs->DeletePopAccountL( popAccs[i] ); + emailAccs->DeleteSmtpAccountL( relatedSmtp ); + if( popAccs.Count() == 1 ) + { + TInt deferr = KErrNone; + TRAP(deferr, emailAccs->DeleteDefaultSmtpAccountL()); + DBG_ARGS(_S16("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): Delete default smtp account Error code %d "),deferr); + } + break; + } + } + + CleanupStack::PopAndDestroy(); //popAccs + + // If the default account was just deleted, + // new one needs to be set. + // + TSmtpAccount defSmtp; + TInt retVal = emailAccs->DefaultSmtpAccountL( defSmtp ); + if ( retVal != KErrNone ) + { + RArray popAccounts; + CleanupClosePushL( popAccounts ); + emailAccs->GetPopAccountsL( popAccounts ); + if ( popAccounts.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( popAccounts[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &popAccounts ); + RArray imapAccs; + CleanupClosePushL( imapAccs ); + emailAccs->GetImapAccountsL( imapAccs ); + if ( imapAccs.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( imapAccs[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &imapAccs ); + } + break; + } + + default: + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + break; + } + + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EOk); + } + else + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + } + CleanupStack::PopAndDestroy(); //emailAccs + } + else + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + } + + _DBG_FILE("CNSmlDmEmailAdapter::DeleteLeafObjectL( ): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::FetchLeafObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, +// const TDesC8& aType, +// const TInt aResultsRef, +// const TInt aStatusRef ) +// +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::FetchLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectL(): begin"); + + TInt luid = DesToInt(aLUID); + + if(aLUID.Length()==0) + { + luid = ConstructTreeL(aURI); + if(luid == -1) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::ENotFound); + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectL(): ENotFound end"); + return; + } + } + if( OpenSessionL() != KErrNone ) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectL(): EError end"); + return; + } + + TInt index = -1; + for(TInt i=0;iCount();i++) + { + if(iBuffer->At(i).iLuid == luid) + { + index = i; + break; + } + } + + if(index<0) + { + TNSmlEmailSettingsElement newNode; + newNode.iImap4Settings = NULL; + newNode.iPop3Settings = NULL; + newNode.iSmtpSettings = NULL; + newNode.iIapPref = NULL; + newNode.iSmtpIapPref = NULL; + newNode.iLuid = luid; + newNode.iMappingName = aURI.AllocLC(); + newNode.iName = HBufC::NewLC(0); + newNode.iNodeBuf = new (ELeave) + CArrayFixFlat (KNSmlDmEmailGranularity); + newNode.iExecuted = ETrue; + newNode.iJustFetch = ETrue; + GetIdByLuid(newNode.iAccType, newNode.iAccId, luid); + iBuffer->AppendL(newNode); + index = iBuffer->Count() - 1; + if( DoRestoreSettingsL(index) != KErrNone ) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectL(): EError end"); + return; + } + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + } + + TPtrC8 lastUriSeg = LastURISeg(aURI); + CBufBase* object = CBufFlat::NewL(32); + CleanupStack::PushL(object); + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + + if(lastUriSeg.Compare(KNSmlDMEmailName)==0) + { + HBufC8 *data = HBufC8::NewLC(iBuffer->At(index).iName->Length()); + TPtr8 dataPtr = data->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( + dataPtr,iBuffer->At(index).iName->Des() ); + object->InsertL(0,dataPtr); + CleanupStack::PopAndDestroy(); //data + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUID)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iPop3Settings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iPop3Settings->LoginName()); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iImap4Settings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iImap4Settings->LoginName()); + } + if(data) + { + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + object->InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailPW)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iPop3Settings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iPop3Settings->Password()); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iImap4Settings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iImap4Settings->Password()); + } + if(data) + { + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + object->InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUAddr)==0) + { + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->EmailAddress().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + object->InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUName)==0) + { + + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->EmailAlias().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + object->InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + + else if(lastUriSeg.Compare( KNSmlDMEmailMrcv)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = iBuffer->At(index).iPop3Settings->ServerAddress().AllocLC(); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = iBuffer->At(index).iImap4Settings->ServerAddress().AllocLC(); + } + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + object->InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMsnd)==0) + { + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->ServerAddress().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + object->InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMpro)==0) + { + if(iBuffer->At(index).iPop3Settings!= NULL) + { + object->InsertL(0,KNSmlDMEmailMproPOP); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + object->InsertL(0,KNSmlDMEmailMproIMAP); + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUseSecCon)==0) + { + FetchSecurityValueL(*object, &iBuffer->At(index), EUseSecCon ); + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUseSauth)==0) + { + if(iBuffer->At(index).iSmtpSettings->SMTPAuth()) + { + object->InsertL(0,KNSmlDMEmailTrue); + } + else + { + object->InsertL(0,KNSmlDMEmailFalse); + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailSauthUID)==0) + { + HBufC *data = HBufC::NewLC(iBuffer->At(index).iSmtpSettings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iSmtpSettings->LoginName()); + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + object->InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + + else if(lastUriSeg.Compare(KNSmlDMEmailSauthPW)==0) + { + HBufC *data = HBufC::NewLC(iBuffer->At(index).iSmtpSettings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iSmtpSettings->Password()); + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + object->InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + + else if(lastUriSeg.Compare(KNSmlDMEmailPtxtSAuth)==0) + { + if(iBuffer->At(index).iSmtpSettings->InboxLoginDetails()) + { + object->InsertL(0,KNSmlDMEmailTrue); + } + else + { + object->InsertL(0,KNSmlDMEmailFalse); + } + } + + else if (lastUriSeg.Compare(KNSmlDMEmailSUseSecCon)==0) + { + FetchSecurityValueL(*object, &iBuffer->At(index), ESuseSecCon ); + } + + else if (lastUriSeg.Compare(KNSmlDMEmailUseStartTLS)==0) + { + FetchSecurityValueL(*object, &iBuffer->At(index), EUseStartTls ); + } + + else if (lastUriSeg.Compare(KNSmlDMEmailSUseStartTLS)==0) + { + FetchSecurityValueL(*object, &iBuffer->At(index), ESuseStartTls ); + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMrcvPort)==0) + { + TUint port; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + port = iBuffer->At(index).iPop3Settings->Port(); + } + else + { + port = iBuffer->At(index).iImap4Settings->Port(); + } + HBufC8 *data = IntToDes8LC(port); + object->InsertL(0,data->Des()); + CleanupStack::PopAndDestroy(); //data + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMsndPort)==0) + { + TUint port = iBuffer->At(index).iSmtpSettings->Port(); + HBufC8 *data = IntToDes8LC(port); + object->InsertL(0,data->Des()); + CleanupStack::PopAndDestroy(); //data + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUseAPOP)==0) + { + if(iBuffer->At(index).iPop3Settings!= NULL) + { + if(iBuffer->At(index).iPop3Settings->Apop()) + { + object->InsertL(0,KNSmlDMEmailTrue); + } + else + { + object->InsertL(0,KNSmlDMEmailFalse); + } + } + else + { + status = CSmlDmAdapter::ENotFound; + } + } + + else if (lastUriSeg.Compare(KNSmlDMEmailFolderPath)==0) + { + if(iBuffer->At(index).iImap4Settings) + { + object->InsertL(0, iBuffer->At(index).iImap4Settings->FolderPath() ); + } + else + { + status = CSmlDmAdapter::ENotFound; + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailToNapID)==0) + { + + CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + HBufC8* uri8 = NULL; + TInt iapCount = iBuffer->At(index).iIapPref->NumberOfIAPs(); + if ( iapCount ) + { + TImIAPChoice localIAP = iBuffer->At(index).iIapPref->IAPPreference(0); + uri8 = iapmatch->URIFromIAPIdL( localIAP.iIAP ); + } + + if( uri8 ) + { + CleanupStack::PushL(uri8); + object->InsertL(0,uri8->Des()); + status = CSmlDmAdapter::EOk; + CleanupStack::PopAndDestroy(); // uri8 + } + else + { + status = CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapMatch + } + else if(lastUriSeg.Compare(KNSmlDMEmailSToNapID)==0) + { + + // SToNapID exists only for SMTP + if (iBuffer->At(index).iSmtpSettings!= NULL) + { + CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + HBufC8* uri8 = NULL; + TInt iapCount = iBuffer->At(index).iIapPref->NumberOfIAPs(); + if ( iapCount ) + { + TImIAPChoice localIAP = iBuffer->At(index).iSmtpIapPref->IAPPreference(0); + uri8 = iapmatch->URIFromIAPIdL( localIAP.iIAP ); + } + + if( uri8 ) + { + CleanupStack::PushL(uri8); + object->InsertL(0,uri8->Des()); + status = CSmlDmAdapter::EOk; + CleanupStack::PopAndDestroy(); // uri8 + } + else + { + status = CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapMatch + } + else + { + status = CSmlDmAdapter::ENotFound; + } + } + + if(status == CSmlDmAdapter::EOk) + { + Callback().SetResultsL(aResultsRef,*object,aType); + } + Callback().SetStatusL(aStatusRef, status); + CleanupStack::PopAndDestroy(object); //object + + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::ChildURIListL( const TDesC8& aURI, +// const TDesC8& aParentLUID, +// const CArrayFix& +// aPreviousURISegmentList, +// const TInt aResultsRef, +// const TInt aStatusRef ) +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::ChildURIListL( const TDesC8& aURI, + const TDesC8& aParentLUID, + const CArrayFix& + aPreviousURISegmentList, + const TInt aResultsRef, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::ChildURIListL(): begin"); + + CSmlDmAdapter::TError ret = CSmlDmAdapter::EError; + + if( OpenSessionL() != KErrNone ) + { + Callback().SetStatusL(aStatusRef, ret); + _DBG_FILE("CNSmlDmEmailAdapter::ChildURIListL(): end"); + return; + } + CBufBase *currentList = CBufFlat::NewL(128); + CleanupStack::PushL(currentList); + + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + + if(aURI.Compare(KNSmlDMEmailNodeName)==0) + { + RArray imap4Accounts; + CleanupClosePushL( imap4Accounts ); + emailAccs->GetImapAccountsL(imap4Accounts); + + // First, IMAP accounts + // + TInt luid; + TPtrC8 name; + // cycle through every found account + for(TInt count = 0; count < imap4Accounts.Count(); count++) + { + SetLuidById( EImap, imap4Accounts[count].iImapAccountId, luid ); + + TBool found = EFalse; + // cycle through every known account + for(TInt i = 0; iDes(); + uriPtr.Format(aURI); + uriPtr.Append(KNSmlDMEmailSeparator8); + uriPtr.Append(KNSmlDMEmailMproIMAP); + TUint16 crc; + Mem::Crc ( crc, &imap4Accounts[count],sizeof(TImapAccount) ); + HBufC8 *crcBuf = IntToDes8LC(crc); + uriPtr.Append(*crcBuf); + HBufC8 *luidBuf = IntToDes8LC(luid); + Callback().SetMappingL(uriPtr,luidBuf->Des()); + currentList->InsertL( currentList->Size(),LastURISeg(uriPtr)); + CleanupStack::PopAndDestroy(3); //uri,luidBuf, crcBuf + } + else + { + currentList->InsertL( currentList->Size(),name ); + } + // in all cases: add it to results. + if(count < imap4Accounts.Count()-1 ) + { + currentList->InsertL(currentList->Size(),KNSmlDMEmailSeparator8); + } + } + CleanupStack::PopAndDestroy(); //imap4Accounts + + // Then, POP accounts + // + RArray pop3Accounts; + CleanupClosePushL( pop3Accounts ); + emailAccs->GetPopAccountsL( pop3Accounts ); + if (pop3Accounts.Count()&¤tList->Size()>0) + { + // there is at least one account; insert separator + currentList->InsertL(currentList->Size(),KNSmlDMEmailSeparator8); + } + // cycle through every found account + for(TInt count = 0; count < pop3Accounts.Count(); count++) + { + SetLuidById( EPop, pop3Accounts[count].iPopAccountId, luid ); + + TBool found = EFalse; + // cycle through every known account + for(TInt i = 0; iDes(); + uriPtr.Format(aURI); + uriPtr.Append(KNSmlDMEmailSeparator8); + uriPtr.Append(KNSmlDMEmailMproPOP); + TUint16 crc; + Mem::Crc ( crc, &pop3Accounts[count],sizeof(TPopAccount) ); + HBufC8 *crcBuf = IntToDes8LC(crc); + uriPtr.Append(*crcBuf); + HBufC8 *luidBuf = IntToDes8LC(luid); + Callback().SetMappingL(uriPtr,luidBuf->Des()); + currentList->InsertL( currentList->Size(),LastURISeg(uriPtr)); + CleanupStack::PopAndDestroy(3); //uri,luidBuf,crcBuf + } + else + { + currentList->InsertL( currentList->Size(),name ); + } + // in all cases: add it to results. + if(count < pop3Accounts.Count()-1) + { + currentList->InsertL(currentList->Size(),KNSmlDMEmailSeparator8); + } + } + CleanupStack::PopAndDestroy(); //pop3Accounts + ret = CSmlDmAdapter::EOk; + } + else + { + if(aParentLUID.Length() > 0) + { + TInt err = KErrNotFound; + TInt luid = DesToInt(aParentLUID); + TNSmlEmailAccountType accType; + TInt id; + GetIdByLuid( accType, id, luid ); + switch ( accType ) + { + case EImap: + { + RArray imap4Accounts; + CleanupClosePushL( imap4Accounts ); + emailAccs->GetImapAccountsL( imap4Accounts ); + for ( TInt i=0; i pop3Accounts; + CleanupClosePushL( pop3Accounts ); + emailAccs->GetPopAccountsL(pop3Accounts); + for ( TInt i=0; iInsertL(0,KNSmlDMEmailListOfLeafs); + } + } + else + { + ret = CSmlDmAdapter::ENotFound; + } + } + // Common part + Callback().SetStatusL(aStatusRef, ret); + if( ret == CSmlDmAdapter::EOk ) + { + Callback().SetResultsL(aResultsRef,*currentList,KNullDesC8); + } + + CleanupStack::PopAndDestroy(emailAccs); //emailAccs + CleanupStack::PopAndDestroy(currentList); //currentList + _DBG_FILE("CNSmlDmEmailAdapter::ChildURIListL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::AddNodeObjectL( const TDesC8& aURI, +// const TDesC8& aParentLUID, const TInt aStatusRef ) +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::AddNodeObjectL( const TDesC8& aURI, + const TDesC8& aParentLUID, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): begin"); + + if(aParentLUID.Length()>0) + { + TInt luid = DesToInt(aParentLUID); + TInt accId; + TNSmlEmailAccountType accType; + GetIdByLuid( accType, accId, luid ); + TInt err = OpenSessionL(); + if(err!=KErrNone) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): EError end"); + return; + } + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + TBool accEx = AccountExistsL( emailAccs, accType, accId, -1 ); + CleanupStack::PopAndDestroy( emailAccs ); + if( accEx ) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EAlreadyExists); + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): EAlreadyExists end"); + return; + } + Callback().SetMappingL(aURI,KNullDesC8); + } + + if( aURI.Find(KNSmlDMEmailNodeName)>=0 && NumOfURISegs(aURI)==2 ) + { + if( OpenSessionL() != KErrNone ) + { + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): EError end"); + return; + } + + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL(fs); + //2files and 2 folders are needed for settings + if (SysUtil::FFSSpaceBelowCriticalLevelL(&fs, + KNSmlDmFatMinimumFileSize*4)) + { + CleanupStack::PopAndDestroy(); //fs + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EDiskFull); + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): EDiskFull end"); + return; + // do not write + } + CleanupStack::PopAndDestroy(); //fs + + + TNSmlEmailSettingsElement newNode; + newNode.iMappingName = aURI.AllocLC(); + newNode.iName = HBufC::NewLC(0); + newNode.iNodeBuf = new (ELeave) + CArrayFixFlat (KNSmlDmEmailGranularity); + newNode.iExecuted = EFalse; + newNode.iImap4Settings = NULL; + newNode.iPop3Settings = NULL; + newNode.iSmtpSettings = NULL; + newNode.iIapPref = NULL; + newNode.iSmtpIapPref = NULL; + newNode.iLuid = 0; + newNode.iJustFetch=EFalse; + iBuffer->AppendL(newNode); + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + TNSmlEmailCommandElement newCommand; + newCommand.iLastUriSeg = LastURISeg(aURI).AllocLC(); //aURI.AllocLC(); + newCommand.iData = NULL; + newCommand.iStatusRef = aStatusRef; + newCommand.iLeaf = EFalse; + newCommand.iStatus = CSmlDmAdapter::EOk; + TInt index = iBuffer->Count() - 1; + iBuffer->At(index).iNodeBuf->AppendL(newCommand); + CleanupStack::Pop(); //newCommand.iLastUriSeg + + + } + _DBG_FILE("CNSmlDmEmailAdapter::AddNodeObjectL(): end"); + } +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::UpdateLeafObjectL( const TDesC8& aURI, +// const TDesC8& aLUID, RWriteStream*& aStream, const TDesC8& aType, +// const TInt aStatusRef ) +// This should update a stream object, but in case of Email settings streaming +// is not supported. +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, + const TDesC8& /*aType*/, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(stream): begin"); + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::UpdateLeafObjectL(stream): end"); + } +// ----------------------------------------------------------------------------- +// void CNSmlDmEmailAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, +// const TDesC8& aLUID, const TDesC8& aType, const TInt aResultsRef, +// const TInt aStatusRef ) +// Fetches data object and returns its size. +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ) + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectSizeL(): begin"); + + CBufBase *result = CBufFlat::NewL(32); + CleanupStack::PushL(result); + CSmlDmAdapter::TError status = FetchObjectL(aURI, aLUID, *result); + if( status == CSmlDmAdapter::EOk ) + { + TInt objSizeInBytes = result->Size(); + TBuf8<4> stringObjSizeInBytes; + stringObjSizeInBytes.Num( objSizeInBytes ); + result->Reset(); + result->InsertL( 0, stringObjSizeInBytes ); + Callback().SetResultsL(aResultsRef, *result, aType); + } + Callback().SetStatusL(aStatusRef, status); + CleanupStack::PopAndDestroy(); //result + _DBG_FILE("CNSmlDmEmailAdapter::FetchLeafObjectSizeL(): end"); + } +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::ExecuteCommandL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + const TDesC8& /*aArgument*/, + const TDesC8& /*aType*/, + const TInt aStatusRef ) + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::ExecuteCommandL(): begin"); + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::ExecuteCommandL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::ExecuteCommandL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, + const TDesC8& /*aLUID*/, + RWriteStream*& /*aStream*/, + const TDesC8& /*aType*/, + const TInt aStatusRef ) + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::ExecuteCommandL(): begin"); + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::ExecuteCommandL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::CopyCommandL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, + const TDesC8& /*aTargetLUID*/, + const TDesC8& /*aSourceURI*/, + const TDesC8& /*aSourceLUID*/, + const TDesC8& /*aType*/, + TInt aStatusRef ) + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::CopyCommandL(): begin"); + Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); + _DBG_FILE("CNSmlDmEmailAdapter::CopyCommandL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::StartAtomicL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::StartAtomicL() + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::StartAtomicL(): begin"); + _DBG_FILE("CNSmlDmEmailAdapter::StartAtomicL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::CommitAtomicL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::CommitAtomicL() + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::CommitAtomicL(): begin"); + _DBG_FILE("CNSmlDmEmailAdapter::CommitAtomicL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::RollbackAtomicL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::RollbackAtomicL() + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::RollbackAtomicL(): begin"); + _DBG_FILE("CNSmlDmEmailAdapter::RollbackAtomicL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::StreamingSupport() +// ----------------------------------------------------------------------------- +TBool CNSmlDmEmailAdapter::StreamingSupport( TInt& /*aItemSize*/ ) + { + _DBG_FILE("CNSmlDmEmailAdapter::StreamingSupport(): begin"); + _DBG_FILE("CNSmlDmEmailAdapter::StreamingSupport(): end"); + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::StreamCommittedL() +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::StreamCommittedL() + { + //Not supported + _DBG_FILE("CNSmlDmEmailAdapter::StreamCommittedL(): begin"); + _DBG_FILE("CNSmlDmEmailAdapter::StreamCommittedL(): end"); + } +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::CompleteOutstandingCmdsL() +// Indication of message ending. The buffered commands must be executed +// before return of this function. +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::CompleteOutstandingCmdsL() + { + _DBG_FILE("CNSmlDmEmailAdapter::CompleteOutstandingCmdsL(): begin"); + + for(TInt i=0;iCount();i++) + { + + //Set buffered port values + for(TInt cmd=0;cmdAt(i).iNodeBuf->Count();cmd++) + { + + TNSmlEmailSettingsElement& bufElem = iBuffer->At(i); + TNSmlEmailCommandElement& elem = bufElem.iNodeBuf->At(cmd); + + if(elem.iLastUriSeg->Compare(KNSmlDMEmailMrcvPort)==0) + { + TUint port = DesToInt(*elem.iData); + + if(port>0 && port <= KNSmlDMEmailMaxPortNbr) + { + if(bufElem.iPop3Settings!= NULL) + { + bufElem.iPop3Settings->SetPort(port); + } + else if(bufElem.iImap4Settings!= NULL) + { + bufElem.iImap4Settings->SetPort(port); + } + } + else + { + elem.iStatus = CSmlDmAdapter::EInvalidObject; + } + } + else if(elem.iLastUriSeg->Compare(KNSmlDMEmailMsndPort)==0) + { + TUint port = DesToInt(*elem.iData); + + if(port>0 && port <= KNSmlDMEmailMaxPortNbr) + { + bufElem.iSmtpSettings->SetPort(port); + } + else + { + elem.iStatus = CSmlDmAdapter::EInvalidObject; + } + } + if((iBuffer->At(i).iSmtpSettings->LoginName()==KNullDesC8) && elem.iLastUriSeg->Compare(KNSmlDMEmailUID)==0) + { + elem.iStatus = CSmlDmAdapter::EError; + } + } + + + CSmlDmAdapter::TError stat = CSmlDmAdapter::EOk; + TInt luid=-1; + + if(iBuffer->At(i).iExecuted) + { + TRAPD( leaveCode,luid = ValidateAndStoreSettingsL(i) ); + if(leaveCode!=KErrNone) + { + stat = CSmlDmAdapter::EError; + } + } + else + { + stat = CSmlDmAdapter::EError; + } + + for(TInt cmd=0;cmdAt(i).iNodeBuf->Count();cmd++) + { + + if(iBuffer->At(i).iNodeBuf->At(cmd).iStatus==CSmlDmAdapter::EOk) + { + Callback().SetStatusL(iBuffer->At(i).iNodeBuf->At(cmd).iStatusRef, + stat); + if(!iBuffer->At(i).iNodeBuf->At(cmd).iLeaf) + { + if(stat==CSmlDmAdapter::EOk) + { + HBufC8* luidDes = IntToDes8LC(luid); + Callback().SetMappingL( iBuffer->At(i).iMappingName->Des(), + luidDes->Des() ); + CleanupStack::PopAndDestroy(); //luidDes + } + } + } + else + { + Callback().SetStatusL(iBuffer->At(i).iNodeBuf->At(cmd).iStatusRef, + iBuffer->At(i).iNodeBuf->At(cmd).iStatus); + } + + delete iBuffer->At(i).iNodeBuf->At(cmd).iLastUriSeg; + iBuffer->At(i).iNodeBuf->At(cmd).iLastUriSeg= NULL; + delete iBuffer->At(i).iNodeBuf->At(cmd).iData; + iBuffer->At(i).iNodeBuf->At(cmd).iData= NULL; + + } + iBuffer->At(i).iNodeBuf->Reset(); + delete iBuffer->At(i).iNodeBuf; + iBuffer->At(i).iNodeBuf = NULL; + delete iBuffer->At(i).iMappingName; + iBuffer->At(i).iMappingName= NULL; + delete iBuffer->At(i).iName; + iBuffer->At(i).iName= NULL; + delete iBuffer->At(i).iSmtpSettings; + iBuffer->At(i).iSmtpSettings= NULL; + delete iBuffer->At(i).iPop3Settings; + iBuffer->At(i).iPop3Settings= NULL; + delete iBuffer->At(i).iImap4Settings; + iBuffer->At(i).iImap4Settings= NULL; + delete iBuffer->At(i).iIapPref; + iBuffer->At(i).iIapPref= NULL; + delete iBuffer->At(i).iSmtpIapPref; + iBuffer->At(i).iSmtpIapPref= NULL; + + } // end for + iBuffer->Reset(); + + _DBG_FILE("CNSmlDmEmailAdapter::CompleteOutstandingCmdsL(): end"); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- + +#ifndef IMPLEMENTATION_PROXY_ENTRY +#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr) {{aUid},(aFuncPtr)} +#endif + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KNSmlDMEmailAdapterImplUid, + CNSmlDmEmailAdapter::NewL) + }; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + _DBG_FILE("ImplementationGroupProxy() for CNSmlDmEmailAdapter: begin"); + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + _DBG_FILE("ImplementationGroupProxy() for CNSmlDmEmailAdapter: end"); + return ImplementationTable; + } + + + +// ----------------------------------------------------------------------------- +// TPtrC8 CNSmlDmEmailAdapter::LastURISeg(const TDesC8& aURI) +// Returns only the last uri segemnt +// ----------------------------------------------------------------------------- +TPtrC8 CNSmlDmEmailAdapter::LastURISeg(const TDesC8& aURI) const + { + _DBG_FILE("CNSmlDmEmailAdapter::LastURISeg() : begin"); + TInt i; + for(i=aURI.Length()-1;i>=0;i--) + { + if(aURI[i]=='/') + { + break; + } + } + _DBG_FILE("CNSmlDmEmailAdapter::LastURISeg() : end"); + if(i==0) + { + return aURI; + } + else + { + return aURI.Mid(i+1); + } + } + +// ----------------------------------------------------------------------------- +// TPtrC8 CNSmlDmEmailAdapter::RemoveLastURISeg(const TDesC8& aURI) +// returns parent uri, i.e. removes last uri segment +// ----------------------------------------------------------------------------- +TPtrC8 CNSmlDmEmailAdapter::RemoveLastURISeg(const TDesC8& aURI) const + { + TInt i; + for(i=aURI.Length()-1;i>=0;i--) + { + if(aURI[i]=='/') + { + break; + } + } + return aURI.Left(i); + } + + + +// ----------------------------------------------------------------------------- +// TInt CNSmlDmEmailAdapter::NumOfURISegs(const TDesC8& aURI) +// Returns the num of uri segs +// ----------------------------------------------------------------------------- +TInt CNSmlDmEmailAdapter::NumOfURISegs(const TDesC8& aURI) const + { + TInt numOfURISegs = 1; + for(TInt i=0;iAt(aIndex).iNodeBuf->AppendL(newCommand); + CleanupStack::Pop(2); //newCommand.iLastUriSeg, newCommand.iData + if(!iBuffer->At(aIndex).iExecuted) + { + if(lastSeg.Compare(KNSmlDMEmailMpro)==0) + { + TBool ok = EFalse; + HBufC8* object = aObject.AllocLC(); + TPtr8 objectPtr = object->Des(); + objectPtr.UpperCase(); + + if(objectPtr.Find(KNSmlDMEmailMproPOP) >= 0) + { + iBuffer->At(aIndex).iPop3Settings = new(ELeave) CImPop3Settings; + ok=ETrue; + } + + else if(objectPtr.Find(KNSmlDMEmailMproIMAP) >= 0) + { + iBuffer->At(aIndex).iImap4Settings = new(ELeave) CImImap4Settings; + ok=ETrue; + } + if(ok) + { + iBuffer->At(aIndex).iSmtpSettings = new(ELeave) CImSmtpSettings; + iBuffer->At(aIndex).iIapPref = CImIAPPreferences::NewLC(); + iBuffer->At(aIndex).iSmtpIapPref = CImIAPPreferences::NewLC(); + CleanupStack::Pop(); //iBuffer->At(index).iIapPref + CleanupStack::Pop(); //iBuffer->At(index).iSmtpIapPref + SetDefaultSettingsL(aIndex); + + for(TInt i = 0; iAt(aIndex).iNodeBuf->Count();i++) + { + if(iBuffer->At(aIndex).iNodeBuf->At(i).iLeaf) + { + DoAddLeafObjectL(iBuffer->At(aIndex).iNodeBuf->At(i).iLastUriSeg->Des(), + iBuffer->At(aIndex).iNodeBuf->At(i).iData->Des(), + aIndex, i); + } + } + + iBuffer->At(aIndex).iExecuted = ETrue; + } + CleanupStack::PopAndDestroy(); //object + } + } + else + { + DoAddLeafObjectL(lastSeg,aObject,aIndex, + iBuffer->At(aIndex).iNodeBuf->Count()-1); + } + + _DBG_FILE("CNSmlDmEmailAdapter::FirstAddLeafL() :: end"); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::DoAddLeafObjectL +// ----------------------------------------------------------------------------- +TInt CNSmlDmEmailAdapter::DoAddLeafObjectL(const TDesC8& aLastUriSeg, + const TDesC8& aObject, + TInt aIndex, + TInt aCommand) + { + _DBG_FILE("CNSmlDmEmailAdapter::DoAddLeafObjectL() :: begin"); + if(aLastUriSeg.Compare(KNSmlDMEmailName)==0) + { + if ( aObject.Size() < KEmailAccountNameSize ) + { + delete iBuffer->At(aIndex).iName; + iBuffer->At(aIndex).iName = NULL; + iBuffer->At(aIndex).iName = HBufC::NewL(aObject.Size()); + TPtr namePtr = iBuffer->At(aIndex).iName->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8( namePtr, aObject ); + } + else + { + iBuffer->At(aIndex).iNodeBuf->At(aCommand).iStatus = + CSmlDmAdapter::ETooLargeObject; + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUID)==0) + { + if(iBuffer->At(aIndex).iPop3Settings!= NULL) + { + iBuffer->At(aIndex).iPop3Settings->SetLoginNameL(aObject); + } + else if(iBuffer->At(aIndex).iImap4Settings!= NULL) + { + iBuffer->At(aIndex).iImap4Settings->SetLoginNameL(aObject); + } + if(iBuffer->At(aIndex).iSmtpSettings->LoginName()==KNullDesC8) + { + iBuffer->At(aIndex).iSmtpSettings->SetLoginNameL(aObject); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailPW)==0) + { + if(iBuffer->At(aIndex).iPop3Settings!= NULL) + { + iBuffer->At(aIndex).iPop3Settings->SetPasswordL(aObject); + } + else if(iBuffer->At(aIndex).iImap4Settings!= NULL) + { + iBuffer->At(aIndex).iImap4Settings->SetPasswordL(aObject); + } + if(iBuffer->At(aIndex).iSmtpSettings->Password()==KNullDesC8) + { + iBuffer->At(aIndex).iSmtpSettings->SetPasswordL(aObject); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUAddr)==0) + { + HBufC *object = HBufC::NewLC(aObject.Size()); + TPtr objectPtr = object->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8( objectPtr, aObject ); + if(iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + iBuffer->At(aIndex).iSmtpSettings->SetEmailAddressL(objectPtr); + iBuffer->At(aIndex).iSmtpSettings->SetReplyToAddressL(objectPtr); + iBuffer->At(aIndex).iSmtpSettings->SetReceiptAddressL(objectPtr); + } + + CleanupStack::PopAndDestroy(); //object + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUName)==0) + { + HBufC *object = HBufC::NewLC(aObject.Size()); + TPtr objectPtr = object->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8( objectPtr, aObject ); + if(iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + iBuffer->At(aIndex).iSmtpSettings->SetEmailAliasL(objectPtr); + } + CleanupStack::PopAndDestroy(); //object + } + + else if(aLastUriSeg.Compare( KNSmlDMEmailMrcv)==0) + { + HBufC *object = HBufC::NewLC(aObject.Size()); + TPtr objectPtr = object->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8( objectPtr, aObject ); + if(iBuffer->At(aIndex).iPop3Settings!= NULL) + { + iBuffer->At(aIndex).iPop3Settings->SetServerAddressL(objectPtr); + } + else if(iBuffer->At(aIndex).iImap4Settings!= NULL) + { + iBuffer->At(aIndex).iImap4Settings->SetServerAddressL(objectPtr); + } + CleanupStack::PopAndDestroy(); //object + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailMsnd)==0) + { + HBufC *object = HBufC::NewLC(aObject.Size()); + TPtr objectPtr = object->Des(); + CnvUtfConverter::ConvertToUnicodeFromUtf8( objectPtr, aObject ); + if(iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + iBuffer->At(aIndex).iSmtpSettings->SetServerAddressL(objectPtr); + } + CleanupStack::PopAndDestroy(); //object + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailMpro)==0) + { + iBuffer->At(aIndex).iNodeBuf->At(aCommand).iStatus = CSmlDmAdapter::EOk; + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUseSecCon)==0) + { + SetDefaultSecurityL(aObject, &iBuffer->At(aIndex), EUseSecCon ); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUseSauth)==0) + { + HBufC8 *data = aObject.AllocLC(); + TPtr8 dataPtr = data->Des(); + dataPtr.Capitalize(); + TBool object=EFalse; + if(dataPtr.Find(KNSmlDMEmailTrue)>=0) + { + object = ETrue; + } + if(iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + iBuffer->At(aIndex).iSmtpSettings->SetSMTPAuth(object); + } + CleanupStack::PopAndDestroy(); //data + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailSauthUID)==0) + { + if( iBuffer->At(aIndex).iSmtpSettings ) + { + iBuffer->At(aIndex).iSmtpSettings->SetLoginNameL(aObject); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailSauthPW)==0) + { + if( iBuffer->At(aIndex).iSmtpSettings ) + { + iBuffer->At(aIndex).iSmtpSettings->SetPasswordL( aObject ); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailPtxtSAuth)==0) + { + HBufC8 *data = aObject.AllocLC(); + TPtr8 dataPtr = data->Des(); + dataPtr.Capitalize(); + TBool object=EFalse; + if(dataPtr.Find(KNSmlDMEmailTrue)>=0) + { + object = ETrue; + } + if(iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + iBuffer->At(aIndex).iSmtpSettings->SetInboxLoginDetails(object); + } + CleanupStack::PopAndDestroy(); //data + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailSUseSecCon)==0) + { + SetDefaultSecurityL(aObject, &iBuffer->At(aIndex), ESuseSecCon ); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUseStartTLS)==0) + { + SetDefaultSecurityL(aObject, &iBuffer->At(aIndex), EUseStartTls ); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailSUseStartTLS)==0) + { + SetDefaultSecurityL(aObject, &iBuffer->At(aIndex), ESuseStartTls ); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailMrcvPort)==0) + { + TNSmlEmailSettingsElement& bufElem = iBuffer->At(aIndex); + TNSmlEmailCommandElement& elem = bufElem.iNodeBuf->At(aCommand); + elem.iData = aObject.AllocL(); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailMsndPort)==0) + { + TNSmlEmailSettingsElement& bufElem = iBuffer->At(aIndex); + TNSmlEmailCommandElement& elem = bufElem.iNodeBuf->At(aCommand); + elem.iData = aObject.AllocL(); + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailUseAPOP)==0) + { + TBool object=EFalse; + if(aObject.Find(_L8("True"))>=0 || aObject.Find(_L8("true"))>=0) + { + object = ETrue; + } + if(iBuffer->At(aIndex).iPop3Settings!= NULL) + { + iBuffer->At(aIndex).iPop3Settings->SetApop(object); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailFolderPath)==0) + { + if(iBuffer->At(aIndex).iImap4Settings!= NULL) + { + iBuffer->At(aIndex).iImap4Settings->SetFolderPathL(aObject); + } + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailToNapID)==0) + { + CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + + TInt iap = iapmatch->IAPIdFromURIL( aObject ); + + if ( iap != KErrNotFound ) + { + TImIAPChoice localIAP; + localIAP.iIAP = iap; + DBG_ARGS(_S("IAP = %d"), localIAP.iIAP); + localIAP.iDialogPref = ECommDbDialogPrefDoNotPrompt; + + if ( iBuffer->At(aIndex).iSmtpIapPref->NumberOfIAPs() ) + { + iBuffer->At(aIndex).iIapPref->RemoveIAPL(0); + } + iBuffer->At(aIndex).iIapPref->AddIAPL(localIAP,0); + if (iBuffer->At(aIndex).iSmtpSettings!= NULL) + { + if ( iBuffer->At(aIndex).iSmtpIapPref->NumberOfIAPs() ) + { + iBuffer->At(aIndex).iSmtpIapPref->RemoveIAPL(0); + } + iBuffer->At(aIndex).iSmtpIapPref->AddIAPL(localIAP,0); + } + } + else + { + iBuffer->At(aIndex).iNodeBuf->At(aCommand).iStatus = CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapmatch + } + + else if(aLastUriSeg.Compare(KNSmlDMEmailSToNapID)==0) + { + CNSmlDMIAPMatcher* iapmatch = CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + + TInt iap = iapmatch->IAPIdFromURIL( aObject ); + + if ( iap != KErrNotFound ) + { + TImIAPChoice localIAP; + localIAP.iIAP = iap; + DBG_ARGS(_S("SMTP IAP = %d"), localIAP.iIAP); + localIAP.iDialogPref = ECommDbDialogPrefDoNotPrompt; + if ( iBuffer->At(aIndex).iSmtpSettings!= NULL ) + { + if ( iBuffer->At(aIndex).iSmtpIapPref->NumberOfIAPs() ) + { + iBuffer->At(aIndex).iSmtpIapPref->RemoveIAPL(0); + } + iBuffer->At(aIndex).iSmtpIapPref->AddIAPL(localIAP,0); + } + else + { + iBuffer->At(aIndex).iNodeBuf->At(aCommand).iStatus = + CSmlDmAdapter::ENotFound; + } + } + else + { + iBuffer->At(aIndex).iNodeBuf->At(aCommand).iStatus = + CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapmatch + } + _DBG_FILE("CNSmlDmEmailAdapter::DoAddLeafObjectL() :: end"); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// void CNSmlDmEmailAdapter::SetDefaultSettingsL(TInt aIndex) +// Set defaults for used protocol +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::SetDefaultSettingsL(TInt aIndex) + { + _DBG_FILE("CNSmlDmEmailAdapter::SetDefaultSettingsL() :: begin"); + TNSmlEmailSettingsElement& thisElem = iBuffer->At(aIndex); + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + if( thisElem.iPop3Settings ) + { + + emailAccs->PopulateDefaultPopSettingsL(*thisElem.iPop3Settings, + *thisElem.iIapPref + ); + emailAccs->PopulateDefaultSmtpSettingsL(*thisElem.iSmtpSettings, + *thisElem.iSmtpIapPref + ); + + thisElem.iPop3Settings->SetDeleteEmailsWhenDisconnecting( EFalse ); + thisElem.iPop3Settings->SetInboxSynchronisationLimit( KNSmlDMEmailDefaultHeaderCount ); + thisElem.iPop3Settings->SetSecureSockets( EFalse ); + thisElem.iPop3Settings->SetAutoSendOnConnect( ETrue ); + thisElem.iPop3Settings->SetDisconnectedUserMode( ETrue ); + thisElem.iPop3Settings->SetAcknowledgeReceipts( EFalse ); + } + else if( thisElem.iImap4Settings ) + { + + emailAccs->PopulateDefaultImapSettingsL(*thisElem.iImap4Settings, + *thisElem.iIapPref + ); + + emailAccs->PopulateDefaultSmtpSettingsL(*thisElem.iSmtpSettings, + *thisElem.iSmtpIapPref + ); + + thisElem.iImap4Settings->SetDeleteEmailsWhenDisconnecting( EFalse ); + thisElem.iImap4Settings->SetInboxSynchronisationLimit( KNSmlDMEmailDefaultHeaderCount ); + thisElem.iImap4Settings->SetMailboxSynchronisationLimit( KNSmlDMEmailDefaultHeaderCount ); + thisElem.iImap4Settings->SetSecureSockets( EFalse ); + thisElem.iImap4Settings->SetAutoSendOnConnect( ETrue ); + thisElem.iImap4Settings->SetDisconnectedUserMode( ETrue ); + thisElem.iImap4Settings->SetImapIdle( ETrue ); + thisElem.iImap4Settings->SetUpdatingSeenFlags( ETrue ); + } + thisElem.iSmtpSettings->SetLoginNameL(KNullDesC8); + thisElem.iSmtpSettings->SetPasswordL(KNullDesC8); + // Set IAP id to 0 and ask from user if ToNapID/SToNapID not sent + TImIAPChoice tmpIap; + tmpIap.iIAP = KNSmlDmEmailAlwaysAskIap; + tmpIap.iDialogPref = ECommDbDialogPrefPrompt; + thisElem.iIapPref->AddIAPL( tmpIap, 0 ); + thisElem.iSmtpIapPref->AddIAPL( tmpIap, 0 ); + CleanupStack::PopAndDestroy(); //emailAccs + _DBG_FILE("CNSmlDmEmailAdapter::SetDefaultSettingsL() :: end"); + } + +// ----------------------------------------------------------------------------- +// HBufC* CNSmlDmEmailAdapter::IntToDesLC(const TInt aLuid) const +// Converts integer to 16bit descriptor +// ----------------------------------------------------------------------------- +HBufC* CNSmlDmEmailAdapter::IntToDesLC(const TInt aLuid) const + { + HBufC* buf = HBufC::NewLC(10); //10 = max length of 32bit integer + TPtr ptrBuf = buf->Des(); + ptrBuf.Num(aLuid); + return buf; + } + +// ----------------------------------------------------------------------------- +// HBufC8* CNSmlDmEmailAdapter::IntToDes8LC(const TInt aLuid) const +// Converts integer to 8bit descriptor +// ----------------------------------------------------------------------------- +HBufC8* CNSmlDmEmailAdapter::IntToDes8LC(const TInt aLuid) const + { + HBufC8* buf = HBufC8::NewLC(10); //10 = max length of 32bit integer + TPtr8 ptrBuf = buf->Des(); + ptrBuf.Num(aLuid); + return buf; + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::ConvertTo8LC() +// Converts string value to 8-bit +// +// ----------------------------------------------------------------------------- +HBufC8* CNSmlDmEmailAdapter::ConvertTo8LC( const TDesC& aSource ) const + { + HBufC8* buf = HBufC8::NewLC( aSource.Length()*2); + TPtr8 bufPtr = buf->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource ); + + return buf; + } + +// ----------------------------------------------------------------------------- +// TInt CNSmlDmEmailAdapter::ValidateAndStoreSettingsL(TInt aIndex +// Transfers the email settings from memory to phones permanent data store +// ----------------------------------------------------------------------------- +TInt CNSmlDmEmailAdapter::ValidateAndStoreSettingsL(TInt aIndex) + { + _DBG_FILE("CNSmlDmEmailAdapter::ValidateAndStoreSettingsL() : begin"); + TInt luid = 0; + + TNSmlEmailSettingsElement& thisElem = iBuffer->At(aIndex); + + if( iBuffer->At( aIndex ).iJustFetch ) + { + _DBG_FILE("CNSmlDmEmailAdapter::ValidateAndStoreSettingsL() : end"); + return luid; + } + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + if( iBuffer->At( aIndex ).iLuid != 0 ) + { + switch ( thisElem.iAccType ) + { + case EPop: + { + TPopAccount accId; + emailAccs->GetPopAccountL( thisElem.iServiceId, accId ); + //Copy name field + accId.iPopAccountName.Copy(thisElem.iName->Des()); + emailAccs->SavePopSettingsL( accId, *thisElem.iPop3Settings ); + emailAccs->SavePopIapSettingsL( accId, *thisElem.iIapPref ); + TSmtpAccount smtpAcc; + emailAccs->GetSmtpAccountL( accId.iSmtpService, smtpAcc ); + //Copy name field + smtpAcc.iSmtpAccountName.Copy(thisElem.iName->Des()); + emailAccs->SaveSmtpSettingsL( smtpAcc, *thisElem.iSmtpSettings ); + emailAccs->SaveSmtpIapSettingsL( smtpAcc, *thisElem.iSmtpIapPref ); + break; + } + case EImap: + { + TImapAccount accId2; + emailAccs->GetImapAccountL( thisElem.iServiceId, accId2 ); + //Copy name field + accId2.iImapAccountName.Copy(thisElem.iName->Des()); + emailAccs->SaveImapSettingsL( accId2, *thisElem.iImap4Settings ); + emailAccs->SaveImapIapSettingsL( accId2, *thisElem.iIapPref ); + TSmtpAccount smtpAccForImap; + emailAccs->GetSmtpAccountL( accId2.iSmtpService, smtpAccForImap ); + //Copy name field + smtpAccForImap.iSmtpAccountName.Copy(thisElem.iName->Des()); + emailAccs->SaveSmtpSettingsL( smtpAccForImap, *thisElem.iSmtpSettings ); + emailAccs->SaveSmtpIapSettingsL( smtpAccForImap, *thisElem.iSmtpIapPref ); + break; + } + default: + + break; + } + } + else // if(iBuffer->At(aIndex).iLuid != 0) + { + RTelServer telServer; + User::LeaveIfError( telServer.Connect() ); + CleanupClosePushL(telServer); + + TInt numPhones = 0; + User::LeaveIfError( telServer.EnumeratePhones( numPhones ) ); + if ( numPhones < 1 ) + { + User::Leave( KErrNotFound ); + } + + RTelServer::TPhoneInfo info; + User::LeaveIfError( telServer.GetPhoneInfo( 0, info ) ); + RMobilePhone mobilePhone; + User::LeaveIfError( mobilePhone.Open( telServer, info.iName ) ); + CleanupClosePushL( mobilePhone ); + TRequestStatus status; + RMobilePhone::TMobilePhoneIdentityV1 mobilePhoneIdentity; + mobilePhone.GetPhoneId( status, mobilePhoneIdentity ); + User::WaitForRequest( status ); + User::LeaveIfError( status.Int() ); + TBuf<50> imei; + imei.Copy( mobilePhoneIdentity.iSerialNumber ); + + CleanupStack::PopAndDestroy(&mobilePhone); + CleanupStack::PopAndDestroy(&telServer); + if ( thisElem.iPop3Settings ) + { + TPopAccount accId; + accId = emailAccs->CreatePopAccountL( *thisElem.iName, + *thisElem.iPop3Settings, + *thisElem.iIapPref, + EFalse ); + + TSmtpAccount smtpAcc = emailAccs->CreateSmtpAccountL( accId, + *thisElem.iSmtpSettings, + *thisElem.iSmtpIapPref, + EFalse ); + TMsvEntry smtpEntry; + TMsvEntry popEntry; + CMsvEntry* entry = iMsvSession->GetEntryL(smtpAcc.iSmtpService); + CleanupStack::PushL(entry); + smtpEntry = entry->Entry(); + smtpEntry.iMtmData2 = smtpAcc.iSmtpAccountId; + smtpEntry.iDescription.Set( imei ); + entry->ChangeL(smtpEntry); + CleanupStack::PopAndDestroy(entry); + + entry = iMsvSession->GetEntryL(smtpAcc.iRelatedService); + CleanupStack::PushL(entry); + popEntry = entry->Entry(); + popEntry.iMtmData2 = accId.iPopAccountId; + popEntry.iDescription.Set( imei ); + entry->ChangeL(popEntry); + CleanupStack::PopAndDestroy(entry); + + if ( accId.iSmtpService != smtpAcc.iSmtpService || smtpAcc.iRelatedService != accId.iPopService ) + { + DBG_ARGS8(_S8("ERROR!!! PopAccount creation: iSmtpService=%d, smtpAcc.iSmtpService=%d, iRelatedService=%d, iPopService=%d"), + accId.iSmtpService, smtpAcc.iSmtpService, smtpAcc.iRelatedService, accId.iPopService ); + } + + thisElem.iAccType = EPop; + thisElem.iAccId = accId.iPopAccountId; + SetLuidById( thisElem.iAccType, thisElem.iAccId, thisElem.iLuid ); + + RArray popAccs; + CleanupClosePushL( popAccs ); + emailAccs->GetPopAccountsL( popAccs ); + + RArray imapAccs; + CleanupClosePushL( imapAccs ); + emailAccs->GetImapAccountsL( imapAccs ); + + if ( popAccs.Count() == 1 && !imapAccs.Count()) + { + emailAccs->SetDefaultSmtpAccountL( smtpAcc ); + } + + CleanupStack::PopAndDestroy( &imapAccs ); + CleanupStack::PopAndDestroy( &popAccs ); + // Check and set the default account + TSmtpAccount defSmtp; + TInt retVal = emailAccs->DefaultSmtpAccountL( defSmtp ); + if ( retVal != KErrNone ) + { + RArray popAccounts; + CleanupClosePushL( popAccounts ); + emailAccs->GetPopAccountsL( popAccounts ); + if ( popAccounts.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( popAccounts[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &popAccounts ); + } + } + else if ( thisElem.iImap4Settings ) + { + TImapAccount accId2; + accId2 = emailAccs->CreateImapAccountL(*thisElem.iName, + *thisElem.iImap4Settings, + *thisElem.iIapPref, + EFalse); + + TSmtpAccount smtpAcc = emailAccs->CreateSmtpAccountL( accId2, + *thisElem.iSmtpSettings, + *thisElem.iSmtpIapPref, + EFalse ); + + TMsvEntry smtpEntry; + TMsvEntry imapEntry; + CMsvEntry* entry = iMsvSession->GetEntryL(smtpAcc.iSmtpService); + CleanupStack::PushL(entry); + smtpEntry = entry->Entry(); + smtpEntry.iMtmData2 = smtpAcc.iSmtpAccountId; + smtpEntry.iDescription.Set( imei ); + entry->ChangeL(smtpEntry); + CleanupStack::PopAndDestroy(entry); + + entry = iMsvSession->GetEntryL(smtpAcc.iRelatedService); + CleanupStack::PushL(entry); + imapEntry = entry->Entry(); + imapEntry.iMtmData2 = accId2.iImapAccountId; + imapEntry.iDescription.Set( imei ); + entry->ChangeL(imapEntry); + CleanupStack::PopAndDestroy(entry); + + if ( accId2.iSmtpService != smtpAcc.iSmtpService || smtpAcc.iRelatedService != accId2.iImapService ) + { + DBG_ARGS8(_S8("ERROR!!! ImapAccount creation: iSmtpService=%d, smtpAcc.iSmtpService=%d, iRelatedService=%d, iImapService=%d"), + accId2.iSmtpService, smtpAcc.iSmtpService, smtpAcc.iRelatedService, accId2.iImapService ); + } + + + thisElem.iAccType = EImap; + thisElem.iAccId = accId2.iImapAccountId; + SetLuidById( thisElem.iAccType, thisElem.iAccId, thisElem.iLuid ); + + // Check and set the default account + RArray popAccs; + CleanupClosePushL( popAccs ); + emailAccs->GetPopAccountsL( popAccs ); + + RArray imapAccs; + CleanupClosePushL( imapAccs ); + emailAccs->GetImapAccountsL( imapAccs ); + + if ( imapAccs.Count() == 1 && !popAccs.Count()) + { + emailAccs->SetDefaultSmtpAccountL( smtpAcc ); + } + + CleanupStack::PopAndDestroy( &imapAccs ); + CleanupStack::PopAndDestroy( &popAccs ); + TSmtpAccount defaultSmtp; + TInt retVal = emailAccs->DefaultSmtpAccountL( defaultSmtp ); + if ( retVal != KErrNone ) + { + RArray imapAccs; + CleanupClosePushL( imapAccs ); + emailAccs->GetImapAccountsL( imapAccs ); + if ( imapAccs.Count() > 0 ) + { + TSmtpAccount relatedSmtp; + emailAccs->GetSmtpAccountL( imapAccs[0].iSmtpService, relatedSmtp ); + emailAccs->SetDefaultSmtpAccountL( relatedSmtp ); + } + CleanupStack::PopAndDestroy( &imapAccs ); + } + } + + } + luid = thisElem.iLuid; + CleanupStack::PopAndDestroy(); //emailAccs + _DBG_FILE("CNSmlDmEmailAdapter::ValidateAndStoreSettingsL() : end"); + return luid; + } +// ----------------------------------------------------------------------------- +// void CNSmlDmEmailAdapter::GetIdByLuid( TNSmlEmailAccountType& aAccType, +// TInt& aAccId, +// const TInt aLuid ) const +// Calculates the account type and id on basis of luid +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::GetIdByLuid( TNSmlEmailAccountType& aAccType, + TInt& aAccId, + const TInt aLuid ) const + { + if ( ( aLuid > KNSmlDmEmailImapLuidLow ) && + ( aLuid < KNSmlDmEmailImapLuidHigh ) ) + { + aAccType = EImap; + aAccId = aLuid - KNSmlDmEmailImapLuidLow; + } + else if (( aLuid > KNSmlDmEmailImapLuidHigh ) && + ( aLuid < KNSmlDmEmailPopLuidHigh )) + { + aAccType = EPop; + aAccId = aLuid - KNSmlDmEmailImapLuidHigh; + } + else + { + aAccType = EUnknown; + } + + } + + +// ----------------------------------------------------------------------------- +// void CNSmlDmEmailAdapter::SetLuidById( const TNSmlEmailAccountType& aAccType, +// const TInt& aAccId, TInt& aLuid ) const +// Sets the luid on basis of account type and id +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::SetLuidById( const TNSmlEmailAccountType& aAccType, + const TInt& aAccId, TInt& aLuid ) const + { + switch (aAccType) + { + case EImap : + aLuid = KNSmlDmEmailImapLuidLow + aAccId; + break; + + case EPop : + aLuid = KNSmlDmEmailImapLuidHigh + aAccId; + break; + + default : + aLuid = -1; + break; + } + } + +// ----------------------------------------------------------------------------- +// TBool CNSmlDmEmailAdapter::AccountExistsL( const CEmailAccounts* aAccs, +// const TNSmlEmailAccountType aAccType, +// const TInt aId, +// TInt aIndex ) +// Checks if the accout matching the given parameters is found. +// returns True if found. +// ----------------------------------------------------------------------------- +TBool CNSmlDmEmailAdapter::AccountExistsL( CEmailAccounts* aAccs, + const TNSmlEmailAccountType aAccType, + const TInt aId, + TInt aIndex ) + { + RArray imap4Accs; + CleanupClosePushL( imap4Accs ); + RArray pop3Accs; + CleanupClosePushL( pop3Accs ); + switch ( aAccType ) + { + case EImap: + aAccs->GetImapAccountsL(imap4Accs); + for(TInt i=0;i= 0 ) + { + iBuffer->At(aIndex).iServiceId = imap4Accs[i].iImapService; + delete iBuffer->At(aIndex).iName; + iBuffer->At(aIndex).iName = NULL; + iBuffer->At(aIndex).iName = HBufC::NewL(imap4Accs[i].iImapAccountName.Size()); + *iBuffer->At(aIndex).iName = imap4Accs[i].iImapAccountName; + } + CleanupStack::PopAndDestroy(2); //imap4Accs, pop3Accs + return ETrue; + } + } + break; + + case EPop: + aAccs->GetPopAccountsL(pop3Accs); + for(TInt i=0;i= 0 ) + { + iBuffer->At(aIndex).iServiceId = pop3Accs[i].iPopService; + delete iBuffer->At(aIndex).iName; + iBuffer->At(aIndex).iName = NULL; + iBuffer->At(aIndex).iName = HBufC::NewL(pop3Accs[i].iPopAccountName.Size()); + *iBuffer->At(aIndex).iName = pop3Accs[i].iPopAccountName; + } + CleanupStack::PopAndDestroy(2); //imap4Accs, pop3Accs + return ETrue; + } + } + break; + default: + // Returns EFalse in this case. + break; + } + CleanupStack::PopAndDestroy(2); //imap4Accs, pop3Accs + return EFalse; + } + +// ----------------------------------------------------------------------------- +// TInt CNSmlDmEmailAdapter::DoRestoreSettingsL(TInt aIndex) +// Restores the settings to the adapter from settings store +// ----------------------------------------------------------------------------- +TInt CNSmlDmEmailAdapter::DoRestoreSettingsL(TInt aIndex) + { + _DBG_FILE("CNSmlDmEmailAdapter::DoRestoreSettingsL() : begin"); + TNSmlEmailSettingsElement& thisElem = iBuffer->At(aIndex); + + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + TInt err = KErrNone; + + // These are destroyed latest at destructor + thisElem.iSmtpSettings = new (ELeave) CImSmtpSettings; + thisElem.iIapPref = CImIAPPreferences::NewLC(); + thisElem.iSmtpIapPref = CImIAPPreferences::NewLC(); + + switch( thisElem.iAccType ) + { + case EImap: + if (AccountExistsL(emailAccs, thisElem.iAccType, thisElem.iAccId, aIndex )) + { + TImapAccount imapAccId; + + thisElem.iImap4Settings = new(ELeave) CImImap4Settings; + + //Get IMAP account by iAccId id + emailAccs->GetImapAccountL(thisElem.iServiceId, imapAccId); + //Get IMAP settings by account id + emailAccs->LoadImapSettingsL( imapAccId, *thisElem.iImap4Settings ); + //Get IMAP settings IAP prefs + emailAccs->LoadImapIapSettingsL( imapAccId, *thisElem.iIapPref ); + + TSmtpAccount smtpAccount; + //Get smtp account by related IMAP id + emailAccs->GetSmtpAccountL( imapAccId.iSmtpService, smtpAccount ); + //Get smtp settings by IMAP id + emailAccs->LoadSmtpSettingsL( smtpAccount, *thisElem.iSmtpSettings ); + //Get Smtp settings IAP prefs + emailAccs->LoadSmtpIapSettingsL( smtpAccount, *thisElem.iSmtpIapPref ); + } + else + { + err = KErrNotFound; + } + break; + + case EPop: + if (AccountExistsL(emailAccs, thisElem.iAccType, thisElem.iAccId, aIndex )) + { + TPopAccount popAccId; + + thisElem.iPop3Settings = new(ELeave) CImPop3Settings; + + //Get POP3 account by iAccId id + emailAccs->GetPopAccountL( thisElem.iServiceId, popAccId ); + //Get POP3 settings by account id + emailAccs->LoadPopSettingsL( popAccId, *thisElem.iPop3Settings ); + //Get POP3 setting IAP prefs + emailAccs->LoadPopIapSettingsL( popAccId, *thisElem.iIapPref ); + + TSmtpAccount smtpAccount; + //Get smtp account by related POP id + emailAccs->GetSmtpAccountL( popAccId.iSmtpService, smtpAccount ); + //Get smtp settings + emailAccs->LoadSmtpSettingsL( smtpAccount, *thisElem.iSmtpSettings ); + //Get Smtp setting IAP prefs + emailAccs->LoadSmtpIapSettingsL( smtpAccount, *thisElem.iSmtpIapPref ); + } + else + { + err = KErrNotFound; + } + break; + + default: + err = KErrNotFound; + break; + } + + if ( err ) + { + _DBG_FILE("CNSmlDmEmailAdapter::DoRestoreSettingsL() : \ + KErrNotFound end"); + CleanupStack::PopAndDestroy(2); // iIapPref, iSmtpIapPref + CleanupStack::PopAndDestroy(emailAccs); //emailAccs + return KErrNotFound; + } + + CleanupStack::Pop(2); // iIapPref, iSmtpIapPref + CleanupStack::PopAndDestroy(emailAccs); //emailAccs + _DBG_FILE("CNSmlDmEmailAdapter::DoRestoreSettingsL() : end"); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::OpenSessionL() +// Opens the CMsvSession if it is not open already +// ----------------------------------------------------------------------------- +TInt CNSmlDmEmailAdapter::OpenSessionL() + { + _DBG_FILE("CNSmlDmEmailAdapter::OpenSessionL() : begin"); + if(!iMsvSession) + { + TRAPD(err, iMsvSession = CMsvSession::OpenSyncL(*this)); + _DBG_FILE("CNSmlDmEmailAdapter::OpenSessionL() : end"); + return err; + } + + _DBG_FILE("CNSmlDmEmailAdapter::OpenSessionL() : end"); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CNSmlDmEmailAdapter::FillNodeInfoL() +// Fills the node info in ddf structure +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode, + const TSmlDmAccessTypes& aAccTypes, + MSmlDmDDFObject::TOccurence aOccurrence, + MSmlDmDDFObject::TScope aScope, + MSmlDmDDFObject::TDFFormat aFormat, + const TDesC8& aDescription) const + { + aNode.SetAccessTypesL(aAccTypes); + aNode.SetOccurenceL(aOccurrence); + aNode.SetScopeL(aScope); + aNode.SetDFFormatL(aFormat); + if(aFormat!=MSmlDmDDFObject::ENode) + { + aNode.AddDFTypeMimeTypeL(KNSmlDMEmailTextPlain); + } + aNode.SetDescriptionL(aDescription); + + } + +// ----------------------------------------------------------------------------- +// TPtrC8 CNSmlDmEmailAdapter::RemoveDotSlash(const TDesC8& aURI) +// return uri without dot and slash in start +// ----------------------------------------------------------------------------- +TPtrC8 CNSmlDmEmailAdapter::RemoveDotSlash(const TDesC8& aURI) const + { + if(aURI.Find(KNSmlEmailUriDotSlash)==0) + { + return aURI.Right(aURI.Length()-KNSmlEmailUriDotSlash().Length()); + } + else + { + return aURI; + } + } +// ----------------------------------------------------------------------------- +// CSmlDmAdapter::TError CNSmlDmEmailAdapter::FetchObjectL(const TDesC8& aURI, +// const TDesC8& aLUID, CBufBase& aObject) +// Fetches object acording to URI & LUID. Retur codes acording to +// CSmlDmAdapter::TError. +// ----------------------------------------------------------------------------- +CSmlDmAdapter::TError CNSmlDmEmailAdapter::FetchObjectL(const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase& aObject) + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchObjectL() : begin"); + CSmlDmAdapter::TError status = EOk; + if(aLUID.Length()==0) + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchObjectL() : ENotFound end"); + return CSmlDmAdapter::ENotFound; + } + if( OpenSessionL() != KErrNone ) + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchObjectL() : EError end"); + return CSmlDmAdapter::EError; + } + TInt luid = DesToInt(aLUID); + TInt index = -1; + for(TInt i=0;iCount();i++) + { + if(iBuffer->At(i).iLuid == luid) + { + index = i; + break; + } + } + + if(index<0) + { + TNSmlEmailSettingsElement newNode; + newNode.iImap4Settings = NULL; + newNode.iPop3Settings = NULL; + newNode.iSmtpSettings = NULL; + newNode.iIapPref = NULL; + newNode.iLuid = luid; + newNode.iMappingName = aURI.AllocLC(); + newNode.iName = HBufC::NewLC(0); + newNode.iNodeBuf = new (ELeave) + CArrayFixFlat (KNSmlDmEmailGranularity); + newNode.iExecuted = ETrue; + newNode.iJustFetch = ETrue; + GetIdByLuid(newNode.iAccType, newNode.iAccId, luid); + iBuffer->AppendL(newNode); + index = iBuffer->Count() - 1; + if(DoRestoreSettingsL(index)!=KErrNone) + { + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + _DBG_FILE("CNSmlDmEmailAdapter::FetchObjectL() : EError end"); + return CSmlDmAdapter::EError; + } + CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName + } + + TPtrC8 lastUriSeg = LastURISeg(aURI); + + if(lastUriSeg.Compare(KNSmlDMEmailName)==0) + { + HBufC8 *data = HBufC8::NewLC(iBuffer->At(index).iName->Length()); + TPtr8 dataPtr = data->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr, iBuffer->At(index).iName->Des() ); + aObject.InsertL(0,dataPtr); + CleanupStack::PopAndDestroy(); //data + } + else if(lastUriSeg.Compare(KNSmlDMEmailUID)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iPop3Settings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iPop3Settings->LoginName()); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iImap4Settings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iImap4Settings->LoginName()); + } + if(data) + { + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + aObject.InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + } + else if(lastUriSeg.Compare(KNSmlDMEmailPW)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iPop3Settings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iPop3Settings->Password()); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = HBufC::NewLC(iBuffer->At(index).iImap4Settings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iImap4Settings->Password()); + } + if(data) + { + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + aObject.InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + } + else if(lastUriSeg.Compare(KNSmlDMEmailUAddr)==0) + { + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->EmailAddress().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + else if(lastUriSeg.Compare(KNSmlDMEmailUName)==0) + { + + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->EmailAlias().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + + else if(lastUriSeg.Compare( KNSmlDMEmailMrcv)==0) + { + HBufC *data = NULL; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + data = iBuffer->At(index).iPop3Settings->ServerAddress().AllocLC(); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + data = iBuffer->At(index).iImap4Settings->ServerAddress().AllocLC(); + } + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + else if(lastUriSeg.Compare(KNSmlDMEmailMsnd)==0) + { + HBufC *data = NULL; + data = iBuffer->At(index).iSmtpSettings->ServerAddress().AllocLC(); + HBufC8 *data8 = HBufC8::NewLC(data->Size()); + TPtr8 dataPtr8 = data8->Des(); + CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() ); + + aObject.InsertL(0,dataPtr8); + CleanupStack::PopAndDestroy(2); //data, data8 + } + else if(lastUriSeg.Compare(KNSmlDMEmailMpro)==0) + { + if(iBuffer->At(index).iPop3Settings!= NULL) + { + aObject.InsertL(0,KNSmlDMEmailMproPOP); + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + aObject.InsertL(0,KNSmlDMEmailMproIMAP); + } + } + else if(lastUriSeg.Compare(KNSmlDMEmailUseSecCon)==0) + { + FetchSecurityValueL(aObject, &iBuffer->At(index), EUseSecCon ); + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUseSauth)==0) + { + if(iBuffer->At(index).iSmtpSettings->SMTPAuth()) + { + aObject.InsertL(0,KNSmlDMEmailTrue); + } + else + { + aObject.InsertL(0,KNSmlDMEmailFalse); + } + } + else if(lastUriSeg.Compare(KNSmlDMEmailSauthUID)==0) + { + HBufC *data = HBufC::NewLC(iBuffer->At(index).iSmtpSettings->LoginName().Length()); + data->Des().Copy(iBuffer->At(index).iSmtpSettings->LoginName()); + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + aObject.InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + else if(lastUriSeg.Compare(KNSmlDMEmailSauthPW)==0) + { + HBufC *data = HBufC::NewLC(iBuffer->At(index).iSmtpSettings->Password().Length()); + data->Des().Copy(iBuffer->At(index).iSmtpSettings->Password()); + HBufC8 *data8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(*data); + CleanupStack::PushL(data8); + aObject.InsertL(0,*data8); + CleanupStack::PopAndDestroy(2);//data, data8 + } + else if(lastUriSeg.Compare(KNSmlDMEmailPtxtSAuth)==0) + { + if(iBuffer->At(index).iSmtpSettings->InboxLoginDetails()) + { + aObject.InsertL(0,KNSmlDMEmailTrue); + } + else + { + aObject.InsertL(0,KNSmlDMEmailFalse); + } + } + + else if (lastUriSeg.Compare(KNSmlDMEmailSUseSecCon)==0) + { + FetchSecurityValueL(aObject, &iBuffer->At(index), ESuseSecCon ); + } + + else if (lastUriSeg.Compare(KNSmlDMEmailUseStartTLS)==0) + { + FetchSecurityValueL(aObject, &iBuffer->At(index), EUseStartTls ); + } + + else if (lastUriSeg.Compare(KNSmlDMEmailSUseStartTLS)==0) + { + FetchSecurityValueL(aObject, &iBuffer->At(index), ESuseStartTls ); + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMrcvPort)==0) + { + TUint port; + if(iBuffer->At(index).iPop3Settings!= NULL) + { + port = iBuffer->At(index).iPop3Settings->Port(); + } + else + { + port = iBuffer->At(index).iImap4Settings->Port(); + } + HBufC8 *data = IntToDes8LC(port); + aObject.InsertL(0,data->Des()); + CleanupStack::PopAndDestroy(); //data + } + + else if(lastUriSeg.Compare(KNSmlDMEmailMsndPort)==0) + { + TUint port = iBuffer->At(index).iSmtpSettings->Port(); + HBufC8 *data = IntToDes8LC(port); + aObject.InsertL(0,data->Des()); + CleanupStack::PopAndDestroy(); //data + } + + else if(lastUriSeg.Compare(KNSmlDMEmailUseAPOP)==0) + { + if(iBuffer->At(index).iPop3Settings!= NULL) + { + if(iBuffer->At(index).iPop3Settings->Apop()) + { + aObject.InsertL(0,KNSmlDMEmailTrue); + } + else + { + aObject.InsertL(0,KNSmlDMEmailFalse); + } + } + else if(iBuffer->At(index).iImap4Settings!= NULL) + { + status = CSmlDmAdapter::ENotFound; + } + } + + else if (lastUriSeg.Compare(KNSmlDMEmailFolderPath)==0) + { + if( iBuffer->At(index).iImap4Settings ) + { + aObject.InsertL(0, iBuffer->At(index).iImap4Settings->FolderPath() ); + } + else + { + status = CSmlDmAdapter::ENotFound; + } + } + + else if(lastUriSeg.Compare(KNSmlDMEmailToNapID)==0) + { + CNSmlDMIAPMatcher* iapmatch=CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + HBufC8* uri8 = NULL; + TInt iapCount = iBuffer->At(index).iIapPref->NumberOfIAPs(); + if ( iapCount ) + { + TImIAPChoice localIAP = iBuffer->At(index).iIapPref->IAPPreference(0); + uri8 = iapmatch->URIFromIAPIdL( localIAP.iIAP ); + } + + if( uri8 ) + { + CleanupStack::PushL(uri8); + aObject.InsertL(0,uri8->Des()); + status = CSmlDmAdapter::EOk; + CleanupStack::PopAndDestroy(); // uri8 + } + else + { + status = CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapMatch + } + else if(lastUriSeg.Compare(KNSmlDMEmailSToNapID)==0) + { + // SToNapID exists only for SMTP + if (iBuffer->At(index).iSmtpSettings!= NULL) + { + CNSmlDMIAPMatcher* iapmatch=CNSmlDMIAPMatcher::NewL( &Callback() ); + CleanupStack::PushL(iapmatch); + HBufC8* uri8 = NULL; + TInt iapCount = iBuffer->At(index).iIapPref->NumberOfIAPs(); + if ( iapCount ) + { + TImIAPChoice localIAP = iBuffer->At(index).iSmtpIapPref->IAPPreference(0); + uri8 = iapmatch->URIFromIAPIdL( localIAP.iIAP ); + } + + if( uri8 ) + { + CleanupStack::PushL(uri8); + aObject.InsertL(0,uri8->Des()); + status = CSmlDmAdapter::EOk; + CleanupStack::PopAndDestroy(); // uri8 + } + else + { + status = CSmlDmAdapter::ENotFound; + } + + CleanupStack::PopAndDestroy(); // iapMatch + } + else + { + status = CSmlDmAdapter::ENotFound; + } + } + _DBG_FILE("CNSmlDmEmailAdapter::FetchObjectL() : end"); + return status; + } + +// ----------------------------------------------------------------------------- +// void CNSmlDmEmailAdapter::SetDefaultSecurityL(const TDesC8& aObject, +// const TNSmlEmailSettingsElement* thisElem, +// const TNSmlEmailSecuritySetting aSetting ) +// Sets (on/off) the security modes: SSL/TLS, StartTLS +// ----------------------------------------------------------------------------- +void CNSmlDmEmailAdapter::SetDefaultSecurityL(const TDesC8& aObject, + const TNSmlEmailSettingsElement* aThisElem, + const TNSmlEmailSecuritySetting aSetting + ) const + { + _DBG_FILE("CNSmlDmEmailAdapter::SetDefaultSecurityL(): begin"); + HBufC8 *data = aObject.AllocLC(); + TPtr8 dataPtr = data->Des(); + dataPtr.Capitalize(); + TBool object=EFalse; + if(dataPtr.Find(KNSmlDMEmailTrue)>=0) + { + object = ETrue; + } + switch ( aSetting ) + { + case EUseSecCon : + if ( object ) + { + if ( aThisElem->iImap4Settings ) + { + aThisElem->iImap4Settings->SetSecureSockets(EFalse); + aThisElem->iImap4Settings->SetSSLWrapper(ETrue); + aThisElem->iImap4Settings->SetPort( KNSmlDMEmailSslWrappedImap4Port ); + } + else if ( aThisElem->iPop3Settings ) + { + aThisElem->iPop3Settings->SetSecureSockets(EFalse); + aThisElem->iPop3Settings->SetSSLWrapper(ETrue); + aThisElem->iPop3Settings->SetPort( KNSmlDMEmailSslWrappedPop3Port ); + } + } + else + { + if ( aThisElem->iImap4Settings ) + { + aThisElem->iImap4Settings->SetPort( KNSmlDMEmailNormalImap4Port ); + aThisElem->iImap4Settings->SetSSLWrapper(EFalse); + } + else if ( aThisElem->iPop3Settings ) + { + aThisElem->iPop3Settings->SetPort( KNSmlDMEmailNormalPop3Port ); + aThisElem->iPop3Settings->SetSSLWrapper(EFalse); + } + } + break; + case EUseStartTls : + if ( object ) + { + if ( aThisElem->iImap4Settings ) + { + aThisElem->iImap4Settings->SetSecureSockets(ETrue); + aThisElem->iImap4Settings->SetSSLWrapper(EFalse); + aThisElem->iImap4Settings->SetPort( KNSmlDMEmailNormalImap4Port ); + } + else if ( aThisElem->iPop3Settings ) + { + aThisElem->iPop3Settings->SetSecureSockets(ETrue); + aThisElem->iPop3Settings->SetSSLWrapper(EFalse); + aThisElem->iPop3Settings->SetPort( KNSmlDMEmailNormalPop3Port ); + } + } + else + { + if ( aThisElem->iImap4Settings ) + { + aThisElem->iImap4Settings->SetSecureSockets(EFalse); + } + else if ( aThisElem->iPop3Settings ) + { + aThisElem->iPop3Settings->SetSecureSockets(EFalse); + } + } + break; + case ESuseSecCon : + if ( object ) + { + // The port is same in all cases + aThisElem->iSmtpSettings->SetSecureSockets(EFalse); + aThisElem->iSmtpSettings->SetSSLWrapper(ETrue); + aThisElem->iSmtpSettings->SetPort( KNSmlDMEmailSslSmtpPort ); + } + else + { + aThisElem->iSmtpSettings->SetPort( KNSmlDMEmailNormalSmtpPort ); + aThisElem->iSmtpSettings->SetSSLWrapper( EFalse ); + } + break; + case ESuseStartTls : + if ( object ) + { + // The port is same in all cases + aThisElem->iSmtpSettings->SetSecureSockets(ETrue); + aThisElem->iSmtpSettings->SetSSLWrapper(EFalse); + aThisElem->iSmtpSettings->SetPort( KNSmlDMEmailNormalSmtpPort ); + } + else + { + aThisElem->iSmtpSettings->SetSecureSockets( EFalse ); + } + + break; + default : + break; + } + CleanupStack::PopAndDestroy(); // object + _DBG_FILE("CNSmlDmEmailAdapter::SetDefaultSecurityL(): end"); + } + +// ----------------------------------------------------------------------------- +// CSmlDmAdapter::TError CNSmlDmEmailAdapter::FetchSecurityValueL( +// CBufBase& aObject, +// const TNSmlEmailSettingsElement* aElem, +// const TNSmlEmailSecuritySetting aSetting ) +// Gets the status(on/off) of security modes SSL/TLS or StartTLS +// ----------------------------------------------------------------------------- + +CSmlDmAdapter::TError CNSmlDmEmailAdapter::FetchSecurityValueL( + CBufBase& aObject, + const TNSmlEmailSettingsElement* aElem, + const TNSmlEmailSecuritySetting aSetting ) const + { + _DBG_FILE("CNSmlDmEmailAdapter::FetchSecurityValueL(): start"); + TBool result=EFalse; + CSmlDmAdapter::TError status = CSmlDmAdapter::EOk; + switch ( aSetting ) + { + + case EUseStartTls : + if ( aElem->iImap4Settings) + { + result = aElem->iImap4Settings->SecureSockets(); + } + else if(aElem->iPop3Settings) + { + result = aElem->iPop3Settings->SecureSockets(); + } + else + { + status = CSmlDmAdapter::EError; + } + break; + case EUseSecCon : + if ( aElem->iImap4Settings) + { + result = aElem->iImap4Settings->SSLWrapper(); + } + else if(aElem->iPop3Settings) + { + result = aElem->iPop3Settings->SSLWrapper(); + } + else + { + status = CSmlDmAdapter::EError; + } + break; + case ESuseStartTls : + if(aElem->iSmtpSettings) + { + result = aElem->iSmtpSettings->SecureSockets(); + } + else + { + status = CSmlDmAdapter::EError; + } + break; + case ESuseSecCon : + if(aElem->iSmtpSettings) + { + result = aElem->iSmtpSettings->SSLWrapper(); + } + else + { + status = CSmlDmAdapter::EError; + } + break; + default: + status = CSmlDmAdapter::EError; + break; + } + + if ( result ) + { + aObject.InsertL(0,KNSmlDMEmailTrue); + } + else + { + aObject.InsertL(0,KNSmlDMEmailFalse); + } + _DBG_FILE("CNSmlDmEmailAdapter::FetchSecurityValueL(): end"); + return status; + } + +//-------------------------------------------------------------------- +//TInt CNSmlDmEmailAdapter::ConstructTreeL(const TDesC8& aURI) +// +//------------------------------------------------------------------- + +TInt CNSmlDmEmailAdapter::ConstructTreeL(const TDesC8& aURI) +{ + TInt ret = KErrNotFound; + CEmailAccounts* emailAccs = CEmailAccounts::NewLC(); + + if(aURI.Find(KNSmlDMEmailNodeName)!= KErrNotFound) + { + RArray imap4Accounts; + CleanupClosePushL( imap4Accounts ); + emailAccs->GetImapAccountsL(imap4Accounts); + + // First, IMAP accounts + // + TInt luid; + TPtrC8 name; + // cycle through every found account + for(TInt count = 0; count < imap4Accounts.Count(); count++) + { + + SetLuidById( EImap, imap4Accounts[count].iImapAccountId, luid ); + HBufC8 *uri = HBufC8::NewLC(KNSmlDMEmailNodeName().Length() + + KNSmlDMEmailMproIMAP().Length() + 6); + + TPtr8 uriPtr = uri->Des(); + uriPtr.Append(KNSmlDMEmailNodeName); + uriPtr.Append(KNSmlDMEmailSeparator8); + uriPtr.Append(KNSmlDMEmailMproIMAP); + uriPtr.AppendNumFixedWidth(count,EDecimal,3); + HBufC8 *luidBuf = IntToDes8LC(luid); + HBufC8* mapInfo = Callback().GetLuidAllocL(uriPtr); + if (mapInfo->Length() == 0) + { + Callback().SetMappingL(uriPtr, luidBuf->Des()); + if( aURI.Find(uriPtr) >= 0 ) + { + ret = luid; + } + } + else + { + delete mapInfo; + } + + CleanupStack::PopAndDestroy(2); //uri,luidBuf + } + CleanupStack::PopAndDestroy(); //imap4Accounts + + // Then, POP accounts + // + RArray pop3Accounts; + CleanupClosePushL( pop3Accounts ); + emailAccs->GetPopAccountsL( pop3Accounts ); + // cycle through every found account + for(TInt count = 0; count < pop3Accounts.Count(); count++) + { + SetLuidById( EPop, pop3Accounts[count].iPopAccountId, luid ); + + HBufC8 *uri = HBufC8::NewLC(KNSmlDMEmailNodeName().Length() + + KNSmlDMEmailMproPOP().Length() + 5); + TPtr8 uriPtr = uri->Des(); + uriPtr.Append(KNSmlDMEmailNodeName); + uriPtr.Append(KNSmlDMEmailSeparator8); + uriPtr.Append(KNSmlDMEmailMproPOP); + uriPtr.AppendNumFixedWidth(count,EDecimal,3); + HBufC8 *luidBuf = IntToDes8LC(luid); + HBufC8* mapInfo = Callback().GetLuidAllocL(uriPtr); + if (mapInfo->Length() == 0) + { + Callback().SetMappingL(uriPtr,luidBuf->Des()); + if( aURI.Find(uriPtr) >= 0 ) + { + ret = luid; + } + } + else + { + delete mapInfo; + } + + CleanupStack::PopAndDestroy(2); //uri,luidBuf + } + CleanupStack::PopAndDestroy(); //pop3Accounts + } + CleanupStack::PopAndDestroy(); //emailAccs + return ret; +} +// End of File