diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/servermtmutils/src/IMSKSCR.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/servermtmutils/src/IMSKSCR.CPP Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,181 @@ +// Copyright (c) 1998-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 "IMSKSCR.H" +#include "IMSK.H" +#include "IMCVTEXT.H" + + +_LIT8(K_IM_SCRIPT_WAIT_STRING, "** Read cancelled"); + +CImTextServerScript::CImTextServerScript() : CActive(EPriorityStandard) + { + } + +CImTextServerScript *CImTextServerScript::NewL(TInt aPortNum) + { + CImTextServerScript* self =new(ELeave)CImTextServerScript(); + CleanupStack::PushL(self); + self->ConstructL(aPortNum); + CleanupStack::Pop(); + return self; + } +// +// 2nd phase of construction +// +void CImTextServerScript::ConstructL(TInt aPortNum) + { + CActiveScheduler::Add(this); + User::LeaveIfError(iFs.Connect()); + + TBuf<35> scriptFile; + scriptFile.Format(TRefByValue_L("c:\\Logs\\email\\imsk%d.scr"),aPortNum); + User::LeaveIfError(iFile.Open(iFs,scriptFile,EFileShareAny)); + +#ifndef _UNICODE + iScriptFileText.Set(iFile); +#endif + + } + +CImTextServerScript::~CImTextServerScript() + { + iFile.Close(); + iFs.Close(); + } + +void CImTextServerScript::RetrieveResponse(TDes8& theBuffer, TRequestStatus& aStatus) + { + iReportStatus = &aStatus; + TInt fileReadErr = KErrNone; + +#ifndef _UNICODE + fileReadErr = iScriptFileText.Read(iData); +#else + // _UNICODE read one line ASCII data + fileReadErr = ReadLine(); +#endif + + iNextFileSeg.Copy(iData); + + if( fileReadErr == KErrNone) + { + theBuffer.Append(iNextFileSeg); + } + else if(fileReadErr == KErrTooBig) + { + for(;;) + { + // read response from file +#ifndef _UNICODE + fileReadErr = iScriptFileText.Read(iData); +#else + // _UNICODE read one line ASCII data + fileReadErr = ReadLine(); +#endif + iNextFileSeg.Copy(iData); + TInt crLfPos = iNextFileSeg.Find(KImcvCRLF); + if(crLfPos == KErrNotFound) + { + theBuffer.Append(iNextFileSeg); + break; + } + else + { + theBuffer.Append(iNextFileSeg.Left(crLfPos)); + } + } + } + + iStatus = KRequestPending; + aStatus = KRequestPending; + SetActive(); + + if ((theBuffer.CompareF(K_IM_SCRIPT_WAIT_STRING) != 0) + && (fileReadErr != KErrEof)) + { + theBuffer.Append(KImcvCRLF); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + } + +// +// ReadLine() read ASCII into TBuf8 thingy if unicode build. +// +#ifdef _UNICODE +TInt CImTextServerScript::ReadLine() + { + TInt err = KErrNone; + + // Read into the buffer + TBuf8<256> buffer; // Max read of the Read() function.. + iData.Zero(); + + // Get the current file position + TInt filePos = 0; + iFile.Seek(ESeekCurrent, filePos); + + // Read the buffer + err = iFile.Read(buffer); + + //end of file? + TInt s = buffer.Length(); + if( s == 0) + { + err = KErrEof; + } + + if(err == KErrNone) + { + // Copy to the lfcr and then set the file pointer + // to the point after that... + TInt pos = buffer.Find(KImcvCRLF); + if( pos != -1) + { + iData.Justify(buffer, pos, ELeft, ' '); + filePos += (pos+2); + + // Set the file pointer back to after the lfcr.. + iFile.Seek(ESeekStart, filePos); + } + // Else fill the whole buffer 256 chars.. + else + { + iData.Copy(buffer); + } + } + return err; + } +#endif + +void CImTextServerScript::RunL() + { + User::RequestComplete(iReportStatus, KErrNone); + } + +void CImTextServerScript::DoCancel() + { + if (IsActive()) + { + if (iStatus == KRequestPending) + { + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + User::RequestComplete(iReportStatus, KErrNone); + } + } +