diff -r 48060abbbeaf -r b3cee849fa46 creator/engine/src/creator_mailboxelement.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creator/engine/src/creator_mailboxelement.cpp Tue Aug 31 15:15:20 2010 +0300 @@ -0,0 +1,496 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + +#include "creator_mailboxelement.h" +#include "creator_traces.h" +#include "creator_mailbox.h" + +using namespace creatormailbox; + +/* + * + */ +CCreatorMailboxElement* CCreatorMailboxElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext ) + { + CCreatorMailboxElement* self = new (ELeave) CCreatorMailboxElement(aEngine); + CleanupStack::PushL(self); + self->ConstructL(aName, aContext); + CleanupStack::Pop(self); + return self; + } +/* + * + */ +CCreatorMailboxElement::CCreatorMailboxElement(CCreatorEngine* aEngine) +: +CCreatorScriptElement(aEngine) + { + iIsCommandElement = ETrue; + } + +TBool CCreatorMailboxElement::SetIntegerParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom ) + { + _LIT( KAll, "all"); + + if( aElemName == Kincomingport ) + { + if( aSetRandom ) + param->iIncomingPort = iEngine->RandomNumber(25, 500); + else + param->iIncomingPort = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kattachmentsizelimit ) + { + if( aSetRandom ) + param->iAttachmentSizeLimit = iEngine->RandomNumber(1, KMaxTInt); + else + param->iAttachmentSizeLimit = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kbodytextsizelimit ) + { + if( aSetRandom ) + param->iBodyTextSizeLimit = iEngine->RandomNumber(1, KMaxTInt); + else + param->iBodyTextSizeLimit = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kattachmentfetchsize ) + { + if( aSetRandom ) + param->iAttachmentFetchSize = iEngine->RandomNumber(1, 40960); + else + param->iAttachmentFetchSize = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kimapidletimeout ) + { + if( aSetRandom ) + param->iImapIdleTimeout = iEngine->RandomNumber(10, 2000); + else + param->iImapIdleTimeout = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kmaxemailsize ) + { + if( aSetRandom ) + param->iMaxEmailSize = iEngine->RandomNumber(1024, KMaxTInt); + else + param->iMaxEmailSize = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Ksyncrate ) + { + if( aSetRandom ) + param->iSyncRate = iEngine->RandomNumber(10, 500); + else + param->iSyncRate = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kinboxsynclimit ) + { + if( aSetRandom ) + param->iInboxSyncLimit = iEngine->RandomNumber(-1, 256); + else if( CompareIgnoreCase(aElemContent, KAll) == 0 ) + param->iInboxSyncLimit = -1; + else + param->iInboxSyncLimit = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Kmailboxsynclimit ) + { + if( aSetRandom ) + param->iMailboxSyncLimit = iEngine->RandomNumber(-1, 256); + else if( CompareIgnoreCase(aElemContent, KAll) == 0 ) + param->iMailboxSyncLimit = -1; + else + param->iMailboxSyncLimit = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Koutgoingport ) + { + if( aSetRandom ) + param->iOutgoingPort = KDefaultSmtpPort; + else + param->iOutgoingPort = ConvertStrToIntL(aElemContent); + } + else if( aElemName == Ktoccincludelimit ) + { + if( aSetRandom ) + param->iToCCIncludeLimit = iEngine->RandomNumber(0, 30); + else + param->iToCCIncludeLimit = ConvertStrToIntL(aElemContent); + } + else + return EFalse; + + return ETrue; + } + +TBool CCreatorMailboxElement::GetBooleanValueL(const TDesC& aElemContent, TBool aSetRandom) + { + if( aSetRandom ) + return iEngine->RandomNumber(0,1) == 1; + + return ConvertStrToBooleanL(aElemContent); + } + +TBool CCreatorMailboxElement::SetBooleanParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom ) + { + TBool val = GetBooleanValueL(aElemContent, aSetRandom); + if( aElemName == Kincomingsslwrapper ) + param->iIncomingSSLWrapper = val; + else if( aElemName == Kincomingsecuresockets ) + param->iIncomingSecureSockets = val; + else if( aElemName == Kacknowledgereceipts ) + param->iAcknowledgeReceipts = val; + else if( aElemName == Kautosendonconnect ) + param->iAutoSendOnConnect = val; + else if( aElemName == Kdeletemailsatdisconnect ) + param->iDeleteEmailsAtDisconnect = val; + else if( aElemName == Kimapidlecommand ) + param->iImapIdleCommand = val; + else if( aElemName == Kmarkseeninsync ) + param->iMarkSeenInSync = val; + else if( aElemName == Kenableexpungemode ) + param->iEnableExpungeMode = val; + else if( aElemName == Kuseapopsecurelogin ) + param->iUseApop = val; + else if( aElemName == Kdisconnectedusermode ) + param->iDisconnectedUserMode = val; + else if( aElemName == Koutgoingsslwrapper ) + param->iOutgoingSSLWrapper = val; + else if( aElemName == Koutgoingsecuresockets ) + param->iOutgoingSecureSockets = val; + else if( aElemName == Kincludesignature ) + param->iIncludeSignature = val; + else if( aElemName == Kaddvcard ) + param->iAddVCard = val; + else if( aElemName == Krequestreceipts ) + param->iRequestReceipts = val; + else if( aElemName == Ksmtpauth ) + param->iSmtpAuth = val; + else + return EFalse; + + return ETrue; + } + +TBool CCreatorMailboxElement::SetTextParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom ) + { + _LIT(KIncomingSrvPrefix, "mail."); + _LIT(KOutgoingSrvPrefix, "smtp."); + _LIT(KSrvPostfix, ".com"); + _LIT(KDefaultConnMethod, "internet"); + + if( aElemName == Kname ) + { + if( aSetRandom ) + { + TPtrC company(iEngine->RandomString(CCreatorEngine::ECompany)); + SetContentToTextParamL(param->iMailboxName, company); + } + else + SetContentToTextParamL(param->iMailboxName, aElemContent); + } + else if( aElemName == Kincomingloginname ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName)); + SetContentToTextParamL(param->iIncomingLoginName, random); + param->iIncomingLoginName->Des().LowerCase(); + } + else + SetContentToTextParamL(param->iIncomingLoginName, aElemContent); + } + else if( aElemName == Kincomingpassword ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName)); + SetContentToTextParamL(param->iIncomingPassword, random); + param->iIncomingPassword->Des().LowerCase(); + } + else + SetContentToTextParamL(param->iIncomingPassword, aElemContent); + } + else if( aElemName == Kincomingservername ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::ECompany)); + HBufC* srvName = HBufC::NewLC(KIncomingSrvPrefix().Length()+random.Length()+KSrvPostfix().Length()); + srvName->Des().Copy(KIncomingSrvPrefix); + srvName->Des().Append(random); + srvName->Des().Append(KSrvPostfix); + SetContentToTextParamL(param->iIncomingServerName, srvName->Des()); + CleanupStack::PopAndDestroy(); // srvName + } + else + SetContentToTextParamL(param->iIncomingServerName, aElemContent); + } + else if( aElemName == Kincomingconnectionmethod ) + { + if( aSetRandom ) + SetContentToTextParamL(param->iIncomingConnectionMethod, KDefaultConnMethod); + else + SetContentToTextParamL(param->iIncomingConnectionMethod, aElemContent); + } + else if( aElemName == Kincomingfolderpath ) + SetContentToTextParamL(param->iIncomingFolderPath, aElemContent); + else if( aElemName == Kpathseparator ) + SetContentToTextParamL(param->iPathSeparator, aElemContent); + else if( aElemName == Koutgoingloginname ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName)); + SetContentToTextParamL(param->iOutgoingLoginName, random); + param->iOutgoingLoginName->Des().LowerCase(); + } + else + SetContentToTextParamL(param->iOutgoingLoginName, aElemContent); + } + else if( aElemName == Koutgoingpassword ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName)); + SetContentToTextParamL(param->iOutgoingPassword, random); + param->iOutgoingPassword->Des().LowerCase(); + } + else + SetContentToTextParamL(param->iOutgoingPassword, aElemContent); + } + else if( aElemName == Koutgoingservername ) + { + if( aSetRandom ) + { + TPtrC random(iEngine->RandomString(CCreatorEngine::ECompany)); + HBufC* srvName = HBufC::NewLC(KOutgoingSrvPrefix().Length()+random.Length()+KSrvPostfix().Length()); + srvName->Des().Copy(KOutgoingSrvPrefix); + srvName->Des().Append(random); + srvName->Des().Append(KSrvPostfix); + SetContentToTextParamL(param->iOutgoingServerName, srvName->Des()); + CleanupStack::PopAndDestroy(); // srvName + } + else + SetContentToTextParamL(param->iOutgoingServerName, aElemContent); + } + else if( aElemName == Koutgoingconnectionmethod ) + { + if( aSetRandom ) + SetContentToTextParamL(param->iOutgoingConnectionMethod, KDefaultConnMethod); + else + SetContentToTextParamL(param->iOutgoingConnectionMethod, aElemContent); + } + else if( aElemName == Kownemail ) + { + if( aSetRandom ) + { + TDesC* email = iEngine->CreateEmailAddressLC(); + SetContentToTextParamL(param->iOwnEmailAddress, *email); + CleanupStack::PopAndDestroy(); // email + } + else + SetContentToTextParamL(param->iOwnEmailAddress, aElemContent); + } + else if( aElemName == Kemailalias ) + { + if( aSetRandom ) + { + _LIT(KSpace, " "); + TPtrC firstName(iEngine->RandomString(CCreatorEngine::EFirstName)); + TPtrC lastName(iEngine->RandomString(CCreatorEngine::ESurname)); + HBufC* alias = HBufC::NewLC(firstName.Length() + lastName.Length() + KSpace().Length()); + alias->Des().Copy(firstName); + alias->Des().Append(KSpace); + alias->Des().Append(lastName); + SetContentToTextParamL(param->iOwnEmailAlias, alias->Des()); + CleanupStack::PopAndDestroy(); // alias + } + else + SetContentToTextParamL(param->iOwnEmailAlias, aElemContent); + } + else if( aElemName == Kreceiptaddress ) + { + if( aSetRandom ) + { + TDesC* email = iEngine->CreateEmailAddressLC(); + SetContentToTextParamL(param->iReceiptAddress, *email); + CleanupStack::PopAndDestroy(); // email + } + else + SetContentToTextParamL(param->iReceiptAddress, aElemContent); + } + else if( aElemName == Kreplytoaddress ) + { + if( aSetRandom ) + { + TDesC* email = iEngine->CreateEmailAddressLC(); + SetContentToTextParamL(param->iReceiptAddress, *email); + CleanupStack::PopAndDestroy(); // email + } + else + SetContentToTextParamL(param->iReplyToAddress, aElemContent); + } + else + return EFalse; + + return ETrue; + } + +TBool CCreatorMailboxElement::SetEnumParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom ) + { + // Get email options: + if( aElemName == Kgetemailoptions ) + { + if( aSetRandom ) + param->iGetEmailOptions = (CMailboxesParameters::TGetEmailOption) iEngine->RandomNumber( + CMailboxesParameters::EGetHeaders, + CMailboxesParameters::EGetEmailOptionLast-1); + else if( CompareIgnoreCase(aElemContent, Kgetheaders ) == 0 ) + param->iGetEmailOptions = CMailboxesParameters::EGetHeaders; + else if( CompareIgnoreCase(aElemContent, Kgetbodytext) == 0 ) + param->iGetEmailOptions = CMailboxesParameters::EGetBodyText; + else if( CompareIgnoreCase(aElemContent, Kgetbodytextandattachments) == 0 ) + param->iGetEmailOptions = CMailboxesParameters::EGetBodyTextAndAttachments; + else if( CompareIgnoreCase(aElemContent, Kgetattachments) == 0 ) + param->iGetEmailOptions = CMailboxesParameters::EGetAttachments; + else if( CompareIgnoreCase(aElemContent, Kgetbodyalternativetext) == 0 ) + param->iGetEmailOptions = CMailboxesParameters::EGetBodyAlternativeText; + else + param->iGetEmailOptions = CMailboxesParameters::EUndef; + } + + // Subscribe type: + else if( aElemName == Ksubscribetype ) + { + if( aSetRandom ) + param->iSubscribeType = (TFolderSubscribeType) iEngine->RandomNumber( EUpdateNeither, EUpdateBoth ); + else if( CompareIgnoreCase( aElemContent, Kupdatelocal) == 0 ) + param->iSubscribeType = EUpdateLocal; + else if( CompareIgnoreCase( aElemContent, Kupdateremote) == 0 ) + param->iSubscribeType = EUpdateRemote; + else if( CompareIgnoreCase( aElemContent, Kupdateboth) == 0 ) + param->iSubscribeType = EUpdateBoth; + else + param->iSubscribeType = EUpdateNeither; + } + + // Folder synchronization type: + else if( aElemName == Kfoldersynctype) + { + if( aSetRandom ) + param->iSyncType = (TFolderSyncType) iEngine->RandomNumber(EUseCombination, EUseRemote); + else if( CompareIgnoreCase( aElemContent, Kuselocal) == 0 ) + param->iSyncType = EUseLocal; + else if( CompareIgnoreCase( aElemContent, Kuseremote) == 0 ) + param->iSyncType = EUseRemote; + else + param->iSyncType = EUseCombination; + } + + // Send copy to self option: + else if( aElemName == Kcopytoself ) + { + if( aSetRandom ) + param->iSendCopyToSelf = (TImSMTPSendCopyToSelf) iEngine->RandomNumber(ESendNoCopy, ESendCopyAsBccRecipient); + else if( CompareIgnoreCase( aElemContent, Kto) == 0 ) + param->iSendCopyToSelf = ESendCopyAsToRecipient; + else if( CompareIgnoreCase( aElemContent, Kcc) == 0 ) + param->iSendCopyToSelf = ESendCopyAsCcRecipient; + else if( CompareIgnoreCase( aElemContent, Kbcc) == 0 ) + param->iSendCopyToSelf = ESendCopyAsBccRecipient; + else + param->iSendCopyToSelf = ESendNoCopy; + } + + // Send option: + else if( aElemName == Ksendoption ) + { + if( aSetRandom ) + param->iSendOption = (TImSMTPSendMessageOption) iEngine->RandomNumber(ESendMessageImmediately, ESendMessageOnRequest); + else if( CompareIgnoreCase( aElemContent, Konnextconnection) == 0 ) + param->iSendOption = ESendMessageOnNextConnection; + else if( CompareIgnoreCase( aElemContent, Konrequest) == 0 ) + param->iSendOption = ESendMessageOnRequest; + else + param->iSendOption = ESendMessageImmediately; + } + else + { + return EFalse; + } + return ETrue; + } + +void CCreatorMailboxElement::ExecuteCommandL() + { + const CCreatorScriptAttribute* amountAttr = FindAttributeByName(KAmount); + const CCreatorScriptAttribute* typeAttr = FindAttributeByName(KMailboxType); + TInt amount = 1; + if( amountAttr ) + { + amount = ConvertStrToIntL(amountAttr->Value()); + } + + TMailboxType mailboxType = EMailboxPOP3; + + if( typeAttr && CompareIgnoreCase(typeAttr->Value(), Kimap4) == 0 ) + { + mailboxType = EMailboxIMAP4; + } + + // Get 'fields' element + CCreatorScriptElement* fieldsElement = FindSubElement(KFields); + if( fieldsElement && fieldsElement->SubElements().Count() > 0) + { + // Get sub-elements + const RPointerArray& fields = fieldsElement->SubElements(); + // Create mailbox entries, the amount of entries is defined by amount: + for( TInt cI = 0; cI < amount; ++cI ) + { + CMailboxesParameters* param = new (ELeave) CMailboxesParameters; + CleanupStack::PushL(param); + + param->iMailboxType = mailboxType; + + for( TInt i = 0; i < fields.Count(); ++i ) + { + CCreatorScriptElement* field = fields[i]; + TPtrC elemName = field->Name(); + TPtrC elemContent = field->Content(); + const CCreatorScriptAttribute* randomAttr = fields[i]->FindAttributeByName(KRandomLength); + TBool useRandom = EFalse; + if( randomAttr || elemContent.Length() == 0 ) + { + useRandom = ETrue; + } + + if( SetTextParamL(elemName, elemContent, param, useRandom ) == EFalse && + SetBooleanParamL(elemName, elemContent, param, useRandom ) == EFalse && + SetIntegerParamL(elemName, elemContent, param, useRandom ) == EFalse && + SetEnumParamL(elemName, elemContent, param, useRandom ) ) + { + LOGSTRING2("CCreatorMailboxElement::ExecuteCommandL: Unknown mailbox field: %S", &elemName); + } + } + iEngine->AppendToCommandArrayL(ECmdCreateMessagingEntryMailboxes, param); + CleanupStack::Pop(); // param + } + } + else + { + iEngine->AppendToCommandArrayL(ECmdCreateMessagingEntryMailboxes, 0, amount); + } + }