diff -r 000000000000 -r b16258d2340f applayerprotocols/httptransportfw/Test/T_HttpIntegration/TEngine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerprotocols/httptransportfw/Test/T_HttpIntegration/TEngine.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,366 @@ +// Copyright (c) 2002-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: +// $Header$ +// +// + +#include +#include +#include + +//----------------------------------------------------------------------------- + +#ifndef __TENGINE_H__ +#define __TENGINE_H__ + +//----------------------------------------------------------------------------- + +#include "GT0149.h" +#include "ECommandIDs.h" +#include "CPile.h" +#include "CCmdFamily.h" +#include "CCmdFile.h" +#include "CLogFile.h" +#include "CIFControl.h" +#include "CConsoleReader.h" +#include "CCatalogue.h" +#include "CObjCatalogue.h" +#include "CCmdBase.h" + +//----------------------------------------------------------------------------- +// Forward declare Templated Classes + +template class CPile; + +#if !defined(TEMPLATED_CATALOGUE) + +class CCatalogue; + +#else + +template class CCatalogue; + +#endif + +//----------------------------------------------------------------------------- + +class TTestMachineOverflow : public TDes16Overflow +{ +public: + virtual void Overflow( TDes16& aDes ); +}; + +//----------------------------------------------------------------------------- + +class CTEngine : public CActive +{ +public: // Constructors and destructors + + // Constructors with and without console. + static CTEngine* NewL ( CConsoleBase* aConsole = NULL ); + static CTEngine* NewLC( CConsoleBase* aConsole = NULL ); + + // Destructor. + ~CTEngine(); + +private: // Constructors and destructors + + // Private constructor. + void ConstructL(); + + // Default constructor is not there. + CTEngine(CConsoleBase *aConsole); + +public: // New functions + + // Set command family (the known commands). + void SetCmdFamily(CCmdFamily *); + + // Console is enabled? + TBool ConsoleEnabled(); + + // Disable console i/o. + void DisableConsole(); + + // Enable console i/o. + void EnableConsole(); + + // Get console, NULL if is not available. + CConsoleBase *Console() const; + + // Unformatted Write to console (if enabled). + void Write (const TDesC &); + void Writeln(const TDesC &); + void Writeln(); // new-line + + // Formatted Printf to console (if enabled). + void Printf (TRefByValue aFmt, ...); + void Printf (TRefByValue aFmt, VA_LIST& aList); + void Printfln(TRefByValue aFmt, ...); + void Printfln(TRefByValue aFmt, VA_LIST& aList); + + // Wait for a key press + void Pause(const TDesC& aPrompt); + + // Hold for an interval + void Hold(TTimeIntervalMicroSeconds32 aInterval); + + // Set and Get the command file path. SetCmdPath returns + // KErrArgument for illegal aPath param. + TInt SetCmdPath(const TDesC &); + TPtrC CmdPath() const; + + TPtrC FileName() const; + + // Call command file and Get the present command file. + TInt CallCmdFile(const TDesC &); + TInt CallCmdFile(const TDesC &, const TDesC &); + CCmdFile *CmdFile(); + + // Close the present command file or close them all. + TInt CloseCmdFile(); + void CloseCmdFiles(); + + // Set and Get the log file path. SetLogPath returns + // KErrArgument for illegal aPath param. + TInt SetLogPath(const TDesC &); + TPtrC LogPath() const; + + // Open a log file and Get the present log file. + TInt OpenLogFile(const TDesC &); + CLogFile *LogFile(); + + // Close the present log file or close them all. + TInt CloseLogFile(); + void CloseLogFiles(); + + // Unformatted Write to the log (if there's one). + void LogWrite (const TDesC &); + void LogWriteln(const TDesC &); + void LogWriteln(); + + // Formatted Printf to the log (if there's one). + void LogPrintf (TRefByValue aFmt, ... ); + void LogPrintf (TRefByValue aFmt, VA_LIST &); + void LogPrintfln(TRefByValue aFmt, ... ); + void LogPrintfln(TRefByValue aFmt, VA_LIST &); + + // Standard message output. A message you write goes to the log + // if there is one open. A message is printed to the display as + // well, except when running a command file with echo mode off. + void MsgWrite (const TDesC& aText); + void MsgWriteln (const TDesC& aText); + void MsgWriteln (); + void MsgPrintf (TRefByValue aFmt, ...); + void MsgPrintf (TRefByValue aFmt, VA_LIST& aList); + void MsgPrintfln(TRefByValue aFmt, ...); + void MsgPrintfln(TRefByValue aFmt, VA_LIST& aList); + + // Set and Get the command Prompt. + TInt SetPrompt(const TDesC &aPrompt); + TPtrC Prompt() const; + + // Run commands from the console. + void Run(); + + // Run with just the file name (no args) + TInt Run(const TDesC &); + + // Run with the file name and args + TInt Run(const TDesC &, const TDesC &); + + // Stop the test engine. + void Terminate(); // Terminate command files and log files. + void StopEngine(); // Terminate and stop i.e. exit test run + TBool Stopped(); // Stop has been raised? + + // Set and Get Echo mode On/Off switch. + void SetEchoMode(const TBool & = ETrue); + TBool EchoMode(); + + // Get the defines. + #if !defined(TEMPLATED_CATALOGUE) + CCatalogue *Defines(); + + CObjCatalogue *Domains() const {return iDomain;} + + #else + CPile *Defines(); + #endif + + // Complete the asynch request + void CompleteRequest(); + + TInt SetFileName(const TDesC &aName, RFile &aReqFile) ; + + void GetUserInput(const TDesC &, TDes &); + void DumpData(const TDesC8 &, const TBool & = ETrue); + + TBool Log(void) { return iLogActivity; } + + void SetResultDefine(TInt aValue); + void SetResultDefine (const TDesC& aDefineTxt, TInt aValue); + void SetErrorDefine(TInt aValue); + void SetErrorDefine (const TDesC& aDefineTxt, TInt aValue); + void DeleteResultDefine (const TDesC& aDefineTxt); + void DeleteErrorDefine (const TDesC& aDefineTxt); + + void SetShowCmdLine(const TBool &aValue) { iShowCmdLine = aValue; } + TBool GetShowCmdLine(void) { return iShowCmdLine; } + + TPtrC GetDefine(const TDesC &) const; + + //---------------------------------------------------------------- + // helper methods for IfMode + + CIFControl::TIFMode GetIfMode(); + void SetIfMode(const CIFControl::TIFMode &); + CIFControl::TIFProcessing GetIfState(); + void SetIfState(const CIFControl::TIFProcessing &); + void IfL(const CIFControl::TIFMode &, const TBool &, const CIFControl::TIFProcessing &); + void EndIf(); + void UpdateIFState(const CIFControl::TIFMode &); + +//----------------------------------------------------------------------------- + +private: + + // Read command line (iCmdline). + TInt ReadCmdline(TBool aConsole = ETrue); + TInt ReadCmdFile(); // from command file + TInt ReadConsole(); // from console + + // Make the command (iCommand) to obey. Copies the command + // line (iCmdline) to iCommand buffer and expands the tags + // to their defined values. + TInt MakeCommand(); + + // Obey the command (iCommand). + TInt ObeyCommandL(); + + // Do command tags: expands tags to values. + TBool DoTags(); + + // IF Management support + TBool DetermineStepover(CCmdBase *); + +private: // Methods from CActive + + virtual void RunL(); + virtual void DoCancel(); + +private: // Enums + + enum TEngineFilePanics + { + EBufferPanic, + EBufferNotAllocated, + EInvalidFileSizeError + }; + + enum TEngineState + { + EIdle = 0, + EStopping, + EGetNextCmd, + EParseCurrentCmd, + ERunCurrentCmd + }; + +private: // Data + + // For filename parsing. + TParse iParse; + + // for Displaying the command line or CmdLine (non translated version) + TBool iShowCmdLine; + + // Run control. + TBool iStopped; // test run stopped + TBool iEchoMode; // echo mode On/Off + + // need to have a stack of IF structs so that we can process + // nested if cases. + CPile *iIFPile; // cmd file pile + + // Overflow handler. + TTestMachineOverflow iOverflow; + + // State machine state + TEngineState iState; + + // Active object that gets line input + CConsoleReader* iConsoleReader; + + // Timer object + RTimer iTimer; + + // Timestamp for commands (and logging) + TTime iTimeStamp; + + // Command family. + CCmdFamily* iCmdFamily; // the commands + + // Command buffers: + TBuf<256> iCmdline; // command line + TBuf<1024> iCommand; // full command + + // Command prompt. + TBuf<16> iPrompt; // prompt + + // Console information. + CConsoleBase *iConsole; // console + TBool iConsoleEnabled; // enabled? + TBuf<1024> iPrintBuf; // formatted... + + // The command files. + CCmdFile *iCmdFile; // cmd file now! + CPile *iCmdPile; // cmd file pile + TFileName iCmdPath; // cmd file path + + // The log files. + TFileName iLogPath; // log file path + CLogFile *iLogFile; // log file now + CPile *iLogPile; // log file pile + + // Catalog of the tag and call argument defines. + // Get the defines. + #if !defined(TEMPLATED_CATALOGUE) + CCatalogue *iDefines; + + #else + CPile *iDefines; + #endif + + // need to have access to a generic cat or pile + // of (TAny *) which can be cast into pointers + // for our domain specific lists (e.g. RHTTPSession) + // Object Collection for use as/when by domain tools + CObjCatalogue *iDomain; + + // File Management + // In some cases access to local files is useful. + // as a result, make the services globally accessible from the TestEngine + RFs iFileServer; + TFileName iFileName; + + TBool iLogActivity; +}; + + +#endif // __TENGINE_H__ + +//----------------------------------------------------------------------------- +// End of File +//-----------------------------------------------------------------------------