# HG changeset patch # User Maciej Seroka # Date 1256895383 0 # Node ID d5603c08781bf5bbe8ad47cd899c75cbb5c159d3 # Parent b18be44be852f1742e8719719c086eb16e91ad17 Added smoketest for email diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/Group/bld.inf --- a/common/tools/ats/smoketest/Group/bld.inf Thu Oct 29 14:03:35 2009 +0000 +++ b/common/tools/ats/smoketest/Group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -22,3 +22,4 @@ #include "../messaging/Group/bld.inf" #include "../System/Group/bld.inf" #include "../Timew/Group/bld.inf" +#include "../email/group/bld.inf" diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/Group/smoketest.pl --- a/common/tools/ats/smoketest/Group/smoketest.pl Thu Oct 29 14:03:35 2009 +0000 +++ b/common/tools/ats/smoketest/Group/smoketest.pl Fri Oct 30 09:36:23 2009 +0000 @@ -9,6 +9,8 @@ mkpath "temp/smoketest/general"; mkpath "temp/smoketest/winscw_udeb"; mkpath "temp/smoketest/sms/general"; +mkpath "temp/smoketest/emailmessage/general"; +mkpath "temp/smoketest/emailsettings/general"; my $epoc=$ENV{'EPOCROOT'} . "epoc32/"; copy("smoketest.xml", "temp/test.xml"); @@ -26,7 +28,12 @@ copy($epoc . "data/z/smoketest/smoketest_system.script", "temp/smoketest/general/smoketest_system.script"); copy($epoc . "data/z/smoketest/smoketest_timew.ini", "temp/smoketest/general/smoketest_timew.ini"); copy($epoc . "data/z/smoketest/smoketest_timew.script", "temp/smoketest/general/smoketest_timew.script"); +copy($epoc . "data/z/smoketest/smoketest_email.ini", "temp/smoketest/general/smoketest_email.ini"); +copy($epoc . "data/z/smoketest/smoketest_email.script", "temp/smoketest/general/smoketest_email.script"); copy($epoc . "data/z/smoketest/sms/message1.txt", "temp/smoketest/sms/general/message1.txt"); +copy($epoc . "data/z/smoketest/MachineName.txt", "temp/smoketest/general/MachineName.txt"); +copy($epoc . "data/z/smoketest/emailmessage/20KBody.txt", "temp/smoketest/emailmessage/general/20KBody.txt"); +copy($epoc . "data/z/smoketest/emailsettings/popsettings_test908.txt", "temp/smoketest/emailsettings/general/popsettings_test908.txt"); copy($epoc . "release/winscw/udeb/SmokeTestSecureFSclient.dll", "temp/smoketest/winscw_udeb/SmokeTestSecureFSclient.dll"); copy($epoc . "release/winscw/udeb/SmokeTestSecureFSserver.exe", "temp/smoketest/winscw_udeb/SmokeTestSecureFSserver.exe"); copy($epoc . "release/winscw/udeb/Smoketest_Agenda_Server.exe", "temp/smoketest/winscw_udeb/Smoketest_Agenda_Server.exe"); @@ -36,5 +43,8 @@ copy($epoc . "release/winscw/udeb/Smoketest_System.exe", "temp/smoketest/winscw_udeb/Smoketest_System.exe"); copy($epoc . "release/winscw/udeb/Smoketest_Timew_Server.exe", "temp/smoketest/winscw_udeb/Smoketest_Timew_Server.exe"); copy($epoc . "release/winscw/udeb/SmokeTest_Utils.dll", "temp/smoketest/winscw_udeb/SmokeTest_Utils.dll"); +copy($epoc . "release/winscw/udeb/t_msgutilityserver.dll", "temp/smoketest/winscw_udeb/t_msgutilityserver.dll"); +copy($epoc . "release/winscw/udeb/t_msgpopserver.exe", "temp/smoketest/winscw_udeb/t_msgpopserver.exe"); +copy($epoc . "release/winscw/udeb/t_msgsmtpserver.exe", "temp/smoketest/winscw_udeb/t_msgsmtpserver.exe"); system("7z a -tzip smoketest.zip ./temp/*"); diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/Group/smoketest.xml --- a/common/tools/ats/smoketest/Group/smoketest.xml Thu Oct 29 14:03:35 2009 +0000 +++ b/common/tools/ats/smoketest/Group/smoketest.xml Fri Oct 30 09:36:23 2009 +0000 @@ -41,6 +41,24 @@ install + + + + + + + + install + + + + + + + + + install + @@ -128,6 +146,33 @@ + + install + + + + + + + + + install + + + + + + + + + install + + + + + + + execute @@ -183,6 +228,17 @@ + + execute + + + + + + + + + @@ -199,7 +255,12 @@ smoketest/general/smoketest_mess.script smoketest/general/smoketest_timew.ini smoketest/general/smoketest_timew.script + smoketest/general/smoketest_email.ini + smoketest/general/smoketest_email.script smoketest/sms/general/message1.txt + smoketest/general/MachineName.txt + smoketest/emailmessage/general/20KBody.txt + smoketest/emailsettings/general/popsettings_test908.txt smoketest/winscw_udeb/SmokeTestSecureFSclient.dll smoketest/winscw_udeb/SmokeTestSecureFSserver.exe smoketest/winscw_udeb/Smoketest_Agenda_Server.exe @@ -209,5 +270,8 @@ smoketest/winscw_udeb/Smoketest_System.exe smoketest/winscw_udeb/Smoketest_Timew_Server.exe smoketest/winscw_udeb/SmokeTest_Utils.dll + smoketest/winscw_udeb/t_msgutilityserver.dll + smoketest/winscw_udeb/t_msgpopserver.exe + smoketest/winscw_udeb/t_msgsmtpserver.exe diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/group/MachineName.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/group/MachineName.txt Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,1 @@ +machine-name \ No newline at end of file diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,24 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// bld.inf file for the Messaging Integration Test +// +// + +PRJ_TESTMMPFILES +#include "../../email/pop/group/bld.inf" +#include "../../email/smtp/group/bld.inf" + +PRJ_TESTEXPORTS +MachineName.txt z:/smoketest/MachineName.txt diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/group/machinename.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/group/machinename.pl Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,27 @@ +# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Symbian Foundation License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +use Win32; + +my $computer; +$computer=Win32::NodeName(); +$machineName = lc($computer); + +$fileName = "\\epoc32\\winscw\\c\\msgtest\\MachineName.txt"; +open(FILE, "> " . $fileName); + +# Write settings to output files +print FILE "$machineName"; +close(FILE); diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/group/T_PopServer.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/group/T_PopServer.mmp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,81 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Project definition file for Pop test Server +// +// + + CAPABILITY ALL -TCB + TARGET t_msgpopserver.exe + TARGETTYPE exe + UID 0x1000007A 0x1027406F + VENDORID 0x70000001 + +// Include the Framework +#include "../../../framework/group/T_MsgFramework.mph" + + + + +SYSTEMINCLUDE /epoc32/include +SYSTEMINCLUDE /epoc32/include/test +SYSTEMINCLUDE /epoc32/include/comms-infras + +USERINCLUDE ../inc + +SOURCEPATH ../src +SOURCE T_PopServer.cpp +SOURCE T_MsgSharedDataPop.cpp +SOURCE T_MsgAsyncStepPOP.cpp +SOURCE T_MsgSyncStepPOP.cpp +SOURCE T_CheckChildrenCountPop.cpp +SOURCE T_ComparePopEmailMsgs.cpp +SOURCE T_ComparePopSettings.cpp +SOURCE T_ConnectPop3Server.cpp +SOURCE T_CopyPopSelection.cpp +SOURCE T_CreatePopAccount.cpp +SOURCE T_DeleteAllPopChildren.cpp +SOURCE T_DeletePopAccount.cpp +SOURCE T_DisconnectPop3Server.cpp +SOURCE T_ModifyPopSettings.cpp +SOURCE T_PopInvokeAsyncFunction.cpp +SOURCE T_VerifyPopAccountsCount.cpp +SOURCE T_VerifyPopSettings.cpp +SOURCE T_StartRamUsageTimer.cpp +SOURCE T_StopRamUsageTimer.cpp +SOURCE T_CheckPop3AccessPoint.cpp +SOURCE T_CreatePopAccountWithoutSmtp.cpp +SOURCE T_ModifyPopSettings2.cpp +SOURCE T_CheckPopSNAPSetting.cpp +SOURCE T_RemovePopSNAPSetting.cpp +SOURCE T_CheckPopBMSetting.cpp + +LIBRARY testexecuteutils.lib +LIBRARY testexecutelogclient.lib +LIBRARY imut.lib +LIBRARY bafl.lib +LIBRARY etext.lib +LIBRARY estor.lib +LIBRARY msgs.lib +LIBRARY euser.lib +LIBRARY imcm.lib +LIBRARY efsrv.lib +LIBRARY charconv.lib +LIBRARY t_msgutilityserver.lib +LIBRARY hal.lib +//LIBRARY instrumentationhandler.lib +LIBRARY netmeta.lib +EPOCHEAPSIZE 0x1000 0x800000 + + + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,34 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Component description file for Pop test Server +// +// + +PRJ_TESTMMPFILES +T_PopServer.mmp + +PRJ_TESTEXPORTS +// **** Test Suite: Messaging.Email.pop.plainbody +../scripts/plainbody/smoketest_email.script z:/smoketest/smoketest_email.script +../testdata/plainbody/smoketest_email.ini z:/smoketest/smoketest_email.ini +../scripts/plainbody/setup_smoketest_email.script z:/smoketest/setup_smoketest_email.script + +// Email Account Settings files +../testdata/EmailSettings/POPSettings_test908.txt z:/smoketest/emailsettings/popsettings_test908.txt +// Email Message files + +#ifndef _COMMON_EMAIL_FILES_ +#define _COMMON_EMAIL_FILES_ +../testdata/EmailMessage/20KBody.txt z:/smoketest/EmailMessage/20KBody.txt +#endif //End of _COMMON_EMAIL_FILES_ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/CExpMailInfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/CExpMailInfo.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,75 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This contains the class for CExpPop3MailInfo +* +* +*/ + + + + + +/** + @file +*/ + +#ifndef __CEXPMAILINFO_H__ +#define __CEXPMAILINFO_H__ + + +// Epoc include +#include + +/** +This class holds the information of number of lines, description etc... of a message. +*/ +class CExpPop3MailInfo : public CBase + { +public: + CExpPop3MailInfo() { } + + virtual ~CExpPop3MailInfo() { } + + inline TInt GetNumLinesBodyText() const; + inline void SetNumLinesBodyText(TInt aLinesBodyText); + + inline TInt GetNumAttachments() const; + inline void SetNumAttachments(TInt aNumAttachments); + + inline TInt GetNumLinesHtml() const; + inline void SetNumLinesHtml(TInt aNumLinesHtml); + + inline TBool GetFooterExpected() const; + inline void SetFooterExpected(TBool aFooterExpected); + + inline TInt GetFooterSize() const; + inline void SetFooterSize(TBool aFooterSize); + + inline TDesC& GetDescription(); + inline void SetDescription(TDesC& aDesc); + +private: + TInt iLinesBodyText; + TInt iNumAttachments; + TInt iNumLinesHtml; + TBool iFooterExpected; + TBuf<64> iDescription; + TInt iFooterSize; + }; + + +#include "CExpMailInfo.inl" + +#endif // __CEXPMAILINFO_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/CExpMailInfo.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/CExpMailInfo.inl Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,155 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + + +/** + @file + + Gets Number Of Lines Of Body Text + + @return + Returns Number Of Lines Of Body Text +*/ +inline TInt CExpPop3MailInfo::GetNumLinesBodyText() const + { + return iLinesBodyText; + } + +/** +Sets Number Of Lines Of Body Text + +@param aLinesBodyText +Count of Lines of Body Text +*/ +inline void CExpPop3MailInfo::SetNumLinesBodyText(TInt aLinesBodyText) + { + iLinesBodyText = aLinesBodyText; + } + +/** +Gets Number Of Attachments + +@return +Returns Number Of Attachments +*/ +inline TInt CExpPop3MailInfo::GetNumAttachments() const + { + return iNumAttachments; + } + +/** +Sets Number Of Attachments + +@param aNumAttachments +Count of Number of Attachments +*/ +inline void CExpPop3MailInfo::SetNumAttachments(TInt aNumAttachments) + { + iNumAttachments = aNumAttachments; + } + +/** +Gets Number Of Html Lines + +@return +Returns Number Of Html Lines +*/ +inline TInt CExpPop3MailInfo::GetNumLinesHtml() const + { + return iNumLinesHtml; + } + +/** +Sets Number Of Lines Of HTML + +@param aLinesHtml +Count of Lines of HTML +*/ +inline void CExpPop3MailInfo::SetNumLinesHtml(TInt aNumLinesHtml) + { + iNumLinesHtml = aNumLinesHtml; + } + +/** +Gets Flag status for FooterExpected + +@return +Returns Value of FooterExpected +*/ +inline TBool CExpPop3MailInfo::GetFooterExpected() const + { + return iFooterExpected; + } + +/** +Sets if Footer is Expected + +@param aFooterExpected +Sets ETrue if Footer Expected +*/ +inline void CExpPop3MailInfo::SetFooterExpected(TBool aFooterExpected) + { + iFooterExpected = aFooterExpected; + } + +/** +Gets Size of Footer + +@return +Returns Size of Footer +*/ +inline TInt CExpPop3MailInfo::GetFooterSize() const + { + return iFooterSize; + } + +/** +Sets Footer Size + +@param aFooterSize +Sets Footer Size +*/ +inline void CExpPop3MailInfo::SetFooterSize(TBool aFooterSize) + { + iFooterSize = aFooterSize; + } + +/** +Gets Description + +@return +Returns Description +*/ +inline TDesC& CExpPop3MailInfo::GetDescription() + { + return iDescription; + } + +/** +Sets Description + +@param aDesc +Sets Description +*/ +inline void CExpPop3MailInfo::SetDescription(TDesC& aDesc) + { + iDescription.Copy(aDesc); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CheckChildrenCountPop.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CheckChildrenCountPop.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,54 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_CHECK_CHILDREN_COUNT_H__ +#define __T_CHECK_CHILDREN_COUNT_H__ + +// user includes +#include"T_MsgSyncStepPop.h" +#include "T_MsgSharedDataPop.h" + +// Literals Used +_LIT(KCheckChildrenCountPop,"CheckChildrenCountPop"); + + +/** +Implements the test step which obtains the children count under the POP account +and matches it against the expected count. +*/ +class CT_MsgCheckChildrenCountPop : public CT_MsgSyncStepPOP + { +public: + CT_MsgCheckChildrenCountPop(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgCheckChildrenCountPop(); + + // CTestStep implementation + TVerdict doTestStepL(); + +private: + CT_MsgCheckChildrenCountPop(); + }; +#endif //__T_CHECK_CHILDREN_COUNT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CheckPop3AccessPoint.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CheckPop3AccessPoint.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,34 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __T_CHECKPOP3ACCESSPOINT_H__ +#define __T_CHECKPOP3ACCESSPOINT_H__ + +#include "T_MsgSyncStepPop.h" + +_LIT(KCheckPop3AccessPoint,"CheckPop3AccessPoint"); + +class CT_MsgCheckPop3AccessPoint : public CT_MsgSyncStepPOP + { +public : + CT_MsgCheckPop3AccessPoint(CT_MsgSharedDataPop& aSharedDataPOP); + + ~CT_MsgCheckPop3AccessPoint(); + + /* CTestStep implementation */ + TVerdict doTestStepL(); + }; + +#endif //__T_CHECKPOP3ACCESSPOINT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CheckPopBMSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CheckPopBMSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCheckPopBMSetting class +// +// + +#ifndef T_CHECK_POP_BM_SETTING_H +#define T_CHECK_POP_BM_SETTING_H + +/* User include */ +#include "T_MsgSyncStepPop.h" + +/* Literal used */ +_LIT(KCheckPopBMSetting,"CheckPopBMSetting"); + +/* Implements a test step to check if bearer mobility is supported by POP service */ +class CT_MsgCheckPopBMSetting : public CT_MsgSyncStepPOP + { +public: + CT_MsgCheckPopBMSetting(CT_MsgSharedDataPop& aSharedDataPOP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iPopAccountName; + TBool iExpectedBMSupport; + + }; + +#endif /* T_CHECK_POP_BM_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CheckPopSNAPSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CheckPopSNAPSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCheckPopSNAPSetting class +// +// + +#ifndef T_CHECK_POP_SNAP_SETTING_H +#define T_CHECK_POP_SNAP_SETTING_H + +/* User include */ +#include "T_MsgSyncStepPop.h" + +/* Literal used */ +_LIT(KCheckPopSNAPSetting,"CheckPopSNAPSetting"); + +/* Implements a test step to check the POP SNAP information for the account */ +class CT_MsgCheckPopSNAPSetting : public CT_MsgSyncStepPOP + { +public: + CT_MsgCheckPopSNAPSetting(CT_MsgSharedDataPop& aSharedDataPOP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iPopAccountName; + TBool iExpectedSNAPDefinition; + + }; + +#endif /* T_CHECK_POP_SNAP_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_ComparePopEmailMsgs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_ComparePopEmailMsgs.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,111 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_COMPARE_POP_EMAIL_MSGS_H__ +#define __T_COMPARE_POP_EMAIL_MSGS_H__ + + +// User include +#include "T_MsgAsyncStepPOP.h" +#include "T_MsgSharedDataPop.h" + + +// Epoc include +#include + +// Literal used +_LIT(KComparePopEmailMsgs,"ComparePopEmailMsgs"); + + +// Forward declaration +class CImEmailMessage; +class CExpPop3MailInfo; +class CMsvSession; +class MMsvAttachmentManager; + + +/** +Retireves the attacments related to a message entry. +*/ +class CAttachmentItem : CBase + { +public: + static CAttachmentItem* NewL(CMsvSession& aSession, TMsvEntry aEntry); + static CAttachmentItem* NewLC(CMsvSession& aSession, TMsvEntry aEntry); + ~CAttachmentItem(); + + void ConstructL(CMsvSession& aSession, TMsvEntry aEntry); + MMsvAttachmentManager& MMsvAttachmentManager() const; + +private: + CMsvEntry* iMsvEntry; + CImEmailMessage* iEmailMsg; + }; + + +/** +Implements the test step to compare email body text with the +partial/full download limits set. +*/ +class CT_MsgComparePopEmailMsgs : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgComparePopEmailMsgs* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgComparePopEmailMsgs(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgComparePopEmailMsgs(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + + TMsvId GetMessagePartIndexL(TMsvEntry& aEntry, TUid aUid); + TBool CheckIfFooterMessageExistsL(TPtrC& aRecvBodyText, TInt& aFooterSize); + TBool DoCompareL(TMsvEntry& aRecvEntry, CExpPop3MailInfo& aMailInfo, TMsvEntry& aSentEntry); + TInt GetMessageLinesL(TMsvEntry& aEntry, TUid aUid, TBool& aFooterExists, TInt &aFooterSize); + TInt CountLinesOfBodyTextL(CMsvEntry& aEntry, TBool& aFooterExists, TInt& aFooterSize); + TInt CountLinesOfHtmlL(CMsvEntry& aEntry); + TBool LoadParametersL(); + + CExpPop3MailInfo* GetExpPop3MailInfoLC(TInt aIndx); + TBool CheckAttachmentsL(TMsvEntry& aRecvEntry, CExpPop3MailInfo& aMailInfo, TMsvEntry& aSentEntry); + TBool CompareFilesL(TFileName& aFileName1, TFileName& aFileName2); + TInt CT_MsgComparePopEmailMsgs::CheckIfServerMessageExists(TPtrC aBodyText); + +private: + CMsvEntrySelection* iSentSelectionList; + CMsvEntrySelection* iInboxSelectionList; + RPointerArray iExpResults; + RFs iFs; + }; + +#endif //__T_COMPARE_POP_EMAIL_MSGS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_ComparePopSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_ComparePopSettings.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,69 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_COMPARE_POP_SETTINGS_H__ +#define __T_COMPARE_POP_SETTINGS_H__ + + + +// User include +#include "T_MsgSyncStepPop.h" + +//Epoc includes +#include + +// Forward Declaration +class CImPop3Settings; +class CImSmtpSettings; +class CImIAPPreferences; + +// Literals Used +_LIT(KComparePopSettings,"ComparePopSettings"); + + +/** +Implements a test step to compare the POP and SMTP settings objects +fora POP account +*/ +class CT_MsgComparePopSettings : public CT_MsgSyncStepPOP + { +public: + CT_MsgComparePopSettings(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgComparePopSettings(); + + // CTestStep implementation + TVerdict doTestStepL(); + +public: + TVerdict CompareSettings(CImPop3Settings& aPopSettings1, CImPop3Settings& aPopSettings2, + CImSmtpSettings& aSmtpSettings1, CImSmtpSettings& aSmtpSettings2, + CImIAPPreferences& aPopIapPrefs1, CImIAPPreferences& aPopIapPrefs2, + CImIAPPreferences& aSmtpIapPrefs1, CImIAPPreferences& aSmtpIapPrefs2); + // This function loads the SMTP and POP settings objects of the specified POP account + void LoadAccountSettingsL(CEmailAccounts& aEmailAccount, const TPopAccount& aAccount, CImPop3Settings& aPopSettings, + CImIAPPreferences& aPopIapSettings,CImSmtpSettings& aSmtpSettings, CImIAPPreferences& aSmtpIapSettings); + }; +#endif // __T_COMPARE_POP_SETTINGS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_ConnectPop3Server.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_ConnectPop3Server.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_CONNECT_POP3_SERVER_H__ +#define __T_CONNECT_POP3_SERVER_H__ + + +// User include +#include "T_MsgAsyncStepPOP.h" + +// Literals Used +_LIT(KConnectPop3Server,"ConnectPop3Server"); + + +/** +This implements a test step to connect to the POP server +*/ +class CT_MsgConnectPop3Server : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgConnectPop3Server* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgConnectPop3Server(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgConnectPop3Server(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + CMsvOperation* iOperation; + }; + +#endif //__T_CONNECT_POP3_SERVER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CopyPopSelection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CopyPopSelection.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_COPY_POP_SELECTION_H__ +#define __T_COPY_POP_SELECTION_H__ + + +// User includes +#include "T_MsgAsyncStepPOP.h" +#include "T_MsgSharedDataPop.h" + +// Literals Used +_LIT(KCopyPopSelection,"CopyPopSelection"); + +/** +Implements a test step to copy entries from the POP account created +to the specified target folder +*/ +class CT_MsgCopyPopSelection : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgCopyPopSelection* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgCopyPopSelection(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgCopyPopSelection(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + CMsvOperation* iOperation; + }; +#endif // __T_COPY_POP_SELECTION_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CreatePopAccount.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CreatePopAccount.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,49 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_CREATE_POP_ACCOUNT_H__ +#define __T_CREATE_POP_ACCOUNT_H__ + + +// User include +#include "T_MsgSyncStepPop.h" + + +// Literals used +_LIT(KCreatePopAccount,"CreatePopAccount"); + +/** +Implements a test step to create a POP account +*/ +class CT_MsgCreatePopAccount : public CT_MsgSyncStepPOP + { +public : + CT_MsgCreatePopAccount(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgCreatePopAccount(); + + // CTestStep implementation + TVerdict doTestStepL(); + }; +#endif //__T_CREATE_POP_ACCOUNT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_CreatePopAccountWithoutSmtp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_CreatePopAccountWithoutSmtp.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCreatePopAccountWithoutSmtp class +// +// + +#ifndef T_CREATE_POP_ACCOUNT_WITHOUT_SMTP_H +#define T_CREATE_POP_ACCOUNT_WITHOUT_SMTP_H + +/* User include */ +#include "T_MsgSyncStepPop.h" + +/* Literal used */ +_LIT(KCreatePopAccountWithoutSmtp,"CreatePopAccountWithoutSmtp"); + +/* Implements a test step to create an POP account reading the settings from a config file */ +class CT_MsgCreatePopAccountWithoutSmtp : public CT_MsgSyncStepPOP + { +public: + CT_MsgCreatePopAccountWithoutSmtp(CT_MsgSharedDataPop& aSharedDataPOP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iPopAccountName; + TPtrC iConfigFileName; + + }; +#endif /* T_CREATE_POP_ACCOUNT_WITHOUT_SMTP_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_DeleteAllPopChildren.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_DeleteAllPopChildren.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,66 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_DELETE_ALL_POP_CHILDREN_H__ +#define __T_DELETE_ALL_POP_CHILDREN_H__ + + +// User include +#include "T_MsgAsyncStepPOP.h" + +// Forward decleration +class CT_MsgUtilsDeleteAllChildren; + +//Literals Used +_LIT(KDeleteAllPopChildren,"DeleteAllPopChildren"); + + +/** +Implements a test step to delete all the children entries for the remote +POP account. +*/ +class CT_MsgDeleteAllPopChildren : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgDeleteAllPopChildren* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgDeleteAllPopChildren(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgDeleteAllPopChildren(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + CT_MsgUtilsDeleteAllChildren* iUtil; + }; + +#endif //__T_DELETE_ALL_POP_CHILDREN_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_DeletePopAccount.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_DeletePopAccount.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,47 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_DELETE_POP_ACCOUNT_H__ +#define __T_DELETE_POP_ACCOUNT_H__ + + +// User include +#include "T_MsgSyncStepPop.h" + +// Literals Used +_LIT(KDeletePopAccount,"DeletePopAccount"); + + +// This implements a test step to delete the pop account mentioned or to delete all the pop accounts +class CT_MsgDeletePopAccount : public CT_MsgSyncStepPOP + { +public : + CT_MsgDeletePopAccount(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgDeletePopAccount(); + + // CTestStep implementation + TVerdict doTestStepL(); + }; +#endif //__T_DELETE_POP_ACCOUNT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_DisConnectPop3Server.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_DisConnectPop3Server.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_DIS_CONNECT_POP3_SERVER_H__ +#define __T_DIS_CONNECT_POP3_SERVER_H__ + +// User includes +#include"T_MsgAsyncStepPOP.h" +#include "T_MsgSharedDataPop.h" + + +// Literals Used +_LIT(KDisConnectPop3Server,"DisConnectPop3Server"); + +/** +Implements a test step to disconnect from the POP server +*/ +class CT_MsgDisConnectPop3Server : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgDisConnectPop3Server* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgDisConnectPop3Server(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgDisConnectPop3Server(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + CMsvOperation* iOperation; + }; + +#endif //__T_DIS_CONNECT_POP3_SERVER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_ModifyPopSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_ModifyPopSettings.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,50 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_MODIFY_POP_SETTINGS_H__ +#define __T_MODIFY_POP_SETTINGS_H__ + + +// User include +#include "T_MsgSyncStepPop.h" + +// Literals Used +_LIT(KModifyPopSettings,"ModifyPopSettings"); + + +/** +Implements a test step to modify the settings of a POP account +by reading from the config file specified +*/ +class CT_MsgModifyPopSettings : public CT_MsgSyncStepPOP + { +public : + CT_MsgModifyPopSettings(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgModifyPopSettings(); + + // CTestStep implementation + TVerdict doTestStepL(); + }; +#endif //__T_MODIFY_POP_SETTINGS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_ModifyPopSettings2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_ModifyPopSettings2.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgModifyPopSettings2 class +// +// + +#ifndef T_MODIFY_POP_SETTINGS_2_H +#define T_MODIFY_POP_SETTINGS_2_H + +/* User include */ +#include "T_MsgSyncStepPop.h" + +/* Literal used */ +_LIT(KModifyPopSettings2,"ModifyPopSettings2"); + +/* Implements a test step that modifies the settings of the specified Pop account + via the given config file */ +class CT_MsgModifyPopSettings2 : public CT_MsgSyncStepPOP + { +public : + CT_MsgModifyPopSettings2(CT_MsgSharedDataPop& aSharedDataPOP); + + ~CT_MsgModifyPopSettings2(); + + /* CTestStep implementation */ + TVerdict doTestStepL(); + }; +#endif /* T_MODIFY_POP_SETTINGS_2_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_MsgAsyncStepPOP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_MsgAsyncStepPOP.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,52 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* References POP shared data for use by derived test steps. +* +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_MSG_ASYNCSTEPPOP_H__ +#define __T_MSG_ASYNCSTEPPOP_H__ + +//user includes +#include "T_MsgAsyncStep.h" +#include "T_MsgSharedDataPop.h" + + +/** +Base class for the asynchronous POP test steps +*/ +class CT_MsgAsyncStepPOP : public CT_MsgAsyncStep + { +protected: + CT_MsgAsyncStepPOP(CT_MsgSharedDataPop& iSharedDataPop); + + // MT_MsgActiveCallback implementation +// virtual void RunL() =0; +// virtual void DoCancel() =0; + +protected: + CT_MsgSharedDataPop& iSharedDataPOP; + }; + +#endif // __T_MSG_ASYNCSTEPPOP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_MsgSharedDataPop.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_MsgSharedDataPop.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,61 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_MSG_SHARED_DATA_POP_H__ +#define __T_MSG_SHARED_DATA_POP_H__ + +// Epoc include +#include + +// User includes +#include "T_MsgSharedDataBase.h" + +/** +This implements a class which creates a pointer to the POP MTM object +*/ +class CT_MsgSharedDataPop : public CT_MsgSharedDataBase + { +public: + static CT_MsgSharedDataPop* NewL(); + ~CT_MsgSharedDataPop(); + +protected: + virtual CBaseMtm* NewMtmL(); + +private: + void ConstructL(); + CT_MsgSharedDataPop(); + +public: + CPeriodic* iPeriodic; + TInt iMaxRamValue; + TInt iMinRamValue; + TInt iStartRamValue; + TInt iEndRamValue; + TBool iMark; + }; + +#endif // __T_MSG_SHARED_DATA_Pop_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_MsgSyncStepPop.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_MsgSyncStepPop.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,51 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Sync step class owning POP shared data for use by derived test steps. +* +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_MSG_SYNC_STEP_POP_H__ +#define __T_MSG_SYNC_STEP_POP_H__ + +//user includes +#include "T_MsgStep.h" +#include "T_MsgSharedDataPop.h" + +/** +Base class for synchronous POP teststeps. +*/ +class CT_MsgSyncStepPOP : public CT_MsgStep + { +protected: + CT_MsgSyncStepPOP(CT_MsgSharedDataPop& iSharedDataPop); + virtual ~CT_MsgSyncStepPOP(); + +private: + CT_MsgSyncStepPOP(); //Force iSharedData to be set correctly. + +protected: + CT_MsgSharedDataPop& iSharedDataPOP; + }; + +#endif // __T_MSG_SYNC_STEP_POP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_PopInvokeAsyncFunction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_PopInvokeAsyncFunction.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,72 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_POP_INVOKE_ASYNC_FUNCTION_H__ +#define __T_POP_INVOKE_ASYNC_FUNCTION_H__ + +// User includes +#include "T_MsgAsyncStepPOP.h" +#include "T_MsgSharedDataPop.h" + + +// Epoc includes +#include + +// Forward Declaration +class CMsvOperation; +class CT_MsgPopServer; + +// Literals Used +_LIT(KPopInvokeAsyncFunction,"PopInvokeAsyncFunction"); + + +/** +Implements a test step to populate the messages from the POP server +*/ +class CT_MsgPopInvokeAsyncFunction : public CT_MsgAsyncStepPOP + { +public: + static CT_MsgPopInvokeAsyncFunction* NewL(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgPopInvokeAsyncFunction(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgPopInvokeAsyncFunction(CT_MsgSharedDataPop& aSharedDataPOP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + // For the async operation + CMsvOperation* iOperation; + // For the mail populate options + TImPop3PopulateOptions iMailInfo; + }; +#endif //__T_POP_INVOKE_ASYNC_FUNCTION_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_PopServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_PopServer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,57 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_POP_SERVER_H__ +#define __T_POP_SERVER_H__ + +// User defined classes +#include "T_MsgServer.h" +#include "T_MsgSharedDataPop.h" + + +//Literals Used +_LIT(KPopServer,"T_MsgPopServer"); + + +/** +POP test server which creates and executes the teststeps. +*/ +class CT_MsgPopServer : public CT_MsgServer + { +public : + static CT_MsgPopServer* NewL(); + +private: + CT_MsgPopServer(); + + virtual CTestStep* CreateTestStepL(const TDesC& aStepName); + + // Creates an object of Shared Data + virtual CT_MsgSharedDataBase* NewSharedDataL(); + +public: + CT_MsgSharedDataPop* iSharedDataPOP; + }; +#endif //__T_POP_SERVER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_RemovePopSNAPSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_RemovePopSNAPSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgRemovePopSNAPSetting class +// +// + +#ifndef T_REMOVE_POP_SNAP_SETTING_H +#define T_REMOVE_POP_SNAP_SETTING_H + +/* User include */ +#include "T_MsgSyncStepPop.h" + +/* Literal used */ +_LIT(KRemovePopSNAPSetting,"RemovePopSNAPSetting"); + +/* Implements a test step to remove the POP SNAP information for the account */ +class CT_MsgRemovePopSNAPSetting : public CT_MsgSyncStepPOP + { +public: + CT_MsgRemovePopSNAPSetting(CT_MsgSharedDataPop& aSharedDataPOP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iPopAccountName; + + }; + +#endif /* T_REMOVE_POP_SNAP_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_SharedDataPop.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_SharedDataPop.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,52 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_SHARED_DATA_POP_H__ +#define __T_SHARED_DATA_POP_H__ + +// Epoc include +#include + +// User includes +#include "t_msgshareddatabase.h" + + +/** +This implements a class which creates a pointer to the POP MTM object +*/ +class CT_MsgSharedDataPop : public CT_MsgSharedDataBase + { +public: + static CT_MsgSharedDataPop* NewL(); + +protected: + virtual CBaseMtm* NewMtmL(); + +private: + CT_MsgSharedDataPop(); + }; + +#endif // __T_SHARED_DATA_POP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_StartRamUsageTimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_StartRamUsageTimer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_StartRamUsageTimer +* +* +*/ + + + + + + + +#ifndef _T_START_RAM_USAGE_TIMER_ +#define _T_START_RAM_USAGE_TIMER_ + + +// User includes +#include "T_MsgAsyncStepPOP.h" + +// Literals used +_LIT(KStartRamUsageTimer,"StartRamUsageTimer"); + +/** +Implement a wrapper class over HAL APIs and +setting the periodic Timer to monitor the RAM usage + */ +class CT_StartRamUsageTimer : public CT_MsgAsyncStepPOP + { +public: + CT_StartRamUsageTimer(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_StartRamUsageTimer(); + + static TInt RamUsage(TAny* aObject); + void DoRamUsage(); + +private: + void ProgressL(TBool aFinal); + void CancelStep(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + }; + + +#endif // _T_START_RAM_USAGE_TIMER_ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_StopRamUsageTimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_StopRamUsageTimer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_StopRamUsageTimer +* +* +*/ + + + + + + + +#ifndef _T_STOP_RAM_USAGE_TIMER_ +#define _T_STOP_RAM_USAGE_TIMER_ + + +// User includes +#include "T_MsgAsyncStepPOP.h" + +// Literals used +_LIT(KStopRamUsageTimer,"StopRamUsageTimer"); + +// Implement a test step to stop the periodic Timer +class CT_StopRamUsageTimer :public CT_MsgAsyncStepPOP + { +public: + CT_StopRamUsageTimer(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_StopRamUsageTimer(); +private: + void ProgressL(TBool aFinal); + void CancelStep(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + }; + + +#endif // _T_STOP_RAM_USAGE_TIMER_ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_VerfiyPopSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_VerfiyPopSettings.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,50 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_VERIFY_POP_SETTINGS_H__ +#define __T_VERIFY_POP_SETTINGS_H__ + + +// User include +#include "T_MsgSyncStepPop.h" + +// Literals used +_LIT(KVerifyPopSettings,"VerifyPopSettings"); + + +/** +Implements a test step that verifies the settings of an POP account +created with the default settings +*/ +class CT_MsgVerifyPopSettings : public CT_MsgSyncStepPOP + { +public : + CT_MsgVerifyPopSettings(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgVerifyPopSettings(); + + // CTestStep implementation + TVerdict doTestStepL(); + }; +#endif //__T_VERIFY_POP_SETTINGS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/inc/T_VerifyPopAccountsCount.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/inc/T_VerifyPopAccountsCount.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,49 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_VERIFY_POP_ACCOUNTS_COUNT_H__ +#define __T_VERIFY_POP_ACCOUNTS_COUNT_H__ + + +// User include +#include "T_MsgSyncStepPop.h" + +// Literals Used +_LIT(KVerifyPopAccountsCount,"VerifyPopAccountsCount"); + + +/** +This class Implements a test step to verify the count of the Pop accounts created +*/ +class CT_MsgVerifyPopAccountsCount: public CT_MsgSyncStepPOP + { +public : + CT_MsgVerifyPopAccountsCount(CT_MsgSharedDataPop& aSharedDataPOP); + ~CT_MsgVerifyPopAccountsCount(); + + // CTestStep implementation + TVerdict doTestStepL(); + }; +#endif //__T_VERIFY_POP_ACCOUNTS_COUNT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/scripts/plainbody/setup_smoketest_email.script --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/scripts/plainbody/setup_smoketest_email.script Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,30 @@ +// +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +RUN_UTILS MkDir c:\smoketest\ +RUN_UTILS MkDir c:\smoketest\EmailMessage\ +RUN_UTILS MkDir c:\smoketest\emailsettings\ + +RUN_UTILS CopyFile z:\smoketest\smoketest_email.ini c:\smoketest\smoketest_email.ini +RUN_UTILS MakeReadWrite c:\smoketest\smoketest_email.ini +RUN_UTILS CopyFile z:\smoketest\EmailMessage\20KBody.txt c:\smoketest\EmailMessage\20KBody.txt +RUN_UTILS MakeReadWrite c:\smoketest\EmailMessage\20KBody.txt +RUN_UTILS CopyFile z:\smoketest\emailsettings\popsettings_test908.txt c:\smoketest\emailsettings\popsettings_test908.txt +RUN_UTILS MakeReadWrite c:\smoketest\emailsettings\popsettings_test908.txt +RUN_UTILS CopyFile z:\smoketest\MachineName.txt c:\smoketest\MachineName.txt +RUN_UTILS MakeReadWrite c:\smoketest\MachineName.txt +RUN_UTILS CopyFile z:\smoketest\smoketest_email.script c:\smoketest\smoketest_email.script +RUN_UTILS MakeReadWrite c:\smoketest\smoketest_email.script diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/scripts/plainbody/smoketest_email.script --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/scripts/plainbody/smoketest_email.script Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +// +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +PRINT Run Email smoketest + +LOAD_SUITE T_MsgPopServer -SharedData +LOAD_SUITE T_MsgSmtpServer -SharedData +DELAY 1000 + +START_TESTCASE SMOKE_EMAIL_0001 +//! @SYMTestCaseID SMOKE_EMAIL_0001 +//! @SYMTestCaseDesc Create a new email message with 20KB plain body text + +PRINT Setup Begins ##################################################### + +RUN_TEST_STEP 1000 T_MsgPopServer StartUp +RUN_TEST_STEP 1000 T_MsgSmtpServer StartUp + +RUN_TEST_STEP 1000 T_MsgPopServer CreatePopAccount c:\smoketest\smoketest_email.ini 0001-CreatePopAccount +RUN_TEST_STEP 1000 T_MsgSmtpServer SmtpCreateNewMessageWithPlainBodyText c:\smoketest\smoketest_email.ini 0001-SmtpCreateNewMessageWithPlainBodyText + +RUN_TEST_STEP 1000 T_MsgSmtpServer ShutDown +RUN_TEST_STEP 1000 T_MsgPopServer ShutDown + +PRINT Execute Completed ################################################ +END_TESTCASE SMOKE_EMAIL_0001 diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CheckChildrenCountPop.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CheckChildrenCountPop.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,138 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckChildrenCountPop +// [Paramaters] +// PopAccountName : Name of the Pop account +// ExpectedChildrenCount : Expected number of children to be present in the +// folder +// Obtains a selection of the children entries under the Pop account and obtains its count. +// Checks if children count is as expected. If the count does not match, the test step +// fails. +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntry::ChildrenL +// CMsvEntry::SetSortTypeL +// TMsvSelectionOrdering::SetShowInvisibleEntries +// +// + + + +/** + @file +*/ + + +// User includes +#include "T_CheckChildrenCountPop.h" +#include +#include + + +//epoc includes +#include + + +// Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KExpCount,"Expectedcount"); + + +/** +CT_MsgCheckChildrenCountPop() +Sets the teststep name to KCheckChildrenCountPop + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgCheckChildrenCountPop::CT_MsgCheckChildrenCountPop(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCheckChildrenCountPop); + } + + +/** +~CT_MsgCheckChildrenCountPop() +Destructor +*/ +CT_MsgCheckChildrenCountPop::~CT_MsgCheckChildrenCountPop() + { + } + + +/** +doTestStepL() +Reads the remote foldername and the expected count from the ini file. +Obtains the count of the children entries under the given folder. +Verifies whether the expected count read from the ini file +matches with the actual count.Fails if the count does not match + +@return +Returns the test step result +*/ +TVerdict CT_MsgCheckChildrenCountPop::doTestStepL() + { + INFO_PRINTF1(_L("Test Step :CheckChildrenCountPop ")); + + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("POP account name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the POP service Id based on the account name read from ini + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&) popAccountName); + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid Pop account name specified")); + SetTestStepResult(EFail); + } + else + { + TInt expectedChildrenCount; + // Read the expected children count from ini file + if(!GetIntFromConfig(ConfigSection(), KExpCount, expectedChildrenCount)) + { + ERR_PRINTF1(_L("Expected number of children in the POP account not specified")); + SetTestStepResult(EFail); + } + else + { + // Create a selection of the children entries under the given folder and verify the count + CMsvEntrySelection* childrenSelection = + CT_MsgUtils::CreateChildrenSelectionL(iSharedDataPOP.iSession, popServiceId); + CleanupStack::PushL(childrenSelection); + + TInt actualCount = childrenSelection->Count(); + + if (expectedChildrenCount != actualCount) + { + ERR_PRINTF3(_L("Children count is not equal to expected count, expected : %d, actual: %d "),expectedChildrenCount, actualCount); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF3(_L("Children count is equal to expected count, expected : %d, actual: %d "),expectedChildrenCount, actualCount); + } + CleanupStack::PopAndDestroy(childrenSelection); + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CheckPop3AccessPoint.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CheckPop3AccessPoint.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,135 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckPop3AccessPoint +// [Paramaters] +// PopAccountName : Name of the Pop account +// ConfigFileName: Configuration file name to read for account settings +// [TestStep Description] +// Checks what access point is being used by an POP account connection +// +// + +#include "T_CheckPop3AccessPoint.h" + +#include +#include +#include +#include + +/* Literals Used */ +_LIT(KAccountName,"PopAccountName"); +_LIT(KConfigFileName, "PopConfigFileName"); + +/** + Function : CT_MsgCheckPop3AccessPoint + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgCheckPop3AccessPoint::CT_MsgCheckPop3AccessPoint(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCheckPop3AccessPoint); + } + +/** + Function : ~CT_MsgCheckPop3AccessPoint + Description : Destructor + @return : N/A +*/ +CT_MsgCheckPop3AccessPoint::~CT_MsgCheckPop3AccessPoint() + { + } + +/** + Function : doTestStepL + Description : + @return : TVerdict - Test step result + @leave : KMsvNullIndexEntryId Invalid POP account name specified +*/ +TVerdict CT_MsgCheckPop3AccessPoint::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : CheckPop3AccessPoint")); + + TPtrC accountName; + if(!GetStringFromConfig(ConfigSection(), KAccountName, accountName)) + { + ERR_PRINTF1(_L("Pop Account name not specified")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + CImIAPPreferences* popPrefs = CImIAPPreferences::NewLC(); + CImPop3Settings* popSettings = new (ELeave) CImPop3Settings; + CleanupStack::PushL(popSettings); + + TInt expectedAccessPoint = 0; + + if(configFileName.CompareF( _L("none") ) != 0 ) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(configFileName, *popSettings, *popPrefs)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the POP setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + else + { + if (popPrefs->NumberOfIAPs() > 0) + { + TImIAPChoice iapChoice = popPrefs->IAPPreference(0); + expectedAccessPoint = iapChoice.iIAP; + } + } + } + + CleanupStack::PopAndDestroy(2, popPrefs); + + if (TestStepResult() == EPass) + { + TMsvId serviceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)accountName); + + TUint32 accessPoint; + TInt err = iSharedDataPOP.iSession->ServiceAccessPointId(serviceId, accessPoint); + + if (err == KErrNone) + { + if (accessPoint == expectedAccessPoint) + { + INFO_PRINTF1(_L("Access points match")); + } + else + { + ERR_PRINTF3(_L("Access point %d does not match expected %d"), accessPoint, expectedAccessPoint); + SetTestStepResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Failure getting access point - %d"), err); + SetTestStepResult(EFail); + } + } + + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CheckPopBMSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CheckPopBMSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,111 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckPopBMSetting +// [Paramaters] +// PopAccountName :Name of the Pop account. +// ExpectedBMSupport :ETrue => Bearer mobility is expected to be supported by the POP service. +// EFalse => Bearer mobility is not expected to be supported by the POP service. +// Checks if bearer mobility is supported by the POP service. +// +// + +//User includes +#include "T_CheckPopBMSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KExpectedBMSupport,"ExpectedBMSupport"); + +/** + Function : CT_MsgCheckPopBMSetting + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgCheckPopBMSetting::CT_MsgCheckPopBMSetting(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCheckPopBMSetting); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCheckPopBMSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, iPopAccountName)) + { + ERR_PRINTF1(_L("Pop account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetBoolFromConfig(ConfigSection(), KExpectedBMSupport, iExpectedBMSupport)) + { + ERR_PRINTF1(_L("An expected \"ETrue\" or \"EFalse\" boolean value is not specified for BM support")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Checks the provisioned BM support for the POP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCheckPopBMSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : CheckPopBMSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImPop3Settings* popSettings = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings); + + TPopAccount popAccountId; + CT_MsgUtilsCentralRepository::GetPopAccountL((TDes&)iPopAccountName, popAccountId); + + accounts->LoadPopSettingsL(popAccountId, *popSettings); + + TBool actualBMSupport = popSettings->BearerMobility(); + + if (actualBMSupport == iExpectedBMSupport) + { + INFO_PRINTF3(_L("Actual Bearer Mobility Support [%d] does equals Expected Bearer Mobility Support [%d]"),actualBMSupport,iExpectedBMSupport); + } + else + { + ERR_PRINTF3(_L("Actual Bearer Mobility Support [%d] does not equal Expected Bearer Mobility Support [%d]"),actualBMSupport,iExpectedBMSupport); + SetTestStepResult(EFail); + } + + CleanupStack::PopAndDestroy(2,accounts); // popSettings, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CheckPopSNAPSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CheckPopSNAPSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,134 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckPopSNAPSetting +// [Paramaters] +// PopAccountName :Name of the Pop account. +// ExpectedSNAPDefinition :ETrue => A SNAP has expected to been provisioned for the POP account. +// EFalse => A SNAP has not expected to been provisioned for the POP account. +// ExpectedSNAPPreference :Expected SNAP ID (Assuming the SNAP has been defined for the POP a/c) +// This parameter can be ignored if the "ExpectedSNAPDefinition" is EFalse. +// Checks the provisioned SNAP information for the POP account. +// +// + +//User includes +#include "T_CheckPopSNAPSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KSNAPDefined,"ExpectedSNAPDefinition"); +_LIT(KSNAPPreference,"ExpectedSNAPPreference"); + +/** + Function : CT_MsgCheckPopSNAPSetting + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgCheckPopSNAPSetting::CT_MsgCheckPopSNAPSetting(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCheckPopSNAPSetting); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCheckPopSNAPSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, iPopAccountName)) + { + ERR_PRINTF1(_L("Pop account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetBoolFromConfig(ConfigSection(), KSNAPDefined, iExpectedSNAPDefinition)) + { + ERR_PRINTF1(_L("An expected \"ETrue\" or \"EFalse\" boolean value is not specified for the SNAP definition")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Checks the provisioned SNAP information for the POP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCheckPopSNAPSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : CheckPopSNAPSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImIAPPreferences* popIapPrefs = CImIAPPreferences::NewLC(); + + TPopAccount popAccountId; + CT_MsgUtilsCentralRepository::GetPopAccountL((TDes&)iPopAccountName,popAccountId); + + accounts->LoadPopIapSettingsL(popAccountId, *popIapPrefs); + + TBool actualSNAPDefintion = popIapPrefs->SNAPDefined(); + + if (actualSNAPDefintion == iExpectedSNAPDefinition) + { + if (actualSNAPDefintion) + { + TInt expectedSNAPPreference = 0; + if(!GetIntFromConfig(ConfigSection(), KSNAPPreference, expectedSNAPPreference)) + { + ERR_PRINTF1(_L("An expected SNAP ID value is not specified")); + SetTestStepResult(EFail); + CleanupStack::PopAndDestroy(2,accounts); // popIapPrefs, accounts + return TestStepResult(); + } + TInt actualSNAPPreference = popIapPrefs->SNAPPreference(); + + if (actualSNAPPreference != expectedSNAPPreference) + { + ERR_PRINTF3(_L("Actual SNAP ID [%d] does not equal Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF3(_L("Actual SNAP ID [%d] equals Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference); + } + } + } + else + { + ERR_PRINTF3(_L("Actual SNAP Defintion [%d] does not equal Expected SNAP Defintion [%d]"),actualSNAPDefintion,iExpectedSNAPDefinition); + SetTestStepResult(EFail); + } + + CleanupStack::PopAndDestroy(2,accounts); // popIapPrefs, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_ComparePopEmailMsgs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_ComparePopEmailMsgs.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,999 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ComparePopEmailMsgs +// [Paramaters] +// PopAccountName : Name of the POP account +// Compares the recieved mails with the expected numbers of lines to test POP3 TOP command +// +// + + + +/** + @file +*/ + +// User includes +#include "CExpMailInfo.h" +#include "T_ComparePopEmailMsgs.h" +#include +#include +#include + + +// Epoc includes +#include +#include +#include + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); + + +/** +ConstructL() +Used to ensure that MMsvAttachmentManager is not destroyed until we want it to be. +To do this we need to preserve certain objects of CImEmailMessage, which if disappeared +would invalidate MMsvAttachmentManager. But this should be deleted in a controlled manner. + +@param aSession +An object of type CMsvSession object. + +@param aEntry +An object of type TMsvEntry used to get the entry ID. +*/ +void CAttachmentItem::ConstructL(CMsvSession& aSession, TMsvEntry aEntry) + { + iMsvEntry = aSession.GetEntryL(aEntry.Id()); + + iMsvEntry->SetEntryL(aEntry.Id()); + iEmailMsg = CImEmailMessage::NewL(*iMsvEntry); + + CMsvOperationActiveSchedulerWait* waiter = CMsvOperationActiveSchedulerWait::NewLC(); + iEmailMsg->GetAttachmentsListL(waiter->iStatus, aEntry.Id(), + CImEmailMessage::EAllAttachments, + CImEmailMessage::EThisMessageOnly); + waiter->Start(); + + CleanupStack::PopAndDestroy(1, waiter); //waiter + } + + +/** +NewL() +Allocates and creates a new CAttachmentItem object + +@param aSession +An object of type CMsvSession object. + +@param aEntry +An object of type TMsvEntry + +@leave KErrNoMemory + +@return +A pointer to an object of type CAttachmentItem + +*/ +CAttachmentItem* CAttachmentItem::NewL(CMsvSession& aSession, TMsvEntry aEntry) + { + CAttachmentItem* self=CAttachmentItem::NewLC(aSession, aEntry); + CleanupStack::Pop(self); + + return self; + } + + +/** +NewLC() +Static factory constructor. Uses two phase construction and leaves nothing on the CleanupStack. + + +@param aSession +An object of type CMsvSession object. + +@param aEntry +An object of type TMsvEntry + +@leave KErrNoMemory +@return +A pointer to the newly created CAttachmentItem object. + +*/ +CAttachmentItem* CAttachmentItem::NewLC(CMsvSession& aSession, TMsvEntry aEntry) + { + CAttachmentItem* self=new (ELeave) CAttachmentItem; + CleanupStack::PushL(self); + + self->ConstructL(aSession, aEntry); + + return self; + } + + +/** +~CAttachmentItem() +Destroy the data members. +*/ +CAttachmentItem::~CAttachmentItem() + { + delete iEmailMsg; + iEmailMsg=NULL; + + delete iMsvEntry; + iMsvEntry=NULL; + } + + +/** +MMsvAttachmentManager() + +@return +An object of MMsvAttachmentManager +*/ +MMsvAttachmentManager& CAttachmentItem::MMsvAttachmentManager() const + { + return (iEmailMsg->AttachmentManager()); + } + + +/** +GetExpPop3MailInfoLC() +Sets the CExpPop3MailInfo attributes reading from the INI file + +@param aIndx +Index in the selection list. + +@leave KErrNotReady + +@return +A pointer to an object of type CExpPop3MailInfo +*/ +CExpPop3MailInfo* CT_MsgComparePopEmailMsgs::GetExpPop3MailInfoLC(TInt aIndx) + { + CExpPop3MailInfo* expMailInfo = new (ELeave) CExpPop3MailInfo; + CleanupStack::PushL(expMailInfo); + + TInt comInt = -1; + _LIT(KNumOfLines,"NumOfLines%d"); + TBuf<256> param; + param.Format(KNumOfLines,aIndx); + + if (!GetIntFromConfig(ConfigSection(), param, comInt)) + { + ERR_PRINTF1(_L("No Input for NumOfLines")); + User::Leave(KErrNotReady); + } + + expMailInfo->SetNumLinesBodyText(comInt); + comInt = -1; + + _LIT(KFooterExpected, "FooterExpected%d"); + param.Format(KFooterExpected,aIndx); + if (!GetIntFromConfig(ConfigSection(), param, comInt)) + { + ERR_PRINTF1(_L("No Input for Footer Expected")); + User::Leave(KErrNotReady); + } + expMailInfo->SetFooterExpected(comInt); + + comInt = -1; + _LIT(KNumOfLinesHtml, "NumOfLinesHtml%d"); + param.Format(KNumOfLinesHtml, aIndx); + if (!GetIntFromConfig(ConfigSection(), param, comInt)) + { + ERR_PRINTF1(_L("No Input For NumOfLinesHtml")); + User::Leave(KErrNotReady); + } + expMailInfo->SetNumLinesHtml(comInt); + + TPtrC ptrDes; + _LIT(KDescription, "Description%d"); + param.Format(KDescription, aIndx); + if(!GetStringFromConfig(ConfigSection(), param, ptrDes)) + { + ERR_PRINTF1(_L("No Input for Description")); + User::Leave(KErrNotReady); + } + expMailInfo->SetDescription(ptrDes); + + _LIT(KNumOfAttachments, "NumOfAttachments%d"); + param.Format(KNumOfAttachments, aIndx); + if (!GetIntFromConfig(ConfigSection(), param, comInt)) + { + ERR_PRINTF1(_L("No Input for NumOfAttachments")); + User::Leave(KErrNotReady); + } + expMailInfo->SetNumAttachments(comInt); + + comInt = -1; + if(expMailInfo->GetFooterExpected()) + { + _LIT(KFooterSize, "FooterSize%d"); + param.Format(KFooterSize, aIndx); + if (!GetIntFromConfig(ConfigSection(), param, comInt)) + { + ERR_PRINTF1(_L("No Input for FooterSize")); + User::Leave(KErrNotReady); + } + expMailInfo->SetFooterSize(comInt); + } + else + { + expMailInfo->SetFooterSize(0); + } + + return expMailInfo; + } + + + +/** +LoadParametersL() +Loads the test parameters + +@leave KErrNotReady +@return +ETrue if parameters loaded, Efalse on failure. +*/ +TBool CT_MsgComparePopEmailMsgs::LoadParametersL() + { + TPtrC sentFolder; + _LIT(KSentFolder, "SentFolder"); + if(!GetStringFromConfig(ConfigSection(), KSentFolder, sentFolder)) + { + ERR_PRINTF1(_L("No Input for Sent Folder")); + User::Leave(KErrNotReady); + } + + iSentSelectionList = CT_MsgUtils ::CreateChildrenSelectionL(iSharedDataPOP.iSession, CT_MsgUtilsEnumConverter::FindFolderIdByName(sentFolder)); + if(! iSentSelectionList) + { + ERR_PRINTF1(_L("Invalid sentSelectionList")); + SetTestStepResult(EFail); + return EFalse; + } + + TPtrC inboxFolder; + _LIT(KInboxFolder, "InboxFolder"); + if(!GetStringFromConfig(ConfigSection(), KInboxFolder, inboxFolder)) + { + ERR_PRINTF1(_L("No Input for Inbox Folder")); + User::Leave(KErrNotReady); + } + + + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Account name not specified")); + SetTestStepResult(EFail); + } + if (CT_MsgUtilsEnumConverter::FindFolderIdByName(inboxFolder) == KMsvLocalServiceIndexEntryId) + { + // We are expecting to get a selection of remote Folder(which is the serviceId) + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + + CMsvEntry* entry = iSharedDataPOP.iSession->GetEntryL(popServiceId); + CleanupStack::PushL(entry); + + entry->SetEntryL(popServiceId); // Setting the context to remote folder. + + iInboxSelectionList = CT_MsgUtils ::CreateChildrenSelectionL(iSharedDataPOP.iSession, popServiceId); + + CleanupStack::PopAndDestroy(entry); + } + else + { + iInboxSelectionList = CT_MsgUtils ::CreateChildrenSelectionL(iSharedDataPOP.iSession, CT_MsgUtilsEnumConverter::FindFolderIdByName(inboxFolder)); + } + + if(! iInboxSelectionList) + { + ERR_PRINTF1(_L("Invalid inboxSelectionList")); + SetTestStepResult(EFail); + return EFalse; + } + //Starting the comparision + if(iInboxSelectionList->Count() != iSentSelectionList->Count()) + { + ERR_PRINTF3(_L("iInboxSelectionList->Count(%d) != iSentSelectionList->Count(%d)"), + iInboxSelectionList->Count(), iSentSelectionList->Count()); + SetTestStepResult(EFail); + return EFalse; + } + + TInt comInt = -1; + _LIT(KNumTest, "NumTest"); + if (!GetIntFromConfig(ConfigSection(), KNumTest, comInt)) + { + ERR_PRINTF1(_L("No Input for NumTests")); + User::Leave(KErrNotReady); + } + TInt numTests = comInt; + if(numTests != iInboxSelectionList->Count()) + { + ERR_PRINTF1(_L("iNumTests != iInboxSelectionList")); + SetTestStepResult(EFail); + return EFalse; + } + + iExpResults.Reset(); + for(TInt i = 0;i < numTests; i++) + { + + CExpPop3MailInfo* pExp = GetExpPop3MailInfoLC(i); + if(! pExp) + { + ERR_PRINTF1(_L("Invalid expected mail Info")); + SetTestStepResult(EFail); + return EFalse; + } + else + { + CleanupStack::Pop(pExp); // pExp + iExpResults.Append(pExp); + } + } + return ETrue; + } + + +/** +DoCompareL() +Comparison of 2 email messages identified by TMsvEntry + +@param aRecvEntry +The recieved email identifier. + +@param aMailInfo +Expected state of the recieved email. + +@param aSentEntry +Identifier of the original sent email foir comparison purposes. + +@return +ETrue if emails match EFalse otherwise +*/ +TBool CT_MsgComparePopEmailMsgs::DoCompareL(TMsvEntry& aRecvEntry, CExpPop3MailInfo& aMailInfo, TMsvEntry& aSentEntry) + { + TBool ret = ETrue; + TBool footerExists = EFalse; + TInt footersize = 0; + + + TInt nLines = GetMessageLinesL(aRecvEntry, KUidMsvEmailTextEntry, footerExists, footersize); + if(nLines != aMailInfo.GetNumLinesBodyText()) + { + ERR_PRINTF3(_L("Lines of body text wrong actual = %d expected = %d!"), nLines, aMailInfo.GetNumLinesBodyText()); + ret = EFalse; + } + nLines = GetMessageLinesL(aRecvEntry, KUidMsvEmailHtmlEntry, footerExists, footersize); + + if(nLines != aMailInfo.GetNumLinesHtml()) + { + ERR_PRINTF3(_L("HTML size wrong actual = %d expected = %d!"), nLines, aMailInfo.GetNumLinesHtml()); + ret = EFalse; + } + + else if(! CheckAttachmentsL(aRecvEntry, aMailInfo, aSentEntry)) + { + ERR_PRINTF1(_L("Attachment comparison failed !")); + ret = EFalse; + } + + else if(! footerExists && aMailInfo.GetFooterExpected()) + { + ERR_PRINTF1(_L("An expected footer was missing !")); + ret = EFalse; + } + else if(footerExists && ! aMailInfo.GetFooterExpected()) + { + ERR_PRINTF1(_L("An unexpected footer was found !")); + ret = EFalse; + } + else if(aMailInfo.GetFooterExpected() && aMailInfo.GetFooterSize()!=0 + && aMailInfo.GetFooterSize() != footersize) + { + ERR_PRINTF3(_L("KB left on server size wrong = %d expected = %d!"), footersize, aMailInfo.GetFooterSize()); + ret = EFalse; + } + return ret; + } + + + + +/** +CheckAttachmentsL() +Compares attachments for the email messages aRecvEntry and aSentEntry using +expected results in aMailInfo + +@param aRecvEntry +An identifier for the recieved email + +@param aMailInfo +Expected state of recieved email attachments + +@param aSentEntry +An identifier for the original email + +@return +ETrue if attachments match otherwise EFalse +*/ +TBool CT_MsgComparePopEmailMsgs::CheckAttachmentsL(TMsvEntry& aRecvEntry, CExpPop3MailInfo& aMailInfo, TMsvEntry& aSentEntry) + { + TBool ret = ETrue; + CAttachmentItem* recvManager = CAttachmentItem::NewLC(*iSharedDataPOP.iSession, aRecvEntry); + CAttachmentItem* sentManager = CAttachmentItem::NewLC(*iSharedDataPOP.iSession, aSentEntry); + + TInt recvCount = recvManager->MMsvAttachmentManager().AttachmentCount(); + TInt sentCount = sentManager->MMsvAttachmentManager().AttachmentCount(); + + TFileName recvFileName; + TFileName sentFileName; + + if(recvCount == aMailInfo.GetNumAttachments()) + { + for(TInt i=0;iMMsvAttachmentManager().GetAttachmentInfoL(i); + CleanupStack::PushL(recvAttInfo); + + CMsvAttachment* sentAttInfo = sentManager->MMsvAttachmentManager().GetAttachmentInfoL(j); + CleanupStack::PushL(sentAttInfo); + + if(recvAttInfo->AttachmentName().Compare(sentAttInfo->AttachmentName()) == 0) + { + recvFileName = recvAttInfo->FilePath(); + sentFileName = sentAttInfo->FilePath(); + ret = CompareFilesL(recvFileName, sentFileName); + } + CleanupStack::PopAndDestroy(2, recvAttInfo); + } + } + } + else + { + INFO_PRINTF3(_L("Warning - Expected attachments mismatch recieved (%d) expected (%d)"), + recvCount, aMailInfo.GetNumAttachments()); + ret = EFalse; + } + CleanupStack::PopAndDestroy(2, recvManager); // recvManager,sentManager + return ret; + } + + + +/** +CompareFilesL() +Performs byte for byte copmparison of the files indicated by aFileName1 and aFileName2 + +@param aFileName1 +Filename of first file to be compared + +@param aFileName2 +Filename of second file to be compared + +@return +ETrue if files match, EFalse otherwise +*/ +TBool CT_MsgComparePopEmailMsgs::CompareFilesL(TFileName& aFileName1, TFileName& aFileName2) + { + TBool ret = ETrue; + RFile file1, file2; + + User::LeaveIfError(file1.Open(iFs, aFileName1, EFileRead)); + User::LeaveIfError(file2.Open(iFs, aFileName2, EFileRead)); + + TInt sz1, sz2; + User::LeaveIfError(file1.Size(sz1)); + User::LeaveIfError(file2.Size(sz2)); + + if(sz1 != sz2) + { + ERR_PRINTF3(_L("File size mismatch 1(%d) 2(%d)"), sz1, sz2); + ret = EFalse; + } + else + { + TBuf8<1> char1; + TBuf8<1> char2; + TInt len1, len2; + do + { + file1.Read(char1); + file2.Read(char2); + len1 = char1.Length(); + len2 = char2.Length(); + if(char1.Compare(char2) != 0) + { + ret = EFalse; + break; + } + } + while(len1 && len2); + } + file1.Close(); + file2.Close(); + return ret; + } + + +/** +GetMessageLinesL() +Counts the number of lines in a message's HTML or body text + +@param aEntry +Email message identifier + +@param aUid +Request identifier KUidMsvEmailHtmlEntry or KUidMsvEmailTextEntry at present + +@param aFooterExists +Reference to a boolean variable only used when aUid == KUidMsvEmailTextEntry + +@param aFooterSize +Expected KB left on server inserted into footer string if present + +@return +Returns the number of lines in the requested message part +*/ +TInt CT_MsgComparePopEmailMsgs::GetMessageLinesL(TMsvEntry& aEntry, TUid aUid, TBool& aFooterExists, TInt &aFooterSize) + { + TInt lines = 0; + + TMsvId msgPartIndex = GetMessagePartIndexL(aEntry,aUid); + + if(msgPartIndex) + { + CMsvEntry* msvEntry = iSharedDataPOP.iSession->GetEntryL(msgPartIndex); + CleanupStack::PushL(msvEntry); + + msvEntry->SetEntryL(msgPartIndex); + if(aUid == KUidMsvEmailTextEntry) + { + lines = CountLinesOfBodyTextL(*msvEntry, aFooterExists, aFooterSize); + } + else if(aUid == KUidMsvEmailHtmlEntry) + { + lines = CountLinesOfHtmlL(*msvEntry); + } + CleanupStack::PopAndDestroy(msvEntry); + } + return lines; + } + + +/** +CountLinesOfBodyTextL() +Counts the lines of body text in the email aEntry + +@param aEntry +A reference to an object representing the email + +@param aFooterExists +Reference to a boolean variable - set to ETrue if the footer string is found in the body text + +@param aFooterSize +Expected KB left on server inserted into footer string if present + +@return +Number of lines in the body text +*/ +TInt CT_MsgComparePopEmailMsgs::CountLinesOfBodyTextL(CMsvEntry& aEntry, TBool& aFooterExists, TInt& aFooterSize) + { + TInt lines = 0; + aFooterExists=EFalse; + aFooterSize=0; + aEntry.SetEntryL(aEntry.EntryId()); + if(aEntry.HasStoreL()) + { + CMsvStore* msvStore1= aEntry.ReadStoreL(); + CleanupStack::PushL(msvStore1); + CParaFormatLayer* paraFormatLayer1 = CParaFormatLayer::NewL(); + CleanupStack::PushL(paraFormatLayer1); + CCharFormatLayer* charFormatLayer1 = CCharFormatLayer::NewL(); + CleanupStack::PushL(charFormatLayer1); + CRichText* bodyText1=CRichText::NewL(paraFormatLayer1, charFormatLayer1, CEditableText::EFlatStorage, 256); + CleanupStack::PushL(bodyText1); + + bodyText1->Reset(); + if (msvStore1->HasBodyTextL()) + { + msvStore1->RestoreBodyTextL(*bodyText1); + TUint16 val = CEditableText::ELineBreak; + TInt n = 0; + TInt pos = 0; + for(;;) + { + TPtrC bodyText = bodyText1->Read(pos); + n = bodyText.Find(&val, 1); + if(n < 0) + break; + lines++; + pos += n+1; + + //This Check is needed to delete the extra line introduced by communigate Pro Server + TInt fpos = CheckIfServerMessageExists(bodyText); + if (fpos != KErrNotFound) + { + lines--; + } + } + TPtrC pBt = bodyText1->Read(0); + aFooterExists = CheckIfFooterMessageExistsL(pBt , aFooterSize); + } + CleanupStack::PopAndDestroy(4, msvStore1); //bodyText1,charFormatLayer1,paraFormatLayer1,msvStore1. + } + return lines; + } + + +/** +CheckIfServerMessageExists() +Checks if any server message has been added to the Body text returns the +position of the server message in the buffer and the length of the server +message.This function can be enhanced to check for any other server message encountered. +If not found, returns KErrNotFound. + +@param aBodyText +The body text of the message + +@return +Position of the message, if not found returns KErrNotFound +*/ + TInt CT_MsgComparePopEmailMsgs::CheckIfServerMessageExists(TPtrC aBodyText) + { + _LIT(KServerMessage,"*This message was transferred with a trial version of CommuniGate(tm) Pro*"); + + TInt pos = aBodyText.FindC(KServerMessage); + + return pos; + } + + +/** +CountLinesOfHtmlL() +Counts the number of lines of HTML + +@param aEntry +A reference to an object representing the email + +@return +Number of lines of HTML +*/ +TInt CT_MsgComparePopEmailMsgs::CountLinesOfHtmlL(CMsvEntry& aEntry) + { + TInt lines = 0; + aEntry.SetEntryL(aEntry.EntryId()); + + + CMsvStore* store = aEntry.ReadStoreL(); + CleanupStack::PushL(store); + + MMsvAttachmentManager& attManager = store->AttachmentManagerL(); + + RFile htmlFile = attManager.GetAttachmentFileL(0); + CleanupClosePushL(htmlFile); + + _LIT8(KFindData, "\r\n"); + TInt htmlSize = 0; + User::LeaveIfError(htmlFile.Size(htmlSize)); + HBufC8* fBuf = HBufC8::NewLC(htmlSize); + TPtr8 p = fBuf->Des(); + htmlFile.Read(p); + TInt pos = 0; + for(;;) + { + pos = p.Find(KFindData); + if(pos < 0) + { + break; + } + p = p.Mid(pos+2); + lines++; + } + + CleanupStack::PopAndDestroy(fBuf); + CleanupStack::PopAndDestroy(); // htmlFile + CleanupStack::PopAndDestroy(store); + + return lines; + } + + + +/** +GetMessagePartIndexL() +Retrieves the part index id for the email identified by aEntry + +@param aEntry +A valid email identifier + +@param aUid +An identifier tfor the type of message part to be retrieved + +@return +TMsvId - message part identifier +*/ +TMsvId CT_MsgComparePopEmailMsgs::GetMessagePartIndexL(TMsvEntry& aEntry, TUid aUid) + { + static TBool msgPartFound = EFalse; + TMsvId msgPartId = 0; + CMsvEntry* baseEntry = iSharedDataPOP.iSession->GetEntryL(aEntry.Id()); + CleanupStack::PushL(baseEntry); + CMsvEntrySelection* selection = baseEntry->ChildrenL(); + CleanupStack::PushL(selection); + TInt count = selection->Count(); + TInt ind1; + CMsvEntry* entry = iSharedDataPOP.iSession->GetEntryL(KMsvRootIndexEntryId); + CleanupStack::PushL(entry); + for (ind1=0, msgPartFound=EFalse; ind1 < count; ind1++) + { + if(msgPartFound) + { + break; + } + TMsvId childId = selection->At(ind1); + entry->SetEntryL(childId); + + if (entry->Entry().iType == aUid) + { + msgPartId = childId; + break; + } + else if (entry->Entry().iType == KUidMsvFolderEntry) + { + TMsvEntry ent = entry->Entry(); + msgPartId = GetMessagePartIndexL(ent, aUid); + } + } + CleanupStack::PopAndDestroy(3, baseEntry); // entry,selection,baseEntry + return msgPartId; + } + + + + +/** +CheckIfFooterMessageExistsL() +Checks the email for the presence of the footer string + +@param aRecvBodyText +Reference to a descriptor holding the body text + +@param aFooterSize +The expected number of KB remaining on the server which has been inserted into the footer string + +@return +ETrue if footer string found otherwise EFalse +*/ +TBool CT_MsgComparePopEmailMsgs::CheckIfFooterMessageExistsL(TPtrC& aRecvBodyText , TInt& aFooterSize) + { + RResourceFile resFile; + CT_MsgUtils ::OpenResourceFileL(resFile, iFs, KImEngineResourceFile); // NB leaves if file not found + TCleanupItem close(CT_MsgUtils ::CloseResourceFile, &resFile); + CleanupStack::PushL(close); + + HBufC8* buf = NULL; + buf = resFile.AllocReadLC(PARTIAL_DOWNLOAD_FOOTER_MESSAGE); + TResourceReader reader; + reader.SetBuffer(buf); + + HBufC* resourceBuf = (reader.ReadTPtrC()).AllocL(); + CleanupStack::PushL(resourceBuf); + + TInt len = resourceBuf->Find(_L("%d")); + const TInt KBufLen = 256; + TBuf findBuf; + + if(len == KErrNotFound) + { + len = resourceBuf->Length(); + } + + if(len > KBufLen) + { + len = KBufLen; + } + + findBuf.Copy(resourceBuf->Ptr(), len); + len = aRecvBodyText.Find(findBuf); + + if(len>=0) + { + TPtrC rest=aRecvBodyText.Right(aRecvBodyText.Length()-len-findBuf.Length()); + TLex lex(rest.Left(rest.Locate(TChar(' ')))); + lex.Val(aFooterSize); + } + else + { + aFooterSize=0; + } + + CT_MsgUtils ::CloseResourceFile(&resFile); + CleanupStack::PopAndDestroy(3); // buf, resourceBuf, close + return (len != KErrNotFound); + } + +//const TInt KGranuality = 5; + +/** +CT_MsgComparePopEmailMsgs() +Constructor + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. SessionF +*/ +CT_MsgComparePopEmailMsgs::CT_MsgComparePopEmailMsgs(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) + { + iSentSelectionList = NULL; + iInboxSelectionList = NULL; + SetTestStepName(KComparePopEmailMsgs); + } + + +/** +NewL() +Allocates and creates a new CT_MsgComparePopEmailMsgs object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgComparePopEmailMsgs. +*/ +CT_MsgComparePopEmailMsgs* CT_MsgComparePopEmailMsgs::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgComparePopEmailMsgs* self = new(ELeave) CT_MsgComparePopEmailMsgs(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +ProgressL() + +*/ + +////////////////////////// +//// +//// I have no idea what this code is doing. +//// It looks very messy. +//// Someone is going to have to reowrk this code so that we can cancel and do progress +//// +////////////////////////// +void CT_MsgComparePopEmailMsgs::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress + } + else + { + // Display current progress + } + } + + +/** +CancelStep() + +*/ +void CT_MsgComparePopEmailMsgs::CancelStep() + { + // TODO + } + + +/** +~CT_MsgComparePopEmailMsgs() +Deletes all the data members. +*/ +CT_MsgComparePopEmailMsgs::~CT_MsgComparePopEmailMsgs() + { + // To delete each element in the array + for(TInt i=0; i < iExpResults.Count(); i++) + { + CExpPop3MailInfo* pExp = iExpResults[i]; + delete pExp; + pExp=NULL; + } + iExpResults.Reset(); + iExpResults.Close(); + + delete iSentSelectionList; + iSentSelectionList=NULL; + delete iInboxSelectionList; + iInboxSelectionList=NULL; + } + + +/** +doTestStepL() +Performs the comparison of POP messages + +@return +Returns the teststep result. +*/ +TVerdict CT_MsgComparePopEmailMsgs::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: Compare Pop Email Msgs")); + + if(LoadParametersL()) + { + User::LeaveIfError(iFs.Connect()); + CleanupClosePushL(iFs); + + // Normally do not push an object that is a data member of another object. + // But in this case we want to close early if we get a leave. + // Otherwise the iFs would be open till the thread had begun to die. + if(TestStepResult() == EPass) + { + CMsvEntry* recvMsvEntry = iSharedDataPOP.iSession->GetEntryL(KMsvRootIndexEntryId); + CleanupStack::PushL(recvMsvEntry); + CMsvEntry* sentMsvEntry = iSharedDataPOP.iSession->GetEntryL(KMsvRootIndexEntryId); + CleanupStack::PushL(sentMsvEntry); + + for(TInt i = 0;i < iInboxSelectionList->Count();i++) + { + recvMsvEntry->SetEntryL(iInboxSelectionList->At(i)); + TMsvEntry recvEntry = recvMsvEntry->Entry(); + for(TInt j = 0;j < iSentSelectionList->Count();j++) + { + sentMsvEntry->SetEntryL(iSentSelectionList->At(j)); + TMsvEntry sentEntry = sentMsvEntry->Entry(); + if(recvEntry.iDescription.Compare(sentEntry.iDescription) == 0) + { + CExpPop3MailInfo* pExpMailInfo = NULL; + for(int k = 0;k < iExpResults.Count();k++) + { + if(iExpResults[k]->GetDescription().Compare(recvEntry.iDescription) == 0) + { + pExpMailInfo = iExpResults[k]; + break; + } + } + if(! pExpMailInfo) + { + ERR_PRINTF2(_L("Test %d failed could not retrieve expected mail info"), j+1); + SetTestStepResult(EFail); + break; + } + + if(! DoCompareL(recvEntry, *pExpMailInfo, sentEntry)) + { + INFO_PRINTF2(_L("Test %d failed"), j + 1); + SetTestStepResult(EFail); + } + } + } + } + CleanupStack::PopAndDestroy(2, recvMsvEntry); // recvMsvEntry, sentMsvEntry + } + CleanupStack::PopAndDestroy(); + } + INFO_PRINTF1(_L("T_ComparePopEmailMsgs Completed")); + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_ComparePopSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_ComparePopSettings.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,310 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ComparePopSettings +// [Paramaters] +// PopAccountName : Name of the Pop account +// ConfigFileName : Config file from which the Pop account settings are read +// ComparePopSettings is intended to compare the Pop account settings. +// +// + + + +/** + @file cexppop3mailinfo.h +*/ + + +// User includes +#include "T_ComparePopSettings.h" +#include +#include +#include + + +// Epoc includes +#include +#include +#include +#include + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KPopConfigFileName,"PopConfigFileName"); +_LIT(KMatchExpected,"MatchExpected"); + + +/** +CT_MsgComparePopSettings() +Constructor - Initializes the data members. + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgComparePopSettings::CT_MsgComparePopSettings(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KComparePopSettings); + } + + +/** +~CT_MsgComparePopSettings +Destructor +*/ +CT_MsgComparePopSettings::~CT_MsgComparePopSettings() + { + } + + +/** +doTestStepL() +Reads the Pop account name and config file name from the ini file +Compares the settings of the Imap account. + +@return +Returns the test step result +*/ +TVerdict CT_MsgComparePopSettings::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : ComparePopSettings")); + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = KMsvNullIndexEntryId; + TRAPD(err,popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName)); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + TBool matchExpected = ETrue; + GetBoolFromConfig(ConfigSection(), KMatchExpected, matchExpected); + + TVerdict result = EPass; + TPtrC configFileName; + + if(popServiceId == KMsvNullIndexEntryId) + { + INFO_PRINTF1(_L("Invalid POP account name is specified")); + result = EFail; + } + else + { + if(!GetStringFromConfig(ConfigSection(), KPopConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + // Creating the first set of settings objects + CImPop3Settings* popSettings1 = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings1); + + CImIAPPreferences* popIapPrefs1 = CImIAPPreferences::NewLC(); + + CImSmtpSettings* smtpSettings1 = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings1); + + CImIAPPreferences* smtpIapPrefs1 = CImIAPPreferences::NewLC(); + + // Creating the second set of settings objects + CImPop3Settings* popSettings2= new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings2); + + CImIAPPreferences* popIapPrefs2 = CImIAPPreferences::NewLC(); + + CImSmtpSettings* smtpSettings2 = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings2); + + CImIAPPreferences* smtpIapPrefs2 = CImIAPPreferences::NewLC(); + + emailAccounts->PopulateDefaultPopSettingsL(*popSettings2, *popIapPrefs2); + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings2, *smtpIapPrefs2); + + TPopAccount popAccount; + emailAccounts-> GetPopAccountL(popServiceId, popAccount); + + TRAPD(error1, LoadAccountSettingsL(*emailAccounts,popAccount, + *popSettings1,*popIapPrefs1,*smtpSettings1,*smtpIapPrefs1)); + + if(error1 != KErrNone) + { + ERR_PRINTF2(_L("LoadPOPPSettingsL Failed with error code %d"), error1); + result = EFail; + SetTestStepResult(EFail); + } + else + { + if(configFileName.CompareF(_L("none")) != 0) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(configFileName, *popSettings2, *popIapPrefs2)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the Pop setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + else + { + TRAPD(error, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(configFileName, *smtpSettings2, *smtpIapPrefs2)); + if(error) + { + ERR_PRINTF2(_L("Failure while setting the SMTP setting parameters, failed with error %d"), error); + SetTestStepResult(EFail); + } + } + } + if(TestStepResult() == EPass) + { + result = CompareSettings(*popSettings1 , *popSettings2 , + *smtpSettings1,*smtpSettings2, + *popIapPrefs1,*popIapPrefs2, + *smtpIapPrefs1,*smtpIapPrefs2); + } + } + CleanupStack::PopAndDestroy(9,emailAccounts); + + } + } + + // if the parameters did not match and we expected them to then fail the test + if(result == EPass && matchExpected) + { + INFO_PRINTF1(_L("*********Passed As Expected*******")); + SetTestStepResult(EPass); + } + else if(result == EFail && !matchExpected) + { + INFO_PRINTF1(_L("*******Failed as Expected********")); + SetTestStepResult(EPass); // This is required as some checks where it will fail, at that pt teststep might have been set to fail + } + else + { + ERR_PRINTF1(_L("Pop settings Comparison Failed")); + SetTestStepResult(EFail); + } + INFO_PRINTF1(_L("ComparePopSettings completed")); + } + return TestStepResult(); + } + +/** +CompareSettings() +Compares the two sets of POP settings, IAPPrefernces, and SMTP settings. + +@param aPopSettings1 +An object of type CImPop3Settings + +@param aPopSettings2 +An object of type CImPop3Settings + +@param aPopIapPrefs1 +An object of type CImIAPPreferences + +@param aPopIapPrefs2 +An object of type CImIAPPreferences + +@param aSmtpIapPrefs1 +An object of type CImIAPPreferences + +@param aSmtpIapPrefs2 +An object of type CImIAPPreferences + +@param aSmtpSettings +An object of type CImSmtpSettings + +@param aSmtpIapSettings +An object of type CImIAPPreferences + +@return +Returns EPass if exactly the same for all values in the two sets of parameters. +Returns EFail if any value is different between the two sets of parameters. +*/ +TVerdict CT_MsgComparePopSettings::CompareSettings(CImPop3Settings& aPopSettings1, CImPop3Settings& aPopSettings2, + CImSmtpSettings& aSmtpSettings1,CImSmtpSettings& aSmtpSettings2, CImIAPPreferences& aPopIapPrefs1, + CImIAPPreferences& aPopIapPrefs2, CImIAPPreferences& aSmtpIapPrefs1, CImIAPPreferences& aSmtpIapPrefs2) + { + TVerdict result = EPass; + if (!(aPopSettings1 == aPopSettings2)) + { + // failed + ERR_PRINTF1(_L("Pop3 Settings objects do not match !")); + result = EFail; + } + else if (!(aSmtpSettings1 == aSmtpSettings2)) + { + // failed + ERR_PRINTF1(_L("SMTP Settings objects do not match !")); + result = EFail; + } + else if (!CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(aPopIapPrefs1, aPopIapPrefs2)) + { + // failed + ERR_PRINTF1(_L("Pop3 IAP Preference objects do not match !")); + result = EFail; + } + else if (!CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(aSmtpIapPrefs1, aSmtpIapPrefs2)) + { + // failed + ERR_PRINTF1(_L("SMTP IAP Preference objects do not match !")); + result = EFail; + } + + return result; + } + +/** +LoadAccountSettingsL() +This function loads the IMAP and SMTP settings object from the IMAP account given + +@param aEmailAccount +An object of type CEmailAccounts + +@param aAccount +An object of type TPopAccount + +@param aPopSettings +An object of type CImPop3Settings + +@param aPopIapSettings +An object of type CImIAPPreferences + +@param aSmtpSettings +An object of type CImSmtpSettings + +@param aSmtpIapSettings +An object of type CImIAPPreferences + +@return : void +*/ +void CT_MsgComparePopSettings::LoadAccountSettingsL(CEmailAccounts& aEmailAccount, const TPopAccount& aAccount, CImPop3Settings& aPopSettings, + CImIAPPreferences& aPopIapSettings,CImSmtpSettings& aSmtpSettings, CImIAPPreferences& aSmtpIapSettings) + { + aEmailAccount.LoadPopSettingsL(aAccount, aPopSettings); + aEmailAccount.LoadPopIapSettingsL(aAccount, aPopIapSettings); + + TSmtpAccount smtpAccount; + aEmailAccount.GetSmtpAccountL(aAccount.iSmtpService, smtpAccount); + aEmailAccount.LoadSmtpSettingsL(smtpAccount, aSmtpSettings); + aEmailAccount.LoadSmtpIapSettingsL(smtpAccount, aSmtpIapSettings); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_ConnectPop3Server.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_ConnectPop3Server.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,180 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ConnectPop3Server +// [Paramaters] +// PopAccountName : Name of the Pop account +// Connects to the Pop3 Server +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntrySelection::AppendL +// CPop3ClientMtm::InvokeAsyncFunctionL +// +// + + + +/** + @file +*/ + +// User Includes +#include "T_ConnectPop3Server.h" +#include + + +// Epoc includes +#include +#include +#include +#include + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); + +const TInt KMaxLenghtOfChar = 1; + +/** +CT_MsgConnectPop3Server() +Sets the teststep name to KConnectPop3Server + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgConnectPop3Server::CT_MsgConnectPop3Server(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iOperation(NULL) + { + SetTestStepName(KConnectPop3Server); + } + +/** +NewL() +Allocates and creates a new CT_MsgConnectPop3Server object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgComparePopEmailMsgs +*/ +CT_MsgConnectPop3Server* CT_MsgConnectPop3Server::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgConnectPop3Server* self = new(ELeave) CT_MsgConnectPop3Server(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgConnectPop3Server() +Destructor +*/ +CT_MsgConnectPop3Server::~CT_MsgConnectPop3Server() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgConnectPop3Server::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() + +@param +*/ +void CT_MsgConnectPop3Server::CancelStep() + { + iOperation->Cancel(); + } + + +/** +doTestStepL() +It establishes connection with the Pop server using a POP account. +The account is identified by the account name that is read from the INI file. + +@return +Returns the test step result +*/ +TVerdict CT_MsgConnectPop3Server::doTestStepL() + { + INFO_PRINTF1(_L(" Test Step : ConnectPop3Server")); + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account Name is not specified")); + SetTestStepResult(EFail); + } + + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + // Change the current context + iSharedDataPOP.iMtm->SwitchCurrentEntryL(popServiceId); + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); + + // Appends the popServiceId onto the end of the array + selection->AppendL(popServiceId); + + TBuf8 param; + + CT_MsgActive& active=Active(); + // Attempts to connect to the Pop3 Service + iOperation = iSharedDataPOP.iMtm->InvokeAsyncFunctionL(KPOP3MTMConnect,*selection,param, active.iStatus); + + active.Activate(); + CActiveScheduler::Start(); + + // Get the error code from TPop3Progress + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + SetTestStepError(progress.iErrorCode); + + delete iOperation; + iOperation=NULL; + + CleanupStack::PopAndDestroy(selection); //operation,selection + // User::LeaveIfError(active.Result()); + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CopyPopSelection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CopyPopSelection.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,250 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CopyPopSelection +// [Paramaters] +// PopAccountName : Name of the Pop account +// TargetFolderName : Name of the target folder to which the entries need to be copied +// Copies the entries to the target. +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntry::CopyL +// +// + + + +/** + @file +*/ + +// User includes +#include "T_CopyPopSelection.h" +#include +#include +#include +#include "T_MsgSharedDataPop.h" + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KTargetFolderName,"TargetFolderName"); +_LIT(KMove, "Move"); +_LIT(KCopyWithinService, "CopyWithinService"); + +/** +CT_MsgCopyPopSelection() +Sets the teststep name to KCopyPopSelection + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgCopyPopSelection::CT_MsgCopyPopSelection(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iOperation(NULL) + { + SetTestStepName(KCopyPopSelection); + } + +/** +NewL() +Allocates and creates a new CT_MsgCopyPopSelection object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgComparePopEmailMsgs +*/ +CT_MsgCopyPopSelection* CT_MsgCopyPopSelection::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgCopyPopSelection* self = new(ELeave) CT_MsgCopyPopSelection(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgCopyPopSelection() +Destructor +*/ +CT_MsgCopyPopSelection::~CT_MsgCopyPopSelection() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgCopyPopSelection::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() + +*/ +void CT_MsgCopyPopSelection::CancelStep() + { + iOperation->Cancel(); + } + + +/** +doTestStepL() +A connection with the POP server is established in the doTestStepPreambleL of the +base class. Reads the Pop account name from the ini file. It obtains a selection of +the entires under POP account given. It copies these entries into the specified target folder. + +@return +Returns the test step result +*/ +TVerdict CT_MsgCopyPopSelection::doTestStepL() + { + INFO_PRINTF1(_L("TestStep : CopyPopSelection")); + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + else + { + TMsvId targetFolderId = KErrNotFound; + TBool copyWithinService = EFalse; + GetBoolFromConfig(ConfigSection(), KCopyWithinService, copyWithinService); + + if (!copyWithinService) + { + TPtrC targetFolderName; + if(!GetStringFromConfig(ConfigSection(), KTargetFolderName, targetFolderName)) + { + ERR_PRINTF1(_L("Target Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the folder Id based on the local folder name read from the ini file + targetFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(targetFolderName); + if(targetFolderId == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid local folder name specified")); + SetTestStepResult(EFail); + } + } + } + + if (copyWithinService || targetFolderId != KErrNotFound) + { + // Get a selection of the children entries for the Pop account + CMsvEntrySelection* selection = CT_MsgUtils::CreateChildrenSelectionL(iSharedDataPOP.iSession, + popServiceId); + CleanupStack::PushL(selection); + + // Check if there are no entries under the remote folder + TInt count = selection->Count(); + if (count == 0) + { + User::Leave(KErrArgument); + } + // Fetch the Id of the first entry + TMsvId entryId = (*selection)[0]; + + // Creates a new CMsvEntry for the specified entry ID. + CMsvEntry* entry = CMsvEntry::NewL(*iSharedDataPOP.iSession,entryId,TMsvSelectionOrdering()); + CleanupStack::PushL(entry); + + // Sets the context to the parent of the specified entry. + entry->SetEntryL(entryId); + entry->SetEntryL(entry->Entry().Parent()); + + TBool isMove = EFalse; + if(GetBoolFromConfig(ConfigSection(), KMove, isMove)) + { + INFO_PRINTF1(_L("Is move")); + } + + CT_MsgActive& active=Active(); + + if (copyWithinService) + { + if (isMove) + { + iOperation = entry->MoveL(*selection,popServiceId, active.iStatus); + } + else + { + iOperation = entry->CopyL(*selection,popServiceId, active.iStatus); + } + } + else + { + if (isMove) + { + iOperation = entry->MoveL(*selection,targetFolderId, active.iStatus); + } + else + { + iOperation = entry->CopyL(*selection,targetFolderId, active.iStatus); + } + } + + active.Activate(); + CActiveScheduler::Start(); + + // Get the error code from TPop3Progress + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + SetTestStepError(progress.iErrorCode); + + delete iOperation; + iOperation=NULL; + CleanupStack::PopAndDestroy(2,selection); //operation,entry,selection + User::LeaveIfError(active.Result()); + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CreatePopAccount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CreatePopAccount.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,157 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CreatePopAccount +// [Paramaters] +// PopAccountName : Name of the pop account which needs to be created +// SettingsFileName : Config file from which the pop account settings are read +// Creates a POP account in the Central Repository with the specified name and configuration settings file. +// The settings file includes both POP settings,SMTP settings and IAP preference settings for both POP and SMTP. +// [APIs Used] +// CEmailAccounts::CreatePopAccountL +// CEmailAccounts::CreateSmtpAccountL +// +// + + + +/** + @file +*/ + + +// User include +#include "T_CreatePopAccount.h" +#include + + +// epoc includes +#include +#include +#include +#include + + +// Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KPopConfigFileName,"PopConfigFileName"); +_LIT(KEmailAdd, "EmailAdd"); + +/** +CT_MsgCreatePopAccount() +Sets the teststep name to KCreatePopAccount + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgCreatePopAccount::CT_MsgCreatePopAccount(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCreatePopAccount); + } + + +/** +~CT_MsgCreatePopAccount() +Destructor +*/ +CT_MsgCreatePopAccount::~CT_MsgCreatePopAccount() + { + } + + +/** +doTestStepL() +Reads the Pop account name and the settings file name from the ini file. +Creates an Pop account by reading the settings from the given settings file + +@return +Returns the test step result +*/ +TVerdict CT_MsgCreatePopAccount::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: Create Pop Account")); + // Read Pop Account Name from ini file + TPtrC popAccountName; + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account name not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the configuration file name + if(!GetStringFromConfig(ConfigSection(), KPopConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts *emailAccounts = CEmailAccounts::NewLC(); + + // Create objects requried for POP account + CImIAPPreferences *popIapPreferences = CImIAPPreferences::NewLC(); + + CImPop3Settings *popSettings = new (ELeave) CImPop3Settings; + CleanupStack::PushL(popSettings); + + // Create objects requried for SMTP account + CImIAPPreferences *smtpIapPreferences = CImIAPPreferences::NewLC(); + + CImSmtpSettings *smtpSettings = new (ELeave) CImSmtpSettings; + CleanupStack::PushL(smtpSettings); + + // Set the default POP and SMTP settings + emailAccounts->PopulateDefaultPopSettingsL(*popSettings, *popIapPreferences); + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings, *smtpIapPreferences); + + // If the setting file name is provided as input, then read the Pop and Smtp settings from the config file + if(configFileName.CompareC(_L("none")) != 0) + { + + TPtrC ptrEmailAdd = KNone(); + if(!GetStringFromConfig(ConfigSection(), KEmailAdd, ptrEmailAdd)) + { + INFO_PRINTF1(_L("Email Address not specified")); + } + + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(configFileName, *popSettings, *popIapPreferences, ptrEmailAdd)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the POP/SMTP setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + else + { + TRAPD(error, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(configFileName, *smtpSettings, *smtpIapPreferences, ptrEmailAdd)); + if(error) + { + ERR_PRINTF2(_L("Failure while setting the SMTP setting parameters, failed with error %d"), error); + SetTestStepResult(EFail); + } + } + } + if(TestStepResult() == EPass) + { + TPopAccount popAccount = emailAccounts->CreatePopAccountL(popAccountName, *popSettings,*popIapPreferences,EFalse); + TSmtpAccount smtpAccount = emailAccounts->CreateSmtpAccountL(popAccount, *smtpSettings, *smtpIapPreferences, EFalse); + emailAccounts->SetDefaultSmtpAccountL(smtpAccount); + } + CleanupStack::PopAndDestroy(5,emailAccounts); // smtpSettings, smtpIapPreferences, popSettings, popIapPreferences, emailAccounts + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_CreatePopAccountWithoutSmtp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_CreatePopAccountWithoutSmtp.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,116 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CreatePopAccountWithoutSmtp +// [Paramaters] +// PopAccountName :Name of the Pop account. +// PopConfigFileName :Config file from which the Pop account settings are read. +// Creates a POP account in the Central Repository with the specified name using the +// settings read from the config file. +// +// + +//User includes +#include "T_CreatePopAccountWithoutSmtp.h" +#include + +//Epoc inlcudes +#include +#include +#include + +//Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KPopConfigFileName,"PopConfigFileName"); + +/** + Function : CT_MsgCreatePopAccountWithoutSmtp + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgCreatePopAccountWithoutSmtp::CT_MsgCreatePopAccountWithoutSmtp(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KCreatePopAccountWithoutSmtp); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCreatePopAccountWithoutSmtp::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, iPopAccountName)) + { + ERR_PRINTF1(_L("Pop account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetStringFromConfig(ConfigSection(), KPopConfigFileName, iConfigFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + + return result; + } + +/** + Function : doTestStepL + Description : Reads the Pop account name and the settings file name from the .ini file + and then creates a Pop account. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCreatePopAccountWithoutSmtp::doTestStepL() + { + + INFO_PRINTF1(_L("Test Step : CreatePopAccountWithoutSmtp")); + if(ReadIni()) + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + // Creates objects requried for POP account + CImIAPPreferences *popIapPreferences = CImIAPPreferences::NewLC(); + CImPop3Settings *popSettings = new (ELeave) CImPop3Settings; + CleanupStack::PushL(popSettings); + + // Populates the default POP settings + emailAccounts->PopulateDefaultPopSettingsL(*popSettings, *popIapPreferences); + + //If the config file name is provided as input, then reads the POP settings from it + if(iConfigFileName.CompareF( _L("none") ) != 0) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(iConfigFileName, *popSettings, *popIapPreferences)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the POP settings, failed with error %d"), err); + SetTestStepError(err); + CleanupStack::PopAndDestroy(3,emailAccounts); // popSettings, popIapPreferences, emailAccounts + return TestStepResult(); + } + if(TestStepResult() == EPass) + { + // Creates the POP account for the name specified and for the settings objects + TPopAccount popAccount = emailAccounts->CreatePopAccountL(iPopAccountName, *popSettings,*popIapPreferences,EFalse); + } + } + CleanupStack::PopAndDestroy(3,emailAccounts); // popSettings, popIapPreferences, emailAccounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_DeleteAllPopChildren.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_DeleteAllPopChildren.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,188 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// DeleteAllPopChildren +// [Paramaters] +// PopAccountName : Name of the Pop Account +// [Action Description] +// Deletes all children entries for the remote Pop account +// [APIs Used] +// +// + + + +/** + @file +*/ + + +//User Includes +#include "T_DeleteAllPopChildren.h" +#include +#include +#include "T_MsgSharedDataPop.h" + + +//epoc includes +#include +#include +#include + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KBlockDelete, "BlockDelete"); + + +/** +CT_MsgDeleteAllPopChildren() +Sets the teststep name to KDeleteAllPopChildren + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgDeleteAllPopChildren::CT_MsgDeleteAllPopChildren(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iUtil(NULL) + { + SetTestStepName(KDeleteAllPopChildren); + } + + +/** +NewL() +Allocates and creates a new CT_MsgDeleteAllPopChildren object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@return +Returns pointer to an object of CT_MsgDeleteAllPopChildren +*/ +CT_MsgDeleteAllPopChildren* CT_MsgDeleteAllPopChildren::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgDeleteAllPopChildren* self = new(ELeave) CT_MsgDeleteAllPopChildren(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgDeleteAllPopChildren() +Destructor +*/ +CT_MsgDeleteAllPopChildren::~CT_MsgDeleteAllPopChildren() + { + if(iUtil!=NULL) + { + delete iUtil; + iUtil=NULL; + } + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgDeleteAllPopChildren::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress iUtil + } + else + { + // Display current progress iUtil + } + } + + +/** +CancelStep() + +@param +*/ +void CT_MsgDeleteAllPopChildren::CancelStep() + { + // TODO cancel iUtil + } + + +/** +doTestStepL() +Reads the Pop account name from the ini file. It obtains a selection of the +enries under the account and calls theT_UtilsDeleteAllChildren to delete them + +@return +Returns the test step result +*/ +TVerdict CT_MsgDeleteAllPopChildren::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : DeleteAllChildren ")); + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + else + { + if(iUtil==NULL) + { + iUtil = new (ELeave) CT_MsgUtilsDeleteAllChildren(iSharedDataPOP.iSession,popServiceId); + } + + CT_MsgActive& active=Active(); + // Deletes all the entries under the remote folder + + TBool blockDelete = EFalse; + GetBoolFromConfig(ConfigSection(), KBlockDelete, blockDelete); + if (blockDelete) + { + INFO_PRINTF1(_L("Using block delete")); + } + + iUtil->StartL(blockDelete, active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + delete iUtil; + iUtil=NULL; + + TInt err = active.Result(); + if (err != KErrNone) + { + SetTestStepResult(EFail); + SetTestStepError(err); + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_DeletePopAccount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_DeletePopAccount.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,136 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// DeletePopAccount +// [Paramaters] +// PopAccountName : Name of the Pop account to be Deleted +// For deleteing all the Pop accounts "all" can be used +// and it is case insensitive. +// [Test Step Description] +// Deletes the Pop account(s) in the Central Repository +// [APIs Used] +// CEmailAccounts::DeletePopAccountL +// +// + + + +/** + @file +*/ + + +// User include +#include "T_DeletePopAccount.h" + + +// epoc inlcudes +#include + +// Literals used +_LIT(KPopAccountName,"PopAccountName"); + + +/** +CT_MsgDeletePopAccount() +Sets the teststep name to KDeletePopAccount + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgDeletePopAccount::CT_MsgDeletePopAccount(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KDeletePopAccount); + } + +/** +~CT_MsgDeletePopAccount() +Destructor +*/ +CT_MsgDeletePopAccount::~CT_MsgDeletePopAccount() + { + } + + + +/** +doTestStepL() +Reads the POP account name from the ini file. If ALL string is mentioned in the .ini file +it deletes all the IMAP accounts, Else deletes the IMAP account whose name is +mentioned in the ini file + +@return +Returns the test step result +*/ +TVerdict CT_MsgDeletePopAccount::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: Delete Pop Account")); + TPtrC popAccountName; + // Read Pop Account Name from ini file + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Account name not specified")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts* account = CEmailAccounts::NewLC(); + + RArray arrayPop3Accounts; + CleanupClosePushL(arrayPop3Accounts); + account->GetPopAccountsL(arrayPop3Accounts); + TInt count=arrayPop3Accounts.Count(); + + TBuf<12> temp(popAccountName); + temp.UpperCase(); // Making case insensitive + if(temp.CompareC(_L("ALL")) == 0) + { + INFO_PRINTF2(_L("Deleting all accounts. Total = %d"), count); + for(TInt i=0; iDeletePopAccountL(id); + } + } + else + { + TBool deleteFlag = EFalse; + for(TInt i = 0; i < count; i++) + { + if(popAccountName.CompareC(arrayPop3Accounts[i].iPopAccountName) == 0) + { + account->DeletePopAccountL(arrayPop3Accounts[i]); + // Just ensure that if we try to delete it again we hopefuly get an error + // or can see that it has been deleted. + arrayPop3Accounts.Remove(i); + deleteFlag = ETrue; + break; + } + } + if(deleteFlag) + { + INFO_PRINTF2(_L("Pop acount \" %S \" deleted"), &popAccountName); + } + else + { + ERR_PRINTF2(_L("Pop acount \" %S \" not found"), &popAccountName); + SetTestStepResult(EFail); + User::Leave(KErrNotFound); + } + } + CleanupStack::PopAndDestroy(2, account); //arrayPop3Accounts,account + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_DisconnectPop3Server.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_DisconnectPop3Server.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,165 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// DisConnectPop3Server +// [Paramaters] +// PopAccountName : Name of the Pop account +// DisConnects to the Pop3 Server +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntrySelection::AppendL +// CPop3ClientMtm::InvokeAsyncFunctionL +// +// + + + +/** + @file +*/ + +// User Includes +#include "T_DisConnectPop3Server.h" +#include + + +// Epoc includes +#include + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +const TInt KMaxLenghtOfChar= 1; + +/** +CT_MsgDisConnectPop3Server() +Sets the teststep name to KDisConnectPop3Server + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgDisConnectPop3Server::CT_MsgDisConnectPop3Server(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iOperation(NULL) + { + SetTestStepName(KDisConnectPop3Server); + } + + +/** +NewL() +Allocates and creates a new CT_MsgDisConnectPop3Server object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgDisConnectPop3Server +*/ +CT_MsgDisConnectPop3Server* CT_MsgDisConnectPop3Server::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgDisConnectPop3Server* self = new(ELeave) CT_MsgDisConnectPop3Server(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgDisConnectPop3Server() +Destructor +*/ +CT_MsgDisConnectPop3Server::~CT_MsgDisConnectPop3Server() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgDisConnectPop3Server::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() + +@param +*/ +void CT_MsgDisConnectPop3Server::CancelStep() + { + iOperation->Cancel(); + } + +/** +doTestStepL() +Reads the Pop account name from the ini file. It establishes disconnection with the Pop server. + +@return +Returns the test step result +*/ +TVerdict CT_MsgDisConnectPop3Server::doTestStepL() + { + INFO_PRINTF1(_L(" Test Step : DisConnectPop3Server")); + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + // Change the current context + iSharedDataPOP.iMtm->SwitchCurrentEntryL(popServiceId); + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); + + // Appends the popServiceId onto the end of the array + selection->AppendL(popServiceId); + + TBuf8 param; + + // Attempts to DisConnect to the Pop3 Service + CT_MsgActive& active=Active(); + iOperation = iSharedDataPOP.iMtm->InvokeAsyncFunctionL(KPOP3MTMDisconnect, *selection, param, active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + delete iOperation; + iOperation=NULL; + CleanupStack::PopAndDestroy(selection); //operation,selection + User::LeaveIfError(active.Result()); + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_ModifyPopSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_ModifyPopSettings.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,204 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ModifyPopSettings +// [Paramaters] +// PopAccountName : Name of the Pop account +// ConfigFileName : Config file from which the Pop account settings are read +// [Test Step Description] +// ModifyPopSettings Test Action is intended to modify and save the existing settings to CenRep +// for the specified Pop account Id +// [APIs Used] +// CEmailAccounts::ModifyPopSettingsL +// CImPop3Settings::SetServerAddressL +// CImPop3Settings::SetUserAddressL +// CImPop3Settings::SetLoginNameL +// CImPop3Settings::SetPasswordL +// CImPop3Settings::SetPort +// CImPop3Settings::SetSecureSockets +// CImPop3Settings::SetVersion +// CImPop3Settings::SetFolderPathL +// CImPop3Settings::SetPathSeparator +// CImPop3Settings::SetMaxEmailSize +// CImPop3Settings::SetGetMailOptions +// CImPop3Settings::SetInboxSynchronisationLimit +// CImPop3Settings::SetMailboxSynchronisationLimit +// CImSmtpSettings::SetServerAddressL +// CImSmtpSettings::SetEmailAddressL +// CImSmtpSettings::SetBodyEncoding +// CImSmtpSettings::SetReceiptAddressL +// CImSmtpSettings::SetRequestReceipts +// CImSmtpSettings::SetSendMessageOption +// CImSmtpSettings::SetPort +// CImSmtpSettings::SetEmailAliasL +// CImSmtpSettings::SetBodyEncoding +// CImSmtpSettings::SetDefaultMsgCharSet +// CImSmtpSettings::SetUserAddress +// CImSmtpSettings::SetVersion +// CImIAPPreferences::Version +// CImIAPPreferences::AddIAPL +// +// + + + +/** + @file +*/ + + + +// User include +#include "T_ModifyPopSettings.h" +#include +#include + + + +// epoc inlcudes +#include +#include +#include +#include + + + +// Literals used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KPopConfigFileName,"PopConfigFileName"); + + +/** +CT_MsgModifyPopSettings() +Sets the teststep name to KModifyPopSettings + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgModifyPopSettings::CT_MsgModifyPopSettings(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KModifyPopSettings); + } + + +/** +~CT_MsgModifyPopSettings() +Destructor +*/ +CT_MsgModifyPopSettings::~CT_MsgModifyPopSettings() + { + } + + +/** +doTestStepL() +Reads the Pop account name, config file name from the ini file. +It then modifies the account settings with the settings read from the config file + +@return +Returns the test step result +*/ +TVerdict CT_MsgModifyPopSettings::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: ModifyPopSettings")); + // Read the Pop account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KPopConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + CImPop3Settings* popSettings = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings); + + CImIAPPreferences* popIapPrefs = CImIAPPreferences::NewLC(); + + CImSmtpSettings* smtpSettings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings); + + CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC(); + + TPopAccount popAccount; + emailAccounts->GetPopAccountL(popServiceId, popAccount); + + emailAccounts->PopulateDefaultPopSettingsL(*popSettings, *popIapPrefs); + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings, *smtpIapPrefs); + + _LIT(KEmailAdd, "EmailAdd"); + + TPtrC ptrEmailAdd; + if(!GetStringFromConfig(ConfigSection(), KEmailAdd, ptrEmailAdd)) + { + ERR_PRINTF1(_L("Email Address not specified")); + } + + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(configFileName, *popSettings, *popIapPrefs, ptrEmailAdd)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the Pop setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + else + { + TRAPD(error, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(configFileName, *smtpSettings, *smtpIapPrefs, ptrEmailAdd)); + if(error) + { + ERR_PRINTF2(_L("Failure while setting the SMTP setting parameters, failed with error %d"), error); + SetTestStepResult(EFail); + } + else + { + // Save the new settings + emailAccounts->SavePopSettingsL(popAccount, *popSettings); + emailAccounts->SavePopIapSettingsL(popAccount, *popIapPrefs); + + TSmtpAccount smtpAccount; + emailAccounts->GetSmtpAccountL(popAccount.iSmtpService, smtpAccount); + + emailAccounts->SaveSmtpSettingsL(smtpAccount, *smtpSettings); + emailAccounts->SaveSmtpIapSettingsL(smtpAccount, *smtpIapPrefs); + } + } + CleanupStack::PopAndDestroy(5, emailAccounts); //smtpIapPrefs,smtpSettings,popIapPrefs,popSettings,emailAccounts + } + } + } + return TestStepResult(); + } + + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_ModifyPopSettings2.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_ModifyPopSettings2.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,130 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ModifyPopSettings2 +// [Paramaters] +// PopAccountName :Name of the Pop account +// PopConfigFileName :Config file from which the Pop account settings are read +// ModifyPopSettings2 Test Step is intended to modify existing settings and save to CenRep +// for the specified POP account Id +// +// + +/* user includes */ +#include "T_ModifyPopSettings2.h" +#include +#include + +/* epoc inlcudes */ +#include +#include +#include + +/* Literals used */ +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KPopConfigFileName,"PopConfigFileName"); + +/** + Function : CT_MsgModifyPopSettings2 + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgModifyPopSettings2::CT_MsgModifyPopSettings2(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KModifyPopSettings2); + } + +/** + Function : ~CT_MsgModifyPopSettings2 + Description : Destructor + @return : N/A +*/ +CT_MsgModifyPopSettings2::~CT_MsgModifyPopSettings2() + { + } + +/** + Function : doTestStepL + Description : Reads the Pop account name and config file name from the .ini file + and it then modifies the account with the settings read from the config file. + @return : TVerdict - Test step result + @leave : KMsvNullIndexEntryId Invalid POP account name specified +*/ +TVerdict CT_MsgModifyPopSettings2::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: ModifyPopSettings2")); + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("POP account name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the POP Config file name from the ini file + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KPopConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the POP service Id for the given POP account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("POP service Id is %d"),popServiceId); + + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + // Creates the settings object + else + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + CImPop3Settings* popSettings = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings); + + CImIAPPreferences* popIapPrefs = CImIAPPreferences::NewLC(); + + // Loads the settings for the account with the current settings + TPopAccount popAccount; + emailAccounts->GetPopAccountL(popServiceId, popAccount); + emailAccounts->LoadPopSettingsL(popAccount, *popSettings); + emailAccounts->LoadPopIapSettingsL(popAccount, *popIapPrefs); + + // Reads the settings from the config file + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(configFileName, *popSettings, *popIapPrefs)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the POP setting parameters, failed with error %d"), err); + SetTestStepError(err); + } + else + { + // Saves the new settings + emailAccounts->SavePopSettingsL(popAccount, *popSettings); + emailAccounts->SavePopIapSettingsL(popAccount, *popIapPrefs); + } + CleanupStack::PopAndDestroy(3, emailAccounts);// popIapPrefs,popSettings,emailAccounts + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_MsgAsyncStepPOP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_MsgAsyncStepPOP.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,41 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [Test Step] : +// AsyncStepPOP +// References POP shared data for use by derived test steps. +// +// + + + +/** + @file +*/ + +// User includes +#include "T_MsgAsyncStepPOP.h" + + +/** +CT_MsgAsyncStepPOP() +Intialises the shared data + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgAsyncStepPOP::CT_MsgAsyncStepPOP(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStep() +, iSharedDataPOP(aSharedDataPOP) + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_MsgSharedDataPop.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_MsgSharedDataPop.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,88 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + +// user include +#include "T_MsgSharedDataPop.h" + + +// epoc includes +#include + + +/** +NewL() +Allocates and creates a new CT_MsgSharedDataPop object + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgComparePopEmailMsgs +*/ +CT_MsgSharedDataPop* CT_MsgSharedDataPop::NewL() + { + CT_MsgSharedDataPop* self = new(ELeave) CT_MsgSharedDataPop(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** + ConstructL() + Second phage constructor +*/ +void CT_MsgSharedDataPop::ConstructL() +{ + CT_MsgSharedDataBase::ConstructL(); + iPeriodic = CPeriodic::New(EPriorityHigh); + iMaxRamValue = 0; + iMinRamValue = 0; + iStartRamValue = 0; + iEndRamValue = 0; + iMark = ETrue; +} + +/** +NewMtmL() + +@return +Returns a pointer to Client-side MTM object +*/ +CBaseMtm* CT_MsgSharedDataPop::NewMtmL() + { + return iRegistry->NewMtmL(KUidMsgTypePOP3); + } + +/** +CT_MsgSharedDataPop() +Construstor +*/ +CT_MsgSharedDataPop::CT_MsgSharedDataPop() + { + } + +/** + ~CT_MsgSharedDataPop() + Destructor +*/ +CT_MsgSharedDataPop::~CT_MsgSharedDataPop() + { + delete iPeriodic; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_MsgSyncStepPOP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_MsgSyncStepPOP.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,50 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [Test Step] : +// MsgSyncStepPOP +// References POP shared data for use by derived test steps. +// +// + + + +/** + @file +*/ + +// User includes +#include "T_MsgSyncStepPop.h" + + +/** +CT_MsgSyncStepPOP() +Constructor + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgSyncStepPOP::CT_MsgSyncStepPOP(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgStep() +, iSharedDataPOP(aSharedDataPOP) + { + } + + +/** +~CT_MsgSyncStepPOP() +Destructor +*/ +CT_MsgSyncStepPOP::~CT_MsgSyncStepPOP() + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_PopInvokeAsyncFunction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_PopInvokeAsyncFunction.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,223 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// PopInvokeAsyncFunction +// [Parameters] +// PopAccountName : Name of the pop account +// EmailSize : The maximum emailsize +// PopLimit : The population limit +// PopCommand : The POP command to be executed +// Reads the Pop account name,maximun email size,population limit and the pop command +// name to be executed.Based on the command it calls a utility to establish connection +// the POP server, executes the POP command and then based on the command again +// disconnects with the POP server. +// [APIs Used] +// CMsvEntry:: GetEntryL +// CBaseMtm :: SwitchCurrentEntryL +// CMsvEntry:: ChildrenL +// CBaseMtm :: InvokeAsyncFunctionL +// +// + + + +/** + @file +*/ + + + +// User Includes +#include "T_PopInvokeAsyncFunction.h" +#include +#include +#include "T_PopServer.h" +#include "T_MsgSharedDataPop.h" + +// Epoc includes +#include + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KEmailSize,"EmailSize"); +_LIT(KPopLimit,"PopLimit"); +_LIT(KPopCommand,"PopCommand"); + + +typedef TPckgBuf TPop3MailInfoBuf; + + +/** +CT_MsgModifyPopSettings() +Sets the teststep name to KPopInvokeAsyncFunction + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgPopInvokeAsyncFunction::CT_MsgPopInvokeAsyncFunction(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iOperation(NULL) + { + SetTestStepName(KPopInvokeAsyncFunction); + } + + +/** +NewL() +Allocates and creates a new CT_MsgPopInvokeAsyncFunction object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgPopInvokeAsyncFunction +*/ +CT_MsgPopInvokeAsyncFunction* CT_MsgPopInvokeAsyncFunction::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgPopInvokeAsyncFunction* self = new(ELeave) CT_MsgPopInvokeAsyncFunction(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgPopInvokeAsyncFunction() +Destructor +*/ +CT_MsgPopInvokeAsyncFunction::~CT_MsgPopInvokeAsyncFunction() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgPopInvokeAsyncFunction::ProgressL(TBool bFinal) + { + // TODO + if ( bFinal ) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() + +@param +*/ +void CT_MsgPopInvokeAsyncFunction::CancelStep() + { + iOperation->Cancel(); + } + + +/** +doTestStepL() +Reads the POP account name,population limit,maximum email size from the ini file +Based on the command decides whether a connection is required. +It then calls the InvokeAsyncFunctionL with the given command. +Based on the command again calls the utility to disconnect fromt the POP server + +@return +Returns the test step result +*/ +TVerdict CT_MsgPopInvokeAsyncFunction::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : Invoke Async Function")); + + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Account name not specified")); + SetTestStepResult(EFail); + } + else + { + + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + + // Read the maximum email size from the ini file + TInt maxEmailSize; + GetIntFromConfig(ConfigSection(), KEmailSize, maxEmailSize); + + // Read the population limit from the ini file + TInt popLimit; + GetIntFromConfig(ConfigSection(), KPopLimit, popLimit); + + // Read the pop command to be executed from the ini file + TPtrC popCmdName; + if(!GetStringFromConfig(ConfigSection(),KPopCommand,popCmdName)) + { + ERR_PRINTF1(_L("Pop command not specified")); + SetTestStepResult(EFail); + } + else + { + + // Changes the entry on which later actions are performed to the entry of the Pop Service Id. + iSharedDataPOP.iMtm->SwitchCurrentEntryL(popServiceId); //base Class Member iMtm + TPop3Cmds popCommand = CT_MsgUtilsEnumConverter::ConvertDesToTPop3Cmds(popCmdName); + // Accesses the entry for the specified Pop Service Id. + CMsvEntry* entry = iSharedDataPOP.iSession->GetEntryL(popServiceId); //base Class Member iSession + entry->SetEntryL(popServiceId); + CleanupStack::PushL(entry); + + // Create a selection of the children entries + CMsvEntrySelection* selection = entry->ChildrenL(); + CleanupStack::PushL(selection); + + + //setting the max email size and populationlimit to the values read from the ini file + iMailInfo.SetMaxEmailSize(static_cast(maxEmailSize)); + iMailInfo.SetPopulationLimit(static_cast(popLimit)); + + TPop3MailInfoBuf pack(iMailInfo); + selection->InsertL(0, popServiceId); + + CT_MsgActive& active=Active(); + iOperation = iSharedDataPOP.iMtm->InvokeAsyncFunctionL( popCommand, + *selection, pack, active.iStatus ); //base Class Member iMtm, waiter + active.Activate(); + CActiveScheduler::Start(); + + // Get the error code from TPop3Progress + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + SetTestStepError(progress.iErrorCode); + + delete iOperation; + iOperation=NULL; + CleanupStack::PopAndDestroy(2,entry); // operation,selection,entry + User::LeaveIfError(active.Result()); + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_PopServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_PopServer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,255 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +// User includes +#include "T_MsgServer.h" +#include "T_PopServer.h" +#include "T_MsgSharedDataPop.h" + +// Header files of Test Steps POP +#include "T_CreatePopAccount.h" +#include "T_DeletePopAccount.h" +#include "T_VerifyPopAccountsCount.h" +#include "T_ModifyPopSettings.h" +#include "T_ComparePopSettings.h" +#include "T_VerfiyPopSettings.h" +#include "T_ConnectPop3Server.h" +#include "T_DisConnectPop3Server.h" +#include "T_ComparePopEmailMsgs.h" +#include "T_CopyPopSelection.h" +#include "T_PopInvokeAsyncFunction.h" +#include "T_DeleteAllPopChildren.h" +#include "T_CheckChildrenCountPop.h" +#include "T_StartRamUsageTimer.h" +#include "T_StopRamUsageTimer.h" +#include "T_CheckPop3AccessPoint.h" +#include "T_CreatePopAccountWithoutSmtp.h" +#include "T_ModifyPopSettings2.h" +#include "T_CheckPopSNAPSetting.h" +#include "T_RemovePopSNAPSetting.h" +#include "T_CheckPopBMSetting.h" + +/** +MainL() +This is the main function which installs the active scheduler and +creates an object of the Email server +*/ +LOCAL_C void MainL() +/** +Secure variant +Much simpler, uses the new Rendezvous() call to sync with the client +*/ + { + RProcess().DataCaging(RProcess::EDataCagingOn); + RProcess().SecureApi(RProcess::ESecureApiOn); + + CActiveScheduler* sched=NULL; + sched=new(ELeave) CActiveScheduler; + CActiveScheduler::Install(sched); + CT_MsgPopServer* server = NULL; + + // Create the CTestServer derived Email server + TRAPD(err, server = CT_MsgPopServer::NewL()); + if ( err == KErrNone ) + { + // Sync with the client and enter the active scheduler + RProcess::Rendezvous(KErrNone); + sched->Start(); + } + delete server; + server=NULL; + delete sched; + sched=NULL; + } + + +/** +E32Main() +It is the entry point for POP testserver + +@return +Returns KErrNone on suceed otherwise the error code +*/ +GLDEF_C TInt E32Main() +/** +@return +Standard Epoc error code on process exit +Secure variant only +Process entry point. Called by client using RProcess API +*/ + { + __UHEAP_MARK; + + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + TRAP_IGNORE(MainL()); + delete cleanup; + cleanup=NULL; + __UHEAP_MARKEND; + + return KErrNone; + } + + +/** +NewL() +Constructs a CT_MsgPopServer object. +Uses two phase construction and leaves nothing on the CleanupStack. + +@leave KErrNoMemory +@return +Created object of type CT_MsgPopServer +*/ +CT_MsgPopServer* CT_MsgPopServer::NewL() + { + CT_MsgPopServer* server=new(ELeave) CT_MsgPopServer(); + CleanupStack::PushL(server); +// server->StartL(KPopServer); + server->ConstructL(KPopServer); + CleanupStack::Pop(server); + return server; + } + + +/** +CT_MsgPopServer() +Intializes iSharedDataPOP with NULL +*/ +CT_MsgPopServer::CT_MsgPopServer() +: iSharedDataPOP(NULL) + { + } + +/** +NewSharedDataL() +Constructs a CT_MsgSharedDataPop object dynamically and assigns it's address to iSharedDataPOP + +@return +An object of CT_MsgSharedDataPop +*/ +CT_MsgSharedDataBase* CT_MsgPopServer::NewSharedDataL() + { + return iSharedDataPOP = CT_MsgSharedDataPop::NewL(); + } + + +/** +CreateTestStepL() +Creates the test steps based on the name read from the script file + +@param aStepName +The name of the test step to be created + +@return +The CTestStep object created +*/ +CTestStep* CT_MsgPopServer::CreateTestStepL(const TDesC& aStepName) + { + CTestStep* testStep = NULL; + + if(aStepName == KVerifyPopSettings) + { + testStep = new(ELeave) CT_MsgVerifyPopSettings(*iSharedDataPOP); + } + else if(aStepName == KDeleteAllPopChildren) + { + testStep = CT_MsgDeleteAllPopChildren::NewL(*iSharedDataPOP); + } + else if(aStepName == KCopyPopSelection) + { + testStep = CT_MsgCopyPopSelection::NewL(*iSharedDataPOP); + } + else if(aStepName == KCreatePopAccount) + { + testStep = new(ELeave) CT_MsgCreatePopAccount(*iSharedDataPOP); + } + else if(aStepName == KModifyPopSettings) + { + testStep = new(ELeave) CT_MsgModifyPopSettings(*iSharedDataPOP); + } + else if(aStepName == KComparePopSettings) + { + testStep = new(ELeave) CT_MsgComparePopSettings(*iSharedDataPOP); + } + else if(aStepName == KDeletePopAccount) + { + testStep = new(ELeave) CT_MsgDeletePopAccount(*iSharedDataPOP); + } + else if(aStepName == KVerifyPopAccountsCount) + { + testStep = new(ELeave) CT_MsgVerifyPopAccountsCount(*iSharedDataPOP); + } + else if(aStepName == KPopInvokeAsyncFunction) + { + testStep = CT_MsgPopInvokeAsyncFunction::NewL(*iSharedDataPOP); + } + else if(aStepName == KCheckChildrenCountPop) + { + testStep = new(ELeave) CT_MsgCheckChildrenCountPop(*iSharedDataPOP); + } + else if(aStepName == KComparePopEmailMsgs) + { + testStep = CT_MsgComparePopEmailMsgs::NewL(*iSharedDataPOP); + } + else if(aStepName == KConnectPop3Server) + { + testStep = CT_MsgConnectPop3Server::NewL(*iSharedDataPOP); + } + else if(aStepName == KDisConnectPop3Server) + { + testStep = CT_MsgDisConnectPop3Server::NewL(*iSharedDataPOP); + } + else if(aStepName == KStartRamUsageTimer) + { + testStep = new(ELeave) CT_StartRamUsageTimer(*iSharedDataPOP); + } + else if(aStepName == KStopRamUsageTimer) + { + testStep = new(ELeave) CT_StopRamUsageTimer(*iSharedDataPOP); + } + else if(aStepName == KCheckPop3AccessPoint) + { + testStep = new(ELeave) CT_MsgCheckPop3AccessPoint(*iSharedDataPOP); + } + else if(aStepName == KCreatePopAccountWithoutSmtp) + { + testStep = new(ELeave) CT_MsgCreatePopAccountWithoutSmtp(*iSharedDataPOP); + } + else if(aStepName == KModifyPopSettings2) + { + testStep = new(ELeave) CT_MsgModifyPopSettings2(*iSharedDataPOP); + } + else if(aStepName == KCheckPopSNAPSetting) + { + testStep = new(ELeave) CT_MsgCheckPopSNAPSetting(*iSharedDataPOP); + } + else if(aStepName == KRemovePopSNAPSetting) + { + testStep = new(ELeave) CT_MsgRemovePopSNAPSetting(*iSharedDataPOP); + } + else if(aStepName == KCheckPopBMSetting) + { + testStep = new(ELeave) CT_MsgCheckPopBMSetting(*iSharedDataPOP); + } + else + { + testStep = CT_MsgServer::CreateTestStepL(aStepName); + } + + return testStep; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_RemovePopSNAPSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_RemovePopSNAPSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,93 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// RemovePopSNAPSetting +// [Paramaters] +// PopAccountName :Name of the Pop account. +// Removes the provisioned SNAP information for the POP account. +// +// + +//User includes +#include "T_RemovePopSNAPSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literal used +_LIT(KPopAccountName,"PopAccountName"); + +/** + Function : CT_MsgRemovePopSNAPSetting + Description : Constructor + @param : aSharedDataPOP Reference to CT_MsgSharedDataPop + @return : N/A +*/ +CT_MsgRemovePopSNAPSetting::CT_MsgRemovePopSNAPSetting(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KRemovePopSNAPSetting); + } + + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgRemovePopSNAPSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, iPopAccountName)) + { + ERR_PRINTF1(_L("Pop account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Removes the provisioned SNAP information from the POP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgRemovePopSNAPSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : RemovePopSNAPSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImIAPPreferences* popIapPrefs = CImIAPPreferences::NewLC(); + + TPopAccount popAccountId; + CT_MsgUtilsCentralRepository::GetPopAccountL((TDes&)iPopAccountName, popAccountId); + + accounts->LoadPopIapSettingsL(popAccountId, *popIapPrefs); + + popIapPrefs->RemoveSNAP(); + + accounts->SavePopIapSettingsL(popAccountId, *popIapPrefs); + + CleanupStack::PopAndDestroy(2,accounts); // popIapPrefs, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_SharedDataPop.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_SharedDataPop.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,69 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This file contains the shared data class for the POP server +// +// + + + +/** + @file +*/ + +// user include +#include "t_shareddatapop.h" + + +// epoc includes +#include +#include + + +/** +NewL() +Allocates and creates a new CT_MsgSharedDataPop object + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgSharedDataPop +*/ +CT_MsgSharedDataPop* CT_MsgSharedDataPop::NewL() + { + CT_MsgSharedDataPop* sharedDataPop=new(ELeave) CT_MsgSharedDataPop(); + CleanupStack::PushL(sharedDataPop); + sharedDataPop->ConstructL(); + CleanupStack::Pop(sharedDataPop); + return sharedDataPop; + } + + +/** +NewMtmL() + +@return +Returns a pointer to Client-side MTM object +*/ +CBaseMtm* CT_MsgSharedDataPop::NewMtmL() + { + return iRegistry->NewMtmL(KUidMsgTypePOP3); + } + + +/** +CT_MsgSharedDataPop() +Construstor +*/ +CT_MsgSharedDataImap::CT_MsgSharedDataImap() + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_StartRamUsageTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_StartRamUsageTimer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,148 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// StartRamUsageTimer +// [Paramaters] +// IntervalTimeInMicroSecs : The interval between events generated +// after the initial delay, in microseconds +// Starts periodical measurement of RAM memory used and updates the information kept +// in POP testserver. +// [APIs Used] +// +// + + + +// User includes +#include "T_StartRamUsageTimer.h" +#include "T_MsgSharedDataPop.h" + +// Epoc includes +#include +#include + +// Literals used +_LIT(KIntervalTimeInMicroSecs, "IntervalTimeInMicroSecs"); + +/** + Function : CT_StartRamUsageTimer + Description : Constructor + @return : none +*/ +CT_StartRamUsageTimer::CT_StartRamUsageTimer(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgAsyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KStartRamUsageTimer); + } + +/** + Function : ~CT_StartRamUsageTimer + Description : Destructor + @return : N/A +*/ +CT_StartRamUsageTimer::~CT_StartRamUsageTimer() + {} + + +/** + Function : doTestStepL + Description : Generate a periodic Timer event and handle the RAM usage callback function + @return : TVerdict Test result +*/ +TVerdict CT_StartRamUsageTimer::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :StartRamUsageTimer")); + TInt intervalTime = 0; + if(!GetIntFromConfig(ConfigSection(),KIntervalTimeInMicroSecs,intervalTime)) + { + ERR_PRINTF1(_L("Interval time is not specified")); + SetTestStepResult(EFail); + } + else + { + iSharedDataPOP.iPeriodic->Start(intervalTime, intervalTime, TCallBack(RamUsage,this)); + } + return TestStepResult(); + } + +/** + Function : RamUsage + Description : Call non-static method DoRamUsage + @return : TInt +*/ +TInt CT_StartRamUsageTimer::RamUsage(TAny* aObject) + { + // Cast, and call non-static function + ((CT_StartRamUsageTimer *)aObject)->DoRamUsage(); + return 1; + } + +/** + Function : DoRamUsage + Description : Calculate the RAM usage value and percentage at a particular instance + @return : void +*/ +void CT_StartRamUsageTimer::DoRamUsage() + { + + TInt fullRamValue; + TInt ramFreeValue; + + HAL data; + HALData haldata; + + data.Get(haldata.EMemoryRAM, fullRamValue); + data.Get(haldata.EMemoryRAMFree, ramFreeValue); + + TInt ramUsage = ((fullRamValue - ramFreeValue)/(1024)); + + if ( iSharedDataPOP.iMark != EFalse ) + { + iSharedDataPOP.iStartRamValue = ramUsage; + iSharedDataPOP.iMinRamValue = ramUsage; + iSharedDataPOP.iMaxRamValue = ramUsage; + iSharedDataPOP.iMark = EFalse; + } + + if ( iSharedDataPOP.iMinRamValue > ramUsage ) + { + iSharedDataPOP.iMinRamValue = ramUsage; + } + + if ( iSharedDataPOP.iMaxRamValue < ramUsage ) + { + iSharedDataPOP.iMaxRamValue = ramUsage; + } + + iSharedDataPOP.iEndRamValue = ramUsage; + } + + + +/** + Function : ProgressL + Description : Displays the progress information of the asynchronous operation + @return : void +*/ +void CT_StartRamUsageTimer::ProgressL(TBool /*aFinal*/) + {} + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : void +*/ +void CT_StartRamUsageTimer::CancelStep() + {} diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_StopRamUsageTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_StopRamUsageTimer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,127 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// StopRamUsageTimer +// [Paramaters] +// EventStartCode : Start event code which maps to the RAM usage value +// when tacking of RAM usage got started. +// EventStopCode : Stop event code which maps to the RAM usage value +// when tacking of RAM usage got stopped. +// Stops periodical measurement of RAM memory used and logs the RAM usage information +// [APIs Used] +// +// + + + +// User includes +#include "T_StopRamUsageTimer.h" +#include +#include + + +// Literals used +_LIT(KEventStartCode, "EventStartCode"); +_LIT(KEventStopCode, "EventStopCode"); +/** + Function : CT_StopRamUsageTimer + Description : Constructor + @return : none +*/ +CT_StopRamUsageTimer::CT_StopRamUsageTimer(CT_MsgSharedDataPop& aSharedDataPOP) +:CT_MsgAsyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KStopRamUsageTimer); + } + +/** + Function : ~CT_StopRamUsageTimer + Description : Destructor + @return : N/A +*/ +CT_StopRamUsageTimer::~CT_StopRamUsageTimer() + {} + + +/** + Function : doTestStepL + Description : Stop the periodic Timer + @return : TVerdict Test result +*/ +TVerdict CT_StopRamUsageTimer::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :StopRamUsageTimer")); + TPtrC startCodeFromIni; + if(!GetStringFromConfig(ConfigSection(), KEventStartCode, startCodeFromIni)) + { + ERR_PRINTF1(_L("Event Start code is not specified")); + SetTestStepResult(EFail); + } + else + { + TInstrumentationPoint starteventcode = CT_MsgUtilsEnumConverter::ConvertDesToEventCode(startCodeFromIni); + + TPtrC stopCodeFromIni; + if(!GetStringFromConfig(ConfigSection(), KEventStopCode, stopCodeFromIni)) + { + ERR_PRINTF1(_L("Event Stop code is not specified")); + SetTestStepResult(EFail); + } + else + { + TInstrumentationPoint stopeventcode = CT_MsgUtilsEnumConverter::ConvertDesToEventCode(stopCodeFromIni); + iSharedDataPOP.iPeriodic->Cancel(); + + INFO_PRINTF2(_L("Minimum Ram usage value is %d KB "), iSharedDataPOP.iMinRamValue); + INFO_PRINTF2(_L("Maximum Ram usage value is %d KB "), iSharedDataPOP.iMaxRamValue); + INFO_PRINTF2(_L("Start Ram usage value is %d KB "), iSharedDataPOP.iStartRamValue); + INFO_PRINTF2(_L("End Ram usage value is %d KB "), iSharedDataPOP.iEndRamValue); + + TInt maxRamUsage = ( iSharedDataPOP.iMaxRamValue - iSharedDataPOP.iStartRamValue ); + TInt extremeRamUsage = ( iSharedDataPOP.iMaxRamValue - iSharedDataPOP.iMinRamValue ); + TInt actualRamUsage = ( iSharedDataPOP.iEndRamValue - iSharedDataPOP.iStartRamValue ); + + INFO_PRINTF2(_L("Maximum(Mx-St) Ram usage diff value is %d KB "), maxRamUsage ); + INFO_PRINTF2(_L("Extreme(Mx-Mn) Ram usage diff value is %d KB "), extremeRamUsage ); + INFO_PRINTF2(_L("Actual(En-St) Ram usage diff value is %d KB "), actualRamUsage ); + if( starteventcode || stopeventcode ) + { + INFO_PRINTF5(_L("EVENT_LOG_INFORMATION,%d,%d,%d,%d"),0,0,starteventcode,iSharedDataPOP.iStartRamValue); + INFO_PRINTF5(_L("EVENT_LOG_INFORMATION,%d,%d,%d,%d"),0,0,stopeventcode,iSharedDataPOP.iMaxRamValue); + } + else + { + ERR_PRINTF1(_L("**ERROR**: Bad Event code. Check t_testinstrumentation.h for valid event code")); + } + } + } + return TestStepResult(); + } + +/** + Function : ProgressL + Description : Displays the progress information of the asynchronous operation + @return : void +*/ +void CT_StopRamUsageTimer::ProgressL(TBool /*aFinal*/) + {} + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : void +*/ +void CT_StopRamUsageTimer::CancelStep() + {} diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_VerifyPopAccountsCount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_VerifyPopAccountsCount.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,106 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// VerifyPopAccountsCount +// [Paramaters] +// ExpectedCount : Expected Number of the POP Accouts present +// [Test Step Description] +// If number of POP accounts present equals with the expected number of accounts then test step result is pass. +// [APIs Used] +// CEmailAccounts::GetPopAccountsL +// +// + + + +/** + @file +*/ + + +// User include +#include "T_VerifyPopAccountsCount.h" + + +// epoc inlcudes +#include + + +// Literals used +_LIT(KExpectedCount,"ExpectedCount"); + + +/** +CT_MsgVerifyPopAccountsCount() +Sets the teststep name to KCheckChildrenCountPop + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Sessoin +*/ +CT_MsgVerifyPopAccountsCount::CT_MsgVerifyPopAccountsCount(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KVerifyPopAccountsCount); + } + + +/** +~CT_MsgVerifyPopAccountsCount() +Destructor +*/ +CT_MsgVerifyPopAccountsCount::~CT_MsgVerifyPopAccountsCount() + { + } + + +/** +doTestStepL() +Reads the expected count from the ini file. +Obtains the count of the POP accounts created and compares against the expected number. + +@return +Returns the test step result. +*/ +TVerdict CT_MsgVerifyPopAccountsCount::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: Verify Pop Accounts Count")); + TInt expectedCount = -1; + if(!GetIntFromConfig(ConfigSection(), KExpectedCount, expectedCount) && expectedCount < 0) + { + ERR_PRINTF1(_L("ExpectedCount is not Specified or < 0")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts *account = CEmailAccounts::NewLC(); + RArray arrayPopAccounts; + account->GetPopAccountsL(arrayPopAccounts); + TInt count = arrayPopAccounts.Count(); + + CleanupStack::PopAndDestroy(account); + arrayPopAccounts.Reset(); + + if (count != expectedCount) + { + ERR_PRINTF3(_L("Number of POP accounts do not match ! expected = %d actual = %d"), + expectedCount, count); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("Number of POP accounts matched value = %d !"), expectedCount); + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/src/T_VerifyPopSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/src/T_VerifyPopSettings.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,175 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// VerifyPopSettings +// [Paramaters] +// PopAccountName : Name of the Pop account +// VerifyPopSettings is intended to populate the default POP and SMTP settings, +// Load the settings of the account created with the default settings, and compare +// the settings objects.The test passes if all the settings objects match else it fails. +// [APIs Used] +// GetPopAccountL +// LoadPopSettingsL +// LoadPopIapSettingsL +// +// + + + +/** + @file +*/ + + +// User include +#include "T_VerfiyPopSettings.h" +#include +#include + + +// epoc inlcudes +#include +#include +#include +#include + + +// Literals used +_LIT(KPopAccountName,"PopAccountName"); + + +/** +CT_MsgVerifyPopSettings() +Sets the teststep name to KCheckChildrenCountPop + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Sessoin +*/ +CT_MsgVerifyPopSettings::CT_MsgVerifyPopSettings(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgSyncStepPOP(aSharedDataPOP) + { + SetTestStepName(KVerifyPopSettings); + } + + +/** +~CT_MsgVerifyPopSettings() +Destructor +*/ +CT_MsgVerifyPopSettings::~CT_MsgVerifyPopSettings() + { + } + + +/** +doTestStepL() +Populate the default POP and SMTP settings, Load the settings of the account +created with the default settings, and compares the settings objects. +The test passes if all the settings objects match else it fails. + +@return +Returns the test step result +*/ +TVerdict CT_MsgVerifyPopSettings::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: VerifyPopSettings")); + // Read the Pop account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + else + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + CImPop3Settings* popSettings1 = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings1); + + CImIAPPreferences* popIapPrefs1 = CImIAPPreferences::NewLC(); + + CImSmtpSettings* smtpSettings1 = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings1); + + CImIAPPreferences* smtpIapPrefs1 = CImIAPPreferences::NewLC(); + + emailAccounts->PopulateDefaultPopSettingsL(*popSettings1, *popIapPrefs1); + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings1, *smtpIapPrefs1); + + + + CImPop3Settings* popSettings2 = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(popSettings2); + + CImIAPPreferences* popIapPrefs2 = CImIAPPreferences::NewLC(); + + CImSmtpSettings* smtpSettings2 = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings2); + + CImIAPPreferences* smtpIapPrefs2 = CImIAPPreferences::NewLC(); + + TPopAccount popAccount; + emailAccounts->GetPopAccountL(popServiceId, popAccount); + emailAccounts->LoadPopSettingsL(popAccount, *popSettings2); + emailAccounts->LoadPopIapSettingsL(popAccount, *popIapPrefs2); + + TSmtpAccount smtpAccount; + emailAccounts->GetSmtpAccountL(popAccount.iSmtpService, smtpAccount); + emailAccounts->LoadSmtpSettingsL(smtpAccount, *smtpSettings2); + emailAccounts->LoadSmtpIapSettingsL(smtpAccount, *smtpIapPrefs2); + + TVerdict result = EPass; + if (!(*popSettings1 == *popSettings2)) + { + // failed + ERR_PRINTF1(_L("Pop3 Settings objects do not match !")); + result = EFail; + } + else if (!(*smtpSettings1 == *smtpSettings2)) + { + // failed + ERR_PRINTF1(_L("SMTP Settings objects do not match !")); + result = EFail; + } + else if (!CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(*popIapPrefs1, *popIapPrefs2)) + { + // failed + ERR_PRINTF1(_L("Pop3 IAP Preference objects do not match !")); + result = EFail; + } + else if (!CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(*smtpIapPrefs1, *smtpIapPrefs2)) + { + // failed + ERR_PRINTF1(_L("SMTP IAP Preference objects do not match !")); + result = EFail; + } + SetTestStepResult(result); + CleanupStack::PopAndDestroy(9,emailAccounts); + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/testdata/EmailMessage/20KBody.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/testdata/EmailMessage/20KBody.txt Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,348 @@ +From: test908@msexchange2k.closedtest.intra +To: test908@msexchange2k.closedtest.intra +Subject: 20KBody +Date: Wed, 10 Jan 2007 10:30:31 +0530 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1807 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1896 + +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages + + + +From: test908@msexchange2k.closedtest.intra +To: test908@msexchange2k.closedtest.intra +Subject: 10KBody +Date: Wed, 10 Jan 2007 10:30:31 +0530 +MIME-Version: 1.0 +Content-Type: text/plain; + charset="iso-8859-1" +Content-Transfer-Encoding: 8bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2800.1807 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1896 + +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages +Symbian OS - the mobile operating systemSoftware licensing company that +develops and licenses Symbian OS, an open industry standard operating system +for data enabled mobile phones. +www.symbian.com/ - Similar pages +Phones - www.symbian.com/phones/index.html +OS - www.symbian.com/symbianos/index.html +Fast facts - www.symbian.com/about/fastfacts/fastfacts.html +Developer tools & downloads - www.symbian.com/developer/downloads/index.html +More results from www.symbian.com » +Symbian: Developer: homeThe people behind the EPOC operating system. +Symbian's mission is to set the standard for mobile wireless operating +systems and to enable a mass market for ... +www.symbian.com/developer/ - Similar pages +Symbian OS - Wikipedia, the free encyclopediaArticle discussing the +operating system, its history and devices that use it. +en.wikipedia.org/wiki/Symbian_OS - 64k - Cached - Similar pages +My-Symbian.com - Symbian OS Communicators and Smartphones Info CenterPortal +for users of Symbian based communicators and smartphones. Includes news, +software downloads and both English and Polish language discussion forums. +www.my-symbian.com/ - 82k - 8 Jan 2007 - Cached - Similar pages +All About Symbian - News, Reviews, and Software for Symbian ...Community +offering user support, news, reviews and software for Symbian based phones. +www.allaboutsymbian.com/ - 42k - 8 Jan 2007 - Cached - Similar pages +The premier place for symbian users, supported with the No. one ...The +premier place for symbian users introduces various researches for smarth +phone users like: Error Fixes, Modding, Guides, Tutorials tips & tricks, ... +www.symbian-freak.com/ - 102k - Cached - Similar pages +Symbian OS mobile smartphone operating system - News, articles ...Resource +site for Symbian developers. Includes news, product review, technical +information on Symbian based devices and discussion forums. +www.symbianone.com/ - 93k - Cached - Similar pages +Symbian Themes: WelcomeThe premier site for sharing and customzing themes, +wallpapers, ringtones and more for a wide variety of mobile devices such as +mobile phones, ... +symbian.mobilethemes.com/ - 92k - Cached - Similar pages + + + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/testdata/EmailSettings/POPSettings_test908.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/testdata/EmailSettings/POPSettings_test908.txt Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +# ban-pramodd02 server +__type__ = Pop3Settings + +#ServerName = msexchange2k.closedtest.intra +PopServerAddress = msexchange2k.closedtest.intra +#PopLoginName = test908 +#PopPassword = test908 + +PopIapList = POP001 POP002 +#PopIAP = 1 +#PopCommDbDialogPref +#PopIAPIndex = 0 + +POP001_PopIAP = 1 +POP001_PopCommDbDialogPref = TCommDbDialogPref::ECommDbDialogPrefDoNotPrompt +POP001_PopIAPIndex = 0 + +POP002_PopIAP = 1 +POP002_PopCommDbDialogPref = TCommDbDialogPref::ECommDbDialogPrefDoNotPrompt +POP002_PopIAPIndex = 0 + +SmtpServerAddress = msexchange2k.closedtest.intra +#SmtpEmailAddress = test908@msexchange2k.closedtest.intra +#SmtpReceiptAddress = test908@msexchange2k.closedtest.intra +#SmtpUserAddress = test908@msexchange2k.closedtest.intra +#SmtpSetReplyToAddress = test908@msexchange2k.closedtest.intra +#SmtpSetLoginName = test908 +#SmtpSetPassword = test908 + +SmtpIapList = SMTP001 SMTP002 + +SMTP001_SmtpIAP = 1 +SMTP001_SmtpCommDbDialogPref = TCommDbDialogPref::ECommDbDialogPrefDoNotPrompt +SMTP001_SmtpIAPIndex = 0 + + +SMTP001_SmtpIAP = 1 +SMTP001_SmtpCommDbDialogPref = TCommDbDialogPref::ECommDbDialogPrefDoNotPrompt +SMTP001_SmtpIAPIndex = 0 diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/pop/testdata/plainbody/smoketest_email.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/pop/testdata/plainbody/smoketest_email.ini Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,691 @@ +#####################Start:MSG-POP3-CREATENEWMESSAGE-0001#################################### + +[0001-InitNtRas] + +[0001-ResetMessageStore] + +[0001-CheckChildrenCountOutbox1] +Expectedcount = 0 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0001-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0001-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0001-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0001-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0001-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0001-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\20KBody.txt +Subject = 20KBody + +[0001-CheckChildrenCountOutbox2] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0001-SendSmtpMessage1] +Subject = 20KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0001-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0001-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0001-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +FolderName = Inbox +Expectedcount = 1 + +[0001-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 1 + +NumOfLines0 = 349 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 20KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 +#####################End:MSG-POP3-CREATENEWMESSAGE-0001#################################### +#####################Start:MSG-POP3-CREATENEWMESSAGE-0002#################################### + +[0002-InitNtRas] + +[0002-ResetMessageStore] + +[0002-CheckChildrenCountOutbox1] +Expectedcount = 0 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0002-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0002-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0002-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0002-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0002-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0002-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\100KBody.txt +Subject = 100KBody + +[0002-CheckChildrenCountOutbox2] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0002-SendSmtpMessage1] +Subject = 100KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0002-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0002-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0002-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +FolderName = Inbox +Expectedcount = 1 + +[0002-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 1 + +NumOfLines0 = 1669 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 100KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 +#####################End:MSG-POP3-CREATENEWMESSAGE-0002#################################### +#####################Start:MSG-POP3-CREATEFORWARDMESSAGE-0001#################################### + +[0003-InitNtRas] + +[0003-ResetMessageStore] + +[0003-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0003-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0003-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0003-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0003-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0003-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\10KBody.txt +Subject = 10KBody + +[0003-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0003-SendSmtpMessage1] +Subject = 10KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0003-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0003-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0003-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0003-CreateForwardMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateForwardEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 10KBody + +[0003-SendSmtpMessage2] +Subject = Fwd: 10KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0003-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0003-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0003-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 175 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 10KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 182 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Fwd: 10KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEFORWARDMESSAGE-0001#################################### +#####################Start:MSG-POP3-CREATEFORWARDMESSAGE-0002#################################### + +[0004-InitNtRas] + +[0004-ResetMessageStore] + +[0004-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0004-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0004-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0004-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0004-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0004-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\100KBody.txt +Subject = 100KBody + +[0004-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0004-SendSmtpMessage1] +Subject = 100KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0004-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0004-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0004-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0004-CreateForwardMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateForwardEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 100KBody + +[0004-SendSmtpMessage2] +Subject = Fwd: 100KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0004-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0004-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0004-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 1669 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 100KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 1676 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Fwd: 100KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEFORWARDMESSAGE-0002#################################### +#####################Start:MSG-POP3-CREATEFORWARDMESSAGE-0003#################################### + +[0005-InitNtRas] + +[0005-ResetMessageStore] + +[0005-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0005-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0005-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0005-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0005-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0005-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\512KBody.txt +Subject = 512KBody + +[0005-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0005-SendSmtpMessage1] +Subject = 512KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0005-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0005-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 600000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0005-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0005-CreateForwardMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateForwardEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 512KBody + +[0005-SendSmtpMessage2] +Subject = Fwd: 512KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0005-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 600000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0005-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0005-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 8483 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 512KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 8490 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Fwd: 512KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEFORWARDMESSAGE-0003#################################### +#####################Start:MSG-POP3-CREATEREPLYMESSAGE-0001#################################### + +[0006-InitNtRas] + +[0006-ResetMessageStore] + +[0006-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0006-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0006-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0006-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0006-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0006-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\10KBody.txt +Subject = 10KBody + +[0006-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0006-SendSmtpMessage1] +Subject = 10KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0006-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0006-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0006-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0006-CreateReplyMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateReplyEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 10KBody + +[0006-SendSmtpMessage2] +Subject = Re: 10KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0006-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0006-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0006-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 175 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 10KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 182 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Re: 10KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEREPLYMESSAGE-0001#################################### +#####################Start:MSG-POP3-CREATEREPLYMESSAGE-0002#################################### + +[0007-InitNtRas] + +[0007-ResetMessageStore] + +[0007-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0007-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0007-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0007-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0007-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0007-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\100KBody.txt +Subject = 100KBody + +[0007-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0007-SendSmtpMessage1] +Subject = 100KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0007-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0007-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0007-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0007-CreateReplyMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateReplyEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 100KBody + +[0007-SendSmtpMessage2] +Subject = Re: 100KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0007-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 500000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0007-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0007-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 1669 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 100KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 1676 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Re: 100KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEREPLYMESSAGE-0002#################################### +#####################Start:MSG-POP3-CREATEREPLYMESSAGE-0003#################################### + +[0008-InitNtRas] + +[0008-ResetMessageStore] + +[0008-CreatePopAccount] +PopAccountName = PopAccountZ +PopConfigFileName = c:\smoketest\EmailSettings\POPSettings_test908.txt + +[0008-ConnectPop3Server] +PopAccountName = PopAccountZ + +[0008-DeleteAllPopChildren] +PopAccountName = PopAccountZ + +[0008-CheckChildrenCountRemote0] +PopAccountName = PopAccountZ +Expectedcount = 0 + +[0008-DisConnectPop3Server] +PopAccountName = PopAccountZ + +[0008-SmtpCreateNewMessageWithPlainBodyText] +FolderName = KMsvGlobalOutBoxIndexEntryId +EmailFileName = c:\smoketest\EmailMessage\512KBody.txt +Subject = 512KBody + +[0008-CheckChildrenCountOutbox] +Expectedcount = 1 +FolderName = KMsvGlobalOutBoxIndexEntryId + +[0008-SendSmtpMessage1] +Subject = 512KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0008-CheckChildrenCountSentItems] +Expectedcount = 1 +FolderName = KMsvSentEntryId + + +[0008-PopInvokeAsyncFunction1] +PopAccountName = PopAccountZ +EmailSize = 600000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0008-CheckChildrenCountRemote1] +PopAccountName = PopAccountZ +Expectedcount = 1 + +[0008-CreateReplyMessage] +ServiceType = POP +PopAccountName = PopAccountZ +CommandName = KSMTPMTMCreateReplyEmailMessage +FolderName = KMsvGlobalOutBoxIndexEntryId +SubjectOfExistingMsg = 512KBody + +[0008-SendSmtpMessage2] +Subject = Re: 512KBody +ParentFolderName = KMsvGlobalOutBoxIndexEntryId + +[0008-PopInvokeAsyncFunction2] +PopAccountName = PopAccountZ +EmailSize = 600000 +PopLimit = -1 +PopCommand = KPOP3MTMPopulate + +[0008-CheckChildrenCountRemote2] +PopAccountName = PopAccountZ +Expectedcount = 2 + +[0008-ComparePopEmailMsgs] +InboxFolder = KMsvLocalServiceIndexEntryId +SentFolder = KMsvSentEntryId +PopAccountName = PopAccountZ +NumTest = 2 + +NumOfLines0 = 8483 +FooterExpected0 = 0 +NumOfLinesHtml0 = 0 +Description0 = 512KBody +NumOfAttachments0 = 0 +FooterSize0 = 0 + +NumOfLines1 = 8490 +FooterExpected1 = 0 +NumOfLinesHtml1 = 0 +Description1 = Re: 512KBody +NumOfAttachments1 = 0 +FooterSize1 = 0 +#####################End:MSG-POP3-CREATEREPLYMESSAGE-0003#################################### + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/group/T_SmtpServer.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/group/T_SmtpServer.mmp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,77 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Project definition file for Smtp test Server +// +// + + CAPABILITY ALL -TCB + TARGET t_msgsmtpserver.exe + TARGETTYPE exe + UID 0x1000007A 0x10274070 + VENDORID 0x70000001 + + +// Include the Framework +#include "../../../framework/group/T_MsgFramework.mph" + + +SYSTEMINCLUDE /epoc32/include +SYSTEMINCLUDE /epoc32/include/test +SYSTEMINCLUDE /epoc32/include/comms-infras + +USERINCLUDE ../inc + + +SOURCEPATH ../src +SOURCE T_SmtpServer.cpp +SOURCE T_MsgAsyncStepSMTP.cpp +SOURCE T_MsgSyncStepSMTP.cpp +SOURCE T_MsgSharedDataSmtp.cpp +SOURCE T_SendSmtpMessage.cpp +SOURCE T_UtilsSendEmail.cpp +SOURCE T_CreateSmtpMessageFromEmailFile.cpp +SOURCE T_SmtpSendEmail.cpp +SOURCE ImCltCvRecv.cpp +SOURCE Local_imcvrecv.cpp +SOURCE Local_imutdll.cpp +SOURCE T_StartRamUsageTimer.cpp +SOURCE T_StopRamUsageTimer.cpp +SOURCE T_RetrievePlainBodyTextAndCompare.cpp +SOURCE T_SmtpCreateNewMessageWithPlainBodyText.cpp +SOURCE T_SmtpCreateForwardMessage.cpp +SOURCE T_SmtpCreateReplyMessage.cpp +SOURCE T_CreateSmtpMobilityAccount.cpp +SOURCE T_CreateSmtpAccount.cpp +SOURCE T_CheckSmtpSNAPSetting.cpp +SOURCE T_ModifySmtpSettings.cpp +SOURCE T_RemoveSmtpSNAPSetting.cpp +SOURCE T_CheckSmtpBMSetting.cpp + +LIBRARY testexecuteutils.lib +LIBRARY testexecutelogclient.lib +LIBRARY imut.lib +LIBRARY bafl.lib +LIBRARY etext.lib +LIBRARY msgs.lib +LIBRARY euser.lib +LIBRARY imcm.lib +LIBRARY efsrv.lib +LIBRARY charconv.lib +LIBRARY estor.lib +LIBRARY t_msgutilityserver.lib +LIBRARY hal.lib +//LIBRARY instrumentationhandler.lib +LIBRARY netmeta.lib + +EPOCHEAPSIZE 0x1000 0x800000 diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,19 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Component description file for Smtp test Server +// +// + +PRJ_TESTMMPFILES +T_SmtpServer.mmp diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/ImCltCvRecv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/ImCltCvRecv.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,95 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + +#ifndef __IM_CLT_CV_RECV_H__ +#define __IM_CLT_CV_RECV_H__ + + +// User includes +#include "Local_imcvrecv.h" + + +// Epoc includes +#include + + +/** +Implements the Rfc822 specication for creating a message +*/ +class CImCltRecvConvert : public CLocalImRecvConvert + { +friend class CLocalMimeParser; +public: + /*IMPORT_C*/ static CImCltRecvConvert* NewLC( RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId); + /*IMPORT_C*/ static CImCltRecvConvert* NewL( RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId); + /*IMPORT_C*/ ~CImCltRecvConvert(); + + /*IMPORT_C*/ void ResetL(); + /*IMPORT_C*/ void ResetForHeadersL(); + + /*IMPORT_C*/ TInt ParseNextFieldL(const TDesC8& aSourceLine); + /*IMPORT_C*/ TMsvId MessageCompleteL(); + /*IMPORT_C*/ void MessageCompleteL(TMsvEmailEntry aEmailEntry); + /*IMPORT_C*/ TMsvEmailEntry MessageEntryDetailsL(); + + inline void SetMsvId(TMsvId aId); + inline CMsvEntry& ClientEntry(); + inline TMsvId EntryId(); + +private: + CImCltRecvConvert(RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId); + void ConstructL(RFs& anFs); + + void ParseNextLineL(const TDesC8& aSourceLine); + void ParseBodyLineL(const TDesC8& aSourceLine); + void ParseMimeLineL(const TDesC8& aSourceLine); + void EndOfHeaderProcessingL(); + TBool CreateNonMIMEFolderEntryL(TMsvId aCurrentId); + + TInt Value(const TUint8*&); + void Whitespace(const TUint8*&); + + TBool CreateAttachmentL(); + void WriteToAttachmentL(const TDesC8& text); + + void MoveUpFromFolderEntryL(); + void MoveToParentEntryL(); + void UpdateMultipartDataL(); + + TBool StoreEntryDataL(); + + void StoreEntryStreamsL(); + void StoreEntryStreamsL(TInt aSettings); + void CreateEntryL(); + void StoreMessageEntryDetailsL(); + +private: + CMsvEntry* iClientEntry; + CMsvServerEntry* iNullServerEntry; + }; + +#include "ImCltCvRecv.inl" + +#endif diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/ImCltCvRecv.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/ImCltCvRecv.inl Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,37 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file ImCltCvRecv.inl +// +// + + +inline void CImCltRecvConvert::SetMsvId(TMsvId aId) + { + iClientEntry->SetEntryL(aId); + iPopulateMessage = (iClientEntry->Entry().iType == KUidMsvMessageEntry); + iRootEntryId = aId; + } + +inline CMsvEntry& CImCltRecvConvert::ClientEntry() + { + return *iClientEntry; + } + +inline TMsvId CImCltRecvConvert::EntryId() + { + if (iClientEntry->Entry().Id() == KMsvRootIndexEntryId) + return iSavedEntryId; + else + return iClientEntry->Entry().Id(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/Local_imcvrecv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/Local_imcvrecv.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,471 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __LOCAL_IMCVRECV_H__ +#define __LOCAL_IMCVRECV_H__ + +// epoc include +#include +#include // required for CBufSeg +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Forward Declaration +class CImHeader; +class CRichText; +class CLocalMimeParser; +class CLocalImRecvConvert; +class RFs; +class TImConvert; +class TImAttachmentFile; +class CImcvUtils; +class CMsvBodyText; + +const TInt KHeaderBufferLength = 100; + +// Max filename length +const TInt MaxMimeParameterValueLength = 256; +// Likely maximum size of an encoded parameter value decoding to a length of +// MaxMimeParameterValueLength. In quoted printable usually 3 encoded characters +// per decoded character. 60 characters is given to allow for delimiters and +// charset information. +const TInt KMimeEncodedParameterSize = MaxMimeParameterValueLength * 3 + 60; + +const TInt KConversionRemainderLength=20; + +//boundary stuff +const TInt KBoundaryNotFound =0; +const TInt KBoundaryFound =1; +const TInt KBoundaryError =2; + + +/** +Stores the details about a message nneded in the Message entry. +*/ +struct TParentDetails + { + TInt iSize; + TBool iAttachment; + TBool iMHTML; + TImEmailFolderType iFolder; // Only interested in the Related type + }; + + +/** +@internalComponent +@released +*/ +class CLocalRfc822Token : public CBase + { +public: + enum THeaderPart { EUnknown, ENotFinished, EFrom, EReplyTo, ETo, ECc, EBcc, ESubject, EDate, EMessageId, EPriority, EImportance, EReturnReceiptTo, EEndOfHeader }; + THeaderPart iHeaderPart; + TBool iLastToken; + TBool iFirstLine; + TBool i822FieldsExist; + + /*IMPORT_C*/ static CLocalRfc822Token* NewLC(); + /*IMPORT_C*/ void Reset(); + inline HBufC8* OutputLine(); + /*IMPORT_C*/ virtual void ParseNextLineL( const TDesC8& aSourceLine ); + /*IMPORT_C*/ ~CLocalRfc822Token(); + inline TBool LastToken(); + + inline void SetImRecvConvert( CLocalImRecvConvert* ); +private: + TBool MatchAndRemoveL( const TDesC8& ); + TBool PriorityAndReceiptsMatchAndRemoveL(THeaderPart aPriority); + + CLocalRfc822Token(); + void ConstructL(); + +private: + TBuf8 iInputLine; + TBuf8 iBufferedInput; + HBufC8* iOutputLine; + CLocalImRecvConvert* iImRecvConvert; + }; + + +/** +@internalTechnology +@released +*/ +class CLocalImRecvConvert : public CBase + { +friend class CLocalMimeParser; +public: + /*IMPORT_C*/ static CLocalImRecvConvert* NewLC( RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId); + /*IMPORT_C*/ static CLocalImRecvConvert* NewL( RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId); + /*IMPORT_C*/ ~CLocalImRecvConvert(); + + /*IMPORT_C*/ void ResetL(); + /*IMPORT_C*/ void ResetForHeadersL(); + + inline void SetAttachmentPathL(const TDesC& aFullPath); // attachment path, if not set then IMCV will reject attachments + inline void SetMsvId(TMsvId aId); + + /*IMPORT_C*/ virtual TInt ParseNextField(const TDesC8& aSourceLine); + /*IMPORT_C*/ void MessageCompleteL(); + /*IMPORT_C*/ void MessageCompleteL(TMsvEmailEntry aEmailEntry); + /*IMPORT_C*/ void MessageCompleteL(TBool aPartialDownload); + /*IMPORT_C*/ TInt DeletedAttachmentSize(); + /*IMPORT_C*/ void WritePartialFooterL(TInt aAmountLeft); + /*IMPORT_C*/ TMsvEmailEntry MessageEntryDetailsL(); + + enum TValidEntryType {EUnknownEntry, EMessageEntry, EFolderEntry, EAttachmentEntry, ETextEntry, EHtmlEntry}; + enum TImEntryStreamSaveSettings + { + KStoreBodyText = 0x00000001, + KStore822Header = KStoreBodyText << 1, //0x00000002 + KStoreMIMEHeader = KStore822Header << 1, //0x00000004 + }; + + inline const TTime Date() const; // return RFC822 date + inline const TMsvPriority Priority() const; + inline void SaveAllAttachments(TBool aSave); + inline const TInt ReceiveError() const; + inline CMsvServerEntry& ServerEntry(); + inline const CImHeader& Header() const; + inline const TBool ValidCompleteHeader() const; + //virtual inline const TMsvId EntryId() const; + virtual TMsvId EntryId(); + inline TBool NotFinishedRfc822Header(); + inline CImConvertCharconv& CharacterConverter(); + +protected: + CLocalImRecvConvert(RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId); + void ConstructL(RFs& anFs); + + void ParseNextLineL(const TDesC8& aSourceLine); + void ParseBodyLineL(const TDesC8& aSourceLine); + void ParseMimeLineL(const TDesC8& aSourceLine); + void EndOfHeaderProcessingL(); + virtual void EndOfHeaderMIMEProcessingL(); + TBool CreateNonMIMEFolderEntryL(TMsvId aCurrentId); + void DecodeAndStoreLineL(const TDesC8& aSourceLine); + + void ParseRecipientListL(CDesCArray& aRecipientList); + void PrepareDecoder(); + + void WriteToBodyL(const TDesC8& aText, TBool aBlankLine=EFalse); + void WriteToBodyL(const TDesC16& aText); + + void AddFileExtension(); + void ExtractFilename(TLex& aLex, TDes& rFileName); + void ReplaceInvalidCharacters(TDes& rFileName); + void SetAttachmentName(TDes& aFileName); + + TBool CheckUUEStartL(const TDesC8& aSourceLine); + + // returns numeric value of text up to next delimiter + TInt Value(const TUint8*&); + void Whitespace(const TUint8*&); + TBool LineIsAllWhitespace(); + + TBool CreateAttachmentL(); + virtual void WriteToAttachmentL(const TDesC8& text); + void CloseAttachmentFileL(); + + // Message Entry specific functions + void ResetForNewEntryL(TValidEntryType entryType); + void ResetForNonMimeEntryL(); + void MoveUpFromFolderEntryL(); + virtual void MoveToParentEntryL(); + void UpdateMultipartDataL(); + + TBool StoreEntryDataL(); + + virtual void StoreEntryStreamsL(); + virtual void StoreEntryStreamsL(TInt aSettings); + void Store822HeaderL(CMsvStore& aStore, TBool& aCommit); + void StoreMIMEHeaderL(CMsvStore& aStore, TBool& aCommit); + void StoreBodyTextL(CMsvStore& aStore, TBool& aCommit); + + virtual void CreateEntryL(); + void Logging(const TDesC8& aString1, const TDesC8& aString2); + void StoreMessageEntryDetailsL(); + +protected: + enum { KNoPart = 0, KParentPart, KMultiPart }; + TInt iEmailPart; + TMsvId iCurrentMultipartFolderEntryId; + + TBool iMessageEntryCalled; + TBool iReceivingHeadersOnly; + TInt iReceiveError; // indicates if any anomalies were observed whilst the message was received + TInt iLeaveError; // keeps any errors that have caused a leave (ie Out of memory, Corrupt file, Server error) + + TMsvId iRootEntryId; + TMsvId iTopMessagePart; + + TInt8 iBCPadding[1348]; // Padding to maintain BC - TImAttachmentFile used to be here before it's size was expanded to buffer more data. + CMsvServerEntry* iServerEntry; + TUid iNewMsgType; + + CLocalRfc822Token* iRfc822Token; + + TValidEntryType iDefaultEntryType; + TValidEntryType iEntryType; + + TMsvEmailEntry* iEmailEntry; + CImHeader* iOutputHeader; + + CParaFormatLayer* iParaLayer; + CCharFormatLayer* iCharLayer; + CRichText* iOutputBody; + + CImConvertCharconv* iCharConv; + CCnvCharacterSetConverter* iConverter; + TBool iPreparedToConvert; + + TBool iMIMEPart_822Header; + TInt iEmptyHeaderSize; + TImBodyConvAlgorithm iAlgorithm; + + TBool iCommitLine; + TBool iFinalLine; + TBool iPrepared; + TBool iFinishedHeader; + TBool iNotFinishedRfc822Header; + TBool iNewNonMIMEBodyPart; + TBool iFirstBoundaryReached; + + CCnvCharacterSetConverter* iCharacterConverter; + CImConvertHeader* iHeaderConverter; + + TImRfc822DateField iRfc822Date; + + RFs* iFsSession; + + TBool iSkipData; + TBool iEncounteredLineEndingInCarriageReturn; + + TBool iCurrentPartIsRichText; //indicates if current body part is RichText, set on every Close Attachment() + TImCodecQP iQPCodec; + TImCodecB64 iB64Codec; + TImCodecUU iUUCodec; + TPtrC8 iThisLine; + + HBufC* iRemovedAttachmentTag; // resource text which is put into the body in place of a removed MIME attachment + HBufC* iRetainedAttachmentTag; // Not used at all - resource text which is put into the body next to a retained MIME attachment + HBufC* iDefaultAttachmentName; // used when no name found + HBufC* iAttachmentFullPath; // full path to current message file + + TBool iSavingAttachments; // Turn on/off saving of attachments + + TBuf8 iSeekBoundary; + + TInt iGlobalIndent; + TInt iPreviousLineLength; + TInt iPreviousTrailingWhitespace; + TChar iLastChar; + TInt iLongestLine; + TBool iNewEntry; + + TImAttachmentFileState iAttachmentFileState; + TUint32 iEntryDataSize; + + TBool iLogFileExists; + RFile iLogFile; + TLex8 iLineLex; + TTime iTimeDate; + + //priorities //vk + TInt iPriority; //{1..5} + TInt iXPriority; // {1..5} 1,2-high, 3-normal, 4,5-low + TBuf8 iPrecedence; // {bulk-low, list-normal,first class,special delivery-0} + TBuf8 iImportance; // {high, low, normal} + TMsvPriority iImPriority; + + TMsvId iEmailServiceId; + TBool iPopulateMessage; + CImcvUtils* iImcvUtils; + + TBuf8 iLeftOver; + + TMsvId iSavedEntryId; + CArrayFixFlat* iParent; + // Logging + CImLog* iImcvLog; + TMsvId iBodyId; + +public: + TFileName iAttachmentName; + CLocalMimeParser* iMimeParser; +protected: + TBool iRelatedAttachments; + CBufBase* iBodyBuf; + CMsvBodyText *iBodyText; + TInt iStore8BitData; + TImAttachmentFile iAttachmentFile; + TBool iParsedMimeBoundaryLast; + TInt iSizeOfAttachmentsRemoved; + HBufC* iPartialEmailFooter; + TInt iTopPartialDownloadCounter; // added to support correct attachment downloading after partial download + TBool iPartialEmail; + RFile* iFile; + }; + + +/** +@internalComponent +@released +*/ +class CLocalMimeParser : public CBase + { +public: + /*IMPORT_C*/ static CLocalMimeParser* NewLC(CLocalImRecvConvert& aImRecvConvert); + /*IMPORT_C*/ static CLocalMimeParser* NewL(CLocalImRecvConvert& aImRecvConvert); + /*IMPORT_C*/ ~CLocalMimeParser(); + void Reset(); + void ResetForNewEntry(); + void ParseLineL(const TDesC8& aSourceLine); + + void SetBoundaryL(const TDesC8& aBoundaryText); + TBool IsBoundary(const TDesC8& aSourceLine); + void RemoveBoundary(); + + inline void StoreMimeHeaderL(CMsvStore& entryStore); + inline void StoreMimeHeaderWithoutCommitL(CMsvStore& entryStore); + inline void RestoreMimeHeaderL(CMsvStore& entryStore); + + inline TImEncodingType ContentEncoding(); + inline TMimeContentType ContentType(); + TPtrC8 ContentSubType() const; + TUint CurrentCharsetL() const; + + inline const TBool MessageIsMime() const; + inline const TBool IsTerminatingBoundary() const; + inline const TBool BoundaryExists() const; + inline const TBool BoundaryFound() const; + inline const TInt MimeHeaderSize() const; + inline const TInt ReceiveError() const; + inline const TDesC& ContentDescription() const; + inline const TPtrC ContentLocation() const; + inline const TPtrC8 ContentId() const; + inline const TPtrC8 ContentDisposition() const; + inline TBool IsMessageDigest(); + + TBool VCard() const; + TBool VCalendar() const; + TImEmailFolderType MessageFolderType() const; + void SetMessageFolderType(TImEmailFolderType aFolderType); + TBool StartPart() const; + void RestoreMimeParserL(CMsvStore& entryStore); + void ExtractParameterInfoL(const TDesC8& aTag, TDes16& rBuffer, TDes8& rBuffer8); + void ExtractParameterInfoL(const TDesC8& aTag, HBufC8*& rBuffer); + TBool MimeFieldsExist() const; + void ResetMimeFieldsExist(); + void DoMultipartTypeForNonMIMEL(); + +#if defined (_DEBUG) + inline TLex8& Lex() {return iLex;}; +#endif + +private: + CLocalMimeParser(CLocalImRecvConvert& aImRecvConvert); + void ConstructL(); + + // String scanning functions + TBool IsSpecialChar(const TUint8 aChar); + TBool MatchAndRemoveToken(const TDesC8& aToken); + + // MIME token recognition functions + void DoMimeVersion(); + void DoContentTypeL(); + void DoContentLocationL(); + void DoContentBaseL(); + void DoContentIdL(); + void DoEncodingL(); + void DoDescriptionL(); + void DoDispositionL(); + + // MIME Content-Type type recognition functions + void DoTextTypeL(); + void DoMultipartTypeL(); + void DoMessageTypeL(); + void DoAttachmentTypeL(); + + // Will be moved to MIUT, but for now .. + const TPtrC8 GetContentTypeValue(const TDesC8& aContentTypeParameter) const; + + TBool ParseRfc2047ParameterInfoL( const TDesC8& aParam, TDes& rBuffer); + TBool ParseRfc2231ParameterInfoL( const TDesC8& aTag, TDes& rBuffer, TInt aOffset ); + TBool DecodeRfc2231ParameterInfoL( TDes8& aInput, TDes& rBufOut, + TPtrC8 aCharset/*, TPtrC8 aLanguage*/); + TPtrC8 ExtractParameterString(TLexMark8& rMark); + +private: + CLocalImRecvConvert& iImRecvConvert; + + CImMimeHeader* iMimeHeader; + TInt iEmptyMimeHeaderSize; + + TBool isMime; + TBool iCorrectMimeVersion; + TImEncodingType iContentEncoding; + TMimeContentType iContentType; + TFileName iContentDescription; + TBool iVCard; + TBool iVCalendar; + TBool iStartPart; + TImEmailFolderType iMessageFolderType; + TUint iCharset; + TUint iDefaultCharset; + HBufC8* iStartId; + + // Boundary stuff + CDesC8ArrayFlat* iBoundaryText; + TInt iBoundaryIndex; + TInt iBoundaryLength; + TBool iTerminatingBoundary; + TBool iBoundaryFound; + TInt iReceiveError; // Indicates if any anomalies were observed whilst the message was received + // Can be accessed via the inline ReceiveError() + TPtrC8 iTestLine; + + HBufC8* iMimeHeaderLine; + TLexMark8 iMark; + TLex8 iLex; + TLex8 iTestLex; + TBool isMessageDigest; + TBool iMimeFieldsExist; + }; + +#include "local_imcvrecv.inl" + +#endif diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_CheckSmtpBMSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_CheckSmtpBMSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCheckSmtpBMSetting class +// +// + +#ifndef T_CHECK_SMTP_BM_SETTING_H +#define T_CHECK_SMTP_BM_SETTING_H + +/* User include */ +#include "T_MsgSyncStepSMTP.h" + +/* Literal used */ +_LIT(KCheckSmtpBMSetting,"CheckSmtpBMSetting"); + +/* Implements a test step to check if bearer mobility is supported by SMTP service */ +class CT_MsgCheckSmtpBMSetting : public CT_MsgSyncStepSMTP + { +public: + CT_MsgCheckSmtpBMSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iSmtpAccountName; + TBool iExpectedBMSupport; + + }; + +#endif /* T_CHECK_SMTP_BM_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_CheckSmtpSNAPSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_CheckSmtpSNAPSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCheckSmtpSNAPSetting class +// +// + +#ifndef T_CHECK_SMTP_SNAP_SETTING_H +#define T_CHECK_SMTP_SNAP_SETTING_H + +/* User include */ +#include "T_MsgSyncStepSMTP.h" + +/* Literal used */ +_LIT(KCheckSmtpSNAPSetting,"CheckSmtpSNAPSetting"); + +/* Implements a test step to check the SMTP SNAP information for the account */ +class CT_MsgCheckSmtpSNAPSetting : public CT_MsgSyncStepSMTP + { +public: + CT_MsgCheckSmtpSNAPSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iSmtpAccountName; + TBool iExpectedSNAPDefinition; + + }; + +#endif /* T_CHECK_SMTP_SNAP_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpAccount.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpAccount.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgCreateSmtpAccount class +// +// + +#ifndef T_CREATE_SMTP_ACCOUNT_H +#define T_CREATE_SMTP_ACCOUNT_H + +/* User include */ +#include "T_MsgSyncStepSMTP.h" + +/* Literal used */ +_LIT(KCreateSmtpAccount,"CreateSmtpAccount"); + +/* Implements a test step to create an SMTP account reading the settings from a config file */ +class CT_MsgCreateSmtpAccount : public CT_MsgSyncStepSMTP + { +public: + CT_MsgCreateSmtpAccount(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iSmtpAccountName; + TPtrC iConfigFileName; + + }; +#endif /* T_CREATE_SMTP_ACCOUNT_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpMessageFromEmailFile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpMessageFromEmailFile.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,54 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_CREATE_SMTP_MESSAGE_FROM_EMAIL_FILE_H__ +#define __T_CREATE_SMTP_MESSAGE_FROM_EMAIL_FILE_H__ + + +// User Includes +#include "T_MsgSyncStepSMTP.h" +#include "T_MsgSharedDataSmtp.h" + + +// Literals Used +_LIT(KCreateSmtpMessageFromEmailFile,"CreateSmtpMessageFromEmailFile"); + + +/** +This class implements the test step that creates the SMTP message +*/ +class CT_MsgCreateSmtpMessageFromEmailFile : public CT_MsgSyncStepSMTP + { +public: + static CT_MsgCreateSmtpMessageFromEmailFile* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_MsgCreateSmtpMessageFromEmailFile(); + + // CTestStep implementation + TVerdict doTestStepL(); +private: + CT_MsgCreateSmtpMessageFromEmailFile(CT_MsgSharedDataSmtp& aSharedDataSMTP); + }; +#endif //__T_CREATE_SMTP_MESSAGE_FROM_EMAIL_FILE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpMobilityAccount.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_CreateSmtpMobilityAccount.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,34 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __T_CREATESMTPMOBILITYACCOUNT_H__ +#define __T_CREATESMTPMOBILITYACCOUNT_H__ + +#include "T_MsgSyncStepSMTP.h" + +_LIT(KCreateSmtpMobilityAccount, "CreateSmtpMobilityAccount"); + +class CT_MsgCreateSmtpMobilityAccount : public CT_MsgSyncStepSMTP + { +public: + static CT_MsgCreateSmtpMobilityAccount* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + // CTestStep implementation + TVerdict doTestStepL(); +private: + CT_MsgCreateSmtpMobilityAccount(CT_MsgSharedDataSmtp& aSharedDataSMTP); + }; + +#endif //__T_CREATESMTPMOBILITYACCOUNT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_ModifySmtpSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_ModifySmtpSettings.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgModifySmtpSettings class +// +// + +#ifndef T_MODIFY_SMTP_SETTINGS_H +#define T_MODIFY_SMTP_SETTINGS_H + +/* User include */ +#include "T_MsgSyncStepSMTP.h" + +/* Literal used */ +_LIT(KModifySmtpSettings,"ModifySmtpSettings"); + +/* Implements a test step that modifies the settings of the specified Smtp account + via the given config file */ +class CT_MsgModifySmtpSettings : public CT_MsgSyncStepSMTP + { +public : + CT_MsgModifySmtpSettings(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + ~CT_MsgModifySmtpSettings(); + + /* CTestStep implementation */ + TVerdict doTestStepL(); + }; +#endif /* T_MODIFY_SMTP_SETTINGS_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_MsgAsyncStepSMTP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_MsgAsyncStepSMTP.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,48 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* References SMTP shared data for use by derived test steps. +* +* +*/ + + + + + +/** + @file +*/ + +#ifndef __T_MSG_ASYNCSTEPSMTP_H__ +#define __T_MSG_ASYNCSTEPSMTP_H__ + +//user includes +#include "T_MsgAsyncStep.h" +#include "T_MsgSharedDataSmtp.h" + + +/** +Base class for asynchronous SMTP teststeps. +*/ +class CT_MsgAsyncStepSMTP : public CT_MsgAsyncStep + { +protected: + CT_MsgAsyncStepSMTP(CT_MsgSharedDataSmtp& aSharedDataSMTP); + +protected: + CT_MsgSharedDataSmtp& iSharedDataSMTP; + }; + +#endif // __T_MSG_ASYNCSTEPSMTP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_MsgSharedDataSmtp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_MsgSharedDataSmtp.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This contains CT_MsgSharedDataSmtp +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_MSG_SHARED_DATA_SMTP_H__ +#define __T_MSG_SHARED_DATA_SMTP_H__ + + +// User includes +#include "T_MsgSharedDataBase.h" + + +/** +Implements the class for sharing data across the test steps created by SMTP test server. +*/ +class CT_MsgSharedDataSmtp : public CT_MsgSharedDataBase + { +public: + static CT_MsgSharedDataSmtp* NewL(); + ~CT_MsgSharedDataSmtp(); + +protected: + virtual CBaseMtm* NewMtmL(); + CT_MsgSharedDataSmtp(); + +private: + void ConstructL(); + +public: + CPeriodic* iPeriodic; + TInt iMaxRamValue; + TInt iMinRamValue; + TInt iStartRamValue; + TInt iEndRamValue; + TBool iMark; + }; + +#endif // __T_MSG_SHARED_DATA_SMTP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_MsgSyncStepSMTP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_MsgSyncStepSMTP.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,49 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Sync step class owning SMTP shared data for use by derived test steps. +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_MSG_SYNC_STEP_SMTP_H__ +#define __T_MSG_SYNC_STEP_SMTP_H__ + +//user includes +#include "T_MsgStep.h" +#include "T_MsgSharedDataSmtp.h" + + +/** +Base class for synchronous SMTP teststeps. +*/ +class CT_MsgSyncStepSMTP : public CT_MsgStep + { +protected: + CT_MsgSyncStepSMTP(CT_MsgSharedDataSmtp& aSharedDataSMTP); + +protected: + CT_MsgSharedDataSmtp& iSharedDataSMTP; + }; + +#endif // __T_MSG_SYNC_STEP_SMTP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_RemoveSmtpSNAPSetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_RemoveSmtpSNAPSetting.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgRemoveSmtpSNAPSetting class +// +// + +#ifndef T_REMOVE_SMTP_SNAP_SETTING_H +#define T_REMOVE_SMTP_SNAP_SETTING_H + +/* User include */ +#include "T_MsgSyncStepSMTP.h" + +/* Literal used */ +_LIT(KRemoveSmtpSNAPSetting,"RemoveSmtpSNAPSetting"); + +/* Implements a test step to remove the SMTP SNAP information for the account */ +class CT_MsgRemoveSmtpSNAPSetting : public CT_MsgSyncStepSMTP + { +public: + CT_MsgRemoveSmtpSNAPSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + +private: + TBool ReadIni(); + +private: + TPtrC iSmtpAccountName; + + }; + +#endif /* T_REMOVE_SMTP_SNAP_SETTING_H */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_RetrievePlainBodyTextAndCompare.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_RetrievePlainBodyTextAndCompare.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_RetrievePlainBodyTextAndCompare +* +* +*/ + + + + + + + +#ifndef __T_RETRIEVEPLAINBODYTEXTANDCOMPARE_H__ +#define __T_RETRIEVEPLAINBODYTEXTANDCOMPARE_H__ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" +#include "T_MsgSharedDataSmtp.h" + + +// Literals used +_LIT(KRetrievePlainBodyTextAndCompare,"RetrievePlainBodyTextAndCompare"); + + +/* + * Implements a test step that edit a message body text + */ +class CT_RetrievePlainBodyTextAndCompare : public CT_MsgAsyncStepSMTP + { +public: + static CT_RetrievePlainBodyTextAndCompare* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_RetrievePlainBodyTextAndCompare(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + + +private: + CT_RetrievePlainBodyTextAndCompare(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + virtual void ProgressL(TBool bFinal); + virtual void CancelStep(); + }; +#endif // __T_RETRIEVEPLAINBODYTEXTANDCOMPARE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_SendSmtpMessage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_SendSmtpMessage.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,67 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgSendSmtpMessage +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_SEND_SMTP_MESSAGE_H__ +#define __T_SEND_SMTP_MESSAGE_H__ + + +// User Includes +#include "T_MsgAsyncStepSMTP.h" +#include "T_MsgSharedDataSmtp.h" + + +//Literals Used +_LIT(KSendSmtpMessage,"SendSmtpMessage"); + + +/** +Implements a test step to send a message +*/ +class CT_MsgSendSmtpMessage : public CT_MsgAsyncStepSMTP + { +public: + static CT_MsgSendSmtpMessage* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_MsgSendSmtpMessage(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgSendSmtpMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +private: + CMsvOperation* iOperation; + }; + +#endif //__T_SEND_SMTP_MESSAGE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpCreateForwardMessage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpCreateForwardMessage.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_SmtpCreateForwadMessage +* +* +*/ + + + + + + +#ifndef __T_SMTPCREATE_FORWARDMESSAGE_H__ +#define __T_SMTPCREATE_FORWARDMESSAGE_H__ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" + + +// Literals used +_LIT(KSmtpCreateForwadMessage,"SmtpCreateForwadMessage"); + + +/* + * Implements a test step that create a forwrad message using the SMTP client MTM command + */ +class CT_SmtpCreateForwadMessage : public CT_MsgAsyncStepSMTP + { +public: + static CT_SmtpCreateForwadMessage* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_SmtpCreateForwadMessage(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_SmtpCreateForwadMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP); + void SetHeaderPartL(); + void GetDefaultAddressL(); + + virtual void ProgressL(TBool bFinal); + virtual void CancelStep(); + +private: + HBufC* iRecipientAddress; + CMsvOperation* iOperation; + }; +#endif // __T_SMTPCREATE_FORWARDMESSAGE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpCreateReplyMessage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpCreateReplyMessage.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_SmtpCreateReplyMessage +* +* +*/ + + + + + + +#ifndef __T_SMTPCREATE_REPLYMESSAGE_H__ +#define __T_SMTPCREATE_REPLYMESSAGE_H__ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" + + +// Literals used +_LIT(KSmtpCreateReplyMessage,"SmtpCreateReplyMessage"); + + +/* + * Implements a test step that create a reply message using the SMTP client MTM command + */ +class CT_SmtpCreateReplyMessage : public CT_MsgAsyncStepSMTP + { +public: + static CT_SmtpCreateReplyMessage* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_SmtpCreateReplyMessage(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_SmtpCreateReplyMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP); + void SetHeaderPartL(); + + virtual void ProgressL(TBool bFinal); + virtual void CancelStep(); + +private: + CMsvOperation* iOperation; + }; +#endif // __T_SMTPCREATE_REPLYMESSAGE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpSendEmail.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpSendEmail.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,75 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgSmtpSendEmail +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_SMTP_SEND_EMAIL_H__ +#define __T_SMTP_SEND_EMAIL_H__ + + +// user includes +#include +#include "T_MsgAsyncStepSMTP.h" +#include "T_MsgSharedDataSmtp.h" + + +//Literals Used +_LIT(KSmtpSendEmail,"SmtpSendEmail"); +_LIT(KNone, "NONE"); + + +// Forward declaration +class CT_MsgUtilsSendEmail; +class CT_MsgUtilsConfigFileMachineName; + + +/** +Implements a test step to send an email +*/ +class CT_MsgSmtpSendEmail : public CT_MsgAsyncStepSMTP + { +public: + static CT_MsgSmtpSendEmail* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_MsgSmtpSendEmail(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_MsgSmtpSendEmail(CT_MsgSharedDataSmtp& aSharedDataSMTP); + + // CT_MsgAsyncStep implementation + virtual void ProgressL(TBool bFinal); + + // MT_MsgActiveCallback implementation + virtual void CancelStep(); + +public: + CT_MsgUtilsSendEmail* iSendEmail; + CT_MsgUtilsConfigFileMachineName* iMachineNameFile; + }; + +#endif //__T_SMTP_SEND_EMAIL_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_SmtpServer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This contains the header file for SMTP server +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_SMTP_SERVER_H__ +#define __T_SMTP_SERVER_H__ + + +// User defined classes +#include "T_MsgServer.h" +#include "T_MsgSharedDataSmtp.h" + + +//Literals Used +_LIT(KSmtpServer,"T_MsgSmtpServer"); + + +/** +Implements the SMTP test server +*/ +class CT_MsgSmtpServer : public CT_MsgServer + { +public: + static CT_MsgSmtpServer* NewL(); + +private: + CT_MsgSmtpServer(); + // Creates the test steps based on the test step name + virtual CTestStep* CreateTestStepL(const TDesC& aStepName); + + // Creates an object of Shared Data + virtual CT_MsgSharedDataBase* NewSharedDataL(); + +public: + // Creates session object and SMTP MTM + CT_MsgSharedDataSmtp* iSharedDataSMTP; + }; +#endif //__T_SMTP_SERVER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_StartRamUsageTimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_StartRamUsageTimer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_StartRamUsageTimer +* +* +*/ + + + + + + + +#ifndef _T_START_RAM_USAGE_TIMER_ +#define _T_START_RAM_USAGE_TIMER_ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" + +// Literals used +_LIT(KStartRamUsageTimer,"StartRamUsageTimer"); + +/** +Implement a wrapper class over HAL APIs and +setting the periodic Timer to monitor the RAM usage + */ +class CT_StartRamUsageTimer : public CT_MsgAsyncStepSMTP + { +public: + CT_StartRamUsageTimer(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_StartRamUsageTimer(); + + static TInt RamUsage(TAny* aObject); + void DoRamUsage(); + +private: + void ProgressL(TBool aFinal); + void CancelStep(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + }; + + +#endif // _T_START_RAM_USAGE_TIMER_ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_StopRamUsageTimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_StopRamUsageTimer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_StopRamUsageTimer +* +* +*/ + + + + + + + +#ifndef _T_STOP_RAM_USAGE_TIMER_ +#define _T_STOP_RAM_USAGE_TIMER_ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" + +// Literals used +_LIT(KStopRamUsageTimer,"StopRamUsageTimer"); + +// Implement a test step to stop the periodic Timer +class CT_StopRamUsageTimer :public CT_MsgAsyncStepSMTP + { +public: + CT_StopRamUsageTimer(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_StopRamUsageTimer(); +private: + void ProgressL(TBool aFinal); + void CancelStep(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + }; + + +#endif // _T_STOP_RAM_USAGE_TIMER_ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/T_UtilsSendEmail.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/T_UtilsSendEmail.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,97 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgUtilsSendEmail +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_UTILS_SMTP_SEND_EMAIL_H__ +#define __T_UTILS_SMTP_SEND_EMAIL_H__ + + +// User Includes +#include + + +// Epoc includes +#include + +// Forward Declaration +class CImIAPPreferences; + + +/** +Implements a utility that performs the sending of the email +*/ +class CT_MsgUtilsSendEmail : public CActive + { +public: + static CT_MsgUtilsSendEmail* NewL(CTestStep& aTestStep); + ~CT_MsgUtilsSendEmail(); +public: + void StartL(TPtrC aSender,TPtrC aReceipient,TPtrC aMailFile,TPtrC aServerIP, + TRequestStatus& aStatus); +protected: + void DoCancel(); + void RunL(); +private: + CT_MsgUtilsSendEmail(CTestStep& aTestStep); +private: + enum TSmtpSendState + { + ESmtpNotConnected, + ESmtpConnecting, + ESmtpSendHELO, + ESmtpSendMailFrom, + ESmtpSendRcptTo, + ESmtpSendData, + ESmtpSendContent, + ESmtpSendEndData, + ESmtpSendLogout, + ESmtpReceiveReply + }; + + enum TSmtpReceiveState + { + ESmtpHeloReply, + ESmtpFromReply, + ESmtpRcptReply, + ESmtpDataReply, + ESmtpContentReply, + ESmtpLogoutReply + }; +public: + TPtrC iSender; + TPtrC iReceipient; +private: + TRequestStatus* iRequestStatus; + CImTextServerSession* iImSocket; + TInt iSendState; + TInt iRecvState; + RFs iFs; + RFile iFile; + CImIAPPreferences* iIapPrefs; + CTestStep& iTestStep; + }; +#endif //__T_UTILS_SMTP_SEND_EMAIL_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/local_imcvrecv.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/local_imcvrecv.inl Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,203 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Class CRfc822Token Inline functions +* +* +*/ + + + + + + +/** + @file +*/ + +inline HBufC8* CLocalRfc822Token::OutputLine() + { + return iOutputLine; + } + +inline TBool CLocalRfc822Token::LastToken() + { + return iLastToken; + } + +inline void CLocalRfc822Token::SetImRecvConvert( CLocalImRecvConvert* aImRecvConvert ) + { + iImRecvConvert = aImRecvConvert; + } + + +/**************************************************************************** + Class CLocalImRecvConvert Inline functions +*****************************************************************************/ + +inline void CLocalImRecvConvert::SetAttachmentPathL(const TDesC& aFullPath) + { + // get full path to current message file = directory path + if (iAttachmentFullPath) + { + delete iAttachmentFullPath; + iAttachmentFullPath=NULL; + } + iAttachmentFullPath=aFullPath.AllocL(); + } + +inline void CLocalImRecvConvert::SetMsvId(TMsvId aId) + { + iServerEntry->SetEntry(aId); + iPopulateMessage = (iServerEntry->Entry().iType == KUidMsvMessageEntry); + iRootEntryId = aId; + } + +inline const TTime CLocalImRecvConvert::Date() const + { + return iTimeDate; + } + +inline const TMsvPriority CLocalImRecvConvert::Priority() const + { + return iImPriority; + } + +inline void CLocalImRecvConvert::SaveAllAttachments(TBool aSave) + { + iSavingAttachments=aSave; + } + +inline const TInt CLocalImRecvConvert::ReceiveError() const + { + return iReceiveError; + } + +inline CMsvServerEntry& CLocalImRecvConvert::ServerEntry() + { + return *iServerEntry; + } + +inline const TBool CLocalImRecvConvert::ValidCompleteHeader() const + { + return (iEmptyHeaderSize<(iOutputHeader->DataSize()) && iFinishedHeader); + } + +inline const CImHeader& CLocalImRecvConvert::Header() const + { + return *iOutputHeader; + } + +inline TBool CLocalImRecvConvert::NotFinishedRfc822Header() + { + return iNotFinishedRfc822Header; + } + +inline CImConvertCharconv& CLocalImRecvConvert::CharacterConverter() + { + return *iCharConv; + } + +/**************************************************************************** + Class CLocalMimeParser Inline functions +*****************************************************************************/ +inline void CLocalMimeParser::StoreMimeHeaderL(CMsvStore& entryStore) + { + iMimeHeader->StoreL(entryStore); + } + +inline void CLocalMimeParser::StoreMimeHeaderWithoutCommitL(CMsvStore& entryStore) + { + iMimeHeader->StoreL(entryStore); + } + +inline void CLocalMimeParser::RestoreMimeHeaderL(CMsvStore& entryStore) + { + RestoreMimeParserL(entryStore); + } + +inline TMimeContentType CLocalMimeParser::ContentType() + { + return iContentType; + } + +inline TImEncodingType CLocalMimeParser::ContentEncoding() + { + return iContentEncoding; + } + +inline const TBool CLocalMimeParser::MessageIsMime() const + { + return isMime; + } + +inline const TDesC& CLocalMimeParser::ContentDescription() const + { + return iContentDescription; + } + +inline const TPtrC CLocalMimeParser::ContentLocation() const + { + return iMimeHeader->ContentLocation(); + } + +inline const TPtrC8 CLocalMimeParser::ContentId() const + { + return iMimeHeader->ContentID(); + } + +inline const TPtrC8 CLocalMimeParser::ContentDisposition() const + { + return iMimeHeader->ContentDisposition(); + } + +inline const TBool CLocalMimeParser::IsTerminatingBoundary() const + { + return iTerminatingBoundary; + } + +inline const TBool CLocalMimeParser::BoundaryExists() const + { + return (iBoundaryLength!=0); + } + +inline const TBool CLocalMimeParser::BoundaryFound() const + { + return iBoundaryFound; + } + +inline const TInt CLocalMimeParser::MimeHeaderSize() const + { + return iEmptyMimeHeaderSize-iMimeHeader->Size(); + } + +inline const TInt CLocalMimeParser::ReceiveError() const + { + return iReceiveError; + } + +inline TBool CLocalMimeParser::IsMessageDigest() + { + return (ContentType()==EMimeMultipart && ContentSubType().Compare(KImcvDigest)==0); + } + +inline TBool CLocalMimeParser::MimeFieldsExist() const + { + return iMimeFieldsExist; + } + +inline void CLocalMimeParser::ResetMimeFieldsExist() + { + iMimeFieldsExist=EFalse; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/local_imutdll.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/local_imutdll.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,88 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __LOCAL_IMUTDLL_H__ +#define __LOCAL_IMUTDLL_H__ + +#ifndef __E32STD_H__ +#include +#endif + +#ifndef __BARSC_H__ +#include // RResourceFile +#endif + + +/** +Panics and errors codes for email message creation. +*/ +enum TImutErrorReason { KPanicNoRfc822Header = 1, + KPanicNoRichText, + EPanicNullTokenizer, + KPanicBoundaryTooLong, + KPanicUnknownSendingMethod, + KPanicInvalidSMTPLine, + KPanicAttachmentPathNotSet, + KPanicNoMimeClassAvailable, + KPanicUnknownAlgorithm, + KPanicSetAlgorithmLNotCalled, + KPanicNoResourceFile, + KPanicDescriptorToSmall, + KPanicReadLengthTooLarge, + KPanicFileNotFlushed, + KPanicEntryIsNotMessage, + KPanicMessageEntryNotCalled, + KPanicMessageEntryIdHasChanged, + KPanicServiceIdNotValid, + KPanicIncorrectResetState, + KPanicNoMimeHeader, + KPanicInvalidDefaultCharacterSet, + KPanicUnknownFolderType, + KPanicInvalidEncodingType, + EPanicInvalidHeaderState, + EImskSocketNotConnected, + EImskSocketStillActive, + EImskSocketOpen, + EImskUnknownState, + EImskInvalidPortNumber, + EImskInvalidSocketEncryptionMethod, + EImskSecurityFailed, + EImskDatabaseTypeUnspecified, + EImskNotSupported, + EImskUnknownBearer, + EImskNoTLSResponseString + }; + +// and some error codes +const TInt KErrCorruptHeader = 1; + +GLDEF_C void gPanic( TImutErrorReason aReason ); + +GLREF_C void OpenResourceFileL(RResourceFile& aFile, RFs& anFs); + +GLDEF_C void CloseResourceFile( TAny* aResourceFile ); + +#endif // __LOCAL_IMUTDLL_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/inc/t_smtpcreatenewmessagewithplainbodytext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/inc/t_smtpcreatenewmessagewithplainbodytext.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_SmtpCreateNewMessageWithPlainBodyText +* +* +*/ + + + + + + +#ifndef __T_SMTP_CREATENEWMESSAGE_WITHPLAINBODYTEXT_H__ +#define __T_SMTP_CREATENEWMESSAGE_WITHPLAINBODYTEXT_H__ + + +// User includes +#include "T_MsgAsyncStepSMTP.h" +#include "T_MsgSharedDataSmtp.h" + +// Epoc includes +#include +#include +#include + +// Literals used +_LIT(KSmtpCreateNewMessageWithPlainBodyText,"SmtpCreateNewMessageWithPlainBodyText"); + + +/* + * Implements a test step that create a message with plain body text + */ +class CT_SmtpCreateNewMessageWithPlainBodyText : public CT_MsgAsyncStepSMTP + { +public: + static CT_SmtpCreateNewMessageWithPlainBodyText* NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP); + ~CT_SmtpCreateNewMessageWithPlainBodyText(); + + // CTestStep implementation + virtual TVerdict doTestStepL(); + +private: + CT_SmtpCreateNewMessageWithPlainBodyText(CT_MsgSharedDataSmtp& aSharedDataSMTP); + void SetHeaderPartL(); + void GetDefaultAddressL(); + void PopulateBodyPartL(); + + virtual void ProgressL(TBool bFinal); + virtual void CancelStep(); + +private: + HBufC* iRecipientAddress; + CMsvOperation* iOperation; + }; +#endif // __T_SMTP_CREATENEWMESSAGE_WITHPLAINBODYTEXT_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/ImCltCvRecv.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/ImCltCvRecv.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,1444 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + +#include +#include + +#include +#include +#include +#include "ImCltCvRecv.h" + +#ifdef __WINS__ +#include +#include +#endif + +#ifndef __WINS__ +#include +#endif +#include +#include +#include + +#ifndef _MSG_NO_LOGGING +#define __IMUT_LOGGING +_LIT(KLogFilePath, "c:\\logs\\mailtext\\in.txt"); +_LIT8(KNewLogHeader, "\r\n------ New Receive Session ------\r\n"); +_LIT8(KFound, "found: "); +_LIT8(KPartLine, "unknown or part line"); +_LIT8(KEndOFHeader, "End of header"); +_LIT8(KSkippingData, "Skipping data"); + +_LIT8(KFoundMIMEBoundary, "MIME boundary"); +_LIT8(KRemoveBoundary, "Remove boundary"); +_LIT8(KRemovedBoundary, "Removed boundary"); +_LIT8(KSectionHeader, "Section header"); +_LIT8(KWritingToFile, "writing attachment"); +_LIT8(KWroteToFile, "wrote attachment"); +_LIT8(KFailedToWriteToFile, "Failed to write to attachment file"); +_LIT8(KFoundUUEStartBoundary, "UUE start boundary"); +_LIT8(KFoundUUEEndBoundary, "UUE end boundary"); +_LIT8(KReset, "Resetting CImRecvConvert"); +_LIT8(KReseted, "Resetting CImRecvConvert"); +_LIT8(KLastToken, "That was the last token"); +_LIT8(KResetForNewEntry, "Reset for a New Entry"); +_LIT8(KResetedForNewEntry, "Reseted for a New Entry"); +_LIT8(KCreatingEntry, "Creating Entry"); +_LIT8(KCreatedEntry, "Created Entry"); +_LIT8(KUpdatingEntry, "Updating Entry"); +_LIT8(KUpdatedEntry, "Updated Entry"); +_LIT8(KMoveToParentEntry, "Moved to parent entry"); +_LIT8(KMovedToParentEntry, "End of Moved to parent entry"); + +_LIT8(KIgnoringStreams, "Discarding streams"); +_LIT8(KStartMessageComplete, "Start Message Complete"); +_LIT8(KMessageComplete, "Message Complete"); +_LIT8(KHeaderComplete, "Message Header complete"); +_LIT8(KReturnReceiptTo, "return-receipt-To is set"); +_LIT8(KStartStoringEntryStream, "Starting Storing Entry Stream"); +_LIT8(KStoringEntryStream, "Storing Entry Stream"); +_LIT8(KDoneStoringEntryStream, "Done Storing Entry Stream"); + +#endif // _MSG_NO_LOGGING + +// uncomment the line below if logging is to be enabled + +#if defined(__IMUT_LOGGING) +#define RECVLOG(text) (iImcvLog?iImcvLog->AppendComment(text):void(0)); +#define RECVLOG_OUT(text) (iImcvLog?iImcvLog->AppendOut(text):void(0)); +#define LOGGING(string1, string2) (Logging(string1, string2)); +#else +#define RECVLOG(text) (void(0)); +#define RECVLOG_OUT(text) (void(0)); +#define LOGGING(string1, string2) (void(0)); +#endif + + +const TInt KBodyTextChunkSizeBytes = 512; + + +/** +NewLC() +Static factory constructor. Uses two phase construction +and pushes the newly created object into the Cleanup stack. + +@param anFs +@param aClientEntry +@param aMsgType +@param aEmailServiceId +@return +*/ + CImCltRecvConvert* CImCltRecvConvert::NewLC(RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId) + { + CImCltRecvConvert* self = new (ELeave) CImCltRecvConvert(anFs,aClientEntry,aMsgType,aEmailServiceId); + CleanupStack::PushL(self); + self->ConstructL(anFs); + return self; + } + + +/** +NewL() +Static factory constructor. Uses two phase construction. + +@param anFs +@param aClientEntry +@param aMsgType +@param aEmailServiceId +@return +*/ + CImCltRecvConvert* CImCltRecvConvert::NewL(RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId) + { + CImCltRecvConvert* self = CImCltRecvConvert::NewLC(anFs,aClientEntry,aMsgType,aEmailServiceId); + CleanupStack::Pop(); + return self; + } + + +/** +ConstructL() + +@param anFs +*/ +void CImCltRecvConvert::ConstructL(RFs& anFs) + { + iFsSession = &anFs; + + RResourceFile resFile; + OpenResourceFileL(resFile, anFs); // NB leaves if file not found + + // make sure the resource file will be closed if anything goes wrong + // CloseResourceFile is declared in IMUTDLL.H and defined in IMUTDLL.CPP + TCleanupItem close( CloseResourceFile, &resFile ); + CleanupStack::PushL( close ); + + // Read iStore8BitData flag. + HBufC8* buf = resFile.AllocReadLC(STORE_8BIT_BODY_TEXT); + TResourceReader reader; + reader.SetBuffer(buf); + iStore8BitData = reader.ReadInt8(); + CleanupStack::PopAndDestroy(buf); + + buf = resFile.AllocReadLC(REMOVED_ATTACHMENT_TAG); + reader.SetBuffer(buf); + iRemovedAttachmentTag = reader.ReadTPtrC().AllocL(); + CleanupStack::PopAndDestroy(buf); + + buf = resFile.AllocReadLC(DEFAULT_ATTACHMENT_NAME); + reader.SetBuffer(buf); + iDefaultAttachmentName = reader.ReadTPtrC().AllocL(); + CleanupStack::PopAndDestroy(buf); + buf = resFile.AllocReadLC(PARTIAL_DOWNLOAD_FOOTER_MESSAGE); + reader.SetBuffer(buf); + iPartialEmailFooter = (reader.ReadTPtrC()).AllocL(); + CleanupStack::PopAndDestroy(buf); + buf = NULL; + CleanupStack::PopAndDestroy(&resFile); + + // create CImHeader object to store Rfc822 header info... + iOutputHeader = CImHeader::NewLC(); + CleanupStack::Pop(); + + if (iStore8BitData) + { + //Create body text storage helper. + iBodyText = CMsvBodyText::NewL(); + } + else + { + // create CRichText object to store body... + iParaLayer = CParaFormatLayer::NewL(); + iCharLayer = CCharFormatLayer::NewL(); + iOutputBody = CRichText::NewL(iParaLayer, iCharLayer); + } + + // Create Rfc822 filter object... + iRfc822Token = CLocalRfc822Token::NewLC(); + CleanupStack::Pop(); + iRfc822Token->SetImRecvConvert(this); + + // Create converter objects... + iCharacterConverter = CCnvCharacterSetConverter::NewL(); + iCharConv = CImConvertCharconv::NewL(*iCharacterConverter, anFs); + iHeaderConverter = CImConvertHeader::NewL(*iCharConv); + + + // Create MIME filter object... + iMimeParser = CLocalMimeParser::NewL(*this); + + + // logfile stuff + iImcvLog=NULL; + +#ifdef __IMUT_LOGGING + TRAP_IGNORE(iImcvLog=CImLog::NewL(KLogFilePath, EAppend)); +#endif + + iRootEntryId = EntryId(); + + iNotFinishedRfc822Header = ETrue; + + iEmailEntry = new (ELeave) TMsvEmailEntry; + iReceivingHeadersOnly=EFalse; + + iParent = new (ELeave) CArrayFixFlat(3); + + iFirstBoundaryReached=EFalse; + + ResetL(); + + RECVLOG( KNewLogHeader ) + } + + +/** +CImCltRecvConvert() + +@param anFs +@param aClientEntry +@param aMsgType +@param aEmailServiceId +*/ + +CImCltRecvConvert::CImCltRecvConvert(RFs& anFs,CMsvEntry* aClientEntry,TUid aMsgType,TMsvId aEmailServiceId) + : CLocalImRecvConvert(anFs,iNullServerEntry,aMsgType,aEmailServiceId), + iClientEntry(aClientEntry) + { + __DECLARE_NAME(_S("CImCltRecvConvert")); + } + + +/** +~CImCltRecvConvert() +Destructor +*/ +CImCltRecvConvert::~CImCltRecvConvert() + { + } + + +/** +ResetForHeadersL() +*/ + void CImCltRecvConvert::ResetForHeadersL() + { + // This function is used in preference to ResetL() when the owner + // only wishes to create email entries in the remote mailbox - + // they do not wish to create any stores associated with the message + // entry + ResetL(); + iReceivingHeadersOnly = ETrue; + } + + +/** +ResetL() +*/ + void CImCltRecvConvert::ResetL() + { + RECVLOG(KReset) + + iBodyId=KMsvNullIndexEntryId; + iSizeOfAttachmentsRemoved=0; + iClientEntry->SetEntryL(iRootEntryId); + + iReceivingHeadersOnly=EFalse; + iMessageEntryCalled=EFalse; + iLeaveError=KErrNone; + iCurrentMultipartFolderEntryId=0; + + TParentDetails parent; + parent.iAttachment=parent.iMHTML=EFalse; + parent.iSize=0; + iParent->InsertL(0,parent); + + if(iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + iEmailEntry = new (ELeave) TMsvEmailEntry; + + // "iSavingAttachments" commands this code to store attachments in files. + // Currently this is always set to ETrue as we intend to save all attachments + // However, if the user wishes to discard (ie do not save) any + // attachments in incoming email messages - then this member variable + // may be set to EFalse by the inline accessor function "SaveAllAttachments(TBool)" + iSavingAttachments=ETrue; + iAttachmentFileState=EFileIsClosed; + + // iLeaveError contains the error value of any functions that leaves (ie CRichText::InsertL) + // or any returned error value that generates a leave from within CImRecvConvert (ie RFile::Create) + + iGlobalIndent=0; + iLongestLine=50; + + iImPriority=EMsvMediumPriority; + if(NULL!=iImcvUtils) + { + delete iImcvUtils; + iImcvUtils=NULL; + } + iImcvUtils=CImcvUtils::NewL(); + + // reset internal date + iTimeDate.HomeTime(); + + iMimeParser->Reset(); + + iNewEntry=EFalse; //EFalse if the entry was moved to. ETrue if the entry was just created + iTopMessagePart=KMsvRootIndexEntryId; + ResetForNewEntryL(iDefaultEntryType); + iMIMEPart_822Header = EFalse; + iPartialEmail=EFalse; + + RECVLOG(KReseted) + } + + +/** +ParseNextFieldL() + +@param aSourceLine +@return +*/ + TInt CImCltRecvConvert::ParseNextFieldL(const TDesC8& aSourceLine) + { + __ASSERT_DEBUG(iRootEntryId!=KMsvRootIndexEntryId, gPanic(KPanicServiceIdNotValid)); + RECVLOG_OUT(aSourceLine); + + if ((iLeaveError == KErrNone) && (iClientEntry->Entry().Id() == KMsvRootIndexEntryId)) + { + iClientEntry->SetEntryL(iSavedEntryId); + } + + if(iLeaveError==KErrNone) + { + TRAP(iLeaveError, ParseNextLineL(aSourceLine)); + } + + if (iLeaveError==KErrNone) + iSavedEntryId = iClientEntry->Entry().Id(); + TUid type = iClientEntry->Entry().iType; + if( type != KUidMsvMessageEntry && + type != KUidMsvEmailTextEntry && + type != KUidMsvEmailHtmlEntry && + type != KUidMsvAttachmentEntry) + { + iClientEntry->SetEntryL(KMsvRootIndexEntryId); + } + + + return iLeaveError; + } + + +/** +ParseNextLineL() + +@param aSourceLine +*/ +void CImCltRecvConvert::ParseNextLineL(const TDesC8& aSourceLine) + { + iParsedMimeBoundaryLast=0; + if(!iFinishedHeader) + { + // start by getting the next token from the header + iRfc822Token->ParseNextLineL(aSourceLine); + + switch(iRfc822Token->iHeaderPart) + { + case CLocalRfc822Token::EUnknown: + case CLocalRfc822Token::ENotFinished: + RECVLOG(KPartLine) + break; + case CLocalRfc822Token::EFrom: + iOutputHeader->SetFromL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvFromPrompt); + break; + case CLocalRfc822Token::EReplyTo: + iOutputHeader->SetReplyToL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvReplyToPrompt); + break; + case CLocalRfc822Token::ETo: + ParseRecipientListL(iOutputHeader->ToRecipients()); + LOGGING(KFound,KImcvToPrompt); + break; + case CLocalRfc822Token::ECc: + ParseRecipientListL(iOutputHeader->CcRecipients()); + LOGGING(KFound,KImcvCcPrompt); + break; + case CLocalRfc822Token::EBcc: + ParseRecipientListL(iOutputHeader->BccRecipients()); + LOGGING(KFound,KImcvBccPrompt); + break; + case CLocalRfc822Token::ESubject: + iOutputHeader->SetSubjectL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvSubjectPrompt); + break; + case CLocalRfc822Token::EDate: + iRfc822Date.ParseDateField(*iRfc822Token->OutputLine() , iTimeDate); + if (iEmailEntry->Id() != iTopMessagePart) + { + iEmailEntry->iDate = iTimeDate; + } + LOGGING(KFound,KImcvDatePrompt); + break; + case CLocalRfc822Token::EMessageId: + iOutputHeader->SetImMsgIdL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvMessageIdPrompt); + break; + case CLocalRfc822Token::EPriority: + iImPriority=iImcvUtils->EvaluatePriorityText(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvPriorityPrompt); + break; + case CLocalRfc822Token::EReturnReceiptTo: + iOutputHeader->SetReceiptAddressL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KReturnReceiptTo); + break; + case CLocalRfc822Token::EEndOfHeader: + // the next line goes in the body part + iFinishedHeader = ETrue; + RECVLOG(KEndOFHeader) + break; + default: + RECVLOG(KEndOFHeader) + break; + } + + + if(iRfc822Token->iHeaderPart != CLocalRfc822Token::ENotFinished) + { + // Now that we've used the data, we also need to clear the output line from the tokeniser.... + iRfc822Token->OutputLine()->Des() = KNullDesC8; + + // whatever part we just read, we may also have read the empty line that separates + // the header from the body + if((iFinishedHeader = iRfc822Token->LastToken()) != EFalse) //iFinishedHeader set to 1 on CRLF- + { + RECVLOG(KLastToken); + iNotFinishedRfc822Header = EFalse; + + iHeaderConverter->SetMessageType(iMimeParser->MessageIsMime()); + iHeaderConverter->DecodeAllHeaderFieldsL(*iOutputHeader); + + if (iMimeParser->MessageIsMime()) + { + EndOfHeaderMIMEProcessingL(); + } + else + { + EndOfHeaderProcessingL(); + } + + if (iStore8BitData) + { + iBodyText->SetDefaultCharacterSet(iCharConv->SystemDefaultCharset()); + if ( iMimeParser->MessageIsMime() && iMimeParser->ContentType()==EMimeText ) + { + iBodyText->SetCharacterSet(iMimeParser->CurrentCharsetL()); + } + else + { + iBodyText->SetCharacterSet(0); + } + } + else + { + // Get charset for decoding. + if ( iMimeParser->MessageIsMime() && iMimeParser->ContentType()==EMimeText ) + { + iCharConv->PrepareToConvertToFromOurCharsetL(iMimeParser->CurrentCharsetL()); + } + else + { + iCharConv->PrepareToConvertToFromOurCharsetL(iCharConv->SystemDefaultCharset()); + } + } + } + } + } + else if (iReceivingHeadersOnly==EFalse) + { + //Set to EFalse when a single line is to be skipped (ie boundary line) + iCommitLine=ETrue; + + // read one line of the message body if I am processing a whole email message + if(iMimeParser->MessageIsMime()) + { + ParseMimeLineL(aSourceLine); + } + else + { + ParseBodyLineL(aSourceLine); + } + + if((iCommitLine)&&(!iSkipData)) + { + DecodeAndStoreLineL(aSourceLine); + } + } + } + + +/** +MessageEntryDetailsL() + +@return +*/ + TMsvEmailEntry CImCltRecvConvert::MessageEntryDetailsL() + { + + iMessageEntryCalled=ETrue; + CloseAttachmentFileL(); + + // A message requiring manual termination and not part way through a MIME part header + if( iTopMessagePart==EntryId() && iFinishedHeader) + { + StoreEntryStreamsL(KStore822Header|KStoreMIMEHeader); + } + else + { + iClientEntry->SetEntryL(iTopMessagePart); + if(iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + + iEmailEntry = new (ELeave) TMsvEmailEntry(iClientEntry->Entry()); + } + + return *iEmailEntry; + } + + +/** +MessageCompleteL() + +@param aEmailEntry +*/ + void CImCltRecvConvert::MessageCompleteL(TMsvEmailEntry aEmailEntry) + { + if (iClientEntry->Entry().Id() == KMsvRootIndexEntryId) + { + iClientEntry->SetEntryL(iSavedEntryId); + } + + __ASSERT_DEBUG(iMessageEntryCalled, gPanic(KPanicMessageEntryNotCalled)); + __ASSERT_DEBUG(aEmailEntry.Id()==iTopMessagePart, gPanic(KPanicMessageEntryIdHasChanged)); + + // Called ResetL() to reset object instead of ResetForHeadersL() + __ASSERT_DEBUG(iReceivingHeadersOnly, gPanic(KPanicIncorrectResetState)); + + if(iEmailEntry) + { + if (iEmailEntry->Id()) + { + if(iLeaveError==KErrNone) + { + // a remote email header cannot have any attachments or be marked as complete... + aEmailEntry.SetAttachment(EFalse); + aEmailEntry.SetMHTMLEmail(EFalse); + aEmailEntry.SetComplete(EFalse); + iClientEntry->SetEntryL(aEmailEntry.Id()); + RECVLOG(KHeaderComplete) + } + else + { + if (!iPopulateMessage) + { + TMsvId currentId = EntryId(); + iClientEntry->SetEntryL(iClientEntry->Entry().Parent()); + iClientEntry->DeleteL(currentId); + } + User::Leave(iLeaveError); + } + } + } + + iSavedEntryId = iClientEntry->Entry().Id(); + iClientEntry->SetEntryL(KMsvRootIndexEntryId); + } + + +/** +MessageCompleteL() + +@return +*/ + TMsvId CImCltRecvConvert::MessageCompleteL() + { + RECVLOG(KStartMessageComplete) + if (iClientEntry->Entry().Id() == KMsvRootIndexEntryId) + { + iClientEntry->SetEntryL(iSavedEntryId); + } + if (iParsedMimeBoundaryLast==EFalse && iAttachmentFileState==EFileIsOpen && iPartialEmail!=EFalse) + { + iAttachmentFileState=EFileTopIncomplete; + } + + CloseAttachmentFileL(); + + if(!iEmailEntry->Id()) + { + return 0; + } + + if(iLeaveError!=KErrNone) + { + User::Leave(iLeaveError); + } + + if (EntryId()!=iTopMessagePart) + { + iEmailEntry->SetComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + MoveToParentEntryL(); + + if( iTopMessagePart==EntryId() && iFinishedHeader) + { + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetBodyTextComplete(ETrue); + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetSendingState(KMsvSendStateWaiting); + // Main message. + StoreMessageEntryDetailsL(); + return iEmailEntry->Id(); + } + else if(iEmailEntry->iType == KUidMsvMessageEntry) + { + StoreMessageEntryDetailsL(); + MoveToParentEntryL(); + StoreMessageEntryDetailsL(); + } + } + + iClientEntry->SetEntryL(iTopMessagePart); + if(NULL!=iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + iEmailEntry = new (ELeave) TMsvEmailEntry(iClientEntry->Entry()); + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + + iEmailEntry->SetSendingState(KMsvSendStateWaiting); + + + iEmailEntry->SetAttachment(iParent->At(0).iAttachment); + iEmailEntry->SetMHTMLEmail(iParent->At(0).iMHTML); + + if(iEmailEntry->MHTMLEmail() == EFalse && iEmailEntry->Attachment() == EFalse && iRelatedAttachments !=EFalse) + { + iEmailEntry->SetAttachment(ETrue); + } + iRelatedAttachments=EFalse; + + iEmailEntry->iSize=iParent->At(0).iSize; + iEmailEntry->SetMessageFolderType(iParent->At(0).iFolder); + + iClientEntry->ChangeL(*iEmailEntry); + + iSavedEntryId = iClientEntry->Entry().Id(); + iClientEntry->SetEntryL(KMsvRootIndexEntryId); + RECVLOG(KMessageComplete) + return iEmailEntry->Id(); + } + + + /** +ParseMimeLineL() + +@param aSourceLine +*/ +void CImCltRecvConvert::ParseMimeLineL(const TDesC8& aSourceLine) + { + iTopPartialDownloadCounter+=aSourceLine.Length(); // increment the number of bytes of the attachment downloaded so far + if(!iMimeParser->IsBoundary(aSourceLine)) + { + if(!iPrepared) // first line of the body + { + if (iMIMEPart_822Header) + { + // missing 822 part header. Revert to default. + EndOfHeaderMIMEProcessingL(); + iMIMEPart_822Header=EFalse; + } + + PrepareDecoder(); + } + + if (CheckUUEStartL(aSourceLine)) + { + iAlgorithm=EUUDecode; + iCommitLine=EFalse; + } + } + else + { + iParsedMimeBoundaryLast=ETrue; + // found a MIME boundary so store the current parts data and update its entry. + + RECVLOG(KFoundMIMEBoundary) + iCommitLine=EFalse; //Dont store this line as its a boundary. + + if(!iFirstBoundaryReached && iEntryType==EFolderEntry) + { + iFirstBoundaryReached=ETrue; + if (!iCurrentMultipartFolderEntryId) + iCurrentMultipartFolderEntryId = EntryId(); + MoveToParentEntryL(); + ResetForNewEntryL(iDefaultEntryType); + return; // First boundary encountered. + } + + CloseAttachmentFileL(); + if(iNewEntry) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreMIMEHeader | KStoreBodyText); + if (iBodyId==KMsvNullIndexEntryId) + { + iBodyId=iEmailEntry->Id(); + } + } + + iSkipData = EFalse; + + // check whether we just found the terminating boundary... + if(iMimeParser->IsTerminatingBoundary()) + { + RECVLOG(KRemoveBoundary); + iMimeParser->RemoveBoundary(); + RECVLOG(KRemovedBoundary); + iMIMEPart_822Header = EFalse; + + if (EntryId()!=iTopMessagePart) + { + if(iEmailPart==KParentPart) + { + // rfc822 message which is not not multipart. + iEmailPart=KNoPart; + MoveToParentEntryL(); + + // Embedded message + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + else if (iEmailEntry->iType==KUidMsvMessageEntry) + { + // Moving up from a multi embedded rfc822 message. + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + } + + MoveToParentEntryL(); + iEntryDataSize = iEmailEntry->iSize; + + if(iClientEntry->Entry().iType == KUidMsvFolderEntry) + { + iCurrentMultipartFolderEntryId = EntryId(); + } + else if (EntryId()!=iTopMessagePart) + { + if(iEmailEntry->iType == KUidMsvMessageEntry) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + MoveToParentEntryL(); + iEntryDataSize += iEmailEntry->iSize; + } + + if(!iNewEntry) + ResetForNonMimeEntryL(); + + RECVLOG(KSkippingData) + iSkipData = ETrue; + iDefaultEntryType=ETextEntry; + } + else // if regular boundary + { + RECVLOG(KSectionHeader) + if(iEmailPart==KParentPart && EntryId()!=iTopMessagePart) + { + // rfc822 message which is not not multipart. + iEmailPart=KNoPart; + MoveToParentEntryL(); + // Embedded message + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + + if (!iCurrentMultipartFolderEntryId && iEmailPart==KNoPart) + MoveToParentEntryL(); + + ResetForNewEntryL(iDefaultEntryType); + } + } + } + + +/** +EndOfHeaderProcessingL() +*/ +void CImCltRecvConvert::EndOfHeaderProcessingL() + { + CreateEntryL(); + StoreEntryStreamsL(KStore822Header); + iEntryDataSize = 0; + } + + +/** +ParseBodyLineL() + +@param aSourceLine +*/ +void CImCltRecvConvert::ParseBodyLineL(const TDesC8& aSourceLine) + { + TInt len=aSourceLine.Length(); + iTopPartialDownloadCounter+=len; // added for TOP. increment the number of bytes of the attachment downloaded so far + + if (iBodyId==KMsvNullIndexEntryId) + { + iBodyId=iEmailEntry->Id(); + } + + TMsvId id=0; + // first check whether this line is a UUEncode start boundary + if(CheckUUEStartL(aSourceLine)) + { + RECVLOG(KFoundUUEStartBoundary) + TFileName tempStore = iAttachmentName; + id = EntryId(); + if (!iNewNonMIMEBodyPart || id!=iTopMessagePart) // main message entry + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + } + MoveToParentEntryL(); + if ( !CreateNonMIMEFolderEntryL(id)) + { + ResetForNonMimeEntryL(); + } + + iEntryType = EAttachmentEntry; + CreateEntryL(); + SetAttachmentName(tempStore); + + iCurrentPartIsRichText = EFalse; + iAlgorithm=EUUDecode; + iCommitLine=EFalse; + if(!iSavingAttachments) + { + RECVLOG(KSkippingData) + iSkipData=ETrue; + } + iNewNonMIMEBodyPart=EFalse; + } + else if(aSourceLine.CompareF(KImcvUueEnd)==0) // Checks for the UUEncode end boundary + { + RECVLOG(KFoundUUEEndBoundary) + CloseAttachmentFileL(); + StoreEntryDataL(); + MoveToParentEntryL(); + iSkipData = EFalse; + iCommitLine=EFalse; + iNewNonMIMEBodyPart=ETrue; + } + else if (iNewNonMIMEBodyPart && !( len==2 && aSourceLine[0]==KImcvCR && aSourceLine[1]==KImcvLF )) + { + id = EntryId(); + if (!iNewNonMIMEBodyPart || id!=iTopMessagePart) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + } + MoveToParentEntryL(); + if ( !CreateNonMIMEFolderEntryL(id)) + ResetForNonMimeEntryL(); + iAlgorithm=ENoAlgorithm; + iEntryType = ETextEntry; + CreateEntryL(); + iNewNonMIMEBodyPart=EFalse; + } + } + + +/** +CreateNonMIMEFolderEntryL() + +@param aCurrentId +@return +*/ +TBool CImCltRecvConvert::CreateNonMIMEFolderEntryL(TMsvId aCurrentId) + { + if ( aCurrentId==iTopMessagePart || iCurrentMultipartFolderEntryId ) + return EFalse; + + iClientEntry->SetEntryL(iTopMessagePart); + iEmailPart = KMultiPart; + iEntryType = EFolderEntry; + CreateEntryL(); + + TMsvId destId = EntryId(); + iClientEntry->SetEntryL(iTopMessagePart); + iClientEntry->MoveL(aCurrentId, destId); + iClientEntry->SetEntryL(aCurrentId); + iClientEntry->SetEntryL(iClientEntry->Entry().Parent()); + + iEmailEntry->SetMessageFolderType(iMimeParser->MessageFolderType()); + + RECVLOG(KResetForNewEntry) + + iMimeParser->ResetForNewEntry(); + + if (iStore8BitData) + { + //Create a buffer to hold the body text as it is down loaded. + delete iBodyBuf; + iBodyBuf = NULL; + iBodyBuf = CBufFlat::NewL(KBodyTextChunkSizeBytes); + } + else + { + iOutputBody->Reset(); + } + + ResetForNonMimeEntryL(); + RECVLOG(KResetedForNewEntry) + return ETrue; + } + + +/** +CreateAttachmentL() + +@return +*/ +TBool CImCltRecvConvert::CreateAttachmentL() + { + // added to support TOP command. Reset the download counter each time we have a new + // attachment + iTopPartialDownloadCounter = 0; + + // Need to check that the complete filename: iAttachmentFullPath & iAttachmentName + // does not exceed 256 characters. Greater than this and it cannot be saved as a file. + + TBool addExtension = ETrue; + if(iAttachmentName.Length() == 0) //i.e. problem with Attachment name + { + // No filename present. Generate one. + if(iMimeParser->ContentDescription().Length()!=0) + { + // Use ContentDescription() as default name + // - as this is more informative than the default + + TLex sourceLineLex = iMimeParser->ContentDescription(); + ExtractFilename(sourceLineLex, iAttachmentName); + } + else + { + iAttachmentName = *iDefaultAttachmentName; + } + + } + else + { + // Filename present. Check it is valid. + ReplaceInvalidCharacters(iAttachmentName); + if (iAttachmentName.Locate(KImcvFullStop)!=KErrNotFound) + { + addExtension=EFalse; + } + + } + if (addExtension) + { + AddFileExtension(); + } + CMsvStore* store = iClientEntry->EditStoreL(); + CleanupStack::PushL(store); + CMsvAttachment* attachment = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + CleanupStack::PushL(attachment); + attachment->SetAttachmentNameL(iAttachmentName); + + RFile file; + store->AttachmentManagerExtensionsL().CreateAttachmentL(iAttachmentName,file,attachment); + CleanupStack::Pop(attachment); + + iAttachmentFile.SetFileHandle(file,TImAttachmentFile::EImFileWrite); + store->CommitL(); + CleanupStack::PopAndDestroy(store); // store + + if(KErrNone!=iLeaveError) + { + iAttachmentFileState=EFileFailedToOpen; + CloseAttachmentFileL(); + return EFalse; + } + + iAttachmentFileState=EFileIsOpen; + return ETrue; + } + + +/** +WriteToAttachmentL() + +@param text +*/ +void CImCltRecvConvert::WriteToAttachmentL(const TDesC8& text) + { + if ( (iAttachmentFileState==EFileIsClosed || iAttachmentFileState==EFileNotOpen) + && CreateAttachmentL() && iEntryType!=EHtmlEntry) + iEmailEntry->SetAttachment(ETrue); + + if(iAttachmentFileState!=EFileIsOpen || !text.Length()) + { + RECVLOG(KSkippingData) + iSkipData = ETrue; + } + + // write decoded data into a file if there is any data there to write. + + RECVLOG(KWritingToFile) + + // Convert text before writing to attachment. + + // Store as Binary files.. + iLeaveError=iAttachmentFile.WriteFile(text); + + if(KErrNone==iLeaveError) + { + iEntryDataSize += text.Length(); + } + + else + { + // the file write failed (eg.there is no space left), set new file state and skip + RECVLOG(KFailedToWriteToFile) + iAttachmentFileState=EFileIsIncomplete; + CloseAttachmentFileL(); + } + RECVLOG(KWroteToFile) + } + + +/** +StoreEntryStreamsL() +*/ +void CImCltRecvConvert::StoreEntryStreamsL() + { + StoreEntryStreamsL(KStoreBodyText | KStore822Header | KStoreMIMEHeader); + } + + + +/** +StoreEntryStreamsL() + +@param aSettings +*/ +void CImCltRecvConvert::StoreEntryStreamsL(TInt aSettings) + { + RECVLOG(KStartStoringEntryStream); + if (iReceivingHeadersOnly==EFalse) + { + CMsvStore* entryStore = NULL; + TBool commitStore = EFalse; + + TRAPD(error, entryStore = iClientEntry->EditStoreL()); + if(error==KErrNone) // if store does not exist then the entry is the wrong type + { + CleanupStack::PushL(entryStore); + + if (aSettings & KStore822Header) + { + Store822HeaderL(*entryStore, commitStore); + } + + if (aSettings & KStoreMIMEHeader) + { + StoreMIMEHeaderL(*entryStore, commitStore); + } + + if (aSettings & KStoreBodyText) + { + StoreBodyTextL(*entryStore, commitStore); + } + // only commit to the store if I wrote something into it + if (commitStore) + { + RECVLOG(KStoringEntryStream); + entryStore->CommitL(); + } + + StoreEntryDataL(); + CleanupStack::PopAndDestroy(); //entryStore + } + + } + RECVLOG(KDoneStoringEntryStream); + } + + +/** +StoreEntryDataL() + +@return +*/ +TBool CImCltRecvConvert::StoreEntryDataL() + { + // NB function should only be called if a whole email is being processed + TBool commit=EFalse; + RECVLOG(KUpdatingEntry) + + if (iEmailEntry->iType==KUidMsvMessageEntry) + { + iParent->At(0).iSize += iEntryDataSize; + } + else + { + iEmailEntry->iSize += iEntryDataSize; + if (iEntryType==EAttachmentEntry || iEntryType==EHtmlEntry) + { + iEmailEntry->iDetails.Set(iAttachmentName); + } + } + iClientEntry->ChangeL(*iEmailEntry); + + RECVLOG(KUpdatedEntry) + return commit; // if I wrote data into the store, tell owner + } + + +/** +MoveToParentEntryL() +*/ +void CImCltRecvConvert::MoveToParentEntryL() + { + // This function changes the context to the current entry's parent entry. + RECVLOG(KMoveToParentEntry) + + // Change context to the parent entry + if (EntryId()==iTopMessagePart) + { + return; // Already there. + } + + iClientEntry->SetEntryL(iClientEntry->Entry().Parent()); + + iNewEntry = EFalse; + + // only read and write to store if this is a real email message; headers stored in + // the remote mailbox do not require any store information. + if (iReceivingHeadersOnly) + { + RECVLOG(KIgnoringStreams) + return; + } + + TBool allowAttachmentFlag=ETrue; + if(iClientEntry->Entry().iType == KUidMsvFolderEntry) + { + // Current entry is a folder entry signifying a MIME multipart. + // Change context to the parent entry + TMsvEmailEntry entry = (TMsvEmailEntry) iClientEntry->Entry(); + iCurrentMultipartFolderEntryId = EntryId(); + allowAttachmentFlag = !(entry.MessageFolderType()==EFolderTypeRelated || + entry.MessageFolderType()==EFolderTypeAlternative); + + + if (EntryId()!=iTopMessagePart) + { + iClientEntry->SetEntryL(iClientEntry->Entry().Parent()); + } + } + + TBool childIsAttachment = (iEmailEntry->Attachment() || iEmailEntry->iType == KUidMsvMessageEntry) ? ETrue:EFalse; + TBool childIsMHTML=EFalse; + // Dont want the flag propogated 'up' past a message entry. + if(iEmailEntry->iType != KUidMsvMessageEntry) + { + childIsMHTML = iEmailEntry->MHTMLEmail() ? ETrue:EFalse; + } + //Make the parent entry the current entry + if(iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + iEmailEntry = new (ELeave) TMsvEmailEntry(iClientEntry->Entry()); + + if (!iParent->Count()) + { + TParentDetails parentDetails; + iParent->InsertL(0,parentDetails); + } + + if (! iParent->At(0).iAttachment) + { + iParent->At(0).iAttachment=(childIsAttachment && allowAttachmentFlag)? ETrue:EFalse; + + // if we aren't allowing attachments because of the folder type + // remember there where attachments and check at the end whether + // it was an MHTML message or not. + if(childIsAttachment && !allowAttachmentFlag) + { + iRelatedAttachments=ETrue; + } + } + if (!iParent->At(0).iMHTML) + { + iParent->At(0).iMHTML = childIsMHTML ? ETrue:EFalse; + } + iParent->At(0).iSize += iEntryDataSize; + + iOutputHeader->Reset(); + iEmptyHeaderSize=iOutputHeader->DataSize(); + iMimeParser->ResetForNewEntry(); + + iEntryDataSize=0; + + RECVLOG(KMovedToParentEntry) + } + + +/** +CreateEntryL() +Creates a new entry. +*/ +void CImCltRecvConvert::CreateEntryL() + { + RECVLOG(KCreatingEntry); + if(NULL!=iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + + if (iCurrentMultipartFolderEntryId) + { + iClientEntry->SetEntryL(iCurrentMultipartFolderEntryId); + iCurrentMultipartFolderEntryId=0; + } + + iEmailEntry = new (ELeave) TMsvEmailEntry; + + TValidEntryType previousEntryType = iEntryType; + if ((iTopMessagePart==KMsvRootIndexEntryId) || iMIMEPart_822Header) + { + // At the main header, want to create a message entry. + // The stored iEntryType will indicate ( from header info) the next entry to be created. + // Save temporarily. + // Also applies to the special case where a message contains ony 1 embedded message. + + previousEntryType=iEntryType; + iEntryType=EMessageEntry; + } + + if ((iPopulateMessage) && (iTopMessagePart==KMsvRootIndexEntryId)) + // If this is the root of a message that is being populated then do not create it. + { + iClientEntry->SetEntryL(iRootEntryId); + *iEmailEntry = iClientEntry->Entry(); + iTopMessagePart=iRootEntryId; + + // Delete all the children of the message entry. This is needed because if the + // message has been purged, the entries will still exist. When the message is populated, + // new entries are created. If the original entries are not removed, then duplicate + // entries will exist. + CMsvEntrySelection* children = iClientEntry->ChildrenL(); + CleanupStack::PushL(children); + if (children->Count()) + { + TMsvLocalOperationProgress prog; + iClientEntry->DeleteL(*children,prog); + } + CleanupStack::PopAndDestroy(children); + } + else + { + iEmailEntry->iMtm=iNewMsgType; + iEmailEntry->iServiceId = iEmailServiceId; + iEmailEntry->SetComplete(EFalse); + iEmailEntry->iSize = 0; + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetReceipt(EFalse); + + iEmailEntry->SetVCard(iMimeParser->VCard()); + iEmailEntry->SetVCalendar(iMimeParser->VCalendar()); + iEmailEntry->SetMessageFolderType(iMimeParser->MessageFolderType()); + iEmailEntry->SetPriority(iImPriority); + iEmailEntry->SetNew(EFalse); + + if(iOutputHeader->ReceiptAddress().Length()>0) + { + iEmailEntry->SetReceipt(ETrue); + } + + iEmailEntry->iDate=iTimeDate; + switch(iEntryType) + { + case EMessageEntry: + if(iTopMessagePart==KMsvRootIndexEntryId) + { + iEmailEntry->SetUnread(ETrue); + iEmailEntry->SetNew(ETrue); + iEmailEntry->SetVisible(EFalse); + iEmailEntry->SetInPreparation(ETrue); + iEmailEntry->SetSendingState(KMsvSendStateNotApplicable); + } + else + { + TParentDetails parentDetails; + parentDetails.iMHTML=EFalse; + parentDetails.iAttachment=EFalse; + parentDetails.iSize=0; + iParent->InsertL(0,parentDetails); + } + iEmailEntry->iType=KUidMsvMessageEntry; + iEmailEntry->iDetails.Set(iOutputHeader->From()); + iEmailEntry->iDescription.Set(iOutputHeader->Subject()); + break; + case EFolderEntry: + iEmailEntry->iType=KUidMsvFolderEntry; + if (iMimeParser->MessageFolderType()==EFolderTypeUnknown) + { + // Get folder type of parent (the message) + TMsvEmailEntry entry=iClientEntry->Entry(); + iEmailEntry->SetMessageFolderType(entry.MessageFolderType()); + } + break; + case EAttachmentEntry: + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + break; + case ETextEntry: + if ( iMimeParser->ContentDisposition()!=KImcvAttachment) + iEmailEntry->iType=KUidMsvEmailTextEntry; + else + { + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + } + break; + case EHtmlEntry: + iEmailEntry->iType=KUidMsvEmailHtmlEntry; + // If disposition not set or is inline.. + if ( iMimeParser->ContentDisposition()==KImcvAttachment) + iEmailEntry->iType=KUidMsvAttachmentEntry; + else + iEmailEntry->SetMHTMLEmail(ETrue); + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + break; + default: + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + } + + iClientEntry->CreateL(*iEmailEntry); + iEmailEntry->iServiceId = iEmailServiceId; + iClientEntry->SetEntryL(iEmailEntry->Id()); + if(iTopMessagePart==KMsvRootIndexEntryId) + { + iTopMessagePart=iEmailEntry->Id(); + } + } + + iEntryType=previousEntryType; + iNewEntry = ETrue; + RECVLOG(KCreatedEntry); + } + + +/** +StoreMessageEntryDetailsL() +Stores the details of a message entry. +*/ +void CImCltRecvConvert::StoreMessageEntryDetailsL() + { + iEmailEntry->SetAttachment(iParent->At(0).iAttachment); + iEmailEntry->SetMHTMLEmail(iParent->At(0).iMHTML); + + if(iEmailEntry->MHTMLEmail() == EFalse && iEmailEntry->Attachment() == EFalse && iRelatedAttachments !=EFalse) + { + iEmailEntry->SetAttachment(ETrue); + } + iRelatedAttachments=EFalse; + + iEmailEntry->iSize=iParent->At(0).iSize; + iEmailEntry->SetMessageFolderType(iParent->At(0).iFolder); + StoreEntryDataL(); + + if (iParent->Count()>1) + { + iParent->At(1).iSize+=iEmailEntry->iSize; + iParent->Delete(0); + } + else + { + iParent->At(0).iAttachment=iParent->At(0).iMHTML=EFalse; + iParent->At(0).iSize=0; + } + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/Local_imcvrecv.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/Local_imcvrecv.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,4020 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + + +// epoc include +#include +#include +#include +#include "Local_imcvrecv.h" +#include // TImConvert +#include + +#include // CImHeader +#include // TImAttachmentFile +#include +#include // resource definition for IMCM + +#include // For including KUidMsgTypePOP3 +#include // TResourceReader + +#include + +#ifdef __WINS__ +#include // for maxfilename lengths +#include +#endif + +#ifndef __WINS__ +#include +#endif +#include +#include +#include +#ifndef _MSG_NO_LOGGING +#define __IMUT_LOGGING + + +// literals used +_LIT(KLogFilePath, "c:\\logs\\mailtext\\in.txt"); +_LIT8(KNewLogHeader, "\r\n------ New Receive Session ------\r\n"); +_LIT8(KFound, "found: "); +_LIT8(KPartLine, "unknown or part line"); +_LIT8(KEndOFHeader, "End of header"); +_LIT8(KSkippingData, "Skipping data"); +_LIT8(KCollectingData7, "Collecting 7/8-bit data"); +_LIT8(KCollectingDataQP, "Collecting QP data"); +_LIT8(KCollectingBase64, "Collecting BASE64 data"); +_LIT8(KCollectingUU, "Collecting UU data"); +_LIT8(KDecodingBase64, "Decoding BASE64 data"); +_LIT8(KDecodedBase64, "Decoded BASE64 data"); +_LIT8(KDecodingUU, "Decoding UU data"); +_LIT8(KDecodedUU, "Decoded UU data"); +_LIT8(KDecodingQP, "Decoding QP data"); +_LIT8(KDecodedQP, "Decoded QP data"); +_LIT8(KUUEDataCorrupt, "UU Data is corrupt"); +_LIT8(KFoundUUEStartBoundary, "UUE start boundary"); +_LIT8(KFoundUUEEndBoundary, "UUE end boundary"); +_LIT8(KClosingAttachFile, "Closing attachment file"); +_LIT8(KDeletingAttachFile, "Deleting attachment file"); +_LIT8(KDeletedAttachFile, "Deleted attachment file"); +_LIT8(KFailedToWriteToFile, "Failed to write to attachment file"); +_LIT8(KSectionHeader, "Section header"); +_LIT8(KFoundMIMEBoundary, "MIME boundary"); +_LIT8(KWritingToBody, "writing body"); +_LIT8(KWroteToBody, "wrote body"); +_LIT8(KWritingToFile, "writing attachment"); +_LIT8(KWroteToFile, "wrote attachment"); +_LIT8(KReset, "Resetting CLocalImRecvConvert"); +_LIT8(KReseted, "Resetting CLocalImRecvConvert"); +_LIT8(KDeleted, "Deleting CLocalImRecvConvert"); +_LIT8(KLineHasLineBreak, "Linebreak"); +_LIT8(KLastToken, "That was the last token"); +_LIT8(KBlankLine, "Blank line"); +_LIT8(KRemoveBoundary, "Remove boundary"); +_LIT8(KRemovedBoundary, "Removed boundary"); +_LIT8(KResetForNewEntry, "Reset for a New Entry"); +_LIT8(KResetedForNewEntry, "Reseted for a New Entry"); +_LIT8(KResetForNonMimeEntry, "Reset for a New Non-Mime Entry"); +_LIT8(KResetedForNonMimeEntry, "Reseted for a New Non-Mime Entry"); +_LIT8(KCreatingEntry, "Creating Entry"); +_LIT8(KCreatedEntry, "Created Entry"); +_LIT8(KUpdatingEntry, "Updating Entry"); +_LIT8(KUpdatedEntry, "Updated Entry"); +_LIT8(KMoveToParentEntry, "Moved to parent entry"); +_LIT8(KMovedToParentEntry, "End of Moved to parent entry"); +_LIT8(KStoringHeader, "Storing CImHeader"); +_LIT8(KStoredHeader, "Stored CImHeader"); +_LIT8(KStoringBody, "Storing CRichText"); +_LIT8(KStoring8BitBody, "Storing CMsvBodyText"); +_LIT8(KStoredBody, "Stored CRichText"); +_LIT8(KStored8BitBody, "Stored CMsvBodyText"); +_LIT8(KStoringMIMEHeader, "Storing CImMimeHeader"); +_LIT8(KStoredMIMEHeader, "Stored CImMimeHeader"); +_LIT8(KIgnoringStreams, "Discarding streams"); +_LIT8(KStartMessageComplete, "Start Message Complete"); +_LIT8(KMessageComplete, "Message Complete"); +_LIT8(KHeaderComplete, "Message Header complete"); +_LIT8(KReturnReceiptTo, "return-receipt-To is set"); +_LIT8(KStartStoringEntryStream, "Starting Storing Entry Stream"); +_LIT8(KStoringEntryStream, "Storing Entry Stream"); +_LIT8(KDoneStoringEntryStream, "Done Storing Entry Stream"); +#endif // _MSG_NO_LOGGING + +// uncomment the line below if logging is to be enabled + +#if defined(__IMUT_LOGGING) +#define RECVLOG(text) (iImcvLog?iImcvLog->AppendComment(text):void(0)); +#define RECVLOG_OUT(text) (iImcvLog?iImcvLog->AppendOut(text):void(0)); +#define LOGGING(string1, string2) (Logging(string1, string2)); +#else +#define RECVLOG(text) (void(0)); +#define RECVLOG_OUT(text) (void(0)); +#define LOGGING(string1, string2) (void(0)); +#endif + +#define UNUSED_VAR( var ) var = var // fix for armv5 build warnings +const TInt KBodyTextChunkSizeBytes = 512; + +_LIT(KIntegerKey,"%d"); +const TInt KSpaceToAddNumber=20; + +// added this to handle DRM files +_LIT8(KTImcvDrm, "testagent.drm"); + + +/** +IsIllegalChar() +Checks if the character is illegal in EPOC32 file system + +@param aChar +@return +*/ +LOCAL_C TBool IsIllegalChar(const TUint aChar) + { + // EPOC32 filenames must not contain any of the following chars + return (aChar == '*' || aChar == '\\' || aChar == '<' || aChar == '>' || + aChar == ':' || aChar == '"' || aChar == '/' || aChar == '|' || + aChar < ' ' || aChar == '?'); + } + +/** +RemoveSurroundingCharacters() + +@param aLeft +@param aRight +@param aString +*/ +LOCAL_C void RemoveSurroundingCharacters( const TUint8& aLeft, const TUint8& aRight, HBufC8& aString) + { + TPtr8 des = aString.Des(); + TInt len = des.Length(); + + if( len > 2 && des[0] == aLeft && des[len - 1] == aRight ) + { + TPtrC8 mid = des.Mid(1, len - 1); + des.Copy(mid); + des.SetLength(len - 2); + } + } + + +//**************************************************************************************** +// Class CLocalRfc822Token Functions +//**************************************************************************************** + + +/** +NewLC() +Static factory constructor. Uses two phase +construction. + +@leave KErrNoMemory +@return +A pointer to the newly created CLocalRfc822Token object. +*/ +CLocalRfc822Token* CLocalRfc822Token::NewLC() + { + CLocalRfc822Token* self = new (ELeave) CLocalRfc822Token; + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + + +/** +ConstructL() + +*/ +void CLocalRfc822Token::ConstructL() + { + iOutputLine = HBufC8::NewL(KMaxIMailHeaderReadLineLength + 1); + Reset(); + } + + +/** +CLocalRfc822Token() +Constructor +*/ +CLocalRfc822Token::CLocalRfc822Token() + { + __DECLARE_NAME(_S("CLocalRfc822Token")); + } + + +/** +~CLocalRfc822Token() +Destructor +*/ +CLocalRfc822Token::~CLocalRfc822Token() + { + delete iOutputLine; + iOutputLine=NULL; + } + + +/** +Reset() + +*/ +void CLocalRfc822Token::Reset() + { + iOutputLine->Des().FillZ(); + iBufferedInput.SetLength(0); + iBufferedInput.FillZ(); + + iLastToken = EFalse; + iFirstLine = ETrue; + i822FieldsExist=EFalse; + } + + +/** +ParseNextLineL() + +@param aSourceLine +*/ +void CLocalRfc822Token::ParseNextLineL(const TDesC8& aSourceLine) + { + TBool hitEof = EFalse; + TBool endOfField = EFalse; + // Always read one more packet than we need so we know we've read the entire field. + + // Consequently, we need to check whether there is any buffered input from the + // previous rfc822 field:******* + + if(iBufferedInput.Length()) + { + // the buffered input is never more than a line of text... + *iOutputLine = iBufferedInput; + + iBufferedInput.FillZ(); + iBufferedInput.SetLength(0); + } + iInputLine = aSourceLine; + + // discard any LF character from the begining of the line (this is abit strange?) + while(iInputLine.Length() > 0 && (iInputLine[0] == KImcvLF || iInputLine[0] == KImcvCR)) + iInputLine.Delete(0, 1); + + // remove the CR at the end but only if there's stuff before it + while(iInputLine.Length() > 0 && (iInputLine[iInputLine.Length() - 1] == KImcvLF || iInputLine[iInputLine.Length() - 1] == KImcvCR)) + iInputLine.Delete(iInputLine.Length() - 1, 1); + + // if the newly read line is now empty, then don't read any more through this tokeniser + iLastToken = !iInputLine.Length(); + + // only bother with the rest of the parsing if there's any data left + if(iInputLine.Length() > 0 || iOutputLine->Length() > 0) + { + // check whether we're on the next field or still on the current one + if(!iFirstLine && iInputLine.Length() > 0 && iInputLine[0] != KImcvSP && iInputLine[0] != KImcvTab) + { + // we've read the first line of the next field + iBufferedInput = iInputLine; + endOfField = ETrue; // flag the fact that the current field is ready for parsing + } + else // the line belongs in the current field, but without any leading whitespace + { + // find the first non-whitespace character + const TUint8* ptr = iInputLine.Ptr(); + while((*ptr == KImcvSP || *ptr == KImcvTab) && (ptr - iInputLine.Ptr() < iInputLine.Length())) ptr++; + + // make sure we're not about to exceed the buffer + if((iOutputLine->Length() + iInputLine.Length()) > iOutputLine->Des().MaxLength()) + iOutputLine = iOutputLine->ReAlloc(iOutputLine->Length() + iInputLine.Length()); + + // now copy the remaining data into the buffer + iOutputLine->Des().Append(iInputLine.Right(iInputLine.Length() - (ptr - iInputLine.Ptr()))); + } + } + else + hitEof = ETrue; //this means that EEndOfHeader is set if a line of zero length is parsed - ie. (clean CRLF - CRLF) = 0. + iFirstLine = EFalse; + + if(endOfField || iLastToken) + { + // only parse the input when we have a whole field, + // or we just found the blank line that + // separates the body from the header + if(MatchAndRemoveL(KImcvFromPrompt)) + iHeaderPart = EFrom; + else if(MatchAndRemoveL(KImcvReplyToPrompt)) + iHeaderPart = EReplyTo; + else if(MatchAndRemoveL(KImcvToPrompt)) + iHeaderPart = ETo; + else if(MatchAndRemoveL(KImcvCcPrompt)) + iHeaderPart = ECc; + else if(MatchAndRemoveL(KImcvBccPrompt)) + iHeaderPart = EBcc; + else if(MatchAndRemoveL(KImcvSubjectPrompt)) + iHeaderPart = ESubject; + else if(MatchAndRemoveL(KImcvDatePrompt)) + iHeaderPart = EDate; + else if(MatchAndRemoveL(KImcvMessageIdPrompt)) + { + iHeaderPart = EMessageId; + RemoveSurroundingCharacters(KImcvLeftChevron, KImcvRightChevron, *iOutputLine); + } + else if (PriorityAndReceiptsMatchAndRemoveL(EPriority)) + iHeaderPart=EPriority; + else if (PriorityAndReceiptsMatchAndRemoveL(EReturnReceiptTo)) + iHeaderPart=EReturnReceiptTo; + else if(hitEof) + iHeaderPart = EEndOfHeader; + else + { + iHeaderPart = EUnknown; + iImRecvConvert->iMimeParser->ParseLineL(*iOutputLine); + } + } + else + iHeaderPart = ENotFinished; + } + + +/** +PriorityAndReceiptsMatchAndRemoveL() + +@param aPriority +*/ +TBool CLocalRfc822Token::PriorityAndReceiptsMatchAndRemoveL(THeaderPart aPriority) + { + CDesC8Array* fields=new (ELeave)CDesC8ArrayFlat(6); + CleanupStack::PushL(fields); + if (aPriority==EPriority) + CImcvUtils::PriorityFieldsL(*fields); + else if (aPriority==EReturnReceiptTo) + CImcvUtils::ReceiptFieldsL(*fields); + else + { + CleanupStack::PopAndDestroy(); //fields + return EFalse; + } + TInt count=fields->Count(); + TBool matched=EFalse; + for (TInt i=0;i desLength ? desLength : stringLength; + TPtrC8 left((*iOutputLine).Left(compareLength)); + + // now see whether the current line contains the search string + comparison = left.CompareF(aString); + if(!comparison) + { + // found the match string at the start of the output line, so remove it + // get rid of any whitespace betweebn the tag and the data while we have a chance + if (!i822FieldsExist) + i822FieldsExist=ETrue; + TInt whitespaceLength=0; + TInt maxLength=desLength-stringLength; + const TUint8* ptr = (*iOutputLine).Ptr(); + while(whitespaceLength <= maxLength && (ptr[stringLength+whitespaceLength] == KImcvSP || ptr[stringLength+whitespaceLength] == KImcvTab)) + whitespaceLength++; + (iOutputLine->Des()).Delete(0, stringLength+whitespaceLength); + } + return (comparison==0); + } + +//**************************************************************************************** +// Class CLocalImRecvConvert +//**************************************************************************************** + + +/** +NewLC() +Static factory constructor. Uses two phase construction +and pushes the newly created object into the Cleanup stack. + +@param anFs +@param aServerEntry +@param aMsgType +@param aEmailServiceId +@leave KErrNoMemory +@return +A pointer to the newly created CLocalImRecvConvert object. +*/ +CLocalImRecvConvert* CLocalImRecvConvert::NewLC(RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId) + { + CLocalImRecvConvert* self = new (ELeave) CLocalImRecvConvert(anFs, aServerEntry, aMsgType, + aEmailServiceId); + CleanupStack::PushL(self); + self->ConstructL(anFs); + return self; + } + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param anFs +@param aServerEntry +@param aMsgType +@param aEmailServiceId +@leave KErrNoMemory +@return +A pointer to the newly created CLocalImRecvConvert object. +*/ +CLocalImRecvConvert* CLocalImRecvConvert::NewL(RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId) + { + CLocalImRecvConvert* self = CLocalImRecvConvert::NewLC(anFs, aServerEntry, aMsgType, + aEmailServiceId); + CleanupStack::Pop(); + return self; + } + + +/** +ConstructL() + +@param anFs +*/ +void CLocalImRecvConvert::ConstructL(RFs& anFs) + { + iFsSession = &anFs; + + RResourceFile resFile; + OpenResourceFileL(resFile, anFs); // NB leaves if file not found + + // make sure the resource file will be closed if anything goes wrong + // CloseResourceFile is declared in IMUTDLL.H and defined in IMUTDLL.CPP + TCleanupItem close( CloseResourceFile, &resFile ); + CleanupStack::PushL( close ); + + // Read iStore8BitData flag. + HBufC8* buf = resFile.AllocReadLC( STORE_8BIT_BODY_TEXT ); + TResourceReader reader; + reader.SetBuffer(buf); + iStore8BitData = reader.ReadInt8(); + CleanupStack::PopAndDestroy(buf); + + buf = resFile.AllocReadLC( REMOVED_ATTACHMENT_TAG ); + reader.SetBuffer(buf); + iRemovedAttachmentTag = reader.ReadTPtrC().AllocL(); + CleanupStack::PopAndDestroy(buf); + + buf = resFile.AllocReadLC( DEFAULT_ATTACHMENT_NAME ); + reader.SetBuffer(buf); + iDefaultAttachmentName = reader.ReadTPtrC().AllocL(); + CleanupStack::PopAndDestroy(buf); + buf = resFile.AllocReadLC(PARTIAL_DOWNLOAD_FOOTER_MESSAGE); + reader.SetBuffer(buf); + iPartialEmailFooter = (reader.ReadTPtrC()).AllocL(); + CleanupStack::PopAndDestroy(buf); + buf = NULL; + CleanupStack::PopAndDestroy(&resFile); // resFile (Close resfile) + + // create CImHeader object to store Rfc822 header info... + iOutputHeader = CImHeader::NewLC(); // PushL(iHeader) + CleanupStack::Pop(); // iHeader + + if (iStore8BitData) + { + //Create body text storage helper. + iBodyText = CMsvBodyText::NewL(); + } + else + { + // create CRichText object to store body... + iParaLayer = CParaFormatLayer::NewL(); + iCharLayer = CCharFormatLayer::NewL(); + iOutputBody = CRichText::NewL(iParaLayer, iCharLayer); + } + + // Create Rfc822 filter object... + iRfc822Token = CLocalRfc822Token::NewLC(); // PushL(iRfc822Token) + CleanupStack::Pop(); // iRfc822Token + iRfc822Token->SetImRecvConvert(this); + + // Create converter objects... + iCharacterConverter = CCnvCharacterSetConverter::NewL(); + iCharConv = CImConvertCharconv::NewL(*iCharacterConverter, anFs); + iHeaderConverter = CImConvertHeader::NewL(*iCharConv); + + + // Create MIME filter object... + iMimeParser = CLocalMimeParser::NewL(*this); + + + // logfile stuff + iImcvLog=NULL; + +#ifdef __IMUT_LOGGING + TRAPD(err,iImcvLog=CImLog::NewL(KLogFilePath, EAppend)); + UNUSED_VAR( err ); +#endif + + iRootEntryId = EntryId(); + + iNotFinishedRfc822Header = ETrue; + + iEmailEntry = new (ELeave) TMsvEmailEntry; + iReceivingHeadersOnly=EFalse; + + iParent = new (ELeave) CArrayFixFlat(3); + + iFirstBoundaryReached=EFalse; + + ResetL(); + + RECVLOG( KNewLogHeader ) + } + + +/** +CLocalImRecvConvert() + +@param anFs +@param aServerEntry +@param aMsgType +@param aEmailServiceId +*/ +CLocalImRecvConvert::CLocalImRecvConvert(RFs& anFs, CMsvServerEntry* aServerEntry, + TUid aMsgType, TMsvId aEmailServiceId) + : iServerEntry(aServerEntry), iNewMsgType(aMsgType), iDefaultEntryType(ETextEntry), + iEmailServiceId(aEmailServiceId), iAttachmentFile(anFs) + { + __DECLARE_NAME(_S("CLocalImRecvConvert")); + } + + +/** +~CLocalImRecvConvert() +Destructor +*/ +CLocalImRecvConvert::~CLocalImRecvConvert() + { + delete iEmailEntry; + iEmailEntry=NULL; + delete iOutputHeader; + iOutputHeader=NULL; + delete iBodyText; + iBodyText=NULL; + delete iBodyBuf; + iBodyBuf=NULL; + delete iParaLayer; + iParaLayer=NULL; + delete iCharLayer; + iCharLayer=NULL; + delete iOutputBody; + iOutputBody=NULL; + delete iRemovedAttachmentTag; + iRemovedAttachmentTag=NULL; + delete iDefaultAttachmentName; + iDefaultAttachmentName=NULL; + delete iRfc822Token; + iRfc822Token=NULL; + delete iMimeParser; + iMimeParser=NULL; + delete iHeaderConverter; + iHeaderConverter=NULL; + delete iCharConv; + iCharConv=NULL; + delete iCharacterConverter; + iCharacterConverter=NULL; + delete iAttachmentFullPath; + iAttachmentFullPath=NULL; + delete iImcvUtils; + iImcvUtils=NULL; + delete iParent; + iParent=NULL; + RECVLOG(KDeleted) + delete iImcvLog; + iImcvLog=NULL; + delete iPartialEmailFooter; + iPartialEmailFooter=NULL; + } + + +/** +ResetForHeadersL() +This function is used in preference to ResetL() when the owner +only wishes to create email entries in the remote mailbox - +they do not wish to create any stores associated with the message +entry + +*/ +void CLocalImRecvConvert::ResetForHeadersL() + { + ResetL(); + iReceivingHeadersOnly=ETrue; + } + +/** +ResetL() + +*/ +void CLocalImRecvConvert::ResetL() + { + RECVLOG(KReset) + iBodyId=KMsvNullIndexEntryId; + iSizeOfAttachmentsRemoved=0; + + User::LeaveIfError(iServerEntry->SetEntry(iRootEntryId)); + + iReceivingHeadersOnly=EFalse; + iMessageEntryCalled=EFalse; + iLeaveError=KErrNone; + iCurrentMultipartFolderEntryId=0; + + TParentDetails parent; + parent.iAttachment=parent.iMHTML=EFalse; + parent.iSize=0; + iParent->InsertL(0,parent); + + delete iEmailEntry; + iEmailEntry=NULL; + iEmailEntry = new (ELeave) TMsvEmailEntry; + + // "iSavingAttachments" commands this code to store attachments in files. + // Currently this is always set to ETrue as we intend to save all attachments + // However, if the user wishes to discard (ie do not save) any + // attachments in incoming email messages - then this member variable + // may be set to EFalse by the inline accessor function "SaveAllAttachments(TBool)" + iSavingAttachments=ETrue; + iAttachmentFileState=EFileIsClosed; + + // iLeaveError contains the error value of any functions that leaves (ie CRichText::InsertL) + // or any returned error value that generates a leave from within CLocalImRecvConvert (ie RFile::Create) + + iGlobalIndent=0; + iLongestLine=50; + + iImPriority=EMsvMediumPriority; + delete iImcvUtils; + iImcvUtils=NULL; + iImcvUtils=CImcvUtils::NewL(); + + // reset internal date + iTimeDate.HomeTime(); + + iMimeParser->Reset(); + + iNewEntry=EFalse; //EFalse if the entry was moved to. ETrue if the entry was just created + iTopMessagePart=KMsvNullIndexEntryId; //A value of NULL indicates the next entry created is a main message entry + ResetForNewEntryL(iDefaultEntryType); + iMIMEPart_822Header = EFalse; + iPartialEmail=EFalse; + + RECVLOG(KReseted) + } + + +/** +ResetForNewEntryL() + +@param entryType +*/ +void CLocalImRecvConvert::ResetForNewEntryL(TValidEntryType entryType) + { + RECVLOG(KResetForNewEntry) + + iFinishedHeader = EFalse; + + iPreviousLineLength = 0; + iPreviousTrailingWhitespace = 0; + iLastChar = 0; + + // Reset the new entry state + ResetForNonMimeEntryL(); + + // Clear the storage classes + iMimeParser->ResetForNewEntry(); + iRfc822Token->Reset(); + + iEmailPart = KNoPart; + iEntryType=entryType; + + if (iEntryType==EMessageEntry) + { + iEmailPart = KParentPart; + iMimeParser->SetMessageFolderType(EFolderTypeRFC822); + } + } + + +/** +ResetForNonMimeEntryL() + +*/ +void CLocalImRecvConvert::ResetForNonMimeEntryL() + { + iEntryType = ETextEntry; + RECVLOG(KResetForNonMimeEntry) + + iSkipData = EFalse; + iPrepared = EFalse; + iNewNonMIMEBodyPart=ETrue; + iEncounteredLineEndingInCarriageReturn=EFalse; + + iAlgorithm = ENoAlgorithm; + iCurrentPartIsRichText = ETrue; + CloseAttachmentFileL(); + iEntryDataSize = 0; + + if (iStore8BitData) + { + //Create a buffer to hold the body text as it is down loaded. + delete iBodyBuf; + iBodyBuf = NULL; + iBodyBuf = CBufSeg::NewL(KBodyTextChunkSizeBytes); + } + else + { + iOutputBody->Reset(); + } + + iAttachmentName.Zero(); + iFinalLine = EFalse; + + iOutputHeader->Reset(); + iEmptyHeaderSize=iOutputHeader->DataSize(); + RECVLOG(KResetedForNonMimeEntry) + } + + +/** +ParseNextField() + +@param aSourceLine +*/ +TInt CLocalImRecvConvert::ParseNextField(const TDesC8& aSourceLine) + { + __ASSERT_DEBUG(iRootEntryId!=KMsvNullIndexEntryId, gPanic(KPanicServiceIdNotValid)); + RECVLOG_OUT(aSourceLine); + + // If we are temporarily on the null entry then move back to the entry we are working on + if ((iLeaveError == KErrNone) && (iServerEntry->Entry().Id() == KMsvNullIndexEntryId)) + iLeaveError = iServerEntry->SetEntry(iSavedEntryId); + + if(iLeaveError==KErrNone) + TRAP(iLeaveError, ParseNextLineL(aSourceLine)); + + // Save the current entry id for later. + if (iLeaveError==KErrNone) + iSavedEntryId = iServerEntry->Entry().Id(); + + TUid type = iServerEntry->Entry().iType; + if( type != KUidMsvMessageEntry && + type != KUidMsvEmailTextEntry && + type != KUidMsvEmailHtmlEntry && + type != KUidMsvAttachmentEntry) + { + // Set the current id to null so that we aren't locking any folders + iServerEntry->SetEntry(KMsvNullIndexEntryId); + } + + return iLeaveError; + } + + +/** +ParseNextLineL() + +@param aSourceLine +*/ +void CLocalImRecvConvert::ParseNextLineL(const TDesC8& aSourceLine) + { + iParsedMimeBoundaryLast=0; + if(!iFinishedHeader) + { + // start by getting the next token from the header + iRfc822Token->ParseNextLineL(aSourceLine); + + switch(iRfc822Token->iHeaderPart) + { + case CLocalRfc822Token::EUnknown: + case CLocalRfc822Token::ENotFinished: + RECVLOG(KPartLine) + break; + case CLocalRfc822Token::EFrom: + iOutputHeader->SetFromL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvFromPrompt); + break; + case CLocalRfc822Token::EReplyTo: + iOutputHeader->SetReplyToL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvReplyToPrompt); + break; + case CLocalRfc822Token::ETo: + ParseRecipientListL(iOutputHeader->ToRecipients()); + LOGGING(KFound,KImcvToPrompt); + break; + case CLocalRfc822Token::ECc: + ParseRecipientListL(iOutputHeader->CcRecipients()); + LOGGING(KFound,KImcvCcPrompt); + break; + case CLocalRfc822Token::EBcc: + ParseRecipientListL(iOutputHeader->BccRecipients()); + LOGGING(KFound,KImcvBccPrompt); + break; + case CLocalRfc822Token::ESubject: + iOutputHeader->SetSubjectL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvSubjectPrompt); + break; + case CLocalRfc822Token::EDate: + iRfc822Date.ParseDateField(*iRfc822Token->OutputLine() , iTimeDate); + if (iEmailEntry->Id() != iTopMessagePart) + { + iEmailEntry->iDate = iTimeDate; + } + LOGGING(KFound,KImcvDatePrompt); + break; + case CLocalRfc822Token::EMessageId: + iOutputHeader->SetImMsgIdL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvMessageIdPrompt); + break; + case CLocalRfc822Token::EPriority: + iImPriority=iImcvUtils->EvaluatePriorityText(*iRfc822Token->OutputLine()); + LOGGING(KFound,KImcvPriorityPrompt); + break; + case CLocalRfc822Token::EReturnReceiptTo: + iOutputHeader->SetReceiptAddressL(*iRfc822Token->OutputLine()); + LOGGING(KFound,KReturnReceiptTo); + break; + case CLocalRfc822Token::EEndOfHeader: + // the next line goes in the body part + iFinishedHeader = ETrue; + RECVLOG(KEndOFHeader) + break; + default: + RECVLOG(KEndOFHeader) + break; + } + + + if(iRfc822Token->iHeaderPart != CLocalRfc822Token::ENotFinished) + { + // Now that we've used the data, we also need to clear the output line from the tokeniser.... + iRfc822Token->OutputLine()->Des() = KNullDesC8; + + // whatever part we just read, we may also have read the empty line that separates + // the header from the body + if((iFinishedHeader = iRfc822Token->LastToken()) != EFalse) //iFinishedHeader set to 1 on CRLF- + { + RECVLOG(KLastToken); + iNotFinishedRfc822Header = EFalse; + + iHeaderConverter->SetMessageType(iMimeParser->MessageIsMime()); + iHeaderConverter->DecodeAllHeaderFieldsL(*iOutputHeader); + + if (iMimeParser->MessageIsMime()) + EndOfHeaderMIMEProcessingL(); + else + EndOfHeaderProcessingL(); + + if (iStore8BitData) + { + iBodyText->SetDefaultCharacterSet(iCharConv->SystemDefaultCharset()); + if ( iMimeParser->MessageIsMime() && iMimeParser->ContentType()==EMimeText ) + iBodyText->SetCharacterSet(iMimeParser->CurrentCharsetL()); + else + iBodyText->SetCharacterSet(0); + } + else + { + // Get charset for decoding. + if ( iMimeParser->MessageIsMime() && iMimeParser->ContentType()==EMimeText ) + iCharConv->PrepareToConvertToFromOurCharsetL(iMimeParser->CurrentCharsetL()); + else + iCharConv->PrepareToConvertToFromOurCharsetL(iCharConv->SystemDefaultCharset()); + } + } + } + } + else if (iReceivingHeadersOnly == EFalse) + { + //Set to EFalse when a single line is to be skipped (ie boundary line) + iCommitLine=ETrue; + + // read one line of the message body if I am processing a whole email message + if(iMimeParser->MessageIsMime()) + ParseMimeLineL(aSourceLine); + else + ParseBodyLineL(aSourceLine); + + if((iCommitLine) && (!iSkipData)) + DecodeAndStoreLineL(aSourceLine); + } + } + + +/** +MessageEntryDetailsL() + +@return +*/ +TMsvEmailEntry CLocalImRecvConvert::MessageEntryDetailsL() + { + iMessageEntryCalled=ETrue; + CloseAttachmentFileL(); + + // A message requiring manual termination and not part way through a MIME part header + if( iTopMessagePart==EntryId() && iFinishedHeader) + StoreEntryStreamsL(KStore822Header|KStoreMIMEHeader); + else + { + User::LeaveIfError(iServerEntry->SetEntry(iTopMessagePart)); + delete iEmailEntry; + iEmailEntry=NULL; + iEmailEntry = new (ELeave) TMsvEmailEntry(iServerEntry->Entry()); + } + + return *iEmailEntry; + } + + +/** +MessageCompleteL() + +@param aEmailEntry +*/ +void CLocalImRecvConvert::MessageCompleteL(TMsvEmailEntry aEmailEntry) + { + // Restore the entry context + if (iServerEntry->Entry().Id() == KMsvNullIndexEntryId) + User::LeaveIfError(iServerEntry->SetEntry(iSavedEntryId)); + + __ASSERT_DEBUG(iMessageEntryCalled, gPanic(KPanicMessageEntryNotCalled)); + __ASSERT_DEBUG(aEmailEntry.Id()==iTopMessagePart, gPanic(KPanicMessageEntryIdHasChanged)); // Id should be set to iTopMessagePart + + // Called ResetL() to reset object instead of ResetForHeadersL() + __ASSERT_DEBUG(iReceivingHeadersOnly, gPanic(KPanicIncorrectResetState)); + + if(iEmailEntry) + { + if (iEmailEntry->Id()) + { + if(iLeaveError==KErrNone) + { + // a remote email header cannot have any attachments or be marked as complete... + aEmailEntry.SetAttachment(EFalse); + aEmailEntry.SetMHTMLEmail(EFalse); + aEmailEntry.SetComplete(EFalse); + User::LeaveIfError(iServerEntry->ChangeEntry(aEmailEntry)); + RECVLOG(KHeaderComplete) + } + else + { + if (!iPopulateMessage) + { + TMsvId currentId = EntryId(); + User::LeaveIfError(iServerEntry->SetEntry(iServerEntry->Entry().Parent())); + User::LeaveIfError(iServerEntry->DeleteEntry(currentId)); + } + User::Leave(iLeaveError); + } + } + } + + // Save the entry context and move it to null so that we're not locking any folders + iSavedEntryId = iServerEntry->Entry().Id(); + User::LeaveIfError(iServerEntry->SetEntry(KMsvNullIndexEntryId)); + } + + +/** +MessageCompleteL() + +@param aPartialDownload +*/ +void CLocalImRecvConvert::MessageCompleteL(TBool aPartialDownload) + { + iPartialEmail=aPartialDownload; + MessageCompleteL(); + } + + +/** +MessageCompleteL() +*/ +void CLocalImRecvConvert::MessageCompleteL() + { + // Restore the entry context + RECVLOG(KStartMessageComplete) + if (iServerEntry->Entry().Id() == KMsvNullIndexEntryId) + User::LeaveIfError(iServerEntry->SetEntry(iSavedEntryId)); + + if (iParsedMimeBoundaryLast==EFalse && iAttachmentFileState==EFileIsOpen && iPartialEmail!=EFalse) + { + iAttachmentFileState=EFileTopIncomplete; + } + + CloseAttachmentFileL(); + + if(!iEmailEntry->Id()) + return; + + if(iLeaveError!=KErrNone) + { + User::Leave(iLeaveError); + } + + if (EntryId()!=iTopMessagePart) + { + iEmailEntry->SetComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + MoveToParentEntryL(); + + if( iTopMessagePart==EntryId() && iFinishedHeader) + { + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetBodyTextComplete(ETrue); + iEmailEntry->SetComplete(ETrue); + + // Main message. + StoreMessageEntryDetailsL(); + return; + } + else if(iEmailEntry->iType == KUidMsvMessageEntry) + { + StoreMessageEntryDetailsL(); + MoveToParentEntryL(); + StoreMessageEntryDetailsL(); + } + } + + // A message requiring manual termination and not part way through + // a MIME part header. + + User::LeaveIfError(iServerEntry->SetEntry(iTopMessagePart)); + if(NULL!=iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + iEmailEntry = new (ELeave) TMsvEmailEntry(iServerEntry->Entry()); + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + + iEmailEntry->SetAttachment(iParent->At(0).iAttachment); + iEmailEntry->SetMHTMLEmail(iParent->At(0).iMHTML); + + if(iEmailEntry->MHTMLEmail() == EFalse && iEmailEntry->Attachment() == EFalse && iRelatedAttachments !=EFalse) + { + iEmailEntry->SetAttachment(ETrue); + } + iRelatedAttachments=EFalse; + + iEmailEntry->iSize=iParent->At(0).iSize; + iEmailEntry->SetMessageFolderType(iParent->At(0).iFolder); + + User::LeaveIfError(iServerEntry->ChangeEntry(*iEmailEntry)); + + // Save the entry context and move it to null so that we're not locking any folders + iSavedEntryId = iServerEntry->Entry().Id(); + User::LeaveIfError(iServerEntry->SetEntry(KMsvNullIndexEntryId)); + RECVLOG(KMessageComplete) + } + + +/** +PrepareDecoder() + +*/ +void CLocalImRecvConvert::PrepareDecoder() + { + switch(iMimeParser->ContentEncoding()) + { + case EEncodingTypeNone: + case EEncodingType7Bit: + case EEncodingType8Bit: + iAlgorithm = ENoAlgorithm; + RECVLOG(KCollectingData7) + break; + case EEncodingTypeQP: + iAlgorithm = EQPDecode; + RECVLOG(KCollectingDataQP) + break; + case EEncodingTypeBASE64: + iAlgorithm = EBase64Decode; + RECVLOG(KCollectingBase64) + break; + case EEncodingTypeUU: + iAlgorithm = EUUDecode; + RECVLOG(KCollectingUU) + break; + default: // EEncodingTypeUnknown, EEncodingTypeNone, EEncodingTypeBinary + iAlgorithm = ENoAlgorithm; + break; + } // switch + iPrepared = ETrue; + } + + +/** +DecodeAndStoreLineL() + +@param aSourceLine +*/ +void CLocalImRecvConvert::DecodeAndStoreLineL(const TDesC8& aSourceLine) + { + TInt sourceLineLength=aSourceLine.Length(); + TBool blankLine = EFalse; + + // create a temporary buffer to write the decoded data into. + // This will always be as long as or shorter than the original. + + HBufC8* convertedLine = HBufC8::NewLC(sourceLineLength+KConversionRemainderLength); + TPtr8 des(convertedLine->Des()); + + if(iFinalLine) + { + // We've got to the end of encoded section, so set in order to skip all + // trailing empty lines & postamble until we reach the next MIME/UUE boundary + + RECVLOG(KSkippingData) + iSkipData = ETrue; + } + else + { + switch(iAlgorithm) + { + case EBase64Decode: + RECVLOG(KDecodingBase64); + + iB64Codec.Decode(aSourceLine, des); + RECVLOG(KDecodedBase64); + break; + case EUUDecode: + RECVLOG(KDecodingUU); + //used to end a Mime encoded UU section else no purpose + iFinalLine=(aSourceLine.CompareF(KImcvUueLastLine)==0); + if(iFinalLine) + iCommitLine=EFalse; + else + { + //returns True on invalid data + if((!iFinalLine)&&(iUUCodec.Decode(aSourceLine, des))) + { + RECVLOG(KUUEDataCorrupt) + if(iAttachmentFileState==EFileIsOpen) + { + iAttachmentFileState=EFileIsCorrupt; + iLeaveError=KErrCorrupt; + CloseAttachmentFileL(); + } + else + User::Leave(KErrCorrupt); + } + } + RECVLOG(KDecodedUU); + break; + case EQPDecode: + RECVLOG(KDecodingQP); + iQPCodec.Decode(aSourceLine, des); + RECVLOG(KDecodedQP); + break; + case ENoAlgorithm: + { + // If the data is to be stored in CRichText clean it up before copying it to the buffer + TLex8 lex(aSourceLine); + blankLine=ETrue; + while(blankLine && !lex.Eos()) + { + blankLine = (lex.Peek()==KImcvSP || lex.Peek()==KImcvTab + || lex.Peek()==KImcvCR || lex.Peek()==KImcvLF); + lex.Inc(); + } + des.Copy(aSourceLine); + } + default: + break; + } // end switch + + // Commits the decoded data to the appropriate store or trashes the line + if(iCommitLine) + { + if (iLeftOver.Length()) + { + des.Insert(0, iLeftOver); + iLeftOver.SetLength(0); + } + + if(iCurrentPartIsRichText) + { + if (iStore8BitData) + iBodyBuf->InsertL(iBodyBuf->Size(), des); + else + WriteToBodyL(des, blankLine); + } + else + WriteToAttachmentL(des); + } + } // end else + + CleanupStack::PopAndDestroy(); // convertedLine + } + + +/** +ParseMimeLineL() + +@param aSourceLine +*/ +void CLocalImRecvConvert::ParseMimeLineL(const TDesC8& aSourceLine) + { + + if(!iMimeParser->IsBoundary(aSourceLine)) + { + if(!iPrepared) // first line of the body + { + if (iMIMEPart_822Header) + { + // missing 822 part header. Revert to default. + EndOfHeaderMIMEProcessingL(); + iMIMEPart_822Header=EFalse; + } + + PrepareDecoder(); + } + + if (CheckUUEStartL(aSourceLine)) + { + iAlgorithm=EUUDecode; + iCommitLine=EFalse; + } + } + else + { + // found a MIME boundary so store the current parts data and update its entry. + + RECVLOG(KFoundMIMEBoundary) + iCommitLine=EFalse; //Dont store this line as its a boundary. + + if(!iFirstBoundaryReached && iEntryType==EFolderEntry) + { + iFirstBoundaryReached=ETrue; + if (!iCurrentMultipartFolderEntryId) + iCurrentMultipartFolderEntryId = EntryId(); + MoveToParentEntryL(); + ResetForNewEntryL(iDefaultEntryType); + return; // First boundary encountered. + } + + CloseAttachmentFileL(); + if(iNewEntry) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreMIMEHeader | KStoreBodyText); + if (iBodyId==KMsvNullIndexEntryId) + { + iBodyId=iEmailEntry->Id(); + } + } + + iSkipData = EFalse; + + // check whether we just found the terminating boundary... + if(iMimeParser->IsTerminatingBoundary()) + { + RECVLOG(KRemoveBoundary); + iMimeParser->RemoveBoundary(); + RECVLOG(KRemovedBoundary); + iMIMEPart_822Header = EFalse; + + if (EntryId()!=iTopMessagePart) + { + if(iEmailPart==KParentPart) + { + // rfc822 message which is not not multipart. + iEmailPart=KNoPart; + MoveToParentEntryL(); + + // Embedded message + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + else if (iEmailEntry->iType==KUidMsvMessageEntry) + { + // Moving up from a multi embedded rfc822 message. + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + } + + MoveToParentEntryL(); + iEntryDataSize = iEmailEntry->iSize; + + if(iServerEntry->Entry().iType == KUidMsvFolderEntry) + { + iCurrentMultipartFolderEntryId = EntryId(); + } + else if (EntryId()!=iTopMessagePart) + { + if(iEmailEntry->iType == KUidMsvMessageEntry) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + MoveToParentEntryL(); + iEntryDataSize += iEmailEntry->iSize; + } + + if(!iNewEntry) + ResetForNonMimeEntryL(); + + RECVLOG(KSkippingData) + iSkipData = ETrue; + iDefaultEntryType=ETextEntry; + } + else // if regular boundary + { + RECVLOG(KSectionHeader) + if(iEmailPart==KParentPart && EntryId()!=iTopMessagePart) + { + // rfc822 message which is not not multipart. + iEmailPart=KNoPart; + MoveToParentEntryL(); + // Embedded message + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreMessageEntryDetailsL(); + } + + if (!iCurrentMultipartFolderEntryId && iEmailPart==KNoPart) + MoveToParentEntryL(); + + ResetForNewEntryL(iDefaultEntryType); + } + } + } + + +/** +EndOfHeaderProcessingL() + +*/ +void CLocalImRecvConvert::EndOfHeaderProcessingL() + { + CreateEntryL(); + StoreEntryStreamsL(KStore822Header); + iEntryDataSize = 0; + } + + +/** +EndOfHeaderMIMEProcessingL() +Have just finished processing header, what next.. ? +All MIME entry entry creation takes place here. + +*/ +void CLocalImRecvConvert::EndOfHeaderMIMEProcessingL() + { + if (iMimeParser->IsMessageDigest()) + iDefaultEntryType=EMessageEntry; + + if (iMimeParser->VCard() || iMimeParser->VCalendar()) + { + iCurrentPartIsRichText = EFalse; + iEntryType = EAttachmentEntry; + } + + // Don't create entry if an embedded message header. + if (!iMIMEPart_822Header || iTopMessagePart==EntryId() ) + CreateEntryL(); + + if (!iMIMEPart_822Header && !iMimeParser->MimeFieldsExist() && iDefaultEntryType==EMessageEntry) + { + // MIME header not present. So expecting embedded 822 header + iEmailPart = KParentPart; + iMIMEPart_822Header=ETrue; + iEntryType=ETextEntry; + } + else if (iMimeParser->ContentType()==EMimeMessage) + { + // Having received A MIME header of type message/..., store and continue. + + StoreEntryStreamsL(KStore822Header|KStoreMIMEHeader); + iMimeParser->ResetForNewEntry(); + iMIMEPart_822Header=ETrue; + + // Non-multipart embedded message. + if (iTopMessagePart==EntryId()) + { + iEntryType = EMessageEntry; + ResetForNonMimeEntryL(); + } + else + iEntryType=ETextEntry; + } + else if ( (iTopMessagePart==EntryId() || iMIMEPart_822Header)&&(!iReceivingHeadersOnly) ) + { + // Main rfc822 header or embedded header. + + TImEmailFolderType folderType=iMimeParser->MessageFolderType(); + if (iMIMEPart_822Header) + { + iEmailEntry->iDetails.Set(iOutputHeader->From()); + iEmailEntry->iDescription.Set(iOutputHeader->Subject()); + iMIMEPart_822Header=EFalse; + } + + if (iRfc822Token->i822FieldsExist) + StoreEntryStreamsL(KStore822Header|KStoreMIMEHeader); + else + StoreEntryStreamsL(KStoreMIMEHeader); + + + if (iMimeParser->ContentType()==EMimeMultipart) + { + RECVLOG(KSkippingData) + ResetForNewEntryL(EFolderEntry); + iMimeParser->SetMessageFolderType(folderType); + iSkipData = ETrue; + iEmailPart = KMultiPart; + iCurrentMultipartFolderEntryId=0; + } + else + { + // Not multipart but some header data to store. + iEntryDataSize = 0; + } + + CreateEntryL(); + } + + iRfc822Token->i822FieldsExist=EFalse; + iMimeParser->ResetMimeFieldsExist(); + + iFinishedHeader = iMIMEPart_822Header ? EFalse:ETrue; + iSkipData = iMimeParser->ContentType()==EMimeMultipart ? ETrue:EFalse; + } + + +/** +ParseBodyLineL() +Non Mime body parsing + +@param aSourceLine +*/ +void CLocalImRecvConvert::ParseBodyLineL(const TDesC8& aSourceLine) + { + TInt len=aSourceLine.Length(); + iTopPartialDownloadCounter+=len; // added for TOP. increment the number of bytes of the attachment downloaded so far + TMsvId id=0; + if (iBodyId==KMsvNullIndexEntryId) + { + iBodyId=iEmailEntry->Id(); + } + + // first check whether this line is a UUEncode start boundary + if(CheckUUEStartL(aSourceLine)) + { + RECVLOG(KFoundUUEStartBoundary) + TFileName tempStore = iAttachmentName; + id = EntryId(); + if (!iNewNonMIMEBodyPart || id!=iTopMessagePart) // main message entry + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + } + MoveToParentEntryL(); + if ( !CreateNonMIMEFolderEntryL(id)) + ResetForNonMimeEntryL(); + + iEntryType = EAttachmentEntry; + CreateEntryL(); + SetAttachmentName(tempStore); + + iCurrentPartIsRichText = EFalse; + iAlgorithm=EUUDecode; + iCommitLine=EFalse; + if(!iSavingAttachments) + { + RECVLOG(KSkippingData) + iSkipData=ETrue; + } + iNewNonMIMEBodyPart=EFalse; + } + else if(aSourceLine.CompareF(KImcvUueEnd)==0) // Checks for the UUEncode end boundary + { + RECVLOG(KFoundUUEEndBoundary) + CloseAttachmentFileL(); + StoreEntryDataL(); + MoveToParentEntryL(); + iSkipData = EFalse; + iCommitLine=EFalse; + iNewNonMIMEBodyPart=ETrue; + } + else if (iNewNonMIMEBodyPart && !( len==2 && aSourceLine[0]==KImcvCR && aSourceLine[1]==KImcvLF )) + { + id = EntryId(); + if (!iNewNonMIMEBodyPart || id!=iTopMessagePart) + { + iEmailEntry->SetComplete(ETrue); + iEmailEntry->SetBodyTextComplete(ETrue); + StoreEntryStreamsL(KStoreBodyText); + } + MoveToParentEntryL(); + if ( !CreateNonMIMEFolderEntryL(id)) + ResetForNonMimeEntryL(); + iAlgorithm=ENoAlgorithm; + iEntryType = ETextEntry; + CreateEntryL(); + iNewNonMIMEBodyPart=EFalse; + } + } + + +/** +CreateNonMIMEFolderEntryL() + +@param aCurrentId +@return +*/ +TBool CLocalImRecvConvert::CreateNonMIMEFolderEntryL(TMsvId aCurrentId) + { + if ( aCurrentId==iTopMessagePart || iCurrentMultipartFolderEntryId ) + return EFalse; + + // Create Folder. + iServerEntry->SetEntry(iTopMessagePart); + iEmailPart = KMultiPart; + iEntryType = EFolderEntry; + CreateEntryL(); + + // Move existing child entry under folder. + TMsvId destId = EntryId(); + iServerEntry->SetEntry(iTopMessagePart); + iServerEntry->MoveEntryWithinService(aCurrentId, destId); + User::LeaveIfError(iServerEntry->SetEntry(aCurrentId)); + User::LeaveIfError(iServerEntry->SetEntry(iServerEntry->Entry().Parent())); + + // Create MimeHeader. + iEmailEntry->SetMessageFolderType(iMimeParser->MessageFolderType()); + + RECVLOG(KResetForNewEntry) + + iMimeParser->ResetForNewEntry(); + + if (iStore8BitData) + { + //Create a buffer to hold the body text as it is down loaded. + delete iBodyBuf; + iBodyBuf = NULL; + iBodyBuf = CBufFlat::NewL(KBodyTextChunkSizeBytes); + } + else + { + iOutputBody->Reset(); + } + + ResetForNonMimeEntryL(); + RECVLOG(KResetedForNewEntry) + return ETrue; + } + + +/** +CreateAttachmentL() + +@return +*/ +TBool CLocalImRecvConvert::CreateAttachmentL() + { + // Get and set Attachment File path + TFileName filepath; + // added to support TOP command. Reset the download counter each time we have a new + // attachment + iTopPartialDownloadCounter = 0; + + // Need to check that the complete filename: iAttachmentFullPath & iAttachmentName + // does not exceed 256 characters. Greater than this and it cannot be saved as a file. + + TBool addExtension=ETrue; + if(iAttachmentName.Length() == 0) //i.e. problem with Attachment name + { + // No filename present. Generate one. + if(iMimeParser->ContentDescription().Length()!=0) + { + // Use ContentDescription() as default name + // - as this is more informative than the default + + TLex sourceLineLex = iMimeParser->ContentDescription(); + ExtractFilename(sourceLineLex, iAttachmentName); + } + else + iAttachmentName = *iDefaultAttachmentName; + } + else + { + // Filename present. Check it is valid. + ReplaceInvalidCharacters(iAttachmentName); + if (iAttachmentName.Locate(KImcvFullStop)!=KErrNotFound) + addExtension=EFalse; + } + if (addExtension) + AddFileExtension(); + + CMsvStore* store = iServerEntry->EditStoreL(); + CleanupStack::PushL(store); + CMsvAttachment* attachment = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + RFile file; + store->AttachmentManagerExtensionsL().CreateAttachmentL(iAttachmentName,file,attachment); + + iAttachmentFile.SetFileHandle(file,TImAttachmentFile::EImFileWrite); + store->CommitL(); + CleanupStack::PopAndDestroy(store); // store + + if(KErrNone!=iLeaveError) + { + iAttachmentFileState=EFileFailedToOpen; + CloseAttachmentFileL(); + return EFalse; + } + + iAttachmentFileState=EFileIsOpen; + return ETrue; + } + + +/** +WriteToAttachmentL() + +@param text +*/ +void CLocalImRecvConvert::WriteToAttachmentL(const TDesC8& text) + { + if ( (iAttachmentFileState==EFileIsClosed || iAttachmentFileState==EFileNotOpen) + && CreateAttachmentL() && iEntryType!=EHtmlEntry) + iEmailEntry->SetAttachment(ETrue); + + if(iAttachmentFileState!=EFileIsOpen || !text.Length()) + { + RECVLOG(KSkippingData) + iSkipData = ETrue; + } + + // write decoded data into a file if there is any data there to write. + + RECVLOG(KWritingToFile) + + // Convert text before writing to attachment. + + // Store as Binary files.. + iLeaveError=iAttachmentFile.WriteFile(text); + + if(KErrNone==iLeaveError) + iEntryDataSize += text.Length(); + else + { + // the file write failed (eg.there is no space left), set new file state and skip + RECVLOG(KFailedToWriteToFile) + iAttachmentFileState=EFileIsIncomplete; + CloseAttachmentFileL(); + } + RECVLOG(KWroteToFile) + } + + +/** +CloseAttachmentFileL() + +*/ +void CLocalImRecvConvert::CloseAttachmentFileL() + { + // If anything bad happened a message is sent to the parts CRichText + switch(iAttachmentFileState) + { + case EFileNotOpen: + iAttachmentFileState=EFileIsClosed; + case EFileIsClosed: //do nothing - this shouldn't happen + break; + case EFileIsOpen: //successful attachment decode + RECVLOG(KClosingAttachFile) + iAttachmentFile.CloseFile(); + iAttachmentFileState=EFileIsClosed; + iEmailEntry->SetComplete(ETrue); + break; + case EFileIsIncomplete: // file write failed + case EFileFailedToOpen: // can't open attach file + case EFileIsCorrupt: // UU data being decoded is corrupt + RECVLOG(KClosingAttachFile) + iAttachmentFile.CloseFile(); //file has to be closed before it can be deleted + RECVLOG(KDeletingAttachFile) + { + // NOTE - need the braces to stop error for re-definition of store + CMsvStore* store = iServerEntry->EditStoreL(); + CleanupStack::PushL(store); + + // Remove the attachment and commit the store. + store->AttachmentManagerExtensionsL().RemoveAttachmentL(0); + store->CommitL(); + CleanupStack::PopAndDestroy(store); + } + iEmailEntry->SetAttachment(EFalse); + iAttachmentFileState=EFileIsClosed; + RECVLOG(KDeletedAttachFile) + + if(iSavingAttachments && !iStore8BitData) + { + WriteToBodyL(KImcvParagraph); + WriteToBodyL(*iRemovedAttachmentTag); //lost attachment - notify user + TBuf8 name; + name.Copy(iAttachmentName); //16 to 8 + WriteToBodyL(name); + WriteToBodyL(KImcvParagraph); + } + + User::Leave(iLeaveError); + // Skip any remaining encoded data in message + break; + case EFileTopIncomplete: + RECVLOG(KClosingAttachFile) + iAttachmentFile.CloseFile(); //file has to be closed before it can be deleted + + // added for TOP command. Ensure we know correct amount of data for later redownload + iSizeOfAttachmentsRemoved+=iTopPartialDownloadCounter; + + + RECVLOG(KDeletingAttachFile) + { + // NOTE - need the braces to stop error for re-definition of store + CMsvStore* store = iServerEntry->EditStoreL(); + CleanupStack::PushL(store); + + // Remove the attachment and commit the store. + store->AttachmentManagerExtensionsL().RemoveAttachmentL(0); + store->CommitL(); + CleanupStack::PopAndDestroy(store); + } + iEmailEntry->SetAttachment(EFalse); + iAttachmentFileState=EFileIsClosed; + RECVLOG(KDeletedAttachFile); + TMsvId id = EntryId(); + TMsvId parent = iServerEntry->Entry().Parent(); + MoveToParentEntryL(); + TMsvId setTo=iServerEntry->Entry().Id(); + if(setTo!=parent) + { + iServerEntry->SetEntry(parent); + } + User::LeaveIfError(iServerEntry->DeleteEntry(id)); + iServerEntry->SetEntry(setTo); + break; + } + } + + +/** +LineIsAllWhitespace() + +@return +*/ +TBool CLocalImRecvConvert::LineIsAllWhitespace() + {// returns 1 if all elements of the current line are whitespace + TBool spaceFound = 1; + TLex8 aLex = iLineLex; + + while (spaceFound && aLex.Peek()!=KImcvCR) + { + if (aLex.Peek()==KImcvSP) + { + spaceFound = 1; + aLex.Inc(); + } + else spaceFound = 0; + } + return (spaceFound); + } + + +/** +CheckUUEStartL() + +@param aSourceLine +@return +*/ +TBool CLocalImRecvConvert::CheckUUEStartL(const TDesC8& aSourceLine) + { + // Checks if the descriptor contains the UUE begin header + // Extracts the file name if it is + + TInt sourceLength = aSourceLine.Length(); + if(sourceLength < KImcvUueStart().Length()+3) // can't be it, it's not long enough + return EFalse; + + if(!aSourceLine.Left(KImcvUueStart().Length()).CompareF(KImcvUueStart)) // start of line might be UUE boundary + { + // we also need to check that the next three chars are numbers - Unix file access code + const TUint8* _ptr = aSourceLine.Ptr(); + TInt length=KImcvUueStart().Length();// this defines length as 6 ie. "b e g i n " + if(TChar(_ptr[length]).IsDigit() && TChar(_ptr[length+1]).IsDigit() && TChar(_ptr[length+2]).IsDigit()) + { + // we've found 'begin ###' at the start of a line - + // that's about as good as we can do + // now grab the file name and paste it into the document + // Extract filename from string, removing any surrounding quote marks + + HBufC16* pBuf16 = HBufC16::NewLC(aSourceLine.Length()); + pBuf16->Des().Copy(aSourceLine); + TLex sourceLineLex = pBuf16->Ptr(); + //parse until start of filename and mark + length+=3; // length (init'd to 6 above) now equals 9 ie. "begin ###" + sourceLineLex.Inc(length); // skips "begin ###" + sourceLineLex.SkipSpace(); // skips any leading whitespace + + ExtractFilename(sourceLineLex, iAttachmentName); + CleanupStack::PopAndDestroy(); // pBuf8 + return ETrue; + } + } + + return EFalse; + } + + +/** +AddFileExtension() +*/ +void CLocalImRecvConvert::AddFileExtension() + { + switch (iMimeParser->ContentType()) + { + case EMimeText: + // Add on extension to make opening file from email editor possible. + + if ( iMimeParser->ContentSubType()==KImcvHtml ) + iAttachmentName.Append(KHtmlExtension); + else if (iMimeParser->VCard() || iMimeParser->VCalendar()) + iAttachmentName.Append(KVCardExtension); + else //if ( iMimeParser->ContentSubType()==KImcvPlain) + iAttachmentName.Append(KTextExtension); + break; + case EMimeImage: + case EMimeAudio: + case EMimeVideo: + if ( (iMimeParser->ContentSubType()==KImcvBmp) + || (iMimeParser->ContentSubType()==KImcvGif) + || (iMimeParser->ContentSubType()==KImcvJpeg) + || (iMimeParser->ContentSubType()==KImcvTiff) + || (iMimeParser->ContentSubType()==KImcvWav) ) + { + TBuf buf; + buf.Copy(iMimeParser->ContentSubType()); + iAttachmentName.Append(KImcvFullStop); + iAttachmentName.Append(buf); + } + break; + default: + break; + } // End switch + } + + +/** +WriteToBodyL() + +@param aText +@param aBlankLine +*/ +void CLocalImRecvConvert::WriteToBodyL(const TDesC8& aText, TBool aBlankLine) + { + RECVLOG(KWritingToBody) + + if(aText.Length() && aText[aText.Length()-1]==CEditableText::ELineBreak ) + RECVLOG(KLineHasLineBreak) + TInt pos = iOutputBody->DocumentLength(); + + // Add bits of body text, converting along the way, till no characters left + // .. to convert. + + if(aBlankLine) + { + RECVLOG(KBlankLine); + iOutputBody->InsertL(pos, CEditableText::EParagraphDelimiter); + pos++; + return; + } + + // Convert text before writing to body. + TInt rem = 0; + HBufC16* text16=HBufC16::NewLC(aText.Length()); + TPtr16 ptr16(text16->Des()); + TInt unconvertedChars, firstPos; // not used + rem = iCharConv->ConvertToOurCharsetL(aText, ptr16, unconvertedChars, firstPos); + if (rem < 0) // error + { + // Copy unconverted characters. + Append(ptr16, aText); + iOutputBody->InsertL(pos, ptr16); + CleanupStack::PopAndDestroy(); // text16 + return; + } + else if (rem && rem < KConversionRemainderLength) + iLeftOver.Copy(aText.Right(rem)); + + // Make sure that the line is not CRLF terminated + // - replace with a line break if necessary. + + TInt length = ptr16.Length(); + switch(iAlgorithm) + { + case EBase64Decode: + case EUUDecode: + { + // Check for CRLF throughout the string. + + if (!length) + break; // String length zero. + + if (iEncounteredLineEndingInCarriageReturn) + { + pos--; // overwrite the stored CR. + ptr16[0] = CEditableText::ELineBreak; + } + iEncounteredLineEndingInCarriageReturn = ptr16[length-1]==KImcvCR ? ETrue:EFalse; + + TInt start = 0; + TInt offset = ptr16.Find(KImcvCRLF16); + + while (offset != KErrNotFound) + { + ptr16[offset] = CEditableText::ELineBreak; + const TDesC& buf = ptr16.Mid(start, offset-start+1); + iOutputBody->InsertL(pos, buf); + pos += buf.Length(); + start=offset+2; // Skip the LF char. + offset = ptr16.Find(KImcvCRLF16); + } + + if (startInsertL(pos, buf); + pos += buf.Length(); + } + } + break; + + case EQPDecode: + case ENoAlgorithm: + default: + // Check for CRLF at end of line. + if(length>=2 && ptr16[length-2]==KImcvCR && ptr16[length-1]==KImcvLF) + { + ptr16[length-2] = CEditableText::ELineBreak; + ptr16.SetLength(length-1); + } + + const TDesC& buf = text16->Des(); + iOutputBody->InsertL(pos, buf); + pos += buf.Length(); + } + + CleanupStack::PopAndDestroy(text16); + + RECVLOG(KWroteToBody) + } + + +/** +WriteToBodyL() + +@param aText +*/ +void CLocalImRecvConvert::WriteToBodyL(const TDesC16& aText) + { + RECVLOG(KWritingToBody) + if (aText.Length() && aText[aText.Length()-1]==CEditableText::ELineBreak) + RECVLOG(KLineHasLineBreak) + + TInt pos = iOutputBody->Read(0).Length(); + // get the text in before the paragraph marker that's always there + pos = pos-1 < 0 ? 0 : pos-1; + iOutputBody->InsertL(pos,aText); + + RECVLOG(KWroteToBody) + } + + +/** +ParseRecipientListL() + +@param aList +*/ +void CLocalImRecvConvert::ParseRecipientListL(CDesCArray& aList) + { + HBufC8* pBuf = HBufC8::NewLC(KMaxIMailHeaderReadLineLength); + TPtrC8 source(iRfc822Token->OutputLine()->Ptr(), iRfc822Token->OutputLine()->Length()); + const TUint8* ptr = source.Ptr(); + TUint8 lookFor = 0; + TInt count = 0; + TBool finishedEntry = EFalse; + + // get past white space + while(*ptr&&((*ptr==KImcvSP)||(*ptr==KImcvSemiColon))) ptr++; + + while(*ptr&&((ptr-source.Ptr())<(source.Length()))) + { + if(!pBuf->Length()) + { + finishedEntry = EFalse; + } + + switch(*ptr) + { + case KImcvLeftBracket: + if(lookFor==KImcvRightBracket) + count++; + else + { + lookFor = KImcvRightBracket; + count = 1; + } + break; + case KImcvLeftChevron: + if(lookFor==KImcvRightChevron) + count++; + else + { + lookFor = KImcvRightChevron; + count = 1; + } + break; + case KImcvDoubleQuote: + lookFor = (TUint8)(lookFor==KImcvDoubleQuote ? 0 : KImcvDoubleQuote); + count = (lookFor ? 1 : 0); + break; + case KImcvRightBracket: + case KImcvRightChevron: + count -= (*ptr == lookFor ? 1 : 0); + lookFor = (TUint8)((*ptr == lookFor)&&(count == 0) ? 0 : lookFor); + break; + case KImcvComma: + case KImcvSemiColon: + finishedEntry = !lookFor; + break; + } + + if(!finishedEntry) + { + // check we're not about to blow the buffer + if(pBuf->Length() >= pBuf->Des().MaxLength()) + { + pBuf = pBuf->ReAlloc(pBuf->Length() + 64); // arbitrary extension + } + pBuf->Des().Append((TChar)*ptr); + // move to the next character + ptr++; + } + else + { + // that's it! store the address away + HBufC16* pBuf16 = HBufC16::NewLC(pBuf->Des().Length()); + pBuf16->Des().Copy(pBuf->Des()); + aList.AppendL( (HBufC16&) *pBuf16 ); + CleanupStack::PopAndDestroy(); // pBuf16 + pBuf->Des().SetLength(0); + + // get past the separator + ptr++; + + // get past white space (& any other separators) + while(*ptr && (*ptr==KImcvSP || *ptr==KImcvTab || *ptr==KImcvComma || *ptr==KImcvSemiColon)) ptr++; + } + } + // catch the last name in the list + if (pBuf) + { + TInt recipientLength = pBuf->Length(); + if (recipientLength) + { + HBufC16* pBuf16 = HBufC16::NewLC(recipientLength); + pBuf16->Des().Copy(*pBuf); + aList.AppendL(*pBuf16); + CleanupStack::PopAndDestroy(); // pBuf16 + } + } + + CleanupStack::PopAndDestroy(); // pBuf + } + + +/** +ExtractFilename() + +@param aLex +@param rFileName +*/ +void CLocalImRecvConvert::ExtractFilename(TLex& aLex, TDes& rFileName) + { + // This function steps through the filename extracting the bare name and checking + // the length is less than the max of 256 for EPOC ;checks that all chars are legal for EPOC32 + + TChar endChar = KImcvSemiColon; + + aLex.SkipSpace(); + + if (aLex.Peek()==KImcvDoubleQuote) + { + aLex.Inc(); // step over the " character + endChar = KImcvDoubleQuote; + } + + aLex.Mark(); // marks where we are as this is the first char of the filename + + TInt fileNameLength = 0; + TInt maxFileNameLength = rFileName.MaxLength(); + + while(!aLex.Eos() && aLex.Peek()!=endChar && aLex.Peek()!=KImcvCR && fileNameLength < maxFileNameLength) + //spools through the string until the end and marks char before quote (such that + // it extracts only the filename), EOS or before the maximum buffer length is exceeded + { + fileNameLength++; + aLex.Inc(); + } + + TPtrC marked = aLex.MarkedToken(); + rFileName.Copy(marked); + + ReplaceInvalidCharacters(rFileName); + } + + +/** +SetAttachmentName() + +@param aFileName +*/ +void CLocalImRecvConvert::SetAttachmentName(TDes& aFileName) + { + ReplaceInvalidCharacters(aFileName); + iAttachmentName.Zero(); + + TUint delimiter = '.'; + TInt maxLength = iAttachmentName.MaxLength(); + + __ASSERT_DEBUG( + maxLength >= aFileName.Length(), gPanic(KPanicReadLengthTooLarge) + ); + + iAttachmentName.Copy(aFileName); + TInt attachmentLen = iAttachmentName.Length(); + if (attachmentLen == 0) + iAttachmentName = *iDefaultAttachmentName; + else if (iAttachmentName[0] == delimiter && maxLength >= attachmentLen + iDefaultAttachmentName->Length()) + iAttachmentName.Insert(0, *iDefaultAttachmentName); + } + + +/** +ReplaceInvalidCharacters() + +@param rFileName +*/ +void CLocalImRecvConvert::ReplaceInvalidCharacters(TDes& rFileName) + { + TInt length = rFileName.Length(); + for(TInt index=0; index < length; index++) + { + //parse extracted filename and replace any illegal chars with a default. + + if(IsIllegalChar((TUint)rFileName[index])) + rFileName[index] = KImcvDefaultChar; + } + } + + +/** +StoreEntryStreamsL() +*/ +void CLocalImRecvConvert::StoreEntryStreamsL() + { + StoreEntryStreamsL(KStoreBodyText|KStore822Header|KStoreMIMEHeader); + } + + +/** +StoreEntryStreamsL() + +@param aSettings +*/ +void CLocalImRecvConvert::StoreEntryStreamsL(TInt aSettings) + { + RECVLOG(KStartStoringEntryStream); + if (iReceivingHeadersOnly==EFalse) + { + CMsvStore* entryStore = NULL; + TBool commitStore = EFalse; + + TRAPD(error, entryStore = iServerEntry->EditStoreL()); + if(error==KErrNone) // if store does not exist then the entry is the wrong type + { + CleanupStack::PushL(entryStore); + + if (aSettings & KStore822Header) + Store822HeaderL(*entryStore, commitStore); + + if (aSettings & KStoreMIMEHeader) + StoreMIMEHeaderL(*entryStore, commitStore); + + if (aSettings & KStoreBodyText) + StoreBodyTextL(*entryStore, commitStore); + + // only commit to the store if I wrote something into it + if (commitStore) + { + RECVLOG(KStoringEntryStream); + entryStore->CommitL(); + } + + StoreEntryDataL(); + CleanupStack::PopAndDestroy(); //entryStore + } + + } + RECVLOG(KDoneStoringEntryStream); + } + + +/** +Store822HeaderL() + +@param aStore +@param aCommit +*/ +void CLocalImRecvConvert::Store822HeaderL(CMsvStore& aStore, TBool& aCommit) + { + if(iEmptyHeaderSize<(iOutputHeader->DataSize())) + { + iEntryDataSize += iOutputHeader->DataSize()-iEmptyHeaderSize; + RECVLOG(KStoringHeader); + iOutputHeader->StoreL(aStore); + RECVLOG(KStoredHeader); + aCommit = ETrue; + } + } + + +/** +StoreMIMEHeaderL() + +@param aStore +@param aCommit +*/ +void CLocalImRecvConvert::StoreMIMEHeaderL(CMsvStore& aStore, TBool& aCommit) + { + if(iMimeParser->MimeHeaderSize()) + { + RECVLOG(KStoringMIMEHeader); + iMimeParser->StoreMimeHeaderWithoutCommitL(aStore); + aCommit = ETrue; + RECVLOG(KStoredMIMEHeader); + } + } + + +/** +StoreBodyTextL() + +@param aStore +@param aCommit +*/ +void CLocalImRecvConvert::StoreBodyTextL(CMsvStore& aStore, TBool& aCommit) + { + if (iStore8BitData) + { + if(iBodyBuf->Size()) + { + iEntryDataSize += iBodyBuf->Size(); + RECVLOG(KStoring8BitBody); + iBodyText->StoreL(aStore, *iBodyBuf); + aCommit = ETrue; + RECVLOG(KStored8BitBody); + } + } + else + { + if(iOutputBody->DocumentLength()) + { + iEntryDataSize += iOutputBody->DocumentLength(); + RECVLOG(KStoringBody); + aStore.StoreBodyTextL(*iOutputBody); + aCommit = ETrue; + RECVLOG(KStoredBody); + } + } + } + + +/** +StoreEntryDataL() + +@return +*/ +TBool CLocalImRecvConvert::StoreEntryDataL() + { + // NB function should only be called if a whole email is being processed + TBool commit=EFalse; + RECVLOG(KUpdatingEntry) + + if (iEmailEntry->iType==KUidMsvMessageEntry) + iParent->At(0).iSize += iEntryDataSize; + else + { + iEmailEntry->iSize += iEntryDataSize; + if (iEntryType==EAttachmentEntry || iEntryType==EHtmlEntry) + iEmailEntry->iDetails.Set(iAttachmentName); + } + User::LeaveIfError(iServerEntry->ChangeEntry(*iEmailEntry)); + + RECVLOG(KUpdatedEntry) + return commit; // if I wrote data into the store, tell owner + } + + +/** +MoveToParentEntryL() +*/ +void CLocalImRecvConvert::MoveToParentEntryL() + { + // This function changes the context to the current entry's parent entry. + RECVLOG(KMoveToParentEntry) + + // Change context to the parent entry + if (EntryId()==iTopMessagePart) + return; // Already there. + + User::LeaveIfError(iServerEntry->SetEntry(iServerEntry->Entry().Parent())); + + iNewEntry = EFalse; + + // only read and write to store if this is a real email message; headers stored in + // the remote mailbox do not require any store information. + if (iReceivingHeadersOnly) + { + RECVLOG(KIgnoringStreams) + return; + } + + TBool allowAttachmentFlag=ETrue; + if(iServerEntry->Entry().iType == KUidMsvFolderEntry) + { + // Current entry is a folder entry signifying a MIME multipart. + // Change context to the parent entry + + TMsvEmailEntry entry = (TMsvEmailEntry) iServerEntry->Entry(); + iCurrentMultipartFolderEntryId = EntryId(); + allowAttachmentFlag = !(entry.MessageFolderType()==EFolderTypeRelated || + entry.MessageFolderType()==EFolderTypeAlternative); + + + if (EntryId()!=iTopMessagePart) + User::LeaveIfError(iServerEntry->SetEntry(iServerEntry->Entry().Parent())); + } + + TBool childIsAttachment = (iEmailEntry->Attachment() || iEmailEntry->iType == KUidMsvMessageEntry) ? ETrue:EFalse; + TBool childIsMHTML=EFalse; + // Dont want the flag propogated 'up' past a message entry. + if(iEmailEntry->iType != KUidMsvMessageEntry) + childIsMHTML = iEmailEntry->MHTMLEmail() ? ETrue:EFalse; + + //Make the parent entry the current entry + if (NULL!=iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + iEmailEntry = new (ELeave) TMsvEmailEntry(iServerEntry->Entry()); + + if (!iParent->Count()) + { + TParentDetails parentDetails; + iParent->InsertL(0,parentDetails); + } + + if (! iParent->At(0).iAttachment) + { + iParent->At(0).iAttachment=(childIsAttachment && allowAttachmentFlag)? ETrue:EFalse; + + // if we aren't allowing attachments because of the folder type + // remember there where attachments and check at the end whether + // it was an MHTML message or not. + if(childIsAttachment && !allowAttachmentFlag) + { + iRelatedAttachments=ETrue; + } + } + if (!iParent->At(0).iMHTML) + iParent->At(0).iMHTML = childIsMHTML ? ETrue:EFalse; + iParent->At(0).iSize += iEntryDataSize; + + iOutputHeader->Reset(); + iEmptyHeaderSize=iOutputHeader->DataSize(); + iMimeParser->ResetForNewEntry(); + + iEntryDataSize=0; + + RECVLOG(KMovedToParentEntry) + } + +/** +WritePartialFooterL() +Helper function to add the partial footer to the email if it exists + +@param aAmountLeft +*/ +void CLocalImRecvConvert::WritePartialFooterL(TInt aAmountLeft) + { + TMsvId msgId=iBodyId; + if (msgId==KMsvNullIndexEntryId) + return; + TMsvId id = iServerEntry->Entry().Id(); + if (iServerEntry->SetEntry(msgId)==KErrNone) + { + TBool storePresent = iServerEntry->HasStoreL(); + if (storePresent && iPartialEmailFooter->Length()>0 && aAmountLeft>0) + { + CMsvStore* store = iServerEntry->ReadStoreL(); + CleanupStack::PushL(store); + if (store->HasBodyTextL()) + { + iOutputBody->Reset(); + store->RestoreBodyTextL(*iOutputBody); + CleanupStack::PopAndDestroy(store); + HBufC* msg=NULL; + if (iPartialEmailFooter->Find(KIntegerKey)!=KErrNotFound) + { + // display k left on the server, rounded up if between 1 and 1023 bytes + TInt kBytesLeft = aAmountLeft / 1024; + if(kBytesLeft == 0) + kBytesLeft = 1; + msg = HBufC::NewLC(iPartialEmailFooter->Length()+KSpaceToAddNumber); + msg->Des().Format(*iPartialEmailFooter,kBytesLeft); + } + else + { + msg = iPartialEmailFooter->AllocLC(); + } + iOutputBody->AppendParagraphL(); + TInt length = iOutputBody->DocumentLength(); + iOutputBody->InsertL(length,*msg); + CleanupStack::PopAndDestroy(msg); + store=NULL; + store = iServerEntry->EditStoreL(); + CleanupStack::PushL(store); + store->StoreBodyTextL(*iOutputBody); + store->Commit(); + CleanupStack::PopAndDestroy(store); + } + else + { + CleanupStack::PopAndDestroy(store); + } + } + } + iServerEntry->SetEntry(id); + } + + +/** +CreateEntryL() +*/ +void CLocalImRecvConvert::CreateEntryL() + { + RECVLOG(KCreatingEntry); + if (NULL!=iEmailEntry) + { + delete iEmailEntry; + iEmailEntry=NULL; + } + + if (iCurrentMultipartFolderEntryId) + { + User::LeaveIfError(iServerEntry->SetEntry(iCurrentMultipartFolderEntryId)); + iCurrentMultipartFolderEntryId=0; + } + + iEmailEntry = new (ELeave) TMsvEmailEntry; + + TValidEntryType previousEntryType = iEntryType; + if (!iTopMessagePart || iMIMEPart_822Header) + { + // At the main header, want to create a message entry. + // The stored iEntryType will indicate ( from header info) the next entry to be created. + // Save temporarily. + // Also applies to the special case where a message contains ony 1 embedded message. + + previousEntryType=iEntryType; + iEntryType=EMessageEntry; + } + + if ((iPopulateMessage) && (!iTopMessagePart)) + // If this is the root of a message that is being populated then do not create it. + { + User::LeaveIfError(iServerEntry->SetEntry(iRootEntryId)); + *iEmailEntry = iServerEntry->Entry(); + iTopMessagePart=iRootEntryId; + + // Delete all the children of the message entry. This is needed because if the + // message has been purged, the entries will still exist. When the message is populated, + // new entries are created. If the original entries are not removed, then duplicate + // entries will exist. + CMsvEntrySelection* children = new(ELeave) CMsvEntrySelection; + CleanupStack::PushL(children); + User::LeaveIfError(iServerEntry->GetChildren(*children)); + if (children->Count()) + iServerEntry->DeleteEntries(*children); + CleanupStack::PopAndDestroy(children); + } + else + { + iEmailEntry->iMtm=iNewMsgType; + iEmailEntry->iServiceId = iEmailServiceId; + iEmailEntry->SetComplete(EFalse); + iEmailEntry->iSize = 0; + iEmailEntry->SetVisible(ETrue); + iEmailEntry->SetInPreparation(EFalse); + iEmailEntry->SetReceipt(EFalse); + + iEmailEntry->SetVCard(iMimeParser->VCard()); + iEmailEntry->SetVCalendar(iMimeParser->VCalendar()); + iEmailEntry->SetMessageFolderType(iMimeParser->MessageFolderType()); + iEmailEntry->SetPriority(iImPriority); + iEmailEntry->SetNew(EFalse); + + if(iOutputHeader->ReceiptAddress().Length()>0) + iEmailEntry->SetReceipt(ETrue); + + iEmailEntry->iDate=iTimeDate; + switch(iEntryType) + { + case EMessageEntry: + if(!iTopMessagePart) + { + iEmailEntry->SetUnread(ETrue); + iEmailEntry->SetNew(ETrue); + iEmailEntry->SetVisible(EFalse); + iEmailEntry->SetInPreparation(ETrue); + iEmailEntry->SetSendingState(KMsvSendStateNotApplicable); + } + else + { + TParentDetails parentDetails; + parentDetails.iMHTML=EFalse; + parentDetails.iAttachment=EFalse; + parentDetails.iSize=0; + iParent->InsertL(0,parentDetails); + } + iEmailEntry->iType=KUidMsvMessageEntry; + iEmailEntry->iDetails.Set(iOutputHeader->From()); + iEmailEntry->iDescription.Set(iOutputHeader->Subject()); + break; + case EFolderEntry: + iEmailEntry->iType=KUidMsvFolderEntry; + if (iMimeParser->MessageFolderType()==EFolderTypeUnknown) + { + // Get folder type of parent (the message) + TMsvEmailEntry entry=iServerEntry->Entry(); + iEmailEntry->SetMessageFolderType(entry.MessageFolderType()); + } + break; + case EAttachmentEntry: + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + break; + case ETextEntry: + if ( iMimeParser->ContentDisposition()!=KImcvAttachment) + iEmailEntry->iType=KUidMsvEmailTextEntry; + else + { + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + } + break; + case EHtmlEntry: + iEmailEntry->iType=KUidMsvEmailHtmlEntry; + // If disposition not set or is inline.. + if ( iMimeParser->ContentDisposition()==KImcvAttachment) + iEmailEntry->iType=KUidMsvAttachmentEntry; + else + iEmailEntry->SetMHTMLEmail(ETrue); + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + break; + default: + iEmailEntry->iType=KUidMsvAttachmentEntry; + iEmailEntry->iDetails.Set(iAttachmentName); + iEmailEntry->iDescription.Set(iMimeParser->ContentDescription()); + } + + User::LeaveIfError(iServerEntry->CreateEntry(*iEmailEntry)); + User::LeaveIfError(iServerEntry->SetEntry(iEmailEntry->Id())); + if(!iTopMessagePart) + iTopMessagePart=iEmailEntry->Id(); + + //if (iEntryType==EHtmlEntry && iAttachmentFileState!=EFileIsOpen) + // CreateAttachmentL(); + } + + iEntryType=previousEntryType; + iNewEntry = ETrue; + RECVLOG(KCreatedEntry); + } + + +/** +Logging() + +@param aString1 +@param aString2 +*/ +void CLocalImRecvConvert::Logging(const TDesC8& aString1, const TDesC8& aString2) + { + TBuf8<1024> aBuf(aString1); + + aBuf.Append(aString2); + RECVLOG(aBuf); + } + + +/** +StoreMessageEntryDetailsL() +*/ + void CLocalImRecvConvert::StoreMessageEntryDetailsL() + { + iEmailEntry->SetAttachment(iParent->At(0).iAttachment); + iEmailEntry->SetMHTMLEmail(iParent->At(0).iMHTML); + + if(iEmailEntry->MHTMLEmail() == EFalse && iEmailEntry->Attachment() == EFalse && iRelatedAttachments !=EFalse) + { + iEmailEntry->SetAttachment(ETrue); + } + iRelatedAttachments=EFalse; + + iEmailEntry->iSize=iParent->At(0).iSize; + iEmailEntry->SetMessageFolderType(iParent->At(0).iFolder); + StoreEntryDataL(); + + if (iParent->Count()>1) + { + iParent->At(1).iSize+=iEmailEntry->iSize; + iParent->Delete(0); + } + else + { + iParent->At(0).iAttachment=iParent->At(0).iMHTML=EFalse; + iParent->At(0).iSize=0; + } + } + + +/** +DeletedAttachmentSize() + +@return +*/ + TInt CLocalImRecvConvert::DeletedAttachmentSize() + { + return iSizeOfAttachmentsRemoved; + } + +/**************************************************************************** + Class CLocalMimeParser functions +*****************************************************************************/ + +/** +NewLC() +Static factory constructor. Uses two phase construction +and pushes the newly created object into the Cleanup stack. + +@param aImRecvConvert +@return +*/ +CLocalMimeParser* CLocalMimeParser::NewLC(CLocalImRecvConvert& aImRecvConvert) + { + CLocalMimeParser* self = new (ELeave) CLocalMimeParser(aImRecvConvert); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + + +/** +NewL() +Static factory constructor. Uses two phase construction. + +@param aImRecvConvert +@return +*/ + CLocalMimeParser* CLocalMimeParser::NewL(CLocalImRecvConvert& aImRecvConvert) + { + CLocalMimeParser* self = CLocalMimeParser::NewLC(aImRecvConvert); + CleanupStack::Pop(); + return self; + } + + +/** +CLocalMimeParser() + +@param aImRecvConvert +@return +*/ +CLocalMimeParser::CLocalMimeParser(CLocalImRecvConvert& aImRecvConvert): iImRecvConvert(aImRecvConvert), + iStartId(NULL) + + { + __DECLARE_NAME(_S("CLocalMimeParser")); + } + + +/** +ConstructL() +*/ +void CLocalMimeParser::ConstructL() + { + iMimeHeader = CImMimeHeader::NewL(); + // Create a Desc array to store the boundary strings of a Mime message + iBoundaryText = new (ELeave) CDesC8ArrayFlat(3); + + // Set charset default value + iDefaultCharset=iImRecvConvert.CharacterConverter().DefaultCharset(); + iCharset = iDefaultCharset; + ResetMimeFieldsExist(); + + Reset(); + } + + +/** +~CLocalMimeParser() +*/ +CLocalMimeParser::~CLocalMimeParser() + { + delete iMimeHeader; + iMimeHeader=NULL; + delete iBoundaryText; + iBoundaryText=NULL; + delete iMimeHeaderLine; + iMimeHeaderLine=NULL; + delete iStartId; + iStartId=NULL; + } + + +/** +Reset() +*/ +void CLocalMimeParser::Reset() + { + iBoundaryText->Reset(); + iBoundaryIndex = 0; + iBoundaryLength = 0; + isMime = EFalse; + + ResetForNewEntry(); + } + + +/** +ResetForNewEntry() +*/ +void CLocalMimeParser::ResetForNewEntry() + { + iMimeHeader->Reset(); + iEmptyMimeHeaderSize=iMimeHeader->Size(); + + iContentType = EMimeUnknownContent; + iContentEncoding = EEncodingTypeNone; + iContentDescription.Zero(); + iVCard = EFalse; + iVCalendar = EFalse; + iStartPart=EFalse; + iMessageFolderType = EFolderTypeUnknown; + iTerminatingBoundary = EFalse; + iBoundaryFound = EFalse; + } + + +/** +RestoreMimeParserL() + +@param entryStore +*/ +void CLocalMimeParser::RestoreMimeParserL(CMsvStore& entryStore) + { + iMimeHeader->RestoreL(entryStore); + if(iMimeHeader->ContentType().Compare(KImcvText)==0) + iContentType=EMimeText; + else + if(iMimeHeader->ContentType().Compare(KImcvMessage)==0) + iContentType=EMimeMessage; + else + if(iMimeHeader->ContentType().Compare(KImcvMultipart)==0) + iContentType=EMimeMultipart; + else + if(iMimeHeader->ContentType().Compare(KImcvImage)==0) + iContentType=EMimeImage; + else + if(iMimeHeader->ContentType().Compare(KImcvApplication)==0) + iContentType=EMimeApplication; + else + if(iMimeHeader->ContentType().Compare(KImcvAudio)==0) + iContentType=EMimeAudio; + else + if(iMimeHeader->ContentType().Compare(KImcvVideo)==0) + iContentType=EMimeVideo; + else + iContentType=EMimeUnknownContent; + + } + + +/** +ParseLineL() + +@param aSourceLine +*/ +void CLocalMimeParser::ParseLineL(const TDesC8& aSourceLine) + { + if(iMimeHeaderLine==NULL) + { + iMimeHeaderLine = HBufC8::NewL(aSourceLine.Length()); + *iMimeHeaderLine = aSourceLine; + } + + iLex = *iMimeHeaderLine; + + // find out whether the current line has anything to do with currently understood MIME Content tokens + if(!iMimeHeaderLine->MatchF(KImcvMime) || !iMimeHeaderLine->MatchF(KImcvContent)) + { + if(MatchAndRemoveToken(KImcvMimePrompt)) + DoMimeVersion(); + else if(MatchAndRemoveToken(KImcvContentType)) + DoContentTypeL(); + else if(MatchAndRemoveToken(KImcvContentLocation)) + DoContentLocationL(); + else if(MatchAndRemoveToken(KImcvContentTransferEncoding)) + DoEncodingL(); + else if(MatchAndRemoveToken(KImcvContentId)) + { + RemoveSurroundingCharacters(KImcvLeftChevron, KImcvRightChevron, *iMimeHeaderLine); + DoContentIdL(); + } + else if(MatchAndRemoveToken(KImcvContentDescription)) + DoDescriptionL(); + else if(MatchAndRemoveToken(KImcvContentDisposition)) + DoDispositionL(); + else if(MatchAndRemoveToken(KImcvContentBase)) + DoContentBaseL(); + } + + delete iMimeHeaderLine; // clean up and null pointer iff CompleteMimeHeader and no foldover append req'd + iMimeHeaderLine=NULL; + } + + +/** +DoMimeVersion() +*/ +void CLocalMimeParser::DoMimeVersion() + { + // extract the MIME version from a header line which we already know + // has 'MIME-Version' start of it. + if(MatchAndRemoveToken(KImcvMimeVersion)) + iCorrectMimeVersion = ETrue; + } + + +/** +DoContentIdL() +*/ +void CLocalMimeParser::DoContentIdL() + { + iMimeHeader->SetContentIDL(iMimeHeaderLine->Des()); + if(iStartId && iStartId->CompareF(iMimeHeaderLine->Des())==KErrNone) + iStartPart=ETrue; + } + + +/** +DoContentLocationL() +*/ +void CLocalMimeParser::DoContentLocationL() + { + TInt len = (*iMimeHeaderLine).Length(); + if (len == 0) + return; + + RemoveSurroundingCharacters(KImcvQuote, KImcvQuote, *iMimeHeaderLine); + + HBufC16* locationBuf = HBufC16::NewL( len ); + CleanupStack::PushL(locationBuf); + TPtr locationPtr(locationBuf->Des()); + iImRecvConvert.iHeaderConverter->DecodeHeaderFieldL( iMimeHeaderLine->Des(), locationPtr); + iMimeHeader->SetContentLocationL(locationPtr); + CleanupStack::PopAndDestroy(); // locationBuf + } + + +/** +DoContentBaseL() +*/ +void CLocalMimeParser::DoContentBaseL() + { + RemoveSurroundingCharacters(KImcvQuote, KImcvQuote, *iMimeHeaderLine); + iMimeHeader->SetContentBaseL(iMimeHeaderLine->Des()); + } + + +/** +DoAttachmentTypeL() +*/ +void CLocalMimeParser::DoAttachmentTypeL() + { + iImRecvConvert.iEntryType = CLocalImRecvConvert::EAttachmentEntry; + iImRecvConvert.iCurrentPartIsRichText = EFalse; + + if(MatchAndRemoveToken(KImcvForwardSlash)) + { + if(MatchAndRemoveToken(KImcvBmp)) + { + iMimeHeader->SetContentSubTypeL(KImcvBmp); + } + else + if(MatchAndRemoveToken(KImcvGif)) + { + iMimeHeader->SetContentSubTypeL(KImcvGif); + } + else + if(MatchAndRemoveToken(KImcvJpeg)) + { + iMimeHeader->SetContentSubTypeL(KImcvJpeg); + } + else + if(MatchAndRemoveToken(KImcvTiff)) + { + iMimeHeader->SetContentSubTypeL(KImcvTiff); + } + else + if(MatchAndRemoveToken(KImcvWav)) + { + iMimeHeader->SetContentSubTypeL(KImcvWav); + } + else + if(MatchAndRemoveToken(KImcvZip)) + { + iMimeHeader->SetContentSubTypeL(KImcvZip); + } + else + if(MatchAndRemoveToken(KImcvOctetStream)) + { + iMimeHeader->SetContentSubTypeL(KImcvOctetStream); + } + else + if(MatchAndRemoveToken(KImcvExe)) + { + iMimeHeader->SetContentSubTypeL(KImcvExe); + } + else + if(MatchAndRemoveToken(KImcvCmd)) + { + iMimeHeader->SetContentSubTypeL(KImcvCmd); + } + else + if(MatchAndRemoveToken(KTImcvDrm)) + { // added this to handle DRM files + iMimeHeader->SetContentSubTypeL(KTImcvDrm); + } + } + } + + +/** +DoMessageTypeL() +*/ +void CLocalMimeParser::DoMessageTypeL() + { + iImRecvConvert.iEntryType = CLocalImRecvConvert::EMessageEntry; + iImRecvConvert.iEmailPart = CLocalImRecvConvert::KParentPart; + + iContentType=EMimeMessage; + iMimeHeader->SetContentTypeL(KImcvMessage); + + if(MatchAndRemoveToken(KImcvForwardSlash)) + { + if(MatchAndRemoveToken(KImcvRfc822)) + { + //iMessageFolderType=EFolderTypeRFC822; + iMimeHeader->SetContentSubTypeL(KImcvRfc822); + } + else if(MatchAndRemoveToken(KImcvExternal)) + { + iMessageFolderType=EFolderTypeExternal; + iMimeHeader->SetContentSubTypeL(KImcvExternal); + } + else if(MatchAndRemoveToken(KImcvPartial)) + { + iMessageFolderType=EFolderTypePartial; + iMimeHeader->SetContentSubTypeL(KImcvPartial); + } + else if(MatchAndRemoveToken(KImcvDeliveryStatus)) + { + // We do not process this part. So store as text. + iMimeHeader->SetContentSubTypeL(KImcvDeliveryStatus); + iImRecvConvert.iEntryType = CLocalImRecvConvert::EAttachmentEntry; + iImRecvConvert.iEmailPart = CLocalImRecvConvert::KNoPart; + iContentType=EMimeUnknownContent; + iImRecvConvert.iCurrentPartIsRichText=EFalse; + iImRecvConvert.iAttachmentName.Copy(KImcvDeliveryStatus); + iImRecvConvert.iAttachmentName.Append(KTextExtension); + } + else + { + iMessageFolderType=EFolderTypeUnknown; + iMimeHeader->SetContentSubTypeL(KImcvUnknown); + } + } + } + + +/** +DoMultipartTypeForNonMIMEL() +*/ +void CLocalMimeParser::DoMultipartTypeForNonMIMEL() + { + ResetForNewEntry(); + iMessageFolderType=EFolderTypeMixed; + iMimeHeader->SetContentTypeL(KImcvMultipart); + iMimeHeader->SetContentSubTypeL(KImcvMixed); + } + + +/** +DoMultipartTypeL() +*/ +void CLocalMimeParser::DoMultipartTypeL() + { + iImRecvConvert.iEntryType = CLocalImRecvConvert::EFolderEntry; + iImRecvConvert.iEmailPart = CLocalImRecvConvert::KMultiPart; + + iContentType=EMimeMultipart; + iMimeHeader->SetContentTypeL(KImcvMultipart); + + if(MatchAndRemoveToken(KImcvForwardSlash)) + { + if(MatchAndRemoveToken(KImcvMixed)) + { + iMessageFolderType=EFolderTypeMixed; + iMimeHeader->SetContentSubTypeL(KImcvMixed); + } + else if(MatchAndRemoveToken(KImcvRelated)) + { + iMessageFolderType=EFolderTypeRelated; + iMimeHeader->SetContentSubTypeL(KImcvRelated); + } + else if(MatchAndRemoveToken(KImcvAlternative)) + { + iMessageFolderType=EFolderTypeAlternative; + iMimeHeader->SetContentSubTypeL(KImcvAlternative); + } + else if(MatchAndRemoveToken(KImcvEncrypted)) + { +// Add this when Encryption is handled iMessageFolderType=EFolderTypeEncrypted; + iMimeHeader->SetContentSubTypeL(KImcvEncrypted); + } + else if(MatchAndRemoveToken(KImcvParallel)) + { + iMessageFolderType=EFolderTypeParallel; + iMimeHeader->SetContentSubTypeL(KImcvParallel); + } + else if(MatchAndRemoveToken(KImcvDigest)) + { + iMessageFolderType=EFolderTypeDigest; + iMimeHeader->SetContentSubTypeL(KImcvDigest); + isMessageDigest=ETrue; + } + else if(MatchAndRemoveToken(KImcvSigned)) + { +// Add this when Signed is handled iMessageFolderType=EFolderTypeSigned; + iMimeHeader->SetContentSubTypeL(KImcvSigned); + } + else if(MatchAndRemoveToken(KImcvReport)) + { + iMimeHeader->SetContentSubTypeL(KImcvReport); + } + else + { + iMessageFolderType=EFolderTypeUnknown; + iMimeHeader->SetContentSubTypeL(KImcvUnknown); + } + } + + if (iMessageFolderType==EFolderTypeRelated) + iImRecvConvert.iParent->At(0).iFolder=iMessageFolderType; + + // Find any parameters specific to a Multipart content type + + HBufC8* paramValue = NULL; + + // Extracts the boundary string + + ExtractParameterInfoL(KImcvBoundary, paramValue); + if( paramValue!=NULL ) + { + CleanupStack::PushL(paramValue); + iBoundaryFound = ETrue; + iImRecvConvert.iEmailPart = CLocalImRecvConvert::KMultiPart; + SetBoundaryL(*paramValue); + CleanupStack::PopAndDestroy(paramValue); + } + + // Extracts start ID if it has been defined; + + ExtractParameterInfoL(KImcvStartPart, paramValue); + if( paramValue!=NULL ) + { + delete iStartId; + iStartId=NULL; + iStartId = paramValue; + } + } + + +/** +DoTextTypeL() +*/ +void CLocalMimeParser::DoTextTypeL() + { + HBufC8* paramValue = NULL; + + iImRecvConvert.iEntryType = CLocalImRecvConvert::ETextEntry; + iContentType=EMimeText; + iMimeHeader->SetContentTypeL(KImcvText); + + if(MatchAndRemoveToken(KImcvForwardSlash)) + { + if(MatchAndRemoveToken(KImcvPlain)) + iMimeHeader->SetContentSubTypeL(KImcvPlain); + else + if(MatchAndRemoveToken(KImcvHtml)) + { + iMimeHeader->SetContentSubTypeL(KImcvHtml); + iImRecvConvert.iEntryType = CLocalImRecvConvert::EHtmlEntry; + iImRecvConvert.iCurrentPartIsRichText = EFalse; + } + else + if(MatchAndRemoveToken(KImcvDirectory)) + { + iMimeHeader->SetContentSubTypeL(KImcvDirectory); + iMimeHeader->ContentTypeParams().AppendL(KImcvProfile); + ExtractParameterInfoL(KImcvProfile, paramValue); + // Assume at right context, the email message, not attachment. + + iMessageFolderType=EFolderTypeDirectory; + if( paramValue!=NULL ) + { + CleanupStack::PushL(paramValue); + iMimeHeader->ContentTypeParams().AppendL(*paramValue); + if(paramValue->MatchF(KImcvVCard) == 0) + { + iVCard=ETrue; + } + CleanupStack::PopAndDestroy(paramValue); + } + } + if(MatchAndRemoveToken(KImcvVCalender)) + iVCalendar=ETrue; + + // Extract the charset value, + + ExtractParameterInfoL(KImcvCharset, paramValue); + + if(paramValue!=NULL) + { + CleanupStack::PushL(paramValue); + // check if at top level header or Mime part header + + TUint charsetUid = iImRecvConvert.CharacterConverter().GetMimeCharsetUidL(*paramValue); + if(iImRecvConvert.NotFinishedRfc822Header() == EFalse) + iCharset=charsetUid; + + // Store in CMimeHeader::iContentTypeParams + iMimeHeader->ContentTypeParams().AppendL(KImcvCharset); + iMimeHeader->ContentTypeParams().AppendL(*paramValue); + CleanupStack::PopAndDestroy(paramValue); + + if (!iImRecvConvert.CharacterConverter().PrepareToConvertToFromOurCharsetL(charsetUid)) + charsetUid=KUidMsvCharsetNone; + iMimeHeader->SetMimeCharset(charsetUid); + } + else + iMimeHeader->SetMimeCharset(iDefaultCharset); + } + } + + +/** +DoContentTypeL() +*/ +void CLocalMimeParser::DoContentTypeL() + { + RemoveSurroundingCharacters(KImcvLeftChevron, KImcvRightChevron, *iMimeHeaderLine); + + if(MatchAndRemoveToken(KImcvText)) + DoTextTypeL(); + else + if(MatchAndRemoveToken(KImcvMultipart)) + DoMultipartTypeL(); + else + if(MatchAndRemoveToken(KImcvMessage)) + DoMessageTypeL(); + else + if(MatchAndRemoveToken(KImcvImage)) + { + iContentType=EMimeImage; + iMimeHeader->SetContentTypeL(KImcvImage); + DoAttachmentTypeL(); + } + else + if(MatchAndRemoveToken(KImcvApplication)) + { + iContentType=EMimeApplication; + iMimeHeader->SetContentTypeL(KImcvApplication); + DoAttachmentTypeL(); + } + else + if(MatchAndRemoveToken(KImcvAudio)) + { + iContentType=EMimeAudio; + iMimeHeader->SetContentTypeL(KImcvAudio); + DoAttachmentTypeL(); + } + else + if(MatchAndRemoveToken(KImcvVideo)) + { + iContentType=EMimeVideo; + iMimeHeader->SetContentTypeL(KImcvVideo); + DoAttachmentTypeL(); + } + else + { + iContentType=EMimeUnknownContent; + iMimeHeader->SetContentTypeL(KImcvUnknown); + } + + // Extract the filename if it exists + HBufC* paramStore = HBufC::NewLC(MaxMimeParameterValueLength); + HBufC8* paramStore8 = HBufC8::NewLC(KMimeEncodedParameterSize); + TPtr paramValue(paramStore->Des()); + TPtr8 paramValue8(paramStore8->Des()); + + ExtractParameterInfoL(KImcvMimeTypeName, paramValue,paramValue8); + if(paramValue.Length()) + { + iMimeHeader->ContentTypeParams().AppendL(KImcvMimeTypeName); + iMimeHeader->ContentTypeParams().AppendL(paramValue8); + iImRecvConvert.SetAttachmentName(paramValue); + } + + CleanupStack::PopAndDestroy(2,paramStore); + } + + +/** +DoEncodingL() +*/ +void CLocalMimeParser::DoEncodingL() + { + iMimeHeader->SetContentTransferEncodingL(*iMimeHeaderLine); + + switch ((*iMimeHeaderLine)[0]) + { + case '7': // 7bit + iContentEncoding = EEncodingType7Bit; + break; + case '8': // 8bit + iContentEncoding = EEncodingType8Bit; + break; + case 'q': // quoted-printable + case 'Q': + iContentEncoding = EEncodingTypeQP; + break; + case 'b': // binary or base64 + case 'B': + iContentEncoding = ((*iMimeHeaderLine)[1] == 'i' || (*iMimeHeaderLine)[1] == 'I' ? EEncodingTypeBinary : EEncodingTypeBASE64); + break; + case 'x': //in order to support UU encoded within a MIME message + case 'X': + iContentEncoding = ((*iMimeHeaderLine).FindF(KImcvXUUString)==KErrNotFound ? EEncodingTypeUnknown : EEncodingTypeUU); + break; + default: + iContentEncoding = EEncodingTypeUnknown; + break; + } + } + + +/** +DoDescriptionL() +*/ +void CLocalMimeParser::DoDescriptionL() + { + TPtrC8 marked(iMimeHeaderLine->Des()); + if (marked.Length()>KMaxFileName) + marked.Set(marked.Left(KMaxFileName)); + + iContentDescription.Copy(marked); + + // remove the CRLF + + TInt length = iContentDescription.Length(); + if (length>2) + { + if (iContentDescription[length-2]==KImcvCR && iContentDescription[length-1]==KImcvLF) + iContentDescription.SetLength(length-2); + } + iMimeHeader->SetContentDescriptionL(marked); + } + + +/** +DoDispositionL() +*/ +void CLocalMimeParser::DoDispositionL() + { + TBool inLine = EFalse; + if(MatchAndRemoveToken(KImcvAttachment)) + { + iMimeHeader->SetContentDispositionL(KImcvAttachment); + if (iMimeHeader->ContentSubType()!=KImcvRfc822) + { + iImRecvConvert.iCurrentPartIsRichText = EFalse; + } + if (iImRecvConvert.iEntryType!=CLocalImRecvConvert::EMessageEntry) + { + iImRecvConvert.iEntryType = CLocalImRecvConvert::EAttachmentEntry; + } + } + else if(MatchAndRemoveToken(KImcvInline)) + inLine = ETrue; + + // Extract the filename if it exists, unless we already have a name for it + if(!iImRecvConvert.iAttachmentName.Length()) + { + HBufC* paramStore = HBufC::NewLC(KHeaderBufferLength); + TPtr paramValue(paramStore->Des()); + HBufC8* paramStore8 = HBufC8::NewLC(KMimeEncodedParameterSize); + TPtr8 paramValue8(paramStore8->Des()); + + ExtractParameterInfoL(KImcvMimeDispositionFilename, paramValue,paramValue8); + if(paramValue.Length()) + { + iMimeHeader->ContentTypeParams().AppendL(KImcvMimeDispositionFilename); + iMimeHeader->ContentTypeParams().AppendL(paramValue8); + iImRecvConvert.SetAttachmentName(paramValue); + } + + CleanupStack::PopAndDestroy(2,paramStore); // paramStore, paramStore8 + } + + if(inLine) + { + // Content Disposition set to inline + if (iImRecvConvert.iAttachmentName.Length()) + // filename exists + { + iMimeHeader->SetContentDispositionL(KImcvAttachment); + iImRecvConvert.iCurrentPartIsRichText = EFalse; + if (iImRecvConvert.iEntryType!=CLocalImRecvConvert::EMessageEntry) + { + iImRecvConvert.iEntryType = CLocalImRecvConvert::EAttachmentEntry; + } + } + else + iMimeHeader->SetContentDispositionL(KImcvInline); + } + } + + +/** +ContentSubType() + +@return +*/ +TPtrC8 CLocalMimeParser::ContentSubType() const + { + return iMimeHeader->ContentSubType();; + } + + +/** +VCard() + +@return +*/ +TBool CLocalMimeParser::VCard() const + { + return iVCard; + } + + +/** +VCalendar() + +@return +*/ +TBool CLocalMimeParser::VCalendar() const + { + return iVCalendar; + } + + +/** +StartPart() + +@return +*/ +TBool CLocalMimeParser::StartPart() const + { + return iStartPart; + } + + +/** +MessageFolderType() + +@return +*/ +TImEmailFolderType CLocalMimeParser::MessageFolderType() const + { + return iMessageFolderType; + } + + +/** +SetMessageFolderType() + +@param aFolderType +*/ +void CLocalMimeParser::SetMessageFolderType(TImEmailFolderType aFolderType) + { + iMessageFolderType=aFolderType; + } + + +/** +SetBoundaryL() + +@param aBoundaryText +*/ +void CLocalMimeParser::SetBoundaryL(const TDesC8& aBoundaryText) + { + TBuf8 tempBoundary(KImcvMimeBoundaryStartEnd); + // From RFC 1521, (Boundaries) must be no longer than 70 characters. + // Including beginning and end "--" + if (aBoundaryText.Length()>70) + tempBoundary.Append(aBoundaryText.Left(70)); + else + tempBoundary.Append(aBoundaryText); + iBoundaryText->AppendL(tempBoundary); + + iBoundaryIndex = iBoundaryText->MdcaCount(); //iBoundaryIndex stores a count value not the index here + iBoundaryIndex = (iBoundaryIndex)? --iBoundaryIndex: 0; + iBoundaryLength = iBoundaryText->MdcaPoint(iBoundaryIndex).Length(); + } + + +/** +IsBoundary() + +@param aSourceLine + @return +*/ +TBool CLocalMimeParser::IsBoundary(const TDesC8& aSourceLine) + { + if(iBoundaryText->MdcaCount()) + { + TInt found = 0; + TInt aLineLength = aSourceLine.Length(); + TInt compareLength = aLineLength > iBoundaryLength ? iBoundaryLength : aLineLength; + TPtrC8 tempSourceLine(aSourceLine.Ptr(), compareLength); + + TInt error = iBoundaryText->Find(tempSourceLine, found, ECmpNormal); + + if(error||(!iBoundaryLength)) + return KBoundaryNotFound; + + // The following code is executed only if aSourceLine is a boundary + if(found != iBoundaryIndex) + { + iReceiveError = (iReceiveError)? iReceiveError: KBoundaryError; + iBoundaryIndex = found; + iBoundaryText->Delete(found++); + } + + if(aLineLength >= iBoundaryLength+4) // allow for CRLF & then check for the double hyphen + { + if((aSourceLine[iBoundaryLength] == KImcvHyphen) && (aSourceLine[iBoundaryLength+1] == KImcvHyphen)) + iTerminatingBoundary = ETrue; // this is a terminating boundary + } + else + iTerminatingBoundary = EFalse; + + return KBoundaryFound; + } + + return KBoundaryNotFound; + } + + +/** +RemoveBoundary() +*/ +void CLocalMimeParser::RemoveBoundary() + { + iBoundaryText->Delete(iBoundaryIndex); + if(iBoundaryText->MdcaCount()) + { + iBoundaryIndex = iBoundaryText->MdcaCount(); //iBoundaryIndex stores a count value not the index here + + iBoundaryIndex = (iBoundaryIndex)? --iBoundaryIndex: 0; + iBoundaryLength = iBoundaryText->MdcaPoint(iBoundaryIndex).Length(); + } + } + + +/** +MatchAndRemoveToken() + +@param aToken +@return +*/ +TBool CLocalMimeParser::MatchAndRemoveToken( const TDesC8& aToken ) + { + TInt comparison; + TInt tokenLength = aToken.Length(); + TInt desLength = (*iMimeHeaderLine).Length(); + TInt compareLength = tokenLength > desLength ? desLength : tokenLength; + TPtrC8 left((*iMimeHeaderLine).Left(compareLength)); + + // now see whether the current line contains the search string + comparison = left.CompareF(aToken); + if (!comparison) + { + // found the match string at the start of the output line, so remove it + iMimeFieldsExist=ETrue; + isMime=ETrue; + // get rid of any whitespace betweebn the tag and the data while we have a chance + TInt whitespaceLength=0; + TInt maxLength=desLength-tokenLength; + const TUint8* ptr = (*iMimeHeaderLine).Ptr(); + while ( whitespaceLength <= maxLength && (ptr[tokenLength+whitespaceLength] == KImcvSP || ptr[tokenLength+whitespaceLength] == KImcvTab) ) + whitespaceLength++; + iMimeHeaderLine->Des().Delete(0, tokenLength+whitespaceLength); + + // Reset iLex, so its length is updated. + iLex = *iMimeHeaderLine; + } + return (comparison==0); + } + + +/** +IsSpecialChar() + +@param aChar +@return +*/ +TBool CLocalMimeParser::IsSpecialChar( const TUint8 aChar ) + { + return (aChar == '(' || aChar == ')' || aChar == '<' || aChar == '>' || aChar == '@' + || aChar == ',' || aChar == ';' || aChar == ':' || aChar == '\\'|| aChar == '"' + || aChar == '/' || aChar == '[' || aChar == ']' || aChar == '?' || aChar == '='); + } + + +/** +ExtractParameterInfoL() +Implicitly the parameter ASSUMED TO BE is not encoded as return parameter, rBuffer, +is 8 bit. iLex should currently be pointing at the space after content-type description. + +@param aTag +@param rBuffer +*/ +void CLocalMimeParser::ExtractParameterInfoL(const TDesC8& aTag, HBufC8*& rBuffer) + { + rBuffer = NULL; + + TLexMark8 mark; + TInt offset; + + if( (offset=iLex.Remainder().FindF(aTag)) != KErrNotFound ) + { + // move past the tag + iLex.Inc(offset+aTag.Length()); + + // Default : no charset info or folding + // move forward to the start of the boundary string itself. + + while (iLex.Peek() != KImcvEquals && !iLex.Eos()) + iLex.Inc(); + + TPtrC8 paramBuffer(ExtractParameterString(mark)); + if( paramBuffer.Length() > 0 ) + { + rBuffer = paramBuffer.AllocL(); + } + } + } + + +/** +ExtractParameterInfoL() +iLex should currently be pointing at the space after content-type description. + +@param aTag +@param rBuffer +@param rBuffer8 +*/ +void CLocalMimeParser::ExtractParameterInfoL(const TDesC8& aTag, TDes16& rBuffer, TDes8& rBuffer8) + { + TInt offset; + + rBuffer.Copy(KNullDesC); + + // we need to extract the text from the same line + // iLex should currently be pointing at the space after content-type description + + if( (offset=iLex.Remainder().FindF(aTag))!=KErrNotFound ) + { + // Check which type of encoding present. + + TLexMark8 initMark; + iLex.Mark(initMark); + TLexMark8 mark; + iLex.Inc(offset+aTag.Length()); // move past the tag + + const TPtrC8 param = ExtractParameterString(mark); + + rBuffer8.Copy(param); + + if ( ParseRfc2047ParameterInfoL(param, rBuffer) == EFalse ) + { + iLex.UnGetToMark(initMark); + ParseRfc2231ParameterInfoL(aTag, rBuffer, offset ); + } + } + } + + +/** +ParseRfc2047ParameterInfoL() +Detect encoding of form =?charset?Q?" Text "?= + +@param aParam +@param rBuffer +@return +*/ +TBool CLocalMimeParser::ParseRfc2047ParameterInfoL(const TDesC8& aParam, TDes& rBuffer) + { + TBool parameterPresent = EFalse; + + // Check for =? somewhere in text. + + if ( aParam.Find(KImcvEncodedWordStart) != KErrNotFound ) + { + // Make assumption that '=?' appearing in parameter means + //it is part of encoding + + parameterPresent = ETrue; + iImRecvConvert.iHeaderConverter->DecodeHeaderFieldL(aParam, rBuffer); + } + return parameterPresent; + } + + +/** +ParseRfc2231ParameterInfoL() +For extracting parameter data following Mime header fields, in the format +*(;tag=data). As specified in rfc2231 +Assumes parameter data seperated by ';' +Takes tag(name) of parameter as input, returning a descriptor with the data + +@param aTag +@param rBuffer +@param aOffset +@return +*/ +TBool CLocalMimeParser::ParseRfc2231ParameterInfoL(const TDesC8& aTag, TDes& rBuffer, TInt aOffset) + { + TBool parameterPresent = ETrue; + + // For storing extracted parameter information + + HBufC8* info = HBufC8::NewLC(KHeaderBufferLength); + + // For storing information relating to parameter extraction/conversion + + TInt count = 0; + + TPtrC8 charset8; + TPtrC8 language8; + + // Following rfc 2231, parameter may be encoded & folded in the following way + // + // *0*=us-ascii'en' + // *1*=< more encoded data> + // *2= + + do + { + // move past the tag + iLex.Inc(aOffset+aTag.Length()); + + if (iLex.Peek() != KImcvAny) + { + // Default : no charset info or folding + // move forward to the start of the boundary string itself + + while (iLex.Peek() != KImcvEquals && !iLex.Eos()) + iLex.Inc(); + } + else // *, Parameter is encoded + { + iLex.Inc(); // Past '*' + + // If parameter folded :- need to get several bits of data and join together. + + if ( iLex.Peek()!=KImcvEquals) // Get Number + { + iLex.Mark(); // Beginnig of number + iLex.Inc(); + while (iLex.Peek() != KImcvEquals && iLex.Peek() != KImcvAny && !iLex.Eos()) + iLex.Inc(); + TPtrC8 numPtr = iLex.MarkedToken(); + TLex8 lex(numPtr); + lex.Val(count); // Store number in count. + + if (iLex.Peek() == KImcvAny) + iLex.Inc(); // Past * + } + + + // Must get charset & language information etc.. + + if (!count) + { + + iLex.Inc(); // Past '=' + + if (iLex.Peek()==KImcvQuote) + iLex.Inc(); + + // Extract CHARSET token + iLex.Mark(); + while (iLex.Peek() != KImcvSingleQuote && !iLex.Eos()) + iLex.Inc(); + TPtrC8 marked = iLex.MarkedToken(); + + charset8.Set(marked ); + iLex.Inc(); // Past ' + + // Extract LANGUAGE token + iLex.Mark(); + while (iLex.Peek() != KImcvSingleQuote && !iLex.Eos()) + iLex.Inc(); + TPtrC8 marked1 = iLex.MarkedToken(); + language8.Set(marked1); + } + + } // else, param encoded + + TLexMark8 mark; + TPtrC8 param = ExtractParameterString(mark); + + // Save parameter data + TInt maxlen=info->Des().MaxLength(); + if ((*info).Length() + param.Length() > maxlen ) + { + info = info->ReAllocL(maxlen + param.Length() + MaxMimeParameterValueLength); + CleanupStack::Pop(); + CleanupStack::PushL(info); + } + info->Des().Append( param ); + + + } while( ( aOffset=iLex.Remainder().FindF(aTag))!=KErrNotFound ); + + TPtr8 infoPtr(info->Des()); + + DecodeRfc2231ParameterInfoL( infoPtr, rBuffer, charset8/*, language8*/ ); + + CleanupStack::PopAndDestroy(info); + return parameterPresent; + } + + +/** +DecodeRfc2231ParameterInfoL() + +@param aInput +@param rBufOut +@param aCharset +@return +*/ +TBool CLocalMimeParser::DecodeRfc2231ParameterInfoL(TDes8& aInput, TDes& rBufOut, TPtrC8 aCharset/*, TPtrC8 aLanguage*/) + { + HBufC8* QPdecodedbuf = HBufC8::NewLC( aInput.Length() ); + TPtr8 ptr(QPdecodedbuf->Des()); + + iImRecvConvert.iQPCodec.SetQPChar(KImcvPercentSign); + iImRecvConvert.iQPCodec.Decode( aInput, ptr); + iImRecvConvert.iQPCodec.SetQPChar(KImcvEquals); + + // Convert parameter, based on charset supplied. + CImConvertCharconv& charconv = iImRecvConvert.CharacterConverter(); + TUint id = charconv.GetMimeCharsetUidL( aCharset); + + if(id==KUidMsvCharsetNone) + { + id=charconv.SystemDefaultCharset(); + } + + if (!charconv.PrepareToConvertToFromOurCharsetL(id)) + { + rBufOut.Copy(ptr); + } + else + { + // Charset found, so do conversion + TInt unconverted; + TInt indexOfFirst; + TInt rem = charconv.ConvertToOurCharsetL(ptr, rBufOut, unconverted, indexOfFirst); + if (rem < 0) // error + Append(rBufOut, ptr); + else if (rem && rem < KConversionRemainderLength) + rBufOut.Copy(ptr); + + } + + CleanupStack::PopAndDestroy(QPdecodedbuf); + return ETrue; + } + + +/** +ExtractParameterString() +Check for delimiter & mark parameter text string + +@param rMark +@return +*/ +TPtrC8 CLocalMimeParser::ExtractParameterString(TLexMark8& rMark) + { + // move on to the first char of the boundary ; this MIGHT be a double-quote + + TBool delimited = EFalse; + iLex.Inc(); + + if ( iLex.Peek() == KImcvDoubleQuote ) + { + delimited = ETrue; + iLex.Inc(); + } + + while ( iLex.Peek().IsSpace() ) + iLex.Inc(); + + iLex.Mark( rMark ); + + TBool finished = EFalse; + while ( !finished && !iLex.Eos() ) + { + iLex.Inc(); + + if ( delimited ) + finished = (iLex.Peek() == KImcvDoubleQuote); + else + finished = ( iLex.Peek().IsSpace() || IsSpecialChar((TUint8)iLex.Peek()) ); + } + + return iLex.MarkedToken( rMark ); + } + + +/** +CurrentCharsetL() +Which charset to use .. ? If the body part charset set, use that. +else if the main header charset set, use that... else default to us-ascii. + +@return +*/ +TUint CLocalMimeParser::CurrentCharsetL() const + { + TPtrC8 paramCharset = GetContentTypeValue(KImcvCharset); + + TUint charsetId; + if (paramCharset.Length()) + // charset parameter present. + charsetId = iImRecvConvert.CharacterConverter().GetMimeCharsetUidL(paramCharset); + else if (iCharset) + // Main Mime header has default charset value. + charsetId = iCharset; + else + charsetId = iDefaultCharset; + + return charsetId; + } + + +/** +GetContentTypeValue() + +@param aContentTypeParameter +@return +*/ +const TPtrC8 CLocalMimeParser::GetContentTypeValue(const TDesC8& aContentTypeParameter) const + { + CDesC8Array& contentTypeParams = iMimeHeader->ContentTypeParams(); + __ASSERT_DEBUG(!(contentTypeParams.Count()&1), User::Invariant()); + + TInt result; + if (KErrNone == contentTypeParams.Find(aContentTypeParameter,result,ECmpFolded8)) + { + result++; + if ((result&1) && result <= contentTypeParams.Count()) + { + // check result+1 is odd & entry exists + return iMimeHeader->ContentTypeParams()[result]; + } + } + return TPtrC8(); // couldn't find match so return an empty descriptor + } + + +/**s +EntryId() + +@return +*/ +TMsvId CLocalImRecvConvert::EntryId() + { + // If we are temporarily on the null entry then return the saved entry + if (iServerEntry->Entry().Id() == KMsvNullIndexEntryId) + { + return iSavedEntryId; + } + else + { + return iServerEntry->Entry().Id(); + } + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/Local_imutdll.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/Local_imutdll.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,79 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + +#include +#include // RFs +#include // RResourceFile +#include // Bafl:: +#include +#include +#include "local_imutdll.h" + +#include // resource file name + +_LIT(KMTFName,"Messaging Test Framework"); + + +/** +OpenResourceFileL() +Opens a file using the file server session + +@param rFile +@param anFs +*/ +GLDEF_C void OpenResourceFileL(RResourceFile& rFile, RFs& anFs) + { + // open resource file + TFileName fileName(KImEngineResourceFile); + MsvUtils::AddPathAndExtensionToResFileL(fileName); + BaflUtils::NearestLanguageFile( anFs, fileName ); + if (BaflUtils::FileExists(anFs,fileName)) + { + rFile.OpenL( anFs, fileName ); + return; + } + + User::Leave(KErrNotFound); + } + + +/** +gPanic() + +@param aReason +@panic +*/ +GLDEF_C void gPanic( TImutErrorReason aReason) + { + User::Panic( KMTFName,aReason); + } + + +/** +CloseResourceFile() +Closes a opened file + +@param file +*/ +GLDEF_C void CloseResourceFile( TAny* file ) + { + ((RResourceFile*)file)->Close(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_CheckSmtpBMSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CheckSmtpBMSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,111 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckSmtpBMSetting +// [Paramaters] +// SmtpAccountName :Name of the Smtp account. +// ExpectedBMSupport :ETrue => Bearer mobility is expected to be supported by the SMTP service. +// EFalse => Bearer mobility is not expected to be supported by the SMTP service. +// Checks if bearer mobility is supported by the SMTP service. +// +// + +//User includes +#include "T_CheckSmtpBMSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literals used +_LIT(KSmtpAccountName,"SmtpAccountName"); +_LIT(KExpectedBMSupport,"ExpectedBMSupport"); + +/** + Function : CT_MsgCheckSmtpBMSetting + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_MsgCheckSmtpBMSetting::CT_MsgCheckSmtpBMSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KCheckSmtpBMSetting); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCheckSmtpBMSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KSmtpAccountName, iSmtpAccountName)) + { + ERR_PRINTF1(_L("Smtp account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetBoolFromConfig(ConfigSection(), KExpectedBMSupport, iExpectedBMSupport)) + { + ERR_PRINTF1(_L("An expected \"ETrue\" or \"EFalse\" boolean value is not specified for BM support")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Checks the provisioned BM support for the SMTP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCheckSmtpBMSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : CheckSmtpBMSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImSmtpSettings* smtpSettings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings); + + TSmtpAccount smtpAccountId; + CT_MsgUtilsCentralRepository::GetSmtpAccountL((TDes&)iSmtpAccountName, smtpAccountId); + + accounts->LoadSmtpSettingsL(smtpAccountId, *smtpSettings); + + TBool actualBMSupport = smtpSettings->BearerMobility(); + + if (actualBMSupport == iExpectedBMSupport) + { + INFO_PRINTF3(_L("Actual Bearer Mobility Support [%d] does equals Expected Bearer Mobility Support [%d]"),actualBMSupport,iExpectedBMSupport); + } + else + { + ERR_PRINTF3(_L("Actual Bearer Mobility Support [%d] does not equal Expected Bearer Mobility Support [%d]"),actualBMSupport,iExpectedBMSupport); + SetTestStepResult(EFail); + } + + CleanupStack::PopAndDestroy(2,accounts); // smtpSettings, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_CheckSmtpSNAPSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CheckSmtpSNAPSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,134 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CheckSmtpSNAPSetting +// [Paramaters] +// SmtpAccountName :Name of the Smtp account. +// ExpectedSNAPDefinition :ETrue => A SNAP has expected to been provisioned for the SMTP account. +// EFalse => A SNAP has not expected to been provisioned for the SMTP account. +// ExpectedSNAPPreference :Expected SNAP ID (Assuming the SNAP has been defined for the SMTP a/c) +// This parameter can be ignored if the "ExpectedSNAPDefinition" is EFalse. +// Checks the provisioned SNAP information for the SMTP account. +// +// + +//User includes +#include "T_CheckSmtpSNAPSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literals used +_LIT(KSmtpAccountName,"SmtpAccountName"); +_LIT(KSNAPDefined,"ExpectedSNAPDefinition"); +_LIT(KSNAPPreference,"ExpectedSNAPPreference"); + +/** + Function : CT_MsgCheckSmtpSNAPSetting + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_MsgCheckSmtpSNAPSetting::CT_MsgCheckSmtpSNAPSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KCheckSmtpSNAPSetting); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCheckSmtpSNAPSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KSmtpAccountName, iSmtpAccountName)) + { + ERR_PRINTF1(_L("Smtp account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetBoolFromConfig(ConfigSection(), KSNAPDefined, iExpectedSNAPDefinition)) + { + ERR_PRINTF1(_L("An expected \"ETrue\" or \"EFalse\" boolean value is not specified for the SNAP definition")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Checks the provisioned SNAP information for the SMTP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCheckSmtpSNAPSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : CheckSmtpSNAPSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC(); + + TSmtpAccount smtpAccountId; + CT_MsgUtilsCentralRepository::GetSmtpAccountL((TDes&)iSmtpAccountName,smtpAccountId); + + accounts->LoadSmtpIapSettingsL(smtpAccountId, *smtpIapPrefs); + + TBool actualSNAPDefintion = smtpIapPrefs->SNAPDefined(); + + if (actualSNAPDefintion == iExpectedSNAPDefinition) + { + if (actualSNAPDefintion) + { + TInt expectedSNAPPreference = 0; + if(!GetIntFromConfig(ConfigSection(), KSNAPPreference, expectedSNAPPreference)) + { + ERR_PRINTF1(_L("An expected SNAP ID value is not specified")); + SetTestStepResult(EFail); + CleanupStack::PopAndDestroy(2,accounts); // smtpIapPrefs, accounts + return TestStepResult(); + } + TInt actualSNAPPreference = smtpIapPrefs->SNAPPreference(); + + if (actualSNAPPreference != expectedSNAPPreference) + { + ERR_PRINTF3(_L("Actual SNAP ID [%d] does not equal Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF3(_L("Actual SNAP ID [%d] equals Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference); + } + } + } + else + { + ERR_PRINTF3(_L("Actual SNAP Defintion [%d] does not equal Expected SNAP Defintion [%d]"),actualSNAPDefintion,iExpectedSNAPDefinition); + SetTestStepResult(EFail); + } + + CleanupStack::PopAndDestroy(2,accounts); // smtpIapPrefs, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpAccount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpAccount.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,119 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CreateSmtpAccount +// [Paramaters] +// SmtpAccountName :Name of the Smtp account. +// SmtpConfigFileName :Config file from which the Smtp account settings are read. +// Creates a SMTP account in the Central Repository with the specified name using the +// settings read from the config file. +// +// + +//User includes +#include "T_CreateSmtpAccount.h" +#include + +//Epoc inlcudes +#include +#include +#include + +//Literals used +_LIT(KSmtpAccountName,"SmtpAccountName"); +_LIT(KSmtpConfigFileName,"SmtpConfigFileName"); + +/** + Function : CT_MsgCreateSmtpAccount + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_MsgCreateSmtpAccount::CT_MsgCreateSmtpAccount(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KCreateSmtpAccount); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgCreateSmtpAccount::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KSmtpAccountName, iSmtpAccountName)) + { + ERR_PRINTF1(_L("Smtp account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + if(!GetStringFromConfig(ConfigSection(), KSmtpConfigFileName, iConfigFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + + return result; + } + +/** + Function : doTestStepL + Description : Reads the Smtp account name and the settings file name from the .ini file + and then creates an Smtp account. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCreateSmtpAccount::doTestStepL() + { + + INFO_PRINTF1(_L("Test Step : CreateSmtpAccount")); + if(ReadIni()) + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + // Creates objects requried for SMTP account + CImIAPPreferences *smtpIapPreferences = CImIAPPreferences::NewLC(); + CImSmtpSettings *smtpSettings = new (ELeave) CImSmtpSettings; + CleanupStack::PushL(smtpSettings); + + // Populates the default SMTP settings + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings, *smtpIapPreferences); + + //If the config file name is provided as input, then reads the SMTP settings from it + if(iConfigFileName.CompareF( _L("none") ) != 0) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(iConfigFileName, *smtpSettings, *smtpIapPreferences)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the SMTP settings, failed with error %d"), err); + SetTestStepError(err); + CleanupStack::PopAndDestroy(3,emailAccounts); // smtpSettings, smtpIapPreferences, emailAccounts + return TestStepResult(); + } + if(TestStepResult() == EPass) + { + // Creates the SMTP account for the name specified and for the settings objects + TSmtpAccount smtpAccount = emailAccounts->CreateSmtpAccountL(iSmtpAccountName, *smtpSettings,*smtpIapPreferences,EFalse); + + // Sets the SMTP account created as the default SMTP account + emailAccounts->SetDefaultSmtpAccountL(smtpAccount); + } + } + CleanupStack::PopAndDestroy(3,emailAccounts); // smtpSettings, smtpIapPreferences, emailAccounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMessageFromEmailFile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMessageFromEmailFile.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,284 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CreateSmtpMessageFromEmailFile +// [Paramaters] +// ParentFolderName : Name of the local folder under which the message +// needs to be created +// EmailFileName : Email file from which the message is to be created +// KilobytesExtra : Number of lines of 1024 characters to add to body text +// Default value is 0. +// [Test Step Description] +// Creates an Email message reading the contents from the email file specified +// from the config file. +// [APIs Used] +// CMsvEntry::SetEntryL +// +// + + + +/** + @file +*/ + +// User include +#include "ImCltCvRecv.h" +#include +#include "T_CreateSmtpMessageFromEmailFile.h" +#include + + +// Literals Used +_LIT(KEmailFileName, "EmailFileName"); +_LIT(KParentFolderName,"ParentFolderName"); +_LIT(KKilobytesExtra, "KilobytesExtra"); +_LIT(KOverRideAddress, "OverRideAddress"); + +// Maximum length of a line read from Email file +const TInt KMaxLenghtOfLine = 1024; +const TInt KMaxLenghtOfChar = 1; + +/** +CT_MsgCreateSmtpMessageFromEmailFile() +Sets the test step name to KCreateSmtpMessageFromEmailFile + +@param aSharedDataSMTP + +*/ +CT_MsgCreateSmtpMessageFromEmailFile::CT_MsgCreateSmtpMessageFromEmailFile(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KCreateSmtpMessageFromEmailFile); + } + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param aSharedDataSMTP +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgCreateSmtpMessageFromEmailFile object. +*/ +CT_MsgCreateSmtpMessageFromEmailFile* CT_MsgCreateSmtpMessageFromEmailFile::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_MsgCreateSmtpMessageFromEmailFile* self = new(ELeave) CT_MsgCreateSmtpMessageFromEmailFile(aSharedDataSMTP); + CleanupStack::PushL(self); + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgCreateSmtpMessageFromEmailFile() +Destructor +*/ +CT_MsgCreateSmtpMessageFromEmailFile::~CT_MsgCreateSmtpMessageFromEmailFile() + { + } + + +/** +doTestStepL() +Reads the name of the email file,parent foldername from the ini file +Parses the email file to generate a message under the parent folder +mentioned.If the number of lines is mentioned in the ini file then adds it to the +message.If not mentioned takes a default of 0. + +@return +Returns the test step result +*/ +TVerdict CT_MsgCreateSmtpMessageFromEmailFile::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: CreateSmtpMessageFrom email file")); + TPtrC emailFileName; + // Read the name of the email file from the ini + if(!GetStringFromConfig(ConfigSection(),KEmailFileName,emailFileName)) + { + ERR_PRINTF1(_L("Email file name not specified")); + SetTestStepResult(EFail); + } + else + { + TInt numKilobytesExtra = 0; + GetIntFromConfig( ConfigSection(), KKilobytesExtra, numKilobytesExtra); + + TPtrC parentFolderName; + if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the folder Id based on the local folder name read from the ini file + TMsvId parentFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(parentFolderName); + if( parentFolderId == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid local folder name specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The parent folder Id is %d"),parentFolderId ); + + // Retrieve the default Smtp service Id + TMsvId smtpServiceId(0); + TRAPD(err,smtpServiceId = CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL()); + if(smtpServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid account name specified")); + SetTestStepResult(EFail); + } + else + { + if(err != KErrNone) + { + ERR_PRINTF2(_L("Failure while getting the default SMTP Service Id. error = %d"),err); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The default Smtp serviceId is %d"),smtpServiceId ); + + // Set the context to the folder in which message has to be created + CMsvEntry* entry = CMsvEntry::NewL(*iSharedDataSMTP.iSession,parentFolderId,TMsvSelectionOrdering()); + CleanupStack::PushL(entry); + entry->SetEntryL(parentFolderId); + + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + CImCltRecvConvert* recvConvert = CImCltRecvConvert::NewLC(fs,entry,KUidMsgTypeSMTP, + smtpServiceId); + recvConvert->SetMsvId(parentFolderId); + + // Read one line of text from the file, parse the line and set the fields of the email + // message based on the contents of the parsed line. + + // Open the Email file in read mode + RFile file; + User::LeaveIfError(file.Open(fs,emailFileName,EFileRead)); + CleanupClosePushL(file); + + TBuf8 line; + TBuf8 aChar; // To read one character from the file + TBool finished = FALSE; + + recvConvert->ResetL(); + + // Parse each line from the + + do + { + line.FillZ(); + line.SetLength(0); + // Read one line from email file + do + { + file.Read(aChar, 1); + if(aChar.Length()) + { + line.Append(aChar); + } + else + { + finished = TRUE; + } + }while(aChar.Length() && aChar[0] != 0x0A); + if(!line.Length()) + { + break; + } + // Parse the line for the fields of the email and store them + recvConvert->ParseNextFieldL(line); + }while(!finished); + + // For a large email, pad the email with extra characters + if(numKilobytesExtra > 0) + { + const TChar KPadChar = 'L'; + line.Fill(KPadChar, 1024); + for(TInt i = 0; i < numKilobytesExtra; i++) + { + recvConvert->ParseNextFieldL(line); + } + } + + // Complete the message creation by setting all the required fields and + // storing the email on to the message store. + // The created email's ID is returned by MessageCompelteL function + // + + TMsvId messageId; + messageId = recvConvert->MessageCompleteL(); + + if(messageId == 0) + { + User::Leave(KErrUnknown); + } + TBool overrideAddr = ETrue; // Default is to override. + GetBoolFromConfig(ConfigSection(), KOverRideAddress, overrideAddr); + // If the recipients email address in the message need to be changed to SMTP service's + // email address field, "overrideAddr" should be set to ETrue. + if(overrideAddr) + { + CImSmtpSettings* settings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(settings); + + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccount; + accounts->GetSmtpAccountL(smtpServiceId, smtpAccount); + accounts->LoadSmtpSettingsL(smtpAccount, *settings); + CleanupStack::PopAndDestroy(accounts); + + HBufC* emailAddress=settings->EmailAddress().AllocL(); + CleanupStack::PushL(emailAddress); + + entry->SetEntryL(messageId); + CMsvStore* store = entry->EditStoreL(); + CleanupStack::PushL(store); + + CImHeader* header = CImHeader::NewLC(); + + header->RestoreL(*store); // Retrieves the email message header + + header->ToRecipients().Reset(); + header->ToRecipients().AppendL(*emailAddress); // Modification of the e-mail ID + + header->StoreL(*store); + store->CommitL(); + + CleanupStack::PopAndDestroy(3, emailAddress); + CleanupStack::PopAndDestroy(settings); + } + INFO_PRINTF2(_L("Created a email from file %S"),&emailFileName); + INFO_PRINTF2(_L("The id of the message created is %d"),messageId); + + CleanupStack::PopAndDestroy(4, entry); // file, recvConvert, fs, entry + } + } + } + } + } + return TestStepResult(); + } + + + + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMobilityAccount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMobilityAccount.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,207 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CreateSmtpMobilityAccount +// [Parameters] +// EmailAddress: Email address for mobility account / linked SMTP account +// ConfigFileName: Configuration file name to read for account settings +// Linked: Create a linked mobility account +// AP ID: Access point identifier (eg. IAP number) +// [TestStep Description] +// Creates a mobility account under the default SMTP account +// If linked account option is chosen, also creates a new SMTP account +// and links the mobility account to it. +// +// + +#include "T_CreateSmtpMobilityAccount.h" +#include +#include +#include +#include +#include +#include + +_LIT(KMobilityAccountName, "Mobility Account"); +_LIT(KLinkedAccountName, "Linked Account"); + +_LIT(KEmailAddress, "EmailAddress"); +_LIT(KLinked, "Linked"); +_LIT(KConfigFileName, "ConfigFileName"); +_LIT(KAccessPoint, "AccessPoint"); + +/** + Function : NewL() + Description : Static factory constructor. + + @param aSharedDataSMTP + + @return A pointer to the newly created CT_MsgCreateSmtpMobilityAccount object. +*/ +CT_MsgCreateSmtpMobilityAccount* CT_MsgCreateSmtpMobilityAccount::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_MsgCreateSmtpMobilityAccount* self = new(ELeave) CT_MsgCreateSmtpMobilityAccount(aSharedDataSMTP); + return self; + } + +/** + Function : CT_MsgCreateSmtpMobilityAccount + Description : Constructor + @return : N/A +*/ +CT_MsgCreateSmtpMobilityAccount::CT_MsgCreateSmtpMobilityAccount(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KCreateSmtpMobilityAccount); + } + +/** + Function : doTestStepL + Description : Creates SMTP mobility account + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgCreateSmtpMobilityAccount::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: Create Smtp Mobility Account")); + + TPtrC emailAddress; + if(!GetStringFromConfig(ConfigSection(), KEmailAddress, emailAddress)) + { + ERR_PRINTF1(_L("Email address is not specified")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + return TestStepResult(); + } + + TBool linked = EFalse; + GetBoolFromConfig(ConfigSection(), KLinked, linked); + + TInt accessPoint = 0; + GetIntFromConfig(ConfigSection(), KAccessPoint, accessPoint); + + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC(); + CImSmtpSettings* smtpSettings = new (ELeave) CImSmtpSettings; + CleanupStack::PushL(smtpSettings); + + if (linked || accessPoint == 0) + { + emailAccounts->PopulateDefaultSmtpSettingsL(*smtpSettings, *smtpIapPrefs); + + if( configFileName.CompareF( _L("none") ) != 0 ) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(configFileName, *smtpSettings, *smtpIapPrefs)); + + if (err == KErrNone) + { + if (accessPoint == 0) + { + if (smtpIapPrefs->NumberOfIAPs() > 0) + { + TImIAPChoice iapChoice = smtpIapPrefs->IAPPreference(0); + accessPoint = iapChoice.iIAP; + } + } + } + else + { + ERR_PRINTF2(_L("Failure while setting the SMTP setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + } + } + + RArrayIAP iapList; + CleanupClosePushL(iapList); + if (TestStepResult() == EPass) + { + if (accessPoint != 0) + { + iapList.AppendL(accessPoint); + } + else + { + ERR_PRINTF1(_L("Access point not specified")); + SetTestStepResult(EFail); + } + } + + TSmtpAccount parentSmtpAccount; + + if (TestStepResult() == EPass) + { + if (emailAccounts->DefaultSmtpAccountL(parentSmtpAccount) != KErrNone) + { + ERR_PRINTF1(_L("Default SMTP account not found")); + SetTestStepResult(EFail); + } + } + + if (TestStepResult() == EPass) + { + if (linked) + { + /* Creates objects requried for IMAP account */ + CImIAPPreferences* imapIapPrefs = CImIAPPreferences::NewLC(); + CImImap4Settings* imapSettings = new (ELeave) CImImap4Settings; + CleanupStack::PushL(imapSettings); + emailAccounts->PopulateDefaultImapSettingsL(*imapSettings, *imapIapPrefs); + + if( configFileName.CompareF( _L("none") ) != 0 ) + { + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapSettingsFromConfigurationFileL(configFileName, *imapSettings, *imapIapPrefs)); + + if (err != KErrNone) + { + ERR_PRINTF2(_L("Failure while setting the IMAP setting parameters, failed with error %d"), err); + SetTestStepResult(EFail); + } + } + + if( TestStepResult() == EPass ) + { + smtpSettings->SetEmailAddressL(emailAddress); + + /* Creates the IMAP account for the name specified and for the settings objects */ + TImapAccount linkedImapAccount = emailAccounts->CreateImapAccountL(KLinkedAccountName, *imapSettings, *imapIapPrefs, EFalse); + + /* Creates the SMTP account for the name specified and for the settings objects */ + TSmtpAccount linkedSmtpAccount = emailAccounts->CreateSmtpAccountL(linkedImapAccount, *smtpSettings, *smtpIapPrefs, EFalse); + + emailAccounts->CreateSmtpMobilityAccountL(KMobilityAccountName, iapList, parentSmtpAccount, linkedSmtpAccount, EFalse); + } + CleanupStack::PopAndDestroy(2, imapIapPrefs); + } + else + { + CImSmtpMobilitySettings* mobilitySettings = CImSmtpMobilitySettings::NewLC(); + emailAccounts->PopulateDefaultSmtpMobilitySettingsL(*mobilitySettings); + mobilitySettings->SetEmailAddressL(emailAddress); + emailAccounts->CreateSmtpMobilityAccountL(KMobilityAccountName, iapList, parentSmtpAccount, *mobilitySettings, EFalse); + CleanupStack::PopAndDestroy(mobilitySettings); + } + } + + CleanupStack::PopAndDestroy(4, emailAccounts); + + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_ModifySmtpSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_ModifySmtpSettings.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,130 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// ModifySmtpSettings +// [Paramaters] +// SmtpAccountName :Name of the Smtp account +// SmtpConfigFileName :Config file from which the Smtp account settings are read +// ModifySmtpSettings Test Step is intended to modify existing settings and save to CenRep +// for the specified SMTP account Id +// +// + +/* user includes */ +#include "T_ModifySmtpSettings.h" +#include +#include + +/* epoc inlcudes */ +#include +#include +#include + +/* Literals used */ +_LIT(KSmtpAccountName,"SmtpAccountName"); +_LIT(KSmtpConfigFileName,"SmtpConfigFileName"); + +/** + Function : CT_MsgModifySmtpSettings + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_MsgModifySmtpSettings::CT_MsgModifySmtpSettings(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KModifySmtpSettings); + } + +/** + Function : ~CT_MsgModifySmtpSettings + Description : Destructor + @return : N/A +*/ +CT_MsgModifySmtpSettings::~CT_MsgModifySmtpSettings() + { + } + +/** + Function : doTestStepL + Description : Reads the Smtp account name and config file name from the .ini file + and it then modifies the account with the settings read from the config file. + @return : TVerdict - Test step result + @leave : KMsvNullIndexEntryId Invalid SMTP account name specified +*/ +TVerdict CT_MsgModifySmtpSettings::doTestStepL() + { + INFO_PRINTF1(_L("Test Step: ModifySmtpSettings")); + // Read the SMTP account name from the ini file + TPtrC smtpAccountName; + if(!GetStringFromConfig(ConfigSection(), KSmtpAccountName, smtpAccountName)) + { + ERR_PRINTF1(_L("SMTP account name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the SMTP Config file name from the ini file + TPtrC configFileName; + if(!GetStringFromConfig(ConfigSection(), KSmtpConfigFileName, configFileName)) + { + ERR_PRINTF1(_L("Configuration file path is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the SMTP service Id for the given SMTP account + TMsvId smtpServiceId = CT_MsgUtilsCentralRepository::GetSmtpServiceIdL((TDes&)smtpAccountName); + INFO_PRINTF2(_L("SMTP service Id is %d"),smtpServiceId); + + if(smtpServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid SMTP account name specified")); + SetTestStepResult(EFail); + } + // Creates the settings object + else + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + CImSmtpSettings* smtpSettings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(smtpSettings); + + CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC(); + + // Loads the settings for the account with the current settings + TSmtpAccount smtpAccount; + emailAccounts->GetSmtpAccountL(smtpServiceId, smtpAccount); + emailAccounts->LoadSmtpSettingsL(smtpAccount, *smtpSettings); + emailAccounts->LoadSmtpIapSettingsL(smtpAccount, *smtpIapPrefs); + + // Reads the settings from the config file + TRAPD(err, CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(configFileName, *smtpSettings, *smtpIapPrefs)); + if(err) + { + ERR_PRINTF2(_L("Failure while setting the SMTP setting parameters, failed with error %d"), err); + SetTestStepError(err); + } + else + { + // Saves the new settings + emailAccounts->SaveSmtpSettingsL(smtpAccount, *smtpSettings); + emailAccounts->SaveSmtpIapSettingsL(smtpAccount, *smtpIapPrefs); + } + CleanupStack::PopAndDestroy(3, emailAccounts);// smtpIapPrefs,smtpSettings,emailAccounts + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_MsgAsyncStepSMTP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_MsgAsyncStepSMTP.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,40 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [Test Step] : +// AsyncStepSMTP +// References SMTP shared data for use by derived test steps. +// +// + + + +/** + @file +*/ + +// User includes +#include "T_MsgAsyncStepSMTP.h" + + +/** +CT_AsyncStepSMTP() +Constructor + +@param aSharedDataSMTP +*/ +CT_MsgAsyncStepSMTP::CT_MsgAsyncStepSMTP(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStep() +, iSharedDataSMTP(aSharedDataSMTP) + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_MsgSharedDataSmtp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_MsgSharedDataSmtp.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,89 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + + +// user include +#include "T_MsgSharedDataSmtp.h" + + +// epoc includes +#include + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgSharedDataSmtp object. +*/ +CT_MsgSharedDataSmtp* CT_MsgSharedDataSmtp::NewL() + { + CT_MsgSharedDataSmtp* self = new(ELeave) CT_MsgSharedDataSmtp(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +/** + ConstructL() + Second phage constructor +*/ +void CT_MsgSharedDataSmtp::ConstructL() +{ + CT_MsgSharedDataBase::ConstructL(); + iPeriodic = CPeriodic::New(1); + iMaxRamValue = 0; + iMinRamValue = 0; + iStartRamValue = 0; + iEndRamValue = 0; + iMark = ETrue; +} + +/** + ~CT_MsgSharedDataSmtp + Destructor +*/ +CT_MsgSharedDataSmtp::~CT_MsgSharedDataSmtp() + { + delete iPeriodic; + } + +/** +NewMtmL() + +*/ +CBaseMtm* CT_MsgSharedDataSmtp::NewMtmL() + { + return iRegistry->NewMtmL(KUidMsgTypeSMTP); + } + + +/** +CT_MsgSharedDataBase() +Constructor +*/ +CT_MsgSharedDataSmtp::CT_MsgSharedDataSmtp() + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_MsgSyncStepSMTP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_MsgSyncStepSMTP.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// References SMTP shared data for use by derived test steps. +// +// + + + +/** + @file +*/ + + +// User includes +#include "T_MsgSyncStepSMTP.h" + + +/** +CT_MsgAsyncStepSMTP() +Constructor + +@param aSharedDataSMTP +*/ +CT_MsgSyncStepSMTP::CT_MsgSyncStepSMTP(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgStep() +, iSharedDataSMTP(aSharedDataSMTP) + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_RemoveSmtpSNAPSetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_RemoveSmtpSNAPSetting.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,92 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// RemoveSmtpSNAPSetting +// [Paramaters] +// SmtpAccountName :Name of the Smtp account. +// Removes the provisioned SNAP information for the SMTP account. +// +// + +//User includes +#include "T_RemoveSmtpSNAPSetting.h" +#include +#include +#include + +//Epoc include +#include + +//Literal used +_LIT(KSmtpAccountName,"SmtpAccountName"); + +/** + Function : CT_MsgRemoveSmtpSNAPSetting + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_MsgRemoveSmtpSNAPSetting::CT_MsgRemoveSmtpSNAPSetting(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgSyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KRemoveSmtpSNAPSetting); + } + +/** + Function : ReadIni + Description :Reads the corresponding .ini file and returns EPass or EFail if any of the inputs are missing + @return : TBool +*/ +TBool CT_MsgRemoveSmtpSNAPSetting::ReadIni() + { + TBool result = ETrue; + + if(!GetStringFromConfig(ConfigSection(), KSmtpAccountName, iSmtpAccountName)) + { + ERR_PRINTF1(_L("Smtp account name is not specified")); + SetTestStepResult(EFail); + result = EFalse; + } + + return result; + } + +/** + Function : doTestStepL + Description : Removes the provisioned SNAP information from the SMTP account settings of a test case. + @return : TVerdict - Test step result +*/ +TVerdict CT_MsgRemoveSmtpSNAPSetting::doTestStepL() + { + INFO_PRINTF1(_L("Test Step : RemoveSmtpSNAPSetting")); + if(ReadIni()) + { + CEmailAccounts* accounts = CEmailAccounts::NewL(); + CleanupStack::PushL(accounts); + + CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC(); + + TSmtpAccount smtpAccountId; + CT_MsgUtilsCentralRepository::GetSmtpAccountL((TDes&)iSmtpAccountName, smtpAccountId); + + accounts->LoadSmtpIapSettingsL(smtpAccountId, *smtpIapPrefs); + + smtpIapPrefs->RemoveSNAP(); + + accounts->SaveSmtpIapSettingsL(smtpAccountId, *smtpIapPrefs); + + CleanupStack::PopAndDestroy(2,accounts); // smtpIapPrefs, accounts + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_RetrievePlainBodyTextAndCompare.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_RetrievePlainBodyTextAndCompare.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,308 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// RetrievePlainBodyTextAndCompare +// [Parameters] +// ServiceType : Specifies the service type(IMAP or POP) under which message exists. +// ImapAccountName : If service type is IMAP4, specify the IMAP account name that holds the +// message. +// ParentFolderName : IMAP4 folder name that holds the message. +// PopAccountName : If the the sevice type is POP3, specify POP account name. +// SubjectOfExistingMsg: Sbject line of the existing message to which forward message +// would be creted. +// EmailFileName : File name from which existing message has been created. +// ChunkSize : Chunk size to be used for retriving body text of a message. +// Searches for the message with the specified subject and retrives the body part of +// the message and write it to the RetrivedBody.txt file. +// [APIs Used] +// CImEmailMessage::OpenPlainBodyTextForReadL +// CImPlainBodyText::NextChunkL +// NOTE : Comparison part has been removed as it would success only when +// message creation and fetching both uses same set of character set(8 bit or 16 bit). +// However comaprison can be done manually using the text comparison tools(e.g, Beyond Compare) +// +// + + + +/** + @file +*/ + + + +// User Includes +#include "T_RetrievePlainBodyTextAndCompare.h" +#include +#include +#include + + +// Epoc Include +#include +#include + + +// Literals Used +_LIT(KServiceType, "ServiceType"); + +_LIT(KImapAccountName, "ImapAccountName"); +_LIT(KParentFolderName, "ParentFolderName"); + +_LIT(KPopAccountName,"PopAccountName"); + +_LIT(KSubjectOfExistingMsg,"SubjectOfExistingMsg"); +_LIT(KEmailFileName, "EmailFileName"); +_LIT(KChunkSize, "ChunkSize"); + +_LIT(KRetrivedBody, "c:\\msgtest\\RetrivedBody.txt"); //File used to hold the retrive body part + + +const TInt KArrayGranularity = 8; +const TInt KZero={0}; +/** +CT_RetrievePlainBodyTextAndCompare +Constructor + +@param : +@return : N/A + + +*/ +CT_RetrievePlainBodyTextAndCompare::CT_RetrievePlainBodyTextAndCompare(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KRetrievePlainBodyTextAndCompare); + } + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param aSharedDataSMTP +@leave KErrNoMemory +@return +A pointer to the newly created CT_RetrievePlainBodyTextAndCompare object. +*/ +CT_RetrievePlainBodyTextAndCompare* CT_RetrievePlainBodyTextAndCompare::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_RetrievePlainBodyTextAndCompare* self = new(ELeave) CT_RetrievePlainBodyTextAndCompare(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_RetrievePlainBodyTextAndCompare() +Destructor +*/ +CT_RetrievePlainBodyTextAndCompare::~CT_RetrievePlainBodyTextAndCompare() + {} + + +/** +ProgressL() + +@param aFinal +*/ +void CT_RetrievePlainBodyTextAndCompare::ProgressL(TBool aFinal) + { + if ( aFinal ) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() +*/ +void CT_RetrievePlainBodyTextAndCompare::CancelStep() + {} + + +/** +doTestStepL() +Opens the body text part with read only mode. Reads the contents of body part chunkwise and write it +to the file RetrivedBody.txt. Then it comapares the contents of RetrivedBody.txt with the input file. +@return +Returns the test step result +*/ +TVerdict CT_RetrievePlainBodyTextAndCompare::doTestStepL() + { + INFO_PRINTF1( _L("Test Step : Edit Message Body Text") ); + TMsvId entryToBesearched; + TPtrC serviceType; + if(!GetStringFromConfig( ConfigSection(), KServiceType, serviceType)) + { + ERR_PRINTF1(_L("\"ServiceType\" for the message is not specified")); + SetTestStepResult(EFail); + } + else + { + TBuf<4> temp(serviceType); + temp.UpperCase(); // Makes case insensitive + // Perform the following if message has been downloaded using IMAP4 service + if(temp.CompareC(_L("IMAP")) == KZero) + { + // Read the IMAP account name from the ini file + TPtrC imapAccountName; + if(!GetStringFromConfig( ConfigSection(), KImapAccountName, imapAccountName)) + { + ERR_PRINTF1(_L("ImapAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC parentFolderName; + if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + + // retrieves the folder Id based on the remote service folder name read from the ini file + entryToBesearched = CT_MsgUtils::GetRemoteFolderIdByNameL(iSharedDataSMTP.iSession, imapAccountName, parentFolderName); + if( entryToBesearched == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid Remote folder name specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The parent folder Id is %d"),entryToBesearched ); + } + } + } + } + // Perform the following if message has been downloaded using POP3 service + else if(temp.CompareC(_L("POP")) == KZero) + { + TPtrC popAccountName; + if(!GetStringFromConfig( ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the Pop service Id for the given Pop account + entryToBesearched = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"), entryToBesearched); + + // Fails the test step if an invalid POP account is specified + if(entryToBesearched == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + } + } + else + { + ERR_PRINTF1(_L("\"ServiceType\" is not specified: It should be IMAP or POP")); + SetTestStepResult(EFail); + } + } + + if(TestStepResult() == EPass) + { + TPtrC subjectOfExistingMsg; + if( !GetStringFromConfig(ConfigSection(), KSubjectOfExistingMsg, subjectOfExistingMsg)) + { + ERR_PRINTF1(_L("\"SubjectOfExistingMsg\" is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the message Id based on the message subject from the given remote service folder + TMsvId messageId; + messageId = CT_MsgUtils::SearchMessageBySubjectL(iSharedDataSMTP.iSession, entryToBesearched, subjectOfExistingMsg, ETrue); + if( messageId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("The given message is not found")); + SetTestStepResult(EFail); + } + // Message found + else + { + TPtrC emailFileName; + if(!GetStringFromConfig( ConfigSection(), KEmailFileName, emailFileName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The Message Id is %d"),messageId ); + + // Setting the current context to the parent of the mesage + CMsvEntry* messageEntry = CMsvEntry::NewL(*iSharedDataSMTP.iSession, messageId , TMsvSelectionOrdering()); + CleanupStack::PushL(messageEntry); + messageEntry->SetEntryL(messageId); + CImEmailMessage *emailMessage = CImEmailMessage::NewLC(*messageEntry); + TInt chunkSize(1); + GetIntFromConfig(ConfigSection(), KChunkSize, chunkSize); + // Open the body text part for read only purpose + CImPlainBodyText* bodytext = emailMessage->OpenPlainBodyTextForReadL(CImEmailMessage::EThisMessageOnly, chunkSize); + CleanupStack::PushL(bodytext); + + + HBufC* fileData = HBufC::NewLC(chunkSize); + TPtr readData = fileData->Des(); + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + RFile file; + User::LeaveIfError(file.Replace(fs,KRetrivedBody,EFileWrite)); + CleanupClosePushL(file); + TInt count = 0; + // Retrieve and store the body text to a file + do + { + bodytext->NextChunkL(readData); + _LIT(KServerMessage, "*This message was transferred with a trial version of CommuniGate(tm) Pro*\r\n"); + TInt position = readData.Find(KServerMessage);// readData.Find(KServerMessage); + if(position != KErrNotFound && count < 1) + { + count++; + readData.Delete(position, KServerMessage().Length()); + TPtrC8 inFileBuf8((TUint8*)(readData.Ptr()), readData.Length()*2); + file.Write(inFileBuf8); + } + else + { + TPtrC8 inFileBuf8((TUint8*)(readData.Ptr()), readData.Length()*2); + file.Write(inFileBuf8); + } + }while(readData.Length()>0); + file.Close(); + CleanupStack::PopAndDestroy(6, messageEntry); // file, fs, fileData, bodytext, emailMessage, messageEntry + } + } + } + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SendSmtpMessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SendSmtpMessage.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,218 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// SendSmtpMessage +// [Parameters] +// ParentFolderName : Local folder name in which the message to be sent is +// present +// Subject : Subject of the message to be sent +// Searches for the message with the specified subject and sends the message if the +// message is found. If the local folder name is invalid or if the message is +// not found in the given folder,the test step fails. +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntry::CopyL +// +// + + + +/** + @file +*/ + + + +//User Includes +#include "T_SendSmtpMessage.h" +#include +#include +#include + + +// Literals Used +_LIT(KSubject,"Subject"); +_LIT(KParentFolderName,"ParentFolderName"); + + +/** +CT_MsgSendSmtpMessage +Constructor + +@param : +@return : N/A + + +*/ +CT_MsgSendSmtpMessage::CT_MsgSendSmtpMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) +, iOperation(NULL) + { + SetTestStepName(KSendSmtpMessage); + } + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param aSharedDataSMTP +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgSendSmtpMessage object. +*/ +CT_MsgSendSmtpMessage* CT_MsgSendSmtpMessage::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_MsgSendSmtpMessage* self = new(ELeave) CT_MsgSendSmtpMessage(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgSendSmtpMessage() +Destructor +*/ +CT_MsgSendSmtpMessage::~CT_MsgSendSmtpMessage() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param bFinal +*/ +void CT_MsgSendSmtpMessage::ProgressL(TBool bFinal) + { + // TODO + if ( bFinal ) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() +*/ +void CT_MsgSendSmtpMessage::CancelStep() + { + iOperation->Cancel(); + } + + +/** +doTestStepL() +Reads the parent folder name, the message subject from the ini file +Searches for the message under the specified folder, and sends the message + +@return +Returns the test step result +*/ +TVerdict CT_MsgSendSmtpMessage::doTestStepL() + { + INFO_PRINTF1( _L("Test Step : Send Smtp Message") ); + TPtrC parentFolderName; + if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC subject; + if( !GetStringFromConfig(ConfigSection(), KSubject, subject )) + { + ERR_PRINTF1(_L("The subject of the message is not specified")); + SetTestStepResult(EFail); + } + else + { + // retrieves the folder Id based on the local folder name read from the ini file + TMsvId parentFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(parentFolderName); + if( parentFolderId == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid local folder name specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The parent folder Id is %d"),parentFolderId ); + + // Retrieves the message Id based ont he message subject from the given local folder + TMsvId messageId = CT_MsgUtils::SearchMessageBySubjectL(iSharedDataSMTP.iSession, parentFolderId , subject); + if( messageId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("The given message is not found")); + SetTestStepResult(EFail); + } + // Message found + else + { + INFO_PRINTF2(_L("The Message Id is %d"),messageId ); + + // Retrieve the default Smtp service Id + TMsvId smtpServiceId(0); + TRAPD(err, smtpServiceId = CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL()); + if(err != KErrNone) + { + ERR_PRINTF2(_L("Failure while getting the default SMTP Service Id. error = %d"),err); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The Default Smtp Service Id is %d"),smtpServiceId ); + + // Setting the current context to the parent of the mesage + CMsvEntry* folderEntry = CMsvEntry::NewL(*iSharedDataSMTP.iSession, messageId , TMsvSelectionOrdering()); + CleanupStack::PushL(folderEntry); + folderEntry->SetEntryL(messageId); + folderEntry->SetEntryL(folderEntry->Entry().Parent()); + + // Sends the message + CT_MsgActive& active=Active(); + iOperation = folderEntry->CopyL(messageId, smtpServiceId, active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + + TImSmtpProgress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TImSmtpProgress progress=paramPack(); + SetTestStepError(progress.Error()); + + if (NULL!=iOperation) + { + delete iOperation; + iOperation=NULL; + } + CleanupStack::PopAndDestroy(folderEntry); //operation,folderEntry + } + } + } + } + } + + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateForwardMessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateForwardMessage.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,361 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// SmtpCreateForwadMessage +// [Parameters] +// ServiceType : Specifies the service type(IMAP or POP) under which message exists. +// FolderName : Destination local folder where message is to be created. +// ImapAccountName : If service type is IMAP4, specify the IMAP account name that holds the +// message. +// ParentFolderName : IMAP4 folder name that holds the message. +// PopAccountName : If the the sevice type is POP3, specify POP account name. +// CommandName : SMTP client MTM command used to create the forward message. +// FolderName : Destination local folder in which message would be storted. +// SubjectOfExistingMsg: Sbject line of the existing message to which forward message +// would be creted. +// SubjectOfForwardMsg : Specifies the subject line to be set for the froward message. +// This is an optional parameter and if not specified the subject line +// would take the default format(Fwd: ). +// Creates a forward message to an existing message using the SMTP client MTM command +// and modifies the message header information. +// [APIs Used] +// CImEmailMessage::OpenPlainBodyTextForReadL +// CImPlainBodyText::NextChunkL +// +// + + + + +// User includes +#include "T_SmtpCreateForwardMessage.h" +#include +#include +#include + + +// Epoc includes +#include + + +// Literals Used +_LIT(KServiceType, "ServiceType"); + +_LIT(KImapAccountName,"ImapAccountName"); +_LIT(KParentFolderName,"ParentFolderName"); + +_LIT(KPopAccountName,"PopAccountName"); + +_LIT(KCommandName,"CommandName"); +_LIT(KFolderName, "FolderName"); +_LIT(KSubjectOfExistingMsg,"SubjectOfExistingMsg"); + +_LIT(KSubjectOfForwardMsg, "SubjectOfForwardMsg"); +_LIT(KRecipientsAddress, "RecipientsAddress"); + +const TInt KZero={0}; +/** + Function : CT_SmtpCreateForwadMessage + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_SmtpCreateForwadMessage::CT_SmtpCreateForwadMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) +, iOperation(NULL) + { + SetTestStepName(KSmtpCreateForwadMessage); + } + + +/** + Function : NewL + Description : Creates an object of CT_SmtpCreateForwadMessage + @return : N/A +*/ +CT_SmtpCreateForwadMessage* CT_SmtpCreateForwadMessage::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_SmtpCreateForwadMessage* self = new(ELeave) CT_SmtpCreateForwadMessage(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +/** + Function : ~CT_SmtpCreateForwadMessage + Description : Destructor + @return : N/A +*/ +CT_SmtpCreateForwadMessage::~CT_SmtpCreateForwadMessage() + { + delete iRecipientAddress; + delete iOperation; + iOperation = NULL; + } + +/** + Function : ProgressL + Description : Displays the status of the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateForwadMessage::ProgressL(TBool /*bFinal*/) + {} + + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateForwadMessage::CancelStep() + { + iOperation->Cancel(); + } + + +/** + Function : doTestStepL + Description : Creates a forward message for an existing message. Existing message + may be under some remot folder under IMAP service or under POP service. + @return : TVerdict - Test step result +*/ +TVerdict CT_SmtpCreateForwadMessage::doTestStepL() + { + INFO_PRINTF1(_L("TestStep: SmtpCreateFwdMsgForPlainBodyTextMsg")); + TMsvId entryToBesearched = KMsvNullIndexEntryId; + TPtrC serviceType; + if(!GetStringFromConfig( ConfigSection(), KServiceType, serviceType)) + { + ERR_PRINTF1(_L("\"ServiceType\" for the message is not specified")); + SetTestStepResult(EFail); + } + else + { + TBuf<4> temp(serviceType); + temp.UpperCase(); // Makes case insensitive + // Perform the following if message has been downloaded using IMAP4 service + if(temp.CompareC(_L("IMAP")) == KZero) + { + // Read the IMAP account name from the ini file + TPtrC imapAccountName; + if(!GetStringFromConfig( ConfigSection(), KImapAccountName, imapAccountName)) + { + ERR_PRINTF1(_L("ImapAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC parentFolderName; + if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + + // retrieves the folder Id based on the remote service folder name read from the ini file + entryToBesearched = CT_MsgUtils::GetRemoteFolderIdByNameL(iSharedDataSMTP.iSession, imapAccountName, parentFolderName); + if( entryToBesearched == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid Remote folder name specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The parent folder Id is %d"),entryToBesearched ); + } + } + } + } + // Perform the following if message has been downloaded using POP3 service + else if(temp.CompareC(_L("POP")) == KZero) + { + TPtrC popAccountName; + if(!GetStringFromConfig( ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the Pop service Id for the given Pop account + entryToBesearched = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"), entryToBesearched); + + // Fails the test step if an invalid POP account is specified + if(entryToBesearched == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + } + } + else + { + ERR_PRINTF1(_L("Sevice Type is not specified: It should be IMAP or POP")); + SetTestStepResult(EFail); + } + } + + if(TestStepResult() == EPass) + { + TPtrC commandName; + if(!GetStringFromConfig( ConfigSection(), KCommandName, commandName)) + { + ERR_PRINTF1(_L("Command name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the name of the target folder from the ini file + TPtrC folderName; + if(!GetStringFromConfig( ConfigSection(), KFolderName, folderName)) + { + ERR_PRINTF1(_L("Folder name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC subjectOfExistingMsg; + if( !GetStringFromConfig(ConfigSection(), KSubjectOfExistingMsg, subjectOfExistingMsg)) + { + ERR_PRINTF1(_L("\"SubjectOfExistingMsg\" is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the message Id based on the message subject from the given remote service folder + TMsvId messageId; + messageId = CT_MsgUtils::SearchMessageBySubjectL(iSharedDataSMTP.iSession, entryToBesearched, subjectOfExistingMsg, ETrue); + if( messageId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("The given message is not found")); + SetTestStepResult(EFail); + } + else + { + TMsvId folderId; + folderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(folderName); + + // Interpret the SMTP client MTM command to be executed + TSmtpCmds commandId = CT_MsgUtilsEnumConverter::ConvertDesToTSmtpCmdsL((TDesC&) commandName); + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); + + selection->AppendL(folderId); + selection->AppendL(messageId); + + TImCreateMessageOptions createMessageOptions; + createMessageOptions.iMsvPartList = KMsvMessagePartBody; + createMessageOptions.iMessageType = KUidMsgTypeSMTP; + createMessageOptions.iMsvEmailTypeList = 0; + TPckgBuf paramPack(createMessageOptions); + + CT_MsgActive& active=Active(); + delete iOperation; + iOperation = NULL; + TRAPD(err2,iOperation = iSharedDataSMTP.iMtm->InvokeAsyncFunctionL(commandId,*selection,paramPack,active.iStatus)); + active.Activate(); + CActiveScheduler::Start(); + SetHeaderPartL(); + + User::LeaveIfError(active.Result()); + INFO_PRINTF2(_L("err2 : %d"), err2); + CleanupStack::PopAndDestroy(selection); // selection + } + } + } + } + } + return TestStepResult(); + } + + +/** + Function : SetHeaderPartL + Description : Sets the message header fields. If the field values are not provided + as input, it takes the default values. + @return : N/A +*/ +void CT_SmtpCreateForwadMessage::SetHeaderPartL() + { + //Get the message ID from the CMsvOperation object + TMsvId temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = iOperation->ProgressL(); + paramPack.Set(progBuf); + TMsvId newMessageId = paramPack(); + if (newMessageId!=NULL) + { + CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue)); + CleanupStack::PushL(entry); + entry->SetEntryL(newMessageId); // + CMsvStore* store = entry->EditStoreL(); + CleanupStack::PushL(store); + + CImHeader* header = CImHeader::NewLC(); + header->RestoreL(*store); // Retrieves the email message header part from the message store + TPtrC subjectOfForwardMsg; + if(GetStringFromConfig(ConfigSection(), KSubjectOfForwardMsg, subjectOfForwardMsg)) + { + header->SetSubjectL(subjectOfForwardMsg); + } + TPtrC recipientsAddress; + if(GetStringFromConfig(ConfigSection(), KRecipientsAddress, recipientsAddress)) + { + header->ToRecipients().AppendL(recipientsAddress); + } + else + { + GetDefaultAddressL(); + header->ToRecipients().AppendL(*iRecipientAddress); + } + header->StoreL(*store); + store->CommitL(); // Saves the modifications to message store + TMsvEntry indexEntry = entry->Entry(); + indexEntry.iDescription.Set(header->Subject()); + INFO_PRINTF2(_L("Subject field of Forward message : %S"), &(indexEntry.iDescription)); + indexEntry.SetVisible(ETrue); + entry->ChangeL(indexEntry); // Modify the corresponding index entry permanently + + CleanupStack::PopAndDestroy(3,entry); // header, store, entry + } + } + + +/** + Function : GetDefaultAddressL + Description : Retrieve the default email address from the default SMTP service. + @return : N/A +*/ +void CT_SmtpCreateForwadMessage::GetDefaultAddressL() + { + CImSmtpSettings* settings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(settings); + + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccount; + smtpAccount.iSmtpService = KMsvNullIndexEntryId; + accounts->DefaultSmtpAccountL(smtpAccount); + accounts->LoadSmtpSettingsL(smtpAccount, *settings); + CleanupStack::PopAndDestroy(accounts); // accounts + iRecipientAddress = settings->EmailAddress().AllocL(); + INFO_PRINTF2(_L("Default Email Address is %s"),iRecipientAddress->Ptr()); + CleanupStack::PopAndDestroy(settings); // settings + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateNewMessageWithPlainBodyText.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateNewMessageWithPlainBodyText.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,313 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// SmtpCreateNewMessageWithPlainBodyText +// [Paramaters] +// Subject : Subject line of the message. +// FolderName : Destination local folder where message is to be created. +// RecipientsAddress: Recepient's address. +// EmailFileName : Plain text file name from which body text part would be populated. +// Creates a new message entry with plain body text. For creating the message entry it uses +// CImEmailOperation::CreateNewL() static metod. After creating the message entry +// it populates the body part with the contents of a plain text file. +// [APIs Used] +// CImPlainBodyText::CommitL +// CImPlainBodyText::StoreChunkL +// CImEmailOperation::CreateNewL +// CImEmailMessage::OpenPlainBodyTextForWriteL +// +// + + + +// User includes +#include "t_smtpcreatenewmessagewithplainbodytext.h" +#include +#include +#include + +// Epoc includes +#include +#include + +// Literals Used +_LIT(KSubject, "Subject"); +_LIT(KFolderName, "FolderName"); +_LIT(KEmailFileName, "EmailFileName"); +_LIT(KRecipientsAddress, "RecipientsAddress"); + +const TInt KChunkSize = 1024; + +/** + Function : CT_SmtpCreateNewMessageWithPlainBodyText + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_SmtpCreateNewMessageWithPlainBodyText::CT_SmtpCreateNewMessageWithPlainBodyText(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) +, iOperation(NULL) + { + SetTestStepName(KSmtpCreateNewMessageWithPlainBodyText); + } + + +/** + Function : NewL + Description : Creates an object of CT_SmtpCreateNewMessageWithPlainBodyText + @return : N/A +*/ +CT_SmtpCreateNewMessageWithPlainBodyText* CT_SmtpCreateNewMessageWithPlainBodyText::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_SmtpCreateNewMessageWithPlainBodyText* self = new(ELeave) CT_SmtpCreateNewMessageWithPlainBodyText(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +/** + Function : ~CT_SmtpCreateNewMessageWithPlainBodyText + Description : Destructor + @return : N/A +*/ +CT_SmtpCreateNewMessageWithPlainBodyText::~CT_SmtpCreateNewMessageWithPlainBodyText() + { + delete iRecipientAddress; + delete iOperation; + } + +/** + Function : ProgressL + Description : Displays the status of the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateNewMessageWithPlainBodyText::ProgressL(TBool /*bFinal*/) + {} + + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateNewMessageWithPlainBodyText::CancelStep() + { + iOperation->Cancel(); + } + + +/** + Function : doTestStepL + Description : Reads the SMTP account name, folder names, download limts and the command name from + the ini file. A selection of the entries uner the remote folder is obtained and passed to + InvokeAsyncFunctionL based on the command. + @return : TVerdict - Test step result +*/ +TVerdict CT_SmtpCreateNewMessageWithPlainBodyText::doTestStepL() + { + INFO_PRINTF1(_L("TestStep: SmtpCreateNewMessageWithPlainBodyText")); + + // Read the name of the target folder from the ini file + TPtrC folderName; + if(!GetStringFromConfig( ConfigSection(), KFolderName, folderName)) + { + ERR_PRINTF1(_L("Folder name is not specified")); + SetTestStepResult(EFail); + } + + TMsvId folderId; + // Get the Id of the local folder + folderId= CT_MsgUtilsEnumConverter::FindFolderIdByName(folderName); + iSharedDataSMTP.iMtm->SwitchCurrentEntryL(folderId); + TImCreateMessageOptions createMessageOptions; + createMessageOptions.iMsvPartList = KMsvMessagePartBody; + createMessageOptions.iMessageType = KUidMsgTypeSMTP; + + TPckgBuf paramPack(createMessageOptions); + + CT_MsgActive& active=Active(); + delete iOperation; + iOperation = NULL; + TRAPD(err2, iOperation = CImEmailOperation::CreateNewL(active.iStatus, *iSharedDataSMTP.iSession, folderId,KMsvNullIndexEntryId, paramPack().iMsvPartList, paramPack().iMsvEmailTypeList, paramPack().iMessageType, CActive::EPriorityStandard, ETrue)); + active.Activate(); + CActiveScheduler::Start(); + + SetHeaderPartL(); + PopulateBodyPartL(); + User::LeaveIfError(active.Result()); + INFO_PRINTF2(_L("err2 : %d"), err2); + return TestStepResult(); + } + + +/** + Function : PopulateBodyPartL + Description : Populates body part with the contents of a plain text file. + @return : N/A +*/ +void CT_SmtpCreateNewMessageWithPlainBodyText::PopulateBodyPartL() + { + //Get the message ID from the CMsvOperation object + TMsvId temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = iOperation->ProgressL(); + paramPack.Set(progBuf); + TMsvId newMessageId = paramPack(); + if (newMessageId!=NULL) + { + CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue)); + CleanupStack::PushL(entry); + entry->SetEntryL(newMessageId); + CImEmailMessage *emailMessage = CImEmailMessage::NewLC(*entry); + CImPlainBodyText* bodytext = emailMessage->OpenPlainBodyTextForWriteL(); + CleanupStack::PushL(bodytext); + + + TPtrC emailFileName; + // Read the name of the email file from the ini + if(!GetStringFromConfig(ConfigSection(),KEmailFileName,emailFileName)) + { + ERR_PRINTF1(_L("Email file name not specified")); + SetTestStepResult(EFail); + } + else + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + RFile file; + User::LeaveIfError(file.Open(fs,emailFileName,EFileRead)); + CleanupClosePushL(file); + + + TBuf8 line; + TBuf8<1> aChar; // To read one character from the file + TBool finished = FALSE; + + // Read text from the file + do + { + line.FillZ(); + line.SetLength(0); + // Read one line from email file + do + { + file.Read(aChar, 1); + if(aChar.Length()) + { + line.Append(aChar); + } + else + { + finished = TRUE; + } + }while(aChar.Length() && aChar[0] != 0x0A); + if(!line.Length()) + { + break; + } + CT_MsgActive& active=Active(); + bodytext->StoreChunkL(line,active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + }while(!finished); + + CT_MsgActive& active=Active(); + bodytext->CommitL(active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(2); // delete file,fs + } + CleanupStack::PopAndDestroy(3, entry); // delete bodytext,emailMessage,entry + } + } + + +/** + Function : GetDefaultAddressL + Description : Retrieve the default email address from the default SMTP service. + @return : N/A +*/ +void CT_SmtpCreateNewMessageWithPlainBodyText::GetDefaultAddressL() + { + CImSmtpSettings* settings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(settings); + + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccount; + smtpAccount.iSmtpService = KMsvNullIndexEntryId; + accounts->DefaultSmtpAccountL(smtpAccount); + accounts->LoadSmtpSettingsL(smtpAccount, *settings); + CleanupStack::PopAndDestroy(accounts); // accounts + iRecipientAddress = settings->EmailAddress().AllocL(); + INFO_PRINTF2(_L("Default Email Address is %s"),iRecipientAddress->Ptr()); + CleanupStack::PopAndDestroy(settings); // settings + } + + +/** + Function : SetHeaderPartL + Description : Sets the message header fields. If the field values are not provided + as input, it takes the default values. + @return : N/A +*/ +void CT_SmtpCreateNewMessageWithPlainBodyText::SetHeaderPartL() + { + //check progress + TMsvId temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = iOperation->ProgressL(); + paramPack.Set(progBuf); + TMsvId newMessageId = paramPack(); + if (newMessageId!=NULL) + { + CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue)); + CleanupStack::PushL(entry); + entry->SetEntryL(newMessageId); // + CMsvStore* store = entry->EditStoreL(); + CleanupStack::PushL(store); + + CImHeader* header = CImHeader::NewLC(); + header->RestoreL(*store); // Retrieves the email message header part from the message store + TPtrC subject; + if(GetStringFromConfig(ConfigSection(), KSubject, subject)) + { + header->SetSubjectL(subject); + } + TPtrC recipientsAddress; + if(GetStringFromConfig(ConfigSection(), KRecipientsAddress, recipientsAddress)) + { + header->ToRecipients().AppendL(recipientsAddress); + } + else + { + GetDefaultAddressL(); + header->ToRecipients().AppendL(*iRecipientAddress); + } + header->StoreL(*store); + store->CommitL(); // Saves the modifications to message store + TMsvEntry indexEntry = entry->Entry(); + indexEntry.iDescription.Set(header->Subject()); + INFO_PRINTF2(_L("Subject field created message : %S"), &(indexEntry.iDescription)); + indexEntry.SetVisible(ETrue); + entry->ChangeL(indexEntry); // Modify the corresponding index entry permanently + + CleanupStack::PopAndDestroy(3,entry); // header, store, entry + } + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateReplyMessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateReplyMessage.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,325 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// SmtpCreateReplyMessage +// [Paramaters] +// ServiceType : Specifies the service type(IMAP or POP) under which message exists. +// FolderName : Destination local folder where message is to be created. +// ImapAccountName : If service type is IMAP4, specify the IMAP account name that holds the +// message. +// ParentFolderName: IMAP4 folder name that holds the message. +// PopAccountName : If the the sevice type is POP3, specify POP account name. +// CommandName : SMTP client MTM command used to create the Reply message. +// FolderName : Destination local folder in which message would be storted. +// SubjectOfExistingMsg: Sbject line of the existing message to which reply message +// would be creted. +// SubjectOfReplyMsg: Specifies the subject line to be set for the reply message. +// This is an optional parameter and if not specified the subject line +// would take the default format(Re: ). +// Creates a reply message using the message that exists under remote service. Remote service +// can be of type IMAP4 or POP3. +// [APIs Used] +// +// + + + +// User includes +#include "T_SmtpCreateReplyMessage.h" +#include +#include +#include + + +// Epoc includes +#include + + +// Literals Used +_LIT(KServiceType, "ServiceType"); + +_LIT(KImapAccountName,"ImapAccountName"); +_LIT(KParentFolderName,"ParentFolderName"); + +_LIT(KPopAccountName,"PopAccountName"); + +_LIT(KCommandName,"CommandName"); +_LIT(KFolderName, "FolderName"); +_LIT(KSubjectOfExistingMsg,"SubjectOfExistingMsg"); + +_LIT(KSubjectOfReplyMsg, "SubjectOfReplyMsg"); + +const TInt KZero={0}; +/** + Function : CT_SmtpCreateReplyMessage + Description : Constructor + @param : aSharedDataSMTP Reference to CT_MsgSharedDataSmtp + @return : N/A +*/ +CT_SmtpCreateReplyMessage::CT_SmtpCreateReplyMessage(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) +, iOperation(NULL) + { + SetTestStepName(KSmtpCreateReplyMessage); + } + + +/** + Function : NewL + Description : Creates an object of CT_SmtpCreateReplyMessage + @return : N/A +*/ +CT_SmtpCreateReplyMessage* CT_SmtpCreateReplyMessage::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_SmtpCreateReplyMessage* self = new(ELeave) CT_SmtpCreateReplyMessage(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +/** + Function : ~CT_SmtpCreateReplyMessage + Description : Destructor + @return : N/A +*/ +CT_SmtpCreateReplyMessage::~CT_SmtpCreateReplyMessage() + { + delete iOperation; + iOperation = NULL; + } + +/** + Function : ProgressL + Description : Displays the status of the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateReplyMessage::ProgressL(TBool /*bFinal*/) + {} + + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : N/A +*/ +void CT_SmtpCreateReplyMessage::CancelStep() + { + iOperation->Cancel(); + } + + +/** + Function : doTestStepL + Description : Creates a Reply message for an existing message. Existing message + may be under some remot folder under IMAP service or under POP service. + @return : TVerdict - Test step result +*/ +TVerdict CT_SmtpCreateReplyMessage::doTestStepL() + { + INFO_PRINTF1(_L("TestStep: SmtpCreateReplyMessage")); + TMsvId entryToBesearched = KMsvNullIndexEntryId; + TPtrC serviceType; + if(!GetStringFromConfig( ConfigSection(), KServiceType, serviceType)) + { + ERR_PRINTF1(_L("Service type for the message is not specified")); + SetTestStepResult(EFail); + } + else + { + TBuf<4> temp(serviceType); + temp.UpperCase(); // Makes case insensitive + // Perform the following if message has been downloaded using IMAP4 service + if(temp.CompareC(_L("IMAP")) == KZero) + { + // Read the IMAP account name from the ini file + TPtrC imapAccountName; + if(!GetStringFromConfig( ConfigSection(), KImapAccountName, imapAccountName)) + { + ERR_PRINTF1(_L("ImapAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC parentFolderName; + if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName)) + { + ERR_PRINTF1(_L("Parent Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + + // retrieves the folder Id based on the remote service folder name read from the ini file + entryToBesearched = CT_MsgUtils::GetRemoteFolderIdByNameL(iSharedDataSMTP.iSession, imapAccountName, parentFolderName); + if( entryToBesearched == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid Remote folder name specified")); + SetTestStepResult(EFail); + } + else + { + INFO_PRINTF2(_L("The parent folder Id is %d"),entryToBesearched ); + } + } + } + } + // Perform the following if message has been downloaded using POP3 service + else if(temp.CompareC(_L("POP")) == KZero) + { + TPtrC popAccountName; + if(!GetStringFromConfig( ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("PopAccount Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the Pop service Id for the given Pop account + entryToBesearched = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"), entryToBesearched); + + // Fails the test step if an invalid POP account is specified + if(entryToBesearched == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + } + } + else + { + ERR_PRINTF1(_L("Sevice Type is not specified: It should be IMAP or POP")); + SetTestStepResult(EFail); + } + } + + if(TestStepResult() == EPass) + { + TPtrC commandName; + if(!GetStringFromConfig( ConfigSection(), KCommandName, commandName)) + { + ERR_PRINTF1(_L("Command name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the name of the target folder from the ini file + TPtrC folderName; + if(!GetStringFromConfig( ConfigSection(), KFolderName, folderName)) + { + ERR_PRINTF1(_L("Folder name is not specified")); + SetTestStepResult(EFail); + } + else + { + TPtrC subjectOfExistingMsg; + if( !GetStringFromConfig(ConfigSection(), KSubjectOfExistingMsg, subjectOfExistingMsg)) + { + ERR_PRINTF1(_L("The subject of the message is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the message Id based on the message subject from the given remote service folder + TMsvId messageId; + messageId = CT_MsgUtils::SearchMessageBySubjectL(iSharedDataSMTP.iSession, entryToBesearched, subjectOfExistingMsg, ETrue); + if( messageId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("The given message is not found")); + SetTestStepResult(EFail); + } + else + { + TMsvId folderId; + folderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(folderName); + + // Interpret the SMTP client MTM command to be executed + TSmtpCmds commandId = CT_MsgUtilsEnumConverter::ConvertDesToTSmtpCmdsL((TDesC&) commandName); + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); + + selection->AppendL(folderId); + selection->AppendL(messageId); + + TImCreateMessageOptions createMessageOptions; + createMessageOptions.iMsvPartList = KMsvMessagePartBody; + createMessageOptions.iMessageType = KUidMsgTypeSMTP; + createMessageOptions.iMsvEmailTypeList = 0; + + TPckgBuf paramPack(createMessageOptions); + + CT_MsgActive& active=Active(); + delete iOperation; + iOperation = NULL; + TRAPD(err2,iOperation = iSharedDataSMTP.iMtm->InvokeAsyncFunctionL(commandId,*selection,paramPack,active.iStatus)); + active.Activate(); + CActiveScheduler::Start(); + SetHeaderPartL(); + + User::LeaveIfError(active.Result()); + INFO_PRINTF2(_L("err2 : %d"), err2); + CleanupStack::PopAndDestroy(selection); // selection + } + } + } + } + } + return TestStepResult(); + } + + +/** + Function : SetHeaderPartL + Description : Sets the message header fields. If the field values are not provided + as input, it takes the default values. + @return : N/A +*/ +void CT_SmtpCreateReplyMessage::SetHeaderPartL() + { + //Get the message ID from the CMsvOperation object + TMsvId temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = iOperation->ProgressL(); + paramPack.Set(progBuf); + TMsvId newMessageId = paramPack(); + if (newMessageId!=NULL) + { + CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue)); + CleanupStack::PushL(entry); + entry->SetEntryL(newMessageId); // + CMsvStore* store = entry->EditStoreL(); + CleanupStack::PushL(store); + + CImHeader* header = CImHeader::NewLC(); + header->RestoreL(*store); // Retrieves the email message header part from the message store + TPtrC subjectOfReplyMsg; + if(GetStringFromConfig(ConfigSection(), KSubjectOfReplyMsg, subjectOfReplyMsg)) + { + header->SetSubjectL(subjectOfReplyMsg); + } + header->StoreL(*store); + store->CommitL(); // Saves the modifications to message store + TMsvEntry indexEntry = entry->Entry(); + indexEntry.iDescription.Set(header->Subject()); + INFO_PRINTF2(_L("Subject field of Reply message : %S"), &(indexEntry.iDescription)); + indexEntry.SetVisible(ETrue); + entry->ChangeL(indexEntry); // Modify the corresponding index entry permanently + + CleanupStack::PopAndDestroy(3,entry); // header, store, entry + } + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SmtpSendEmail.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpSendEmail.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,207 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// SmtpSendEmail +// [Parameters] +// sender : User name of email sender +// recipient : User name of email recipient +// mailFile : Path of the meta data file to check +// serverIP : IP address of SMTP server +// This test step will send an email from to with the contents +// of as message body using the SMTP server specified by . +// [APIs Used] +// RFile::Open +// RFile::Read +// CImTextServerSession::QueueConnectL +// CImTextServerSession::Send +// CImTextServerSession::QueueReceiveNextTextLine +// CImTextServerSession::GetCurrentTextLine +// CImTextServerSession::Disconnect +// CImIAPPreferences::NewLC +// +// + + + +/** + @file +*/ + + +//User includes +#include +#include "T_UtilsSendEmail.h" +#include "T_SmtpSendEmail.h" + + +// Literals Used +_LIT(KSender,"Sender"); +_LIT(KRecipient,"Recipient"); +_LIT(KMailFile,"MailFile"); +_LIT(KServerIP,"ServerIP"); + + +/** +CT_MsgSmtpSendEmail() +Constructor + +@param aSharedDataSMTP +*/ +CT_MsgSmtpSendEmail::CT_MsgSmtpSendEmail(CT_MsgSharedDataSmtp& aSharedDataSMTP) +: CT_MsgAsyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KSmtpSendEmail); + } + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param aSharedDataSMTP +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgSendSmtpMessage object. +*/ +CT_MsgSmtpSendEmail* CT_MsgSmtpSendEmail::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP) + { + CT_MsgSmtpSendEmail* self = new(ELeave) CT_MsgSmtpSendEmail(aSharedDataSMTP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgSmtpSendEmail() +Destructor +*/ +CT_MsgSmtpSendEmail::~CT_MsgSmtpSendEmail() + { + if(iSendEmail!=NULL) + { + delete iSendEmail; + iSendEmail = NULL; + } + + if(iMachineNameFile!=NULL) + { + delete iMachineNameFile; + iMachineNameFile = NULL; + } + } + + +/** +ProgressL() + +*/ +void CT_MsgSmtpSendEmail::ProgressL(TBool bFinal) + { + // TODO + if ( bFinal ) + { + // Display final progress iSendEmail + } + else + { + // Display current progress iSendEmail + } + } + +/** +CancelStep() + +*/ +void CT_MsgSmtpSendEmail::CancelStep() + { + // TODO cancel iSendEmail + } + + +/** +doTestStepL() +Reads the parent folder name, the message subject from the ini file +Searches for the message under the specified folder, and sends the message + +@return +Returns the test step result +*/ +TVerdict CT_MsgSmtpSendEmail::doTestStepL() + { + INFO_PRINTF1( _L("Test Step : Smtp Send Email") ); + TPtrC8 string8Ptr; + TPtrC stringPtr = KNone(); + // Gets the machine name of the system + if(iMachineNameFile==NULL) + { + iMachineNameFile = CT_MsgUtilsConfigFileMachineName::NewL(stringPtr); + } + + TPtrC8 machineName(iMachineNameFile->MachineName()); + + // Read the username of the email sender from the ini file + TPtrC sender; + if(!GetStringFromConfig( ConfigSection(), KSender, sender)) + { + ERR_PRINTF1(_L("Sender is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the username of the email recipient from the ini file + TPtrC recipient; + if( !GetStringFromConfig(ConfigSection(),KRecipient,recipient )) + { + ERR_PRINTF1(_L("Recipient is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the path of the mailfile from the ini file + TPtrC mailFile; + if( !GetStringFromConfig(ConfigSection(),KMailFile,mailFile )) + { + ERR_PRINTF1(_L("MailFile is not specified")); + SetTestStepResult(EFail); + } + else + { + // Read the server IP address from the ini file + TPtrC serverIP; + if( !GetStringFromConfig(ConfigSection(),KServerIP,serverIP )) + { + ERR_PRINTF1(_L("ServerIP is not specified")); + SetTestStepResult(EFail); + } + else + { + if(iSendEmail==NULL) + { + iSendEmail = CT_MsgUtilsSendEmail::NewL(*this); + } + + CT_MsgActive& active=Active(); + iSendEmail->StartL(sender,recipient,mailFile,serverIP, active.iStatus); + active.Activate(); + CActiveScheduler::Start(); + User::LeaveIfError(active.Result()); + } + } + } + } + + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_SmtpServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpServer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,222 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +// User includes +#include "T_MsgServer.h" +#include "T_SmtpServer.h" +#include "T_MsgSharedDataSmtp.h" + +// Header files of Test Steps SMTP +#include "T_CreateSmtpMessageFromEmailFile.h" +#include "T_SendSmtpMessage.h" +#include "T_SmtpSendEmail.h" +#include "T_StartRamUsageTimer.h" +#include "T_StopRamUsageTimer.h" +#include "t_smtpcreatenewmessagewithplainbodytext.h" +#include "T_SmtpCreateForwardMessage.h" +#include "T_SmtpCreateReplyMessage.h" +#include "T_RetrievePlainBodyTextAndCompare.h" +#include "T_CreateSmtpMobilityAccount.h" +#include "T_CreateSmtpAccount.h" +#include "T_CheckSmtpSNAPSetting.h" +#include "T_ModifySmtpSettings.h" +#include "T_RemoveSmtpSNAPSetting.h" +#include "T_CheckSmtpBMSetting.h" + +/** +MainL() +This is the main function which installs the +active scheduler and creates an object of the Email server +*/ +LOCAL_C void MainL() +/** + * Secure variant + * Much simpler, uses the new Rendezvous() call to sync with the client + */ + { + RProcess().DataCaging(RProcess::EDataCagingOn); + RProcess().SecureApi(RProcess::ESecureApiOn); + + CActiveScheduler* sched=NULL; + sched=new(ELeave) CActiveScheduler; + CActiveScheduler::Install(sched); + CT_MsgSmtpServer* server = NULL; + + // Create the CTestServer derived Email server + TRAPD(err, server = CT_MsgSmtpServer::NewL()); + if ( err == KErrNone ) + { + // Sync with the client and enter the active scheduler + RProcess::Rendezvous(KErrNone); + sched->Start(); + } + delete server; + server=NULL; + delete sched; + sched=NULL; + } + + +/** +E32Main() +This function is the entry point for T_MsgSmtpServer test server + +@return - Standard Epoc error code on process exit +Secure variant only +Process entry point. Called by client using RProcess API +*/ +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + TRAP_IGNORE(MainL()); + delete cleanup; + cleanup=NULL; + __UHEAP_MARKEND; + + return KErrNone; + } + + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgSmtpServer object. +*/ +CT_MsgSmtpServer* CT_MsgSmtpServer::NewL() + { + CT_MsgSmtpServer* server=new(ELeave) CT_MsgSmtpServer(); + CleanupStack::PushL(server); +// server->StartL(KSmtpServer); + server->ConstructL(KSmtpServer); + CleanupStack::Pop(server); + return server; + } + + +/** +CT_MsgSmtpServer() +Constructor +*/ +CT_MsgSmtpServer::CT_MsgSmtpServer() +: iSharedDataSMTP(NULL) + { + } + + +/** +CreateSharedDataL() +Creates an object of Shared Data + +@return +Returns a CT_MsgSharedDataBase object that would be shared across +the test steps creted by the T_MsgSmtpServer test server. +*/ +CT_MsgSharedDataBase* CT_MsgSmtpServer::NewSharedDataL() + { + return iSharedDataSMTP = CT_MsgSharedDataSmtp::NewL(); + } + + +/** +CreateTestStep() +Creates the test steps based on the name read from the script file + +@param aStepName +The name of the test step to be created + +@return +The CTestStep object created +*/ +CTestStep* CT_MsgSmtpServer::CreateTestStepL(const TDesC& aStepName) + { + CTestStep* testStep = NULL; + + if(aStepName == KCreateSmtpMessageFromEmailFile) + { + testStep = CT_MsgCreateSmtpMessageFromEmailFile::NewL(*iSharedDataSMTP); + } + else if(aStepName == KSendSmtpMessage) + { + testStep = CT_MsgSendSmtpMessage::NewL(*iSharedDataSMTP); + } + else if(aStepName == KSmtpSendEmail) + { + testStep = CT_MsgSmtpSendEmail::NewL(*iSharedDataSMTP); + } + else if(aStepName == KStartRamUsageTimer) + { + testStep = new(ELeave) CT_StartRamUsageTimer(*iSharedDataSMTP); + } + else if(aStepName == KStopRamUsageTimer) + { + testStep = new(ELeave) CT_StopRamUsageTimer(*iSharedDataSMTP); + } + else if(aStepName == KSmtpCreateNewMessageWithPlainBodyText) + { + testStep = CT_SmtpCreateNewMessageWithPlainBodyText::NewL(*iSharedDataSMTP); + } + else if(aStepName == KSmtpCreateForwadMessage) + { + testStep = CT_SmtpCreateForwadMessage::NewL(*iSharedDataSMTP); + } + else if(aStepName == KSmtpCreateReplyMessage) + { + testStep = CT_SmtpCreateReplyMessage::NewL(*iSharedDataSMTP); + } + else if(aStepName == KRetrievePlainBodyTextAndCompare) + { + testStep = CT_RetrievePlainBodyTextAndCompare::NewL(*iSharedDataSMTP); + } + else if(aStepName == KCreateSmtpMobilityAccount) + { + testStep = CT_MsgCreateSmtpMobilityAccount::NewL(*iSharedDataSMTP); + } + else if(aStepName == KCreateSmtpAccount) + { + testStep = new(ELeave) CT_MsgCreateSmtpAccount(*iSharedDataSMTP); + } + else if(aStepName == KCheckSmtpSNAPSetting) + { + testStep = new(ELeave) CT_MsgCheckSmtpSNAPSetting(*iSharedDataSMTP); + } + else if(aStepName == KModifySmtpSettings) + { + testStep = new(ELeave) CT_MsgModifySmtpSettings(*iSharedDataSMTP); + } + else if(aStepName == KRemoveSmtpSNAPSetting) + { + testStep = new(ELeave) CT_MsgRemoveSmtpSNAPSetting(*iSharedDataSMTP); + } + else if(aStepName == KCheckSmtpBMSetting) + { + testStep = new(ELeave) CT_MsgCheckSmtpBMSetting(*iSharedDataSMTP); + } + else + { + testStep = CT_MsgServer::CreateTestStepL(aStepName); + } + return testStep; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_StartRamUsageTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_StartRamUsageTimer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,148 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// StartRamUsageTimer +// [Paramaters] +// IntervalTimeInMicroSecs : The interval between events generated +// after the initial delay, in microseconds +// Starts periodical measurement of RAM memory used and updates the information kept +// in SMTP testserver. +// [APIs Used] +// +// + + + +// User includes +#include "T_StartRamUsageTimer.h" +#include "T_MsgSharedDataSmtp.h" + +// Epoc includes +#include +#include + +// Literals used +_LIT(KIntervalTimeInMicroSecs, "IntervalTimeInMicroSecs"); + +/** + Function : CT_StartRamUsageTimer + Description : Constructor + @return : none +*/ +CT_StartRamUsageTimer::CT_StartRamUsageTimer(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgAsyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KStartRamUsageTimer); + } + +/** + Function : ~CT_StartRamUsageTimer + Description : Destructor + @return : N/A +*/ +CT_StartRamUsageTimer::~CT_StartRamUsageTimer() + {} + + +/** + Function : doTestStepL + Description : Generate a periodic Timer event and handle the RAM usage callback function + @return : TVerdict Test result +*/ +TVerdict CT_StartRamUsageTimer::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :StartRamUsageTimer")); + TInt intervalTime = 0; + if(!GetIntFromConfig(ConfigSection(),KIntervalTimeInMicroSecs,intervalTime)) + { + ERR_PRINTF1(_L("Interval time is not specified")); + SetTestStepResult(EFail); + } + else + { + iSharedDataSMTP.iPeriodic->Start(intervalTime, intervalTime, TCallBack(RamUsage,this)); + } + return TestStepResult(); + } + +/** + Function : RamUsage + Description : Call non-static method DoRamUsage + @return : TInt +*/ +TInt CT_StartRamUsageTimer::RamUsage(TAny* aObject) + { + // Cast, and call non-static function + ((CT_StartRamUsageTimer *)aObject)->DoRamUsage(); + return 1; + } + +/** + Function : DoRamUsage + Description : Calculate the RAM usage value and percentage at a particular instance + @return : void +*/ +void CT_StartRamUsageTimer::DoRamUsage() + { + + TInt fullRamValue; + TInt ramFreeValue; + + HAL data; + HALData haldata; + + data.Get(haldata.EMemoryRAM, fullRamValue); + data.Get(haldata.EMemoryRAMFree, ramFreeValue); + + TInt ramUsage = ((fullRamValue - ramFreeValue)/(1024)); + + if ( iSharedDataSMTP.iMark != EFalse ) + { + iSharedDataSMTP.iStartRamValue = ramUsage; + iSharedDataSMTP.iMinRamValue = ramUsage; + iSharedDataSMTP.iMaxRamValue = ramUsage; + iSharedDataSMTP.iMark = EFalse; + } + + if ( iSharedDataSMTP.iMinRamValue > ramUsage ) + { + iSharedDataSMTP.iMinRamValue = ramUsage; + } + + if ( iSharedDataSMTP.iMaxRamValue < ramUsage ) + { + iSharedDataSMTP.iMaxRamValue = ramUsage; + } + + iSharedDataSMTP.iEndRamValue = ramUsage; + } + + + +/** + Function : ProgressL + Description : Displays the progress information of the asynchronous operation + @return : void +*/ +void CT_StartRamUsageTimer::ProgressL(TBool /*aFinal*/) + {} + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : void +*/ +void CT_StartRamUsageTimer::CancelStep() + {} diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_StopRamUsageTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_StopRamUsageTimer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,129 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// StopRamUsageTimer +// [Paramaters] +// EventStartCode : Start event code which maps to the RAM usage value +// when tacking of RAM usage got started. +// EventStopCode : Stop event code which maps to the RAM usage value +// when tacking of RAM usage got stopped. +// Stops periodical measurement of RAM memory used and logs the RAM usage information +// [APIs Used] +// +// + + + +// User includes +#include "T_StopRamUsageTimer.h" +#include +#include + + +// Literals used +_LIT(KEventStartCode, "EventStartCode"); +_LIT(KEventStopCode, "EventStopCode"); + + +/** + Function : CT_StopRamUsageTimer + Description : Constructor + @return : none +*/ +CT_StopRamUsageTimer::CT_StopRamUsageTimer(CT_MsgSharedDataSmtp& aSharedDataSMTP) +:CT_MsgAsyncStepSMTP(aSharedDataSMTP) + { + SetTestStepName(KStopRamUsageTimer); + } + +/** + Function : ~CT_StopRamUsageTimer + Description : Destructor + @return : N/A +*/ +CT_StopRamUsageTimer::~CT_StopRamUsageTimer() + {} + + +/** + Function : doTestStepL + Description : Stop the periodic Timer + @return : TVerdict Test result +*/ +TVerdict CT_StopRamUsageTimer::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :StopRamUsageTimer")); + TPtrC startCodeFromIni; + if(!GetStringFromConfig(ConfigSection(), KEventStartCode, startCodeFromIni)) + { + ERR_PRINTF1(_L("Event Start code is not specified")); + SetTestStepResult(EFail); + } + else + { + TInstrumentationPoint starteventcode = CT_MsgUtilsEnumConverter::ConvertDesToEventCode(startCodeFromIni); + + TPtrC stopCodeFromIni; + if(!GetStringFromConfig(ConfigSection(), KEventStopCode, stopCodeFromIni)) + { + ERR_PRINTF1(_L("Event Stop code is not specified")); + SetTestStepResult(EFail); + } + else + { + TInstrumentationPoint stopeventcode = CT_MsgUtilsEnumConverter::ConvertDesToEventCode(stopCodeFromIni); + iSharedDataSMTP.iPeriodic->Cancel(); + + INFO_PRINTF2(_L("Minimum Ram usage value is %d KB "), iSharedDataSMTP.iMinRamValue); + INFO_PRINTF2(_L("Maximum Ram usage value is %d KB "), iSharedDataSMTP.iMaxRamValue); + INFO_PRINTF2(_L("Start Ram usage value is %d KB "), iSharedDataSMTP.iStartRamValue); + INFO_PRINTF2(_L("End Ram usage value is %d KB "), iSharedDataSMTP.iEndRamValue); + + TInt maxRamUsage = ( iSharedDataSMTP.iMaxRamValue - iSharedDataSMTP.iStartRamValue ); + TInt extremeRamUsage = ( iSharedDataSMTP.iMaxRamValue - iSharedDataSMTP.iMinRamValue ); + TInt actualRamUsage = ( iSharedDataSMTP.iEndRamValue - iSharedDataSMTP.iStartRamValue ); + + INFO_PRINTF2(_L("Maximum(Mx-St) Ram usage diff value is %d KB "), maxRamUsage ); + INFO_PRINTF2(_L("Extreme(Mx-Mn) Ram usage diff value is %d KB "), extremeRamUsage ); + INFO_PRINTF2(_L("Actual(En-St) Ram usage diff value is %d KB "), actualRamUsage ); + if( starteventcode || stopeventcode ) + { + INFO_PRINTF5(_L("EVENT_LOG_INFORMATION,%d,%d,%d,%d"),0,0,starteventcode,iSharedDataSMTP.iStartRamValue); + INFO_PRINTF5(_L("EVENT_LOG_INFORMATION,%d,%d,%d,%d"),0,0,stopeventcode,iSharedDataSMTP.iMaxRamValue); + } + else + { + ERR_PRINTF1(_L("**ERROR**: Bad Event code. Check t_testinstrumentation.h for valid event code")); + } + } + } + return TestStepResult(); + } + +/** + Function : ProgressL + Description : Displays the progress information of the asynchronous operation + @return : void +*/ +void CT_StopRamUsageTimer::ProgressL(TBool /*aFinal*/) + {} + +/** + Function : CancelStep + Description : Cancels the asynchronous operation + @return : void +*/ +void CT_StopRamUsageTimer::CancelStep() + {} diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/email/smtp/src/T_UtilsSendEmail.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/email/smtp/src/T_UtilsSendEmail.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,402 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgUtilsSendEmail +// +// + + + +/** + @file +*/ + + +// User includes +#include "T_UtilsSendEmail.h" + + +// epoc includes +#include + + +// Literals for the Smtp commands +_LIT8(KHeloString, "HELO\r\n"); +_LIT8(KMailFrom, "MAIL FROM:"); +_LIT8(KRcptTo, "RCPT TO:"); +_LIT8(KDataString, "DATA\r\n"); +_LIT8(KEndData, "\r\n.\r\n"); +_LIT8(KQuitString, "QUIT\r\n"); +_LIT8(KCrlfString, "\r\n"); + + +/** +NewL() +Static factory constructor. Uses two phase +construction. + +@param aTestStep +@leave KErrNoMemory +@return +A pointer to the newly created CT_MsgUtilsSendEmail object. +*/ +CT_MsgUtilsSendEmail* CT_MsgUtilsSendEmail::NewL(CTestStep& aTestStep) + { + CT_MsgUtilsSendEmail* self = new (ELeave) CT_MsgUtilsSendEmail(aTestStep); + return self; + } + + +/** +CT_MsgUtilsSendEmail() +Constructor + +@param aTestStep +*/ +CT_MsgUtilsSendEmail::CT_MsgUtilsSendEmail(CTestStep& aTestStep) +: CActive(EPriorityStandard),iTestStep(aTestStep) + { + CActiveScheduler::Add(this); + } + + +/** +~CT_MsgUtilsSendEmail() +Destructor +*/ +CT_MsgUtilsSendEmail::~CT_MsgUtilsSendEmail() + { + iFile.Close(); + iFs.Close(); + delete iImSocket; + iImSocket=NULL; + delete iIapPrefs; + iIapPrefs=NULL; + } + + +/** +StartL() +Deletes the children entries of the specified parent + +@param aSender +@param aReceipient +@param aMailFile +@param aServerIP +@param aStatus +*/ +void CT_MsgUtilsSendEmail::StartL(TPtrC aSender,TPtrC aReceipient,TPtrC aMailFile, + TPtrC aServerIP,TRequestStatus& aStatus) + { + iRequestStatus = &aStatus; + aStatus = KRequestPending; + + iSender.Set(aSender); + iReceipient.Set(aReceipient); + + // Connects the client to the file server. + iFs.Connect(); + + // Opens an existing file reading and a share mode + // If the file does not already exist, an error is returned. + iFile.Open(iFs, (TDesC&)aMailFile, EFileShareAny|EFileRead); + + // Uses two phase construction and leaves nothing on the CleanupStack + iImSocket = CImTextServerSession::NewL(); + + iIapPrefs = CImIAPPreferences::NewLC(); + CleanupStack::Pop(); + + // Queue a connect assuming the socket is successfully opened. + iImSocket->QueueConnectL(iStatus, (TDesC&)aServerIP, 25, *iIapPrefs, ETrue); + + iSendState = ESmtpConnecting; + SetActive(); + } + + +/** +DoCancel() +CActive derived function to handle Cancel requests +*/ +void CT_MsgUtilsSendEmail::DoCancel() + { + iImSocket->Cancel(); + } + + +/** +RunL() +CActive derived function to handle the state machine + +@panic Unkown receive state! +@panic Unkown send state! +*/ +void CT_MsgUtilsSendEmail::RunL() + { + // handle send state + switch (iSendState) + { + case ESmtpNotConnected: + { + // Send completed. + User::RequestComplete(iRequestStatus,KErrNone); + break; + } + case ESmtpConnecting: + { + // Connection attempt completed. + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to connect: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok successful connect, next send HELO + iSendState = ESmtpSendHELO; + iImSocket->Send(iStatus, KHeloString()); + SetActive(); + break; + } + case ESmtpSendHELO: + { + // HELO was sent + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to send HELO: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok we sent HELO, now receive reply + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpHeloReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpSendMailFrom: + { + // MAIL FROM was sent. + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to send MAIL FROM: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok we sent MAIL FROM, now receive reply + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpFromReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpSendRcptTo: + { + // RCPT TO was sent. + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to send RCPT TO: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok we sent RCPT TO, now receive reply + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpRcptReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpSendData: + { + // DATA was sent. + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to send DATA: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok we sent DATA, now receive reply + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpDataReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpSendContent: + { + // Content was sent. + // Read and send file. Send file in chunks of 100 bytes. + TBuf8<100> buffer; + User::LeaveIfError(iFile.Read(buffer, 100)); + if (buffer.Length() == 0) + { + // ok, end of file. send end of email. + iSendState = ESmtpSendEndData; + iImSocket->Send(iStatus, KEndData()); + } + else + { + // we still have data in file. read and send. + iSendState = ESmtpSendContent; + iImSocket->Send(iStatus, buffer); + } + SetActive(); + break; + } + case ESmtpSendEndData: + { + // end of data was sent. + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF2(_L("CT_MsgUtilsSendEmail: failed to send end-of-data marker: [%d]."), iStatus.Int()); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok we sent end-of-data, now receive reply + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpContentReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpSendLogout: + { + iSendState = ESmtpReceiveReply; + iRecvState = ESmtpLogoutReply; + iImSocket->QueueReceiveNextTextLine(iStatus); + SetActive(); + break; + } + case ESmtpReceiveReply: + { + if (iStatus != KErrNone) + { + // error + iTestStep.ERR_PRINTF3(_L("CT_MsgUtilsSendEmail: failed to receive reply: error [%d] recvstate [%d]."), iStatus.Int(), iRecvState); + iTestStep.SetTestStepResult(EFail); + User::Leave(iStatus.Int()); + } + + // ok, read and print out the reply + TBuf8<50> buffer; + TBuf<50> buffer16; + TImLineType replyLine = iImSocket->GetCurrentTextLine(buffer); + buffer16.Copy(buffer); + iTestStep.INFO_PRINTF1(buffer16); + + if (replyLine == EBufferTooSmall) + { + while (replyLine != ECRLFTerminated) + { + replyLine = iImSocket->GetCurrentTextLine(buffer); + buffer16.Copy(buffer); + iTestStep.INFO_PRINTF1(buffer16); + } + } + + // handle reply state + switch (iRecvState) + { + case ESmtpHeloReply: + { + // send MAIL FROM + iSendState = ESmtpSendMailFrom; + TBuf8<100> from; + from.Append(KMailFrom); + from.Append(iSender); + from.Append(KCrlfString); + iImSocket->Send(iStatus, from); + break; + } + case ESmtpFromReply: + { + // send RCPT TO + iSendState = ESmtpSendRcptTo; + TBuf8<100> to; + to.Append(KRcptTo); + to.Append(iReceipient); + to.Append(KCrlfString); + iImSocket->Send(iStatus, to); + break; + } + case ESmtpRcptReply: + { + // send DATA + iSendState = ESmtpSendData; + iImSocket->Send(iStatus, KDataString()); + break; + } + case ESmtpDataReply: + { + // send content + iSendState = ESmtpSendContent; + TBuf8<100> buffer; + User::LeaveIfError(iFile.Read(buffer, 100)); + if (buffer.Length() == 0) + { + // ok, end of file. since this is first read it would mean the file + // is empty! we should maybe leave here or?? + iSendState = ESmtpSendEndData; + iImSocket->Send(iStatus, KEndData()); + } + else + { + // we still have data in file + iSendState = ESmtpSendContent; + iImSocket->Send(iStatus, buffer); + } + break; + } + case ESmtpContentReply: + { + // send QUIT + iSendState = ESmtpSendLogout; + iImSocket->Send(iStatus, KQuitString()); + break; + } + case ESmtpLogoutReply: + { + //iTestStep.INFO_PRINTF1(_L("LOGOUT")); + iSendState = ESmtpNotConnected; + iImSocket->Disconnect(iStatus); + break; + } + default: + { + User::Panic(_L("Unkown receive state!"), iRecvState); + break; + } + }// End switch (iRecvState) + + SetActive(); + break; + } + default: + { + User::Panic(_L("Unkown send state!"), iSendState); + break; + } + } // End switch (iSendState) + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/group/T_MsgFramework.mph --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/group/T_MsgFramework.mph Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// .mph file for the Framework +// +// + + + + + +USERINCLUDE ../inc + + +SOURCEPATH ../src +SOURCE T_MsgActive.cpp +SOURCE T_MsgTimer.cpp +SOURCE T_MsgSharedDataBase.cpp +SOURCE T_MsgAsyncStep.cpp +SOURCE T_MsgStep.cpp +SOURCE T_MsgServer.cpp +SOURCE T_StartUp.cpp +SOURCE T_ShutDown.cpp +SOURCE T_RecordCurrentTime.cpp + + +// Mobility Test Framework library: +//USERINCLUDE ../../../../../../app/messaging/email/pop3andsmtpmtm/servermtmutils/mobilitytestframework/inc +USERINCLUDE ../../mobilitytestframework/inc + +#ifdef __MOBILITY_TEST_FRAMEWORK +LIBRARY mobilitytestframework.lib +#endif //__MOBILITY_TEST_FRAMEWORK diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgActive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgActive.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,137 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains the class CT_MsgActive +* +* +*/ + + + + + + +#ifndef __T_MSG_ACTIVE_H__ +#define __T_MSG_ACTIVE_H__ + + +/* Epoc includes */ +#include + + +/** + * This implements an interface for the Test Timer Cmpletion Callback + */ +class MT_MsgActiveCallback + { +public: + /* + * Method from which CT_MsgActive informs the user with RunL call + * To be implemented by the derived class + */ + virtual void Completed() = 0; + + /* + * Method from which CT_MsgActive informs the user with DoCancel call + * To be implemented by the derived class + */ + virtual void CancelStep() = 0; + }; + + + +/** + * This implements a Test Active Notification class + * + */ +class CT_MsgActive : public CActive + { +public: + /** + * Destructor + */ + virtual ~CT_MsgActive(); + + /** + * Two phase constructor that allocates and constructs + * a new Active object whose actions are performed by a callback + * + * \param aCallback object to inform on RunL. + * \param aPriority priority of active object. + * \return New Callback active object. + */ + static CT_MsgActive* NewL(MT_MsgActiveCallback& aCallback, TInt aPriority=EPriorityStandard); + + /** + * Two phase constructor that allocates and constructs + * a new Active object whose actions are performed by a callback + * + * \param aCallback object to inform on RunL. + * \param aPriority priority of active object. + * \return New Callback active object. + */ + static CT_MsgActive* NewLC(MT_MsgActiveCallback& aCallback, TInt aPriority=EPriorityStandard); + + /** + * Activate the object + */ + void Activate() { SetActive(); } + + /** + * Active the object RunL implementation. + * + * Calls the MT_MsgActiveCallback::RunL to inform user that the RunL has been reached. + */ + void RunL() { iCallback.Completed(); } + + /** + * Active object DoCancel implementation. + * + * Calls the MT_MsgActiveCallback::DoCancel to inform user that the DoCancel has been reached. + */ + void DoCancel() { iCallback.CancelStep(); } + + /** + * Gets the status as TInt. + */ + TInt Result() { return iStatus.Int(); } + +protected: + /** + * Protected constructor with timer completion callback and priority. + * + * Called by two phase constructor. + * + * \param aCallback object to inform on timer completion. + * \param aPriority priority of active object. + */ + CT_MsgActive(MT_MsgActiveCallback& aCallback, TInt aPriority); + +private: + /** + * This is internal and not intended for use. + * + * Second phase of two phase constructor. + */ + void ConstructL(); + +private: + /** + * This is internal and not intended for use. + */ + MT_MsgActiveCallback& iCallback; + }; + +#endif /* __T_MSG_ACTIVE_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgAsyncStep.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgAsyncStep.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains the header file for CT_MsgAsyncStep. +* +* +*/ + + + + + + +#ifndef __T_MSG_ASYNCSTEP_H__ +#define __T_MSG_ASYNCSTEP_H__ + + +/* User includes */ +#include "T_MsgStep.h" +#include "T_MsgActive.h" +#include "T_MsgTimer.h" + + +/* This implements a base class for the asynchronous test steps */ +class CT_MsgAsyncStep : public CT_MsgStep, private MT_MsgActiveCallback, private MT_MsgTimerCallback + { +public: + /** + * Destructor + */ + virtual ~CT_MsgAsyncStep(); + + /* Derived from CTestStep + * Calls the doTestStepPreambleL of the base class CTestStep + * Reads in the ProgressTime and CancelTime for the asynchronous operation + */ + virtual enum TVerdict doTestStepPreambleL(); + +protected: + + CT_MsgAsyncStep(); + + /* + * Children must call this in their own NewL(). + */ + void ConstructL(); + + /* Method to return the object of CT_MsgActive */ + CT_MsgActive& Active() { return *iActive; } + + /* Derived from CT_MsgStep + * Displays the progress of the asynchronous operation + */ + virtual void ProgressL(TBool bFinal) = 0; + +private: + /* Derived from MT_MsgActiveCallback */ + virtual void Completed(); + + /* MT_MsgTimerCallback implementation */ + virtual void TimerCompletedL(CTimer* aTimer); + +private: + /* To be used in asynchronous operations */ + CT_MsgActive* iActive; + /* Timer object */ + CT_MsgTimer* iTimerCancel; + /* Gets the timer progress */ + CT_MsgTimer* iTimerProgress; + + TInt iTimeProgress; + }; + +#endif /* __T_MSG_ASYNCSTEP_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgServer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains the header file for the Msg server from which other servers +* would be derived +* +* +*/ + + + + + +#ifndef __T_MSG_SERVER_H__ +#define __T_MSG_SERVER_H__ + + +/* User defined classes */ +#include "testexecuteserverbase.h" +#include "T_MsgSharedDataBase.h" + +#include "mmsgtestpropertywatcher.h" +#include "cmsgtestpropertywatcher.h" + +/* + * Implements a base server from which other servers would be + * derived + */ +class CT_MsgServer : public CTestServer, public MMsgTestPropertyWatcher + { +protected: + CT_MsgServer(); + virtual ~CT_MsgServer(); + + /* + * Derived from CTestStep + * This wraps CTestServer::CreateTestStep() with a leave-trap + */ + virtual CTestStep* CreateTestStepL(const TDesC& aStepName); + + /* + * To be implemented by the derived classes + * Creates the required shared data object + */ + virtual CT_MsgSharedDataBase* NewSharedDataL() = 0; + + //From MMsgTestPropertyWatcher + void HandleEventL(RProperty& aProperty, TUint /*aKey*/); + +private: + /* Calls the function CreateTestStepL to create the required test step */ + CTestStep* CreateTestStep(const TDesC& aStepName); + + /* Creates the active scheduler and the base shared data object */ + void StartupServerL(); + + /* Destroys the shared data object and the active scheduler object */ + void ShutdownServer(); + +protected: + /* For use by generic Mtm test steps */ + CT_MsgSharedDataBase* iSharedDataBase; + +private: + /* Active scheduler object */ + CActiveScheduler* iActiveScheduler; + + //TBD: Remove this... + CMsgTestPropertyWatcher* iPropertyWatcher; + }; + +#endif /*__T_MSG_SERVER_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgSharedDataBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgSharedDataBase.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains ths class CT_MsgSharedDataBase which creates a session object +* +* +*/ + + + + + + + +#ifndef __T_MSG_SHARED_DATA_BASE_H__ +#define __T_MSG_SHARED_DATA_BASE_H__ + + +/* Epoc includes */ +#include +#include + + +/* + * This implements a class which creates and returns a session object which + * can be shared across test steps.It serves as a base class for other shared + * data objects which require the session object + */ +class CT_MsgSharedDataBase : public CBase, protected MMsvSessionObserver + { +public: + /* + * Destructor + */ + virtual ~CT_MsgSharedDataBase(); + +protected: + CT_MsgSharedDataBase(); + + /* + * Constructs the required session, registry objects + * Initialises the MTM object to NULL + */ + void ConstructL(); + + /* + * To be implemented by the derived classes to creates + * the required MTM objects + */ + virtual CBaseMtm* NewMtmL() = 0; + +public: + /* Derived from MMsvSessionObserver */ + void HandleSessionEventL(TMsvSessionEvent,TAny*,TAny*,TAny*) {}; + +public: + /* Session object */ + CMsvSession* iSession; + /* Registry object required to create MTMs */ + CClientMtmRegistry* iRegistry; + /* Set to NULL.To be Set for each specific Mtm by deriving class. */ + CBaseMtm* iMtm; + }; + +#endif /* __T_MSG_SHARED_DATA_BASE_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgStep.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgStep.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains the header file for CT_MsgStep +* +* +*/ + + + + + + +#ifndef __T_MSGSTEP_H__ +#define __T_MSGSTEP_H__ + + +/* User includes */ +#include "testexecutestepbase.h" +#include "T_MsgSharedDataBase.h" + + +/* + * Implements a test step which contains the pointer to the shared data object + * Other asynchronous and synchronous test steps can be derived from it. + */ +class CT_MsgStep : public CTestStep + { +protected: + CT_MsgStep(); + }; + +#endif /* __T_MSGSTEP_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_MsgTimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_MsgTimer.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This contains CT_MsgTimer class +* +* +*/ + + + + + + + +#ifndef __T_MSG_TIMER_H__ +#define __T_MSG_TIMER_H__ + +/* User Includes */ +#include + + + + +/* Interface to be implemented by the dervied classes for asynchronous operation */ +class MT_MsgTimerCallback + { +public: + /* To be implemented by the derived class */ + virtual void TimerCompletedL(CTimer* aTimer) = 0; + }; + + + + +/* Implementes a class that dervies from the CTimer, for an active timer object */ +class CT_MsgTimer : public CTimer + { +public: + /** + * Two phase constructor that allocates and constructs + * a new CT_MsgTimer object + * + * \param aCallback object to inform on timer completion. + * \param aPriority priority of CT_MsgTimer object. + * \return New Callback CT_MsgTimer object. + */ + static CT_MsgTimer* NewL(MT_MsgTimerCallback& aCallback, TInt aPriority = EPriorityStandard); + +protected: + CT_MsgTimer(MT_MsgTimerCallback& aCallback, TInt aPriority); + + /* + * Constructs a new asynchronous timer + * And adds the object to the active scheduler + */ + void ConstructL(); + + /* Signals on the complettion of the Timer */ + virtual void RunL(); + +private: + /* + * This is internal and not intended for use. + */ + MT_MsgTimerCallback& iCallback; + }; + +#endif /* __T_MSG_TIMER_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_RecordCurrentTime.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_RecordCurrentTime.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_MsgRecordCurrentTime +* +* +*/ + + + + + + + +#ifndef __T_RECORDCURRENTTIME_H__ +#define __T_RECORDCURRENTTIME_H__ + + +/* User includes */ +#include "testexecutestepbase.h" + + +/* Literals Used */ +_LIT(KRecordCurrentTime,"RecordCurrentTime"); + + +/* Implements the test step to record the execution time of this test step */ +class CT_MsgRecordCurrentTime : public CTestStep + { +public: + CT_MsgRecordCurrentTime(); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + }; +#endif /* __T_RECORDCURRENTTIME_H__ s*/ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_ShutDown.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_ShutDown.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_MsgShutDown +* +* +*/ + + + + + + +#ifndef __T_SHUTDOWN_H__ +#define __T_SHUTDOWN_H__ + + +/* User includes */ +#include "testexecutestepbase.h" + + /* Literals Used */ +_LIT(KShutDown,"ShutDown"); + + +/* Implements a dummy test step to be called at the end of the script */ +class CT_MsgShutDown : public CTestStep + { +public: + CT_MsgShutDown(); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + }; +#endif /*__T_SHUTDOWN_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/inc/T_StartUp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/inc/T_StartUp.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file +* This is the header file for CT_MsgStartUp +* +* +*/ + + + + + + + +#ifndef __T_STARTUP_H__ +#define __T_STARTUP_H__ + + +/* User includes */ +#include "testexecutestepbase.h" + + +/* Literals Used */ +_LIT(KStartUp,"StartUp"); + + +/* Implements a dummy test step to be called in the beginning of the script */ +class CT_MsgStartUp : public CTestStep + { +public: + CT_MsgStartUp(); + + /* CTestStep implementation */ + virtual TVerdict doTestStepL(); + }; +#endif /* __T_STARTUP_H__ s*/ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgActive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgActive.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,90 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// This contains CT_MsgActive +// +// + + + + + +/* User includes */ +#include "T_MsgActive.h" + + +/** + Function :~CT_MsgActive + Description : Destructor + @return : N/A +*/ +CT_MsgActive::~CT_MsgActive() + { + Cancel(); + } + + +/** + Function : NewL + Description : Creates the object of CT_MsgActive + @return : N/A + @leave : KErrNoMemory There is no sufficient memory +*/ +CT_MsgActive* CT_MsgActive::NewL(MT_MsgActiveCallback& aCallback, TInt aPriority) + { + CT_MsgActive* self=NewLC(aCallback, aPriority); + CleanupStack::Pop(); + return self; + } + + + +/** + Function : NewLC + Description : Creates the object of CT_MsgActive and pushes the object on the stack + @return : N/A + @leave : KErrNoMemory There is no sufficient memory +*/ + +CT_MsgActive* CT_MsgActive::NewLC(MT_MsgActiveCallback& aCallback, TInt aPriority) + { + CT_MsgActive* self=new(ELeave) CT_MsgActive(aCallback, aPriority); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + + + +/** + Function : CT_MsgActive + Description : Constructor + @return : N/A +*/ +CT_MsgActive::CT_MsgActive(MT_MsgActiveCallback& aCallback, TInt aPriority) +: CActive(aPriority) +, iCallback(aCallback) + { + } + + +/** + Function :ConstructL + Description : Adds the active object to the active scheduler + @return : N/A +*/ +void CT_MsgActive::ConstructL() + { + CActiveScheduler::Add(this); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgAsyncStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgAsyncStep.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,140 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [Test Step] : +// AsyncStep +// Ownes a Active Object for async operations. +// +// + + + +/* User includes */ +#include "T_MsgAsyncStep.h" + + +/* Literals Used */ +_LIT(KProgressTime, "ProgressTime"); +_LIT(KCancelTime, "CancelTime"); + + +/** + Function : CT_MsgAsyncStep + Description : Constructor + @return : N/A +*/ +CT_MsgAsyncStep::CT_MsgAsyncStep() +: CT_MsgStep() +, iActive(NULL) +, iTimerCancel(NULL) +, iTimerProgress(NULL) +, iTimeProgress(0) + { + } + + + +/** + Function : ConstructL + Description : Creates an object of the active object and timer + @return : N/A +*/ +void CT_MsgAsyncStep::ConstructL() + { + iActive = CT_MsgActive::NewL(*this); + iTimerCancel = CT_MsgTimer::NewL(*this); + iTimerProgress= CT_MsgTimer::NewL(*this); + } + + + +/** + Function : ~CT_MsgAsyncStep + Description : Destructor + @return : N/A +*/ +CT_MsgAsyncStep::~CT_MsgAsyncStep() + { + delete iTimerProgress; + iTimerProgress=NULL; + + delete iTimerCancel; + iTimerCancel=NULL; + + delete iActive; + iActive=NULL; + } + + + +/** + Function : Completed + Description : Cancels the wait for completion of an outstanding request + @return : N/A +*/ +void CT_MsgAsyncStep::Completed() + { + iTimerProgress->Cancel(); + iTimerCancel->Cancel(); + ProgressL(ETrue); + CActiveScheduler::Stop(); + } + + +/** + Function : TimerCompletedL + Description : Sets the progress information and cancel information accordingly + @return : none +*/ +void CT_MsgAsyncStep::TimerCompletedL(CTimer* aTimer) + { + if ( aTimer==iTimerProgress ) + { + INFO_PRINTF1(_L("Calling ProgressL(EFalse)")); + ProgressL(EFalse); + iTimerProgress->After(iTimeProgress); + } + else if ( aTimer==iTimerCancel ) + { + INFO_PRINTF1(_L("Calling Cancel()")); + iTimerProgress->Cancel(); + CancelStep(); + CActiveScheduler::Stop(); + } + } + + + +/** + Function : doTestStepPreambleL + Description : Call the doTestStepPreambleL of the CTestStep class + Reads the porgress time and cancel time from the ini + @return : TVerdict result +*/ +enum TVerdict CT_MsgAsyncStep::doTestStepPreambleL() + { + TVerdict ret=CTestStep::doTestStepPreambleL(); + + if( GetIntFromConfig( ConfigSection(), KProgressTime, iTimeProgress) ) + { + iTimerProgress->After(iTimeProgress); + } + + TInt time = 0; + if( GetIntFromConfig( ConfigSection(), KCancelTime, time) ) + { + iTimerCancel->After(time); + } + return ret; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgServer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,210 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// This is the framework class implementation for the Test Msg Server. +// +// + + + +/* User includes */ +#include "T_MsgServer.h" +#include "T_MsgSharedDataBase.h" + +#include "mobilitytestpropertyvalue.h" +#include "mobilitytestpropertymap.h" +#include "tmobilitytestpropertymapaccess.h" + +/* Header files of Test Steps */ +#include "T_StartUp.h" +#include "T_ShutDown.h" +#include "T_RecordCurrentTime.h" + +/* epoc includes */ +#include + +#include + +/** + Function : CT_MsgServer + Description : Constructor + @return : N/A +*/ +CT_MsgServer::CT_MsgServer() +: CTestServer() +, iSharedDataBase(NULL) +, iActiveScheduler(NULL) + { + + //Raise process priority to allow complete event logging. + RProcess me; + me.SetPriority(TProcessPriority(450)); + User::SetPriorityControl(EFalse); + + } + + + + +/** + Function : ~CT_MsgServer + Description : Destructor + @return : N/A +*/ +CT_MsgServer::~CT_MsgServer() + { + } + + + +/** + Function : StartupServerL + Description : Creates and installs the active scheduler + Creates an object of the Shared Data class + @return : N/A +*/ +void CT_MsgServer::StartupServerL() + { + /* Creates the active scheduler, shared data */ + if (iActiveScheduler==NULL) + { + /* Installs Active Scheduler */ + iActiveScheduler=new(ELeave) CActiveScheduler; + CActiveScheduler::Install(iActiveScheduler); + } + + if (iSharedDataBase==NULL) + { + /* Creates the shared data in the re-used thread.*/ + iSharedDataBase = NewSharedDataL(); + } + +#ifdef __MOBILITY_TEST_FRAMEWORK + if (iPropertyWatcher==NULL) + { + iPropertyWatcher = CMsgTestPropertyWatcher::NewL(KPropertyCatMsgTestUtilityServer2, EMyPropertyCounter, *this); + } +#endif //__MOBILITY_TEST_FRAMEWORK + } + + + +/** + Function : ShutdownServer + Description : Deletes the active scheduler and the created shared data object + @return : N/A +*/ +void CT_MsgServer::ShutdownServer() + { + if (NULL!=iSharedDataBase) + { + delete iSharedDataBase; + iSharedDataBase=NULL; + } + if (NULL!=iActiveScheduler) + { + delete iActiveScheduler; + iActiveScheduler = NULL; + } + + if (NULL!=iPropertyWatcher) + { + delete iPropertyWatcher; + iPropertyWatcher = NULL; + } + } + + +/** + Function : CreateTestStep + Description : This method is run in a seperate thread which is re-used + when the -SharedData flag is set. + @return : A pointer to the CTestStep class +*/ +CTestStep* CT_MsgServer::CreateTestStep(const TDesC& aStepName) + { + CTestStep* testStep = NULL; + + TRAPD(err,testStep = CreateTestStepL(aStepName)); + if(err) + { + ERR_PRINTF1(_L("CT_MsgServer::CreateTestStep() left!")); + } + return testStep; + } + + + +/** + Function : CreateTestStepL + Description : This method creates the startup and shut down test steps + @return : A pointer to the CTestStep class +*/ +CTestStep* CT_MsgServer::CreateTestStepL(const TDesC& aStepName) + { + CTestStep* testStep = NULL; + + /* This must be called as the first test step */ + if(aStepName == KStartUp) + { + StartupServerL(); + testStep = new(ELeave) CT_MsgStartUp(); + } + /* This must be called as the last test step */ + else if(aStepName == KShutDown) + { + ShutdownServer(); + testStep = new(ELeave) CT_MsgShutDown(); + } + else if(aStepName == KRecordCurrentTime) + { + testStep = new(ELeave) CT_MsgRecordCurrentTime(); + } + + else + { + ERR_PRINTF1(_L("CT_MsgServer::CreateTestStep() - Step not found")); + } + return testStep; + } + + +#ifdef __MOBILITY_TEST_FRAMEWORK +void CT_MsgServer::HandleEventL(RProperty& aProperty, TUint /*aKey*/) +#else //__MOBILITY_TEST_FRAMEWORK +void CT_MsgServer::HandleEventL(RProperty& /*aProperty*/, TUint /*aKey*/) +#endif //__MOBILITY_TEST_FRAMEWORK + { +#ifdef __MOBILITY_TEST_FRAMEWORK + + TInt propertyVal = 0; + User::LeaveIfError(aProperty.Get(propertyVal)); + + const TDesC& name = Name(); //Server name. + + + const TMsgTestPropertyMapEntry* propertyMap = TMobilityTestPropertyMapAccess::Get(propertyVal); + if(propertyMap == NULL) + { + ERR_PRINTF1(_L("CT_MsgServer::HandleEventL() - Event not found")); + } + else + { + TBufC8<80> buf8((const unsigned char*)(propertyMap->name)); + TBuf<80> buf; + buf.Copy(buf8); + INFO_PRINTF4(_L("%S EVENT [%d %S]"), &name, propertyVal, &buf); + } +#endif //__MOBILITY_TEST_FRAMEWORK + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgSharedDataBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgSharedDataBase.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,73 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// This file contains the shared data class for the base server which creates +// a session object. +// +// + + + +/* user includes */ +#include "T_MsgSharedDataBase.h" + + +/* epoc includes */ +#include + + +/** + Function : CT_MsgSharedDataBase + Description : Constructor + @return : N/A +*/ +CT_MsgSharedDataBase::CT_MsgSharedDataBase() +: CBase() +, iSession(NULL) +, iRegistry(NULL) +, iMtm(NULL) + { + } + + +/** + Function : ConstructL + Description : Creates the object of session, registry,initialises MTM + @return : N/A + @leave : KErrNoMemory There is no sufficient memory +*/ +void CT_MsgSharedDataBase::ConstructL() + { + iSession = CMsvSession::OpenSyncL(*this); + iRegistry = CClientMtmRegistry::NewL(*iSession); + iMtm = NewMtmL(); + } + + +/** + Function : ~CT_MsgSharedDataBase + Description : Destructor + @return : N/A +*/ +CT_MsgSharedDataBase::~CT_MsgSharedDataBase() + { + delete iMtm; + iMtm=NULL; + + delete iRegistry; + iRegistry=NULL; + + delete iSession; + iSession = NULL; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgStep.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,35 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [Test Step] : +// MsgStep +// Interface with TEF. +// +// + + + +/* User includes */ +#include "T_MsgStep.h" + + + +/** + Function : CT_MsgStep + Description : Constructor + @return : N/A +*/ +CT_MsgStep::CT_MsgStep() + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_MsgTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_MsgTimer.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,77 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// +// + + + + +/* User Includes */ +#include "T_MsgTimer.h" + + +/** + Function : NewL + Description : Creates an object of CT_MsgTimer + @return : N/A + @leave : KErrNoMemory There is no sufficient memory +*/ +CT_MsgTimer* CT_MsgTimer::NewL(MT_MsgTimerCallback& aCallback, TInt aPriority) + { + CT_MsgTimer* ret=new (ELeave) CT_MsgTimer(aCallback, aPriority); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + + + + +/** + Function : CT_MsgTimer + Description : Constructor + @return : N/A +*/ +CT_MsgTimer::CT_MsgTimer(MT_MsgTimerCallback& aCallback, TInt aPriority) +: CTimer(aPriority) +, iCallback(aCallback) + { + } + + + +/** + Function : ConstructL + Description : Calls the ConstrutL of CTimer class + and adds the object to Active Scheduler + @return : N/A +*/ +void CT_MsgTimer::ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + } + + +/** + Function : RunL + Description : Signals the completion of the operation + @return : N/A +*/ +void CT_MsgTimer::RunL() + { + iCallback.TimerCompletedL(this); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_RecordCurrentTime.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_RecordCurrentTime.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,76 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// [TestStep Name] +// RecordCurrentTime +// [Paramaters] +// EventCode : Event code defined in TInstrumentationPoint. +// Creates a logging statement in EventLog server with the time, and +// event code information. +// [APIs Used] +// +// + + + + +/* User includes */ +#include "T_RecordCurrentTime.h" +#include "t_utilsenumconverter.h" +#include "t_testinstrumentation.h" + +/* Epoc Include */ +//#include + + +/* Literals Used*/ +_LIT(KEventCode, "EventCode"); + +/** + Function : CT_MsgRecordCurrentTime + Description : Constructor + @return : none +*/ +CT_MsgRecordCurrentTime::CT_MsgRecordCurrentTime() + { + SetTestStepName(KRecordCurrentTime); + } + + +/** + Function : doTestStepL + Description : This function is responsible for generating a log statement in EventLog server + by providing the event code to instrumentationhandler API. + @return : TVerdict Test result +*/ +TVerdict CT_MsgRecordCurrentTime::doTestStepL() + { + INFO_PRINTF1(_L("TestStep : RecordCurrentTime")); + TPtrC eventCodeFromIni; + if(!GetStringFromConfig(ConfigSection(), KEventCode, eventCodeFromIni)) + { + ERR_PRINTF1(_L("Event code is not specified")); + SetTestStepResult(EFail); + } + else + { +// TInstrumentationPoint eventcode = CT_MsgUtilsEnumConverter::ConvertDesToEventCode(eventCodeFromIni); + +// CInstrumentationHandler *handler = CInstrumentationHandler::NewL(); +// CleanupStack::PushL(handler); +// handler->RaiseEventNotification(eventcode); +// CleanupStack::PopAndDestroy(handler); + } + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_ShutDown.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_ShutDown.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,47 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// This is the header file for CT_MsgShutDown +// +// + + + +/* User includes */ +#include "T_ShutDown.h" + + + +/** + Function : CT_MsgShutDown + Description : Constructor + @return : none +*/ +CT_MsgShutDown::CT_MsgShutDown() + { + SetTestStepName(KShutDown); + } + + + +/** + Function : doTestStepL + Description : Dummy step + @return : TVerdict Test result +*/ +TVerdict CT_MsgShutDown::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :ShutDown")); + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/framework/src/T_StartUp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/framework/src/T_StartUp.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,45 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file +// This is the header file for CT_MsgStartUp +// +// + + + +/* User includes */ +#include "T_StartUp.h" + + +/** + Function : CT_MsgStartUp + Description : Constructor + @return : none +*/ +CT_MsgStartUp::CT_MsgStartUp() + { + SetTestStepName(KStartUp); + } + + +/** + Function : doTestStepL + Description : Dummy step + @return : TVerdict Test result +*/ +TVerdict CT_MsgStartUp::doTestStepL() + { + INFO_PRINTF1(_L("TestStep :StartUp")); + return TestStepResult(); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,19 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Messaging Test Product +// +// + +#include "../testutils/group/bld.inf" +#include "../email/group/bld.inf" diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/EABI/mobilitytestframeworku.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/EABI/mobilitytestframeworku.def Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,37 @@ +EXPORTS + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExt18NewCarrierAcceptedEv @ 1 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExt18NewCarrierRejectedEv @ 2 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExt22IgnorePreferredCarrierEv @ 3 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExt25MigrateToPreferredCarrierEv @ 4 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExt4NewLER16RCommsSubSessionR21MMobilityProtocolResp @ 5 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExtD0Ev @ 6 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExtD1Ev @ 7 NONAME + _ZN14MSGNETTESTSTUB26CActiveCommsMobilityApiExtD2Ev @ 8 NONAME + _ZN23CMsgTestPropertyMapPairC1EP24TMsgTestPropertyMapEntryS1_ @ 9 NONAME + _ZN23CMsgTestPropertyMapPairC2EP24TMsgTestPropertyMapEntryS1_ @ 10 NONAME + _ZN23CMsgTestPropertyWatcher4NewLE4TUidjR23MMsgTestPropertyWatcher @ 11 NONAME + _ZN23CMsgTestPropertyWatcher8PropertyEv @ 12 NONAME + _ZN23CMsgTestPropertyWatcherD0Ev @ 13 NONAME + _ZN23CMsgTestPropertyWatcherD1Ev @ 14 NONAME + _ZN23CMsgTestPropertyWatcherD2Ev @ 15 NONAME + _ZN24CImMobilityTestFramework12GetServiceIdER21MMobilityProtocolResp @ 16 NONAME + _ZN24CImMobilityTestFramework6CreateElR18CImMobilityManager @ 17 NONAME + _ZN24CImMobilityTestFramework6DeleteER18CImMobilityManager @ 18 NONAME + _ZN24CImMobilityTestFramework8MtmStateEl23TImMobilityTestMtmState @ 19 NONAME + _ZN30TMobilityTestPropertyMapAccess3GetEP7TDesC16 @ 20 NONAME + _ZN30TMobilityTestPropertyMapAccess3GetEi @ 21 NONAME + _ZTI23CMsgTestPropertyWatcher @ 22 NONAME ; ## + _ZTI24CImMobilityTestFramework @ 23 NONAME ; ## + _ZTIN14MSGNETTESTSTUB26CActiveCommsMobilityApiExtE @ 24 NONAME ; ## + _ZTIN4Meta11TMetaVarLenI5RBuf8EE @ 25 NONAME ABSENT; ## + _ZTIN4Meta11TMetaVarLenI6RBuf16EE @ 26 NONAME ABSENT ; ## + _ZTIN4Meta12TMetaVarLen8I5RBuf8EE @ 27 NONAME ABSENT ; ## + _ZTIN4Meta13TMetaVarLen16I6RBuf16EE @ 28 NONAME ABSENT ; ## + _ZTV23CMsgTestPropertyWatcher @ 29 NONAME ; ## + _ZTV24CImMobilityTestFramework @ 30 NONAME ; ## + _ZTVN14MSGNETTESTSTUB26CActiveCommsMobilityApiExtE @ 31 NONAME ; ## + _ZTVN4Meta11TMetaVarLenI5RBuf8EE @ 32 NONAME ABSENT ; ## + _ZTVN4Meta11TMetaVarLenI6RBuf16EE @ 33 NONAME ABSENT ; ## + _ZTVN4Meta12TMetaVarLen8I5RBuf8EE @ 34 NONAME ABSENT ; ## + _ZTVN4Meta13TMetaVarLen16I6RBuf16EE @ 35 NONAME ABSENT ; ## + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/bwins/mobilitytestframeworku.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/bwins/mobilitytestframeworku.def Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,18 @@ +EXPORTS + ??0CMsgTestPropertyMapPair@@QAE@PAUTMsgTestPropertyMapEntry@@0@Z @ 1 NONAME ; CMsgTestPropertyMapPair::CMsgTestPropertyMapPair(struct TMsgTestPropertyMapEntry *, struct TMsgTestPropertyMapEntry *) + ??1CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@UAE@XZ @ 2 NONAME ; MSGNETTESTSTUB::CActiveCommsMobilityApiExt::~CActiveCommsMobilityApiExt(void) + ??1CMsgTestPropertyWatcher@@UAE@XZ @ 3 NONAME ; CMsgTestPropertyWatcher::~CMsgTestPropertyWatcher(void) + ?Create@CImMobilityTestFramework@@SAXJAAVCImMobilityManager@@@Z @ 4 NONAME ; void CImMobilityTestFramework::Create(long, class CImMobilityManager &) + ?Delete@CImMobilityTestFramework@@SAXAAVCImMobilityManager@@@Z @ 5 NONAME ; void CImMobilityTestFramework::Delete(class CImMobilityManager &) + ?Get@TMobilityTestPropertyMapAccess@@SAPBUTMsgTestPropertyMapEntry@@H@Z @ 6 NONAME ; struct TMsgTestPropertyMapEntry const * TMobilityTestPropertyMapAccess::Get(int) + ?Get@TMobilityTestPropertyMapAccess@@SAPBUTMsgTestPropertyMapEntry@@PAVTDesC16@@@Z @ 7 NONAME ; struct TMsgTestPropertyMapEntry const * TMobilityTestPropertyMapAccess::Get(class TDesC16 *) + ?GetServiceId@CImMobilityTestFramework@@SAJAAVMMobilityProtocolResp@@@Z @ 8 NONAME ; long CImMobilityTestFramework::GetServiceId(class MMobilityProtocolResp &) + ?IgnorePreferredCarrier@CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@QAEXXZ @ 9 NONAME ; void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::IgnorePreferredCarrier(void) + ?MigrateToPreferredCarrier@CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@QAEXXZ @ 10 NONAME ; void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::MigrateToPreferredCarrier(void) + ?MtmState@CImMobilityTestFramework@@SAXJW4TImMobilityTestMtmState@@@Z @ 11 NONAME ; void CImMobilityTestFramework::MtmState(long, enum TImMobilityTestMtmState) + ?NewCarrierAccepted@CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@QAEXXZ @ 12 NONAME ; void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewCarrierAccepted(void) + ?NewCarrierRejected@CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@QAEXXZ @ 13 NONAME ; void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewCarrierRejected(void) + ?NewL@CActiveCommsMobilityApiExt@MSGNETTESTSTUB@@SAPAV12@AAVRCommsSubSession@@AAVMMobilityProtocolResp@@@Z @ 14 NONAME ; class MSGNETTESTSTUB::CActiveCommsMobilityApiExt * MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewL(class RCommsSubSession &, class MMobilityProtocolResp &) + ?NewL@CMsgTestPropertyWatcher@@SAPAV1@VTUid@@IAAVMMsgTestPropertyWatcher@@@Z @ 15 NONAME ; class CMsgTestPropertyWatcher * CMsgTestPropertyWatcher::NewL(class TUid, unsigned int, class MMsgTestPropertyWatcher &) + ?Property@CMsgTestPropertyWatcher@@QAEAAVRProperty@@XZ @ 16 NONAME ; class RProperty & CMsgTestPropertyWatcher::Property(void) + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,23 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +PRJ_PLATFORMS + +PRJ_MMPFILES +#ifdef __MOBILITY_TEST_FRAMEWORK +mobilitytestframework.mmp +#endif //__MOBILITY_TEST_FRAMEWORK + +PRJ_EXPORTS diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/group/mobilitytestframework.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/group/mobilitytestframework.mmp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,32 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +TARGET mobilitytestframework.dll +TARGETTYPE dll + +CAPABILITY All -TCB +TARGETPATH /system/libs +UID 0x1000008d 0x10283077 +VENDORID 0x70000001 + +SOURCEPATH ../src +SOURCE cimmobilitytestframework.cpp cimmobilitytesttls.cpp +SOURCE cmsgtestpropertywatcher.cpp cmsgtestpropertymappair.cpp +SOURCE tmobilitytestpropertymapaccess.cpp msgnetteststub.cpp + +USERINCLUDE ../inc ../../inc +SYSTEMINCLUDE /epoc32/include /epoc32/include/comms-infras + +LIBRARY euser.lib efsrv.lib netmeta.lib diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/cimmobilitytestframework.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/cimmobilitytestframework.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,68 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __CIMMOBILITYTESTFRAMEWORK_H__ +#define __CIMMOBILITYTESTFRAMEWORK_H__ + +#include +#include +#include // MMobilityProtocolResp +#include "mmsgtestpropertywatcher.h" +#include "timmobilitytestmtmstate.h" + +// Forward class references +class CImMobilityManager; +class CMsgTestPropertyWatcher; + +/** +The test framework class. + +@internalComponent +@released +*/ +class CImMobilityTestFramework : public CBase, + public MMsgTestPropertyWatcher + { +public: + IMPORT_C static void Create(TMsvId aServiceId, CImMobilityManager& aMobilityManager); + IMPORT_C static void Delete(CImMobilityManager& aMobilityManager); + IMPORT_C static void MtmState(TMsvId aServiceId, TImMobilityTestMtmState aMtmState); + IMPORT_C static TMsvId GetServiceId(MMobilityProtocolResp& aProtocol); + + ~CImMobilityTestFramework(); + TMsvId ServiceId(); + CImMobilityManager& MobilityManager(); + void TimerExpired(); + + // from MMsgTestPropertyWatcher + void HandleEventL(RProperty& aProperty, TUint /*aKey*/); + +private: + static void NewL(TMsvId aServiceId, CImMobilityManager& aMobilityManager); + CImMobilityTestFramework(TMsvId aServiceId, CImMobilityManager& aMobilityManager); + void ConstructL(); + +private: + // Mobility manager + CImMobilityManager& iMobilityManager; + + // Service Id of related MTM + TMsvId iServiceId; + + // Property watcher for Publish&Subscribe + CMsgTestPropertyWatcher* iPropertyWatcher; + }; + +#endif //__CIMMOBILITYTESTFRAMEWORK_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/cimmobilitytesttls.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/cimmobilitytesttls.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,54 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __CIMMOBILITYTESTTLS_H__ +#define __CIMMOBILITYTESTTLS_H__ + +#include +#include + +#include "cimmobilitytestframework.h" +#include // MMobilityProtocolResp + +class CImMobilityManager; + +/** +Holds a list of the test frameworks and the list of actions read from +the test script. +A pointer to this class is held in thread local storage. + +@internalComponent +@released +*/ +NONSHARABLE_CLASS(CImMobilityTestTls) : public CBase + { +public: + static CImMobilityTestTls* NewL(); + CImMobilityTestTls(); + void ConstructL(); + ~CImMobilityTestTls(); + + void AddFrameworkL(CImMobilityTestFramework& aFramework); + CImMobilityTestFramework* RemoveFramework(CImMobilityManager& aMobilityManager, TBool& aLastOne); + CImMobilityTestFramework* GetFramework(TMsvId aServiceId); + CImMobilityTestFramework* GetFramework(CImMobilityManager& aMobilityManager); + CImMobilityTestFramework* GetFramework(MMobilityProtocolResp& aProtocol); + +private: + // Test framework list + RPointerArray iFrameworkList; + }; + +#endif //__CIMMOBILITYTESTTLS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/cmsgtestpropertymappair.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/cmsgtestpropertymappair.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,39 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __CMSGTESTPROPERTYMAPPAIR_H__ +#define __CMSGTESTPROPERTYMAPPAIR_H__ + +#include "tmsgtestpropertymapentry.h" + +class CMsgTestPropertyMapPair + { +public: + IMPORT_C CMsgTestPropertyMapPair(TMsgTestPropertyMapEntry* aFlag, TMsgTestPropertyMapEntry* aCall); + +public: + TMsgTestPropertyMapEntry* flag; + TMsgTestPropertyMapEntry* call; + }; + +#endif //__CMSGTESTPROPERTYMAPPAIR_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/cmsgtestpropertywatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/cmsgtestpropertywatcher.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,62 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// cmsgtestpropertwatcher.h +// +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __CMSGTESTPROPERTYWATCHER_H__ +#define __CMSGTESTPROPERTYWATCHER_H__ + +#include +#include + +class MMsgTestPropertyWatcher; + +class CMsgTestPropertyWatcher : public CActive + { +public: + IMPORT_C static CMsgTestPropertyWatcher* NewL(TUid aCategory, TUint aKey, MMsgTestPropertyWatcher& aCallback); + IMPORT_C virtual ~CMsgTestPropertyWatcher(); + + IMPORT_C RProperty& Property(); + +protected: + void ConstructL(TUid aCategory, TUint aKey, MMsgTestPropertyWatcher& aCallback); + CMsgTestPropertyWatcher(); + +private: + void RunL(); + void DoCancel(); + +public: + //TBD: these should be private. + TUid iCategory; + TUint iKey; + +private: + MMsgTestPropertyWatcher* iCallback; + +protected: + RProperty iProperty; + }; + +#endif //__CMSGTESTPROPERTYWATCHER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/mmsgtestpropertywatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/mmsgtestpropertywatcher.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,37 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __MMSGTESTPROPERTYWATCHER_H__ +#define __MMSGTESTPROPERTYWATCHER_H__ + +#include + +class RProperty; + +class MMsgTestPropertyWatcher + { +public: + virtual void HandleEventL(RProperty& aProperty, TUint aKey) =0; + }; + +#endif //__MMSGTESTPROPERTYWATCHER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestmtmapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestmtmapi.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __MOBILITYTESTMTMAPI_H__ +#define __MOBILITYTESTMTMAPI_H__ + +#ifndef __MOBILITY_TEST_FRAMEWORK + +#define MOBILITY_TEST_CREATE(serviceId, mobilityManager) +#define MOBILITY_TEST_DELETE(mobilityManager) +#define MOBILITY_TEST_MTM_STATE(serviceId, state) + +#else //__MOBILITY_TEST_FRAMEWORK + +#include "timmobilitytestmtmstate.h" +#include "cimmobilitytestframework.h" + +#define MOBILITY_TEST_CREATE(serviceId, mobilityManager) CImMobilityTestFramework::Create(serviceId, mobilityManager) +#define MOBILITY_TEST_DELETE(mobilityManager) CImMobilityTestFramework::Delete(mobilityManager) +#define MOBILITY_TEST_MTM_STATE(serviceId, state) CImMobilityTestFramework::MtmState(serviceId, state) + +#endif //__MOBILITY_TEST_FRAMEWORK + +#endif //__MOBILITYTESTMTMAPI_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestpropertymap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestpropertymap.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,126 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __MOBILITYTESTPROPERTYMAP_H__ +#define __MOBILITYTESTPROPERTYMAP_H__ + +#include "timmobilitytestmtmstate.h" +#include "mobilitytestpropertyvalue.h" +#include "tmsgtestpropertymapentry.h" + +const TMsgTestPropertyMapEntry propertyMapList[] = + { + {"KNTSInitialValueFlag", ENTSInitialValueFlag}, + {"KNTSPreferredCarrierUpgradeCall", ENTSPreferredCarrierUpgradeCall}, + {"KNTSPreferredCarrierDowngradeCall", ENTSPreferredCarrierDowngradeCall}, + {"KNTSNewCarrierActiveCall", ENTSNewCarrierActiveCall}, + {"KNTSErrorCall", ENTSErrorCall}, + {"KNTSMigrateToPreferredCarrierFlag", ENTSMigrateToPreferredCarrierFlag}, + {"KNTSIgnorePreferredCarrierFlag", ENTSIgnorePreferredCarrierFlag}, + {"KNTSNewCarrierAcceptedFlag", ENTSNewCarrierAcceptedFlag}, + {"KNTSNewCarrierRejectedFlag", ENTSNewCarrierRejectedFlag}, + {"KNTSPreferredCarrierUpgradeFlag", ENTSPreferredCarrierUpgradeFlag}, + {"KNTSPreferredCarrierDowngradeFlag", ENTSPreferredCarrierDowngradeFlag}, + {"KNTSCancelFlag", ENTSCancelFlag}, + {"KNTSMigrationCompleteMigrateOKFlag", ENTSMigrationCompleteMigrateOKFlag}, + {"KNTSMigrationCompleteCouldNotReconnectFlag", ENTSMigrationCompleteCouldNotReconnectFlag}, + {"KNTSMigrationCompleteMobilityErrorFlag", ENTSMigrationCompleteMobilityErrorFlag}, + {"KNTSAcceptImmediatelyCall", ENTSAcceptImmediatelyCall}, + {"KNTSAcceptStopCurrentCall", ENTSAcceptStopCurrentCall}, + {"KNTSAcceptCompleteCurrentCall", ENTSAcceptCompleteCurrentCall}, + {"KNTSIgnoreCall", ENTSIgnoreCall}, + {"KNTSInitialReject", KMobilityTestMtmStateInitialReject}, + {"KNTSImapConnect", KMobilityTestMtmStateImapConnect}, + {"KNTSImapIdle", KMobilityTestMtmStateImapIdle}, + {"KNTSImapCopyFromLocal1", KMobilityTestMtmStateImapCopyFromLocal1}, + {"KNTSImapCopyFromLocal2", KMobilityTestMtmStateImapCopyFromLocal2}, + {"KNTSImapCopyFromLocal3", KMobilityTestMtmStateImapCopyFromLocal3}, + {"KNTSImapCopyToLocal1", KMobilityTestMtmStateImapCopyToLocal1}, + {"KNTSImapCopyToLocal2", KMobilityTestMtmStateImapCopyToLocal2}, + {"KNTSImapCopyToLocal3", KMobilityTestMtmStateImapCopyToLocal3}, + {"KNTSImapCopyToLocal4", KMobilityTestMtmStateImapCopyToLocal4}, + {"KNTSImapCopyToLocal5", KMobilityTestMtmStateImapCopyToLocal5}, + {"KNTSImapCopyToLocal6", KMobilityTestMtmStateImapCopyToLocal6}, + {"KNTSImapCopyToLocal7", KMobilityTestMtmStateImapCopyToLocal7}, + {"KNTSImapCopyWithinService1", KMobilityTestMtmStateImapCopyWithinService1}, + {"KNTSImapCopyWithinService2", KMobilityTestMtmStateImapCopyWithinService2}, + {"KNTSImapCopyWithinService3", KMobilityTestMtmStateImapCopyWithinService3}, + {"KNTSImapCopyWithinService4", KMobilityTestMtmStateImapCopyWithinService4}, + {"KNTSImapCopyWithinService5", KMobilityTestMtmStateImapCopyWithinService5}, + {"KNTSImapCopyWithinService6", KMobilityTestMtmStateImapCopyWithinService6}, + {"KNTSImapCopyWithinService7", KMobilityTestMtmStateImapCopyWithinService7}, + {"KNTSImapCopyWithinService8", KMobilityTestMtmStateImapCopyWithinService8}, + {"KNTSImapCreateFolder", KMobilityTestMtmStateImapCreateFolder}, + {"KNTSImapDelete1", KMobilityTestMtmStateImapDelete1}, + {"KNTSImapDelete2", KMobilityTestMtmStateImapDelete2}, + {"KNTSImapDelete3", KMobilityTestMtmStateImapDelete3}, + {"KNTSImapDelete4", KMobilityTestMtmStateImapDelete4}, + {"KNTSImapDelete5", KMobilityTestMtmStateImapDelete5}, + {"KNTSImapDeleteFolder1", KMobilityTestMtmStateImapDeleteFolder1}, + {"KNTSImapDeleteFolder2", KMobilityTestMtmStateImapDeleteFolder2}, + {"KNTSImapDeleteFolder3", KMobilityTestMtmStateImapDeleteFolder3}, + {"KNTSImapDeleteFolder4", KMobilityTestMtmStateImapDeleteFolder4}, + {"KNTSImapDisconnect1", KMobilityTestMtmStateImapDisconnect1}, + {"KNTSImapDisconnect2", KMobilityTestMtmStateImapDisconnect2}, + {"KNTSImapRename1", KMobilityTestMtmStateImapRename1}, + {"KNTSImapRename2", KMobilityTestMtmStateImapRename2}, + {"KNTSImapSyncFolder1", KMobilityTestMtmStateImapSyncFolder1}, + {"KNTSImapSyncFolder2", KMobilityTestMtmStateImapSyncFolder2}, + {"KNTSImapSyncFolderTree", KMobilityTestMtmStateImapSyncFolderTree}, + {"KNTSImapSyncEInboxEarlyDeletes", KMobilityTestMtmImapSyncEInboxEarlyDeletes}, + {"KNTSImapSyncEInboxEarlyExpunge", KMobilityTestMtmImapSyncEInboxEarlyExpunge}, + {"KNTSImapSyncEInboxSync", KMobilityTestMtmImapSyncEInboxSync}, + {"KNTSImapSyncESyncTree", KMobilityTestMtmImapSyncESyncTree}, + {"KNTSImapSyncESyncSubscriptions", KMobilityTestMtmImapSyncESyncSubscriptions}, + {"KNTSImapSyncEFolderEarlyDeletes", KMobilityTestMtmImapSyncEFolderEarlyDeletes}, + {"KNTSImapSyncEFolderEarlyExpunge", KMobilityTestMtmImapSyncEFolderEarlyExpunge}, + {"KNTSImapSyncESyncFolder", KMobilityTestMtmImapSyncESyncFolder}, + {"KNTSImapEInboxLateDeletes", KMobilityTestMtmImapEInboxLateDeletes}, + {"KNTSImapSyncEFolderLateDeletes", KMobilityTestMtmImapSyncEFolderLateDeletes}, + {"KNTSImapSyncEFolderLateExpunge", KMobilityTestMtmImapSyncEFolderLateExpunge}, + {"KNTSPopConnecting", KMobilityTestMtmStatePopConnecting}, + {"KNTSPopRefreshing", KMobilityTestMtmStatePopRefreshing}, + {"KNTSPopTidying", KMobilityTestMtmStatePopTidying}, + {"KNTSPopFindingFirstOfflineOp", KMobilityTestMtmStatePopFindingFirstOfflineOp}, + {"KNTSPopCancellingOfflineOps", KMobilityTestMtmStatePopCancellingOfflineOps}, + {"KNTSPopCopying", KMobilityTestMtmStatePopCopying}, + {"KNTSPopMoving", KMobilityTestMtmStatePopMoving}, + {"KNTSPopPopulating", KMobilityTestMtmStatePopPopulating}, + {"KNTSPopTopPopulating", KMobilityTestMtmStatePopTopPopulating}, + {"KNTSPopDeleting", KMobilityTestMtmStatePopDeleting}, + {"KNTSPopConnectedAndIdle", KMobilityTestMtmStatePopConnectedAndIdle}, + {"KNTSPopQuitting", KMobilityTestMtmStatePopQuitting}, + {"KNTSPopRetrieving", KMobilityTestMtmStatePopRetrieving}, + {"KNTSSmtpConnectingToSmtp", KMobilityTestMtmStateSmtpConnectingToSmtp}, + {"KNTSSmtpWaitingForReply", KMobilityTestMtmStateSmtpWaitingForReply}, + {"KNTSSmtpAuthorisingSmtp", KMobilityTestMtmStateSmtpAuthorisingSmtp}, + {"KNTSSmtpAuthInProgress", KMobilityTestMtmStateSmtpAuthInProgress}, + {"KNTSSmtpSendingStartTls", KMobilityTestMtmStateSmtpSendingStartTls}, + {"KNTSSmtpSettingSecurity", KMobilityTestMtmStateSmtpSettingSecurity}, + {"KNTSSmtpResetSmtp", KMobilityTestMtmStateSmtpResetSmtp}, + {"KNTSSmtpClosingSmtp", KMobilityTestMtmStateSmtpClosingSmtp}, + {"KNTSSmtpSendFile", KMobilityTestMtmStateSmtpSendFile}, + {"", 0xffffffff} // This must always be the last entry in the list + }; + +#endif //__MOBILITYTESTPROPERTYMAP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestpropertyvalue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/mobilitytestpropertyvalue.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,68 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __MOBILITYTESTPROPERTYVALUE_H__ +#define __MOBILITYTESTPROPERTYVALUE_H__ + +#include + +const TUid KPropertyCatMsgTestUtilityServer2={0x102857AB}; + +static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy); + +enum TMyPropertyKeys {EMyPropertyCounter, EMyPropertyParamCall, EMyPropertyParamFlag}; + +const TInt KMobilityTestPropertyValueEnumerationOffset = 1000; + +enum TMobilityTestPropertyValue +{ + ENTSInitialValueFlag=KMobilityTestPropertyValueEnumerationOffset, + + //MMobilityProtocolResp: + ENTSPreferredCarrierUpgradeCall, + ENTSPreferredCarrierDowngradeCall, + ENTSNewCarrierActiveCall, + ENTSErrorCall, + + //CActiveCommsMobilityApiExt: + ENTSMigrateToPreferredCarrierFlag, + ENTSIgnorePreferredCarrierFlag, + ENTSNewCarrierAcceptedFlag, + ENTSNewCarrierRejectedFlag, + + //CMobilityPolicyPlugin: + ENTSPreferredCarrierUpgradeFlag, + ENTSPreferredCarrierDowngradeFlag, + ENTSCancelFlag, + ENTSMigrationCompleteMigrateOKFlag, + ENTSMigrationCompleteCouldNotReconnectFlag, + ENTSMigrationCompleteMobilityErrorFlag, + + //MImMobilityPolicyHandler: + ENTSAcceptImmediatelyCall, + ENTSAcceptStopCurrentCall, + ENTSAcceptCompleteCurrentCall, + ENTSIgnoreCall +}; + +#endif //__MOBILITYTESTPROPERTYVALUE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/msgnetteststub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/msgnetteststub.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,92 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __MSGNETTESTSTUB_H__ +#define __MSGNETTESTSTUB_H__ + +#ifdef __MOBILITY_TEST_FRAMEWORK + +#include +#include +#include "mmsgtestpropertywatcher.h" +#include + +class CMsgTestPropertyWatcher; + +namespace MSGNETTESTSTUB +{ + +class CActiveCommsMobilityApiExt : public CBase, + public MMobilityProtocolResp, + public MMsgTestPropertyWatcher + { +public: + + //Stubbed interface: + IMPORT_C static CActiveCommsMobilityApiExt* NewL(RCommsSubSession& aExtensionProvider,MMobilityProtocolResp& aProtocol); + IMPORT_C ~CActiveCommsMobilityApiExt(); + + IMPORT_C void MigrateToPreferredCarrier(); + IMPORT_C void IgnorePreferredCarrier(); + IMPORT_C void NewCarrierAccepted(); + IMPORT_C void NewCarrierRejected(); + +protected: + + //Internal methods: + void ConstructL(); + explicit CActiveCommsMobilityApiExt(RCommsSubSession& aExtensionProvider, MMobilityProtocolResp& aProtocol); + +public: + + // from MMobilityProtocolResp + void PreferredCarrierAvailable(TAccessPointInfo aOldAp, TAccessPointInfo aNewAp, TBool aIsUpgrade, TBool aIsSeamless); + void NewCarrierActive(TAccessPointInfo aNewAp, TBool aIsSeamless); + void Error(TInt aError); + + // from MPropertyWatcher + void HandleEventL(RProperty& aProperty, TUint aKey); + +private: + + RCommsSubSession& iCommsSubSession; + MMobilityProtocolResp& iProtocol; + + //Pointer to the real thing + ::CActiveCommsMobilityApiExt* iCommsMobilityApi; + + //CMsgTestPropertyWatcher for IPC + CMsgTestPropertyWatcher* iPropertyWatcher; + + TMsvId iServiceId; + }; + +} + +#ifndef LOCAL_INCLUDE +#define CActiveCommsMobilityApiExt MSGNETTESTSTUB::CActiveCommsMobilityApiExt +#endif // LOCAL_INCLUDE + +#endif //__MOBILITY_TEST_FRAMEWORK + +#endif //__MSGNETTESTSTUB_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/timmobilitytestmtmstate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/timmobilitytestmtmstate.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,130 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __TIMMOBILITYTESTMTMSTATE_H__ +#define __TIMMOBILITYTESTMTMSTATE_H__ + +/** +Defines the set of states where the MTM will make a call into the test +framework to see whether some mobility action should be performed. + +Note that if you add to this, you also need to add to the lists which +are found in .... +*/ +enum TImMobilityTestMtmState + { + KMobilityTestMtmStateNone, + KMobilityTestMtmStateInitialReject, + + // IMAP MTM states + KMobilityTestMtmStateImapConnect, + KMobilityTestMtmStateImapIdle, // this is the first IDLE call after bg sync completes + + KMobilityTestMtmStateImapCopyFromLocal1, // APPEND message + KMobilityTestMtmStateImapCopyFromLocal2, // SELECT destination folder + KMobilityTestMtmStateImapCopyFromLocal3, // sync'ing destination folder + + KMobilityTestMtmStateImapCopyToLocal1, // SELECT source folder + KMobilityTestMtmStateImapCopyToLocal2, // FETCHing the message + KMobilityTestMtmStateImapCopyToLocal3, // local async copy + KMobilityTestMtmStateImapCopyToLocal4, //(10) STORE /deleted flag (move only) + KMobilityTestMtmStateImapCopyToLocal5, // EXPUNGE (move only) + KMobilityTestMtmStateImapCopyToLocal6, // CLOSE FOLDER (move only) + KMobilityTestMtmStateImapCopyToLocal7, // SELECT FOLDER (move only) + + KMobilityTestMtmStateImapCopyWithinService1,// SELECT source mailbox + KMobilityTestMtmStateImapCopyWithinService2,// COPY message(s) + KMobilityTestMtmStateImapCopyWithinService3,// STORE /deleted flag (move only) + KMobilityTestMtmStateImapCopyWithinService4,// EXPUNGE source folder (move only) + KMobilityTestMtmStateImapCopyWithinService5,// SELECT destination folder + KMobilityTestMtmStateImapCopyWithinService6,// sync'ing destination folder + KMobilityTestMtmStateImapCopyWithinService7,//(20) CLOSE folder to delete messages + KMobilityTestMtmStateImapCopyWithinService8,// SELECT folder after close to delete messages + + KMobilityTestMtmStateImapCreateFolder, // CREATE command issued + + KMobilityTestMtmStateImapDelete1, // SELECT source folder + KMobilityTestMtmStateImapDelete2, // STORE /deleted command + KMobilityTestMtmStateImapDelete3, // EXPUNGE following a delete + KMobilityTestMtmStateImapDelete4, // CLOSE FOLDER following a delete + KMobilityTestMtmStateImapDelete5, // SELECT FOLDER following close to delete + + KMobilityTestMtmStateImapDeleteFolder1, // SELECT source folder + KMobilityTestMtmStateImapDeleteFolder2, // STORE /deleted (all messages) + KMobilityTestMtmStateImapDeleteFolder3, //(30) CLOSE folder + KMobilityTestMtmStateImapDeleteFolder4, // DELETE folder + + KMobilityTestMtmStateImapDisconnect1, // sync'ing late deletes + KMobilityTestMtmStateImapDisconnect2, // LOGOUT etc + + KMobilityTestMtmStateImapRename1, // RENAME issued + KMobilityTestMtmStateImapRename2, // SUBSCRIBE issued + + KMobilityTestMtmStateImapSyncFolder1, // SELECT issued + KMobilityTestMtmStateImapSyncFolder2, // sync'ing the folder + + KMobilityTestMtmStateImapSyncFolderTree, // sync'ing the folder tree + + KMobilityTestMtmImapSyncEInboxEarlyDeletes, + KMobilityTestMtmImapSyncEInboxEarlyExpunge, //(40) + KMobilityTestMtmImapSyncEInboxSync, + KMobilityTestMtmImapSyncESyncTree, + KMobilityTestMtmImapSyncESyncSubscriptions, + KMobilityTestMtmImapSyncEFolderEarlyDeletes, + KMobilityTestMtmImapSyncEFolderEarlyExpunge, + KMobilityTestMtmImapSyncESyncFolder, + KMobilityTestMtmImapEInboxLateDeletes, + KMobilityTestMtmImapSyncEFolderLateDeletes, + KMobilityTestMtmImapSyncEFolderLateExpunge, + + // POP MTM states + KMobilityTestMtmStatePopConnecting = 300, + KMobilityTestMtmStatePopRefreshing, + KMobilityTestMtmStatePopTidying, + KMobilityTestMtmStatePopFindingFirstOfflineOp, + KMobilityTestMtmStatePopCancellingOfflineOps, + KMobilityTestMtmStatePopCopying, + KMobilityTestMtmStatePopMoving, + KMobilityTestMtmStatePopPopulating, + KMobilityTestMtmStatePopTopPopulating, + KMobilityTestMtmStatePopDeleting, + KMobilityTestMtmStatePopConnectedAndIdle, + KMobilityTestMtmStatePopQuitting, + KMobilityTestMtmStatePopRetrieving, + + //SMTP MTM states + KMobilityTestMtmStateSmtpConnectingToSmtp = 500, + KMobilityTestMtmStateSmtpWaitingForReply, + KMobilityTestMtmStateSmtpAuthorisingSmtp, + KMobilityTestMtmStateSmtpAuthInProgress, + KMobilityTestMtmStateSmtpSendingStartTls, + KMobilityTestMtmStateSmtpSettingSecurity, + KMobilityTestMtmStateSmtpResetSmtp, + KMobilityTestMtmStateSmtpClosingSmtp, + KMobilityTestMtmStateSmtpSendFile + + // Do not put any values at 1000 or above as this range is used + // elsewhere in the test framework + }; + +#endif //__TIMMOBILITYTESTMTMSTATE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/tmobilitytestpropertymapaccess.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/tmobilitytestpropertymapaccess.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,37 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __TMOBILITYTESTPROPERTYMAPACCESS_H__ +#define __TMOBILITYTESTPROPERTYMAPACCESS_H__ + +#include +#include "tmsgtestpropertymapentry.h" + +class TMobilityTestPropertyMapAccess + { +public: + IMPORT_C static const TMsgTestPropertyMapEntry* Get(TDesC* aName); + IMPORT_C static const TMsgTestPropertyMapEntry* Get(TInt aValue); + }; + +#endif //__TMOBILITYTESTPROPERTYMAP_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/inc/tmsgtestpropertymapentry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/inc/tmsgtestpropertymapentry.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,35 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef __TMSGTESTPROPERTYMAPENTRY_H__ +#define __TMSGTESTPROPERTYMAPENTRY_H__ + +#include + +struct TMsgTestPropertyMapEntry + { + const char* name; + TInt value; + }; + +#endif //__TMSGTESTPROPERTYMAPENTRY_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/cimmobilitytestframework.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/cimmobilitytestframework.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,176 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "cimmobilitytestframework.h" +#include "cimmobilitytesttls.h" +#include "cimmobilitymanager.h" +#include "cmsgtestpropertywatcher.h" +#include "mobilitytestpropertyvalue.h" + +/** +Creates a test framework. +Static method. + +@param aServiceId Service ID of associated MTM +@param aMobilityManager Associated mobility manager +*/ +EXPORT_C void CImMobilityTestFramework::Create(TMsvId aServiceId, CImMobilityManager& aMobilityManager) + { + TRAP_IGNORE(NewL(aServiceId, aMobilityManager)); + } + +/** +Deletes a test framework. +Static method. + +@param aMobilityManager Associated mobility manager +*/ +EXPORT_C void CImMobilityTestFramework::Delete(CImMobilityManager& aMobilityManager) + { + CImMobilityTestTls* testTls = static_cast(Dll::Tls()); + + if (testTls) + { + TBool lastOne = EFalse; + CImMobilityTestFramework* framework = testTls->RemoveFramework(aMobilityManager, lastOne); + + if (framework) + { + delete framework; + } + + if (lastOne) + { + delete testTls; + } + } + } + +/** +Called by an MTM when it reaches a specific operation state. +Static method. + +@param aServiceId Service ID of MTM +@param aMtmState MTM state +*/ +EXPORT_C void CImMobilityTestFramework::MtmState(TMsvId aServiceId, TImMobilityTestMtmState aMtmState) + { + CImMobilityTestTls* testTls = static_cast(Dll::Tls()); + + if (testTls) + { + CImMobilityTestFramework* framework = testTls->GetFramework(aServiceId); + if (framework) + { + // Flag the call + RProperty& property = framework->iPropertyWatcher->Property(); + property.Set(aMtmState); + } + } + } + +/** +Called by the net test stub to determine the service id. +Static method. + +@param aProtocol reference to MMobilityProtocolResp +*/ +EXPORT_C TMsvId CImMobilityTestFramework::GetServiceId(MMobilityProtocolResp& aProtocol) + { + CImMobilityTestTls* testTls = static_cast(Dll::Tls()); + + if (testTls) + { + CImMobilityTestFramework* framework = testTls->GetFramework(aProtocol); + if (framework) + { + return framework->ServiceId(); + } + } + + return KErrNotFound; + } + +/** +Factory constructor. +Static method. + +@param aServiceId Service ID of associated MTM +@param aMobilityManager Associated mobility manager +*/ +void CImMobilityTestFramework::NewL(TMsvId aServiceId, CImMobilityManager& aMobilityManager) + { + CImMobilityTestTls* testTls = CImMobilityTestTls::NewL(); + + CImMobilityTestFramework* self = new (ELeave) CImMobilityTestFramework(aServiceId, aMobilityManager); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + // Store framework. Ownership is passed. + testTls->AddFrameworkL(*self); + } + +/** +Class constructor. + +@param aServiceId Service ID of associated MTM +@param aMobilityManager Associated mobility manager +*/ +CImMobilityTestFramework::CImMobilityTestFramework(TMsvId aServiceId, CImMobilityManager& aMobilityManager) : + iMobilityManager(aMobilityManager), + iServiceId(aServiceId) + { + } + +/** +Second phase constructor +*/ +void CImMobilityTestFramework::ConstructL() + { + iPropertyWatcher = CMsgTestPropertyWatcher::NewL(KPropertyCatMsgTestUtilityServer2, EMyPropertyCounter, *this); + } + +/** +Class destructor +*/ +CImMobilityTestFramework::~CImMobilityTestFramework() + { + delete iPropertyWatcher; + } + +/** +Returns service ID of associated MTM + +@return Service ID of MTM +*/ +TMsvId CImMobilityTestFramework::ServiceId() + { + return iServiceId; + } + +/** +Returns associated mobility maanger + +@return Mobility manager +*/ +CImMobilityManager& CImMobilityTestFramework::MobilityManager() + { + return iMobilityManager; + } + +void CImMobilityTestFramework::HandleEventL(RProperty& /*aProperty*/, TUint /*aKey*/) + { + //Don't need to respond to events here. + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/cimmobilitytesttls.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/cimmobilitytesttls.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,165 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "cimmobilitytesttls.h" +#include "cimmobilitytestframework.h" +#include "cimmobilitymanager.h" + +/** +Factory constructor +Static routine + +@return Constructed class +*/ +CImMobilityTestTls* CImMobilityTestTls::NewL() + { + CImMobilityTestTls* self = static_cast(Dll::Tls()); + + if (!self) + { + self = new (ELeave) CImMobilityTestTls(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + Dll::SetTls(self); + } + + return self; + } + +/** +Class constructor +*/ +CImMobilityTestTls::CImMobilityTestTls() + { + } + +/** +Second phase constructor +*/ +void CImMobilityTestTls::ConstructL() + { + } + +/** +Class destructor +*/ +CImMobilityTestTls::~CImMobilityTestTls() + { + iFrameworkList.Reset(); + + Dll::SetTls(NULL); + } + +/** +Stores a test framework. Takes ownership of the framework. + +@param aFramework Test framework +*/ +void CImMobilityTestTls::AddFrameworkL(CImMobilityTestFramework& aFramework) + { + iFrameworkList.AppendL(&aFramework); + } + +/** +Removes a test framework from the list of frameworks and passes it back +to the caller. The caller takes ownership of the framework. + +@param aMobilityManager Mobility manager associated with framework +@param aLastOne Last framework has now been removed +@return Test framework +*/ +CImMobilityTestFramework* CImMobilityTestTls::RemoveFramework(CImMobilityManager& aMobilityManager, TBool& aLastOne) + { + CImMobilityTestFramework* framework = NULL; + aLastOne = EFalse; + + for (TInt count = 0; count < iFrameworkList.Count(); ++count) + { + if (&(iFrameworkList[count]->MobilityManager()) == &aMobilityManager) + { + framework = iFrameworkList[count]; + iFrameworkList.Remove(count); + if (iFrameworkList.Count() == 0) + { + aLastOne = ETrue; + } + break; + } + } + + return framework; + } + +/** +Gets a test framework from the list of frameworks. + +@param aServiceId Service ID used as search key +@return Test framework +*/ +CImMobilityTestFramework* CImMobilityTestTls::GetFramework(TMsvId aServiceId) + { + for (TInt count = 0; count < iFrameworkList.Count(); ++count) + { + if (iFrameworkList[count]->ServiceId() == aServiceId) + { + return iFrameworkList[count]; + } + } + + return NULL; + } + +/** +Gets a test framework from the list of frameworks. + +@param aMobilityManager Mobility manager used as search key +@return Test framework +*/ +CImMobilityTestFramework* CImMobilityTestTls::GetFramework(CImMobilityManager& aMobilityManager) + { + for (TInt count = 0; count < iFrameworkList.Count(); ++count) + { + if (&(iFrameworkList[count]->MobilityManager()) == &aMobilityManager) + { + return iFrameworkList[count]; + } + } + + return NULL; + } + +/** +Gets a test framework from the list of frameworks. + +@param aProtocol MMobilityProtocolResp& used as search key +@return Test framework +*/ +CImMobilityTestFramework* CImMobilityTestTls::GetFramework(MMobilityProtocolResp& aProtocol) + { + for (TInt count = 0; count < iFrameworkList.Count(); ++count) + { + CImMobilityManager* man = &(iFrameworkList[count]->MobilityManager()); + + MMobilityProtocolResp* prot = static_cast(man); + + if (prot == &aProtocol) + { + return iFrameworkList[count]; + } + } + + return NULL; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/cmsgtestpropertymappair.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/cmsgtestpropertymappair.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,27 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "cmsgtestpropertymappair.h" + +/** +Class constructor + +@param aFlag Flag value +@param aCall Call value +*/ +EXPORT_C CMsgTestPropertyMapPair::CMsgTestPropertyMapPair(TMsgTestPropertyMapEntry* aFlag, TMsgTestPropertyMapEntry* aCall) +: flag(aFlag), call(aCall) + { + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/cmsgtestpropertywatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/cmsgtestpropertywatcher.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,72 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include "mmsgtestpropertywatcher.h" +#include "cmsgtestpropertywatcher.h" + +static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy); + +EXPORT_C CMsgTestPropertyWatcher* CMsgTestPropertyWatcher::NewL(TUid aCategory, TUint aKey, MMsgTestPropertyWatcher& aCallback) + { + CMsgTestPropertyWatcher* self=new(ELeave) CMsgTestPropertyWatcher(); + CleanupStack::PushL(self); + self->ConstructL(aCategory, aKey, aCallback); + CleanupStack::Pop(self); + return self; + } + +CMsgTestPropertyWatcher::CMsgTestPropertyWatcher() + :CActive(EPriorityHigh) + {} + +void CMsgTestPropertyWatcher::ConstructL(TUid aCategory, TUint aKey, MMsgTestPropertyWatcher& aCallback) + { + iCategory = aCategory; + iKey = aKey; + iCallback = &aCallback; + + User::LeaveIfError(iProperty.Attach(aCategory,aKey)); + CActiveScheduler::Add(this); + + // initial subscription + iProperty.Subscribe(iStatus); + SetActive(); + } + +EXPORT_C CMsgTestPropertyWatcher::~CMsgTestPropertyWatcher() + { + Cancel(); + iProperty.Close(); + } + +void CMsgTestPropertyWatcher::DoCancel() + { + iProperty.Cancel(); + } + +void CMsgTestPropertyWatcher::RunL() + { + // re-subscribe before processing new value to prevent missing updates + iProperty.Subscribe(iStatus); + SetActive(); + + iCallback->HandleEventL(iProperty, iKey); + } + +EXPORT_C RProperty& CMsgTestPropertyWatcher::Property() + { + return iProperty; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/msgnetteststub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/msgnetteststub.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,136 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// MSGMSGNETTESTSTUB.CPP +// +// + +#define LOCAL_INCLUDE +#include "msgnetteststub.h" +#undef LOCAL_INCLUDE +#include "cmsgtestpropertywatcher.h" +#include "cimmobilitytestframework.h" +#include "mobilitytestpropertyvalue.h" + +EXPORT_C MSGNETTESTSTUB::CActiveCommsMobilityApiExt* MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewL(RCommsSubSession& aExtensionProvider,MMobilityProtocolResp& aProtocol) +{ + CActiveCommsMobilityApiExt* self = new (ELeave) CActiveCommsMobilityApiExt(aExtensionProvider, aProtocol); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::ConstructL() +{ + iCommsMobilityApi = NULL; + //Try to construct the real thing, but trap the 'not supported' error: +// TRAPD(err, iCommsMobilityApi = ::CActiveCommsMobilityApiExt::NewL(aExtensionProvider, *this)); + + iPropertyWatcher = CMsgTestPropertyWatcher::NewL(KPropertyCatMsgTestUtilityServer2, EMyPropertyCounter, *this); + + iServiceId = CImMobilityTestFramework::GetServiceId(iProtocol); + User::LeaveIfError(iServiceId); +} + +MSGNETTESTSTUB::CActiveCommsMobilityApiExt::CActiveCommsMobilityApiExt(RCommsSubSession& aExtensionProvider, MMobilityProtocolResp& aProtocol) +: iCommsSubSession(aExtensionProvider), iProtocol(aProtocol) +{ +} + +EXPORT_C MSGNETTESTSTUB::CActiveCommsMobilityApiExt::~CActiveCommsMobilityApiExt() +{ + delete iCommsMobilityApi; + delete iPropertyWatcher; +} + +EXPORT_C void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::MigrateToPreferredCarrier() +{ +// Flag the call iCommsMobilityApi->MigrateToPreferredCarrier(); + iPropertyWatcher->Property().Set(ENTSMigrateToPreferredCarrierFlag); +} + +EXPORT_C void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::IgnorePreferredCarrier() +{ +// Flag the call iCommsMobilityApi->IgnorePreferredCarrier(); + iPropertyWatcher->Property().Set(ENTSIgnorePreferredCarrierFlag); +} + +EXPORT_C void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewCarrierAccepted() +{ +// Flag the call iCommsMobilityApi->NewCarrierAccepted(); + iPropertyWatcher->Property().Set(ENTSNewCarrierAcceptedFlag); +} + +EXPORT_C void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewCarrierRejected() +{ +// Flag the call iCommsMobilityApi->NewCarrierRejected(); + iPropertyWatcher->Property().Set(ENTSNewCarrierRejectedFlag); +} + +//Additional functionality: + +// from MMobilityProtocolResp +void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::PreferredCarrierAvailable(TAccessPointInfo aOldAp, TAccessPointInfo aNewAp, TBool aIsUpgrade, TBool aIsSeamless) +{ + iProtocol.PreferredCarrierAvailable(aOldAp, aNewAp, aIsUpgrade, aIsSeamless); +} + +void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::NewCarrierActive(TAccessPointInfo aNewAp, TBool aIsSeamless) +{ + iProtocol.NewCarrierActive(aNewAp, aIsSeamless); +} + +void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::Error(TInt aError) +{ + iProtocol.Error(aError); +} + +// from CMsgTestPropertyWatcher +void MSGNETTESTSTUB::CActiveCommsMobilityApiExt::HandleEventL(RProperty& aProperty, TUint /*aKey*/) + { + + TInt propertyVal = ENTSInitialValueFlag; + User::LeaveIfError(aProperty.Get(propertyVal)); + + TAccessPointInfo oldAp; + TAccessPointInfo newAp; + oldAp.SetAccessPoint(1); + newAp.SetAccessPoint(1); + + TBool isSeamless = EFalse; + + TInt error = 0; + + switch(propertyVal) + { + // Callbacks to production code: + case ENTSPreferredCarrierUpgradeCall : + PreferredCarrierAvailable(oldAp, newAp, ETrue, isSeamless); + break; + case ENTSPreferredCarrierDowngradeCall : + PreferredCarrierAvailable(oldAp, newAp, EFalse, isSeamless); + break; + case ENTSNewCarrierActiveCall : + NewCarrierActive(newAp, isSeamless); + break; + case ENTSErrorCall : + MSGNETTESTSTUB::CActiveCommsMobilityApiExt::Error(error); + break; + + // Ignore any other calls + default : + break; + } + + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/mobilitytestframework/src/tmobilitytestpropertymapaccess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/mobilitytestframework/src/tmobilitytestpropertymapaccess.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,56 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "tmobilitytestpropertymapaccess.h" +#include "mobilitytestpropertymap.h" + +EXPORT_C const TMsgTestPropertyMapEntry* TMobilityTestPropertyMapAccess::Get(TDesC* aName) + { + TInt i=0; + + while (propertyMapList[i].value != 0xffffffff) + { + TBufC8<80> buf8((const unsigned char*)(propertyMapList[i].name)); + + TBuf<80> buf; + buf.Copy(buf8); + + if (aName->CompareF(buf) == 0) + { + return &propertyMapList[i]; + } + + ++i; + } + + return NULL; + } + +EXPORT_C const TMsgTestPropertyMapEntry* TMobilityTestPropertyMapAccess::Get(TInt aValue) + { + TInt i=0; + + while (propertyMapList[i].value != 0xFFFFFFFF) + { + if (propertyMapList[i].value == aValue) + { + return &propertyMapList[i]; + } + + ++i; + } + + return NULL; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/bwins/T_MsgUtilityServerU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/bwins/T_MsgUtilityServerU.DEF Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,72 @@ +EXPORTS + ??0CT_MsgUtils@@QAE@XZ @ 1 NONAME ; CT_MsgUtils::CT_MsgUtils(void) + ??0CT_MsgUtilsCentralRepository@@QAE@XZ @ 2 NONAME ; CT_MsgUtilsCentralRepository::CT_MsgUtilsCentralRepository(void) + ??0CT_MsgUtilsConfigFileMachineName@@AAE@XZ @ 3 NONAME ; CT_MsgUtilsConfigFileMachineName::CT_MsgUtilsConfigFileMachineName(void) + ??0CT_MsgUtilsConfigFileParserUtility@@AAE@XZ @ 4 NONAME ; CT_MsgUtilsConfigFileParserUtility::CT_MsgUtilsConfigFileParserUtility(void) + ??0CT_MsgUtilsDeleteAllChildren@@QAE@PAVCMsvSession@@J@Z @ 5 NONAME ; CT_MsgUtilsDeleteAllChildren::CT_MsgUtilsDeleteAllChildren(class CMsvSession *, long) + ??0CT_MsgUtilsEnumConverter@@QAE@XZ @ 6 NONAME ; CT_MsgUtilsEnumConverter::CT_MsgUtilsEnumConverter(void) + ?After@CT_MsgTimerUtils@@QAEXHAAVTRequestStatus@@@Z @ 7 NONAME ; void CT_MsgTimerUtils::After(int, class TRequestStatus &) + ?CloseResourceFile@CT_MsgUtils@@SAXPAX@Z @ 8 NONAME ; void CT_MsgUtils::CloseResourceFile(void *) + ?CompareFilesL@CT_MsgUtils@@SAHVTPtrC16@@0HPAV?$CArrayFixFlat@G@@AAH@Z @ 9 NONAME ; int CT_MsgUtils::CompareFilesL(class TPtrC16, class TPtrC16, int, class CArrayFixFlat *, int &) + ?CompareIapPrefs@CT_MsgUtilsReadEmailSettingsFromConfigFile@@SAHAAVCImIAPPreferences@@0@Z @ 10 NONAME ; int CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(class CImIAPPreferences &, class CImIAPPreferences &) + ?ConstructL@CT_MsgUtilsConfigFileMachineName@@AAEXABVTDesC16@@@Z @ 11 NONAME ; void CT_MsgUtilsConfigFileMachineName::ConstructL(class TDesC16 const &) + ?ConstructL@CT_MsgUtilsConfigFileParserUtility@@AAEXABVTDesC16@@@Z @ 12 NONAME ; void CT_MsgUtilsConfigFileParserUtility::ConstructL(class TDesC16 const &) + ?ConvertDesToTCommDbDialogPref@CT_MsgUtilsEnumConverter@@SA?AW4TCommDbDialogPref@@AAVTDesC16@@@Z @ 13 NONAME ; enum TCommDbDialogPref CT_MsgUtilsEnumConverter::ConvertDesToTCommDbDialogPref(class TDesC16 &) + ?ConvertDesToTFolderSubscribeType@CT_MsgUtilsEnumConverter@@SA?AW4TFolderSubscribeType@@AAVTDesC16@@@Z @ 14 NONAME ; enum TFolderSubscribeType CT_MsgUtilsEnumConverter::ConvertDesToTFolderSubscribeType(class TDesC16 &) + ?ConvertDesToTFolderSyncType@CT_MsgUtilsEnumConverter@@SA?AW4TFolderSyncType@@AAVTDesC16@@@Z @ 15 NONAME ; enum TFolderSyncType CT_MsgUtilsEnumConverter::ConvertDesToTFolderSyncType(class TDesC16 &) + ?ConvertDesToTImImap4PartialMailOptions@CT_MsgUtilsEnumConverter@@SA?AW4TImImap4PartialMailOptions@@AAVTDesC16@@@Z @ 16 NONAME ; enum TImImap4PartialMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTImImap4PartialMailOptions(class TDesC16 &) + ?ConvertDesToTImSMTPSendCopyToSelf@CT_MsgUtilsEnumConverter@@SA?AW4TImSMTPSendCopyToSelf@@AAVTDesC16@@@Z @ 17 NONAME ; enum TImSMTPSendCopyToSelf CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendCopyToSelf(class TDesC16 &) + ?ConvertDesToTImSMTPSendMessageOption@CT_MsgUtilsEnumConverter@@SA?AW4TImSMTPSendMessageOption@@AAVTDesC16@@@Z @ 18 NONAME ; enum TImSMTPSendMessageOption CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendMessageOption(class TDesC16 &) + ?ConvertDesToTImap4Cmds@CT_MsgUtilsEnumConverter@@SA?AW4TImap4Cmds@@AAVTDesC16@@@Z @ 19 NONAME ; enum TImap4Cmds CT_MsgUtilsEnumConverter::ConvertDesToTImap4Cmds(class TDesC16 &) + ?ConvertDesToTImap4GetMailOptions@CT_MsgUtilsEnumConverter@@SA?AW4TImap4GetMailOptions@@AAVTDesC16@@@Z @ 20 NONAME ; enum TImap4GetMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTImap4GetMailOptions(class TDesC16 &) + ?ConvertDesToTMsgOutboxBodyEncoding@CT_MsgUtilsEnumConverter@@SA?AW4TMsgOutboxBodyEncoding@@AAVTDesC16@@@Z @ 21 NONAME ; enum TMsgOutboxBodyEncoding CT_MsgUtilsEnumConverter::ConvertDesToTMsgOutboxBodyEncoding(class TDesC16 &) + ?ConvertDesToTPop3Cmds@CT_MsgUtilsEnumConverter@@SA?AW4TPop3Cmds@@ABVTDesC16@@@Z @ 22 NONAME ; enum TPop3Cmds CT_MsgUtilsEnumConverter::ConvertDesToTPop3Cmds(class TDesC16 const &) + ?ConvertDesToTPop3GetMailOptions@CT_MsgUtilsEnumConverter@@SA?AW4TPop3GetMailOptions@@AAVTDesC16@@@Z @ 23 NONAME ; enum TPop3GetMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTPop3GetMailOptions(class TDesC16 &) + ?CreateChildrenSelectionL@CT_MsgUtils@@SAPAVCMsvEntrySelection@@PAVCMsvSession@@J@Z @ 24 NONAME ; class CMsvEntrySelection * CT_MsgUtils::CreateChildrenSelectionL(class CMsvSession *, long) + ?CreateChildrenSelectionRemoteFolderL@CT_MsgUtils@@SAPAVCMsvEntrySelection@@PAVCMsvSession@@VTPtrC16@@1@Z @ 25 NONAME ; class CMsvEntrySelection * CT_MsgUtils::CreateChildrenSelectionRemoteFolderL(class CMsvSession *, class TPtrC16, class TPtrC16) + ?CreateChildrenSelectionRemoteFolderWithTypeL@CT_MsgUtils@@SAPAVCMsvEntrySelection@@PAVCMsvSession@@VTPtrC16@@1VTUid@@@Z @ 26 NONAME ; class CMsvEntrySelection * CT_MsgUtils::CreateChildrenSelectionRemoteFolderWithTypeL(class CMsvSession *, class TPtrC16, class TPtrC16, class TUid) + ?CreateChildrenSelectionWithTypeL@CT_MsgUtils@@SAPAVCMsvEntrySelection@@PAVCMsvSession@@JVTUid@@@Z @ 27 NONAME ; class CMsvEntrySelection * CT_MsgUtils::CreateChildrenSelectionWithTypeL(class CMsvSession *, long, class TUid) + ?FinalProgressStatus@CT_MsgUtilsDeleteAllChildren@@QAEHAAVCMsvOperation@@ABVTRequestStatus@@@Z @ 28 NONAME ; int CT_MsgUtilsDeleteAllChildren::FinalProgressStatus(class CMsvOperation &, class TRequestStatus const &) + ?FindEntryByNameL@CT_MsgUtils@@SAJPAVCMsvEntry@@AAVTDesC16@@1H@Z @ 29 NONAME ; long CT_MsgUtils::FindEntryByNameL(class CMsvEntry *, class TDesC16 &, class TDesC16 &, int) + ?FindEntryByNameL@CT_MsgUtils@@SAJPAVCMsvEntry@@AAVTDesC16@@H@Z @ 30 NONAME ; long CT_MsgUtils::FindEntryByNameL(class CMsvEntry *, class TDesC16 &, int) + ?FindEntryByNameL@CT_MsgUtils@@SAJPAVCMsvSession@@JAAVTDesC16@@1H@Z @ 31 NONAME ; long CT_MsgUtils::FindEntryByNameL(class CMsvSession *, long, class TDesC16 &, class TDesC16 &, int) + ?FindEntryByNameL@CT_MsgUtils@@SAJPAVCMsvSession@@JAAVTDesC16@@H@Z @ 32 NONAME ; long CT_MsgUtils::FindEntryByNameL(class CMsvSession *, long, class TDesC16 &, int) + ?FindFolderIdByName@CT_MsgUtilsEnumConverter@@SAJAAVTDesC16@@@Z @ 33 NONAME ; long CT_MsgUtilsEnumConverter::FindFolderIdByName(class TDesC16 &) + ?GetDefaultSmtpServiceIdL@CT_MsgUtilsCentralRepository@@SAJXZ @ 34 NONAME ; long CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL(void) + ?GetFieldAsInteger@CT_MsgUtilsConfigFileParserUtility@@QAEHABVTDesC16@@AAH@Z @ 35 NONAME ; int CT_MsgUtilsConfigFileParserUtility::GetFieldAsInteger(class TDesC16 const &, int &) + ?GetFieldAsString8@CT_MsgUtilsConfigFileParserUtility@@QAEHABVTDesC16@@AAVTPtrC8@@@Z @ 36 NONAME ; int CT_MsgUtilsConfigFileParserUtility::GetFieldAsString8(class TDesC16 const &, class TPtrC8 &) + ?GetFieldAsString@CT_MsgUtilsConfigFileParserUtility@@QAEHABVTDesC16@@AAVTPtrC16@@@Z @ 37 NONAME ; int CT_MsgUtilsConfigFileParserUtility::GetFieldAsString(class TDesC16 const &, class TPtrC16 &) + ?GetImapAccountL@CT_MsgUtilsCentralRepository@@SAHAAVTDes16@@AAVTImapAccount@@@Z @ 38 NONAME ; int CT_MsgUtilsCentralRepository::GetImapAccountL(class TDes16 &, class TImapAccount &) + ?GetImapServiceIdL@CT_MsgUtilsCentralRepository@@SAJAAVTDes16@@@Z @ 39 NONAME ; long CT_MsgUtilsCentralRepository::GetImapServiceIdL(class TDes16 &) + ?GetPopAccountL@CT_MsgUtilsCentralRepository@@SAHAAVTDes16@@AAVTPopAccount@@@Z @ 40 NONAME ; int CT_MsgUtilsCentralRepository::GetPopAccountL(class TDes16 &, class TPopAccount &) + ?GetPopServiceIdL@CT_MsgUtilsCentralRepository@@SAJAAVTDes16@@@Z @ 41 NONAME ; long CT_MsgUtilsCentralRepository::GetPopServiceIdL(class TDes16 &) + ?GetRemoteFolderIdByNameL@CT_MsgUtils@@SAJPAVCMsvSession@@VTPtrC16@@11H@Z @ 42 NONAME ; long CT_MsgUtils::GetRemoteFolderIdByNameL(class CMsvSession *, class TPtrC16, class TPtrC16, class TPtrC16, int) + ?GetRemoteFolderIdByNameL@CT_MsgUtils@@SAJPAVCMsvSession@@VTPtrC16@@1H@Z @ 43 NONAME ; long CT_MsgUtils::GetRemoteFolderIdByNameL(class CMsvSession *, class TPtrC16, class TPtrC16, int) + ?GetString@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAHAAVTDesC16@@AAHHAAVTPtrC16@@@Z @ 44 NONAME ; int CT_MsgUtilsReadEmailSettingsFromConfigFile::GetString(class TDesC16 &, int &, int, class TPtrC16 &) + ?MachineName@CT_MsgUtilsConfigFileMachineName@@QAEABVTDesC8@@XZ @ 45 NONAME ; class TDesC8 const & CT_MsgUtilsConfigFileMachineName::MachineName(void) + ?MachineNameEmail@CT_MsgUtilsConfigFileMachineName@@QAEABVTDesC16@@XZ @ 46 NONAME ; class TDesC16 const & CT_MsgUtilsConfigFileMachineName::MachineNameEmail(void) + ?NewL@CT_MsgTimerUtils@@SAPAV1@XZ @ 47 NONAME ; class CT_MsgTimerUtils * CT_MsgTimerUtils::NewL(void) + ?NewL@CT_MsgUtilsConfigFileMachineName@@SAPAV1@ABVTDesC16@@@Z @ 48 NONAME ; class CT_MsgUtilsConfigFileMachineName * CT_MsgUtilsConfigFileMachineName::NewL(class TDesC16 const &) + ?NewL@CT_MsgUtilsConfigFileParserUtility@@SAPAV1@ABVTDesC16@@@Z @ 49 NONAME ; class CT_MsgUtilsConfigFileParserUtility * CT_MsgUtilsConfigFileParserUtility::NewL(class TDesC16 const &) + ?NewLC@CT_MsgUtilsConfigFileMachineName@@SAPAV1@ABVTDesC16@@@Z @ 50 NONAME ; class CT_MsgUtilsConfigFileMachineName * CT_MsgUtilsConfigFileMachineName::NewLC(class TDesC16 const &) + ?OpenResourceFileL@CT_MsgUtils@@SAXAAVRResourceFile@@AAVRFs@@ABVTDesC16@@@Z @ 51 NONAME ; void CT_MsgUtils::OpenResourceFileL(class RResourceFile &, class RFs &, class TDesC16 const &) + ?ReadDataL@CT_MsgUtils@@SAHAAVRFileReadStream@@AAVTPtr16@@HPAV?$CArrayFixFlat@G@@@Z @ 52 NONAME ; int CT_MsgUtils::ReadDataL(class RFileReadStream &, class TPtr16 &, int, class CArrayFixFlat *) + ?ReadImapIAPAndAddFieldL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 53 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapIAPAndAddFieldL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadImapIAPAndAddL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 54 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapIAPAndAddL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadImapSettingsFromConfigurationFileL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@SAXAAVTDesC16@@AAVCImImap4Settings@@AAVCImIAPPreferences@@ABV2@@Z @ 55 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapSettingsFromConfigurationFileL(class TDesC16 &, class CImImap4Settings &, class CImIAPPreferences &, class TDesC16 const &) + ?ReadPopIAPAndAddFieldL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 56 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopIAPAndAddFieldL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadPopIAPAndAddL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 57 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopIAPAndAddL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadPopSettingsFromConfigurationFileL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@SAXAAVTDesC16@@AAVCImPop3Settings@@AAVCImIAPPreferences@@ABV2@@Z @ 58 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(class TDesC16 &, class CImPop3Settings &, class CImIAPPreferences &, class TDesC16 const &) + ?ReadSmtpIAPAndAddFieldL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 59 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpIAPAndAddFieldL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadSmtpIAPAndAddL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@CAXPAVCT_MsgUtilsConfigFileParserUtility@@ABVTDesC16@@AAVCImIAPPreferences@@@Z @ 60 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpIAPAndAddL(class CT_MsgUtilsConfigFileParserUtility *, class TDesC16 const &, class CImIAPPreferences &) + ?ReadSmtpSettingsFromConfigurationFileL@CT_MsgUtilsReadEmailSettingsFromConfigFile@@SAXAAVTDesC16@@AAVCImSmtpSettings@@AAVCImIAPPreferences@@ABV2@@Z @ 61 NONAME ; void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(class TDesC16 &, class CImSmtpSettings &, class CImIAPPreferences &, class TDesC16 const &) + ?SearchMessageBySubjectL@CT_MsgUtils@@SAJPAVCMsvSession@@JVTPtrC16@@@Z @ 62 NONAME ; long CT_MsgUtils::SearchMessageBySubjectL(class CMsvSession *, long, class TPtrC16) + ?StartL@CT_MsgUtilsDeleteAllChildren@@QAEXAAVTRequestStatus@@@Z @ 63 NONAME ; void CT_MsgUtilsDeleteAllChildren::StartL(class TRequestStatus &) + ?ConvertDesToEventCode@CT_MsgUtilsEnumConverter@@SA?AW4TInstrumentationPoint@@AAVTDesC16@@@Z @ 64 NONAME ; enum TInstrumentationPoint CT_MsgUtilsEnumConverter::ConvertDesToEventCode(class TDesC16 &) + ?ConvertDesToTSmtpCmdsL@CT_MsgUtilsEnumConverter@@SA?AW4TSmtpCmds@@AAVTDesC16@@@Z @ 65 NONAME ; enum TSmtpCmds CT_MsgUtilsEnumConverter::ConvertDesToTSmtpCmdsL(class TDesC16 &) + ?SearchMessageBySubjectL@CT_MsgUtils@@SAJPAVCMsvSession@@JVTPtrC16@@H@Z @ 66 NONAME ; long CT_MsgUtils::SearchMessageBySubjectL(class CMsvSession *, long, class TPtrC16, int) + ?ConvertDesToBearerTypes@CT_MsgUtilsEnumConverter@@SAKABVTDesC16@@@Z @ 67 NONAME ; unsigned long CT_MsgUtilsEnumConverter::ConvertDesToBearerTypes(class TDesC16 const &) + ?GetSmtpAccountL@CT_MsgUtilsCentralRepository@@SAHAAVTDes16@@AAVTSmtpAccount@@@Z @ 68 NONAME ; int CT_MsgUtilsCentralRepository::GetSmtpAccountL(class TDes16 &, class TSmtpAccount &) + ?GetSmtpServiceIdL@CT_MsgUtilsCentralRepository@@SAJAAVTDes16@@@Z @ 69 NONAME ; long CT_MsgUtilsCentralRepository::GetSmtpServiceIdL(class TDes16 &) + ?StartL@CT_MsgUtilsDeleteAllChildren@@QAEXHAAVTRequestStatus@@@Z @ 70 NONAME ; void CT_MsgUtilsDeleteAllChildren::StartL(int, class TRequestStatus &) + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/bwins/messagingtestutility2u.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/bwins/messagingtestutility2u.def Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,14 @@ +EXPORTS + ?Connect@RMessagingTestUtilityServer2@@QAEHXZ @ 1 NONAME ; int RMessagingTestUtilityServer2::Connect(void) + ?CopyFile@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@0@Z @ 2 NONAME ; int RMessagingTestUtilityServer2::CopyFile(class TDesC16 const &, class TDesC16 const &) + ?DeleteFile@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@@Z @ 3 NONAME ; int RMessagingTestUtilityServer2::DeleteFile(class TDesC16 const &) + ?DeleteMessageStore@RMessagingTestUtilityServer2@@QAEHJ@Z @ 4 NONAME ; int RMessagingTestUtilityServer2::DeleteMessageStore(long) + ?EventHandlerAdd@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@0@Z @ 5 NONAME ; int RMessagingTestUtilityServer2::EventHandlerAdd(class TDesC16 const &, class TDesC16 const &) + ?EventHandlerCheck@RMessagingTestUtilityServer2@@QAEHXZ @ 6 NONAME ; int RMessagingTestUtilityServer2::EventHandlerCheck(void) + ?EventHandlerInit@RMessagingTestUtilityServer2@@QAEHXZ @ 7 NONAME ; int RMessagingTestUtilityServer2::EventHandlerInit(void) + ?FileExists@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@@Z @ 8 NONAME ; int RMessagingTestUtilityServer2::FileExists(class TDesC16 const &) + ?GetDirL@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@IIAAPAVCDir@@@Z @ 9 NONAME ; int RMessagingTestUtilityServer2::GetDirL(class TDesC16 const &, unsigned int, unsigned int, class CDir * &) + ?KillProcess@RMessagingTestUtilityServer2@@QAEHVTProcessId@@@Z @ 10 NONAME ; int RMessagingTestUtilityServer2::KillProcess(class TProcessId) + ?MkDir@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@@Z @ 11 NONAME ; int RMessagingTestUtilityServer2::MkDir(class TDesC16 const &) + ?RmDir@RMessagingTestUtilityServer2@@QAEHABVTDesC16@@@Z @ 12 NONAME ; int RMessagingTestUtilityServer2::RmDir(class TDesC16 const &) + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/eabi/T_MsgUtilityServerU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/eabi/T_MsgUtilityServerU.DEF Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,86 @@ +EXPORTS + _ZN11CT_MsgUtils13CompareFilesLE7TPtrC16S0_iP13CArrayFixFlatItERi @ 1 NONAME + _ZN11CT_MsgUtils16FindEntryByNameLEP11CMsvSessionlR7TDesC16S3_i @ 2 NONAME + _ZN11CT_MsgUtils16FindEntryByNameLEP11CMsvSessionlR7TDesC16i @ 3 NONAME + _ZN11CT_MsgUtils16FindEntryByNameLEP9CMsvEntryR7TDesC16S3_i @ 4 NONAME + _ZN11CT_MsgUtils16FindEntryByNameLEP9CMsvEntryR7TDesC16i @ 5 NONAME + _ZN11CT_MsgUtils17CloseResourceFileEPv @ 6 NONAME + _ZN11CT_MsgUtils17OpenResourceFileLER13RResourceFileR3RFsRK7TDesC16 @ 7 NONAME + _ZN11CT_MsgUtils23SearchMessageBySubjectLEP11CMsvSessionl7TPtrC16 @ 8 NONAME + _ZN11CT_MsgUtils24CreateChildrenSelectionLEP11CMsvSessionl @ 9 NONAME + _ZN11CT_MsgUtils24GetRemoteFolderIdByNameLEP11CMsvSession7TPtrC16S2_S2_i @ 10 NONAME + _ZN11CT_MsgUtils24GetRemoteFolderIdByNameLEP11CMsvSession7TPtrC16S2_i @ 11 NONAME + _ZN11CT_MsgUtils32CreateChildrenSelectionWithTypeLEP11CMsvSessionl4TUid @ 12 NONAME + _ZN11CT_MsgUtils36CreateChildrenSelectionRemoteFolderLEP11CMsvSession7TPtrC16S2_ @ 13 NONAME + _ZN11CT_MsgUtils44CreateChildrenSelectionRemoteFolderWithTypeLEP11CMsvSession7TPtrC16S2_4TUid @ 14 NONAME + _ZN11CT_MsgUtils9ReadDataLER15RFileReadStreamR6TPtr16iP13CArrayFixFlatItE @ 15 NONAME + _ZN11CT_MsgUtilsC1Ev @ 16 NONAME + _ZN11CT_MsgUtilsC2Ev @ 17 NONAME + _ZN16CT_MsgTimerUtils4NewLEv @ 18 NONAME + _ZN16CT_MsgTimerUtils5AfterEiR14TRequestStatus @ 19 NONAME + _ZN24CT_MsgUtilsEnumConverter18FindFolderIdByNameER7TDesC16 @ 20 NONAME + _ZN24CT_MsgUtilsEnumConverter21ConvertDesToTPop3CmdsERK7TDesC16 @ 21 NONAME + _ZN24CT_MsgUtilsEnumConverter22ConvertDesToTImap4CmdsER7TDesC16 @ 22 NONAME + _ZN24CT_MsgUtilsEnumConverter27ConvertDesToTFolderSyncTypeER7TDesC16 @ 23 NONAME + _ZN24CT_MsgUtilsEnumConverter29ConvertDesToTCommDbDialogPrefER7TDesC16 @ 24 NONAME + _ZN24CT_MsgUtilsEnumConverter31ConvertDesToTPop3GetMailOptionsER7TDesC16 @ 25 NONAME + _ZN24CT_MsgUtilsEnumConverter32ConvertDesToTFolderSubscribeTypeER7TDesC16 @ 26 NONAME + _ZN24CT_MsgUtilsEnumConverter32ConvertDesToTImap4GetMailOptionsER7TDesC16 @ 27 NONAME + _ZN24CT_MsgUtilsEnumConverter33ConvertDesToTImSMTPSendCopyToSelfER7TDesC16 @ 28 NONAME + _ZN24CT_MsgUtilsEnumConverter34ConvertDesToTMsgOutboxBodyEncodingER7TDesC16 @ 29 NONAME + _ZN24CT_MsgUtilsEnumConverter36ConvertDesToTImSMTPSendMessageOptionER7TDesC16 @ 30 NONAME + _ZN24CT_MsgUtilsEnumConverter38ConvertDesToTImImap4PartialMailOptionsER7TDesC16 @ 31 NONAME + _ZN24CT_MsgUtilsEnumConverterC1Ev @ 32 NONAME + _ZN24CT_MsgUtilsEnumConverterC2Ev @ 33 NONAME + _ZN28CT_MsgUtilsCentralRepository14GetPopAccountLER6TDes16R11TPopAccount @ 34 NONAME + _ZN28CT_MsgUtilsCentralRepository15GetImapAccountLER6TDes16R12TImapAccount @ 35 NONAME + _ZN28CT_MsgUtilsCentralRepository16GetPopServiceIdLER6TDes16 @ 36 NONAME + _ZN28CT_MsgUtilsCentralRepository17GetImapServiceIdLER6TDes16 @ 37 NONAME + _ZN28CT_MsgUtilsCentralRepository24GetDefaultSmtpServiceIdLEv @ 38 NONAME + _ZN28CT_MsgUtilsCentralRepositoryC1Ev @ 39 NONAME + _ZN28CT_MsgUtilsCentralRepositoryC2Ev @ 40 NONAME + _ZN28CT_MsgUtilsDeleteAllChildren19FinalProgressStatusER13CMsvOperationRK14TRequestStatus @ 41 NONAME + _ZN28CT_MsgUtilsDeleteAllChildren6StartLER14TRequestStatus @ 42 NONAME + _ZN28CT_MsgUtilsDeleteAllChildrenC1EP11CMsvSessionl @ 43 NONAME + _ZN28CT_MsgUtilsDeleteAllChildrenC2EP11CMsvSessionl @ 44 NONAME + _ZN32CT_MsgUtilsConfigFileMachineName10ConstructLERK7TDesC16 @ 45 NONAME + _ZN32CT_MsgUtilsConfigFileMachineName11MachineNameEv @ 46 NONAME + _ZN32CT_MsgUtilsConfigFileMachineName16MachineNameEmailEv @ 47 NONAME + _ZN32CT_MsgUtilsConfigFileMachineName4NewLERK7TDesC16 @ 48 NONAME + _ZN32CT_MsgUtilsConfigFileMachineName5NewLCERK7TDesC16 @ 49 NONAME + _ZN32CT_MsgUtilsConfigFileMachineNameC1Ev @ 50 NONAME + _ZN32CT_MsgUtilsConfigFileMachineNameC2Ev @ 51 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtility10ConstructLERK7TDesC16 @ 52 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtility16GetFieldAsStringERK7TDesC16R7TPtrC16 @ 53 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtility17GetFieldAsIntegerERK7TDesC16Ri @ 54 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtility17GetFieldAsString8ERK7TDesC16R6TPtrC8 @ 55 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtility4NewLERK7TDesC16 @ 56 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtilityC1Ev @ 57 NONAME + _ZN34CT_MsgUtilsConfigFileParserUtilityC2Ev @ 58 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile15CompareIapPrefsER17CImIAPPreferencesS1_ @ 59 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile17ReadPopIAPAndAddLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 60 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile18ReadImapIAPAndAddLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 61 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile18ReadSmtpIAPAndAddLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 62 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile22ReadPopIAPAndAddFieldLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 63 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile23ReadImapIAPAndAddFieldLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 64 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile23ReadSmtpIAPAndAddFieldLEP34CT_MsgUtilsConfigFileParserUtilityRK7TDesC16R17CImIAPPreferences @ 65 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile37ReadPopSettingsFromConfigurationFileLER7TDesC16R15CImPop3SettingsR17CImIAPPreferencesRKS0_ @ 66 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile38ReadImapSettingsFromConfigurationFileLER7TDesC16R16CImImap4SettingsR17CImIAPPreferencesRKS0_ @ 67 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile38ReadSmtpSettingsFromConfigurationFileLER7TDesC16R15CImSmtpSettingsR17CImIAPPreferencesRKS0_ @ 68 NONAME + _ZN42CT_MsgUtilsReadEmailSettingsFromConfigFile9GetStringER7TDesC16RiiR7TPtrC16 @ 69 NONAME + _ZTI16CT_MsgTimerUtils @ 70 NONAME ; ## + _ZTI28CT_MsgUtilsDeleteAllChildren @ 71 NONAME ; ## + _ZTI32CT_MsgUtilsConfigFileMachineName @ 72 NONAME ; ## + _ZTI34CT_MsgUtilsConfigFileParserUtility @ 73 NONAME ; ## + _ZTV16CT_MsgTimerUtils @ 74 NONAME ; ## + _ZTV28CT_MsgUtilsDeleteAllChildren @ 75 NONAME ; ## + _ZTV32CT_MsgUtilsConfigFileMachineName @ 76 NONAME ; ## + _ZTV34CT_MsgUtilsConfigFileParserUtility @ 77 NONAME ; ## + _ZN24CT_MsgUtilsEnumConverter21ConvertDesToEventCodeER7TDesC16 @ 78 NONAME + _ZN24CT_MsgUtilsEnumConverter22ConvertDesToTSmtpCmdsLER7TDesC16 @ 79 NONAME + _ZN11CT_MsgUtils23SearchMessageBySubjectLEP11CMsvSessionl7TPtrC16i @ 80 NONAME + _ZN24CT_MsgUtilsEnumConverter23ConvertDesToBearerTypesERK7TDesC16 @ 81 NONAME + _ZN28CT_MsgUtilsCentralRepository15GetSmtpAccountLER6TDes16R12TSmtpAccount @ 82 NONAME + _ZN28CT_MsgUtilsCentralRepository17GetSmtpServiceIdLER6TDes16 @ 83 NONAME + _ZN28CT_MsgUtilsDeleteAllChildren6StartLEiR14TRequestStatus @ 84 NONAME + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/eabi/messagingtestutility2u.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/eabi/messagingtestutility2u.def Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,14 @@ +EXPORTS + _ZN28RMessagingTestUtilityServer210DeleteFileERK7TDesC16 @ 1 NONAME + _ZN28RMessagingTestUtilityServer210FileExistsERK7TDesC16 @ 2 NONAME + _ZN28RMessagingTestUtilityServer211KillProcessE10TProcessId @ 3 NONAME + _ZN28RMessagingTestUtilityServer215EventHandlerAddERK7TDesC16S2_ @ 4 NONAME + _ZN28RMessagingTestUtilityServer216EventHandlerInitEv @ 5 NONAME + _ZN28RMessagingTestUtilityServer217EventHandlerCheckEv @ 6 NONAME + _ZN28RMessagingTestUtilityServer218DeleteMessageStoreEl @ 7 NONAME + _ZN28RMessagingTestUtilityServer25MkDirERK7TDesC16 @ 8 NONAME + _ZN28RMessagingTestUtilityServer25RmDirERK7TDesC16 @ 9 NONAME + _ZN28RMessagingTestUtilityServer27ConnectEv @ 10 NONAME + _ZN28RMessagingTestUtilityServer27GetDirLERK7TDesC16jjRP4CDir @ 11 NONAME + _ZN28RMessagingTestUtilityServer28CopyFileERK7TDesC16S2_ @ 12 NONAME + diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/group/T_Utils.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/group/T_Utils.mmp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,54 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// @file T_Utils.mmp +// +// + + +TARGET t_msgutilityserver.dll +TARGETPATH /system/libs +TARGETTYPE DLL + +CAPABILITY ALL -TCB + +UID 0 0x10274071 +VENDORID 0x70000001 + + +SYSTEMINCLUDE /epoc32/include + + +USERINCLUDE ../inc +SOURCEPATH ../src +SOURCE T_TimerUtils.cpp +SOURCE T_Utils.cpp +SOURCE T_UtilsCentralRepository.cpp +SOURCE T_UtilsConfigFileMachineName.cpp +SOURCE T_UtilsConfigFileParserUtility.cpp +SOURCE T_UtilsDeleteAllChildren.cpp +SOURCE T_UtilsEnumConverter.cpp +SOURCE T_UtilsReadEmailSettingsFromConfigFile.cpp + + +LIBRARY testexecuteutils.lib +LIBRARY testexecutelogclient.lib +LIBRARY imut.lib +LIBRARY bafl.lib +LIBRARY etext.lib +LIBRARY estor.lib +LIBRARY msgs.lib +LIBRARY euser.lib +LIBRARY imcm.lib +LIBRARY efsrv.lib +LIBRARY charconv.lib diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/group/bld.inf Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,31 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// bld.inf file for the Integ Test Pop server +// +// + +PRJ_TESTMMPFILES +T_Utils.mmp + + +PRJ_TESTEXPORTS +../inc/T_Utils.h /epoc32/include/t_utils.h +../inc/T_UtilsEnumConverter.h /epoc32/include/t_utilsenumconverter.h +../inc/T_UtilsConfigFileParserUtility.h /epoc32/include/t_utilsconfigfileparserutility.h +../inc/T_UtilsCentralRepository.h /epoc32/include/t_utilscentralrepository.h +../inc/T_UtilsReadEmailSettingsFromConfigFile.h /epoc32/include/t_utilsreademailsettingsfromconfigfile.h +../inc/T_UtilsConfigFileMachineName.h /epoc32/include/t_utilsconfigfilemachinename.h +../inc/T_TimerUtils.h /epoc32/include/t_timerutils.h +../inc/T_UtilsDeleteAllChildren.h /epoc32/include/t_utilsdeleteallchildren.h +../inc/t_testinstrumentation.h /epoc32/include/t_testinstrumentation.h diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_TimerUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_TimerUtils.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,55 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file which contains the utility functions for the CTimer derived objects +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_TIMER_UTILS_H__ +#define __T_TIMER_UTILS_H__ + + +// epoc includes +#include + +/** +This class provides the implementation of the Timer utilities +*/ +class CT_MsgTimerUtils : public CTimer + { +public: + IMPORT_C static CT_MsgTimerUtils* NewL(); + ~CT_MsgTimerUtils(); + IMPORT_C void After(TInt aSec,TRequestStatus& aStatus); + +protected: + void RunL(); + +private: + CT_MsgTimerUtils(); + +private: + TRequestStatus* iRequestStatus; + }; +#endif //__T_TIMER_UTILS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_Utils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_Utils.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,109 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file which contains the common utility functions +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_UTILS_H__ +#define __T_UTILS_H__ + + +// Epoc includes +#include + +// Forward Declaration +class RResourceFile; + +/** +Implements a class to contain the utility functions required across servers +*/ +class CT_MsgUtils + { +public: + IMPORT_C CT_MsgUtils(); + ~CT_MsgUtils(); + + // Returns the EntryID of the entry based on the entry name + IMPORT_C static TMsvId FindEntryByNameL(CMsvSession* aSession, TMsvId aParentId, TDesC& aEntryName, TBool aCaseSensitive = EFalse); + + // Returns the EntryID of the entry based on the entry name and entry parent name + IMPORT_C static TMsvId FindEntryByNameL(CMsvSession* aSession, TMsvId aParentId, TDesC& aEntryName, TDesC& aParentEntryName, TBool aCaseSensitive = EFalse); + + // Returns the EntryId of the entry based on the entry name under the given parent entry + IMPORT_C static TMsvId FindEntryByNameL(CMsvEntry* aEntry,TDesC& aEntryName, TBool aCaseSensitive = EFalse); + + // Returns the EntryID of the entry based on the entry name and entry parent name under the given parent entry + IMPORT_C static TMsvId FindEntryByNameL(CMsvEntry* aEntry,TDesC& aEntryName, TDesC& aParentEntryName, TBool aCaseSensitive = EFalse); + + // Creates a selection of the children + IMPORT_C static CMsvEntrySelection* CreateChildrenSelectionL(CMsvSession* aSession, TMsvId aEntryId); + + // Creates a selection of the children with a specified type + IMPORT_C static CMsvEntrySelection* CreateChildrenSelectionWithTypeL(CMsvSession* aSession, TMsvId aEntryId, TUid aType); + + // Returns a selection of the child entries under the specified remote folder + IMPORT_C static CMsvEntrySelection* CreateChildrenSelectionRemoteFolderL(CMsvSession* aSession,TPtrC aAccountName, + TPtrC aFolderName); + + // Returns a selection of the child entries under the specified remote folder with a specified type + IMPORT_C static CMsvEntrySelection* CreateChildrenSelectionRemoteFolderWithTypeL(CMsvSession* aSession,TPtrC aAccountName, + TPtrC aFolderName, TUid aType); + + // Searches for a given entry under the specified remote folder Id for IMAP + IMPORT_C static TMsvId GetRemoteFolderIdByNameL(CMsvSession* aSession,TPtrC aAccountName,TPtrC aFolderName, TBool aCaseSensitive = EFalse); + + // Searches for a given entry under the specified remote folder Id for IMAP - overloaded version with parent folder name + IMPORT_C static TMsvId GetRemoteFolderIdByNameL(CMsvSession* aSession,TPtrC aAccountName,TPtrC aFolderName, TPtrC aParentFolderName, TBool aCaseSensitive = EFalse); + + // Searches for a message in a given folder based ont he message subject + IMPORT_C static TMsvId SearchMessageBySubjectL(CMsvSession* aSession, TMsvId afolderId, TPtrC aSubject); + + // Searches for a message in a given folder based ont he message subject ..overloaded + IMPORT_C static TMsvId SearchMessageBySubjectL(CMsvSession* aSession,TMsvId afolderId,TPtrC aSubject, TBool aVisibleFlag); + + // Compares two input files + IMPORT_C static TInt CompareFilesL(TPtrC aFileOne, TPtrC aFileTwo, TBool aIsUnicode,CArrayFixFlat* aIgnoreCharList, + TBool& aDiffFlag); + + // Reads data chunk from the file stream.Returns ETrue if the EOF found. + IMPORT_C static TBool ReadDataL(RFileReadStream& aFileReadStream,TPtr& aPtrLineBuffer, TBool aIsUnicode, + CArrayFixFlat* aIgnoreCharList); + + IMPORT_C static void OpenResourceFileL(RResourceFile& rFile, RFs& anFs, const TDesC& aFileName ); + + //Closes the Open Resource File + IMPORT_C static void CloseResourceFile( TAny* aFile ); + + private: + // Recursively searches the EntryID of the entry based on the entry name + TMsvId static RecFindEntryByNameL(CMsvEntry& aEntry, TDesC& aEntryName, TBool aCaseSensitive); + + // Recursively searches the EntryID of the entry based on the entry name and parent entry name + TMsvId static RecFindEntryByNameL(CMsvEntry& aEntry, TDesC& aEntryName, TDesC& aParentEntryName, TBool aCaseSensitive); + + // Checks if the given parent name matches the name of the given parent entry + TBool static CheckParent(CMsvEntry& aParentEntry, TDesC& aParentEntryName); + }; +#endif //__T_UTILS_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsCentralRepository.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsCentralRepository.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,56 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the header file for CT_MsgUtilsCentralRepository class and +// contains the common utility functions that use the Central Repository +// +// + +#ifndef __T_UTILS_CENTRAL_REPOSITORY_H__ +#define __T_UTILS_CENTRAL_REPOSITORY_H__ + + +// epoc includes +#include + +/** +Implements the utility functions related to the Central Repository +*/ +class CT_MsgUtilsCentralRepository + { +public: + IMPORT_C CT_MsgUtilsCentralRepository(); + ~CT_MsgUtilsCentralRepository(); + + // Gets the Imap service Id based on the account name + IMPORT_C static TMsvId GetImapServiceIdL(TDes& aAccountName); + + // Gets the Pop service Id based on the account name + IMPORT_C static TMsvId GetPopServiceIdL(TDes& aAccountName); + + // Gets the Smtp service Id based on the account name + IMPORT_C static TMsvId GetSmtpServiceIdL(TDes& aAccountName); + + // Gets the default Smtp service Id + IMPORT_C static TMsvId GetDefaultSmtpServiceIdL(); + + // Checks if the specified Imap account is present in the Central Repository + IMPORT_C static TBool GetImapAccountL( TDes& aAccountName, TImapAccount& aImapAccount ); + + // Checks if the specified Pop account is present in the Central Repository + IMPORT_C static TBool GetPopAccountL( TDes& aAccountName, TPopAccount& aPopAccount ); + + // Checks if the specified Smtp account is present in the Central Repository + IMPORT_C static TBool GetSmtpAccountL(TDes& aAccountName, TSmtpAccount& aSmtpAccount); + }; +#endif //__T_UTILS_CENTRAL_REPOSITORY_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsConfigFileMachineName.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsConfigFileMachineName.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,59 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgUtilsConfigFileMachineName +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_UTILS_CONFIG_FILE_MACHINE_NAME_H__ +#define __T_UTILS_CONFIG_FILE_MACHINE_NAME_H__ + + +// epoc includes +#include + + +/** +CT_MsgUtilsConfigFileMachineName is an utility class, can be used +to create automatic email acounts using the machine name. +*/ +class CT_MsgUtilsConfigFileMachineName : public CBase + { +public: + IMPORT_C static CT_MsgUtilsConfigFileMachineName* NewL(const TDesC& aPtrEmailAdd); + IMPORT_C static CT_MsgUtilsConfigFileMachineName* NewLC(const TDesC& aPtrEmailAdd); + ~CT_MsgUtilsConfigFileMachineName(); + + IMPORT_C const TDesC8& MachineName(); + IMPORT_C const TDesC& MachineNameEmail(); + +private: + IMPORT_C CT_MsgUtilsConfigFileMachineName(); + IMPORT_C void ConstructL(const TDesC& aPtrEmailAdd); + +private: + HBufC8* iMachineName; + HBufC* iMachineNameEmail; + }; +#endif //__T_UTILS_CONFIG_FILE_MACHINE_NAME_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsConfigFileParserUtility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsConfigFileParserUtility.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,60 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgUtilsConfigFileParserUtility class +* +* +*/ + + + + + +/** + @file +*/ + + + +#ifndef __T_UTILS_CONFIG_FILE_PARSER_UTILITY_H__ +#define __T_UTILS_CONFIG_FILE_PARSER_UTILITY_H__ + + +// epoc includes +#include + + +/** +This utility class used to parse a .txt(Email settings) file. +*/ +class CT_MsgUtilsConfigFileParserUtility : public CBase + { +public: + IMPORT_C static CT_MsgUtilsConfigFileParserUtility* NewL(const TDesC& aFileName); + ~CT_MsgUtilsConfigFileParserUtility(); + + IMPORT_C TInt GetFieldAsInteger(const TDesC& aFieldName, TInt& aValue); + IMPORT_C TInt GetFieldAsString(const TDesC& aFieldName, TPtrC& aString); + IMPORT_C TInt GetFieldAsString8(const TDesC& aFieldName, TPtrC8& aString); + +private: + IMPORT_C CT_MsgUtilsConfigFileParserUtility(); + IMPORT_C void ConstructL(const TDesC& aFileName); + +private: + RPointerArray iName; + RPointerArray iContent; + RPointerArray iContent8; + }; +#endif //__T_UTILS_CONFIG_FILE_PARSER_UTILITY_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsDeleteAllChildren.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsDeleteAllChildren.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,88 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgUtilsDeleteAllChildren +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_UTILS_DELETE_ALL_CHILDREN_H__ +#define __T_UTILS_DELETE_ALL_CHILDREN_H__ + + +// epoc includes +#include + +// Forward Declaration +class CMsvSession; +class CMsvOperation; + + +/** +Implements a utilty that performs deletion of all the children entries +*/ +class CT_MsgUtilsDeleteAllChildren : public CActive + { +public: + IMPORT_C CT_MsgUtilsDeleteAllChildren(CMsvSession* aSession,TMsvId aParentId = KMsvRootIndexEntryId); + ~CT_MsgUtilsDeleteAllChildren(); + + IMPORT_C void StartL(TRequestStatus& aStatus); + IMPORT_C void StartL(TBool aBlockDelete, TRequestStatus& aStatus); + + // Returns the number of the children entries that are not deleted + TInt Undeleted() {return (iUndeletedChildren);} + + // Gets information about a completed operation. + IMPORT_C TInt FinalProgressStatus(CMsvOperation& aOperation,const TRequestStatus& aStatus); + +protected: + void DoCancel(); + void RunL(); + +private: + CMsvSession* iSession; + TMsvId iParentId; + CMsvEntry* iEntry; + CMsvEntrySelection* iSelection; + TRequestStatus* iRequestStatus; + TInt iTotalChildren; + TInt iCurrentChild; + TInt iUndeletedChildren; + CMsvOperation* iOperation; + +private: + enum State + { + EStateThisLevel, + EStateNextLevel, + EBlockDelete + }; + TInt iState; + +private: + CT_MsgUtilsDeleteAllChildren* iNextLevel; + }; + + +#endif //__T_UTILS_DELETE_ALL_CHILDREN_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsEnumConverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsEnumConverter.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,115 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file which contains the utility to map the string to the +* corresponding enumerator value +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_UTILS_ENUM_CONVERTER_H__ +#define __T_UTILS_ENUM_CONVERTER_H__ + + +// User Include +#include + +// epoc inlcudes +#include +#include +#include +#include +#include +#include + +// STR_SWITCH... STR_CASE... STR_SWITCH_END macro can be used as +// switch case that would take string. +#define STR_SWITCH(str) {\ + TBuf<100> __ps(str);\ + while(1) { + +#define STR_SWITCH_END() break; } } + +#define STR_CASE(str) if(__ps == str) + +#define DEFAULT_CASE() + + +/** +CT_MsgUtilsEnumConverter is utility class used to map the string to the +corresponding enumerator value. +*/ +class CT_MsgUtilsEnumConverter + { +public: + IMPORT_C CT_MsgUtilsEnumConverter(); + ~CT_MsgUtilsEnumConverter(); + + //Utility functions + + // Maps the local folder names to the corresponding folder Ids + IMPORT_C static TMsvId FindFolderIdByName( TDesC& aFolderName ); + + // Maps the pop3 command names with the corresponding values + IMPORT_C static TPop3Cmds ConvertDesToTPop3Cmds( const TDesC& aPopCmdName ); + + // Maps the Imap4 command names with the corresponding values + IMPORT_C static TImap4Cmds ConvertDesToTImap4Cmds(TDesC& aImapCmdName); + + // Maps the SMTP command names with the corresponding values + IMPORT_C static TSmtpCmds ConvertDesToTSmtpCmdsL(TDesC& aSmtpCmdName); + + // Maps the TCommDbDialogPref enumerations + IMPORT_C static TCommDbDialogPref ConvertDesToTCommDbDialogPref( TDesC& aDialogPrefStr ); + + // Maps the TImap4GetMailOptions enumerations + IMPORT_C static TImap4GetMailOptions ConvertDesToTImap4GetMailOptions( TDesC& aMailOption ); + + // Maps the TFolderSyncType Enumerations + IMPORT_C static TFolderSyncType ConvertDesToTFolderSyncType( TDesC& aFolderSyncType ); + + // Maps the TFolderSubscribeType Enumerations + IMPORT_C static TFolderSubscribeType ConvertDesToTFolderSubscribeType( TDesC& aFolderSubscriberType ); + + // Maps the TImImap4PartialMailOptions Enumerations + IMPORT_C static TImImap4PartialMailOptions ConvertDesToTImImap4PartialMailOptions( TDesC& aPartialMailOption ); + + // Maps the TMsgOutboxBodyEncoding enumerations + IMPORT_C static TMsgOutboxBodyEncoding ConvertDesToTMsgOutboxBodyEncoding( TDesC& aOutboxBodyEncoding ); + + // Maps the TImSMTPSendMessageOption Enumerations + IMPORT_C static TImSMTPSendMessageOption ConvertDesToTImSMTPSendMessageOption( TDesC& aSendMsgOption ); + + // Maps the TImSMTPSendCopyToSelf Enumerations + IMPORT_C static TImSMTPSendCopyToSelf ConvertDesToTImSMTPSendCopyToSelf( TDesC& aSmtpCopyToSelf ); + + // Maps the TPop3GetMailOptions Enumerations + IMPORT_C static TPop3GetMailOptions ConvertDesToTPop3GetMailOptions( TDesC& aPop3MailOption ); + + // Maps the Eventcode strings to their numeric value + IMPORT_C static TInstrumentationPoint ConvertDesToEventCode(TDesC& aEventCodeString); + + // Maps bearer types strings to their numeric values + IMPORT_C static TUint32 ConvertDesToBearerTypes(const TDesC& aBearerTypesString); + }; +#endif //__T_UTILS_ENUM_CONVERTER_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/T_UtilsReadEmailSettingsFromConfigFile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/T_UtilsReadEmailSettingsFromConfigFile.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,87 @@ +/** +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* This is the header file for CT_MsgUtilsReadEmailSettingsFromConfigFile +* +* +*/ + + + + + +/** + @file +*/ + + +#ifndef __T_READ_EMAIL_SETTINGS_FROM_CONFIG_FILE_H__ +#define __T_READ_EMAIL_SETTINGS_FROM_CONFIG_FILE_H__ + +_LIT(KNone, "NONE"); + +// Forward declarations +class CImIAPPreferences; +class CImImap4Settings; +class CImPop3Settings; +class CImSmtpSettings; +class CT_MsgUtilsConfigFileParserUtility; +class TImapAccount; + + +/** +CT_MsgUtilsReadEmailSettingsFromConfigFile is the utility class used to read the +fields from the configuration/setting file and and update the set the data members of +CImImap4Settings, CImPop3Settings, CImSmtpSettings and CImIAPPreferences objects. +*/ +class CT_MsgUtilsReadEmailSettingsFromConfigFile + { +public: + CT_MsgUtilsReadEmailSettingsFromConfigFile() {}; + + ~CT_MsgUtilsReadEmailSettingsFromConfigFile() {}; + + IMPORT_C static TBool CompareIapPrefs(CImIAPPreferences& prefs1, CImIAPPreferences& prefs2); + + IMPORT_C static void ReadImapSettingsFromConfigurationFileL(TDesC& aSettingsFile, + CImImap4Settings& aImapSet, CImIAPPreferences& aImapIapPref, const TDesC& aPtrEmailAdd = KNone()); + + IMPORT_C static void ReadPopSettingsFromConfigurationFileL(TDesC& aSettingsFile, + CImPop3Settings& aPopSet, CImIAPPreferences& aPopIapPref, const TDesC& aPtrEmailAdd = KNone()); + + IMPORT_C static void ReadSmtpSettingsFromConfigurationFileL(TDesC& aSettingsFile, + CImSmtpSettings& aSmtpSet, CImIAPPreferences& aSmtpIapPref,const TDesC& aPtrEmailAdd = KNone()); + +private: + IMPORT_C static void ReadImapIAPAndAddL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aParamListName, CImIAPPreferences& aIapPref); + + IMPORT_C static void ReadImapIAPAndAddFieldL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aFieldName, CImIAPPreferences& aIapPref); + + IMPORT_C static void ReadPopIAPAndAddL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aParamListName, CImIAPPreferences& aIapPref); + + IMPORT_C static void ReadPopIAPAndAddFieldL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aFieldName, CImIAPPreferences& aIapPref); + + IMPORT_C static void ReadSmtpIAPAndAddL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aParamListName, CImIAPPreferences& aSmtpIapPref); + + IMPORT_C static void ReadSmtpIAPAndAddFieldL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aFieldName, CImIAPPreferences& aIapPref); + + IMPORT_C static TBool GetString(TDesC& aStringPtr, TInt& aStart, TInt aEnd, TPtrC& aBaseString); + }; +#endif //__T_READ_EMAIL_SETTINGS_FROM_CONFIG_FILE_H__ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/inc/t_testinstrumentation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/inc/t_testinstrumentation.h Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* @file t_testInstrumentation.h +* This contains the list of event codes that are used to identify a particular event. +* These event codes are used by the EvenlogServer to generate a specif type of log for a specific event. +* +* +*/ + + + + + + +#ifndef __TEST_INSTRUMENTATION_H__ +#define __TEST_INSTRUMENTATION_H__ + +// Epoc Include +#include + +/** +List of event codes. +*/ + enum TInstrumentationPoint + { + // Event codes 0 to 20 has been reserved for error/specific condition + EBadEventCode = 0, + EImapRamUsageStart = 21, + EImapRamUsageStop, + EPopRamUsageStart = 23, + EPopRamUsageStop, + ESmtpRamUsageStart = 25, + ESmtpRamUsageStop, + ESmtpRamUsageCreateMessageStart = 27, + ESmtpRamUsageCreateMessageStop, + ESmtpRamUsageSendMessageStart = 29, + ESmtpRamUsageSendMessageStop, + ESmtpCreateMessageSpeedStart = 31, + ESmtpCreateMessageSpeedStop, + ESmtpSendMessageSpeedStart = 33, + ESmtpSendMessageSpeedStop, + EImapDownloadMessageSpeedStart = 35, + EImapDownloadMessageSpeedStop + }; + + +#endif /* __TEST_INSTRUMENTATION_H__ */ diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_TimerUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_TimerUtils.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,99 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the Cpp file which contains the utility functions for the CTimer derived objects +// +// + + + +/** + @file +*/ + + +// user include +#include + + +const TInt KValue={1000000}; +/** +NewL() +It performs the two phase construction and returns an object +of type CT_MsgTimerUtils + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgTimerUtils +*/ +EXPORT_C CT_MsgTimerUtils* CT_MsgTimerUtils::NewL() + { + CT_MsgTimerUtils* self = new (ELeave) CT_MsgTimerUtils(); + CleanupStack::PushL(self); + self->ConstructL(); + CActiveScheduler::Add(self); + CleanupStack::Pop(); + return self; + } + + + +/** +CT_MsgTimerUtils() +Constructor +*/ +CT_MsgTimerUtils::CT_MsgTimerUtils() : CTimer(EPriorityHigh) + { + } + + + +/** +~CT_MsgTimerUtils() +Destructor +*/ +CT_MsgTimerUtils::~CT_MsgTimerUtils() + { + iRequestStatus = 0; //To Remove Lint Warning + } + + +/** +After() +Calls the After function CTimer for the given number of secs + +@param aSec +No. of seconds + +@param aStatus +Completion status of a request + +@see CTimer::After() +*/ +EXPORT_C void CT_MsgTimerUtils::After(TInt aSec,TRequestStatus& aStatus) + { + iRequestStatus = &aStatus; + aStatus = KRequestPending; + TTimeIntervalMicroSeconds32 interval = aSec*KValue; + CTimer::After(interval); + } + + +/** +RunL() +Gives the status of the operation +*/ +void CT_MsgTimerUtils::RunL() + { + User::RequestComplete(iRequestStatus,iStatus.Int()); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_Utils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_Utils.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,904 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the Cpp file which contains the utility functions common across the servers +// +// + + + +/** + @file +*/ + + +// User includes +#include +#include + +// Epoc includes +#include +#include +#include +#include + + +// Literals Used +const TInt KDefBufferSize = 1024; + + +/** +CT_MsgUtils() +Constructor +*/ +EXPORT_C CT_MsgUtils::CT_MsgUtils() + { + } + + +/** +~CT_MsgUtils() +Constructor +*/ +CT_MsgUtils::~CT_MsgUtils() + { + } + +/** +OpenResourceFileL() +Opens a resource File + +@param rFile +Resource File Handle + +@param anFs +File Session associated + +@param aFileName +The Name of resource File to be opened +*/ +EXPORT_C void CT_MsgUtils::OpenResourceFileL(RResourceFile& rFile, RFs& anFs, const TDesC& aFileName ) + { + // open resource file + TFileName fileName(aFileName); + MsvUtils::AddPathAndExtensionToResFileL(fileName); + BaflUtils::NearestLanguageFile( anFs, fileName ); + if (BaflUtils::FileExists(anFs,fileName)) + { + rFile.OpenL( anFs, fileName ); + return; + } + User::Leave(KErrNotFound); + } + +/** +CloseResourceFile() +Closes a recource File + +@param aFile +The Name of resource File to be closed +*/ + EXPORT_C void CT_MsgUtils::CloseResourceFile( TAny* aFile ) + { + ((RResourceFile*)aFile)->Close(); + } + + +/** +FindEntryByNameL() +Search the entries under a given folder ID by name of the entry +i.e, iDescription or iDetails value of an entry + +@param aSession +Session object + +@param aParentId +Parent Id under which the entry needs to be found + +@param aEntryName +The entry name that needs to be found + +@leave KErrNotFound +Leaves if no entry's iDescription or iDetails matches with aEntryName + +@return +Id of the entry that match +*/ +EXPORT_C TMsvId CT_MsgUtils::FindEntryByNameL(CMsvSession* aSession, TMsvId aParentId, TDesC& aEntryName, TBool aCaseSensitive) + { + + TMsvId msgEntryId = KMsvNullIndexEntryId; + + // Set the context to the Parent + CMsvEntry* entry = CMsvEntry::NewL(*aSession, aParentId,TMsvSelectionOrdering + (KMsvNoGrouping,EMsvSortByNone, ETrue)); + CleanupStack::PushL(entry); + + entry->SetEntryL(aParentId); + + msgEntryId = FindEntryByNameL(entry, aEntryName, aCaseSensitive); + + CleanupStack::PopAndDestroy(entry); + + return msgEntryId; + } + + +/** +FindEntryByNameL() +Search the entries under a given folder ID by name of the entry +i.e, iDescription or iDetails value of an entry + +@param aSession +Session object + +@param aParentId +Parent Id under which the entry needs to be found + +@param aEntryName +The entry name that needs to be found + +@param aParentEntryName +The Parent entry name that needs to be matched with the entry found + +@leave KErrNotFound +Leaves if no entry's iDescription or iDetails matches with aEntryName + +@return +Id of the entry that match +*/ +EXPORT_C TMsvId CT_MsgUtils::FindEntryByNameL(CMsvSession* aSession, TMsvId aParentId, TDesC& aEntryName, TDesC& aParentEntryName, TBool aCaseSensitive) + { + + TMsvId msgEntryId = KMsvNullIndexEntryId; + + // Set the context to the Parent + CMsvEntry* entry = CMsvEntry::NewL(*aSession, aParentId,TMsvSelectionOrdering + (KMsvNoGrouping,EMsvSortByNone, ETrue)); + CleanupStack::PushL(entry); + + entry->SetEntryL(aParentId); + + msgEntryId = FindEntryByNameL(entry, aEntryName, aParentEntryName, aCaseSensitive); + + CleanupStack::PopAndDestroy(entry); + + return msgEntryId; + } + + +/** +FindEntryByNameL() +Search the entries under a given entry(an object of CMsvEntry) by name of the entry +i.e, iDescription or iDetails value of an entry + +@param aEntry +Parent entry under which the given entry needs to be searched + +@param aEntryName +The entry name that needs to be found + +@leave KErrNotFound +Leaves if no entry's iDescription or iDetails matches with aEntryName + +@return +Id of the entry that match +*/ +EXPORT_C TMsvId CT_MsgUtils::FindEntryByNameL(CMsvEntry* aEntry,TDesC& aEntryName, TBool aCaseSensitive) + { + TMsvId msgEntryId = KMsvNullIndexEntryId; + + msgEntryId = RecFindEntryByNameL(*aEntry, aEntryName, aCaseSensitive); + + if(msgEntryId == KMsvNullIndexEntryId) + { + User::Leave(KErrNotFound); + } + + return msgEntryId; + } + + +/** +FindEntryByNameL() +Search the entries under a given entry(an object of CMsvEntry) by name of the entry +i.e, iDescription or iDetails value of an entry + +@param aEntry +Parent entry under which the given entry needs to be searched + +@param aEntryName +The entry name that needs to be found + +@param aParentEntryName +The Parent entry name that needs to be matched with the entry found + +@leave KErrNotFound +Leaves if no entry's iDescription or iDetails matches with aEntryName + +@return +Id of the entry that match +*/ +EXPORT_C TMsvId CT_MsgUtils::FindEntryByNameL(CMsvEntry* aEntry,TDesC& aEntryName, TDesC& aParentEntryName, TBool aCaseSensitive) + { + TMsvId msgEntryId = KMsvNullIndexEntryId; + + msgEntryId = RecFindEntryByNameL(*aEntry, aEntryName, aParentEntryName, aCaseSensitive); + + if(msgEntryId == KMsvNullIndexEntryId) + { + User::Leave(KErrNotFound); + } + + return msgEntryId; + } + + +/** +RecFindEntryByNameL() +Recursively search the entries (including all sub entries) under a given entry (an object of CMsvEntry) +by name of the entry i.e, iDescription or iDetails value of an entry + +@param aEntry +Parent entry under which the given entry needs to be searched + +@param aEntryName +The entry name that needs to be found + +@leave KErrNotFound +Leaves if no entry's iDescription or iDetails matches with aEntryName + +@return +Id of the entry that match +*/ +TMsvId CT_MsgUtils::RecFindEntryByNameL(CMsvEntry& aEntry, TDesC& aEntryName, TBool aCaseSensitive) + { + + TMsvId msgEntryId = KMsvNullIndexEntryId; + + CMsvEntrySelection* selection = aEntry.ChildrenL(); + CleanupStack::PushL(selection); + // Search for the entry in the children selection, based on the entry name given + TBool found = EFalse; + TInt count = selection->Count(); + for (TInt index = 0; (indexCount(); + TBool matched = EFalse; + + for (TInt index = 0; (indexSetEntryL(aEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + entry->SetSortTypeL(order); + + CMsvEntrySelection* selection = entry->ChildrenL(); + CleanupStack::PopAndDestroy(entry); + + return selection; + } + +/** +CreateChildrenSelectionWithTypeL() +This function creates a selection of the children entries under a given parent Id +which are of a specified type. + +@param aSession +A CMsvSession object + +@param aEntryId +Id of the entry + +@param aType +Type of entry to look for + +@return +Returns a selection of all child entries under the given entry of the specified type +*/ +EXPORT_C CMsvEntrySelection* CT_MsgUtils::CreateChildrenSelectionWithTypeL(CMsvSession* aSession, TMsvId aEntryId, TUid aType) + { + CMsvEntry* entry = CMsvEntry::NewL(*aSession, aEntryId, TMsvSelectionOrdering(KMsvNoGrouping, EMsvSortByNone, ETrue)); + CleanupStack::PushL(entry); + entry->SetEntryL(aEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + entry->SetSortTypeL(order); + + CMsvEntrySelection* selection = entry->ChildrenWithTypeL(aType); + CleanupStack::PopAndDestroy(entry); + + return selection; + } + + +/** +CreateChildrenSelectionRemoteFolderL() +This function creates a selection of the child entries under the +remote folder Id if the service name is specified + +@param aSession +A CMsvSession object + +@param aAccountName +The account name or service name + +@param aFolderName +The name of the remote folder whose entries need to be fetched + +@return +The selection of all entries under the given entry +*/ +EXPORT_C CMsvEntrySelection* CT_MsgUtils::CreateChildrenSelectionRemoteFolderL(CMsvSession* + aSession,TPtrC aAccountName,TPtrC aFolderName) + { + TMsvId remoteFolderId = GetRemoteFolderIdByNameL(aSession, aAccountName, aFolderName); + return CreateChildrenSelectionL(aSession,remoteFolderId); + } + +/** +CreateChildrenSelectionRemoteFolderWithTypeL() +This function creates a selection of the child entries under the +remote folder Id with a specified type if the service name is specified + +@param aSession +A CMsvSession object + +@param aAccountName +The account name or service name + +@param aFolderName +The name of the remote folder whose entries need to be fetched + +@param aType +Type of entry to look for + +@return +The selection of all entries under the given entry with the specified type +*/ +EXPORT_C CMsvEntrySelection* CT_MsgUtils::CreateChildrenSelectionRemoteFolderWithTypeL(CMsvSession* + aSession,TPtrC aAccountName,TPtrC aFolderName, TUid aType) + { + TMsvId remoteFolderId = GetRemoteFolderIdByNameL(aSession, aAccountName, aFolderName); + return CreateChildrenSelectionWithTypeL(aSession, remoteFolderId, aType); + } + + +/** +GetRemoteFolderIdByNameL() +Searches for a given entry under the remote folder Id specified and gets it Id + +@param aSession +A CMsvSession object + +@param aAccountName +The account name + +@param aFolderName +The name of the remote folder whose Id is to be found + +@return +The Id of the specified folder +*/ +EXPORT_C TMsvId CT_MsgUtils::GetRemoteFolderIdByNameL(CMsvSession* aSession,TPtrC aAccountName,TPtrC aFolderName, TBool aCaseSensitive) + { + TMsvId imapServiceId = CT_MsgUtilsCentralRepository::GetImapServiceIdL((TDes&)aAccountName); + return CT_MsgUtils::FindEntryByNameL(aSession, imapServiceId, (TDesC&)aFolderName, aCaseSensitive); + } + + +/** +GetRemoteFolderIdByNameL() +Searches for a given entry under the remote folder Id specified and gets it Id + +@param aSession +A CMsvSession object + +@param aAccountName +The account name + +@param aFolderName +The name of the remote folder whose Id is to be found + +@param aFolderName +The name of the remote parent folder of the entry to be found + +@return +The Id of the specified folder +*/ +EXPORT_C TMsvId CT_MsgUtils::GetRemoteFolderIdByNameL(CMsvSession* aSession,TPtrC aAccountName,TPtrC aFolderName, TPtrC aParentFolderName, TBool aCaseSensitive) + { + TMsvId imapServiceId = CT_MsgUtilsCentralRepository::GetImapServiceIdL((TDes&)aAccountName); + return CT_MsgUtils::FindEntryByNameL(aSession, imapServiceId, (TDesC&)aFolderName, (TDesC&)aParentFolderName, aCaseSensitive); + } + + +/** +SearchMessageBySubjectL() +This function searches for a message based on the +subject under the specified local folder + +@param aSession +A CMsvSession object + +@param afolderId +The folder Id under which the search needs to be done + +@param aSubject +The subject name of the message + +@leave KErrNotFound +Leaves if the message is not found + +@return +If the message is found it returns the message Id +*/ +EXPORT_C TMsvId CT_MsgUtils::SearchMessageBySubjectL(CMsvSession* aSession,TMsvId afolderId,TPtrC aSubject) + { + TMsvId messageId = KMsvNullIndexEntryId; + + CMsvEntry* entry = aSession->GetEntryL(afolderId); + CleanupStack::PushL(entry); + + // Set the entry to the source folder id + entry->SetEntryL(afolderId); + + //Get CMsvEntrySelection object + CMsvEntrySelection* selection = entry->ChildrenL(); + CleanupStack::PushL(selection); + + TInt count = selection->Count(); + + if ( count > 0) + { + CMsvEntry* childEntry = aSession->GetEntryL(selection->At(0)); + CleanupStack::PushL(childEntry); + + for(TInt entryIndex = 0 ; entryIndex< count; entryIndex++) + { + childEntry->SetEntryL(selection->At(entryIndex)); + + if (childEntry->Entry().iDescription.Compare(aSubject) == 0) + { + messageId = selection->At(entryIndex); + break; + } + } + CleanupStack::PopAndDestroy(childEntry); + } + if(messageId == KMsvNullIndexEntryId) + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(2,entry); //selection,entry + return messageId; + } + +/** +SearchMessageBySubjectL() +This function searches for a message based on the subject +under the specified local folder. This fucntion provides the +flexibility of making the invisible children entries visible. + +@param aSession +A CMsvSession object + +@param afolderId +The folder Id under which the search needs to be done + +@param aSubject +The subject name of the message + +@leave KErrNotFound +Leaves if the message is not found + +@return +If the message is found it returns the message Id +*/ +EXPORT_C TMsvId CT_MsgUtils::SearchMessageBySubjectL(CMsvSession* aSession,TMsvId afolderId,TPtrC aSubject, TBool aVisibleFlag) + { + TMsvId messageId = KMsvNullIndexEntryId; + + CMsvEntry* entry = aSession->GetEntryL(afolderId); + CleanupStack::PushL(entry); + + // Set the entry to the source folder id + entry->SetEntryL(afolderId); + if(aVisibleFlag) + { + // Make the message entries visible + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + entry->SetSortTypeL(order); + } + + //Get CMsvEntrySelection object + CMsvEntrySelection* selection = entry->ChildrenL(); + CleanupStack::PushL(selection); + + TInt count = selection->Count(); + + if ( count > 0) + { + CMsvEntry* childEntry = aSession->GetEntryL(selection->At(0)); + CleanupStack::PushL(childEntry); + + for(TInt entryIndex = 0 ; entryIndex< count; entryIndex++) + { + childEntry->SetEntryL(selection->At(entryIndex)); + + if (childEntry->Entry().iDescription.Compare(aSubject) == 0) + { + messageId = selection->At(entryIndex); + break; + } + } + CleanupStack::PopAndDestroy(childEntry); + } + if(messageId == KMsvNullIndexEntryId) + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(2,entry); //selection,entry + return messageId; + } + +/** +CompareFilesL() +Compares two input files (ASCII & Unicode). + +@param aFileOne +The first file to be compared + +@param aFileTwo +The second file to be compared + +@param aIsUnicode +To check if its unicode + +@param aIgnoreCharList +An array of type CArrayFixFlat + +@param aDiffFlag +Flag to indicate the difference + +@return +Returns ETrue if the files are different. +*/ +EXPORT_C TInt CT_MsgUtils::CompareFilesL(TPtrC aFileOne, TPtrC aFileTwo, TBool aIsUnicode, + CArrayFixFlat* aIgnoreCharList, TBool& aDiffFlag) + { + // Return Code + TInt retCode = KErrNone; + + // Streams for the file1 and file2 to compare + RFileReadStream fileReadStream1; + RFileReadStream fileReadStream2; + + // Files difference flag + aDiffFlag = EFalse; + + RFs iFs; + User::LeaveIfError(iFs.Connect()); + + // Open file one to compare in the read only mode + retCode = fileReadStream1.Open( iFs, aFileOne, EFileShareReadersOnly); + + // If the file open of the first file is successful then open the second file, also in read only mode + if(retCode == KErrNone) + { + retCode = fileReadStream2.Open( iFs, aFileTwo, EFileShareReadersOnly); + + // The file open of the second file is successful + if(retCode == KErrNone) + { + // To hold the line content of file one + HBufC* lineOneBuffer = HBufC::NewLC(KDefBufferSize); + TPtr ptrLineOne = lineOneBuffer->Des(); + + // To hold the line content of file two + HBufC* lineTwoBuffer = HBufC::NewLC(KDefBufferSize); + TPtr ptrLineTwo = lineTwoBuffer->Des(); + + // End of File indicators + TBool eofOne = EFalse; + TBool eofTwo = EFalse; + + // Read the file one and file two data + do + { + // Read file one data + eofOne = ReadDataL(fileReadStream1, ptrLineOne, aIsUnicode, aIgnoreCharList); + + // Read file two data + eofTwo = ReadDataL(fileReadStream2, ptrLineTwo, aIsUnicode, aIgnoreCharList); + + // Check EOF state of the files. + // Either both the files will be in EOF state or + // none of the files will be in EOF state + if((!eofOne && !eofTwo)||(eofOne && eofTwo)) + { + // Compare the read lines from file one and the file two + if(ptrLineOne.Compare(ptrLineTwo) != 0) + { + // Different data content so set the differnce flag + aDiffFlag = ETrue; + } + } + else + { + // Different EOF + aDiffFlag = ETrue; + } + } while(!eofOne && !eofTwo && !aDiffFlag); + + // Delete line buffers + CleanupStack::PopAndDestroy(2, lineOneBuffer); + } + } + + // Close the open streams + fileReadStream1.Close(); + fileReadStream2.Close(); + + iFs.Close(); + // Return the difference flag + return retCode; + } + + +/** +ReadDataL() +Reads data chunk from the file stream. Returns ETrue if the EOF found + +@param aFileReadStream +File Stream + +@param aPtrLineBuffer +Buffer to hold a line + +@param aIsUnicode +To check if its unicode + +@param aIgnoreCharList +List of the characters to be ignored + +@leave KErrNotFound +Leaves if aIgnoreCharList is empty + +@return +Return end of file flag +*/ +EXPORT_C TBool CT_MsgUtils::ReadDataL(RFileReadStream& aFileReadStream, + TPtr& aPtrLineBuffer, TBool aIsUnicode, CArrayFixFlat* aIgnoreCharList) + { + TUint16 element = 0; + TKeyArrayFix key(0, ECmpTUint16); + TInt charPosition = 0; + TBool eof = EFalse; + TInt errorCode = KErrNone; + TUint8 aCharASCII = 0; + + aPtrLineBuffer.FillZ(); + aPtrLineBuffer.SetLength(0); + + // Validate the input ignore char list + if (!aIgnoreCharList) + { + // Invalid parameter passed to ReadDataL: No ignore char list passed + User::Leave(KErrNotFound); + } + + // Read data from file and store it in lineBuffer + do + { + if(aIsUnicode) + { + TRAP(errorCode, (element = aFileReadStream.ReadUint16L())); + } + else + { + TRAP(errorCode, (aCharASCII = aFileReadStream.ReadUint8L())); + element = (TUint16) aCharASCII; + } + + if (errorCode != KErrEof) + { + // Check the availability of ignore char in the array + if ( aIgnoreCharList->Find(element, key, charPosition) != KErrNone ) + { + // Append the char to the buffer if the read char is not ignore char + aPtrLineBuffer.Append(element); + } + } + else + { + eof = ETrue; + break; + } + + // Stop at the end of line or no more data + } while(aPtrLineBuffer.Length() < KDefBufferSize); + + // Return end of file flag + return eof; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsCentralRepository.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsCentralRepository.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,292 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +// User includes +#include + +// epoc includes +#include + +/** +CT_MsgUtilsCentralRepository() +Constructor +*/ +EXPORT_C CT_MsgUtilsCentralRepository::CT_MsgUtilsCentralRepository() + { + } + + +/** +~CT_MsgUtilsCentralRepository() +Destructor +*/ +CT_MsgUtilsCentralRepository::~CT_MsgUtilsCentralRepository() + { + } + + +/** +GetDefaultSmtpServiceIdL() +This function return the default Smtp Service Id. This method requires that a +related IMAP4 or POP3 account has been previously created in the central +repository - this is because SMTP accounts do not exist independently but only +as part of an IMAP4 or POP3 account + +@return +Entry ID of the default SMTP service entry +*/ +EXPORT_C TMsvId CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL() + { + CEmailAccounts* emailAccounts = CEmailAccounts::NewLC(); + + TSmtpAccount smtpAccount; + smtpAccount.iSmtpService = KMsvNullIndexEntryId; + User::LeaveIfError(emailAccounts->DefaultSmtpAccountL(smtpAccount)); + + CleanupStack::PopAndDestroy(emailAccounts); + + return smtpAccount.iSmtpService; + } + + +/** +GetImapServiceIdL() +This function returns the Service Id of the IMAP account with the specified name + +@param aName +The Imap account name + +@return +It returns entry Id of an IMAP service +*/ +EXPORT_C TMsvId CT_MsgUtilsCentralRepository::GetImapServiceIdL(TDes& aName) + { + TImapAccount imapAccount; + TMsvId imapServiceId = KMsvNullIndexEntryId; + + TBool returnValue = GetImapAccountL( aName, imapAccount ); + + if ( returnValue ) + { + imapServiceId = imapAccount.iImapService; + } + return imapServiceId; + } + + +/** +GetPopServiceIdL() +This function returns the Service Id of the POP account with the specified name + +@param aName +The Pop account name + +@return +Returns entry Id of an POP service +*/ +EXPORT_C TMsvId CT_MsgUtilsCentralRepository::GetPopServiceIdL(TDes& aName) + { + TPopAccount popAccount; + TMsvId popServiceId = KMsvNullIndexEntryId; + + TBool returnValue = GetPopAccountL( aName, popAccount ); + + if ( returnValue ) + { + popServiceId = popAccount.iPopService; + } + return popServiceId; + } + +/** +GetSmtpServiceIdL() +This function returns the Service Id of the SMTP account with the specified name + +@param aName +The Smtp account name + +@return +Returns entry Id of an SMTP service +*/ +EXPORT_C TMsvId CT_MsgUtilsCentralRepository::GetSmtpServiceIdL(TDes& aName) + { + TSmtpAccount smtpAccount; + TMsvId smtpServiceId = KMsvNullIndexEntryId; + + TBool returnValue = GetSmtpAccountL(aName, smtpAccount); + + if (returnValue) + { + smtpServiceId = smtpAccount.iSmtpService; + } + return smtpServiceId; + } + +/** +GetImapAccountL() +Searches the IMAP account with the specified name and +returns the TImapAccount oject associted to it. + +@param aName +The Imap account name + +@param aImapAccount +An object of type TImapAccount + +@leave KErrNotFound +Leaves if no account found with the supplied name. + +@return +ETrue if the account is found, else EFalse +*/ +EXPORT_C TBool CT_MsgUtilsCentralRepository::GetImapAccountL(TDes& aName, TImapAccount& aImapAccount ) + { + TImapAccount imapAccount; + imapAccount.iImapService = KMsvNullIndexEntryId; + + // Get the list of IMAP accounts + RArray accountIds; + + CEmailAccounts *emailAccounts = CEmailAccounts::NewLC(); + emailAccounts->GetImapAccountsL(accountIds); + + // Search for the account with the given name in the list of IMAP accounts + TBool accountFound = EFalse; + for( TInt index = 0; index < accountIds.Count(); index++) + { + TImapAccount tempAccount = accountIds[index]; + TPtrC accountPtr( tempAccount.iImapAccountName ); + + if( accountPtr.Compare(aName) == 0 ) + { + aImapAccount = tempAccount; + accountFound = ETrue; + break; + } + } + if(!accountFound) + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(emailAccounts); + accountIds.Reset(); + + return accountFound; + } + + +/** +GetPopAccountL() +Searches the POP account with the specified name and +returns the TPopAccount oject associted to it. + +@param aName +The Imap account name + +@param aPopAccount +An object of type TPopAccount + +@leave KErrNotFound +Leaves if no account found with the supplied name. + +@return +ETrue if the account is found, else EFalse +*/ +EXPORT_C TBool CT_MsgUtilsCentralRepository::GetPopAccountL(TDes& aName, TPopAccount& aPopAccount ) + { + TPopAccount popAccount; + popAccount.iPopService = KMsvNullIndexEntryId; + + // Get the list of POP accounts + RArray accountIds; + + CEmailAccounts *emailAccounts = CEmailAccounts::NewLC(); + emailAccounts->GetPopAccountsL(accountIds); + + // Search for the account with the given name in the list of POP accounts + TBool accountFound = EFalse; + for( TInt index = 0; index < accountIds.Count(); index++) + { + TPopAccount tempAccount = accountIds[index]; + TPtrC accountPtr( tempAccount.iPopAccountName ); + + if( accountPtr.Compare(aName) == 0 ) + { + aPopAccount = tempAccount; + accountFound = ETrue; + break; + } + } + if(!accountFound) + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(emailAccounts); + accountIds.Reset(); + + return accountFound; + } + +/** +GetSmtpAccountL() +Searches the SMTP account with the specified name and +returns the TSmtpAccount oject associted to it. + +@param aName +The Smtp account name + +@param aSmtpAccount +An object of type TSmtpAccount + +@leave KErrNotFound +Leaves if no account found with the supplied name. + +@return +ETrue if the account is found, else EFalse +*/ +EXPORT_C TBool CT_MsgUtilsCentralRepository::GetSmtpAccountL(TDes& aName, TSmtpAccount& aSmtpAccount) + { + TSmtpAccount smtpAccount; + smtpAccount.iSmtpService = KMsvNullIndexEntryId; + + // Get the list of SMTP accounts + RArray accountIds; + + CEmailAccounts *emailAccounts = CEmailAccounts::NewLC(); + emailAccounts->GetSmtpAccountsL(accountIds); + + // Search for the account with the given name in the list of SMTP accounts + TBool accountFound = EFalse; + for( TInt index = 0; index < accountIds.Count(); index++) + { + TSmtpAccount tempAccount = accountIds[index]; + TPtrC accountPtr( tempAccount.iSmtpAccountName ); + + if( accountPtr.Compare(aName) == 0 ) + { + aSmtpAccount = tempAccount; + accountFound = ETrue; + break; + } + } + if(!accountFound) + { + User::Leave(KErrNotFound); + } + CleanupStack::PopAndDestroy(emailAccounts); + accountIds.Reset(); + + return accountFound; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsConfigFileMachineName.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsConfigFileMachineName.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,157 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file +*/ + +// User include +#include + +// Epoc include +#include + + +//Literals used +_LIT(KFileName,"c:\\smoketest\\MachineName.txt"); +_LIT(KAtEmailAddress,"@msexchange2k.closedtest.intra"); + + +/** +NewL() +Allocates and creates a new CT_MsgConnectPop3Server object + +@param aPtrEmailAdd +@leave KErrNoMemory +@return +The newly created CT_MsgUtilsConfigFileMachineName object +*/ +EXPORT_C CT_MsgUtilsConfigFileMachineName* CT_MsgUtilsConfigFileMachineName::NewL(const TDesC& aPtrEmailAdd) + { + CT_MsgUtilsConfigFileMachineName* self = new (ELeave) CT_MsgUtilsConfigFileMachineName(); + CleanupStack::PushL(self); + self->ConstructL(aPtrEmailAdd); + CleanupStack::Pop(self); + return self; + } + + +/** +NewLC() +Allocates and creates a new CT_MsgUtilsConfigFileMachineName object, leaving the +object on the cleanup stack. + +@param aPtrEmailAdd +@leave KErrNoMemory +@return +The newly created CT_MsgUtilsConfigFileMachineName object +*/ +EXPORT_C CT_MsgUtilsConfigFileMachineName* CT_MsgUtilsConfigFileMachineName::NewLC(const TDesC& aPtrEmailAdd) + { + CT_MsgUtilsConfigFileMachineName* self = new (ELeave) CT_MsgUtilsConfigFileMachineName(); + CleanupStack::PushL(self); + self->ConstructL(aPtrEmailAdd); + return self; + } + + +/** +CT_MsgUtilsConfigFileMachineName() +Constructor +*/ +EXPORT_C CT_MsgUtilsConfigFileMachineName::CT_MsgUtilsConfigFileMachineName() + { + } + + +/** +ConstructL() +Reads the machine name from the Machine config file("c:\\smoketest\\MachineName.txt") +and constructs the data members. + +@param aPtrEmailAdd +*/ +EXPORT_C void CT_MsgUtilsConfigFileMachineName::ConstructL(const TDesC& aPtrEmailAdd) + { + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + RFile file; + User::LeaveIfError(file.Open(fs, KFileName, EFileRead)); + + CleanupClosePushL(file); + TInt fileSize; + User::LeaveIfError(file.Size(fileSize)); + iMachineName = HBufC8::NewL(fileSize); + TPtr8 bufferPtr = iMachineName->Des(); + User::LeaveIfError(file.Read(bufferPtr)); + + if (aPtrEmailAdd.Compare(_L("NONE"))==0) + iMachineNameEmail = HBufC::NewL(iMachineName->Length() + KAtEmailAddress.iTypeLength); + else + iMachineNameEmail = HBufC::NewL(iMachineName->Length() + aPtrEmailAdd.Length() + 1); + + iMachineNameEmail->Des().Copy(*iMachineName); + + if (aPtrEmailAdd.Compare(_L("NONE"))==0) + iMachineNameEmail->Des().Append(KAtEmailAddress); + else + { + iMachineNameEmail->Des().Append(_L("@")); + iMachineNameEmail->Des().Append(aPtrEmailAdd); + } + + + CleanupStack::PopAndDestroy(2,&fs); + } + + +/** +MachineNameEmail() +Returns an email address with the host machine name. + +@return +Email address of the machine +*/ +EXPORT_C const TDesC& CT_MsgUtilsConfigFileMachineName::MachineNameEmail() + { + return (*iMachineNameEmail); + } + + +/** +MachineName() +Returns the host machine name + +@return +Machine name +*/ +EXPORT_C const TDesC8& CT_MsgUtilsConfigFileMachineName::MachineName() + { + return (*iMachineName); + } + + +/** +~CT_MsgUtilsConfigFileMachineName() +Destructor +*/ +CT_MsgUtilsConfigFileMachineName::~CT_MsgUtilsConfigFileMachineName() + { + delete iMachineName; + delete iMachineNameEmail; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsConfigFileParserUtility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsConfigFileParserUtility.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,275 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the CPP file which contains utility functions for parsing the config file +// +// + + + +/** + @file +*/ + + +// User include +#include + +// epoc inlcude +#include + +// contants and literals used +const TInt KFileBufferSize = 1024; +_LIT8(KComment,"*#*"); + + +/** +NewL() +Allocates and creates a new CT_MsgUtilsConfigFileParserUtility object + +@param aFileName +Name of the file to be parsed + +@leave KErrNoMemory +@return +The newly created CT_MsgUtilsConfigFileParserUtility object +*/ +EXPORT_C CT_MsgUtilsConfigFileParserUtility* CT_MsgUtilsConfigFileParserUtility::NewL(const TDesC& aFileName) + { + CT_MsgUtilsConfigFileParserUtility* self = new (ELeave) CT_MsgUtilsConfigFileParserUtility(); + CleanupStack::PushL(self); + self->ConstructL(aFileName); + CleanupStack::Pop(); + return self; + } + + +/** +CT_MsgUtilsConfigFileParserUtility() +Constructor +*/ +EXPORT_C CT_MsgUtilsConfigFileParserUtility::CT_MsgUtilsConfigFileParserUtility() + { + } + + +/** +~CT_MsgUtilsConfigFileParserUtility() +Destructor +*/ +CT_MsgUtilsConfigFileParserUtility::~CT_MsgUtilsConfigFileParserUtility() + { + iName.ResetAndDestroy(); + iContent.ResetAndDestroy(); + iContent8.ResetAndDestroy(); + } + + +/** +ConstructL() +Parses a .txt file and creates Arrays of fields and there values + +@param aFileName +Name of the file to be parsed. +*/ +EXPORT_C void CT_MsgUtilsConfigFileParserUtility::ConstructL(const TDesC& aFileName) + { + RFs fileServerSession; + + fileServerSession.Connect(); + + RFile file; + User::LeaveIfError(file.Open(fileServerSession, aFileName, EFileRead)); + + TInt eof = EFalse; + TInt fileOffset = 0; + TBuf8 fileBuffer; + + while (!eof) + { + fileBuffer.SetLength(0); + User::LeaveIfError(file.Read(fileOffset, fileBuffer, KFileBufferSize)); + TInt read = fileBuffer.Length(); + + if (read < KFileBufferSize) + { + fileBuffer.Append('\n'); + eof = ETrue; + } + + TInt lineOverflow = fileBuffer.Locate('\n'); + + if ((lineOverflow == KErrNotFound) && (read == KFileBufferSize)) + { + User::Leave(KErrOverflow); + } + + TInt eol = EFalse; + + while (!eol) + { + TInt lineFeedLocation = fileBuffer.Locate('\n'); + + if (lineFeedLocation == KErrNotFound) + { + eol = ETrue; + } + + else + { + fileOffset += lineFeedLocation + 1; + TInt lineLength; + if ((lineFeedLocation != 0) && (fileBuffer[lineFeedLocation - 1] == '\r')) + { + lineLength = lineFeedLocation - 1; + } + + else + { + lineLength = lineFeedLocation; + } + + TPtrC8 line = fileBuffer.Left(lineLength); + TInt commentLocation = line.Match(KComment); + + if (commentLocation != KErrNotFound) + { + TPtrC8 skipComment = line.Left(commentLocation); + line.Set(skipComment); + } + + TInt seperatorLocation = line.Locate('='); + + if (seperatorLocation != KErrNotFound) + { + if ((seperatorLocation == 0) || (seperatorLocation == line.Length() - 1)) + { + seperatorLocation = KErrNotFound; + } + } + + if (seperatorLocation != KErrNotFound) + { + TPtrC8 namePtr = line.Left(seperatorLocation); + HBufC8* nameBuf8 = HBufC8::NewL(namePtr.Length()); + CleanupStack::PushL(nameBuf8); + + TPtr8 name8 = nameBuf8->Des(); + name8.Copy(namePtr); + name8.Trim(); + HBufC* nameBuf16 = HBufC::NewL(namePtr.Length()); + TPtr name16 = nameBuf16->Des(); + name16.Copy(name8); + iName.Append(nameBuf16); + CleanupStack::PopAndDestroy(nameBuf8); + + TPtrC8 contentPtr = line.Mid(seperatorLocation + 1); + HBufC8* contentBuf8 = HBufC8::NewL(contentPtr.Length()); + CleanupStack::PushL(contentBuf8); + TPtr8 content8 = contentBuf8->Des(); + content8.Copy(contentPtr); + content8.Trim(); + + HBufC* contentBuf16 = HBufC::NewL(contentPtr.Length()); + TPtr content16 = contentBuf16->Des(); + content16.Copy(content8); + iContent.Append(contentBuf16); + iContent8.Append(contentBuf8); + CleanupStack::Pop(contentBuf8); + } + TPtrC8 theRest = fileBuffer.Mid(lineFeedLocation + 1); + fileBuffer.Copy(theRest); + } + } + } + + file.Close(); + fileServerSession.Close(); + } + + +/** +GetFieldAsInteger() +Retrives the content of a field name and Interpret it as an integer. + +@param aFieldName +@param aValue +@return +Returns an integer corresponding to the field +*/ +EXPORT_C TInt CT_MsgUtilsConfigFileParserUtility::GetFieldAsInteger(const TDesC& aFieldName, TInt& aValue) + { + TInt count = iName.Count(); + + for (TInt i = 0; iCompare(aFieldName) == 0) + { + TPtrC content = iContent[i]->Des(); + TLex lex(content); + lex.Val(aValue); + return (KErrNone); + } + } + return (KErrNotFound); + } + + +/** +GetFieldAsString() +Retrives the content of a field name and Interpret it as an string + +@param aFieldName +@param aValue +@return +Returns an string corresponding to the field +*/ +EXPORT_C TInt CT_MsgUtilsConfigFileParserUtility::GetFieldAsString(const TDesC& aFieldName, TPtrC& aString) + { + TInt count = iName.Count(); + + for (TInt i = 0; iCompare(aFieldName) == 0) + { + aString.Set(*iContent[i]); + return (KErrNone); + } + } + return (KErrNotFound); + } + + +/** +GetFieldAsString8() +Retrives the content of a field name and Interpret it as an 8-bit descriptor + +@param aFieldName +@param aValue +@return +Returns an 8-bit descriptor corresponding to the field +*/ +EXPORT_C TInt CT_MsgUtilsConfigFileParserUtility::GetFieldAsString8(const TDesC& aFieldName, TPtrC8& aString) + { + TInt count = iName.Count(); + + for (TInt i = 0; iCompare(aFieldName) == 0) + { + aString.Set(*iContent8[i]); + return (KErrNone); + } + } + return (KErrNotFound); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsDeleteAllChildren.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsDeleteAllChildren.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,267 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the Cpp file which contains the utility functions to delete all children in the +// message store +// +// + + + +/** + @file +*/ + + +// User includes +#include + +// Epoc includes +#include +#include + +/** +CT_MsgUtilsDeleteAllChildren() +Constructor + +@param aSession +An object of CMsvSession + +@param aParentId +Entry ID of whose children would be deleted +*/ +EXPORT_C CT_MsgUtilsDeleteAllChildren::CT_MsgUtilsDeleteAllChildren(CMsvSession* aSession,TMsvId aParentId) +: CActive(EPriorityNormal), iSession(aSession), iParentId(aParentId) + { + CActiveScheduler::Add(this); + } + + +/** +~CT_MsgUtilsDeleteAllChildren() +Destructor +*/ +CT_MsgUtilsDeleteAllChildren::~CT_MsgUtilsDeleteAllChildren() + { + delete iEntry; + delete iSelection; + } + + +/** +StartL() +Deletes the children entries of the specified parent + +@param aStatus +*/ +EXPORT_C void CT_MsgUtilsDeleteAllChildren::StartL(TRequestStatus& aStatus) + { + StartL(EFalse, aStatus); + } + +/** +StartL() +Deletes the children entries of the specified parent + +@param aBlockDelete Delete all in one go +@param aStatus +*/ +EXPORT_C void CT_MsgUtilsDeleteAllChildren::StartL(TBool aBlockDelete, TRequestStatus& aStatus) + { + iRequestStatus = &aStatus; + aStatus = KRequestPending; + + // Creates a new CMsvEntry for the specified parent entry ID nad sets the context + // to that entry. + if(iEntry==NULL) + { + iEntry = CMsvEntry::NewL(*iSession,iParentId,TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue)); + } + iEntry->SetEntryL(iParentId); + + // Gets a selection containing the IDs of children + iSelection = iEntry->ChildrenL(); + iTotalChildren = iSelection->Count(); + + // If the entry has no children entries, then signals the thread that the asynchronous request + // is complete. + if (iTotalChildren == 0) + { + User::RequestComplete(iRequestStatus,KErrNone); + } + + + // If the entry has children entries then,delete child entries of the context + // recursively through all the descendants + else + { + if (aBlockDelete) + { + iOperation = iEntry->DeleteL(*iSelection ,iStatus); + iState = EBlockDelete; + } + else + { + iOperation = iEntry->DeleteL((*iSelection)[iCurrentChild],iStatus); + iState = EStateThisLevel; + } + + SetActive(); + } + } + + +/** +DoCancel() +Implements cancellation of an outstanding request + +@see CActive::Cancel() +*/ +void CT_MsgUtilsDeleteAllChildren::DoCancel() + { + switch (iState) + { + case EStateThisLevel: + case EBlockDelete: + iOperation->Cancel(); + break; + + case EStateNextLevel: + iNextLevel->Cancel(); + break; + } + } + + +/** +RunL() +Handles an active object's request completion event + +@see CActive::RunL() +*/ +void CT_MsgUtilsDeleteAllChildren::RunL() + { + TInt err; + + switch (iState) + { + case EStateThisLevel: + + err = CT_MsgUtilsDeleteAllChildren::FinalProgressStatus(*iOperation,iStatus); + delete iOperation; + iOperation = NULL; + + switch (err) + { + case KErrAccessDenied: + iUndeletedChildren++; + if(iNextLevel==NULL) + { + iNextLevel = new (ELeave) CT_MsgUtilsDeleteAllChildren(iSession,(*iSelection)[iCurrentChild]); + } + iNextLevel->StartL(iStatus); + SetActive(); + iState = EStateNextLevel; + break; + + case KErrNone: + if (++iCurrentChild == iTotalChildren) + { + User::RequestComplete(iRequestStatus,KErrNone); + } + else + { + iOperation = iEntry->DeleteL((*iSelection)[iCurrentChild],iStatus); + SetActive(); + } + break; + + default: + User::RequestComplete(iRequestStatus,err); + break; + } + break; + + case EStateNextLevel: + err = iStatus.Int(); + iUndeletedChildren += iNextLevel->Undeleted(); + delete iNextLevel; + iNextLevel = NULL; + + switch (err) + { + case KErrNone: + if (++iCurrentChild == iTotalChildren) + { + User::RequestComplete(iRequestStatus,KErrNone); + } + else + { + iOperation = iEntry->DeleteL((*iSelection)[iCurrentChild],iStatus); + SetActive(); + iState = EStateThisLevel; + } + break; + default: + User::RequestComplete(iRequestStatus,err); + break; + } + break; + + case EBlockDelete: + { + err = CT_MsgUtilsDeleteAllChildren::FinalProgressStatus(*iOperation,iStatus); + delete iOperation; + iOperation = NULL; + + User::RequestComplete(iRequestStatus,err); + break; + } + } + } + + +/** +FinalProgressStatus() +This function gets the information about a completed operation for the local entries.. + +@param aOperation +Used to get progress information about the operation + +@param aStatus +@return +The error code +*/ +EXPORT_C TInt CT_MsgUtilsDeleteAllChildren::FinalProgressStatus(CMsvOperation& aOperation,const TRequestStatus& aStatus) + { + TInt err = KErrNone; + + if (aOperation.Mtm() == KUidMsvLocalServiceMtm) + { + TPckgBuf progress; + progress.Copy(aOperation.FinalProgress()); + err = progress().iError; + } + else + { + if (iState == EBlockDelete) + { + TRAP_IGNORE(err = McliUtils::GetProgressErrorL(aOperation)); + } + else + { + err = aStatus.Int(); + } + } + return (err); + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsEnumConverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsEnumConverter.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,1462 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This file contains the utility functions to map a string to the corresponding enumerator values. +// +// + +// User includes +#include + +// epoc includes +#include +#include + +// Literals Used + +// Local Folder Ids +_LIT(KStrGlobalInBoxIndexEntryId,"KMsvGlobalInBoxIndexEntryId"); +_LIT(KStrGlobalOutBoxIndexEntryId,"KMsvGlobalOutBoxIndexEntryId"); +_LIT(KStrSentEntryId,"KMsvSentEntryId"); +_LIT(KStrDraftEntryId,"KMsvDraftEntryId"); +_LIT(KStrDeletedEntryFolderEntryId,"KMsvDeletedEntryFolderEntryId"); +_LIT(KStrRootIndexEntryId,"KMsvRootIndexEntryId"); +_LIT(KStrTempIndexEntryId,"KMsvTempIndexEntryId"); +_LIT(KStrLocalServiceIndexEntryId,"KMsvLocalServiceIndexEntryId"); +_LIT(KStrUnknownServiceIndexEntryId,"KMsvUnknownServiceIndexEntryId"); +_LIT(KStrFirstFreeEntryId,"KFirstFreeEntryId"); + + +//Pop3 Specific Commands +_LIT(KStrPOP3MTMIsConnected, "KPOP3MTMIsConnected"); +_LIT(KStrPOP3MTMConnect,"KPOP3MTMConnect"); +_LIT(KStrPOP3MTMDisconnect,"KPOP3MTMDisconnect"); +_LIT(KStrPOP3MTMCopyNewMailWhenAlreadyConnected,"KPOP3MTMCopyNewMailWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndCopyNewMailAndStayOnline,"KPOP3MTMConnectAndCopyNewMailAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndCopyNewMailAndDisconnect,"KPOP3MTMConnectAndCopyNewMailAndDisconnect"); +_LIT(KStrPOP3MTMMoveNewMailWhenAlreadyConnected,"KPOP3MTMMoveNewMailWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndMoveNewMailAndStayOnline,"KPOP3MTMConnectAndMoveNewMailAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndMoveNewMailAndDisconnect,"KPOP3MTMConnectAndMoveNewMailAndDisconnect"); +_LIT(KStrPOP3MTMCopyMailSelectionWhenAlreadyConnected,"KPOP3MTMCopyMailSelectionWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndCopyMailSelectionAndStayOnline,"KPOP3MTMConnectAndCopyMailSelectionAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndCopyMailSelectionAndDisconnect,"KPOP3MTMConnectAndCopyMailSelectionAndDisconnect"); +_LIT(KStrPOP3MTMMoveMailSelectionWhenAlreadyConnected,"KPOP3MTMMoveMailSelectionWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndMoveMailSelectionAndStayOnline,"KPOP3MTMConnectAndMoveMailSelectionAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndMoveMailSelectionAndDisconnect,"KPOP3MTMConnectAndMoveMailSelectionAndDisconnect"); +_LIT(KStrPOP3MTMCopyAllMailWhenAlreadyConnected,"KPOP3MTMCopyAllMailWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndCopyAllMailAndStayOnline,"KPOP3MTMConnectAndCopyAllMailAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndCopyAllMailAndDisconnect,"KPOP3MTMConnectAndCopyAllMailAndDisconnect"); +_LIT(KStrPOP3MTMMoveAllMailWhenAlreadyConnected,"KPOP3MTMMoveAllMailWhenAlreadyConnected"); +_LIT(KStrPOP3MTMConnectAndMoveAllMailAndStayOnline,"KPOP3MTMConnectAndMoveAllMailAndStayOnline"); +_LIT(KStrPOP3MTMConnectAndMoveAllMailAndDisconnect,"KPOP3MTMConnectAndMoveAllMailAndDisconnect"); +_LIT(KStrPOP3MTMCancelOfflineOperations,"KPOP3MTMCancelOfflineOperations"); +_LIT(KStrPOP3MTMCancelSendOnNextConnection,"KPOP3MTMCancelSendOnNextConnection"); +_LIT(KStrPOP3MTMCreateNewEmailMessage,"KPOP3MTMCreateNewEmailMessage"); +_LIT(KStrPOP3MTMCreateReplyEmailMessage,"KPOP3MTMCreateReplyEmailMessage"); +_LIT(KStrPOP3MTMCreateForwardEmailMessage,"KPOP3MTMCreateForwardEmailMessage"); +_LIT(KStrPOP3MTMCreateForwardAsAttachmentEmailMessage,"KPOP3MTMCreateForwardAsAttachmentEmailMessage"); +_LIT(KStrPOP3MTMCreateReceiptEmailMessage,"KPOP3MTMCreateReceiptEmailMessage"); +_LIT(KStrPOP3MTMPopulate,"KPOP3MTMPopulate"); +_LIT(KStrPOP3MTMPopulateNew,"KPOP3MTMPopulateNew"); +_LIT(KStrPOP3MTMPopulateAll,"KPOP3MTMPopulateAll"); + + +// TImapCmds specific Enumerations +_LIT(KStrIMAP4MTMIsConnected, "KIMAP4MTMIsConnected"); +_LIT(KStrIMAP4MTMConnect, "KIMAP4MTMConnect"); +_LIT(KStrIMAP4MTMConnectAndSynchronise, "KIMAP4MTMConnectAndSynchronise"); +_LIT(KStrIMAP4MTMCancelBackgroundSynchronise, "KIMAP4MTMCancelBackgroundSynchronise"); +_LIT(KStrIMAP4MTMStartBatch, "KIMAP4MTMStartBatch"); +_LIT(KStrIMAP4MTMEndBatch, "KIMAP4MTMEndBatch"); +_LIT(KStrIMAP4MTMBusy, "KIMAP4MTMBusy"); +_LIT(KStrIMAP4MTMSelect, "KIMAP4MTMSelect"); +_LIT(KStrIMAP4MTMSynchronise, "KIMAP4MTMSynchronise"); +_LIT(KStrIMAP4MTMSyncTree, "KIMAP4MTMSyncTree"); +_LIT(KStrIMAP4MTMReserved10, "KIMAP4MTMReserved10"); +_LIT(KStrIMAP4MTMFullSync, "KIMAP4MTMFullSync"); +_LIT(KStrIMAP4MTMDisconnect, "KIMAP4MTMDisconnect"); +_LIT(KStrIMAP4MTMLocalSubscribe, "KIMAP4MTMLocalSubscribe"); +_LIT(KStrIMAP4MTMLocalUnsubscribe, "KIMAP4MTMLocalUnsubscribe"); +_LIT(KStrIMAP4MTMReserved15, "KIMAP4MTMReserved15"); +_LIT(KStrIMAP4MTMReserved16, "KIMAP4MTMReserved16"); +_LIT(KStrIMAP4MTMInboxNewSync, "KIMAP4MTMInboxNewSync"); +_LIT(KStrIMAP4MTMFolderFullSync, "KIMAP4MTMFolderFullSync"); +_LIT(KStrIMAP4MTMWaitForBackground, "KIMAP4MTMWaitForBackground"); +_LIT(KStrIMAP4MTMRenameFolder, "KIMAP4MTMRenameFolder"); +_LIT(KStrIMAP4MTMUndeleteAll, "KIMAP4MTMUndeleteAll"); +_LIT(KStrIMAP4MTMCancelOffLineOperations, "KIMAP4MTMCancelOffLineOperations"); +_LIT(KStrIMAP4MTMPopulate, "KIMAP4MTMPopulate"); +_LIT(KStrIMAP4MTMSyncSubscription, "KIMAP4MTMSyncSubscription"); +_LIT(KStrIMAP4MTMConnectAndSyncCompleteAfterConnect, "KIMAP4MTMConnectAndSyncCompleteAfterConnect"); +_LIT(KStrIMAP4MTMConnectAndSyncCompleteAfterFullSync, "KIMAP4MTMConnectAndSyncCompleteAfterFullSync"); +_LIT(KStrIMAP4MTMConnectAndSyncCompleteAfterDisconnect, "KIMAP4MTMConnectAndSyncCompleteAfterDisconnect"); +_LIT(KStrIMAP4MTMCancelSendOnNextConnection, "KIMAP4MTMCancelSendOnNextConnection"); +_LIT(KStrIMAP4MTMCopyNewMailWhenAlreadyConnected, "KIMAP4MTMCopyNewMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndCopyNewMailAndStayOnline, "KIMAP4MTMConnectAndCopyNewMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndCopyNewMailAndDisconnect, "KIMAP4MTMConnectAndCopyNewMailAndDisconnect"); +_LIT(KStrIMAP4MTMMoveNewMailWhenAlreadyConnected, "KIMAP4MTMMoveNewMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndMoveNewMailAndStayOnline, "KIMAP4MTMConnectAndMoveNewMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndMoveNewMailAndDisconnect, "KIMAP4MTMConnectAndMoveNewMailAndDisconnect"); +_LIT(KStrIMAP4MTMCopyMailSelectionWhenAlreadyConnected, "KIMAP4MTMCopyMailSelectionWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndCopyMailSelectionAndStayOnline, "KIMAP4MTMConnectAndCopyMailSelectionAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndCopyMailSelectionAndDisconnect, "KIMAP4MTMConnectAndCopyMailSelectionAndDisconnect"); +_LIT(KStrIMAP4MTMMoveMailSelectionWhenAlreadyConnected, "KIMAP4MTMMoveMailSelectionWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndMoveMailSelectionAndStayOnline, "KIMAP4MTMConnectAndMoveMailSelectionAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndMoveMailSelectionAndDisconnect, "KIMAP4MTMConnectAndMoveMailSelectionAndDisconnect"); +_LIT(KStrIMAP4MTMCopyAllMailWhenAlreadyConnected, "KIMAP4MTMCopyAllMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndCopyAllMailAndStayOnline, "KIMAP4MTMConnectAndCopyAllMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndCopyAllMailAndDisconnect, "KIMAP4MTMConnectAndCopyAllMailAndDisconnect"); +_LIT(KStrIMAP4MTMMoveAllMailWhenAlreadyConnected, "KIMAP4MTMMoveAllMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndMoveAllMailAndStayOnline, "KIMAP4MTMConnectAndMoveAllMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndMoveAllMailAndDisconnect, "KIMAP4MTMConnectAndMoveAllMailAndDisconnect"); +_LIT(KStrIMAP4MTMPopulateMailSelectionWhenAlreadyConnected, "KIMAP4MTMPopulateMailSelectionWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndPopulateMailSelectionAndStayOnline, "KIMAP4MTMConnectAndPopulateMailSelectionAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndPopulateMailSelectionAndDisconnect, "KIMAP4MTMConnectAndPopulateMailSelectionAndDisconnect"); +_LIT(KStrIMAP4MTMPopulateNewMailWhenAlreadyConnected, "KIMAP4MTMPopulateNewMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMPopulateAllMailWhenAlreadyConnected, "KIMAP4MTMPopulateAllMailWhenAlreadyConnected"); +_LIT(KStrIMAP4MTMConnectAndPopulateNewMailAndStayOnline, "KIMAP4MTMConnectAndPopulateNewMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndPopulateNewMailAndDisconnect, "KIMAP4MTMConnectAndPopulateNewMailAndDisconnect"); +_LIT(KStrIMAP4MTMConnectAndPopulateAllMailAndStayOnline, "KIMAP4MTMConnectAndPopulateAllMailAndStayOnline"); +_LIT(KStrIMAP4MTMConnectAndPopulateAllMailAndDisconnect, "KIMAP4MTMConnectAndPopulateAllMailAndDisconnect"); +_LIT(KStrIMAP4MTMCreateNewEmailMessage, "KIMAP4MTMCreateNewEmailMessage"); +_LIT(KStrIMAP4MTMCreateReplyEmailMessage, "KIMAP4MTMCreateReplyEmailMessage"); +_LIT(KStrIMAP4MTMCreateForwardEmailMessage, "KIMAP4MTMCreateForwardEmailMessage"); +_LIT(KStrIMAP4MTMCreateForwardAsAttachmentEmailMessage, "KIMAP4MTMCreateForwardAsAttachmentEmailMessage"); +_LIT(KStrIMAP4MTMCreateReceiptEmailMessage, "KIMAP4MTMCreateReceiptEmailMessage"); + + +// TSmtpCmds specific Enumerations +_LIT(KStrSMTPMTMCreateNewEmailMessage, "KSMTPMTMCreateNewEmailMessage"); +_LIT(KStrSMTPMTMCreateReplyEmailMessage, "KSMTPMTMCreateReplyEmailMessage"); +_LIT(KStrSMTPMTMCreateForwardEmailMessage, "KSMTPMTMCreateForwardEmailMessage"); +_LIT(KStrSMTPMTMCreateForwardAsAttachmentEmailMessage, "KSMTPMTMCreateForwardAsAttachmentEmailMessage"); +_LIT(KStrSMTPMTMCreateReceiptEmailMessage, "KSMTPMTMCreateReceiptEmailMessage"); +_LIT(KStrSMTPMTMSendOnNextConnection, "KSMTPMTMSendOnNextConnection"); + +// DownloadType specific Enumerations +//_LIT(KStrPartialDownload,"PartialDownload"); +//_LIT(KStrFullDownload,"FullDownload"); + + +// TCommDbDialogPref specific Enumerations +//_LIT(KStrECommDbDialogPrefUnknown, "TCommDbDialogPref::ECommDbDialogPrefUnknown"); +_LIT(KStrECommDbDialogPrefPrompt, "TCommDbDialogPref::ECommDbDialogPrefPrompt"); +_LIT(KStrECommDbDialogPrefWarn, "TCommDbDialogPref::ECommDbDialogPrefWarn"); +_LIT(KStrECommDbDialogPrefDoNotPrompt,"TCommDbDialogPref::ECommDbDialogPrefDoNotPrompt"); +_LIT(KStrECommDbDialogPrefPromptIfWrongMode, "TCommDbDialogPref::ECommDbDialogPrefPromptIfWrongMode"); + + +// TImap4GetMailOptions specific Enumerations +//_LIT(KStrEGetImap4EmailHeaders, "TImap4GetMailOptions::EGetImap4EmailHeaders"); +_LIT(KStrEGetImap4EmailBodyText, "TImap4GetMailOptions::EGetImap4EmailBodyText"); +_LIT(KStrEGetImap4EmailBodyTextAndAttachments, "TImap4GetMailOptions::EGetImap4EmailBodyTextAndAttachments"); +_LIT(KStrEGetImap4EmailAttachments, "TImap4GetMailOptions::EGetImap4EmailAttachments"); +_LIT(KStrEGetImap4EmailBodyAlternativeText, "TImap4GetMailOptions::EGetImap4EmailBodyAlternativeText"); + + +// TFolderSyncType specific Enumerations +_LIT(KStrEUseCombination, "TFolderSyncType::EUseCombination"); +_LIT(KStrEUseLocal, "TFolderSyncType::EUseLocal"); +//_LIT(KStrEUseRemote, "TFolderSyncType::EUseRemote"); + + +// TFolderSubscribeType specific Enumerations +//_LIT(KStrEUpdateNeither, "TFolderSubscribeType::EUpdateNeither"); +_LIT(KStrEUpdateLocal, "TFolderSubscribeType::EUpdateLocal"); +_LIT(KStrEUpdateRemote, "TFolderSubscribeType::EUpdateRemote"); +_LIT(KStrEUpdateBoth, "TFolderSubscribeType::EUpdateBoth"); + + +// TImImap4PartialMailOptions specific Enumerations +//_LIT(KStrENoSizeLimits, "TImImap4PartialMailOptions::ENoSizeLimits"); +_LIT(KStrEBodyTextOnly, "TImImap4PartialMailOptions::EBodyTextOnly"); +_LIT(KStrEAttachmentsOnly, "TImImap4PartialMailOptions::EAttachmentsOnly"); +_LIT(KStrEBodyTextAndAttachments, "TImImap4PartialMailOptions::EBodyTextAndAttachments"); +_LIT(KStrECumulative, "TImImap4PartialMailOptions::ECumulative"); +_LIT(KStrEBodyAlternativeText, "TImImap4PartialMailOptions::EBodyAlternativeText"); + + +// TMsgOutboxBodyEncoding specific Enumerations +//_LIT(KStrEMsgOutboxDefault, "TMsgOutboxBodyEncoding::EMsgOutboxDefault"); +_LIT(KStrEMsgOutboxNoAlgorithm, "TMsgOutboxBodyEncoding::EMsgOutboxNoAlgorithm"); +_LIT(KStrEMsgOutboxMIME, "TMsgOutboxBodyEncoding::EMsgOutboxMIME"); +_LIT(KStrEMsgOutboxMHTMLAsMIME, "TMsgOutboxBodyEncoding::EMsgOutboxMHTMLAsMIME"); +_LIT(KStrEMsgOutboxMHTMLAlternativeAsMIME, "TMsgOutboxBodyEncoding::EMsgOutboxMHTMLAlternativeAsMIME"); + + +// TImSMTPSendMessageOption specific Enumerations +//_LIT(KStrESendMessageImmediately , "TImSMTPSendMessageOption::ESendMessageImmediately "); +_LIT(KStrESendMessageOnNextConnection, "TImSMTPSendMessageOption::ESendMessageOnNextConnection"); +_LIT(KStrESendMessageOnRequest, "TImSMTPSendMessageOption::ESendMessageOnRequest"); + + +// TImSMTPSendCopyToSelf specific Enumerations +//_LIT(KStrESendNoCopy, "TImSMTPSendCopyToSelf::ESendNoCopy"); +_LIT(KStrESendCopyAsToRecipient, "TImSMTPSendCopyToSelf::ESendCopyAsToRecipient"); +_LIT(KStrESendCopyAsCcRecipient, "TImSMTPSendCopyToSelf::ESendCopyAsCcRecipient"); +_LIT(KStrESendCopyAsBccRecipient, "TImSMTPSendCopyToSelf::ESendCopyAsBccRecipient"); + + +// TPop3GetMailOptions specific Enumerations +//_LIT(KStrEGetPop3EmailHeaders , "TPop3GetMailOptions::EGetPop3EmailHeaders"); +_LIT(KStrEGetPop3EmailMessages, "TPop3GetMailOptions::EGetPop3EmailMessages"); + + +// RAM Usage Logging Eventcodes +_LIT(KStrImapRamUsageStart, "TInstrumentationPoint::EImapRamUsageStart"); +_LIT(KStrImapRamUsageStop, "TInstrumentationPoint::EImapRamUsageStop"); +_LIT(KStrPopRamUsageStart, "TInstrumentationPoint::EPopRamUsageStart"); +_LIT(KStrPopRamUsageStop, "TInstrumentationPoint::EPopRamUsageStop"); +_LIT(KStrSmtpRamUsageStart, "TInstrumentationPoint::ESmtpRamUsageStart"); +_LIT(KStrSmtpRamUsageStop, "TInstrumentationPoint::ESmtpRamUsageStop"); +_LIT(KStrSmtpRamUsageCreateMessageStart, "TInstrumentationPoint::ESmtpRamUsageCreateMessageStart"); +_LIT(KStrSmtpRamUsageCreateMessageStop, "TInstrumentationPoint::ESmtpRamUsageCreateMessageStop"); +_LIT(KStrSmtpRamUsageSendMessageStart, "TInstrumentationPoint::ESmtpRamUsageSendMessageStart"); +_LIT(KStrSmtpRamUsageSendMessageStop, "TInstrumentationPoint::ESmtpRamUsageSendMessageStop"); +_LIT(KStrSmtpCreateMessageSpeedStart, "TInstrumentationPoint::ESmtpCreateMessageSpeedStart"); +_LIT(KStrSmtpCreateMessageSpeedStop, "TInstrumentationPoint::ESmtpCreateMessageSpeedStop"); +_LIT(KStrSmtpSendMessageSpeedStart, "TInstrumentationPoint::ESmtpSendMessageSpeedStart"); +_LIT(KStrSmtpSendMessageSpeedStop, "TInstrumentationPoint::ESmtpSendMessageSpeedStop"); +_LIT(KStrImapDownloadMessageSpeedStart, "TInstrumentationPoint::EImapDownloadMessageSpeedStart"); +_LIT(KStrImapDownloadMessageSpeedStop, "TInstrumentationPoint::EImapDownloadMessageSpeedStop"); + +// Bearer types +_LIT(KStrBearerTypeUnknown, "Unknown"); +_LIT(KStrBearerTypeCsd, "CSD"); +_LIT(KStrBearerTypeWcdma, "Wcdma"); +_LIT(KStrBearerTypeLan, "LAN"); +_LIT(KStrBearerTypeCdma2000, "Cdma2000"); +_LIT(KStrBearerTypeVirtual, "Virtual"); +_LIT(KStrBearerTypePan, "PAN"); +_LIT(KStrBearerTypeWlan, "WLAN"); +_LIT(KStrBearerTypePsd, "PSD"); +_LIT(KStrBearerTypeCsdLan, "CSDLAN"); + +/** +CT_MsgUtilsEnumConverter() +Constructor +*/ +EXPORT_C CT_MsgUtilsEnumConverter::CT_MsgUtilsEnumConverter() + { + } + +/** +~CT_MsgUtilsEnumConverter() +Destructor +*/ +CT_MsgUtilsEnumConverter::~CT_MsgUtilsEnumConverter() + { + } + + +/** +FindFolderIdByName() +Returns the ID of the local folder based on the folder name. +If the folder name given does not match then it returns -1. + +@param aFolderName +Folder name whose ID need to be returned. Folder name is assumed to be in string form +of the standard folder ID. Eg., GlobalInBoxIndexEntryId + +@return +ID of the folder +*/ +EXPORT_C TMsvId CT_MsgUtilsEnumConverter::FindFolderIdByName(TDesC& aFolderName) + { + TMsvId folderId; + + STR_SWITCH(aFolderName) + + STR_CASE(KStrGlobalInBoxIndexEntryId) + { + folderId = KMsvGlobalInBoxIndexEntryId; + break; + } + STR_CASE(KStrGlobalOutBoxIndexEntryId) + { + folderId = KMsvGlobalOutBoxIndexEntryId; + break; + } + STR_CASE(KStrSentEntryId) + { + folderId = KMsvSentEntryId; + break; + } + STR_CASE(KStrDraftEntryId) + { + folderId = KMsvDraftEntryId; + break; + } + STR_CASE(KStrDeletedEntryFolderEntryId) + { + folderId = KMsvDeletedEntryFolderEntryId; + break; + } + STR_CASE(KStrRootIndexEntryId) + { + folderId = KMsvRootIndexEntryId; + break; + } + STR_CASE(KStrTempIndexEntryId) + { + folderId = KMsvTempIndexEntryId; + break; + } + STR_CASE(KStrLocalServiceIndexEntryId) + { + folderId = KMsvLocalServiceIndexEntryId; + break; + } + STR_CASE(KStrUnknownServiceIndexEntryId) + { + folderId = KMsvUnknownServiceIndexEntryId; + break; + } + STR_CASE(KStrFirstFreeEntryId) + { + folderId = KFirstFreeEntryId; + break; + } + DEFAULT_CASE() // match not found + { + folderId = KErrNotFound; + } + + STR_SWITCH_END() + + return folderId; + } + + +/** +ConvertDesToTPop3Cmds() +Returns the corresponding Pop3 Command + +@param aPopCmdName +POP command name + +@return +POP3-specific commands +*/ +EXPORT_C TPop3Cmds CT_MsgUtilsEnumConverter::ConvertDesToTPop3Cmds(const TDesC& aPopCmdName) + { + TPop3Cmds ret = KPOP3MTMConnect; + + STR_SWITCH(aPopCmdName) + + STR_CASE(KStrPOP3MTMIsConnected) + { + ret = KPOP3MTMIsConnected; + break; + } + STR_CASE(KStrPOP3MTMConnect) + { + ret = KPOP3MTMConnect; + break; + } + STR_CASE(KStrPOP3MTMDisconnect ) + { + ret = KPOP3MTMDisconnect; + break; + } + STR_CASE(KStrPOP3MTMCopyNewMailWhenAlreadyConnected ) + { + ret = KPOP3MTMCopyNewMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyNewMailAndStayOnline) + { + ret = KPOP3MTMConnectAndCopyNewMailAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyNewMailAndDisconnect) + { + ret = KPOP3MTMConnectAndCopyNewMailAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMMoveNewMailWhenAlreadyConnected) + { + ret = KPOP3MTMMoveNewMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveNewMailAndStayOnline) + { + ret = KPOP3MTMConnectAndMoveNewMailAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveNewMailAndDisconnect) + { + ret = KPOP3MTMConnectAndMoveNewMailAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMCopyMailSelectionWhenAlreadyConnected) + { + ret = KPOP3MTMCopyMailSelectionWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyMailSelectionAndStayOnline) + { + ret = KPOP3MTMConnectAndCopyMailSelectionAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyMailSelectionAndDisconnect) + { + ret = KPOP3MTMConnectAndCopyMailSelectionAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMMoveMailSelectionWhenAlreadyConnected) + { + ret = KPOP3MTMMoveMailSelectionWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveMailSelectionAndStayOnline) + { + ret = KPOP3MTMConnectAndMoveMailSelectionAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveMailSelectionAndDisconnect) + { + ret = KPOP3MTMConnectAndMoveMailSelectionAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMCopyAllMailWhenAlreadyConnected) + { + ret = KPOP3MTMCopyAllMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyAllMailAndStayOnline) + { + ret = KPOP3MTMConnectAndCopyAllMailAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndCopyAllMailAndDisconnect) + { + ret = KPOP3MTMConnectAndCopyAllMailAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMMoveAllMailWhenAlreadyConnected) + { + ret = KPOP3MTMMoveAllMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveAllMailAndStayOnline) + { + ret = KPOP3MTMConnectAndMoveAllMailAndStayOnline; + break; + } + STR_CASE(KStrPOP3MTMConnectAndMoveAllMailAndDisconnect) + { + ret = KPOP3MTMConnectAndMoveAllMailAndDisconnect; + break; + } + STR_CASE(KStrPOP3MTMCancelOfflineOperations) + { + ret = KPOP3MTMCancelOfflineOperations; + break; + } + STR_CASE(KStrPOP3MTMCancelSendOnNextConnection) + { + ret = KPOP3MTMCancelSendOnNextConnection; + break; + } + STR_CASE(KStrPOP3MTMCreateNewEmailMessage) + { + ret = KPOP3MTMCreateNewEmailMessage; + break; + } + STR_CASE(KStrPOP3MTMCreateReplyEmailMessage) + { + ret = KPOP3MTMCreateReplyEmailMessage; + break; + } + STR_CASE(KStrPOP3MTMCreateForwardEmailMessage) + { + ret = KPOP3MTMCreateForwardEmailMessage; + break; + } + STR_CASE(KStrPOP3MTMCreateForwardAsAttachmentEmailMessage) + { + ret = KPOP3MTMCreateForwardAsAttachmentEmailMessage; + break; + } + STR_CASE(KStrPOP3MTMCreateReceiptEmailMessage) + { + ret = KPOP3MTMCreateReceiptEmailMessage; + break; + } + STR_CASE(KStrPOP3MTMPopulate) + { + ret = KPOP3MTMPopulate; + break; + } + STR_CASE(KStrPOP3MTMPopulateNew) + { + ret = KPOP3MTMPopulateNew; + break; + } + STR_CASE(KStrPOP3MTMPopulateAll) + { + ret = KPOP3MTMPopulateAll; + break; + } + + DEFAULT_CASE() + { + ret = KPOP3MTMConnect; + } + + STR_SWITCH_END() + + return ret; + } + + +/** +ConvertDesToTImap4Cmds() +Returns the corresponding IMAP4 Command + +@param aImapCmdName +IMAP command name + +@return +IMAP4-specific commands +*/ +EXPORT_C TImap4Cmds CT_MsgUtilsEnumConverter::ConvertDesToTImap4Cmds(TDesC& aImapCmdName) + { + TImap4Cmds ret; + STR_SWITCH(aImapCmdName) + + STR_CASE(KStrIMAP4MTMIsConnected) + { + ret = KIMAP4MTMIsConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnect) + { + ret = KIMAP4MTMConnect; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndSynchronise) + { + ret = KIMAP4MTMConnectAndSynchronise; + break; + } + STR_CASE(KStrIMAP4MTMCancelBackgroundSynchronise) + { + ret = KIMAP4MTMCancelBackgroundSynchronise; + break; + } + STR_CASE(KStrIMAP4MTMStartBatch) + { + ret = KIMAP4MTMStartBatch; + break; + } + STR_CASE(KStrIMAP4MTMEndBatch) + { + ret = KIMAP4MTMEndBatch; + break; + } + STR_CASE(KStrIMAP4MTMBusy) + { + ret = KIMAP4MTMBusy; + break; + } + STR_CASE(KStrIMAP4MTMSelect) + { + ret = KIMAP4MTMSelect; + break; + } + STR_CASE(KStrIMAP4MTMSynchronise) + { + ret = KIMAP4MTMSynchronise; + break; + } + STR_CASE(KStrIMAP4MTMSyncTree) + { + ret = KIMAP4MTMSyncTree; + break; + } + STR_CASE(KStrIMAP4MTMReserved10) + { + ret = KIMAP4MTMReserved10; + break; + } + STR_CASE(KStrIMAP4MTMFullSync) + { + ret = KIMAP4MTMFullSync; + break; + } + STR_CASE(KStrIMAP4MTMDisconnect) + { + ret = KIMAP4MTMDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMLocalSubscribe) + { + ret = KIMAP4MTMLocalSubscribe; + break; + } + STR_CASE(KStrIMAP4MTMLocalUnsubscribe) + { + ret = KIMAP4MTMLocalUnsubscribe; + break; + } + STR_CASE(KStrIMAP4MTMReserved15) + { + ret = KIMAP4MTMReserved15; + break; + } + STR_CASE(KStrIMAP4MTMReserved16) + { + ret = KIMAP4MTMReserved16; + break; + } + STR_CASE(KStrIMAP4MTMInboxNewSync) + { + ret = KIMAP4MTMInboxNewSync; + break; + } + STR_CASE(KStrIMAP4MTMFolderFullSync) + { + ret = KIMAP4MTMFolderFullSync; + break; + } + STR_CASE(KStrIMAP4MTMWaitForBackground) + { + ret = KIMAP4MTMWaitForBackground; + break; + } + STR_CASE(KStrIMAP4MTMRenameFolder) + { + ret = KIMAP4MTMRenameFolder; + break; + } + STR_CASE(KStrIMAP4MTMUndeleteAll) + { + ret = KIMAP4MTMUndeleteAll; + break; + } + + STR_CASE(KStrIMAP4MTMCancelOffLineOperations) + { + ret = KIMAP4MTMCancelOffLineOperations; + break; + } + STR_CASE(KStrIMAP4MTMPopulate) + { + ret = KIMAP4MTMPopulate; + break; + } + STR_CASE(KStrIMAP4MTMSyncSubscription) + { + ret = KIMAP4MTMSyncSubscription; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndSyncCompleteAfterConnect) + { + ret = KIMAP4MTMConnectAndSyncCompleteAfterConnect; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndSyncCompleteAfterFullSync) + { + ret = KIMAP4MTMConnectAndSyncCompleteAfterFullSync; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndSyncCompleteAfterDisconnect) + { + ret = KIMAP4MTMConnectAndSyncCompleteAfterDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMCancelSendOnNextConnection) + { + ret = KIMAP4MTMCancelSendOnNextConnection; + break; + } + STR_CASE(KStrIMAP4MTMCopyNewMailWhenAlreadyConnected) + { + ret = KIMAP4MTMCopyNewMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyNewMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndCopyNewMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyNewMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndCopyNewMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMMoveNewMailWhenAlreadyConnected) + { + ret = KIMAP4MTMMoveNewMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveNewMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndMoveNewMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveNewMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndMoveNewMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMCopyMailSelectionWhenAlreadyConnected) + { + ret = KIMAP4MTMCopyMailSelectionWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyMailSelectionAndStayOnline) + { + ret = KIMAP4MTMConnectAndCopyMailSelectionAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyMailSelectionAndDisconnect) + { + ret = KIMAP4MTMConnectAndCopyMailSelectionAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMMoveMailSelectionWhenAlreadyConnected) + { + ret = KIMAP4MTMMoveMailSelectionWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveMailSelectionAndStayOnline) + { + ret = KIMAP4MTMConnectAndMoveMailSelectionAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveMailSelectionAndDisconnect) + { + ret = KIMAP4MTMConnectAndMoveMailSelectionAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMCopyAllMailWhenAlreadyConnected) + { + ret = KIMAP4MTMCopyAllMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyAllMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndCopyAllMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndCopyAllMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndCopyAllMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMMoveAllMailWhenAlreadyConnected) + { + ret = KIMAP4MTMMoveAllMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveAllMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndMoveAllMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndMoveAllMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndMoveAllMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMPopulateMailSelectionWhenAlreadyConnected) + { + ret = KIMAP4MTMPopulateMailSelectionWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateMailSelectionAndStayOnline) + { + ret = KIMAP4MTMConnectAndPopulateMailSelectionAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateMailSelectionAndDisconnect) + { + ret = KIMAP4MTMConnectAndPopulateMailSelectionAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMPopulateNewMailWhenAlreadyConnected) + { + ret = KIMAP4MTMPopulateNewMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMPopulateAllMailWhenAlreadyConnected) + { + ret = KIMAP4MTMPopulateAllMailWhenAlreadyConnected; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateNewMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndPopulateNewMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateNewMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndPopulateNewMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateAllMailAndStayOnline) + { + ret = KIMAP4MTMConnectAndPopulateAllMailAndStayOnline; + break; + } + STR_CASE(KStrIMAP4MTMConnectAndPopulateAllMailAndDisconnect) + { + ret = KIMAP4MTMConnectAndPopulateAllMailAndDisconnect; + break; + } + STR_CASE(KStrIMAP4MTMCreateNewEmailMessage) + { + ret = KIMAP4MTMCreateNewEmailMessage; + break; + } + STR_CASE(KStrIMAP4MTMCreateReplyEmailMessage) + { + ret = KIMAP4MTMCreateReplyEmailMessage; + break; + } + STR_CASE(KStrIMAP4MTMCreateForwardEmailMessage) + { + ret = KIMAP4MTMCreateForwardEmailMessage; + break; + } + STR_CASE(KStrIMAP4MTMCreateForwardAsAttachmentEmailMessage) + { + ret = KIMAP4MTMCreateForwardAsAttachmentEmailMessage; + break; + } + STR_CASE(KStrIMAP4MTMCreateReceiptEmailMessage) + { + ret = KIMAP4MTMCreateReceiptEmailMessage; + break; + } + DEFAULT_CASE() + { + ret = KIMAP4MTMConnectAndSynchronise; + } + + STR_SWITCH_END() + return ret; + } + + +/** +ConvertDesToTSmtpCmdsL() +Returns the corresponding SMTP Command + +@param aSmtpCmdName +SMTP command name + +@return +SMTP-specific commands +*/ +EXPORT_C TSmtpCmds CT_MsgUtilsEnumConverter::ConvertDesToTSmtpCmdsL(TDesC& aSmtpCmdName) + { + TSmtpCmds ret = KSMTPMTMCreateNewEmailMessage; + STR_SWITCH(aSmtpCmdName) + + STR_CASE(KStrSMTPMTMCreateNewEmailMessage) + { + ret = KSMTPMTMCreateNewEmailMessage; + break; + } + STR_CASE(KStrSMTPMTMCreateReplyEmailMessage) + { + ret = KSMTPMTMCreateReplyEmailMessage; + break; + } + STR_CASE(KStrSMTPMTMCreateForwardEmailMessage) + { + ret = KSMTPMTMCreateForwardEmailMessage; + break; + } + STR_CASE(KStrSMTPMTMCreateForwardAsAttachmentEmailMessage) + { + ret = KSMTPMTMCreateForwardAsAttachmentEmailMessage; + break; + } + STR_CASE(KStrSMTPMTMCreateReceiptEmailMessage) + { + ret = KSMTPMTMCreateReceiptEmailMessage; + break; + } + STR_CASE(KStrSMTPMTMSendOnNextConnection) + { + ret = KSMTPMTMSendOnNextConnection; + break; + } + + DEFAULT_CASE() + { + User::Leave(KErrNotSupported); + } + + STR_SWITCH_END() + return ret; + } + + +/** +ConvertDesToTCommDbDialogPref() +Returns the corresponding TCommDbDialogPref Enumeration + +@param aDialogPrefStr +@return +TCommDbDialogPref enumeration +*/ +EXPORT_C TCommDbDialogPref CT_MsgUtilsEnumConverter::ConvertDesToTCommDbDialogPref(TDesC& aDialogPrefStr) + { + TCommDbDialogPref dialogPref; + + STR_SWITCH(aDialogPrefStr) + + STR_CASE(KStrECommDbDialogPrefPrompt) + { + dialogPref = ECommDbDialogPrefPrompt; + break; + } + STR_CASE(KStrECommDbDialogPrefWarn) + { + dialogPref = ECommDbDialogPrefWarn; + break; + } + STR_CASE(KStrECommDbDialogPrefDoNotPrompt) + { + dialogPref = ECommDbDialogPrefDoNotPrompt; + break; + } + STR_CASE(KStrECommDbDialogPrefPromptIfWrongMode) + { + dialogPref = ECommDbDialogPrefPromptIfWrongMode; + break; + } + DEFAULT_CASE() + { + dialogPref = ECommDbDialogPrefUnknown; + } + STR_SWITCH_END() + + return dialogPref; + } + + +/** +ConvertDesToTImap4GetMailOptions() +Returns the corresponding TImap4GetMailOptions Enumeration + +@param aMailOption +@return +TImap4GetMailOptions enumeration +*/ +EXPORT_C TImap4GetMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTImap4GetMailOptions(TDesC& aMailOption) + { + TImap4GetMailOptions options = EGetImap4EmailAttachments; + + STR_SWITCH(aMailOption) + + STR_CASE(KStrEGetImap4EmailBodyText) + { + options = EGetImap4EmailBodyText; + break; + } + STR_CASE(KStrEGetImap4EmailBodyTextAndAttachments) + { + options = EGetImap4EmailBodyTextAndAttachments; + break; + } + STR_CASE(KStrEGetImap4EmailAttachments) + { + options = EGetImap4EmailAttachments; + break; + } + STR_CASE(KStrEGetImap4EmailBodyAlternativeText) + { + options = EGetImap4EmailBodyAlternativeText; + break; + } + DEFAULT_CASE() + { + options = EGetImap4EmailHeaders; + } + STR_SWITCH_END() + + return options; + } + + +/** +ConvertDesToTFolderSyncType() +Returns the corresponding TFolderSyncType Enumeration + +@param aFolderSyncType +@return +TFolderSyncType enumeration +*/ +EXPORT_C TFolderSyncType CT_MsgUtilsEnumConverter::ConvertDesToTFolderSyncType(TDesC& aFolderSyncType) + { + TFolderSyncType syncType; + + STR_SWITCH(aFolderSyncType) + + STR_CASE(KStrEUseCombination) + { + syncType = EUseCombination; + break; + } + STR_CASE(KStrEUseLocal) + { + syncType = EUseLocal; + break; + } + + DEFAULT_CASE() + { + syncType = EUseRemote; + } + + STR_SWITCH_END() + + return syncType; + } + + +/** +ConvertDesToTFolderSubscribeType() +Returns the corresponding TFolderSubscribeType Enumeration + +@param aFolderSubscriberType +@return +TFolderSubscribeType enumeration +*/ +EXPORT_C TFolderSubscribeType CT_MsgUtilsEnumConverter::ConvertDesToTFolderSubscribeType(TDesC& aFolderSubscriberType) + { + TFolderSubscribeType subscriberType; + + STR_SWITCH(aFolderSubscriberType) + + STR_CASE(KStrEUpdateLocal) + { + subscriberType = EUpdateLocal; + break; + } + STR_CASE(KStrEUpdateRemote) + { + subscriberType = EUpdateRemote; + break; + } + STR_CASE(KStrEUpdateBoth) + { + subscriberType = EUpdateBoth; + break; + } + + DEFAULT_CASE() + { + subscriberType = EUpdateNeither; + } + + STR_SWITCH_END() + + return subscriberType; + } + + +/** +ConvertDesToTImImap4PartialMailOptions() +Returns the corresponding TImImap4PartialMailOptions Enumeration + +@param aPartialMailOption +@return +TImImap4PartialMailOptions +*/ +EXPORT_C TImImap4PartialMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTImImap4PartialMailOptions(TDesC& aPartialMailOption) + { + TImImap4PartialMailOptions partialOption; + + STR_SWITCH(aPartialMailOption) + + STR_CASE(KStrEBodyTextOnly) + { + partialOption = EBodyTextOnly; + break; + } + STR_CASE(KStrEAttachmentsOnly) + { + partialOption = EAttachmentsOnly; + break; + } + STR_CASE(KStrEBodyTextAndAttachments) + { + partialOption = EBodyTextAndAttachments; + break; + } + STR_CASE(KStrECumulative) + { + partialOption = ECumulative; + break; + } + STR_CASE(KStrEBodyAlternativeText) + { + partialOption = EBodyAlternativeText; + break; + } + DEFAULT_CASE() + { + partialOption = ENoSizeLimits; + } + + STR_SWITCH_END() + + return partialOption; + } + + +/** +ConvertDesToTMsgOutboxBodyEncoding() +Returns the corresponding TMsgOutboxBodyEncoding Enumeration + +@param aOutboxBodyEncoding +@return +TMsgOutboxBodyEncoding +*/ +EXPORT_C TMsgOutboxBodyEncoding CT_MsgUtilsEnumConverter::ConvertDesToTMsgOutboxBodyEncoding(TDesC& aOutboxBodyEncoding) + { + TMsgOutboxBodyEncoding bodyEncoding; + + STR_SWITCH(aOutboxBodyEncoding) + + STR_CASE(KStrEMsgOutboxNoAlgorithm) + { + bodyEncoding = EMsgOutboxNoAlgorithm; + break; + } + STR_CASE(KStrEMsgOutboxMIME) + { + bodyEncoding = EMsgOutboxMIME; + break; + } + STR_CASE(KStrEMsgOutboxMHTMLAsMIME) + { + bodyEncoding = EMsgOutboxMHTMLAsMIME; + break; + } + STR_CASE(KStrEMsgOutboxMHTMLAlternativeAsMIME) + { + bodyEncoding = EMsgOutboxMHTMLAlternativeAsMIME; + break; + } + DEFAULT_CASE() + { + bodyEncoding = EMsgOutboxDefault; + } + + STR_SWITCH_END() + + return bodyEncoding; + } + + +/** +ConvertDesToTImSMTPSendMessageOption() +Returns the corresponding TImSMTPSendMessageOption Enumeration + +@param aSendMsgOption +@return +TImSMTPSendMessageOption +*/ +EXPORT_C TImSMTPSendMessageOption CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendMessageOption(TDesC& aSendMsgOption) + { + TImSMTPSendMessageOption messageOption; + + STR_SWITCH(aSendMsgOption) + + STR_CASE(KStrESendMessageOnNextConnection) + { + messageOption = ESendMessageOnNextConnection; + break; + } + STR_CASE(KStrESendMessageOnRequest) + { + messageOption = ESendMessageOnRequest; + break; + } + DEFAULT_CASE() + { + messageOption = ESendMessageImmediately; + } + + STR_SWITCH_END() + + return messageOption; + } + + +/** +ConvertDesToTImSMTPSendCopyToSelf() +Returns the corresponding TImSMTPSendCopyToSelf Enumeration + +@param aSmtpCopyToSelf +@return +TImSMTPSendCopyToSelf +*/ +EXPORT_C TImSMTPSendCopyToSelf CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendCopyToSelf(TDesC& aSmtpCopyToSelf) + { + TImSMTPSendCopyToSelf copyToSelf; + + STR_SWITCH(aSmtpCopyToSelf) + + STR_CASE(KStrESendCopyAsToRecipient) + { + copyToSelf= ESendCopyAsToRecipient; + break; + } + STR_CASE(KStrESendCopyAsCcRecipient) + { + copyToSelf= ESendCopyAsCcRecipient; + break; + } + STR_CASE(KStrESendCopyAsBccRecipient) + { + copyToSelf= ESendCopyAsBccRecipient; + break; + } + DEFAULT_CASE() + { + copyToSelf= ESendNoCopy; + } + + STR_SWITCH_END() + + return copyToSelf; + } + + +/** +ConvertDesToTPop3GetMailOptions() +Returns the corresponding TPop3GetMailOptions Enumeration + +@param aPop3MailOption +@return +TPop3GetMailOptions +*/ +EXPORT_C TPop3GetMailOptions CT_MsgUtilsEnumConverter::ConvertDesToTPop3GetMailOptions(TDesC& aPop3MailOption) + { + TPop3GetMailOptions popMailOption; + + STR_SWITCH(aPop3MailOption) + + STR_CASE(KStrEGetPop3EmailMessages) + { + popMailOption = EGetPop3EmailMessages; + break; + } + DEFAULT_CASE() + { + popMailOption = EGetPop3EmailHeaders; + } + + STR_SWITCH_END() + + return popMailOption; + } + + +/** +ConvertDesToEventCode() +Returns the corresponding TInstrumentationPoint Enumeration + +@param aEventCodeString +@return +TInstrumentationPoint +*/ +EXPORT_C TInstrumentationPoint CT_MsgUtilsEnumConverter::ConvertDesToEventCode(TDesC& aEventCodeString) + { + TInstrumentationPoint eventCode; + + STR_SWITCH(aEventCodeString) + + STR_CASE(KStrImapRamUsageStart) + { + eventCode = EImapRamUsageStart; + break; + } + STR_CASE(KStrImapRamUsageStop) + { + eventCode = EImapRamUsageStop; + break; + } + STR_CASE(KStrPopRamUsageStart) + { + eventCode = EPopRamUsageStart; + break; + } + STR_CASE(KStrPopRamUsageStop) + { + eventCode = EPopRamUsageStop; + break; + } + STR_CASE(KStrSmtpRamUsageStart) + { + eventCode = ESmtpRamUsageStart; + break; + } + STR_CASE(KStrSmtpRamUsageStop) + { + eventCode = ESmtpRamUsageStop; + break; + } + STR_CASE(KStrSmtpRamUsageCreateMessageStart) + { + eventCode = ESmtpRamUsageCreateMessageStart; + break; + } + STR_CASE(KStrSmtpRamUsageCreateMessageStop) + { + eventCode = ESmtpRamUsageCreateMessageStop; + break; + } + STR_CASE(KStrSmtpRamUsageSendMessageStart) + { + eventCode = ESmtpRamUsageSendMessageStart; + break; + } + STR_CASE(KStrSmtpRamUsageSendMessageStop) + { + eventCode = ESmtpRamUsageSendMessageStop; + break; + } + STR_CASE(KStrSmtpCreateMessageSpeedStart) + { + eventCode = ESmtpCreateMessageSpeedStart; + break; + } + STR_CASE(KStrSmtpCreateMessageSpeedStop) + { + eventCode = ESmtpCreateMessageSpeedStop; + break; + } + STR_CASE(KStrSmtpSendMessageSpeedStart) + { + eventCode = ESmtpSendMessageSpeedStart; + break; + } + STR_CASE(KStrSmtpSendMessageSpeedStop) + { + eventCode = ESmtpSendMessageSpeedStop; + break; + } + STR_CASE(KStrImapDownloadMessageSpeedStart) + { + eventCode = EImapDownloadMessageSpeedStart; + break; + } + STR_CASE(KStrImapDownloadMessageSpeedStop) + { + eventCode = EImapDownloadMessageSpeedStop; + break; + } + + DEFAULT_CASE() + { + eventCode = EBadEventCode; + } + + STR_SWITCH_END() + + return eventCode; + } + +/** +ConvertDesToBearerTypes() +Returns the corresponding TUint32 representing bearer types + +@param aBearerTypesString Bearer types string +@return Bearer types enum +*/ +EXPORT_C TUint32 CT_MsgUtilsEnumConverter::ConvertDesToBearerTypes(const TDesC& aBearerTypesString) + { + TUint32 bearerTypes; + + STR_SWITCH(aBearerTypesString) + + STR_CASE(KStrBearerTypeUnknown) + { + bearerTypes = KCommDbBearerUnknown; + break; + } + + STR_CASE(KStrBearerTypeCsd) + { + bearerTypes = KCommDbBearerCSD; + break; + } + + STR_CASE(KStrBearerTypeWcdma) + { + bearerTypes = KCommDbBearerWcdma; + break; + } + + STR_CASE(KStrBearerTypeLan) + { + bearerTypes = KCommDbBearerLAN; + break; + } + + STR_CASE(KStrBearerTypeCdma2000) + { + bearerTypes = KCommDbBearerCdma2000; + break; + } + + STR_CASE(KStrBearerTypeVirtual) + { + bearerTypes = KCommDbBearerVirtual; + break; + } + + STR_CASE(KStrBearerTypePan) + { + bearerTypes = KCommDbBearerPAN; + break; + } + + STR_CASE(KStrBearerTypeWlan) + { + bearerTypes = KCommDbBearerWLAN; + break; + } + + STR_CASE(KStrBearerTypePsd) + { + bearerTypes = KCommDbBearerPSD; + break; + } + + STR_CASE(KStrBearerTypeCsdLan) + { + bearerTypes = KCommDbBearerCSD | KCommDbBearerLAN; + break; + } + + DEFAULT_CASE() + { + bearerTypes = KCommDbBearerUnknown; + } + + STR_SWITCH_END() + + return bearerTypes; + } diff -r b18be44be852 -r d5603c08781b common/tools/ats/smoketest/email/testutils/src/T_UtilsReadEmailSettingsFromConfigFile.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/ats/smoketest/email/testutils/src/T_UtilsReadEmailSettingsFromConfigFile.cpp Fri Oct 30 09:36:23 2009 +0000 @@ -0,0 +1,999 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Utility functions for reading the config/setting file to update +// the CImImap4Settings, CImPop3Settings, CImSmtpSettings and CImIAPPreferences objects. +// +// + + +// User include +#include +#include +#include +#include + +// epoc inlcude +#include +#include +#include +#include +#include + +// Literals used + +// Imap Settings related literals +_LIT(KCfgImapServerAddress, "ImapServerAddress"); +_LIT(KCfgImapLoginName, "ImapLoginName"); +_LIT(KCfgImapPassword, "ImapPassword"); +_LIT(KCfgImapPort, "ImapPort"); +_LIT(KCfgImapSecureSockets, "ImapSecureSockets"); +_LIT(KCfgImapSSLWrapper, "ImapSSLWrapper"); +_LIT(KCfgImapFolderPath, "ImapFolderPath"); +_LIT(KCfgImapPathSeperator, "ImapPathSeperator"); +_LIT(KCfgImapMaxEmailSize, "ImapMaxEmailSize"); +_LIT(KCfgImapGetMailOptions, "ImapGetMailOptions"); +_LIT(KCfgImapInboxSynchronisationLimit, "ImapInboxSynchronisationLimit"); +_LIT(KCfgImapMailboxSynchronisationLimit, "ImapMailSynchronisationLimit"); +_LIT(KUseExpunge , "ImapUseExpunge" ); +_LIT(KCfgImapAutoSendOnConnect, "ImapAutoSendOnConnect" ); +_LIT(KCfgImapDeleteEmailsWhenDisconnecting, "ImapDeleteEmailsWhenDisconnecting" ); +_LIT(KCfgImapAcknowledgeReceipts, "ImapAcknowledgeReceipts" ); +_LIT(KCfgImapDisconnectedUserMode, "ImapDisconnectedUserMode" ); +_LIT(KCfgImapSynchronise, "ImapSynchronise" ); +_LIT(KCfgImapSubscribe, "ImapSubscribe" ); +_LIT(KCfgImapUpdatingSeenFlags, "ImapUpdatingSeenFlags" ); +_LIT(KCfgImapSyncRate, "ImapSyncRate" ); +_LIT(KCfgImapFetchSize, "ImapFetchSize" ); +_LIT(KCfgImapIdle, "ImapIdle" ); +_LIT(KCfgImapIdleTimeout, "ImapIdleTimeout" ); +_LIT(KCfgImapPartialMailOptions, "ImapPartialMailOptions" ); +_LIT(KCfgImapBodyTextSizeLimit, "ImapBodyTextSizeLimit" ); +_LIT(KCfgImapAttachmentSizeLimit, "ImapAttachmentSizeLimit" ); + +_LIT(KCfgImapIapList, "ImapIapList"); +_LIT(KCfgImapSNAPId, "ImapSNAPId"); +_LIT(KCfgImapBearerMobility, "ImapBearerMobility"); +_LIT(KCfgImapDownloadRules, "ImapDownloadRules"); + +// +// POP Settings related literals +// +_LIT(KCfgPopServerAddress, "PopServerAddress"); +_LIT(KCfgPopLoginName, "PopLoginName"); +_LIT(KCfgPopPassword, "PopPassword"); +_LIT(KCfgPopMaxEmailSize, "PopMaxEmailSize"); +_LIT(KCfgPopPort, "PopPort"); +_LIT(KCfgPopInboxSynchronisationLimit, "PopInboxSynchronisationLimit"); +_LIT(KCfgPopSecureSockets, "PopSecureSockets"); +_LIT(KCfgPopSSLWrapper, "PopSSLWrapper"); +_LIT(KCfgPopGetMailOptions, "PopGetMailOptions"); +_LIT(KCfgPopPopulationLimit, "PopPopulationLimit"); +_LIT(KCfgPopAutoSendOnConnect, "PopAutoSendOnConnect" ); +_LIT(KCfgPopDeleteEmailsWhenDisconnecting, "PopDeleteEmailsWhenDisconnecting" ); +_LIT(KCfgPopAcknowledgeReceipts, "PopAcknowledgeReceipts" ); +_LIT(KCfgPopDisconnectedUserMode, "PopDisconnectedUserMode" ); +_LIT(KCfgPopAPOPEncryption, "PopAPOPEncryption" ); + +_LIT(KCfgPopIapList, "PopIapList"); +_LIT(KCfgPopSNAPId, "PopSNAPId"); +_LIT(KCfgPopBearerMobility, "PopBearerMobility"); + +// +// SMTP settings related literals +// +_LIT(KCfgSmtpServerAddress, "SmtpServerAddress"); +_LIT(KCfgSmtpEmailAddress, "SmtpEmailAddress"); +_LIT(KCfgSmtpBodyEncoding, "SmtpBodyEncoding"); +_LIT(KCfgSmtpReceiptAddress, "SmtpReceiptAddress"); +_LIT(KCfgSmtpRequestReceipts, "SmtpRequestReceipts"); +_LIT(KCfgSmtpSendMessageOption, "SmtpSendMessageOption"); +_LIT(KCfgSmtpEmailAlias, "SmtpEmailAlias"); +_LIT(KCfgSmtpDefaultMsgCharSet, "SmtpMsgCharSet"); +_LIT(KCfgSmtpSetPort, "SmtpSetPort"); +_LIT(KCfgSmtpSetReplyToAddress, "SmtpSetReplyToAddress"); +_LIT(KCfgSmtpSetAddVCardToEmail, "SmtpSetAddVCardToEmail"); +_LIT(KCfgSmtpSetAddSignatureToEmail, "SmtpSetAddSignatureToEmail"); +_LIT(KCfgSmtpSetSendCopyToSelf, "SmtpSetSendCopyToSelf"); +_LIT(KCfgSmtpSetLoginName, "SmtpSetLoginName"); +_LIT(KCfgSmtpSetPassword, "SmtpSetPassword"); +_LIT(KCfgSmtpSetSMTPAuth, "SmtpSetSMTPAuth"); +_LIT(KCfgSmtpSetInboxLoginDetails, "SmtpSetInboxLoginDetails"); +_LIT(KCfgSmtpSecureSockets, "SmtpSetSecureSockets"); +_LIT(KCfgSmtpSSLWrapper, "SmtpSetSSLWrapper"); + +_LIT(KCfgSmtpIapList, "SmtpIapList"); +_LIT(KCfgSmtpSNAPId, "SmtpSNAPId"); +_LIT(KCfgSmtpBearerMobility, "SmtpBearerMobility"); + +// Other Literals +_LIT(KImapIAPSuffix, "_ImapIAP"); +_LIT(KImapCommDbDialogPref, "_ImapCommDbDialogPref"); +_LIT(KImapIAPIndex, "_ImapIAPIndex"); +_LIT(KPopIAPSuffix, "_PopIAP"); +_LIT(KPopCommDbDialogPref, "_PopCommDbDialogPref"); +_LIT(KPopIAPIndex, "_PopIAPIndex"); +_LIT(KSmtpIAPSuffix, "_SmtpIAP"); +_LIT(KSmtpCommDbDialogPref, "_SmtpCommDbDialogPref"); +_LIT(KSmtpIAPIndex, "_SmtpIAPIndex"); + + +/** +ReadImapSettingsFromConfigurationFileL() +Modifies the IMAP related default setting and IAP objects. + +@param aSettingsFile +Configuration/setting file path. + +@param aImapSet +CImImap4Settings object. + +@param aImapIapPref +CImIAPPreferences object. +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapSettingsFromConfigurationFileL( + TDesC& aSettingsFile, CImImap4Settings& aImapSet, CImIAPPreferences& aImapIapPref,const TDesC& /* aPtrEmailAdd */) + + { + // Parses the setting file + CT_MsgUtilsConfigFileParserUtility* scriptFileParser = CT_MsgUtilsConfigFileParserUtility::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + TPtrC8 string8Ptr; + TPtrC stringPtr = KNone(); + TInt intTmp; + + if(scriptFileParser->GetFieldAsString(KCfgImapServerAddress, stringPtr) == KErrNone) + { + aImapSet.SetServerAddressL(stringPtr); + } + + CT_MsgUtilsConfigFileMachineName* machineNameFile = CT_MsgUtilsConfigFileMachineName::NewLC(stringPtr); + TPtrC8 machineName(machineNameFile->MachineName()); + + if(scriptFileParser->GetFieldAsString8(KCfgImapLoginName, string8Ptr) == KErrNone) + { + aImapSet.SetLoginNameL(string8Ptr); + } + else + { + aImapSet.SetLoginNameL(machineName); + } + + if(scriptFileParser->GetFieldAsString8(KCfgImapPassword, string8Ptr) == KErrNone) + { + aImapSet.SetPasswordL(string8Ptr); + } + else + { + aImapSet.SetPasswordL(machineName); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapPort, intTmp) == KErrNone) + { + aImapSet.SetPort(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapSecureSockets, intTmp) == KErrNone) + { + aImapSet.SetSecureSockets( (TBool) intTmp ); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapSSLWrapper, intTmp ) == KErrNone) + { + aImapSet.SetSSLWrapper( (TBool) intTmp ); + } + + if(scriptFileParser->GetFieldAsString8(KCfgImapFolderPath, string8Ptr) == KErrNone) + { + aImapSet.SetFolderPathL(string8Ptr); + } + + if(scriptFileParser->GetFieldAsString8(KCfgImapPathSeperator, string8Ptr) == KErrNone) + { + if ( string8Ptr.Length() == 1 ) + { + aImapSet.SetPathSeparator( string8Ptr[0] ); + } + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapMaxEmailSize, intTmp) == KErrNone) + { + aImapSet.SetMaxEmailSize(intTmp); + } + + if(scriptFileParser->GetFieldAsString(KCfgImapGetMailOptions, stringPtr) == KErrNone) + { + TImap4GetMailOptions setGetMailOptions = CT_MsgUtilsEnumConverter::ConvertDesToTImap4GetMailOptions(stringPtr); + aImapSet.SetGetMailOptions(setGetMailOptions); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapInboxSynchronisationLimit, intTmp) == KErrNone) + { + aImapSet.SetInboxSynchronisationLimit(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapMailboxSynchronisationLimit, intTmp) == KErrNone) + { + aImapSet.SetMailboxSynchronisationLimit(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapAutoSendOnConnect, intTmp) == KErrNone) + { + aImapSet.SetAutoSendOnConnect((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapDeleteEmailsWhenDisconnecting, intTmp) == KErrNone) + { + aImapSet.SetDeleteEmailsWhenDisconnecting((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapAcknowledgeReceipts, intTmp) == KErrNone) + { + aImapSet.SetAcknowledgeReceipts((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapDisconnectedUserMode, intTmp) == KErrNone) + { + aImapSet.SetDisconnectedUserMode((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsString(KCfgImapSynchronise, stringPtr) == KErrNone) + { + TFolderSyncType setFolderSyncType = CT_MsgUtilsEnumConverter::ConvertDesToTFolderSyncType(stringPtr); + aImapSet.SetSynchronise(setFolderSyncType); + } + + if(scriptFileParser->GetFieldAsString(KCfgImapSubscribe, stringPtr) == KErrNone) + { + TFolderSubscribeType setFolderSubscribeType = CT_MsgUtilsEnumConverter::ConvertDesToTFolderSubscribeType(stringPtr); + aImapSet.SetSubscribe(setFolderSubscribeType); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapUpdatingSeenFlags, intTmp) == KErrNone) + { + aImapSet.SetUpdatingSeenFlags((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapSyncRate, intTmp) == KErrNone) + { + aImapSet.SetSyncRateL(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapFetchSize, intTmp) == KErrNone) + { + aImapSet.SetFetchSizeL(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapIdle, intTmp) == KErrNone) + { + aImapSet.SetImapIdle( (TBool) intTmp ); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapIdleTimeout, intTmp) == KErrNone) + { + aImapSet.SetImapIdleTimeoutL(intTmp); + } + + if(scriptFileParser->GetFieldAsString(KCfgImapPartialMailOptions, stringPtr) == KErrNone) + { + TImImap4PartialMailOptions setImap4PartialMailOptions = CT_MsgUtilsEnumConverter::ConvertDesToTImImap4PartialMailOptions(stringPtr); + aImapSet.SetPartialMailOptionsL(setImap4PartialMailOptions); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapBodyTextSizeLimit, intTmp) == KErrNone) + { + aImapSet.SetBodyTextSizeLimitL(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapAttachmentSizeLimit, intTmp) == KErrNone) + { + aImapSet.SetAttachmentSizeLimitL(intTmp); + } + + if(scriptFileParser->GetFieldAsString(KCfgImapIapList, stringPtr) == KErrNone) + { + ReadImapIAPAndAddL(scriptFileParser, (TDesC&)KCfgImapIapList, aImapIapPref); + } + + if(scriptFileParser->GetFieldAsInteger(KUseExpunge, intTmp) == KErrNone) + { + aImapSet.SetUseExpunge( (TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapSNAPId, intTmp) == KErrNone) + { + aImapIapPref.SetSNAPL(intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapBearerMobility, intTmp) == KErrNone) + { + aImapSet.SetBearerMobility((TBool) intTmp); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgImapDownloadRules, intTmp) == KErrNone) + { + aImapSet.SetUseSyncDownloadRules((TBool) intTmp); + } + + CleanupStack::PopAndDestroy(2,scriptFileParser); + } + +/** +ReadImapIAPAndAdd()_ +Gets the base string for the IAP list. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aParamListName +@param aImapIapPref +CImIAPPreferences object. +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapIAPAndAddL(CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, const TDesC& aParamListName, CImIAPPreferences& aImapIapPref) + { + TPtrC stringPtr; + TPtrC baseString; + + if( aScriptFileParser->GetFieldAsString(aParamListName, stringPtr ) == KErrNone ) + { + TInt start = 0; + TInt end = stringPtr.Length(); + + while (GetString(stringPtr, start, end, baseString)) + { + ReadImapIAPAndAddFieldL(aScriptFileParser, baseString, aImapIapPref); + //ReadImapIAPAndAddL(aScriptFileParser, baseString, aImapIapPref); + } + } + } + +/** +ReadImapIAPAndAddField() +Modifies the CImIAPPreferences object. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aFieldName +@param aImapIapPref +CImIAPPreferences object. +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadImapIAPAndAddFieldL( + CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aFieldName, CImIAPPreferences& aImapIapPref) + { + + TPtrC stringPtr; + TInt intTmp; + + TImIAPChoice iapChoice; + iapChoice.iIAP = 0; + iapChoice.iDialogPref = ECommDbDialogPrefUnknown; + + TInt index = 0; + TBool modified = EFalse; + + HBufC* buf = HBufC::NewLC(100); + + buf->Des() = aFieldName; + buf->Des().Append(KImapIAPSuffix); + + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + iapChoice.iIAP = intTmp; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KImapCommDbDialogPref); + + if(aScriptFileParser->GetFieldAsString(buf->Des(), stringPtr) == KErrNone) + { + TCommDbDialogPref setCommDbDialogPref = CT_MsgUtilsEnumConverter::ConvertDesToTCommDbDialogPref(stringPtr); + iapChoice.iDialogPref = setCommDbDialogPref; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KImapIAPIndex); + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + index = intTmp; + modified = ETrue; + } + + if (modified) + { + aImapIapPref.AddIAPL(iapChoice ,index ); + } + + CleanupStack::PopAndDestroy(buf); + } + + +/** +GetString() + +@param aStringPtr +@param aStart +@param aEnd +@param aBaseString +@return +*/ +EXPORT_C TBool CT_MsgUtilsReadEmailSettingsFromConfigFile::GetString(TDesC& aStringPtr, TInt& aStart, TInt aEnd, TPtrC& aBaseString) + { + TBool ret = EFalse; + + if (aStart == aEnd) + { + return EFalse; + } + + TInt currPos = aStart; + + // strip out any starting spaces. + while (currPos < aEnd ) + { + if (aStringPtr[currPos] == ' ' || aStringPtr[currPos] == '\t') + { + currPos++; + } + else + { + break; + } + } + TInt startTmp = currPos; + //Looking for terminating space or Tab to determine the length of string + while (currPos < aEnd ) + { + if (aStringPtr[currPos] == ' ' || aStringPtr[currPos] == '\t') + { + break; + } + else + { + currPos++; + ret = ETrue; + } + } + + if (ret) + { // We have a string. + aBaseString.Set(aStringPtr.Mid( startTmp, currPos - startTmp)); + } + + aStart = currPos; + return ret; + } + +/** +ReadPopSettingsFromConfigurationFileL() +Modifies the POP related default setting and IAP objects. + +@param aSettingsFile +Configuration/setting file path. + +@param aPopSet +CImPop3Settings object. + +@param aPopIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopSettingsFromConfigurationFileL(TDesC& aSettingsFile, + CImPop3Settings& aPopSet, CImIAPPreferences& aPopIapPref, const TDesC& /*aPtrEmailAdd*/) + { + // Parses the setting file + CT_MsgUtilsConfigFileParserUtility* scriptFileParser = CT_MsgUtilsConfigFileParserUtility::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + TPtrC8 string8Ptr; + TPtrC stringPtr = KNone(); + TInt intValue; + + if(scriptFileParser->GetFieldAsString(KCfgPopServerAddress, stringPtr) == KErrNone) + { + aPopSet.SetServerAddressL(stringPtr); + } + + CT_MsgUtilsConfigFileMachineName* machineNameFile = CT_MsgUtilsConfigFileMachineName::NewLC(stringPtr); + TPtrC8 machineName(machineNameFile->MachineName()); + + + if(scriptFileParser->GetFieldAsString8(KCfgPopLoginName, string8Ptr) == KErrNone) + { + aPopSet.SetLoginNameL(string8Ptr); + } + + else + { + aPopSet.SetLoginNameL(machineName); + } + + if(scriptFileParser->GetFieldAsString8(KCfgPopPassword, string8Ptr) == KErrNone) + { + aPopSet.SetPasswordL(string8Ptr); + } + + else + { + aPopSet.SetPasswordL(machineName); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopMaxEmailSize, intValue) == KErrNone) + { + aPopSet.SetMaxEmailSize(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopPort, intValue) == KErrNone) + { + aPopSet.SetPort(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopInboxSynchronisationLimit, intValue) == KErrNone) + { + aPopSet.SetInboxSynchronisationLimit(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopSecureSockets, intValue) == KErrNone) + { + aPopSet.SetSecureSockets((TBool)intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopSSLWrapper, intValue) == KErrNone) + { + aPopSet.SetSSLWrapper((TBool)intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgPopGetMailOptions, stringPtr) == KErrNone) + { + TPop3GetMailOptions options = CT_MsgUtilsEnumConverter::ConvertDesToTPop3GetMailOptions(stringPtr); + aPopSet.SetGetMailOptions(options); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopPopulationLimit, intValue) == KErrNone) + { + aPopSet.SetPopulationLimitL(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopAutoSendOnConnect, intValue) == KErrNone) + { + aPopSet.SetAutoSendOnConnect((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopDeleteEmailsWhenDisconnecting, intValue) == KErrNone) + { + aPopSet.SetDeleteEmailsWhenDisconnecting((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopAcknowledgeReceipts, intValue) == KErrNone) + { + aPopSet.SetAcknowledgeReceipts((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopDisconnectedUserMode, intValue) == KErrNone) + { + aPopSet.SetDisconnectedUserMode((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopAPOPEncryption, intValue) == KErrNone) + { + aPopSet.SetApop((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgPopIapList, stringPtr) == KErrNone) + { + ReadPopIAPAndAddL(scriptFileParser, (TDesC&) KCfgPopIapList, aPopIapPref); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopSNAPId, intValue) == KErrNone) + { + aPopIapPref.SetSNAPL(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgPopBearerMobility, intValue) == KErrNone) + { + aPopSet.SetBearerMobility((TBool) intValue); + } + + CleanupStack::PopAndDestroy(2,scriptFileParser); + } + +/** +* +ReadPopIAPAndAdd() +Gets the base string for the IAP list. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aParamListName +@param aPopIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopIAPAndAddL( + CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aParamListName, CImIAPPreferences& aPopIapPref) + { + TPtrC stringPtr; + TPtrC baseString; + + if( aScriptFileParser->GetFieldAsString(aParamListName, stringPtr) == KErrNone ) + { + TInt start = 0; + TInt end = stringPtr.Length(); + + while (GetString(stringPtr, start, end, baseString)) + { + ReadPopIAPAndAddFieldL(aScriptFileParser, baseString, aPopIapPref); + } + } + + } +/** +ReadPopIAPAndAddField() +Modifies the CImIAPPreferences object. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aFieldName +@param aPopIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadPopIAPAndAddFieldL( + CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aFieldName, CImIAPPreferences& aPopIapPref) + { + TPtrC stringPtr; + TInt intTmp; + + TImIAPChoice iapChoice; + + iapChoice.iIAP = 0; + iapChoice.iDialogPref = ECommDbDialogPrefUnknown; + + TInt index = 0; + TBool modified = EFalse; + + HBufC* buf = HBufC::NewLC(100); + + buf->Des() = aFieldName; + buf->Des().Append(KPopIAPSuffix); + + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + iapChoice.iIAP = intTmp; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KPopCommDbDialogPref); + if(aScriptFileParser->GetFieldAsString(buf->Des(), stringPtr) == KErrNone) + { + TCommDbDialogPref setCommDbDialogPref = CT_MsgUtilsEnumConverter::ConvertDesToTCommDbDialogPref(stringPtr); + iapChoice.iDialogPref = setCommDbDialogPref; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KPopIAPIndex); + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + index = intTmp; + modified = ETrue; + } + + if (modified) + { + aPopIapPref.AddIAPL(iapChoice ,index); + } + + CleanupStack::PopAndDestroy(buf); + } + +/** +ReadSmtpSettingsFromConfigurationFileL() +Modifies the POP related default setting and IAP objects. + +@param aSettingsFile +Configuration/setting file path. + +@param aSmtpSet +@param aSmtpIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpSettingsFromConfigurationFileL(TDesC& aSettingsFile, + CImSmtpSettings& aSmtpSet, CImIAPPreferences& aSmtpIapPref,const TDesC&/* aPtrEmailAdd*/) + { + // Parses the setting file + CT_MsgUtilsConfigFileParserUtility* scriptFileParser = CT_MsgUtilsConfigFileParserUtility::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + TPtrC8 string8Ptr; + TPtrC stringPtr = KNone(); + TInt intValue; + + if(scriptFileParser->GetFieldAsString(KCfgSmtpServerAddress, stringPtr) == KErrNone) + { + aSmtpSet.SetServerAddressL(stringPtr); + } + + CT_MsgUtilsConfigFileMachineName* machineNameFile = CT_MsgUtilsConfigFileMachineName::NewLC(stringPtr); + TPtrC emailAddr(machineNameFile->MachineNameEmail()); + TPtrC8 machineName(machineNameFile->MachineName()); + + if(scriptFileParser->GetFieldAsString(KCfgSmtpEmailAddress, stringPtr) == KErrNone) + { + aSmtpSet.SetEmailAddressL(stringPtr); + } + + else + { + aSmtpSet.SetEmailAddressL(emailAddr); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpBodyEncoding, stringPtr) == KErrNone) + { + TMsgOutboxBodyEncoding setBodyEncoding = CT_MsgUtilsEnumConverter::ConvertDesToTMsgOutboxBodyEncoding(stringPtr); + aSmtpSet.SetBodyEncoding(setBodyEncoding); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpReceiptAddress, stringPtr) == KErrNone) + { + aSmtpSet.SetReceiptAddressL(stringPtr); + } + + else + { + aSmtpSet.SetReceiptAddressL(emailAddr); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpRequestReceipts, intValue) == KErrNone) + { + aSmtpSet.SetRequestReceipts((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpSendMessageOption, stringPtr) == KErrNone) + { + TImSMTPSendMessageOption setSendMessageOption = CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendMessageOption(stringPtr); + aSmtpSet.SetSendMessageOption(setSendMessageOption); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSetPort, intValue) == KErrNone) + { + aSmtpSet.SetPort(intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpEmailAlias, stringPtr) == KErrNone) + { + aSmtpSet.SetEmailAliasL(stringPtr); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpDefaultMsgCharSet, intValue) == KErrNone) + { + TUid tmp = { intValue }; + aSmtpSet.SetDefaultMsgCharSet(tmp); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpSetReplyToAddress, stringPtr) == KErrNone) + { + aSmtpSet.SetReplyToAddressL(stringPtr); + } + + else + { + aSmtpSet.SetReplyToAddressL(emailAddr); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSetAddVCardToEmail, intValue) == KErrNone) + { + aSmtpSet.SetAddVCardToEmail((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSetAddSignatureToEmail, intValue) == KErrNone) + { + aSmtpSet.SetAddSignatureToEmail((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpSetSendCopyToSelf, stringPtr) == KErrNone) + { + TImSMTPSendCopyToSelf setSMTPSendCopyToSelf = CT_MsgUtilsEnumConverter::ConvertDesToTImSMTPSendCopyToSelf(stringPtr); + aSmtpSet.SetSendCopyToSelf(setSMTPSendCopyToSelf); + } + + if(scriptFileParser->GetFieldAsString8(KCfgSmtpSetLoginName, string8Ptr) == KErrNone) + { + aSmtpSet.SetLoginNameL(string8Ptr); + } + + else + { + aSmtpSet.SetLoginNameL(machineName); + } + + if(scriptFileParser->GetFieldAsString8(KCfgSmtpSetPassword, string8Ptr) == KErrNone) + { + aSmtpSet.SetPasswordL(string8Ptr); + } + + else + { + aSmtpSet.SetPasswordL(machineName); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSetSMTPAuth, intValue) == KErrNone) + { + aSmtpSet.SetSMTPAuth((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSetInboxLoginDetails, intValue) == KErrNone) + { + aSmtpSet.SetInboxLoginDetails((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSecureSockets, intValue) == KErrNone) + { + aSmtpSet.SetSecureSockets((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSSLWrapper, intValue) == KErrNone) + { + aSmtpSet.SetSSLWrapper((TBool) intValue); + } + + if(scriptFileParser->GetFieldAsString(KCfgSmtpIapList, stringPtr) == KErrNone) + { + ReadSmtpIAPAndAddL(scriptFileParser, KCfgSmtpIapList, aSmtpIapPref); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpSNAPId, intValue) == KErrNone) + { + aSmtpIapPref.SetSNAPL(intValue); + } + + if(scriptFileParser->GetFieldAsInteger(KCfgSmtpBearerMobility, intValue) == KErrNone) + { + aSmtpSet.SetBearerMobility((TBool) intValue); + } + + CleanupStack::PopAndDestroy(2,scriptFileParser); + + } + +/** +ReadSmtpIAPAndAdd() +Gets the base string for the IAP list. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aParamListName +@param aSmtpIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpIAPAndAddL( + CT_MsgUtilsConfigFileParserUtility* aScriptFileParser, + const TDesC& aParamListName, CImIAPPreferences& aSmtpIapPref) + { + + TPtrC stringPtr; + TPtrC baseString; + + if( aScriptFileParser->GetFieldAsString(aParamListName, stringPtr) == KErrNone) + { + TInt start = 0; + TInt end = stringPtr.Length(); + + while (GetString(stringPtr ,start, end, baseString)) + { + ReadSmtpIAPAndAddFieldL(aScriptFileParser, baseString, aSmtpIapPref); + } + } + } + +/** +ReadSmtpIAPAndAddField() +Modifies the CImIAPPreferences object. + +@param aScriptFileParser +CT_MsgUtilsConfigFileParserUtility object. + +@param aFieldName +@param aSmtpIapPref +*/ +EXPORT_C void CT_MsgUtilsReadEmailSettingsFromConfigFile::ReadSmtpIAPAndAddFieldL( + CT_MsgUtilsConfigFileParserUtility* aScriptFileParser , + const TDesC& aFieldName, CImIAPPreferences& aSmtpIapPref) + { + TPtrC stringPtr; + TInt intTmp; + + TImIAPChoice iapChoice; + + iapChoice.iIAP = 0; + iapChoice.iDialogPref = ECommDbDialogPrefUnknown; + + TInt index = 0; + TBool modified = EFalse; + + HBufC* buf = HBufC::NewLC(100); + + buf->Des() = aFieldName; + buf->Des().Append(KSmtpIAPSuffix); + + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + iapChoice.iIAP = intTmp; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KSmtpCommDbDialogPref); + if(aScriptFileParser->GetFieldAsString(buf->Des(), stringPtr) == KErrNone) + { + TCommDbDialogPref setCommDbDialogPref = CT_MsgUtilsEnumConverter::ConvertDesToTCommDbDialogPref(stringPtr); + iapChoice.iDialogPref = setCommDbDialogPref; + modified = ETrue; + } + + buf->Des() = aFieldName; + buf->Des().Append(KSmtpIAPIndex); + if(aScriptFileParser->GetFieldAsInteger(buf->Des(), intTmp) == KErrNone) + { + index = intTmp; + modified = ETrue; + } + + if (modified) + { + aSmtpIapPref.AddIAPL(iapChoice, index); + } + CleanupStack::PopAndDestroy(buf); + } + + +/** +CompareIapPrefs() +Compares the IAP preference objects. + +@param aPrefs1 +CImIAPPreferences object. + +@param aPrefs2 +CImIAPPreferences object. + +@return +If the objects are same returns ETrue +*/ +EXPORT_C TBool CT_MsgUtilsReadEmailSettingsFromConfigFile::CompareIapPrefs(CImIAPPreferences& aPrefs1, CImIAPPreferences& aPrefs2) + { + // Compare version + if (aPrefs1.Version() != aPrefs2.Version()) + { + return EFalse; + } + // Compare number of IAPs stored + TInt numIAPs1 = aPrefs1.NumberOfIAPs(); + + if (numIAPs1 != aPrefs2.NumberOfIAPs()) + { + return EFalse; + } + // Compare individual IAPs + for (TInt i = 0; i < numIAPs1; i++) + { + if (aPrefs1.IAPPreference(i).iIAP != aPrefs2.IAPPreference(i).iIAP || + aPrefs1.IAPPreference(i).iDialogPref != aPrefs2.IAPPreference(i).iDialogPref) + { + return EFalse; + } + } + return ETrue; + }