diff -r 000000000000 -r 8e480a14352b messagingfw/msgtest/testutils/email/src/emailtestutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/testutils/email/src/emailtestutils.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +_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_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_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; jSetEntryL((*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_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_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_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()); + } +