stif/TestServer/src/Testexecution.cpp
branchRCL_3
changeset 19 07b41fa8d1dd
parent 18 3406c99bc375
child 20 ca8a1b6995f6
--- a/stif/TestServer/src/Testexecution.cpp	Thu Jul 15 20:25:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4821 +0,0 @@
-/*
-* Copyright (c) 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: This module contains implementation of CTestExecution 
-* class member functions. CTestExecution class handles a test 
-* execution subsession specific operations.
-*
-*/
-
-// INCLUDE FILES
-#include <e32std.h>
-#include <e32svr.h>
-#include "TestEngineClient.h"
-#include "StifTFwIfProt.h"
-#include <stifinternal/TestServerClient.h>
-#include "TestServer.h"
-#include "TestServerModuleIf.h"
-#include "TestServerCommon.h"
-#include "PrintQueue.h"
-#include "TestServerEvent.h"
-#include "TestThreadContainer.h"
-#include "STIFMeasurement.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES  
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ==================== LOCAL FUNCTIONS =======================================
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: NewL
-
-    Description: Returns new CTestExecution instance.
-
-    Parameters: CTestModule* aModuleSession   :in:  "Parent" module
-                TInt aCaseNumber              :in:  Test case number
-                const TFileName& aConfig      :in:  Configuration filename
-
-    Return Values: CTestExecution*                  New instance
-
-    Errors/Exceptions: Function leaves if memory allocation fails or
-                       CTestExecution construction leaves.
-                       Panics is aModuleSession is NULL.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestExecution* CTestExecution::NewL( CTestModule* aModuleSession,
-                                      TInt aCaseNumber, 
-                                      const TFileName& aConfig )
-    {
-
-    __ASSERT_ALWAYS ( aModuleSession, 
-                      CTestServer::PanicServer( ENullModuleSession ) );
-
-    CTestExecution* self=new( ELeave ) CTestExecution;
-    CleanupClosePushL( *self );
-    self->ConstructL( aModuleSession, aCaseNumber, aConfig );
-    CleanupStack::Pop();
-
-    return self;
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CTestExecution
-
-    Description: Constructor.
-    Initialises member variables whose default state is not zero or NULL.
-
-    Parameters:  None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CTestExecution::CTestExecution() : 
-    iConfig( 0, 0 ),
-    iTestThreadOpen( EFalse ),
-    iTestThreadFailure( ETestThreadOk )
-    {
-
-    iPrintNotifyAvailable = EFalse;
-    iThreadState = ENotStarted;
-    iRemoteSendAvailable = EFalse;
-    iRemoteReceiveAvailable = EFalse;
-    iEventNotifyAvailable = EFalse;
-    iCommandNotifyAvailable = EFalse;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: ~CTestExecution
-
-    Description: Destructor
-
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: Panics is threadmutex is taken.
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-CTestExecution::~CTestExecution()
-    {
-    // Thread must be stopped before CTestExecution can be deleted
-    if( iThreadState == EOnGoing ) 
-		{
-			if( iModuleContainer != NULL )
-				{
-				iModuleContainer->KillThread( KErrCancel );
-				}
-			delete iModuleContainer;
-			iModuleContainer = NULL;
-			CTestServer::PanicServer( EClosingWhileTestRunning );
-		}
-
-    delete iPrintHandler;
-    iPrintHandler = NULL;
-    delete iEventHandler;
-    iEventHandler = NULL;
-    delete iSndHandler;
-    iSndHandler = NULL;
-    delete iRcvHandler;
-    iRcvHandler = NULL;
-    delete iInterferenceHandler;
-    iInterferenceHandler = NULL;
-    delete iMeasurementHandler;
-    iMeasurementHandler = NULL;
-    delete iCommandHandler;
-    iCommandHandler = NULL;
-
-    // Test interference array(Needed cases when test interference thread is
-    // needed to Kill())
-    iSTIFTestInterferenceArray.Reset();
-    iSTIFTestInterferenceArray.Close();
-
-    // Reset test measurement array
-    iMeasurementHandlingArray.Reset();
-    iMeasurementHandlingArray.Close();
-
-    // iPrintQueue must be emptied here, because it items are allocated from server heap
-    delete iPrintQueue;
-    iPrintQueue = NULL;
-
-    // Delete name buffer
-    delete iConfigNameBuffer;
-    iConfigNameBuffer = NULL;
-
-    delete iTestCaseArgs;
-    iTestCaseArgs = NULL;
-        
-    iStateEvents.ResetAndDestroy();
-    iStateEvents.Close();
-
-    iEventArray.ResetAndDestroy();
-    iEventArray.Close();
-
-    // Close mutexes
-    if ( iPrintMutex.Handle() != 0 ) iPrintMutex.Close();
-    if ( iEventMutex.Handle() != 0 ) iEventMutex.Close();
-    if ( iSndMutex.Handle() != 0 ) iSndMutex.Close();
-    if ( iRcvMutex.Handle() != 0 ) iRcvMutex.Close();
-    if ( iInterferenceMutex.Handle() != 0 ) iInterferenceMutex.Close();
-    if ( iMeasurementMutex.Handle() != 0 ) iMeasurementMutex.Close();
-    if ( iCommandMutex.Handle() != 0 ) iCommandMutex.Close();
-
-    // Mutex for testcomplete and cancel operations. Close mutex
-    if ( iTestThreadMutex.Handle() != 0 ) iTestThreadMutex.Close();
-
-    // Close semaphores
-    if ( iPrintSem.Handle() != 0 ) iPrintSem.Close();
-    if ( iEventSem.Handle() != 0 ) iEventSem.Close();
-    if ( iSndSem.Handle() != 0 ) iSndSem.Close();
-    if ( iRcvSem.Handle() != 0 ) iRcvSem.Close();
-    if ( iInterferenceSem.Handle() != 0 ) iInterferenceSem.Close();
-    if ( iMeasurementSem.Handle() != 0 ) iMeasurementSem.Close();
-    //if ( iReceiverSem.Handle() != 0 ) iReceiverSem.Close();
-    if ( iCommandSem.Handle() != 0 ) iCommandSem.Close();
-    
-    iMessageQueue.Close();
-    
-    iTestThread.Close();
-
-    delete iCommandDef;
-    iCommandDef = NULL;
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: ConstructL
-
-    Description: Second level constructor
-
-    Parameters: CTestModule* aModuleSession   :in:  "Parent" module
-                TInt aCaseNumber ::           :in:  Test case number
-                const TFileName& aConfig      :in:  Configuration filename
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestExecution::ConstructL( CTestModule *aModuleSession,
-                                 TInt aCaseNumber,
-                                 const TFileName& aConfig )
-    {
-
-    // Get the parameters
-    iModuleSession = aModuleSession;
-    iCaseNumber = aCaseNumber;
-
-    // Construct heap buffer for configuration file
-    iConfigNameBuffer = HBufC::NewL( aConfig.Length() );
-    iConfig.Set ( iConfigNameBuffer->Des() );
-    iConfig.Copy ( aConfig );
-
-    // Create mutexes
-    User::LeaveIfError( iPrintMutex.CreateLocal() );
-    User::LeaveIfError( iEventMutex.CreateLocal() );
-    User::LeaveIfError( iSndMutex.CreateLocal() );
-    User::LeaveIfError( iRcvMutex.CreateLocal() );
-    User::LeaveIfError( iInterferenceMutex.CreateLocal() );
-    User::LeaveIfError( iMeasurementMutex.CreateLocal() );
-    User::LeaveIfError( iCommandMutex.CreateLocal() );
-
-    // Mutex for testcomplete and cancel operations. Create mutex
-    User::LeaveIfError( iTestThreadMutex.CreateLocal() );
-
-    // Create semaphores
-    User::LeaveIfError( iPrintSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iEventSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iSndSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iRcvSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iInterferenceSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iMeasurementSem.CreateLocal( 0 ) );
-    //User::LeaveIfError( iReceiverSem.CreateLocal( 0 ) );
-    User::LeaveIfError( iCommandSem.CreateLocal( 0 ) );
-
-    // Create handlers
-    iPrintHandler = CPrintHandler::NewL( *this );
-    iEventHandler = CEventHandler::NewL( *this );
-    iSndHandler  = CSndHandler::NewL( *this );
-    iRcvHandler  = CRcvHandler::NewL( *this );
-    iInterferenceHandler = CInterferenceHandler::NewL( *this );
-    iMeasurementHandler = CMeasurementHandler::NewL( *this );
-    iCommandHandler = CCommandHandler::NewL( *this );
-
-    // Create print queue
-    iPrintQueue = CPrintQueue::NewL();
-
-    // Start print handler   
-    iPrintHandler->StartL();
-    
-    // Start rcv handler
-    iRcvHandler->StartL();
-
-    // Start interference handler
-    iInterferenceHandler->StartL();
-
-    // Start measurement handler
-    iMeasurementHandler->StartL();
-
-    iCommandDef = CCommandDef::NewL();
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: RunTestCase
-
-    Description: Starts to execute test case in separate thread.
-
-    Parameters: const RMessage& aMessage  :in:      Message from client.
-
-    Return Values: TInt                             Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::RunTestCase( const RMessage2& aMessage )
-    {
-
-    __TRACE ( KInit, ( _L( "CTestExecution::RunTestCase in" ) ) );
-
-    TInt ret = KErrNone;
-    
-    // Store message to be completed when case is finished
-    iTestExeMessage = aMessage;
-
-    iFullResult.iStartTime.HomeTime();
-
-    delete iTestCaseArgs;
-    iTestCaseArgs = NULL;
-    
-    TInt testCaseArgsLength = iTestExeMessage.GetDesLength( 1 );
-    if ( ( testCaseArgsLength != KErrArgument ) && ( testCaseArgsLength != KErrBadDescriptor ) )
-        {
-        iTestCaseArgs = HBufC::New( testCaseArgsLength );
-        if ( iTestCaseArgs == NULL )
-            {
-            _LIT(KRunError,"Can't allocate memory for test case arguments");
-            __TRACE ( KError, ( CStifLogger::ERed, KRunError() ) );
-            CompleteTestExecution( KErrNone,
-                                   TFullTestResult::ECaseException,
-                                   KErrNoMemory,
-                                   KErrGeneral,
-                                   KRunError );
-            return KErrNone;        
-            }
-            
-        TPtr testCaseArgsPtr( iTestCaseArgs->Des() );
-        TRAP( ret, iTestExeMessage.Read( 1, testCaseArgsPtr ) );
-        if ( ret != KErrNone )
-            {
-            _LIT(KRunError,"Can't read test case arguments");
-            __TRACE ( KError, ( CStifLogger::ERed, KRunError() ) );
-            CompleteTestExecution( KErrNone,
-                                   TFullTestResult::ECaseException,
-                                   ret,
-                                   KErrGeneral,
-                                   KRunError );
-            return KErrNone;
-            }
-        }
-
-    // Get a test module, which executes the test case.
-    // The test module will be freed either when the test case
-    // completes, or the test case is aborted.
-    ret = iModuleSession->GetTestModule( iModuleContainer, iConfig );
-    if ( ret != KErrNone || iModuleContainer == NULL )
-        {
-        _LIT(KRunError,"Can't get test module");
-        __TRACE ( KError, ( CStifLogger::ERed, KRunError() ) );
-        CompleteTestExecution( KErrNone,
-                               TFullTestResult::ECaseException,
-                               ret,
-                               KErrGeneral,
-                               KRunError );
-        return KErrNone;
-        }
-    
-
-    // Thread is created, so all thread specific operations are possible, 
-    // even if thread is not yet resumed, so mark thread to be "Running"
-    SetThreadState ( EOnGoing );
-
-    // Start the test
-    iModuleContainer->SetExecutionSubSession( this );
-    iModuleContainer->RunTestCase( iConfig, iCaseNumber, aMessage );
-
-    __TRACE ( KRunTestCase, ( _L( "CTestExecution::RunTestCase out. Case ongoing" ) ) );
-
-    return KErrNone;
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: NotifyPrint
-
-    Description: Handles print request from engine. If print queue is empty,
-                 message is stored to be used later when there is something to
-                 print, otherwise the first queue item is returned and request
-                 completes immediately.
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::NotifyPrint( const RMessage2& aMessage )
-    {
-
-    __ASSERT_ALWAYS( iPrintNotifyAvailable == EFalse, 
-                     CTestServer::PanicServer( EPrintQueueBroken ) );
-
-    // Get first item from queue
-    TPrintQueueItem *item = iPrintQueue->Pop();
-
-    if ( item == NULL )
-        {
-
-        // If thread can't print anymore, and queue is empty, then 
-        // complete with Eof, because there will not be any new prints
-        if ( iThreadState == EFinished || iThreadState == ECancelled )
-            {
-            __TRACE ( KPrint, ( _L( "CTestExecution::NotifyPrint to finished thread" ) ) );
-            aMessage.Complete ( KErrEof );
-            }
-        else
-            {
-            // Print request available, do not complete request
-            iNotifyPrintMessage = aMessage;
-            iPrintNotifyAvailable = ETrue;
-            }
-
-        }
-    else
-        {
-        // Construct message
-        TTestProgress progress;
-        progress.iPosition = item->iPriority;
-        progress.iDescription = item->iData1;
-        progress.iText = item->iData2;
-
-        iNotifyPrintMessage = aMessage;
-        // Write message to client space and complete request
-        WritePrint( progress );
-
-        delete item; 
-        }
-
-
-    return KErrNone;
-
-    }
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoNotifyPrint
-
-    Description: If print notification available, notification is copied to
-                    client memory space and request is completed.
-                 Else new print queue item is created and appended to print 
-                    queue. If queue is full or memory can't be allocated,
-                    then message will be discarded.
-        
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::DoNotifyPrint()
-    {    
-
-    if ( iPrintNotifyAvailable )
-        {
-        // Write message to client space
-        WritePrint( iProgress );
-        }
-    else
-        {
-
-        TPrintQueueItem *item = 
-            new TPrintQueueItem( iProgress.iPosition, 
-                                 iProgress.iDescription, 
-                                 iProgress.iText );
-
-        if ( item != NULL )
-            {
-            // Item constructed ok, add it to queue
-            if ( iPrintQueue->Push( *item ) != KErrNone )
-                { 
-                // Queue is full, clean-up
-                delete item;
-                }
-            }
-        // else: Could not construct TPrintQueueItem, no free memory.
-        // drop printing            
-        }
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoNotifyInterference
-
-    Description: Handles Test Interference thread append and remove operations.
-        
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::DoNotifyInterference()
-    {    
-    // Information for this context => information is in this thread's heap and
-    // if CUndertaker::RunL is called then test interface thread can called
-    // with function call and kill() test interference thread
-
-    // Take information from struct given in 
-    // CTestThreadContainer::AddInterferenceThread or
-    // CTestThreadContainer::RemoveInterferenceThread
-    
-    RThread thread;
-    TInt ret = thread.Open ( iTestInterference.iThreadId );
-    if( ret != KErrNone )
-    	{
-    	RDebug::Print( _L("CTestExecution::DoNotifyInterference %d"), ret );
-        User::Panic( _L("CTestExecution::DoNotifyInterference"), ret );
-    	}
-    
-    if ( iTestInterference.iOperation == TTestInterference::EAppend )
-        {
-        iSTIFTestInterferenceArray.Append( thread );
-        }
-    else if (iTestInterference.iOperation == TTestInterference::ERemove )
-        {
-        // Remove thread from Array.Test interference thread is stopped and killed
-        // successfully
-        for( TInt i = 0; i < iSTIFTestInterferenceArray.Count(); i++ )
-            {
-            if( iSTIFTestInterferenceArray[i].Id() == thread.Id() )
-                {
-                iSTIFTestInterferenceArray.Remove( i );
-                break;
-                }
-            }
-        }
-    else
-        {
-        return;
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoNotifyMeasurement
-
-    Description: Handles test measurement operations: NewL, Start and Stop.
-        
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::DoNotifyMeasurement()
-    {    
-    // Information for this context => information is in this thread's heap:
-    // From CUndertaker::RunL() or CTestModuleContainer::RunL() method can
-    // handle stop and clean operations if these operations are not done 
-    // before.
-    // Erronous cases(CUndertaker::RunL will be called) or when test case is
-    // executed(CTestModuleContainer::RunL() will be called) there can handle
-    // test measurement stop and clean operation. 
-
-    if( iTestMeasurement.iMeasurementStruct.iMeasurementOperation == 
-                                        CSTIFTestMeasurement::KMeasurementNew)
-        {
-        // Check that same measurement module don't try to create several times
-        // Only one measurement type per test is allowed
-        for( TInt i = 0; i < iMeasurementHandlingArray.Count(); i++ )
-            {
-            if( iMeasurementHandlingArray[i]->iMeasurementModulePtr->MeasurementType() ==
-                        iTestMeasurement.iMeasurementStruct.iMeasurementType )
-                {
-                return KErrAlreadyExists;
-                }
-            }
-
-        TMeasurementHandling* measurementHandling = NULL;
-        measurementHandling = new TMeasurementHandling();
-
-        TBuf<KStifMeasurementTypeLength> modulename;
-        if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 1 )
-            {
-            modulename.Copy( KStifMeasurement01 );
-            }
-        else if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 2 )
-            {
-            modulename.Copy( KStifMeasurement02 );
-            }
-        else if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 3 )
-            {
-            modulename.Copy( KStifMeasurement03 );
-            }
-        else if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 4 )
-            {
-            modulename.Copy( KStifMeasurement04 );
-            }
-        else if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 5 )
-            {
-            modulename.Copy( KStifMeasurement05 );
-            }
-        else if( iTestMeasurement.iMeasurementStruct.iMeasurementType == 6 )
-            {
-            modulename.Copy( KStifMeasurementBappea );
-            }
-        else
-            {
-            __TRACE( KError, (  _L("CTestExecution::DoNotifyMeasurement(): unknown measurement type" ) ) );
-            return KErrArgument;
-            }
-
-        // Loading should work with and without '.dll' extension.
-        TInt r = measurementHandling->iMeasurementModule.Load( modulename );
-        if ( r != KErrNone )
-            {
-            __TRACE( KError, ( CStifLogger::EError, _L("Can't load test measurement module[%S], code = %d"),
-                &modulename, r ) );
-            delete measurementHandling;
-            return KErrNotFound;
-            }
-        else
-            {
-            //Print test measururement module name
-            __TRACE( KInit, (  _L("Loaded test measurement module[%S]"),
-                &modulename ) );
-            }
-
-        // Get pointer to first exported function
-        // Verify that there is function
-        measurementHandling->iMeasurementLibEntry = (CTestMeasurementFactory) measurementHandling->iMeasurementModule.Lookup( 1 );
-        if ( measurementHandling->iMeasurementLibEntry == NULL )
-            {
-            // New instance can't be created
-            __TRACE( KInit, (_L( "Test measurement module instance cannot create." ) ) );
-            measurementHandling->iMeasurementModule.Close();
-            delete measurementHandling;
-            return KErrNotFound;
-            }
-        else
-            {
-            __TRACE ( KInit, ( _L("Pointer to 1st exported received")));
-            }
-
-        CSTIFTestMeasurementImplementation* measurement;
-        measurement = NULL;
-
-        // initialize test measurement module
-        __TRACE ( KVerbose, (_L("Calling 1st exported at 0x%x"), (TUint32) measurementHandling->iMeasurementLibEntry ));
-        TRAPD ( err, measurement = (*measurementHandling->iMeasurementLibEntry)( 
-                            iTestMeasurement.iMeasurementStruct.iConfigurationInfo, iTestMeasurement.iMeasurementStruct.iMeasurementType ) );
-
-         // Handle leave from test module
-        if ( err != KErrNone )
-            {
-            __TRACE (KError, ( CStifLogger::EError, _L( "Leave when calling 1st exported function, code %d"), err ) );
-            delete measurementHandling;
-            return err;
-            }
-        else if ( measurementHandling->iMeasurementLibEntry == NULL )     // Handle NULL from test measurement
-            {
-            __TRACE (KError, ( CStifLogger::EError, _L( "NULL pointer received when constructing test measurement module" ) ) );
-            delete measurementHandling;
-            // Set error codes
-            return KErrNoMemory;
-            }
-        else
-            {
-            measurementHandling->iMeasurementModulePtr = measurement;
-            __TRACE (KInit, (_L("Entrypoint successfully called, Measurement module instance at 0x%x"),
-                (TUint32)measurementHandling->iMeasurementLibEntry ) );
-            }
-        iMeasurementHandlingArray.Append( measurementHandling );
-        } // End of NewL operations
-
-    else if( iTestMeasurement.iMeasurementStruct.iMeasurementOperation == 
-                                        CSTIFTestMeasurement::KMeasurementStart)
-        {
-        for( TInt i = 0; i < iMeasurementHandlingArray.Count(); i++ )
-            {
-            if( iMeasurementHandlingArray[i]->iMeasurementModulePtr->MeasurementType() == iTestMeasurement.iMeasurementStruct.iMeasurementType )
-                {
-                return iMeasurementHandlingArray[i]->iMeasurementModulePtr->Start();
-                }
-            }
-
-        }
-    else if( iTestMeasurement.iMeasurementStruct.iMeasurementOperation == 
-                                        CSTIFTestMeasurement::KMeasurementStop)
-        {
-        for( TInt i = 0; i < iMeasurementHandlingArray.Count(); i++ )
-            {
-            if( iMeasurementHandlingArray[i]->iMeasurementModulePtr->MeasurementType() == iTestMeasurement.iMeasurementStruct.iMeasurementType )
-                {
-                TInt stop_ret = iMeasurementHandlingArray[i]->iMeasurementModulePtr->Stop();
-                delete iMeasurementHandlingArray[i];
-                iMeasurementHandlingArray.Remove(i);
-                return stop_ret;
-                }
-            }
-        }
-    else 
-        {
-        __TRACE (KError, ( CStifLogger::EError, _L("CTestExecution::DoNotifyMeasurement(): Not supported operation") ) );
-        return KErrNotSupported;
-        }
-    
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: WritePrint
-
-    Description: Writes print notification to client memory space.                 
-        
-    Parameters: const TInt aPriority          :in:  Priority
-                const TStifInfoName& aDes         :in:  Description
-                const TName& aBuffer          :in:  Value
-    
-    Return Values: TInt                             Return value from message write
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::WritePrint( TTestProgress& aProgress )
-    {
-
-    TTestProgressPckg progressPckg( aProgress );
- 
-    // Write message to client space    
-    TRAPD( res, iNotifyPrintMessage.WriteL( 0, progressPckg ) );
-
-    iPrintNotifyAvailable = EFalse;
-
-    // Complete request with possible error code
-    iNotifyPrintMessage.Complete( res );
-
-    return res;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: NotifyEvent
-
-    Description: Handles event request from engine. 
-
-    ESetEvent and EUnsetEvent change event status. EEnable enables 
-    event notify.
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-                    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::NotifyEvent( const RMessage2& aMessage )
-    {   
-
-    TEventIf event;
-    TEventIfPckg eventPckg( event );
-    
-    TRAPD( res, aMessage.ReadL( 0, eventPckg ) );
-
-    if( res != KErrNone )
-        {
-        __TRACE( KError, ( _L( "CTestExecution::NotifyEvent: ReadL failed" ) ));
-        return res;
-        }
-    
-    switch( event.Type() )
-        {
-        case TEventIf::ESetEvent: 
-            {
-            TInt ind = 0;
-            TInt count = iEventArray.Count();
-            for( ind=0; ind < count; ind++ )
-                {
-                if( iEventArray[ind]->Name() == event.Name() )
-                    {
-                    __TRACE( KMessage, ( _L( "CTestExecution::NotifyEvent(%d): SetEvent %S ( count %i )" ), 
-                        this, &event.Name(), count ) );
-                    TEventIf::TEventType etype = TEventIf::EIndication;
-                    // To get state events working with testcombiner
-                    if( ( event.EventType() == TEventIf::EState ) ||                            
-                        ( iEventArray[ind]->EventType() == TEventIf::EState ) )
-                        {
-                        etype = TEventIf::EState;
-                        }
-                    iEventArray[ind]->Set( etype );
-                    }
-                }
-            }
-            break;
-        case TEventIf::EUnsetEvent:
-            { 
-            return UnsetEvent( event, aMessage );
-            }
-        case TEventIf::EEnable:
-            {
-            // Store event message
-            iNotifyEventMessage = aMessage;
-            iEventNotifyAvailable = ETrue;
-            TInt errorFromPreviousCmd =  aMessage.Int1();
-
-            __TRACE( KMessage, ( _L( "CTestExecution::NotifyEvent: enable (%d) notify %d" ), 
-                errorFromPreviousCmd, this ) );
-
-            // Complete previous Event command
-            CompleteEvent( errorFromPreviousCmd );    
-            iEventHandler->StartL();
-            
-            // iNotifyEventMessage is completed from DoNotifyEvent
-            return KErrNone; 
-            }
-        
-        default:
-            __TRACE( KError, ( _L( "CTestExecution::NotifyEvent: Unknown command %i" ), 
-                event.Type() ));
-            return KErrArgument;
-        }
-
-    __TRACE( KMessage, ( _L( "CTestExecution::NotifyEvent(%d): Done" ), this ) );
-
-    aMessage.Complete( KErrNone );
-    //User::After(1000); //Stif-95 This pause is needed to let Info::TestFrameworkEngine thread
-                       //get some processor time and run exactly at this moment (by calling
-                       //CTestEventController::EventCallBack). When Stif is focused on the screen,
-                       //there is no problem if this line is absent, however when another
-                       //application (like screen saver) is focused this is required.
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoNotifyEvent
-
-    Description: Forward event request.
-        
-    Parameters: None
-   
-    Return Values: None
-
-    Errors/Exceptions: Panics if event array can't be created
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::DoNotifyEvent()
-    {
-    
-    TInt ret = KErrNone;
-        
-    switch( iEventDef.iEvent.Type() )
-        {
-        case TEventIf::EReqEvent:
-            {
-            __TRACE( KMessage, 
-                ( _L( "CTestExecution::DoNotifyEvent(%d): ReqEvent %S" ), 
-                    this, &iEventDef.iEvent.Name() ) );
-            ret = RequestEvent( iEventDef.iEvent );
-            // If error, return error, 
-            // otherwise proceed with sending information to engine
-            if( ret != KErrNone )
-                {
-                iEventHandler->StartL();
-                return ret;
-                }
-            }
-            break;
-        case TEventIf::EWaitEvent:
-        case TEventIf::ESetWaitPending:
-            {
-            __TRACE( KMessage, 
-                ( _L( "CTestExecution::DoNotifyEvent(%d): WaitEvent %S" ), 
-                    this, &iEventDef.iEvent.Name() ) );
-            // We return from here, i.e. nothing is sent to engine
-            ret = WaitEvent( iEventDef.iEvent, iEventDef.iStatus );
-            iEventHandler->StartL();
-            return ret;
-            }
-        // Add state events to internal array  
-        case TEventIf::ESetEvent: 
-        case TEventIf::EUnsetEvent:
-            {
-            __TRACE( KMessage, 
-                ( _L( "CTestExecution::DoNotifyEvent(%d): Set/UnsetEvent %S" ), 
-                    this, &iEventDef.iEvent.Name() ) );
-            EventStateChange( iEventDef.iEvent );
-            }
-            break;
-        case TEventIf::ERelEvent:
-            // This is handled later
-            __TRACE( KMessage, 
-                ( _L( "CTestExecution::DoNotifyEvent(%d): RelEvent %S" ), 
-                    this, &iEventDef.iEvent.Name() ) );
-            break;
-        default:
-            iEventHandler->StartL();
-            return KErrArgument;
-        }
-    
-    // Construct message
-    TEventIfPckg eventPckg( iEventDef.iEvent );
-
-    // Write message to client space
-    TRAPD( res, iNotifyEventMessage.WriteL( 0, eventPckg ) );
-
-    if( res != KErrNone )
-        {
-        __TRACE( KError, ( _L( "CTestExecution::DoNotifyEvent: WriteL failed" ) ) );
-        ret = res;
-        }
-    // Complete request
-    // Complete with WriteL result
-    // MUST be done before ERelEvent
-    iEventNotifyAvailable = EFalse;
-    iNotifyEventMessage.Complete( res );
-    User::After(1000); //Stif-95 This pause is needed to let Info::TestFrameworkEngine thread
-                       //get some processor time and run exactly at this moment (by calling
-                       //CTestEventNotifier::RunL). When Stif is focused on the screen,
-                       //there is no problem if this line is absent, however when another
-                       //application (like screen saver) is focused this is required.
-
-    if( iEventDef.iEvent.Type() == TEventIf::ERelEvent )
-        {
-        ret = ReleaseEvent( iEventDef.iEvent );
-        if( ret != KErrNone )
-            {
-            // If error, return immediately
-            return ret;
-            }
-        }
-
-    __TRACE( KMessage, ( _L( "CTestExecution::DoNotifyEvent(%d): Done" ), this ) );
-
-    return ret;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: RequestEvent
-
-    Description: Handles TestModule event requests. 
-        
-    Parameters: const TEventIf& aEvent: in: Event requested  
-    
-    Return Values: TInt: Success/Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/    
-TInt CTestExecution::RequestEvent( TEventIf& aEvent )
-    {
-
-    // Requested events are added to iEventArray
-    // There can be multiple simultaneous requests for the same event                    
-    TEvent* event = new TEvent( iTestThreadId );    
-    if( !event )
-        {
-        return KErrNoMemory;
-        }
-    event->Copy( aEvent );
-    if( iEventArray.Append( event ) != KErrNone )
-        {
-        delete event;
-        return KErrNoMemory;
-        }
-        
-    __TRACE( KMessage,( _L( "CTestExecution::DoNotifyEvent: Req added %S ( count %i )" ), 
-         &aEvent.Name(), iEventArray.Count() ));
-    
-    return KErrNone;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: WaitEvent
-
-    Description: Handles TestModule event waits. Waiting is implemented here 
-                and completed in NotifyEvent    
-
-        
-    Parameters: const TEventIf& aEvent: in: Event wait  
-    
-    Return Values: TInt: Success/Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/    
-TInt CTestExecution::WaitEvent( TEventIf& aEvent, TRequestStatus* aStatus )
-    {
-      
-    // Get first "free" event entry from requested events
-    TInt ind = 0;
-    TInt count = iEventArray.Count();
-    TEvent* event = NULL;
-    for( ind=0; ind < count; ind++ )
-        {
-        if( ( iEventArray[ind]->Name() == aEvent.Name() ) &&
-            ( iEventArray[ind]->WaitEventPending() == EFalse ) )
-            {
-            // Found event with correct name and one that is still free
-            // i.e. nobody is waiting for it.
-            event = iEventArray[ind];
-            if( aEvent.Type() == TEventIf::EWaitEvent )
-                {
-                // For EWaitEvent we complete immediately if event is pending
-                if( event->EventPending() )
-                    {
-                    // Event was already pending, so we may return immediately
-                    if( aStatus )
-                        {
-                        TestThreadRequestComplete( aStatus, KErrNone );
-                        }
-                    return KErrNone;           
-                    }
-                }
-            }
-        }
-    if( event == NULL )
-        {
-        // Event is not in the iEventArray, 
-        // so event is not currently requested
-        return KErrNotFound;
-        }
-        
-    __TRACE( KMessage,( _L( "CTestExecution::DoNotifyEvent: Waiting %S ( count %i )" ), 
-        &aEvent.Name(), count ));
-    
-    // Event is not pending so we have to wait for it
-    // Set wait pending            
-    TInt ret = event->SetWaitPending( aStatus );
-    // event cannot be freed by the test module, 
-    // because it is waiting the event, 
-
-    if( ( aStatus == NULL ) &&
-        ( ret == KErrNone ) &&
-        ( aEvent.Type() == TEventIf::EWaitEvent ) ) 
-        {
-        // This is synchronous wait
-        // Go waiting, completed from set event            
-        event->Wait();
-        }
-
-    return ret;
-    
-    } 
-    
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: ReleaseEvent
-
-    Description: Handles TestModule event releases. 
-        
-    Parameters: const TEventIf& aEvent: in: Event released  
-    
-    Return Values: TInt: Success/Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/   
-TInt CTestExecution::ReleaseEvent( TEventIf& aEvent )
-    {
-    
-    // Get last event entry from requested events
-    TInt ind = 0;
-    TInt freeFound = 0;
-    TInt eventIndex = 0;
-    TInt count = iEventArray.Count();
-    for( ind=0; ind < count; ind++ )
-        {
-        if( iEventArray[ind]->Name() == aEvent.Name() )
-            {
-            if( iEventArray[ind]->WaitEventPending() == EFalse )
-                {
-                freeFound++;
-                eventIndex = ind;
-                }
-            }
-        }
-
-    if( freeFound == 0 )
-        {
-        return KErrNotFound;
-        }
-    __TRACE( KMessage,( 
-        _L( "CTestExecution::DoNotifyEvent: Release event %S ( count %i )" ), 
-            &aEvent.Name(), iEventArray.Count() ));
-
-    TEvent* event = iEventArray[eventIndex];
-    iEventArray.Remove( eventIndex );
-    // Release and free event entry
-    event->Release(); 
-
-    // Delete used event entry
-    delete event;
-    
-    return KErrNone;
-}
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: UnsetEvent
-
-    Description: Handles TestModule event unsets. 
-        
-    Parameters: const TEventIf& aEvent: in: Event unset  
-    
-    Return Values: TInt: Success/Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::UnsetEvent( TEventIf& aEvent, const RMessage2& aMessage )
-    {
-    
-    TInt ret = KErrNone;
-    TInt ind = 0;
-    TInt count = iEventArray.Count();
-    TBool activeEventReq = EFalse;
-    for( ind=0; ind < count; ind++ )
-        {
-        if( iEventArray[ind]->Name() == aEvent.Name() )
-            {
-             __TRACE( KMessage, ( 
-                _L( "CTestExecution::NotifyEvent(%d): UnsetEvent %S ( count %i )" ), 
-                this, &aEvent.Name(), count ) );
-                
-            ret = iEventArray[ind]->Unset( aMessage, this );
-            if( ret == KErrNone )
-                {
-                activeEventReq = ETrue;
-                }
-            break;
-            }
-        }
-    if( activeEventReq )
-        {
-        // Unset is completed by release   
-        return KErrNone;
-        }
-        
-    // No pending requests or error from unset
-    aMessage.Complete( ret );
-    
-    return KErrNone;
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: EventStateChange
-
-    Description: Handles event setting and unsetting. Saves status of
-                state events to enable unsetting of set state events when 
-                killing the testcase abnormally.
-        
-    Parameters: const TEventIf& aEvent: in: Event set/unset  
-    
-    Return Values: TInt: Success/Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/   
-TInt CTestExecution::EventStateChange( TEventIf& aEvent )
-    {
-    
-    TInt ret = KErrNotFound;
-    if( aEvent.EventType() == TEventIf::EState )
-        {
-        
-        TInt count = iStateEvents.Count();
-        TInt index = 0;
-        for(; index < count; index++ )   
-            {
-            TPtrC name = *(iStateEvents[index]);
-            if( name == aEvent.Name() )
-                {
-                break;
-                }
-            } 
-            
-                
-        if( aEvent.Type() == TEventIf::ESetEvent )
-            {
-            if( index < count )
-                {
-                ret = KErrAlreadyExists;
-                }
-            else
-                {
-                // add event to iStateEvents
-                HBufC* name = aEvent.Name().Alloc();
-                if( name == NULL )
-                    {
-                    ret = KErrNoMemory;
-                    }
-                else if( iStateEvents.Append( name ) != KErrNone )
-                    {
-                    delete name;
-                    ret = KErrNoMemory;
-                    }
-                else
-                    {
-                    ret = KErrNone;
-                    }
-                }                
-            }
-        else if( aEvent.Type() == TEventIf::EUnsetEvent )
-            {
-            if( index == count )
-                {
-                ret = KErrNotFound;
-                }
-            else
-                {
-                ret = KErrNone;
-                delete iStateEvents[index];
-                iStateEvents.Remove( index );
-                }
-            }
-        }
-    
-    return ret;
-    
-    }
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelEvent
-
-    Description: Cancels pending event request.
-        
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-    
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CancelEvent()
-    {
-    
-    TInt ret = KErrNotFound;
-
-    __TRACE( KMessage, ( _L( "CTestThreadContainer::CancelEvent(%d): %S [%p]" ), 
-            iEventDef.iEvent.Type(), &iEventDef.iEvent.Name(), iEventDef.iStatus ) );
-
-    switch( iEventDef.iEvent.Type() )
-        {
-        case TEventIf::EReqEvent:
-        case TEventIf::ERelEvent:
-        case TEventIf::ESetEvent:
-        case TEventIf::EUnsetEvent:   
-            CompleteEvent( KErrCancel );  
-            break;
-        case TEventIf::EWaitEvent:
-        case TEventIf::ESetWaitPending:
-            {
-            // Get waited event entry from requested events
-            TInt ind = 0;
-            TInt count = iEventArray.Count();
-            for( ind=0; ind < count; ind++ )
-                {
-                if( ( iEventArray[ind]->Name() == iEventDef.iEvent.Name() ) &&
-                    ( iEventArray[ind]->WaitEventPending() != EFalse ) &&
-                    ( iEventArray[ind]->RequestStatus() == iEventDef.iStatus ) )
-                    {
-                    TEvent* event = iEventArray[ind];
-                    // Found event with correct name and one that is waited.
-                    event->CompletePendingWait( KErrCancel ); 
-                    ret = KErrNone;
-                    break;
-                    }
-                }
-            if( ret != KErrNone )
-                {
-                // Request has been already completed, not handled 
-                // by ActiveScheduler yet.
-                // DoCancel will do the job, don't worry.
-                __TRACE( KError, ( _L( "CTestThreadContainer::CancelEvent(%d): %S, not found 2" ), 
-                    iEventDef.iEvent.Type(), &iEventDef.iEvent.Name() ) ); 
-                }
-            }
-            break;
-        default:
-            CTestServer::PanicServer( EUnknownEventCmd );
-            break;
-        }
-        
-    // Synchonize
-    iEventHandler->StartL();
-        
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: NotifyRemoteCmd
-
-    Description: Handles the first phase of the RemoteCmd request from engine.
-
-    Parameters: const RMessage& aMessage: in: Message from client.
-                    
-    Return Values: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::NotifyRemoteCmd( const RMessage2& aMessage )
-    {   
-
-    // Store RemoteCmd message
-    // and the length buffer address
-    iNotifyRemoteCmdMessage = aMessage;
-    iRemoteSendAvailable = ETrue;
-    iSndHandler->StartL();
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoRemoteReceive
-
-    Description: Enable remote receive.
-    
-    Parameters: None 
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::DoRemoteReceive()
-    {    
-
-    switch( iRcvCmdDef.iCommand )
-        {
-        case EStifCmdReceive:          // "Receive"
-            {
-            // @js If there's pointer in array, we'll send it down
-            if(iMessageQueue.Count() > 0)
-                {
-                HBufC8 * buf =  iMessageQueue[0];
-                iRcvCmdDef.iParam.aRemoteMsgRef->Copy( iMessageQueue[0]->Des() );
-                iMessageQueue.Remove(0);
-                delete buf; 
-                __TRACE( KMessage, 
-                        (_L("CTestExecution::ReadRemoteCmdInfo: complete receive 0x%x"), 
-                            iRcvCmdDef.iStatus ));
-                       
-                 // calls the TestCombiner's CRemoteReceiver::RunL()
-                 TestThreadRequestComplete( iRcvCmdDef.iStatus, KErrNone );
-                }
-            else
-                {
-                iRemoteReceiveAvailable = ETrue;            
-                }
-
-            break;
-            }
-        case EStifCmdReceiveCancel:
-            if( iRemoteReceiveAvailable )
-                {
-                iRemoteReceiveAvailable = EFalse;
-                TestThreadRequestComplete( iRcvCmdDef.iStatus, KErrCancel );
-                }                
-            break;
-        default:
-            CTestServer::PanicServer( EUnknownRemoteCmd );
-            break;
-        }
-    // Signal test thread
-    iRcvHandler->StartL();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoRemoteSend
-
-    Description: Send remote messages.
-    
-    Parameters: None 
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::DoRemoteSend()
-    {  
-    switch( iCmdDef.iCommand )
-        {  
-        case EStifCmdSend:             // "Send"
-        case EStifCmdReboot:           // "Send"
-        case EStifCmdStoreState:       // "Send"
-        case EStifCmdGetStoredState:   // "Receive, this must be done with two phase"
-        case EStifCmdMeasurement:      // "Receive, this must be done with two phase"
-            {
-            if( iRemoteSendAvailable )
-                {
-                TInt ret = KErrNone;
-                TPckg<TStifCommand> remoteCommandPckg( iCmdDef.iCommand );
-
-                // Start first phase of the writing message to client space
-                TRAP( ret, 
-                    iNotifyRemoteCmdMessage.WriteL( 0, remoteCommandPckg ) );
-
-                if( ret != KErrNone )
-                    {
-                    __TRACE( KError, ( _L( "CTestExecution::DoRemoteSend: WriteL failed" ) ) );
-                    }
-                TPckg<TInt> lenPckg( iCmdDef.iLen );
-
-                TRAP( ret, 
-                    iNotifyRemoteCmdMessage.WriteL( 1, lenPckg ) );
-
-                if( ret != KErrNone )
-                    {
-                    __TRACE( KError, ( _L( "CTestExecution::DoRemoteSend: WriteL failed" ) ) );
-                    }
-
-                // Complete request
-                // Complete with WriteL result
-                // CTestRemoteCmdNotifier::RunL() will called
-                iRemoteSendAvailable = EFalse;
-                iNotifyRemoteCmdMessage.Complete( ret );
-                break;
-                }
-            }
-            TestThreadRequestComplete( iCmdDef.iStatus, KErrNotSupported );
-            break;
-        default:
-            CTestServer::PanicServer( EUnknownRemoteCmd );
-            break;
-        }
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: ReadRemoteCmdInfo
-
-    Description: Handles the second phase of the RemoteCmd request from engine.
-
-    Parameters: const RMessage& aMessage: in: Message from client.
-                    
-    Return Values: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::ReadRemoteCmdInfo( const RMessage2& aMessage )
-    {   
-    
-    TInt ret( KErrNone );
-    TInt completeSend = EFalse;
-    TInt returnedErrorCode = KErrNone;
-    TInt len = 0;
-    TInt value( aMessage.Int2() );
-    if( value < 0 )
-        {
-        returnedErrorCode = value;
-        }
-    else
-        {
-        len = value;
-        }
-  
-    switch( aMessage.Int1() )
-        {
-        case EStifCmdReceive:              // "Receive"
-            {
-
-                if( len <= 0 )
-                    {
-                    __TRACE( KError, 
-                        (_L("CTestExecution::ReadRemoteCmdInfo: empty message")));
-                    ret = KErrGeneral;
-                    break;
-                    }
-                if( iRcvCmdDef.iParam.aRemoteMsgRef->MaxLength() < len )
-                    {
-                    __TRACE( KError, 
-                        (_L("CTestExecution::ReadRemoteCmdInfo: message overflow")));
-                    ret = KErrGeneral;
-                    break;
-                    }
-
-                HBufC8* buf = HBufC8::New( len );
-                if( buf == NULL )
-                    { 
-                    ret = KErrNoMemory;
-                    break;
-                    }
-                TPtr8 tmp = buf->Des();
-                // Read message from client space
-                TRAP( ret, aMessage.ReadL( 0, tmp ) );
-
-                
-                if( ret != KErrNone )
-                    {
-                    __TRACE( KError, 
-                        (_L("CTestExecution::ReadRemoteCmdInfo: ReadL failed")));
-                    break;
-                    }
-                    
-                if( iRemoteReceiveAvailable )
-                // @js Checking moved here
-                    {                                   
-                    iRcvCmdDef.iParam.aRemoteMsgRef->Copy( buf->Des() );
-                    delete buf;
-                
-                    __TRACE( KMessage, 
-                        (_L("CTestExecution::ReadRemoteCmdInfo: complete receive 0x%x"), 
-                            iRcvCmdDef.iStatus ));
-                    // calls the TestCombiner's CRemoteReceiver::RunL()
-                    TestThreadRequestComplete( iRcvCmdDef.iStatus, ret );
-                    
-                    iRemoteReceiveAvailable = EFalse;
-                    }
-                else
-                // @js Adding buf to RPointerArray, handling it in DoRemoteReceive function
-                    {
-                   iMessageQueue.Append( buf );
-                    } 
-                
-            break;
-            }
-        case EStifCmdSend:                 // "Send"
-            {
-            HBufC8* buf = HBufC8::New( iCmdDef.iParam.aRemoteMsgConstRef->Length() );
-            if( buf == NULL )
-                { 
-                ret = KErrNoMemory;
-                break;
-                }
-            TPtr8 tmp = buf->Des();
-            tmp.Copy( *iCmdDef.iParam.aRemoteMsgConstRef );
-            // Second phase of the writing. Write information to the Engine.
-            TRAP( ret, aMessage.WriteL( 0, tmp ) );
-
-            delete buf;
-            
-            if( ret != KErrNone )
-                {
-                __TRACE( KError, ( _L( "CTestExecution::ReadRemoteCmdInfo: WriteL failed" ) ) );
-                }
-            completeSend = ETrue;
-            break;
-            }
-        case EStifCmdReboot:               // "Send"
-            {
-            TRebootParamsPckg remoteTypePckg( *iCmdDef.iParam.aRebootType );
-
-            // Second phase of the writing. Write information to the Engine.
-            TRAP( ret, aMessage.WriteL( 0, remoteTypePckg ) );
-
-            if( ret != KErrNone )
-                {
-                __TRACE( KError, ( _L( "CTestExecution::ReadRemoteCmdInfo: WriteL failed" ) ) );
-                }
-            // Because Reboot must block...Don't complete, so now we wait for
-            // ever phone booting operation !!!!!
-            break;
-            }
-        case EStifCmdStoreState:          // "Send"
-            {
-            TRebootStateParamsPckg remoteStatePckg( *iCmdDef.iParam.aRebootState );
-
-            // Second phase of the writing. Write information to the Engine.
-            TRAP( ret, aMessage.WriteL( 0, remoteStatePckg ) );
-
-            if( ret != KErrNone )
-                {
-                __TRACE( KError, ( _L( "CTestExecution::ReadRemoteCmdInfo: WriteL failed" ) ) );
-                }
-            // Completed from EStifCmdRebootProceed
-            break;
-            }
-        case EStifCmdMeasurement:   // "Receive"
-            {
-            TGetMeasurementOptions getMeasurementOptions;
-            TGetMeasurementOptionsPckg measurementParamsPckg( getMeasurementOptions );
-
-            // Read message from client space
-            TRAP( ret, aMessage.ReadL( 0, measurementParamsPckg ) );
-
-            if( ret != KErrNone )
-                {
-                __TRACE( KError, ( _L( "CTestExecution::ReadRemoteCmdInfo: ReadL failed" ) ) );
-                }
-            iCmdDef.iParam.aMeasurementOption->iOptions = getMeasurementOptions.iOptions;
-
-            completeSend = ETrue;
-            break;
-            }
-        case EStifCmdGetStoredState:   // "Receive"
-            {
-            TGetRebootStoredParams getRebootStoredParams;
-            TGetRebootStoredParamsPckg rebootStoredParamsPckg( getRebootStoredParams );
-
-            // Read message from client space
-            TRAP( ret, aMessage.ReadL( 0, rebootStoredParamsPckg ) );
-
-            if( ret != KErrNone )
-                {
-                __TRACE( KError, ( _L( "CTestExecution::ReadRemoteCmdInfo: ReadL failed" ) ) );
-                }
-            iCmdDef.iParam.aRebootStoredRef->iCode = getRebootStoredParams.aCode;
-            iCmdDef.iParam.aRebootStoredRef->iName = getRebootStoredParams.aName;
-
-            completeSend = ETrue;
-            break;
-            }
-        case EStifCmdRebootProceed:          
-            {
-            completeSend = ETrue; // Complete EStifCmdStoreState
-            }
-            break;
-        default:
-            {
-            iModuleSession->PanicClient( EUnknownRemoteCmd, aMessage );
-            break;
-            }
-        }
-    // Complete request with ret
-    aMessage.Complete( ret ); 
-
-    if( completeSend )
-        {
-        // Calls the TestCombiner's CRemoteReceiver::RunL() and
-        // returns error code to test module.
-        TestThreadRequestComplete( iCmdDef.iStatus, returnedErrorCode );
-        }
-        
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: Pause
-
-    Description: Pauses a test case
-
-    Only ongoing tests can be paused. If test is not ongoing, then
-    function does nothing.
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-    
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::Pause( const RMessage2& aMessage )
-    {
-
-    __TRACE ( KThreadOperation, ( _L( "CTestExecution::Pause" ) ) );
-
-    TInt completionCode = KErrNone;
-
-    // Note that it is allowed to suspend already suspended thread, so
-    // there is no need for states to verify that thread is really in
-    // resumed state.
-    switch ( iThreadState )
-        {
-        case EOnGoing:
-            completionCode = iModuleContainer->PauseThread();
-            break;
-
-        case ENotStarted:
-            completionCode = KErrNotReady;
-            break;
-
-        case EFinished:
-        case ECancelled:
-            completionCode = KErrCompletion;
-            break;
-
-        default:
-            CTestServer::PanicServer( EInvalidThreadState );
-            break;
-        }
-
-
-    // Complete the request
-    aMessage.Complete( completionCode );
-
-    return KErrNone;
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: Resume
-
-    Description: Resumes a test case. If test is not ongoing,
-    then do not resume.
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-    
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::Resume( const RMessage2& aMessage )
-    {
-
-    __TRACE ( KThreadOperation, ( _L( "CTestExecution::Resume" ) ) );
-
-    TInt completionCode = KErrNone;
-
-    // Note that it is allowed to resume already resumed thread, so
-    // there is no need for states to verify that thread is really in
-    // suspended state.
-    switch ( iThreadState )
-        {
-        case EOnGoing:
-            completionCode = iModuleContainer->ResumeThread();
-            break;
-
-        case ENotStarted:
-            completionCode = KErrNotReady;
-            break;
-
-        case EFinished:
-        case ECancelled:
-            completionCode = KErrCompletion;
-            break;
-
-        default:
-            CTestServer::PanicServer( EInvalidThreadState );
-            break;
-        }
-
-
-    // Complete the request
-    aMessage.Complete( completionCode );
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CloseTestExecution
-
-    Description: Closes Test Execution subsession
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-    
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CloseTestExecution( const RMessage2& aMessage )
-    {
-
-    // Cancel test request
-    CancelTestRequest();
-
-    // Cancel print request
-    CancelPrintRequest();
-    
-    // Cancel event request
-    CancelEventRequest();
-
-    // Delete this subsession
-    const TUint subsession = aMessage.Int3();
-    iModuleSession->DeleteTestExecution( subsession, aMessage );
-
-    // Complete the request
-    aMessage.Complete( KErrNone );
-
-    return KErrNone;
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelPrintRequest
-
-    Description: Cancel print request. Completes ongoing print request
-    with KErrCancel.
-
-    Parameters: None
-    
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelPrintRequest()
-    {
-
-    if ( iPrintNotifyAvailable )
-        {
-        iPrintHandler->Cancel();
-        
-        iPrintNotifyAvailable = EFalse;
-        iNotifyPrintMessage.Complete ( KErrCancel );
-        //@spe iPrintNotifyAvailable = EFalse;
-        }
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelEventRequest
-
-    Description: Cancel event request. Completes ongoing event request
-    with KErrCancel.
-
-    Parameters: None
-    
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelEventRequest()
-    {
-    iEventHandler->Cancel();
-
-    if( iEventNotifyAvailable )
-        {
-        // Cancel request
-        iEventNotifyAvailable = EFalse;
-        iNotifyEventMessage.Complete ( KErrCancel );
-        }
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelInterferenceRequest
-
-    Description: Cancel print request. Completes ongoing print request
-    with KErrCancel.
-
-    Parameters: None
-
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelInterferenceRequest()
-    {
-
-    if ( iInterferenceNotifyAvailable )
-        {
-        iInterferenceHandler->Cancel();
-        
-        iInterferenceNotifyAvailable = EFalse;
-        iNotifyInterferenceMessage.Complete ( KErrCancel );
-        }
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelRemoteCmdRequest
-
-    Description: Cancel RemoteCmd request. Completes ongoing RemoteCmd request
-        with KErrCancel.
-
-    Parameters: None
-    
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelRemoteCmdRequest()
-    {
-    iSndHandler->Cancel();
-
-    // Cancel request
-    if( iRemoteSendAvailable )
-        {
-        iRemoteSendAvailable = EFalse;
-        iNotifyRemoteCmdMessage.Complete ( KErrCancel );
-        }
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: NotifyCommand
-
-    Description: Handles the first phase of the Command request from engine.
-
-    Parameters: const RMessage& aMessage: in: Message from client.
-
-    Return Values: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::NotifyCommand( const RMessage2& aMessage )
-    {
-    iNotifyCommandMessage = aMessage;
-    iCommandNotifyAvailable = ETrue;
-    iCommandHandler->StartL();
-
-    return KErrNone;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelCommandRequest
-
-    Description: Cancel Command request. Completes ongoing Command request
-        with KErrCancel.
-
-    Parameters: None
-
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelCommandRequest()
-    {
-    iCommandHandler->Cancel();
-
-    // Cancel request
-    if(iCommandNotifyAvailable)
-        {
-        iCommandNotifyAvailable = EFalse;
-        iNotifyCommandMessage.Complete(KErrCancel);
-        }
-
-    return KErrNone;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: GetTestCaseArguments
-
-    Description: Get test case arguments
-
-    Parameters: None
-
-    Return Values: Test case arguments
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-const TDesC& CTestExecution::GetTestCaseArguments() const
-    {
-    if ( iTestCaseArgs != NULL )
-        {
-        return *iTestCaseArgs;
-        }
-    return KNullDesC;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelTestRequest
-
-    Description: Cancel test execution request.
-    If thread is not in OnGoing state, function does not do anything.
-
-    Otherwise following operations are done:
-    1 ) Obtain access to both  PrintMutex and EventMutex to make sure that
-       thread can't be accessing print queue or events.
-    2 ) Kill the thread
-    3 ) Complete original "RunTestCase" request with KErrCancel
-    4 ) If print queue is empty, complete print request
-    5 ) Give up mutexes
-    6 ) Delete module container
-
-    Parameters: None
-    
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelTestRequest()
-    {
-    // This mutex block and make sure that cancel operation is done succesfully
-    // and test case e.g. cannot complete at the same time. Get mutex.
-    iTestThreadMutex.Wait();
-
-    // iModuleContainer is an active object, check is active.
-    if ( iModuleContainer == NULL || ( iModuleContainer != NULL && !iModuleContainer->IsActive() ) )
-        {
-        // Test case is already ready, return.
-        iTestThreadMutex.Signal();
-        return KErrNone;
-        }
-
-    if ( iThreadState == EOnGoing )
-        {
-        // Print mutex access is required to make sure that the dying thread
-        // does not have access to print queue. Same is true for event queue.
-
-        // NOTE: iEventArrayMutex is now taken, so the ongoing thread
-        // can't set any events so queue will be empty.
-        iPrintHandler->Cancel();
-        iEventHandler->Cancel();
-        iInterferenceHandler->Cancel();
-        iCommandHandler->Cancel();
-
-        // Kill the thread
-        iModuleContainer->KillThread( KErrCancel );
-
-        // Complete the test execution request
-        CompleteTestExecution( KErrCancel, TFullTestResult::ECaseCancelled, 
-                               KErrCancel, KErrCancel, _L( "Cancelled" ) );
-        iThreadState = ECancelled;
-
-       
-        /**        
-        * Removed, because may block in certain situations. Implemented now in
-        * TestCombiner instead.
-        // Unset all pending state events, 
-        // because we have killed the testcase abnormally
-        // UnsetStateEvents();
-        */
-        
-        // Complete print request if queue is empty
-        CompletePrintRequestIfQueueEmpty();
-        
-        // Delete the module containter
-        delete iModuleContainer;
-        iModuleContainer = NULL;
-        }
-        
-    // Relinquish mutex.
-    iTestThreadMutex.Signal();
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelRequestL
-
-    Description: Cancel asynchronous request
-
-    Parameters: const RMessage& aMessage      :in:  Message from client.
-    
-    Return Values: TInt                             Error code from CancelXXX-
-                                                    function
-
-    Errors/Exceptions: Function panics the client, if invalid message
-                       received.
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelRequestL( const RMessage2& aMessage )
-    {
-    TInt r = KErrNone;
-
-    switch ( aMessage.Int0() )
-        {
-        case ETestExecutionRunTestCase:
-            {
-            r = CancelTestRequest();
-            break;
-            }
-        case ETestExecutionNotifyProgress:
-            {
-            r = CancelPrintRequest();
-            break;
-            }
-        case ETestExecutionNotifyEvent:
-            {
-            r = CancelEventRequest();
-            break;
-            }
-        case ETestExecutionNotifyRemoteCmd:
-            {
-            r = CancelRemoteCmdRequest();
-            break;
-            }
-        case ETestExecutionNotifyCommand:
-            {
-            r = CancelCommandRequest();
-            break;
-            }
-        default:
-            iModuleSession->PanicClient( EInvalidRequestCancel, aMessage );
-            break;
-        }
-
-    aMessage.Complete( r );
-
-    return r;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: SetThreadState
-
-    Description: A multithread safe thread state modification function
-
-    Parameters: const TTestState aState       :in:  New state
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::SetThreadState( const TTestState aState )
-    {
-
-    iThreadState = aState;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: Complete event
-
-    Description: Completes pending event request. Must be 
-        called with iEventSem taken.
-        
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-    
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CompleteEvent( TInt aError )
-    {
-    if( iEventDef.iStatus )
-        {
-        __TRACE( KMessage,(_L("Comp Stat %d, %x (error %d)"), 
-            this, iEventDef.iStatus, aError));
-        TestThreadRequestComplete( iEventDef.iStatus, aError );
-        
-        iEventDef.iStatus = NULL;
-        
-        }
-        
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CompletePrintRequestIfQueueEmpty
-
-    Description: Completes print request if queue is empty.
-
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CompletePrintRequestIfQueueEmpty()
-    {
-
-    if ( iPrintNotifyAvailable &&  iPrintQueue->Count() == 0 )
-        {
-        iNotifyPrintMessage.Complete ( KErrEof );
-        iPrintNotifyAvailable = EFalse;
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CleanupEvents
-
-    Description: Cleanups Events.
-
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CleanupEvents()
-    {
-    
-    iEventArray.ResetAndDestroy();
-    
-    }
-    
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: GetRq
-
-    Description: Get request pointers.
-
-    Parameters: None
-
-    Return Values: TRequestStatus*
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-TRequestStatus* CTestExecution::GetRq( TRequestType aType )
-    {
-
-    TRequestStatus* status = NULL;
-
-    switch( aType )
-        {
-        case ERqPrint:
-            status = &iPrintHandler->iStatus;
-            break;
-        case ERqEvent:
-            status = &iEventHandler->iStatus;
-            break;
-        case ERqSnd:
-            status = &iSndHandler->iStatus;
-            break;
-        case ERqRcv:
-            status = &iRcvHandler->iStatus;
-            break;
-        case ERqInterference:
-            status = &iInterferenceHandler->iStatus;
-            break;
-        case ERqMeasurement:
-            status = &iMeasurementHandler->iStatus;
-            break;
-        case ERqCommand:
-            status = &iCommandHandler->iStatus;
-            break;
-        default:
-            break;
-        }
-
-    return status;
-
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CompleteTestExecution
-
-    Description: Completes test execution
-
-    Parameters: const TInt aCompletionCode    :in:  Request completion code
-                const TInt aCaseExecutionCode  in:  Case execution code
-                const TFullTestResult::TCaseExecutionResult aCaseExecutionType,
-                const TInt aCaseResult        :in:  Case result
-                const TDesC& aText            :in:  Completion text
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CompleteTestExecution( const TInt aCompletionCode,
-    const TFullTestResult::TCaseExecutionResult aCaseExecutionType,
-    const TInt aCaseExecutionCode,
-    const TInt aCaseResult,
-    const TDesC& aText )
-    {
-    
-    TInt completionCode = aCompletionCode;
-    
-    if( iModuleContainer != NULL )
-        {
-        // Fill the description
-        iFullResult.iEndTime.HomeTime();
-        iFullResult.iCaseExecutionResultType = aCaseExecutionType;
-        iFullResult.iCaseExecutionResultCode = aCaseExecutionCode;
-        iFullResult.iTestResult.iResult = aCaseResult;
-        iFullResult.iTestResult.iResultDes = aText;
-        CompleteTestExecution( aCompletionCode );
-        return;
-        }
-    else
-        {   
-        completionCode = KErrGeneral;
-        __TRACE ( KError, ( CStifLogger::ERed, 
-            _L("CTestExecution::CompleteTestExecution: ModuleContainer NULL") ) );
-        }
-
-    iTestExeMessage.Complete ( completionCode );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CompleteTestExecution
-
-    Description: Completes test execution
-
-    Parameters: const TInt aCompletionCode: in: completion code
-                TFullTestResult&: in: test case result
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestExecution::CompleteTestExecution( const TInt aCompletionCode )
-    {
-    
-    TInt completionCode = aCompletionCode;
-    
-    TFullTestResultPckg fullResultPckg( iFullResult );
-    TRAPD( res, iTestExeMessage.WriteL( 0, fullResultPckg ) );
-    if ( res != KErrNone )
-        {
-        completionCode = res;
-        }
-
-    iTestExeMessage.Complete ( completionCode );
-    
-    // @js Now it returns completionCode, used to return res
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: UnsetStateEvents
-
-    Description: Unsets all state events. Must be done if testcase is exited 
-                abnormally (i.e. aborted by the user).
-
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::UnsetStateEvents()
-    {
-
-
-    // Unset all state events that are set currently
-    TInt count = iStateEvents.Count();
-    TEventIf event;
-    for( TInt i = 0; i < count; i++ )   
-        {
-        TPtrC name = *(iStateEvents[i]);
-        event.Set( TEventIf::EUnsetEvent, name, TEventIf::EState );
-        
-        // Construct message
-        TEventIfPckg eventPckg( event );
-
-        // Write message to client space
-        TRAPD( res, iNotifyEventMessage.WriteL( 0, eventPckg ) );
-
-        // Complete with WriteL result
-        iEventNotifyAvailable = EFalse;
-        iNotifyEventMessage.Complete( res );
-        if( res != KErrNone )
-            {
-            __TRACE( KError,( _L( "CTestExecution::UnsetStateEvents: WriteL failed" ) ));
-            break;
-            } 
-        }
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: TestThreadRequestComplete
-
-    Description: Complete test thread request.
-
-    Parameters: None
-    
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CTestExecution::TestThreadRequestComplete( TRequestStatus* aStatus, 
-                                                TInt aCode)
-    {                                        
-    
-    if( iThreadState != EOnGoing )
-        {
-        __TRACE( KError,
-            ( _L( "CTestExecution::TestThreadRequestComplete: test thread killed" ) ));
-        return;
-        }
-
-    if( iTestThreadOpen == EFalse )
-        {        
-        if( iTestThread.Open( iTestThreadId ) != KErrNone )
-            {
-            __TRACE( KError,
-                ( _L( "CTestExecution::TestThreadRequestComplete: test thread cannot be opened" ) ));
-            return;
-            }
-        iTestThreadOpen = ETrue;
-        }
-    if( iTestThread.ExitType() != EExitPending ) 
-        {
-        // test thread has died
-        __TRACE( KError,
-            ( _L( "CTestExecution::TestThreadRequestComplete: test thread has died" ) ));
-        return;
-        }    
-     
-    iTestThread.RequestComplete( aStatus, aCode );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: CancelTestExecution
-
-    Description: Cancels test(s) execution in special cases e.g. timeout,
-                 exit etc.
-
-    Parameters: None
-    
-    Return Values: TInt: Symbian error code.
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::CancelTestExecution()
-    {
-    TInt ret( KErrNone );
-    ret = CancelTestRequest();
-
-    return ret;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: KillTestinterferenceThread
-
-    Description: Make sure that any of the test interference thread's won't
-                 stay to run if test case is crashed of test interference
-                 object is not deleted.
-
-    Parameters: None
-
-    Return Values: TInt: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::KillTestinterferenceThread()
-    {
-    for( TInt i = 0; i < iSTIFTestInterferenceArray.Count(); i++ )
-        {
-        RDebug::Print( 
-            _L( "Test interference's thread[%x] killed by STIF" ), (TInt)iSTIFTestInterferenceArray[i].Id() );
-        __TRACE( KInit,
-            ( _L( "Test interference's thread[%x] killed by STIF" ), (TInt)iSTIFTestInterferenceArray[i].Id() ) );
-        iSTIFTestInterferenceArray[i].Kill( KErrCancel );
-        //iSTIFTestInterferenceArray.Remove( i );
-        }
-
-    iSTIFTestInterferenceArray.Reset();
-    iSTIFTestInterferenceArray.Close();
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: DoNotifyCommand
-
-    Description: Completes command message.
-
-    Parameters: None.
-
-    Return Values: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::DoNotifyCommand()
-    {
-    if(!iCommandNotifyAvailable)
-    	{
-    	__TRACE(KPrint, (_L("CTestExecution::DoNotifyCommand(): unable to complete notification")))
-    	return KErrNone;
-    	}
-
-    TInt ret = KErrNone;
-
-    switch(iCommandDef->iCommand)
-        {
-        case EStopExecution:
-            {
-            //Unpack received parameters
-            TStopExecutionCommandParams par;
-            TStopExecutionCommandParamsPckg parPack(par);
-            parPack.Copy(iCommandDef->iParamsPckg);
-
-            //Set test case handle
-            par.iTestCaseHandle = iNotifyCommandMessage.Int3();
-
-            __TRACE(KPrint, (_L("CTestExecution::DoNotifyCommand(): command [%d] type [%d] code [%d] test handle [%d]"), TInt(iCommandDef->iCommand), TInt(par.iType), TInt(par.iCode), par.iTestCaseHandle));
-            iCommandDef->iParamsPckg.Copy(parPack);
-            break;
-            }
-        case ESendTestModuleVersion:
-        	{
-        	TSendTestModuleVesionCommandParams par;
-        	TSendTestModuleVesionCommandParamsPckg parPack(par);
-        	parPack.Copy(iCommandDef->iParamsPckg);
-        	
-        	__TRACE(KPrint, (_L("CTestExecution::DoNotifyCommand(): command ESendTestModuleVersion")));
-        	break;
-        	}
-        default:
-            __TRACE(KError, (_L("CTestExecution::DoNotifyCommand(): Unknown command [%d]"), TInt(iCommandDef->iCommand)));
-            return KErrNotFound;
-        }
-    // Construct message
-    TPckg<TCommand> commandPckg(iCommandDef->iCommand);
-
-    // Start first phase of the writing message to client space
-    TRAP(ret, iNotifyCommandMessage.WriteL(0, commandPckg));
-    if(ret != KErrNone)
-       {
-       __TRACE(KError, (_L( "CTestExecution::DoNotifyCommand(): WriteL failed (0)")));
-       }
-
-    TRAP(ret, iNotifyCommandMessage.WriteL(1, iCommandDef->iParamsPckg));
-    if(ret != KErrNone)
-       {
-       __TRACE(KError, (_L( "CTestExecution::DoNotifyCommand(): WriteL failed (1)")));
-       }
-
-    // Complete request with WriteL result
-    iCommandNotifyAvailable = EFalse;
-    iNotifyCommandMessage.Complete(ret);
-
-    return KErrNone;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CTestExecution
-
-    Method: KillTestMeasurement
-
-    Description: Make sure that any of the test measurement operations won't
-                 stay to run if test case is crashed or test measurement object
-                 is not stopped by user.
-
-    Parameters: None
-
-    Return Values: TInt: Symbian OS error code.
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestExecution::KillTestMeasurement()
-    {
-    for( TInt i = 0; i < iMeasurementHandlingArray.Count(); i++ )
-        {
-        iMeasurementHandlingArray[i]->iMeasurementModulePtr->Stop();
-        }
-
-    iMeasurementHandlingArray.ResetAndDestroy();
-    iMeasurementHandlingArray.Close();
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CPrintHandler class member functions.
-    CPrintHandler listens print notifications from test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: NewL
-
-    Description: Constructs a new CPrintHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CPrintHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CPrintHandler* CPrintHandler::NewL( CTestExecution& aExecution )
-    {
-
-    CPrintHandler* self = new( ELeave ) CPrintHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CPrintHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: CPrintHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CPrintHandler::CPrintHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    
-    CActiveScheduler::Add ( this );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: ~CPrintHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CPrintHandler::~CPrintHandler()
-    {
-
-    Cancel();
-
-    }
-
-
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CPrintHandler::StartL()
-    {
-    
-    __TRACE( KPrint, ( _L( "CPrintHandler::StartL" ) ) );
-    
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // Signal test thread
-    iExecution.iPrintSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CPrintHandler::RunL()
-    {
-
-    __TRACE( KPrint, ( _L( "CPrintHandler::RunL [%d]" ), iStatus.Int() ) );
-    
-    iExecution.DoNotifyPrint();
-    
-    // enable print request
-    //@speiExecution.iPrintHandler->StartL();
-    StartL();
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: DoCancel
-
-    Description: Stops print notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-
-void CPrintHandler::DoCancel()
-    {
-
-    __TRACE( KPrint, ( _L( "CPrintHandler::DoCancel" ) ) );
-
-    iExecution.iPrintMutex.Wait();  // Take mutex and check test case print
-                                    // operation. If pending take print semaphore
-                                    // and complete
-    if( iStatus == KRequestPending )
-        {
-        // Signal test thread
-        // @remove iExecution.iPrintSem.Wait();
-    
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );        
-        }
-
-    iExecution.iPrintMutex.Signal();
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CPrintHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CPrintHandler::RunError( TInt aError )
-    {
-    
-    __TRACE( KError,( _L( "CPrintHandler::RunError" ) ) );
-
-    return aError;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CEventHandler class member functions.
-    CEventHandler listens print notifications from test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: NewL
-
-    Description: Constructs a new CEventHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CEventHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CEventHandler* CEventHandler::NewL( CTestExecution& aExecution )
-    {
-
-    CEventHandler* self = new( ELeave ) CEventHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CEventHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: CEventHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CEventHandler::CEventHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    
-    CActiveScheduler::Add ( this );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: ~CEventHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CEventHandler::~CEventHandler()
-    {
-
-    Cancel();
-
-    }
-
-
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CEventHandler::StartL()
-    {
-    
-    __TRACE( KPrint, ( _L( "CEventHandler::StartL" ) ) );
-
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-    
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // Signal test thread
-    iExecution.iEventSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CEventHandler::RunL()
-    {
-
-    __TRACE( KPrint, ( _L( "CEventHandler::RunL [%d]" ), iStatus.Int() ) );
-
-    switch( iExecution.EventDef().iType )
-        {
-        case TEventDef::EEventCmd:
-            iExecution.DoNotifyEvent();
-            break;
-        case TEventDef::EEventCmdCancel:
-            iExecution.CancelEvent();
-            break;
-        default:
-            CTestServer::PanicServer( EUnknownEventCmd );
-            break;  
-        }
-         
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: DoCancel
-
-    Description: Stops print notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-
-void CEventHandler::DoCancel()
-    {
-
-    __TRACE( KPrint, ( _L( "CEventHandler::DoCancel" ) ) );
-    
-    iExecution.iEventMutex.Wait();  // Take mutex and check test case event
-                                    // operation. If pending take event
-                                    // semaphore and complete
-    if( iStatus == KRequestPending )
-        {
-        // Signal test thread
-        // @remove iExecution.iEventSem.Wait();
-
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );
-
-        }
-
-    iExecution.iEventMutex.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CEventHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CEventHandler::RunError( TInt aError )
-    {
-    
-    __TRACE( KError,( _L( "CEventHandler::RunError" ) ) );
-
-    return aError;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CSndHandler class member functions.
-    CSndHandler listens print notifications from test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: NewL
-
-    Description: Constructs a new CSndHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CSndHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CSndHandler* CSndHandler::NewL( CTestExecution& aExecution )
-    {
-
-    CSndHandler* self = new( ELeave ) CSndHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CSndHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: CSndHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CSndHandler::CSndHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    
-    CActiveScheduler::Add ( this );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: ~CSndHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CSndHandler::~CSndHandler()
-    {
-
-    Cancel();
-
-    }
-
-
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CSndHandler::StartL()
-    {
-    
-    __TRACE( KPrint, ( _L( "CSndHandler::StartL" ) ) );
-
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-    
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // Signal test thread
-    iExecution.iSndSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CSndHandler::RunL()
-    {
-
-    __TRACE( KPrint, ( _L( "CSndHandler::RunL [%d]" ), iStatus.Int() ) );
-    
-    iExecution.DoRemoteSend();
-       
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: DoCancel
-
-    Description: Stops print notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-
-void CSndHandler::DoCancel()
-    {
-
-    __TRACE( KPrint, ( _L( "CSndHandler::DoCancel" ) ) );
-
-    iExecution.iSndMutex.Wait();  // Take mutex and check test case send
-                                  // operation. If pending take send
-                                  // semaphore and complete
-    if( iStatus == KRequestPending )
-        {
-        // Signal test thread
-        // @remove iExecution.iSndSem.Wait();
-
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );
-
-        }
-
-    iExecution.iSndMutex.Signal();
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CSndHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CSndHandler::RunError( TInt aError )
-    {
-    
-    __TRACE( KError,( _L( "CSndHandler::RunError" ) ) );
-
-    return aError;
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CSndHandler class member functions.
-    CRcvHandler listens print notifications from test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: NewL
-
-    Description: Constructs a new CRcvHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CRcvHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CRcvHandler* CRcvHandler::NewL( CTestExecution& aExecution )
-    {
-
-    CRcvHandler* self = new( ELeave ) CRcvHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CRcvHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: CRcvHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CRcvHandler::CRcvHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    
-    CActiveScheduler::Add ( this );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: ~CRcvHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CRcvHandler::~CRcvHandler()
-    {
-
-    Cancel();
-
-    }
-
-
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CRcvHandler::StartL()
-    {
-    
-    __TRACE( KPrint, ( _L( "CRcvHandler::StartL" ) ) );
-    
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // Signal test thread
-    iExecution.iRcvSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CRcvHandler::RunL()
-    {
-
-    __TRACE( KPrint, ( _L( "CRcvHandler::RunL [%d]" ), iStatus.Int() ) );
-    
-    iExecution.DoRemoteReceive();
-       
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: DoCancel
-
-    Description: Stops print notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-
-void CRcvHandler::DoCancel()
-    {
-
-    __TRACE( KPrint, ( _L( "CRcvHandler::DoCancel" ) ) );
-
-    iExecution.iRcvMutex.Wait();  // Take mutex and check test case receive
-                                  // operation. If pending take reveive
-                                  // semaphore and complete
-    if( iStatus == KRequestPending )
-        {
-        // Signal test thread
-        // @remove iExecution.iRcvSem.Wait();
-
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );
-        }
-        
-    iExecution.iRcvMutex.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CRcvHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CRcvHandler::RunError( TInt aError )
-    {
-    
-    __TRACE( KError,( _L( "CRcvHandler::RunError" ) ) );
-
-    return aError;
-    
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CTestInterferenceHandler class 
-    member functions. CTestInterferenceHandler listens print notifications from
-    test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: NewL
-
-    Description: Constructs a new CInterferenceHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CInterferenceHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CInterferenceHandler* CInterferenceHandler::NewL( 
-                                                CTestExecution& aExecution )
-    {
-    CInterferenceHandler* self = 
-                        new( ELeave ) CInterferenceHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CInterferenceHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: CInterferenceHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in: "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CInterferenceHandler::CInterferenceHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    CActiveScheduler::Add ( this );
-    
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: ~CInterferenceHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CInterferenceHandler::~CInterferenceHandler()
-    {
-    Cancel();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CInterferenceHandler::StartL()
-    {
-    __TRACE( KPrint, ( _L( "CInterferenceHandler::StartL" ) ) );
-    
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-
-    iStatus = KRequestPending;
-    SetActive();
-    
-    // Signal test thread, Notify test thread that operation is done.
-    iExecution.iInterferenceSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CInterferenceHandler::RunL()
-    {
-    __TRACE( KPrint, ( _L( "CInterferenceHandler::RunL [%d]" ), iStatus.Int() ) );
-    
-    iExecution.DoNotifyInterference();
-    
-    StartL();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: DoCancel
-
-    Description: Stops interference notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-void CInterferenceHandler::DoCancel()
-    {
-    __TRACE( KPrint, ( _L( "CInterferenceHandler::DoCancel" ) ) );
-
-    iExecution.iInterferenceMutex.Wait();   // Take mutex and check test
-                                            // interference operation. If
-                                            // pending take interference
-                                            // semaphore and complete
-    if( iStatus == KRequestPending )
-        {
-    
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );
-        }
-
-    iExecution.iInterferenceMutex.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CInterferenceHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError: in: Error code
-
-    Return Values:  TInt: Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CInterferenceHandler::RunError( TInt aError )
-    {
-    __TRACE( KError,( _L( "CTestInterferenceHandler::RunError" ) ) );
-
-    return aError;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CMeasurementHandler class 
-    member functions. CMeasurementHandler handles test measurement operations
-    that comes from test execution side to TestServer side.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: NewL
-
-    Description: Constructs a new CMeasurementHandler object.
-
-    Parameters: CTestExecution& aExecution: in: Pointer to test execution side.
-
-    Return Values: CMeasurementHandler*: New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CMeasurementHandler* CMeasurementHandler::NewL( CTestExecution& aExecution )
-    {
-    CMeasurementHandler* self = 
-                        new( ELeave ) CMeasurementHandler( aExecution );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CMeasurementHandler::ConstructL()
-    {
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: CMeasurementHandler
-
-    Description: Constructor
-
-    Parameters: CTestModuleContainer& aExecution :in: Pointer to test
-                execution side.
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CMeasurementHandler::CMeasurementHandler( CTestExecution& aExecution ) :
-    CActive( CActive::EPriorityStandard ),
-    iExecution( aExecution )
-    {
-    CActiveScheduler::Add ( this );
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: ~CMeasurementHandler
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CMeasurementHandler::~CMeasurementHandler()
-    {
-    Cancel();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt: Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CMeasurementHandler::StartL()
-    {
-    __TRACE( KPrint, ( _L( "CMeasurementHandler::StartL" ) ) );
-
-    if( IsActive() ) 
-        {
-        CTestServer::PanicServer( EAlreadyActive );
-        }
-
-    iStatus = KRequestPending;
-    SetActive();
-
-    // Do not Signal here because synchronous operations will be executed and we
-    // don't want to signal at first time: iExecution.iMeasurementSem.Signal();
-    // Signal() operation will be handled in RunL in this case.
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: RunL
-
-    Description: Derived from CActive, handles test measurement execution.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CMeasurementHandler::RunL()
-    {
-    __TRACE( KPrint, ( _L( "CMeasurementHandler::RunL [%d]" ), iStatus.Int() ) );
-    
-    TInt ret( 0 );
-    ret = iExecution.DoNotifyMeasurement();
-
-    // ret value is copied to struct so it can be handled later.
-    iExecution.iTestMeasurement.iMeasurementStruct.iOperationResult = ret;
-    
-    // SetActive again
-    StartL();
-
-    // TestServer side operations are done, Signal that operation is done.
-    iExecution.iMeasurementSem.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: DoCancel
-
-    Description: Stops measurement notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Approved
-    
--------------------------------------------------------------------------------
-*/
-void CMeasurementHandler::DoCancel()
-    {
-    __TRACE( KPrint, ( _L( "CMeasurementHandler::DoCancel" ) ) );
-
-    iExecution.iMeasurementMutex.Wait();    // Take mutex and check test
-                                            // measurement operation. If
-                                            // pending take measurement
-                                            // semaphore and complete
-    if( iStatus == KRequestPending )
-        {
-    
-        TRequestStatus* status = &iStatus;    
-        User::RequestComplete( status, KErrCancel );
-        }
-
-    iExecution.iMeasurementMutex.Signal();
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CMeasurementHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError: in: Error code
-
-    Return Values:  TInt: Error code
-
-    Errors/Exceptions: None
-
-    Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CMeasurementHandler::RunError( TInt aError )
-    {
-    __TRACE( KError,( 
-        _L( "CMeasurementHandler::RunError with error: %d" ), aError ) );
-
-    return aError;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    DESCRIPTION
-
-    This module contains implementation of CCommandHandler class member functions.
-    CCommandHandler listens command notifications from test thread.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: NewL
-
-    Description: Constructs a new CCommandHandler object.
-
-    Parameters: CTestExecution& aExecution: in: "Parent"
-
-    Return Values: CCommandHandler*: New object
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CCommandHandler* CCommandHandler::NewL(CTestExecution& aExecution)
-    {
-    CCommandHandler* self = new (ELeave) CCommandHandler(aExecution);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CCommandHandler::ConstructL()
-    {
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: CCommandHandler
-
-    Description: Constructor
-
-    Parameters: CTestExecution& aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CCommandHandler::CCommandHandler(CTestExecution& aExecution):
-    CActive(CActive::EPriorityStandard),
-    iExecution(aExecution)
-    {
-    CActiveScheduler::Add (this);
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: ~CCommandHandler
-
-    Description: Destructor.
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CCommandHandler::~CCommandHandler()
-    {
-    Cancel();
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CCommandHandler::StartL()
-    {
-    __TRACE(KPrint, (_L( "CCommandHandler::StartL" )));
-
-    if(IsActive())
-        {
-        CTestServer::PanicServer(EAlreadyActive);
-        }
-    iStatus = KRequestPending;
-    SetActive();
-
-    // Signal test thread
-    iExecution.iCommandSem.Signal();
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: RunL
-
-    Description:
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CCommandHandler::RunL()
-    {
-    __TRACE(KPrint, (_L( "CCommandHandler::RunL [%d]"), iStatus.Int()));
-
-    iExecution.DoNotifyCommand();
-//    StartL();
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: DoCancel
-
-    Description: Stops command notification listening.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-void CCommandHandler::DoCancel()
-    {
-    __TRACE(KPrint, (_L("CCommandHandler::DoCancel")));
-
-    iExecution.iCommandMutex.Wait();  // Take mutex and check test case receive
-                                      // operation. If pending take reveive
-                                      // semaphore and complete
-    if(iStatus == KRequestPending)
-        {
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete(status, KErrCancel);
-        }
-
-    iExecution.iCommandMutex.Signal();
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandHandler
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here.
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CCommandHandler::RunError(TInt aError)
-    {
-    __TRACE(KError, (_L("CCommandHandler::RunError")));
-
-    return aError;
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandDef
-
-    Method: CCommandDef
-
-    Description: private constructor
-
-    Return Values:  void
-
--------------------------------------------------------------------------------
-*/
-
-CCommandDef::CCommandDef()
-	{
-	}
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandDef
-
-    Method: ConstructL
-
-    Description: Second phase constructor
-
-    Return Values:  void
-
--------------------------------------------------------------------------------
-*/
-
-void CCommandDef::ConstructL()
-	{
-
-	}
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandDef
-
-    Method: NewL
-
-    Description: First phase constructor
-
-    Return Values:  void
-
--------------------------------------------------------------------------------
-*/
-
-CCommandDef* CCommandDef::NewL()
-	{
-	CCommandDef* self = new(ELeave) CCommandDef;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CCommandDef
-
-    Method: ~CCommandDef
-
-    Description: destructor
-
--------------------------------------------------------------------------------
-*/
-
-CCommandDef::~CCommandDef()
-	{
-
-	}
-
-// End of File