email/pop3andsmtpmtm/imapservermtm/test/src/ScriptFileProcessor.cpp
changeset 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/imapservermtm/test/src/ScriptFileProcessor.cpp	Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,128 @@
+// 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 "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 "scriptfileprocessor.h"
+
+
+const TChar KDelimiter=0x0A;
+//
+//CScriptFileProcessor
+//
+
+CScriptFileProcessor* CScriptFileProcessor::NewLC(const TDesC& aScriptFile)
+	{
+	CScriptFileProcessor* self=new (ELeave)CScriptFileProcessor;
+	CleanupStack::PushL(self);
+	self->ConstructL(aScriptFile);
+	return self;
+	}
+
+
+CScriptFileProcessor* CScriptFileProcessor::NewL(const TDesC& aScriptFile)
+	{
+	CScriptFileProcessor* self=CScriptFileProcessor::NewLC(aScriptFile);
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+void CScriptFileProcessor::ConstructL(const TDesC& aScriptFile)
+	{
+	User::LeaveIfError(iFSession.Connect());
+    User::LeaveIfError(iFile.Open(iFSession, aScriptFile, EFileRead));
+    iFileReadStream.Attach(iFile);   
+	}
+
+CScriptFileProcessor::CScriptFileProcessor()
+	{
+	}	
+CScriptFileProcessor::~CScriptFileProcessor()
+	{
+	iFile.Close();
+	iFileReadStream.Close();
+	iFSession.Close();
+	}
+	
+//
+//DataDirection
+//
+ 
+CScriptFileProcessor::TDataDirection CScriptFileProcessor::DataDirection() const
+	{
+	return iDataDirection; 	
+	}
+
+//
+//ProcessLine
+//
+
+ TInt CScriptFileProcessor::ProcessLine(TDes8& aLine)
+	{
+		
+	//get the direction of the data
+	const TInt KSpecifierLength=3;	
+	_LIT8(KFromServer,"<< ");
+	_LIT8(KFromClient,">> ");
+	
+	//if the data is from the server then the specifier should be at the begining of the line
+	TInt pos;
+	pos=aLine.Find(KFromServer);
+	if(pos==0)
+		{
+		iDataDirection=EFromServer;	
+		}
+	else 
+		{
+		//if the data is from the client then the specifier should be at the begining of the line
+		pos=aLine.Find(KFromClient);
+		if(pos==0)
+			{
+			iDataDirection=EFromClient;	
+			}	
+		else
+			{
+			//there has been an error, the spefifier was not found
+			return KErrNotFound;
+			}
+		} 
+		
+	//trim the specifier from the start of the line	
+	aLine=aLine.Right(aLine.Length()-KSpecifierLength);
+	//trim off trailing \r\n
+	aLine.TrimRight();
+	
+	return KErrNone;
+	}
+	
+//
+//ReadLine
+//
+	
+TInt CScriptFileProcessor::ReadLine(TDes8& aLine)
+ {
+ 
+	aLine.Zero();
+	//read the line
+ 	TRAPD(err, iFileReadStream.ReadL(aLine, KDelimiter));
+ 	if (err != KErrNone)
+    	{
+     	return err; 
+     	} 
+    //process the line
+    err=ProcessLine(aLine);
+ 
+    // Haven't reached end of the file yet
+ 	return err; 
+ }
+