--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/testutils/email/src/emailtestutils.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,1151 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "emailtestutils.h"
+
+#include <c32comm.h>
+#include <e32test.h>
+#include <f32fsys.h>
+#include <s32file.h>
+#include <e32uid.h>
+#include <txtrich.h>
+#include <txtfmlyr.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <msvruids.h>
+#include <e32std.h>
+#include <mtclbase.h>
+#include <mtclreg.h>
+#include <msvapi.h>
+#include <mtmuids.h>
+#include <smuthdr.h>
+#include <miutset.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <commdbconnpref.h>
+#include <cemailaccounts.h>
+#include <iapprefs.h>
+
+#include <mmsvattachmentmanager.h>
+#include <cmsvattachment.h>
+#include <centralrepository.h>
+
+_LIT(KComputerNamePath, "c:\\msgtest\\MachineName.txt");
+
+EXPORT_C CEmailTestUtils* CEmailTestUtils::NewL(RTest& aRTest, TUint aCreationFlags)
+ {
+ CEmailTestUtils* self = NewLC(aRTest, aCreationFlags);
+ CleanupStack::Pop();
+ return self;
+ }
+
+EXPORT_C CEmailTestUtils* CEmailTestUtils::NewLC(RTest& aRTest, TUint aCreationFlags)
+ {
+ CEmailTestUtils* self = new (ELeave) CEmailTestUtils(aRTest);
+ CleanupStack::PushL(self);
+ self->ConstructL(aCreationFlags);
+ return self;
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiateImapClientMtmL()
+ {
+ // client side
+ iImapClientMtm = (CImap4ClientMtm*) InstantiateClientMtmL(KUidMsgTypeIMAP4, iImapServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiatePopClientMtmL()
+ {
+ iPopClientMtm = (CPop3ClientMtm*) InstantiateClientMtmL(KUidMsgTypePOP3, iPopServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiateSmtpClientMtmL()
+ {
+ iSmtpClientMtm = (CSmtpClientMtm*) InstantiateClientMtmL(KUidMsgTypeSMTP, iSmtpServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiateImapServerMtmL()
+ {
+ iImapServerMtm = (CBaseServerMtm*) InstantiateServerMtmL(KUidMsgTypeIMAP4, iImapServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiatePopServerMtmL()
+ {
+ iPopServerMtm = (CBaseServerMtm*) InstantiateServerMtmL(KUidMsgTypePOP3, iPopServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiateSmtpServerMtmL()
+ {
+ iSmtpServerMtm = (CBaseServerMtm*) InstantiateServerMtmL(KUidMsgTypeSMTP, iSmtpServiceId);
+ }
+
+EXPORT_C void CEmailTestUtils::CreateImapServerMtmRegL()
+ {
+ CreateServerMtmRegL(KUidMsgTypeIMAP4, _L("IMAP4"), KImap4ServerMtmFileName(), TMsvTestDllInfo(KImap4ClientMtmFileName, 3), KImap4DataLayerFileName(), KImap4DataLayerFileName(), KUidMsvTechnologyGroupEmail, imap4DatFile);
+ }
+
+EXPORT_C void CEmailTestUtils::CreateSmtpServerMtmRegL()
+ {
+ CreateServerMtmRegL(KUidMsgTypeSMTP, _L("SMTP"), KSmtpServerMtmFileName(), TMsvTestDllInfo(KSmtpClientMtmFileName,2), KSmtpDataLayerFileName(), KSmtpDataLayerFileName(), KUidMsvTechnologyGroupEmail, smtpDatFile);
+ }
+
+EXPORT_C void CEmailTestUtils::CreatePopServerMtmRegL()
+ {
+ CreateServerMtmRegL(KUidMsgTypePOP3, _L("POP3"), KPop3ServerMtmFileName(), KPop3ClientMtmFileName(), KPop3DataLayerFileName(), KPop3DataLayerFileName(), KUidMsvTechnologyGroupEmail, pop3DatFile);
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::CreateImapServiceL()
+ {
+ TInt err = KErrNone;
+ iImapServiceId = 0;
+ TRAP(err, ServiceIdL(KUidMsgTypeIMAP4, iImapServiceId));
+
+ if (err)
+ {
+ CEmailAccounts* account = CEmailAccounts::NewLC();
+
+ CImImap4Settings* imapSettings = new(ELeave) CImImap4Settings();
+ CleanupStack::PushL(imapSettings);
+
+ CImIAPPreferences* imapIAP = CImIAPPreferences::NewLC();
+
+ account->PopulateDefaultImapSettingsL(*imapSettings, *imapIAP);
+
+ _LIT(KImapServer, "imap.dial.pipex.com");
+ imapSettings->SetServerAddressL(KImapServer);
+ _LIT8(KImapLoginName, "abf75");
+ imapSettings->SetLoginNameL(KImapLoginName);
+ _LIT8(KImapPassword, "oodifama");
+ imapSettings->SetPasswordL(KImapPassword);
+ imapSettings->SetPort(143);
+
+ _LIT(KTxtAccountName, "ImapAccount");
+ TImapAccount imapAccount = account->CreateImapAccountL(KTxtAccountName, *imapSettings, *imapIAP, EFalse);
+
+ CleanupStack::PopAndDestroy(3, account); // imapIAP, imapSettings, account
+
+ ServiceIdL(KUidMsgTypeIMAP4, iImapServiceId);
+ }
+ else
+ {
+ Printf(_L("Imap Service Already Exists. You should delete the existing service first!\n"));
+ }
+
+
+ return iImapServiceId;
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::CreateSmtpServiceL()
+ {
+ TInt err = KErrNone;
+ iSmtpServiceId = 0;
+ TRAP(err, ServiceIdL(KUidMsgTypeSMTP, iSmtpServiceId));
+
+ if (err)
+ {
+ CEmailAccounts* account = CEmailAccounts::NewLC();
+
+ CImSmtpSettings* smtpSettings = new(ELeave) CImSmtpSettings();
+ CleanupStack::PushL(smtpSettings);
+
+ CImIAPPreferences* smtpIAP = CImIAPPreferences::NewLC();
+
+ account->PopulateDefaultSmtpSettingsL(*smtpSettings, *smtpIAP);
+
+ _LIT(KSmtpServer, "smtp.dial.pipex.com");
+ smtpSettings->SetServerAddressL(KSmtpServer);
+ smtpSettings->SetEmailAliasL(_L("Messaging Test1"));
+ _LIT(KSmtpEmailAddress, "msgtest1@internet-test.plc.psion.com");
+ smtpSettings->SetEmailAddressL(KSmtpEmailAddress);
+ smtpSettings->SetReplyToAddressL(KSmtpEmailAddress);
+ smtpSettings->SetBodyEncoding(EMsgOutboxMIME);
+ smtpSettings->SetReceiptAddressL(KSmtpEmailAddress);
+ smtpSettings->SetPort(25);
+
+ _LIT(KTxtAccountName, "SmtpAccount");
+ TSmtpAccount smtpAccount = account->CreateSmtpAccountL(KTxtAccountName, *smtpSettings, *smtpIAP, EFalse);
+
+ CleanupStack::PopAndDestroy(3, account); // smtpIAP, smtpSettings, account
+
+ ServiceIdL(KUidMsgTypeSMTP, iSmtpServiceId);
+ }
+ else
+ {
+ Printf(_L("Smtp Service Already Exists\n"));
+ }
+
+ return iSmtpServiceId;
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::CreatePopServiceL()
+ {
+ TInt err = KErrNone;
+ iPopServiceId = 0;
+ TRAP(err, ServiceIdL(KUidMsgTypePOP3, iPopServiceId));
+
+ if (err)
+ {
+ CEmailAccounts* account = CEmailAccounts::NewLC();
+
+ CImPop3Settings* popSettings = new(ELeave) CImPop3Settings();
+ CleanupStack::PushL(popSettings);
+
+ CImIAPPreferences* popIAP = CImIAPPreferences::NewLC();
+
+ account->PopulateDefaultPopSettingsL(*popSettings, *popIAP);
+
+ _LIT(KTxtAccountName, "PopAccount");
+ TPopAccount popAccount = account->CreatePopAccountL(KTxtAccountName, *popSettings, *popIAP, EFalse);
+
+ CleanupStack::PopAndDestroy(3, account); // popIAP,popSettings, account
+
+ ServiceIdL(KUidMsgTypePOP3, iPopServiceId);
+ }
+ else
+ {
+ Printf(_L("Pop Service Already Exists. You should delete the existing service first!\n"));
+ }
+
+
+ return iPopServiceId;
+ }
+
+EXPORT_C void CEmailTestUtils::DeleteImapServiceL()
+ {
+ DeleteServiceL(KUidMsgTypeIMAP4);
+ }
+
+EXPORT_C void CEmailTestUtils::DeleteSmtpServiceL()
+ {
+ DeleteServiceL(KUidMsgTypeSMTP);
+ }
+
+EXPORT_C void CEmailTestUtils::DeleteScriptFilesFromLogsDirL()
+ {
+ // Deletes any *.scr file from C:\logs\email directory
+ // to enable dialup connection
+
+ TBuf<5> buf(_L("*.scr"));
+ TFileName deleteFile;
+ deleteFile.Append(KEmailDataDir);
+ deleteFile.Append(buf);
+
+ TFindFile finder(iFs);
+ CDir* dirs = NULL;
+ TInt err = finder.FindWildByDir(deleteFile, KEmailDataDir, dirs);
+
+ __ASSERT_ALWAYS((err == KErrNone) || (err == KErrNotFound), Panic(KErrGeneral));
+
+ CFileMan* fileMan = CFileMan::NewL(iFs);
+ CleanupStack::PushL(fileMan);
+ fileMan->Delete(deleteFile);
+
+ CleanupStack::PopAndDestroy(); // fileMan
+ delete dirs;
+ }
+
+EXPORT_C void CEmailTestUtils::DeletePopServiceL()
+ {
+ DeleteServiceL(KUidMsgTypePOP3);
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::FindImapServiceL()
+ {
+ TMsvId firstId = 0;
+ ServiceIdL(KUidMsgTypeIMAP4, firstId);
+ return firstId;
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::FindSmtpServiceL()
+ {
+ TMsvId firstId = 0;
+ ServiceIdL(KUidMsgTypeSMTP, firstId);
+ return firstId;
+ }
+
+EXPORT_C TMsvId CEmailTestUtils::FindPopServiceL()
+ {
+ TMsvId firstId = 0;
+ ServiceIdL(KUidMsgTypePOP3, firstId);
+ return firstId;
+ }
+
+EXPORT_C void CEmailTestUtils::Reset()
+ {
+ DeleteCurrentMtm();
+
+ CMsvTestUtils::Reset();
+ }
+
+EXPORT_C void CEmailTestUtils::ClearEmailAccountsL()
+ {
+ TBool isServerSide = EFalse;
+ if( iClientServer == EServerSide )
+ {
+ isServerSide = ETrue;
+ GoClientSideL();
+ }
+
+ CRepository* popRepository = CRepository::NewL(KUidMsgTypePOP3);
+ popRepository->Reset();
+ delete popRepository;
+ CRepository* imapRepository = CRepository::NewL(KUidMsgTypeIMAP4);
+ imapRepository->Reset();
+ delete imapRepository;
+ CRepository* smtpRepository = CRepository::NewL(KUidMsgTypeSMTP);
+ smtpRepository->Reset();
+ delete smtpRepository;
+
+ if( isServerSide )
+ {
+ GoServerSideL();
+ }
+ }
+
+void CEmailTestUtils::DeleteCurrentMtm()
+ {
+ if (iImapClientMtm)
+ {
+ delete iImapClientMtm;
+ iImapClientMtm = NULL;
+ }
+ if (iPopClientMtm)
+ {
+ delete iPopClientMtm;
+ iPopClientMtm = NULL;
+ }
+ if (iSmtpClientMtm)
+ {
+ delete iSmtpClientMtm;
+ iSmtpClientMtm = NULL;
+ }
+ if (iImapServerMtm)
+ {
+ delete iImapServerMtm;
+ iImapServerMtm = NULL;
+ iServerEntry=NULL;
+ }
+ if (iPopServerMtm)
+ {
+ delete iPopServerMtm;
+ iPopServerMtm = NULL;
+ iServerEntry=NULL;
+ }
+ if (iSmtpServerMtm)
+ {
+ delete iSmtpServerMtm;
+ iSmtpServerMtm = NULL;
+ iServerEntry=NULL;
+ }
+ }
+
+EXPORT_C const TDesC8& CEmailTestUtils::MachineName()
+ {
+ return *iMachineName;
+ }
+
+EXPORT_C CEmailTestUtils::~CEmailTestUtils()
+ {
+ Reset();
+ delete iMachineName;
+ }
+
+CEmailTestUtils::CEmailTestUtils(RTest& aRTest)
+: CMsvTestUtils(aRTest), iSmtpServiceId(KMsvNullIndexEntryId)
+ {
+ StartC32();
+ }
+
+void CEmailTestUtils::ConstructL(TUint aCreationFlags)
+ {
+ CMsvTestUtils::ConstructL(aCreationFlags);
+ CMsvTestUtils::SpecifyLogsDir(KEmailDataDir);
+
+ // Read the machine name and assign to iMachineName.
+ RFile file;
+ User::LeaveIfError(file.Open(iFs, KComputerNamePath, EFileRead));
+ CleanupClosePushL(file);
+
+ TInt fileSize;
+ User::LeaveIfError(file.Size(fileSize));
+ iMachineName = HBufC8::NewL(fileSize);
+ TPtr8 bufferPtr = iMachineName->Des();
+ User::LeaveIfError(file.Read(bufferPtr));
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+void CEmailTestUtils::Panic(TInt aPanic)
+ {
+ User::Panic(EmailTEST_PANIC, aPanic);
+ }
+
+void CEmailTestUtils::Panic(TEmailTestUtilsPanic aPanic)
+ {
+ Panic((TInt) aPanic);
+ }
+
+EXPORT_C void CEmailTestUtils::InstallSmtpMtmGroupL()
+ {
+ InstallMtmGroupL(smtpDatFile);
+ }
+
+EXPORT_C void CEmailTestUtils::InstallPopMtmGroupL()
+ {
+ InstallMtmGroupL(pop3DatFile);
+ }
+
+EXPORT_C void CEmailTestUtils::InstallImapMtmGroupL()
+ {
+ InstallMtmGroupL(imap4DatFile);
+ }
+
+void CEmailTestUtils::SetFolderType(TMsvEntry& aMsvEntry, TPtrC& type)
+ {
+ TMsvEmailEntry& entry = (TMsvEmailEntry&)aMsvEntry;
+
+ if(entry.iType == KUidMsvRootEntry)
+ type.Set(_L("ROOT"));
+ else if(entry.iType == KUidMsvServiceEntry)
+ type.Set(_L("SERVICE"));
+ else if(entry.iType == KUidMsvFolderEntry)
+ {
+ if (entry.MessageFolderType() == EFolderTypeAlternative)
+ type.Set(_L("FOLDER_ALT"));
+ else if (entry.MessageFolderType() == EFolderTypeMixed)
+ type.Set(_L("FOLDER_MIX"));
+ else if (entry.MessageFolderType() == EFolderTypeRelated)
+ type.Set(_L("FOLDER_REL"));
+ else if (entry.MessageFolderType() == EFolderTypeRFC822)
+ type.Set(_L("FOLDER_RFC"));
+ else if (entry.MessageFolderType() == EFolderTypeUnknown)
+ type.Set(_L("FOLDER_UNKWN"));
+ else if (entry.MessageFolderType() == EFolderTypeParallel)
+ type.Set(_L("FOLDER_PLL"));
+ else if (entry.MessageFolderType() == EFolderTypeDigest)
+ type.Set(_L("FOLDER_DGST"));
+ else if (entry.MessageFolderType() == EFolderTypePartial)
+ type.Set(_L("FOLDER_PARTL"));
+ else if (entry.MessageFolderType() == EFolderTypeDirectory)
+ type.Set(_L("FOLDER_DIR"));
+ else if (entry.MessageFolderType() == EFolderTypeExternal)
+ type.Set(_L("FOLDER_EXT"));
+ else
+ type.Set(_L("FOLDER"));
+ }
+ else if(entry.iType == KUidMsvMessageEntry)
+ type.Set(_L("MESSAGE"));
+ else if(entry.iType == KUidMsvEmailTextEntry)
+ type.Set(_L("TEXT"));
+ else if(entry.iType == KUidMsvEmailHtmlEntry)
+ type.Set(_L("HTML"));
+ else if(entry.iType == KUidMsvAttachmentEntry)
+ type.Set(_L("ATTACHMENT"));
+ else
+ type.Set(_L("UNKNOWN"));
+ }
+
+EXPORT_C void CEmailTestUtils::ListChildrenL(RFile& aFile, CDir& rfcFileList, TInt& aCount, TInt& aEntryCount, TBool aReplace, TBool aOtherFiles)
+ {
+ // Check details of attachments on current context entry
+
+
+ CMsvEntrySelection* msvSelection = NULL;
+ TMsvEmailEntry entry;
+
+ if (iClientServer==EClientSide)
+ {
+ entry = (TMsvEmailEntry&) iMsvEntry->Entry();
+ msvSelection = iMsvEntry->ChildrenL();
+ }
+ else
+ {
+ entry = (TMsvEmailEntry&) iServerEntry->Entry();
+ msvSelection = new (ELeave) CMsvEntrySelection;
+ iServerEntry->GetChildren(*msvSelection);
+ }
+ CleanupStack::PushL(msvSelection);
+
+ TInt attachCount = msvSelection->Count(); // For each child ..
+ TInt bodySize=0;
+
+ TPtrC type;
+
+ SetFolderType(entry, type);
+
+ TPtrC priority;
+
+ TMsvPriority temp=entry.Priority();
+ if(temp==EMsvHighPriority)
+ priority.Set(_L("High "));
+ else if(temp==EMsvMediumPriority)
+ priority.Set(_L("Medium"));
+ else if(temp==EMsvLowPriority)
+ priority.Set(_L("Low "));
+ else
+ priority.Set(_L("None "));
+
+
+ TBuf<6> streams=_L("------");
+
+ if ((iClientServer==EClientSide && iMsvEntry->HasStoreL()) ||
+ (iClientServer==EServerSide && iServerEntry->HasStoreL()))
+ {
+ CMsvStore* fileStore;
+ fileStore = (iClientServer==EClientSide) ? iMsvEntry->ReadStoreL() : iServerEntry->ReadStoreL();
+
+ if(fileStore->IsPresentL(KUidMsgFileIMailHeader))
+ {
+ if (aOtherFiles)
+ DisplayHeaderL(entry.Id(), *fileStore, iLogsDir, aReplace);
+ streams.Replace(0, 1, _L("H"));
+ }
+ if(fileStore->IsPresentL(KUidMsgFileMimeHeader))
+ {
+ if (aOtherFiles)
+ DisplayMimeHeaderL(entry.Id(), *fileStore, iLogsDir, aReplace);
+ streams.Replace(1, 1, _L("M"));
+ }
+ if(fileStore->HasBodyTextL())
+ {
+ if (aOtherFiles)
+ WriteBodyDataL(entry.Id(), iLogsDir, *fileStore, aReplace);
+ streams.Replace(2, 1, _L("B"));
+ CParaFormatLayer* paraLayer = CParaFormatLayer::NewL();
+ CCharFormatLayer* charLayer = CCharFormatLayer::NewL();
+ CRichText* body = CRichText::NewL(paraLayer,charLayer);
+ fileStore->RestoreBodyTextL(*body);
+ bodySize=body->DocumentLength();
+ delete paraLayer;
+ delete charLayer;
+ delete body;
+ }
+ delete fileStore;
+ }
+
+ if((entry.iType==KUidMsvAttachmentEntry || entry.iType==KUidMsvEmailHtmlEntry))
+ {
+ TFileName filepath;
+
+ TBool storePresent;
+ if(iClientServer==EClientSide)
+ {
+ storePresent=iMsvEntry->HasStoreL();
+ }
+ else
+ {
+ storePresent=iServerEntry->HasStoreL();
+ }
+
+ if(storePresent)
+ {
+ CMsvStore* store;
+ if (iClientServer==EClientSide)
+ {
+ store = iMsvEntry->ReadStoreL();
+ CleanupStack::PushL(store);
+ }
+ else
+ {
+ store = iServerEntry->ReadStoreL();
+ CleanupStack::PushL(store);
+ }
+
+ MMsvAttachmentManager& manager = store->AttachmentManagerL();
+ if( manager.AttachmentCount()>0 )
+ {
+ // there should only be one attachment per entry
+ CMsvAttachment* attachmentInfo = manager.GetAttachmentInfoL(0);
+ filepath = attachmentInfo->FilePath();
+ delete attachmentInfo;
+ }
+
+ CleanupStack::PopAndDestroy(store);
+ }
+
+ if(storePresent)
+ if (aOtherFiles)
+ WriteFileDataL(entry.Id(), filepath, iLogsDir, aReplace);
+ }
+
+ if(entry.Attachment())
+ streams.Replace(3, 1, _L("A"));
+ if(entry.Receipt())
+ streams.Replace(4, 1, _L("R"));
+
+ TBuf<16> other=_L("------ ------");
+ if(entry.VCalendar())
+ other.Replace(7, 2, _L("CAL"));
+ if(entry.ICalendar())
+ other.Replace(7, 2, _L("ICS"));
+ if(entry.VCard())
+ other.Replace(10, 2, _L("CAR"));
+
+ if (entry.New())
+ other.Replace(0, 1, _L("N"));
+ if (entry.Unread())
+ other.Replace(1, 1, _L("U"));
+ if (entry.Complete())
+ other.Replace(2, 1, _L("C"));
+ if (entry.BodyTextComplete())
+ other.Replace(3, 1, _L("B"));
+ if (entry.MHTMLEmail())
+ other.Replace(4, 1, _L("H"));
+ if (entry.Visible())
+ other.Replace(5, 1, _L("V"));
+
+ HBufC* outputL = HBufC::NewLC(600);
+ TPtr outputLine = outputL->Des();
+
+ // Put details into output string buffer
+ TMsvId current=entry.Id();
+ TMsvEntry parent;
+ if (entry.Parent() > 0)
+ {
+ if (iClientServer==EClientSide)
+ {
+ iMsvEntry->SetEntryL(entry.Parent());
+ parent=iMsvEntry->Entry();
+ }
+ else
+ {
+ iServerEntry->SetEntry(entry.Parent());
+ parent=iServerEntry->Entry();
+ }
+ }
+
+ if((parent.iType==KUidMsvFolderEntry)&&(parent.iDetails.Compare(_L("Outbox"))>=0)
+ && &rfcFileList && iFileCount < rfcFileList.Count())
+ {
+ TFileName filename = (rfcFileList)[iFileCount].iName;
+ filename.SetLength(8);
+ outputLine.Append(filename);
+ iFileCount++;
+ }
+ else
+ outputLine.AppendFormat(_L(" "));
+
+ if (iClientServer==EClientSide)
+ {
+ iMsvEntry->SetEntryL(current);
+ entry = iMsvEntry->Entry();
+ }
+ else
+ {
+ iServerEntry->SetEntry(current);
+ entry = iServerEntry->Entry();
+ }
+
+ for(TInt i=0; i < aCount; i++)
+ outputLine.AppendFormat(_L(" "));
+
+ if (entry.iType == KUidMsvEmailTextEntry)
+ outputLine.AppendFormat(TRefByValue<const TDesC>_L("%S, 00%x, Children=%d, Size=%d, Store=%S, P=%S, Other=%S, Det:%S, Desc:%S, TxtSize:%d\r\n"),
+ &type,
+ entry.Id(),
+ attachCount,
+ entry.iSize,
+ &streams,
+ &priority,
+ &other,
+ &entry.iDetails,
+ &entry.iDescription,
+ bodySize);
+ else
+ outputLine.AppendFormat(TRefByValue<const TDesC>_L("%S, 00%x, Children=%d, Size=%d, Store=%S, P=%S, Other=%S, Det:%S, Desc:%S\r\n"),
+ &type,
+ entry.Id(),
+ attachCount,
+ entry.iSize,
+ &streams,
+ &priority,
+ &other,
+ &entry.iDetails,
+ &entry.iDescription);
+
+ HBufC8* pOutputLine8 = HBufC8::NewLC(outputLine.Length());
+ pOutputLine8->Des().Copy(outputLine);
+ aFile.Write(pOutputLine8->Des());
+ CleanupStack::PopAndDestroy(); // pBuf16
+
+ for(TInt j=0; j<attachCount; j++)
+ {
+ // Get Context of current message
+ if (iClientServer==EClientSide)
+ iMsvEntry->SetEntryL((*msvSelection)[j]);
+ else
+ iServerEntry->SetEntry((*msvSelection)[j]);
+
+ aEntryCount++;
+ aCount++;
+ ListChildrenL(aFile, rfcFileList, aCount, aEntryCount, EFalse, aOtherFiles);
+ aCount--;
+ }
+
+ CleanupStack::PopAndDestroy(2); // msvSelection, outputL
+ }
+
+void CEmailTestUtils::DisplayMimeHeaderL(TMsvId aId, CMsvStore& fileStore, const TFileName& aFilepath, TBool aReplace)
+ {
+ TFileName filename(aFilepath);
+ filename.Append(KFileNameMimeHeaders);
+
+ RFile file;
+
+ TInt err = KErrNone;
+ if (aReplace)
+ err = file.Replace(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+ else
+ err = file.Open(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+ if(err==KErrNotFound) // file does not exist - create it
+ err=file.Create(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+
+ TInt offset=0;
+ iRTest(file.Seek(ESeekEnd, offset)==KErrNone);
+
+ TBuf8<600> buf;
+ buf.Zero();
+ buf.AppendFormat(_L8("*** 00%x ************* Mime Header ******************\n"), aId);
+
+ CImMimeHeader* mimeHeader = CImMimeHeader::NewL();
+ mimeHeader->RestoreL(fileStore);
+
+ TBuf<300> buf2;
+
+ buf.AppendFormat(_L8("Version: %d\r\n"),mimeHeader->Version());
+ file.Write(buf);
+
+ buf.Zero();
+ buf.AppendFormat(_L8("MimeCharset: %d\r\n"),mimeHeader->MimeCharset());
+ file.Write(buf);
+ if(mimeHeader->ContentType().Length())
+ {
+ buf2.Copy(mimeHeader->ContentType());
+ DoBuf(buf, _L("Content-Type: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentSubType().Length())
+ {
+ buf2.Copy(mimeHeader->ContentSubType());
+ DoBuf(buf, _L("Content-Type,SubType: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentDisposition().Length())
+ {
+ buf2.Copy(mimeHeader->ContentDisposition());
+ DoBuf(buf, _L("Content-Disposition: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentDescription().Length())
+ {
+ buf2.Copy(mimeHeader->ContentDescription());
+ DoBuf(buf, _L("Content-Description: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentBase().Length())
+ {
+ buf2.Copy(mimeHeader->ContentBase());
+ DoBuf(buf, _L("Content-Base: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentID().Length())
+ {
+ buf2.Copy(mimeHeader->ContentID());
+ DoBuf(buf, _L("Content-ID: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentLocation().Length())
+ {
+ buf2.Copy(mimeHeader->ContentLocation());
+ DoBuf(buf, _L("Content-Location: "), buf2);
+ }
+ else buf.Zero();
+ file.Write(buf);
+
+ if(mimeHeader->ContentTransferEncoding())
+ {
+ buf.AppendFormat(_L8("Content-Transfer-Encoding: %d\r\n"),mimeHeader->ContentTransferEncoding());
+ file.Write(buf);
+ }
+
+ PrintRecipients( mimeHeader->ContentTypeParams(), _L("ContentTypeParams:"), file);
+ PrintRecipients( mimeHeader->ContentDispositionParams(), _L("ContentDispositionParams:"), file);
+
+ file.Write(_L8("\n******************** end of MIME Header ****************\n"));
+ file.Close();
+ delete mimeHeader;
+ }
+
+void CEmailTestUtils::PrintRecipients(CDesC8Array& list, const TDesC& label, RFile file)
+ {
+ TBuf8<300> buf;
+
+ for(int i=0; i < list.Count(); i++)
+ {
+ buf.Zero();
+ buf.Copy(label);
+ buf.Append(list[i]);
+ buf.Append(_L("\r\n"));
+ file.Write(buf);
+ }
+ }
+
+void CEmailTestUtils::PrintRecipientsL(CDesC16Array& list, const TDesC& label, RFile file)
+ {
+ TBuf8<300> buf;
+
+ for(int i=0; i < list.Count(); i++)
+ {
+ buf.Zero();
+ buf.Copy(label);
+
+ HBufC8* liststr=HBufC8::NewLC(list[i].Length());
+ liststr->Des().Copy(list[i]);
+
+ buf.Append(*liststr);
+ buf.Append(_L("\r\n"));
+ file.Write(buf);
+
+ CleanupStack::PopAndDestroy();
+ }
+ }
+
+
+void CEmailTestUtils::DisplayHeaderL(TMsvId aId, CMsvStore& fileStore, const TFileName& aFilepath, TBool aReplace)
+ {
+ TFileName filename(aFilepath);
+ filename.Append(KFileNameHeaders);
+
+ RFile file;
+
+ TInt err = KErrNone;
+
+ if (aReplace)
+ err = file.Replace(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+ else
+ err = file.Open(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+ if(err==KErrNotFound) // file does not exist - create it
+ err=file.Create(iFs, filename, EFileShareAny | EFileStreamText | EFileWrite);
+
+ TInt offset=0;
+ iRTest(file.Seek(ESeekEnd, offset)==KErrNone);
+
+ TBuf8<300> buf;
+ buf.Zero();
+ buf.AppendFormat(_L8("*** 00%x ************* Rfc822 Header ****************\n"), aId);
+ file.Write(buf);
+
+ CImHeader* header = CImHeader::NewLC(); // PushL(header)
+ CleanupStack::Pop(); // header
+
+ TUint emptySize = header->DataSize();
+ header->RestoreL(fileStore);
+
+ TUint size = header->DataSize()-emptySize;
+ buf.Zero();
+ buf.AppendFormat(_L8("Size >>> %d\n"), size);
+ file.Write(buf);
+
+ if(header->Subject().Length())
+ DoBuf(buf, _L("Subject: "), header->Subject());
+ else buf.Zero();
+ file.Write(buf);
+
+ if(header->From().Length())
+ DoBuf(buf, _L("From: "), header->From());
+ else buf.Zero();
+ file.Write(buf);
+
+ if(header->ReplyTo().Length())
+ DoBuf(buf, _L("Return-Path: "), header->ReplyTo());
+ else buf.Zero();
+ file.Write(buf);
+
+ if(header->ImMsgId().Length())
+ DoBuf(buf, _L("ID: "), header->ImMsgId());
+ else buf.Zero();
+ file.Write(buf);
+
+ if(header->ReceiptAddress().Length())
+ DoBuf(buf, _L("Return-Receipt-To: "), header->ReceiptAddress());
+ else buf.Zero();
+ file.Write(buf);
+
+ PrintRecipientsL(header->ToRecipients(), _L("To:"), file);
+ PrintRecipientsL(header->CcRecipients(), _L("Cc:"), file);
+ PrintRecipientsL(header->BccRecipients(), _L("Bcc:"), file);
+
+ file.Write(_L8("\n******************** end of RFC822 header **************\n"));
+ file.Close();
+ delete header;
+ }
+
+
+EXPORT_C void CEmailTestUtils::CopyScriptFileL(const TDesC& aSourceFile, const TDesC& aDestPath, const TDesC& aPortNumber)
+ {
+ TFileName destPath = aDestPath;
+ // Make the destination file name.
+ destPath.Append(_L("imsk"));
+ destPath.Append(aPortNumber);
+ destPath.Append(_L(".scr"));
+
+ // Delete the existing script file if it is there.
+ TInt err = iFs.Delete(destPath);
+ __ASSERT_ALWAYS((err == KErrNone) || (err == KErrNotFound), Panic(KErrGeneral));
+
+ // Copy the file.
+ CFileMan* fileMan = CFileMan::NewL(iFs);
+ CleanupStack::PushL(fileMan);
+ User::LeaveIfError(fileMan->Copy(aSourceFile, destPath));
+ CleanupStack::PopAndDestroy(); // fileMan
+ }
+
+EXPORT_C void CEmailTestUtils::CopyScriptFileL(const TDesC& aSourceFile, const TDesC& aPortNumber)
+ {
+ CopyScriptFileL(aSourceFile, _L("c:\\logs\\email\\"), aPortNumber);
+ }
+
+
+EXPORT_C void CEmailTestUtils::CreateMessageFilesL(TMsvId aFinalServiceId, TMsvId aCreateInFolderId)
+ {
+ CreateMessageFilesL(aFinalServiceId,aCreateInFolderId,KRfc822Dir);
+ }
+
+EXPORT_C void CEmailTestUtils::CreateMessageFilesL(TMsvId aFinalServiceId, TMsvId aCreateInFolderId,const TDesC& aPath)
+ {
+ iServerEntry->SetEntry(aFinalServiceId);
+ TInt counter=0;
+ TInt numberOfFiles=0;
+
+ // Call this function to convert each text file found in \rfc822\ directory into
+ // message files in \mail\ directory
+
+ iFs.SetSessionPath(aPath);
+
+ iRTest.Printf(_L("Generating files :"));
+
+ CDir* rfcFileList;
+ // Loads the any test files into an EntryList
+ TInt error=iFs.GetDir(_L("RFC822*.TXT"), KEntryAttNormal, ESortByName, rfcFileList);
+ if(!error)
+ {
+ numberOfFiles = rfcFileList->Count();
+ if(numberOfFiles)
+ {
+ do {
+ iRTest.Printf(_L("."));
+ TFileName filename = (*rfcFileList)[counter].iName;
+ CreateMessageL(filename, aFinalServiceId, aCreateInFolderId);
+ counter++;
+ }
+ while(counter<numberOfFiles);
+ }
+ else
+ iRTest.Printf(_L("WARNING - There are no RFC files in test file source directory\n"));
+ }
+ else
+ iRTest.Printf(TRefByValue<const TDesC>_L("\r\nFile error %d"), error);
+
+ delete rfcFileList;
+ }
+
+EXPORT_C void CEmailTestUtils::CreateMessageL(const TDesC& filename, TMsvId aFinalServiceId, TMsvId aCreateInFolderId)
+ {
+ User::LeaveIfError(iServerEntry->SetEntry(aFinalServiceId));
+ CImRecvConvert* recvConvert = CImRecvConvert::NewLC(iFs, iServerEntry, iServerEntry->Entry().iMtm, aFinalServiceId);
+ recvConvert->SetMsvId(aCreateInFolderId); //Set the TMsvServerEntry to correct context
+
+ TRAPD(error,ReadDataL(recvConvert, filename)); // Do the stuff
+ CleanupStack::PopAndDestroy(); //recvConvert
+ }
+
+void CEmailTestUtils::ReadDataL(CImRecvConvert* recvConvert, TFileName fileName)
+ {
+ // open the file
+ RFile file;
+
+ TInt anError = file.Open(iFs, fileName, EFileShareAny);
+ if(anError != KErrNone)
+ {
+ iRTest.Printf(TRefByValue<const TDesC>_L("\r\nFile open error %d"), anError);
+ iRTest.Getch();
+ User::Leave(KErrNotFound);
+ }
+
+ // read the file into the conversion object
+ TBuf8<1024> line;
+ TBuf8<1> aChar;
+ TBool finished = FALSE;
+
+ recvConvert->ResetL();
+ // supply a new attachment path since previous one is discarded by call to Reset()
+
+ do {
+ line.FillZ();
+ line.SetLength(0);
+ // compile a line one char at a time
+ do {
+ file.Read(aChar, 1);
+ if(aChar.Length())
+ line.Append(aChar);
+ else
+ finished = TRUE;
+ // stop at the end of line or no more data
+ } while(aChar.Length() && aChar[0] != 0x0A);
+ if(!line.Length())
+ break;
+ /***********************************************/
+ /* -- This is where we actually do the work -- */
+ /***********************************************/
+ recvConvert->ParseNextField(line); // This function doesnt actually leave, any leaves are relayed to the MessageCompleteL() function
+ } while(!finished);
+
+ TRAPD(err, recvConvert->MessageCompleteL());
+ if(err!=KErrNone)
+ {
+ // At this point the message should be deleted and CImRecvConvert should be Reset()
+ iRTest.Printf(TRefByValue<const TDesC>_L("\r\nError %d occured during the conversion of Message %d"), err, recvConvert->EntryId());
+ iRTest.Getch();
+ }
+
+ file.Close();
+ }
+
+
+EXPORT_C void CEmailTestUtils::CreateAllTestDirectories()
+ {
+ CMsvTestUtils::CreateAllTestDirectories();
+
+ iFs.SetSessionPath(_L("c:\\"));
+
+ if (!iFs.MkDir(KMailtestPath))
+ {
+ Printf(_L("Created c:\\mailtest\\ directory\n"));
+ }
+
+ TUint AttValue;
+
+ if (iFs.Att(KImcmResourceLocation, AttValue))
+ {
+ if (iFs.Att(_L("z:\\resource\\messaging\\imcm.rsc"),AttValue))
+ {
+ Printf(_L("WARNING - IMCM.RSC cannot be found\n"));
+ }
+ }
+
+ if (!iFs.MkDir(KEmailDataDir))
+ {
+ Printf(_L("Created c:\\logs\\email directory\n"));
+ }
+
+ if (!iFs.MkDir(KRfc822Dir))
+ {
+ Printf(_L("Created empty c:\\mailtest\\rfc822 directory. Nb. No messages to send\n"));
+ Printf(_L("Put RFC822*.TXT files into c:\\mailtest\\rfc822 directory to run test harness\n"));
+ }
+ }
+
+
+EXPORT_C void CEmailTestUtils::InstantiateClientMtmsL()
+ {
+ InstantiateImapClientMtmL();
+ InstantiatePopClientMtmL();
+ InstantiateSmtpClientMtmL();
+ }
+
+EXPORT_C void CEmailTestUtils::InstantiateServerMtmsL()
+ {
+ InstantiateImapServerMtmL();
+ InstantiatePopServerMtmL();
+ InstantiateSmtpServerMtmL();
+ }
+
+EXPORT_C void CEmailTestUtils::DeleteServicesL()
+ {
+ DeleteImapServiceL();
+ DeleteSmtpServiceL();
+ DeletePopServiceL();
+ }
+
+EXPORT_C void CEmailTestUtils::CreateServicesL()
+ {
+ CreateImapServiceL();
+ CreatePopServiceL();
+ CreateSmtpServiceL();
+ }
+
+EXPORT_C void CEmailTestUtils::FindExistingServicesL()
+ {
+ TRAPD(err, iImapServiceId = FindImapServiceL());
+
+ if (err)
+ Printf(_L("Imap Service Not Found\n"));
+
+ TRAP(err, iSmtpServiceId = FindSmtpServiceL());
+
+ if (err)
+ Printf(_L("Smtp Service Not Found\n"));
+
+ TRAP(err, iPopServiceId = FindPopServiceL());
+
+ if (err)
+ Printf(_L("Pop Service Not Found\n"));
+ }
+
+EXPORT_C void CEmailTestUtils::InstallMtmGroupsL()
+ {
+ InstallSmtpMtmGroupL();
+ InstallPopMtmGroupL();
+ InstallImapMtmGroupL();
+ }
+
+EXPORT_C void CEmailTestUtils::CreateServerMtmRegsL()
+ {
+ CreateImapServerMtmRegL();
+ CreateSmtpServerMtmRegL();
+ CreatePopServerMtmRegL();
+ }
+
+
+EXPORT_C void CEmailTestUtils::StartConnectionL(TUint32 aIAP)
+ {
+ RSocketServ serv;
+ User::LeaveIfError(serv.Connect());
+ RConnection conn;
+ User::LeaveIfError(conn.Open(serv));
+ TCommDbConnPref prefs;
+ prefs.SetDirection(ECommDbConnectionDirectionOutgoing);
+ prefs.SetBearerSet(KCommDbBearerWcdma | KCommDbBearerCSD);
+ prefs.SetIapId(aIAP);
+ prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
+ TRequestStatus status;
+ conn.Start(prefs, status);
+ User::WaitForRequest(status);
+
+ if (status.Int() != KErrNone && status.Int() != KErrAlreadyExists && status.Int() != KErrInUse)
+ User::Leave(status.Int());
+ }
+