hti/HtiServicePlugins/HtiStifTfServicePlugin/src/HtiStifTfIf.cpp
changeset 36 813b186005b6
parent 30 86a2e675b80a
child 41 838cdffd57ce
--- a/hti/HtiServicePlugins/HtiStifTfServicePlugin/src/HtiStifTfIf.cpp	Mon Jun 28 15:36:07 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2092 +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:  Implements the functions to control STIF Test Framework
-*                through the STIF TF interface.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <badesca.h>
-#include <bautils.h>
-#include <charconv.h>
-#include <e32cons.h>
-#include <HtiLogging.h>
-#include "HtiStifTfIf.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-const static TUid KStifTfServiceUid = { 0x10210CC3 };
-
-enum TStifTfCommands
-    {
-    ECmdOpen            = 0x01,
-    ECmdClose           = 0x02,
-    ECmdLoadModule      = 0x03,
-    ECmdUnloadModule    = 0x04,
-    ECmdListCases       = 0x05,
-    ECmdStartCase       = 0x06,
-    ECmdCancelCase      = 0x07,
-    ECmdPauseCase       = 0x08,
-    ECmdResumeCase      = 0x09,
-    ECmdAddCaseFile     = 0x0A,
-    ECmdRemoveCaseFile  = 0x0B,
-    ECmdCaseMsg         = 0x0C,
-    ECmdSetDevId        = 0x0D,
-    ECmdTestCompleted   = 0x0E,
-    ECmdAtsMessage      = 0x0F,
-    ECmdSetAttribute    = 0x10
-    };
-
-_LIT8( KParameterDelimiter, "|" );
-
-// NOTE: Max length for error description is defined
-// in HtiDispatcherInterface.h (currently 118).
-_LIT8( KErrorStifTfNotOpen, "ERROR: STIF TF is not open" );
-_LIT8( KErrorOpen, "ERROR: Failed to open STIF TF" );
-_LIT8( KErrorAlreadyOpen, "ERROR: STIF TF is already open" );
-_LIT8( KErrorClose, "ERROR: Failed to close STIF TF" );
-_LIT8( KErrorUnknownCmd, "ERROR: Unknown STIF TF command" );
-_LIT8( KErrorNoCmd, "ERROR: No command given" );
-_LIT8( KErrorParameterMissing, "ERROR: Mandatory parameter missing" );
-_LIT8( KErrorParameterTooLong, "ERROR: Parameter too long" );
-_LIT8( KErrorTooManyParameters, "ERROR: Too many parameters" );
-_LIT8( KErrorNoMemory, "ERROR: Memory allocation failure" );
-_LIT8( KErrorLoadModule, "ERROR: Load Module failed" );
-_LIT8( KErrorUnloadModule, "ERROR: Unload Module failed" );
-_LIT8( KErrorInvalidCaseNumber, "ERROR: Invalid test case number parameter" );
-_LIT8( KErrorModuleNotLoaded, "ERROR: Given test module is not loaded" );
-_LIT8( KErrorGetTestCases, "ERROR: Failed to get test cases from module" );
-_LIT8( KErrorGetTestCaseInfos, "ERROR: Failed to get test case infos" );
-_LIT8( KErrorStartTestCase, "ERROR: Failed to start test case" );
-_LIT8( KErrorCancelTestCase, "ERROR: Failed to cancel test case" );
-_LIT8( KErrorPauseTestCase, "ERROR: Failed to pause test case" );
-_LIT8( KErrorResumeTestCase, "ERROR: Failed to resume test case" );
-_LIT8( KErrorInvalidDeviceId, "ERROR: Invalid device ID parameter" );
-_LIT8( KErrorAddCaseFile, "ERROR: Add Case File failed" );
-_LIT8( KErrorRemoveCaseFile, "ERROR: Remove Case File failed" );
-_LIT8( KErrorFileServer, "ERROR: Failed to connect to file server" );
-_LIT8( KErrorCaseFileNotFound, "ERROR: Given test case file was not found" );
-_LIT8( KErrorIniFileNotFound, "ERROR: Given ini-file was not found" );
-_LIT8( KErrorCaseMessage, "ERROR: Test case message sending failed" );
-_LIT8( KErrorCharConv, "ERROR: Character conversion failed" );
-_LIT8( KErrorInvalidAttributeId, "ERROR: Invalid attribute id parameter" );
-_LIT8( KErrorSetAttribute, "ERROR: Failed to set attribute" );
-_LIT8( KErrorUnknown, "ERROR: Unspecified error occured" );
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::CHtiStifTfIf
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CHtiStifTfIf::CHtiStifTfIf():iIsBusy( EFalse ),
-                             iMessage( NULL ),
-                             iErrorCode( 0 ),
-                             iStifTfOpen( EFalse ),
-                             iDevId( KDefaultDevId ),
-                             iConsole( NULL )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::ConstructL( CHtiStifTfServicePlugin* aPlugin )
-    {
-    iCommandId = 0;
-    iParameters = new (ELeave) CDesC8ArrayFlat( 5 );
-    iPlugin = aPlugin;
-    }
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CHtiStifTfIf* CHtiStifTfIf::NewL( CHtiStifTfServicePlugin* aPlugin )
-    {
-    CHtiStifTfIf* self = new( ELeave ) CHtiStifTfIf;
-    CleanupStack::PushL( self );
-    self->ConstructL( aPlugin );
-    CleanupStack::Pop();
-    return self;
-    }
-
-
-// Destructor
-CHtiStifTfIf::~CHtiStifTfIf()
-    {
-    if ( iParameters )
-        {
-        iParameters->Reset();
-        }
-    delete iParameters;
-    iLoadedInfos.ResetAndDestroy();
-    iLoadedInfos.Close();
-    delete iMessage;
-    if ( iStifTfOpen ) Close();
-    iPlugin = NULL;  // Not owned, so not deleted.
-    iConsole = NULL; // Not owned, so not deleted.
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::ProcessMessageL
-// Interpretes the message and calls appropriate command handling method.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::ProcessMessageL( const TDesC8& aMessage,
-    THtiMessagePriority /*aPriority*/)
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::ProcessMessageL" );
-    HTI_LOG_FORMAT( "Message length = %d", aMessage.Length() );
-
-    if ( iIsBusy )
-        {
-        HTI_LOG_TEXT( "Plugin is busy - leaving" );
-        User::Leave( KErrInUse );
-        }
-
-    iIsBusy = ETrue;
-
-    if ( aMessage.Length() < 1 )
-        {
-        User::LeaveIfError(
-            SendErrorResponseMsg( KErrArgument, KErrorNoCmd ) );
-        return;
-        }
-
-    iCommandId = aMessage[0];
-    HTI_LOG_FORMAT( "Command = %d", iCommandId );
-
-    TRAPD( err, ParseParametersL( aMessage ) );
-
-    if ( err == KErrNoMemory )
-        {
-        User::LeaveIfError( SendErrorResponseMsg( err, KErrorNoMemory ) );
-        return;
-        }
-
-    else if ( err )
-        {
-        User::LeaveIfError(
-            SendErrorResponseMsg( KErrGeneral, KErrorUnknown ) );
-        return;
-        }
-
-    // If STIF TF is not open, any other command than OPEN returns KErrNotReady
-    if ( !iStifTfOpen )
-        {
-        if ( iCommandId == ECmdOpen )
-            {
-            HandleOpenCmdL();
-            return;
-            }
-        else
-            {
-            User::LeaveIfError(
-                SendErrorResponseMsg( KErrNotReady, KErrorStifTfNotOpen ) );
-            return;
-            }
-        }
-
-
-    // Go through the rest of the commands
-    if ( iCommandId == ECmdLoadModule )
-        {
-        HandleLoadModuleCmdL();
-        }
-
-    else if ( iCommandId == ECmdUnloadModule )
-        {
-        HandleUnloadModuleCmdL();
-        }
-
-    else if ( iCommandId == ECmdListCases )
-        {
-        HandleListCasesCmdL();
-        }
-
-    else if ( iCommandId == ECmdStartCase )
-        {
-        HandleStartCaseCmdL();
-        }
-
-    else if ( iCommandId == ECmdCancelCase )
-        {
-        HandleCancelCaseCmdL();
-        }
-
-    else if ( iCommandId == ECmdPauseCase )
-        {
-        HandlePauseCaseCmdL();
-        }
-
-    else if ( iCommandId == ECmdResumeCase )
-        {
-        HandleResumeCaseCmdL();
-        }
-
-    else if ( iCommandId == ECmdAddCaseFile )
-        {
-        HandleAddCaseFileCmdL();
-        }
-
-    else if ( iCommandId == ECmdRemoveCaseFile )
-        {
-        HandleRemoveCaseFileCmdL();
-        }
-
-    else if ( iCommandId == ECmdCaseMsg )
-        {
-        HandleCaseMsgCmdL();
-        }
-
-    else if ( iCommandId == ECmdSetDevId )
-        {
-        HandleSetDevIdCmdL();
-        }
-
-    else if ( iCommandId == ECmdSetAttribute )
-        {
-        HandleSetAttributeCmdL();
-        }
-
-    else if ( iCommandId == ECmdClose )
-        {
-        HandleCloseCmdL();
-        }
-
-    else if ( iCommandId == ECmdOpen )
-        {
-        User::LeaveIfError(
-            SendErrorResponseMsg( KErrArgument, KErrorAlreadyOpen ) );
-        }
-
-    else
-        {
-        User::LeaveIfError(
-            SendErrorResponseMsg( KErrArgument, KErrorUnknownCmd ) );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::ProcessMessageL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleOpenCmdL
-// Handles opening of the STIF Test Framework.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleOpenCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleOpenCmdL" );
-
-    TInt err = KErrNone;
-
-    // OPEN command has 1 optional parameter (test framework ini-file)
-    if ( iParameters->Count() == 0 )
-        {
-        err = Open();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorOpen );
-            return;
-            }
-
-        iStifTfOpen = ETrue;
-        SendResponseMsg( _L8( "OK" ) );
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TBuf<KMaxFileName> iniFilePath;
-        if ( (*iParameters)[0].Length() > iniFilePath.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        iniFilePath.Copy( (*iParameters)[0] );
-
-        RFs fsSession;
-        err = fsSession.Connect();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorFileServer );
-            return;
-            }
-
-        if ( !( BaflUtils::FileExists( fsSession, iniFilePath ) ) )
-            {
-            SendErrorResponseMsg( KErrNotFound, KErrorIniFileNotFound );
-            fsSession.Close();
-            return;
-            }
-
-        fsSession.Close();
-
-        err = Open( iniFilePath );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorOpen );
-            return;
-            }
-
-        // Load the test case infos of all currently loaded test
-        // modules (modules listed in the given ini-file).
-        TRAP( err, LoadTestCaseInfosL() );
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorGetTestCaseInfos );
-            return;
-            }
-
-        iStifTfOpen = ETrue;
-        SendResponseMsg( _L8( "OK" ) );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleOpenCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleCloseCmdL
-// Closes the STIF Test Framework.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleCloseCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleCloseCmdL" );
-
-    TInt err = KErrNone;
-
-    // CLOSE command has no parameters
-    if ( iParameters->Count() == 0 )
-        {
-        err = Close();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorClose );
-            return;
-            }
-
-        iStifTfOpen = EFalse;
-        iLoadedInfos.ResetAndDestroy(); // empty the cache of test case infos
-        SendResponseMsg( _L8( "OK" ) );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleCloseCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleLoadModuleCmdL
-// Loads a STIF TF test module (optionally with ini-file).
-// Also calls the LoadTestCaseInfosL helper method to load the test case info
-// objects from the test module.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleLoadModuleCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleLoadModuleCmdL" );
-
-    TInt err = KErrNone;
-
-    TBuf<KMaxFileName> moduleName;
-    TBuf<KMaxFileName> iniFilePath;
-
-    // LOAD_MODULE command has 1 mandatory parameter (module name)
-    // and 1 optional parameter (ini-file path).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-        moduleName.Copy( (*iParameters)[0] );
-        err = AddTestModule( moduleName );
-        }
-
-    else if ( iParameters->Count() == 2 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() ||
-             (*iParameters)[1].Length() > iniFilePath.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        moduleName.Copy( (*iParameters)[0] );
-        iniFilePath.Copy( (*iParameters)[1] );
-
-        RFs fsSession;
-        err = fsSession.Connect();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorFileServer );
-            return;
-            }
-
-        if ( !( BaflUtils::FileExists( fsSession, iniFilePath ) ) )
-            {
-            SendErrorResponseMsg( KErrNotFound, KErrorIniFileNotFound );
-            fsSession.Close();
-            return;
-            }
-
-        fsSession.Close();
-
-        err = AddTestModule( moduleName, iniFilePath );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        return;
-        }
-
-    if ( err )
-        {
-        HTI_LOG_FORMAT( "LoadModule: Error %d", err );
-        SendErrorResponseMsg( err, KErrorLoadModule );
-        }
-
-    else
-        {
-        TRAP( err, LoadTestCaseInfosL( moduleName ) );
-
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                "LoadModule - Error from LoadTestCaseInfosL %d", err );
-            RemoveTestModule( moduleName );
-            SendErrorResponseMsg( err, KErrorGetTestCases );
-            return;
-            }
-
-        // Sends the name of the loaded module as a response.
-        SendResponseMsg( (*iParameters)[0] );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleLoadModuleCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleUnloadModuleCmdL
-// Unloads a STIF TF test module.
-// Also removes and deletes the corresponding CHtiTestModuleCaseInfos object
-// from iLoadedInfos pointer array.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleUnloadModuleCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleUnloadModuleCmdL" );
-
-    TInt err = KErrNone;
-
-    TBuf<KMaxFileName> moduleName;
-
-    // UNLOAD_MODULE command has always 1 parameter (module name).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    if ( iParameters->Count() == 1 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-        moduleName.Copy( (*iParameters)[0] );
-        err = RemoveTestModule( moduleName );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        return;
-        }
-
-    if ( err )
-        {
-        HTI_LOG_FORMAT( "UnloadModule: Error %d", err );
-        SendErrorResponseMsg( err, KErrorUnloadModule );
-        }
-
-    else
-        {
-        // Remove the test case infos of the unloaded module.
-        TInt moduleIndex = IndexByModuleName( moduleName );
-        if ( moduleIndex != KErrNotFound )
-            {
-            CHtiTestModuleCaseInfos* module = iLoadedInfos[moduleIndex];
-            iLoadedInfos.Remove( moduleIndex );
-            delete module;
-            }
-
-        // Sends the name of the unloaded module as a response.
-        SendResponseMsg( (*iParameters)[0] );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleUnloadModuleCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleListCasesCmdL
-// Creates a list of titles of the test cases inside the given test module.
-// Output is a string of test case titles separated with the | character.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleListCasesCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleListCasesCmdL" );
-
-    TInt err = KErrNone;
-
-    TBuf<KMaxFileName> moduleName;
-    TBuf8<128> buf8;  // temporary buffer for case titles
-
-    CHtiTestModuleCaseInfos* module = NULL;
-    CTestInfo* caseInfo = NULL;
-
-    // LIST_CASES command has 1 optional parameter (module name).
-
-    // If no parameter given all cases of all currently loaded
-    // modules are listed.
-    if ( iParameters->Count() == 0 )
-        {
-        /*
-        // (Re)load case infos from all loaded modules
-        TRAP( err, LoadTestCaseInfosL() );
-
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                "ListCases - Error from LoadTestCaseInfosL %d", err );
-            SendErrorResponseMsg( err, KErrorGetTestCaseInfos );
-            }
-        */
-        CBufFlat* caseListBuf = NULL;
-        TRAP( err, caseListBuf = CBufFlat::NewL( 128 ) );
-        if ( err )
-            {
-            SendErrorResponseMsg( KErrNoMemory, KErrorNoMemory );
-            return;
-            }
-
-        // Loop all loaded test modules
-        TInt pos = 0;
-        for ( TInt i = 0; i < iLoadedInfos.Count(); i++ )
-            {
-            module = NULL;
-            module = iLoadedInfos[i];
-            HTI_LOG_FORMAT( "Listing cases from module %S",
-                module->iModuleName );
-
-            // Loop all case infos in this module
-            for ( TInt j = 0; j < module->iTestInfos.Count(); j++ )
-                {
-                caseInfo = NULL;
-                caseInfo = module->iTestInfos[j];
-
-                if ( !( i == 0 && j == 0 ) )
-                    {
-                    buf8.Append( KParameterDelimiter );
-                    }
-
-                buf8.Append( caseInfo->TestCaseTitle() );
-
-                TRAP( err, caseListBuf->ExpandL( pos, buf8.Length() ) );
-                if ( err )
-                    {
-                    SendErrorResponseMsg( KErrNoMemory, KErrorNoMemory );
-                    delete caseListBuf;
-                    return;
-                    }
-                caseListBuf->Write( pos, buf8, buf8.Length() );
-                pos += buf8.Length();
-                buf8.Zero();
-                }
-            }
-
-        if ( caseListBuf->Size() > 0 )
-            {
-            TPtr8 ptr = caseListBuf->Ptr( 0 );
-            SendResponseMsg( ptr );
-            }
-
-        else
-            {
-            SendResponseMsg( buf8 );
-            }
-
-        delete caseListBuf;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        moduleName.Copy( (*iParameters)[0] );
-        TInt moduleIndex = IndexByModuleName( moduleName );
-
-        if ( moduleIndex == KErrNotFound )
-            {
-            HTI_LOG_TEXT( "Module is not loaded" );
-            SendErrorResponseMsg( KErrNotFound, KErrorModuleNotLoaded );
-            return;
-            }
-        /*
-        // (Re)load the case infos of given module
-        TRAP( err, LoadTestCaseInfosL( moduleName ) );
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                "ListCases - Error from LoadTestCaseInfosL %d", err );
-            SendErrorResponseMsg( err, KErrorGetTestCaseInfos );
-            return;
-            }
-        */
-        module = iLoadedInfos[moduleIndex];
-        CBufFlat* caseListBuf = NULL;
-
-        TRAP( err, caseListBuf = CBufFlat::NewL( 128 ) );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( KErrNoMemory, KErrorNoMemory );
-            return;
-            }
-
-        TInt pos = 0;
-        for ( TInt i = 0; i < module->iTestInfos.Count(); i++ )
-            {
-            caseInfo = NULL;
-            caseInfo = module->iTestInfos[i];
-            buf8.Copy( caseInfo->TestCaseTitle() );
-            if ( !( i == module->iTestInfos.Count() - 1 ) )
-                {
-                buf8.Append( KParameterDelimiter );
-                }
-            TRAP( err, caseListBuf->ExpandL( pos, buf8.Length() ) );
-            if ( err )
-                {
-                SendErrorResponseMsg( KErrNoMemory, KErrorNoMemory );
-                delete caseListBuf;
-                return;
-                }
-            caseListBuf->Write( pos, buf8, buf8.Length() );
-            pos += buf8.Length();
-            buf8.Zero();
-            }
-
-        if ( module->iTestInfos.Count() > 0 )
-            {
-            TPtr8 ptr = caseListBuf->Ptr( 0 );
-            SendResponseMsg( ptr );
-            }
-
-        else
-            {
-            SendResponseMsg( buf8 );
-            }
-
-        delete caseListBuf;
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleListCasesCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleStartCaseCmdL
-// Starts one test case based on test module name and test case index number.
-// STIF TF gives an ID to the started case and that ID is sent as a response
-// message.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleStartCaseCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleStartCaseCmdL" );
-
-    TInt err = KErrNone;
-    TInt caseNumber = -1;
-
-    // START_CASE command has 1 or 2 parameters.
-    // If only one parameter given, it's the index of test case to start. The
-    // index refers to the list of test cases of all currently loaded modules.
-    // If two parameters given, then the first one is the module name and
-    // second is the test case index number inside the given module,
-
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( caseNumber );
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        CTestInfo* caseInfo = NULL;
-        TRAP( err, caseInfo = GetCaseInfoL( caseNumber ) );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        TInt caseId = -1;
-
-        err = StartTestCase( caseId, *caseInfo );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorStartTestCase );
-            return;
-            }
-
-        TBuf8<32> msg;
-        msg.AppendNum( caseId );
-        SendResponseMsg( msg );
-        }
-
-    else if ( iParameters->Count() == 2 )
-        {
-        TBuf<KMaxFileName> moduleName;
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        moduleName.Copy( (*iParameters)[0] );
-        TLex8 lex( (*iParameters)[1] );
-        err = lex.Val( caseNumber );
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        TInt moduleIndex = IndexByModuleName( moduleName );
-
-        if ( moduleIndex == KErrNotFound )
-            {
-            // We don't have case infos of given module loaded - try to
-            // load them.
-            TRAP( err, LoadTestCaseInfosL( moduleName ) );
-            if ( err )
-                {
-                HTI_LOG_FORMAT(
-                    "StartCase - Error from LoadTestCaseInfosL %d", err );
-                SendErrorResponseMsg( err, KErrorModuleNotLoaded );
-                return;
-                }
-            // Now there should be the module added - get its index
-            moduleIndex = IndexByModuleName( moduleName );
-            }
-
-        CHtiTestModuleCaseInfos* module = iLoadedInfos[moduleIndex];
-
-        if ( caseNumber < 0 ||
-             caseNumber >= module->iTestInfos.Count() ||
-             module->iTestInfos.Count() == 0 )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        CTestInfo* caseInfo = module->iTestInfos[caseNumber];
-        TInt caseId = -1;
-
-        err = StartTestCase( caseId, *caseInfo );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorStartTestCase );
-            return;
-            }
-
-        TBuf8<32> msg;
-        msg.AppendNum( caseId );
-        SendResponseMsg( msg );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleStartCaseCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleCancelCaseCmdL
-// Cancels test case execution based on test case ID.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleCancelCaseCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleCancelCaseCmdL" );
-
-    TInt err = KErrNone;
-
-    // CANCEL_CASE command always has 1 parameter (test case id).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TInt caseId = -1;
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        err = CancelTestCase( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorCancelTestCase );
-            }
-
-        else
-            {
-            SendResponseMsg( _L8( "OK" ) );
-            }
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleCancelCaseCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandlePauseCaseCmdL
-// Pauses test case execution based on test case ID.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandlePauseCaseCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandlePauseCaseCmdL" );
-
-    TInt err = KErrNone;
-
-    // PAUSE_CASE command always has 1 parameter (test case id).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TInt caseId = -1;
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        err = PauseTestCase( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorPauseTestCase );
-            }
-
-        else
-            {
-            SendResponseMsg( _L8( "OK" ) );
-            }
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandlePauseCaseCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleResumeCaseCmdL
-// Resumes execution of a paused test case based on test case ID.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleResumeCaseCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleResumeCaseCmdL" );
-
-    TInt err = KErrNone;
-
-    // RESUME_CASE command always has 1 parameter (test case id).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TInt caseId = -1;
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidCaseNumber );
-            return;
-            }
-
-        err = ResumeTestCase( caseId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorResumeTestCase );
-            }
-
-        else
-            {
-            SendResponseMsg( _L8( "OK" ) );
-            }
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleResumeCaseCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleAddCaseFileCmdL
-// Adds a test case file to an earlier loaded test module.
-// Checks that the module is loaded and that the given test case file exists.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleAddCaseFileCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleAddCaseFileCmdL" );
-
-    TInt err = KErrNone;
-
-    TBuf<KMaxFileName> moduleName;
-    TBuf<KMaxFileName> caseFilePath;
-
-    // ADD_CASE_FILE command always has 2 mandatory parameters (module name
-    // and test case file path).
-    if ( iParameters->Count() == 0 || iParameters->Count() == 1 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 2 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() ||
-             (*iParameters)[1].Length() > caseFilePath.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        moduleName.Copy( (*iParameters)[0] );
-        caseFilePath.Copy( (*iParameters)[1] );
-
-        RFs fsSession;
-        err = fsSession.Connect();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorFileServer );
-            return;
-            }
-
-        if ( !( BaflUtils::FileExists( fsSession, caseFilePath ) ) )
-            {
-            SendErrorResponseMsg( KErrNotFound, KErrorCaseFileNotFound );
-            fsSession.Close();
-            return;
-            }
-
-        fsSession.Close();
-
-        err = AddTestCaseFile( moduleName, caseFilePath );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorAddCaseFile );
-            return;
-            }
-
-        // Test case file has been added - update test case infos
-        TRAP( err, LoadTestCaseInfosL( moduleName ) );
-
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                "AddCaseFile - Error from LoadTestCaseInfosL %d", err );
-            SendErrorResponseMsg( err, KErrorGetTestCases );
-            return;
-            }
-
-        SendResponseMsg( _L8( "OK" ) );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleAddCaseFileCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleRemoveCaseFileCmdL
-// Removes a test case file from test module.
-// Checks that the module is loaded and that the given test case file exists.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleRemoveCaseFileCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleRemoveCaseFileCmdL" );
-
-    TInt err = KErrNone;
-
-    TBuf<KMaxFileName> moduleName;
-    TBuf<KMaxFileName> caseFilePath;
-
-    // REMOVE_CASE_FILE command always has 2 mandatory parameters (module name
-    // and test case file path).
-    if ( iParameters->Count() == 0 || iParameters->Count() == 1 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 2 )
-        {
-        if ( (*iParameters)[0].Length() > moduleName.MaxLength() ||
-             (*iParameters)[1].Length() > caseFilePath.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-
-        moduleName.Copy( (*iParameters)[0] );
-        caseFilePath.Copy( (*iParameters)[1] );
-
-        RFs fsSession;
-        err = fsSession.Connect();
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorFileServer );
-            return;
-            }
-
-        if ( !( BaflUtils::FileExists( fsSession, caseFilePath ) ) )
-            {
-            SendErrorResponseMsg( KErrNotFound, KErrorCaseFileNotFound );
-            fsSession.Close();
-            return;
-            }
-
-        fsSession.Close();
-
-        err = RemoveTestCaseFile( moduleName, caseFilePath );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorRemoveCaseFile );
-            return;
-            }
-
-        // Test case file has been removed - update test case infos
-        TRAP( err, LoadTestCaseInfosL( moduleName ) );
-
-        if ( err )
-            {
-            HTI_LOG_FORMAT(
-                "RemoveCaseFile - Error from LoadTestCaseInfosL %d", err );
-            SendErrorResponseMsg( err, KErrorGetTestCases );
-            return;
-            }
-
-        SendResponseMsg( _L8( "OK" ) );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleRemoveCaseFileCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleCaseMsgCmdL
-// Sends a message to STIF Test Framework.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleCaseMsgCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleCaseMsgCmdL" );
-
-    TInt err = KErrNone;
-
-    // CASE_MESSAGE command always has 1 parameter (the message).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        HBufC* msg = HBufC::New( (*iParameters)[0].Length() );
-        if ( msg == NULL )
-            {
-            SendErrorResponseMsg( KErrNoMemory, KErrorNoMemory );
-            return;
-            }
-        msg->Des().Copy( (*iParameters)[0] );
-        HTI_LOG_TEXT( "Sending case message:" );
-        HTI_LOG_DES( *msg );
-        err = AtsReceive( *msg );
-        delete msg;
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorCaseMessage );
-            }
-
-        else
-            {
-            SendResponseMsg( _L8( "OK" ) );
-            }
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleCaseMsgCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleSetDevIdCmdL
-// Sets device ID. If successfull sends the set ID back as response message.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleSetDevIdCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleSetDevIdCmdL" );
-
-    TInt err = KErrNone;
-
-    // SET_DEVICEID command always has 1 parameter (device id).
-    if ( iParameters->Count() == 0 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        return;
-        }
-
-    else if ( iParameters->Count() == 1 )
-        {
-        TUint16 deviceId = KDefaultDevId;
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( deviceId, EDecimal );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidDeviceId );
-            return;
-            }
-
-        iDevId = deviceId;
-
-        // On success sends the set device id as response.
-        TBuf8<32> msg;
-        msg.AppendNum( (TInt)iDevId );
-        SendResponseMsg( msg );
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleSetDevIdCmdL" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::HandleSetAttributeCmdL
-// Sets attributes for test framework.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::HandleSetAttributeCmdL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::HandleSetAttributeCmdL" );
-
-    TInt err = KErrNone;
-
-    // SET_ATTRIBUTE command always has 2 paramters (attribute id and value)
-    if ( iParameters->Count() < 2 )
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorParameterMissing );
-        }
-
-    else if ( iParameters->Count() == 2 )
-        {
-        TInt attributeId = -1;
-        TLex8 lex( (*iParameters)[0] );
-        err = lex.Val( attributeId );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorInvalidAttributeId );
-            return;
-            }
-
-        TBuf<256> value;
-        if ( (*iParameters)[1].Length() > value.MaxLength() )
-            {
-            SendErrorResponseMsg( KErrArgument, KErrorParameterTooLong );
-            return;
-            }
-        value.Copy( (*iParameters)[1] );
-
-        err = SetAttribute( (TAttribute)attributeId, value );
-
-        if ( err )
-            {
-            SendErrorResponseMsg( err, KErrorSetAttribute );
-            }
-
-        else
-            {
-            SendResponseMsg( _L8( "OK" ) );
-            }
-        }
-
-    else
-        {
-        SendErrorResponseMsg( KErrArgument, KErrorTooManyParameters );
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::HandleSetAttributeCmdL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::TestCompleted
-// This method is called by the STIF TF when a test case execution completes.
-// The test case result is send out as a formatted string.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::TestCompleted( TInt aTestId,
-                                  TInt aTestExecutionResult,
-                                  TTestResult& aTestResult )
-    {
-    // Note that the STIF TF is not aware whether the service is busy processing,
-    // sending, or waiting to send a previous message. So if this method
-    // is called by the STIF TF while the service is busy, the currently
-    // pending message will be overridden by the message sent from this method.
-
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::TestCompleted" );
-
-    iIsBusy = ETrue;  // Will be set to EFalse when response have been sent
-
-    // The maximum length of TResultDes is 128, so a buffer of 256
-    // should be enough for the whole "Test Completed" message.
-    TBuf8<256> buf8;
-
-    // Add first the test id
-    buf8.AppendFormat( _L8( "%d" ), aTestId );
-    buf8.Append( KParameterDelimiter );
-
-    // Add the test result - if it's 0 case has passed
-    buf8.AppendFormat( _L8( "%d" ), aTestResult.iResult );
-    buf8.Append( KParameterDelimiter );
-
-    // Add the test execution result
-    buf8.AppendFormat( _L8( "%d" ), aTestExecutionResult );
-    buf8.Append( KParameterDelimiter );
-
-    // Finally add the description (if there's any)
-    if ( aTestResult.iResultDes.Length() > 0 )
-        {
-        buf8.Append( aTestResult.iResultDes );
-        }
-
-    // and send it
-    SendResponseMsg( buf8, ECmdTestCompleted );
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::TestCompleted" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::AtsSend
-// This method is called by the STIF TF when it needs to send a message to ATS
-// (or some other PC-side component listening for messages)
-// The message is converted to 8-bit representation before sending.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::AtsSend( const TDesC& aMessage )
-    {
-    // Note that the STIF TF is not aware whether the service is busy processing,
-    // sending, or waiting to send a previous message. So if this method
-    // is called by the STIF TF while the service is busy, the currently
-    // pending message will be overridden by the message sent from this method.
-
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::AtsSend" );
-    HTI_LOG_TEXT( "Message: " );
-    HTI_LOG_DES( aMessage );
-
-    iIsBusy = ETrue;  // Will be set to EFalse when response have been sent
-
-    TInt err = KErrNone;
-
-    CCnvCharacterSetConverter* converter = NULL;
-    TRAP( err, converter = CCnvCharacterSetConverter::NewL() );
-
-    if ( err )
-        {
-        SendErrorResponseMsg( err, KErrorCharConv );
-        return;
-        }
-
-    RFs fsSession;
-    err = fsSession.Connect();
-    if ( err )
-        {
-        SendErrorResponseMsg( err, KErrorFileServer );
-        delete converter;
-        return;
-        }
-
-    CCnvCharacterSetConverter::TAvailability availability =
-        CCnvCharacterSetConverter::ENotAvailable;
-
-    TRAP( err, availability = converter->PrepareToConvertToOrFromL(
-        KCharacterSetIdentifierAscii, fsSession ) );
-
-    if ( err || availability == CCnvCharacterSetConverter::ENotAvailable )
-        {
-        SendErrorResponseMsg( err, KErrorCharConv );
-        fsSession.Close();
-        delete converter;
-        return;
-        }
-
-    fsSession.Close();
-
-    HBufC8* asciiBuffer = NULL;
-    TRAP( err, asciiBuffer = HBufC8::NewL( aMessage.Length() ) );
-
-    if ( err )
-        {
-        SendErrorResponseMsg( err, KErrorNoMemory );
-        delete converter;
-        return;
-        }
-
-    TPtr8 ptr8 = asciiBuffer->Des();
-    ptr8.Zero();
-
-    err = converter->ConvertFromUnicode( ptr8, aMessage );
-
-    if ( err )
-        {
-        SendErrorResponseMsg( err, KErrorCharConv );
-        }
-
-    else
-        {
-        TPtr8 converted = asciiBuffer->Des();
-        HTI_LOG_TEXT( "Converted message: " );
-        HTI_LOG_DES( converted );
-        SendResponseMsg( converted, ECmdAtsMessage );
-        }
-
-    delete converter;
-    delete asciiBuffer;
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::AtsSend" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::Print
-// This method is called by the STIF TF when a test case prints.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::Print( TInt /*aTestId*/,
-                          TTestProgress& aProgress )
-    {
-    if ( iConsole )
-        {
-        iConsole->Printf( _L("%S: %S\n"),
-                         &aProgress.iDescription,
-                         &aProgress.iText );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::LoadTestCaseInfosL
-// A helper method that loads the test case info objects from all currently
-// loaded test modules. Creates and inserts new CHtiTestModuleCaseInfos objects
-// to iLoadedInfos pointer array. Leaves on failure.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::LoadTestCaseInfosL()
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::LoadTestCaseInfosL()" );
-
-    RPointerArray<CTestInfo> allTestInfos;
-    CleanupClosePushL( allTestInfos );
-
-    HTI_LOG_TEXT( "Getting test cases" );
-    // Ignoring possible errors
-    GetTestCases( allTestInfos );
-    HTI_LOG_FORMAT( "Got %d cases", allTestInfos.Count() );
-
-    // Clear all old test case infos from iLoadedInfos
-    iLoadedInfos.ResetAndDestroy();
-
-    // Loop through all test case infos and add them to the correct modules
-    // to iLoadedInfos
-    for ( TInt i = 0; i < allTestInfos.Count(); i++ )
-        {
-        CHtiTestModuleCaseInfos* currentModule = NULL;
-        CTestInfo* caseInfo = NULL;
-
-        caseInfo = allTestInfos[i];
-
-        // Get or create the CHtiTestModuleCaseInfos where this case belongs.
-        TInt moduleIndex = IndexByModuleName( caseInfo->ModuleName() );
-
-        if ( moduleIndex == KErrNotFound )
-            {
-            HTI_LOG_TEXT( "Module not found - adding it" );
-            currentModule = CHtiTestModuleCaseInfos::NewLC(
-                caseInfo->ModuleName() );
-            User::LeaveIfError( iLoadedInfos.Append( currentModule ) );
-            CleanupStack::Pop(); // currentModule
-            }
-
-        else
-            {
-            HTI_LOG_TEXT( "Module found - getting it" );
-            currentModule = iLoadedInfos[moduleIndex];
-            }
-
-        // Add the case info to the CHtiTestModuleCaseInfos object
-        currentModule->iTestInfos.Append( caseInfo );
-        }
-
-    HTI_LOG_FORMAT( "Case infos of %d modules added", iLoadedInfos.Count() );
-    allTestInfos.Reset();
-    CleanupStack::PopAndDestroy(); // allTestInfos
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::LoadTestCaseInfosL()" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::LoadTestCaseInfosL
-// A helper method that loads the test case info objects from the given test
-// module. Creates and inserts a new CHtiTestModuleCaseInfos object to
-// iLoadedInfos pointer array. Leaves on failure.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::LoadTestCaseInfosL( TDesC& aModuleName )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::LoadTestCaseInfosL( moduleName )" );
-
-    // Check if test case infos of this module already loaded
-    TInt index = IndexByModuleName( aModuleName );
-    if ( index != KErrNotFound )
-        {
-        // If infos already loaded, delete and load again
-        HTI_LOG_TEXT( "Already loaded - updating" );
-        CHtiTestModuleCaseInfos* module = iLoadedInfos[index];
-        iLoadedInfos.Remove( index );
-        delete module;
-        }
-
-    CHtiTestModuleCaseInfos* newModule =
-            CHtiTestModuleCaseInfos::NewLC( aModuleName );
-
-    HTI_LOG_TEXT( "Getting test cases" );
-
-    // If the module is not loaded STIF TF seems to behave so that
-    // GetTestCases method does not return error but it returns
-    // zero test cases.
-    // At least in some cases if the module is loaded but it does not have
-    // any test cases, GetTestCases returns KErrNotFound.
-    // So possible errors or zero test case situations from GetTestCases
-    // are ignored here - if there's an error then the module will just
-    // have 0 test case infos.
-    GetTestCases( newModule->iTestInfos, aModuleName );
-
-    HTI_LOG_FORMAT( "Got %d cases", newModule->iTestInfos.Count() );
-
-    User::LeaveIfError( iLoadedInfos.Append( newModule ) );
-    CleanupStack::Pop(); // newModule
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::LoadTestCaseInfosL( moduleName )" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::ParseParametersL
-// A helper method for parsing the parameters from the given command message.
-// Parameters must be separated with a character defined by the
-// KParameterDelimiter. Parsed parameters are stored to iParameters array.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::ParseParametersL( const TDesC8& aCommand )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::ParseParametersL" );
-
-    // Clear the parameter array
-    iParameters->Reset();
-
-    // Then loop all the parameters.
-    TInt sectionStart = 0;
-    TInt sectionEnd = 0;
-    while ( true )
-        {
-        sectionStart = sectionEnd + 1;
-        if ( sectionStart >= aCommand.Length() )
-            {
-            HTI_LOG_FORMAT( "Parameters %d", iParameters->Count() );
-            HTI_LOG_FUNC_OUT( "CHtiStifTfIf::ParseParametersL" );
-            return;
-            }
-
-        sectionEnd = aCommand.Mid( sectionStart ).Find( KParameterDelimiter )
-            + sectionStart;
-
-        if ( sectionEnd >= sectionStart )
-            {
-            iParameters->AppendL(
-                aCommand.Mid( sectionStart, sectionEnd - sectionStart ) );
-            HTI_LOG_DES( aCommand.Mid( sectionStart, sectionEnd - sectionStart ) );
-            }
-        else
-            {
-            iParameters->AppendL( aCommand.Mid( sectionStart ) );
-            HTI_LOG_DES( aCommand.Mid( sectionStart ) );
-            HTI_LOG_FORMAT( "Parameters %d", iParameters->Count() );
-            HTI_LOG_FUNC_OUT( "CHtiStifTfIf::ParseParametersL" );
-            return;  // End of parameters.
-            }
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::SetDispatcher
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::SetDispatcher( MHtiDispatcher* aDispatcher )
-    {
-    iDispatcher = aDispatcher;
-    iConsole = iDispatcher->GetConsole();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::NotifyMemoryChange
-// Called when HTI Framework has dispatched a message forward and the amount
-// of free memory in the message queue has changed.
-// -----------------------------------------------------------------------------
-//
-void CHtiStifTfIf::NotifyMemoryChange( TInt aAvailableMemory )
-    {
-    if ( iIsBusy && iMessage )
-        {
-        if ( aAvailableMemory >= iMessage->Size() )
-            {
-
-            if ( iErrorCode == 0 )
-                {
-                TInt err = iDispatcher->DispatchOutgoingMessage(
-                    iMessage, KStifTfServiceUid );
-
-                if ( err == KErrNone )
-                    {
-                    // Ownership of iMessage has been transferred
-                    iMessage = NULL;
-                    iIsBusy = EFalse;
-                    iDispatcher->RemoveMemoryObserver(
-                            ( MHtiMemoryObserver* ) iPlugin );
-                    }
-
-                else if ( err == KErrNoMemory )
-                    {
-                    // Just keep retrying.
-                    }
-
-                else // Give up on sending
-                    {
-                    delete iMessage;
-                    iMessage = NULL;
-                    iIsBusy = EFalse;
-                    iDispatcher->RemoveMemoryObserver(
-                            ( MHtiMemoryObserver* ) iPlugin );
-                    }
-
-                }
-
-            else
-                {
-                TInt err = iDispatcher->DispatchOutgoingErrorMessage(
-                    iErrorCode, *iMessage, KStifTfServiceUid );
-
-                // If it was success or some other error than KErrNoMemory
-                // we are done sending or trying to send this message.
-                if ( err != KErrNoMemory )
-                    {
-                    delete iMessage;
-                    iMessage = NULL;
-                    iIsBusy = EFalse;
-                    iDispatcher->RemoveMemoryObserver(
-                            ( MHtiMemoryObserver* ) iPlugin );
-                    }
-
-                else
-                    {
-                    // Just keep retrying.
-                    }
-                }
-            }
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::SendResponseMsg
-// Sends a message out to the message dispatcher.
-// -----------------------------------------------------------------------------
-//
-TInt CHtiStifTfIf::SendResponseMsg( const TDesC8& aMsg,
-                        const TUint8 aCommandId )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::SendResponseMsg" );
-
-    iErrorCode = 0;
-
-    if ( iDispatcher == NULL )
-        {
-        iIsBusy = EFalse;
-        return KErrGeneral;
-        }
-
-    iDispatcher->RemoveMemoryObserver( ( MHtiMemoryObserver* ) iPlugin );
-
-    delete iMessage;
-    iMessage = NULL;
-    iMessage = HBufC8::New( aMsg.Length() + 1 );
-
-
-    if ( iMessage == NULL )
-        {
-        iIsBusy = EFalse;
-        return KErrNoMemory;
-        }
-
-    TPtr8 ptr8 = iMessage->Des();
-    if ( aCommandId != 0 )
-        {
-        ptr8.Append( aCommandId );
-        }
-    else
-        {
-        ptr8.Append( iCommandId );
-        }
-
-    ptr8.Append( aMsg );
-
-    TInt err = KErrNone;
-
-    err = iDispatcher->DispatchOutgoingMessage( iMessage, KStifTfServiceUid );
-
-    if ( err == KErrNoMemory )
-        {
-        HTI_LOG_TEXT( "Message queue memory full - waiting" );
-        iIsBusy = ETrue; // Should already be true, but just in case
-        iDispatcher->AddMemoryObserver( ( MHtiMemoryObserver* ) iPlugin );
-        // For the caller of this method all is OK, sending is just delayed
-        err = KErrNone;
-        }
-
-    else if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "Message sent to dispatcher" );
-        iMessage = NULL; // Ownership of iMessage has been transferred
-        iIsBusy = EFalse;
-        }
-
-    else // give up on sending
-        {
-        HTI_LOG_FORMAT( "Other dispatcher error %d", err );
-        delete iMessage;
-        iMessage = NULL;
-        iIsBusy = EFalse;
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::SendResponseMsg" );
-    return err;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::SendErrorResponseMsg
-// Sends an error message out to the message dispatcher.
-// -----------------------------------------------------------------------------
-//
-TInt CHtiStifTfIf::SendErrorResponseMsg( TInt aErrorCode,
-                        const TDesC8& aErrorDescription,
-                        const TUint8 aCommandId )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::SendErrorResponseMsg" );
-
-    iErrorCode = aErrorCode;
-
-    if ( iDispatcher == NULL )
-        {
-        iIsBusy = EFalse;
-        return KErrGeneral;
-        }
-
-    iDispatcher->RemoveMemoryObserver( ( MHtiMemoryObserver* ) iPlugin );
-
-    delete iMessage;
-    iMessage = NULL;
-    iMessage = HBufC8::New( aErrorDescription.Length() + 1 );
-
-    if ( iMessage == NULL )
-        {
-        iIsBusy = EFalse;
-        return KErrNoMemory;
-        }
-
-    TPtr8 ptr8 = iMessage->Des();
-    if ( aCommandId != 0 )
-        {
-        ptr8.Append( aCommandId );
-        }
-    else
-        {
-        ptr8.Append( iCommandId );
-        }
-
-    ptr8.Append( aErrorDescription );
-
-    TInt err = KErrNone;
-
-    err = iDispatcher->DispatchOutgoingErrorMessage(
-        aErrorCode, *iMessage, KStifTfServiceUid );
-
-    if ( err == KErrNoMemory )
-        {
-        HTI_LOG_TEXT( "Message queue memory full - waiting" );
-        iIsBusy = ETrue; // Should already be true, but just in case
-        iDispatcher->AddMemoryObserver( ( MHtiMemoryObserver* ) iPlugin );
-        // For the caller of this method all is OK, sending is just delayed
-        err = KErrNone;
-        }
-
-    else if ( err == KErrNone )
-        {
-        HTI_LOG_TEXT( "Error message sent to dispatcher" );
-        delete iMessage;
-        iMessage = NULL;
-        iIsBusy = EFalse;
-        }
-
-    else // give up on sending
-        {
-        HTI_LOG_FORMAT( "Other dispatcher error %d", err );
-        delete iMessage;
-        iMessage = NULL;
-        iIsBusy = EFalse;
-        }
-
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::SendErrorResponseMsg" );
-    return err;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::IndexByModuleName
-// A helper method to search for a CHtiTestModuleCaseInfos object from the
-// iLoadedInfos array based on the module name.
-// -----------------------------------------------------------------------------
-//
-TInt CHtiStifTfIf::IndexByModuleName( const TDesC& aModuleName )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::IndexByModuleName" );
-
-    CHtiTestModuleCaseInfos* module;
-    for ( TInt i = 0; i < iLoadedInfos.Count(); i++ )
-        {
-        module = NULL;
-        module = iLoadedInfos[i];
-        if ( module->iModuleName->Compare( aModuleName ) == 0 )
-            {
-            HTI_LOG_FORMAT( "Module found from index %d", i );
-            HTI_LOG_FUNC_OUT( "CHtiStifTfIf::IndexByModuleName" );
-            return i;
-            }
-        }
-    HTI_LOG_TEXT( "Module not found" );
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::IndexByModuleName" );
-    return KErrNotFound;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiStifTfIf::GetCaseInfoL
-// A helper method to get the correct CTestInfo object based on the index
-// number, referring to list of case infos of all loaded test modules.
-// -----------------------------------------------------------------------------
-//
-CTestInfo* CHtiStifTfIf::GetCaseInfoL( TInt aCaseIndex )
-    {
-    HTI_LOG_FUNC_IN( "CHtiStifTfIf::GetCaseInfoL" );
-
-    if ( aCaseIndex < 0 )
-        {
-        User::Leave( KErrArgument );
-        }
-
-    TInt index = -1;
-    TInt caseCount = 0;
-    CHtiTestModuleCaseInfos* module = NULL;
-    for ( TInt i = 0; i < iLoadedInfos.Count(); i++ )
-        {
-        module = NULL;
-        module = iLoadedInfos[i];
-        caseCount += module->iTestInfos.Count();
-        HTI_LOG_FORMAT( "Case count = %d", caseCount );
-        if ( aCaseIndex < caseCount )
-            {
-            // This is the right module
-            // Get the case index inside this module
-            index = module->iTestInfos.Count() - ( caseCount - aCaseIndex );
-            }
-        if ( index >= 0 ) break; // Case found - break out of loop
-        }
-
-    if ( index < 0 )
-        {
-        HTI_LOG_TEXT( "Given index was too big - case not found" );
-        User::Leave( KErrNotFound );
-        }
-
-    // Following should never be true - this is for testing.
-    if ( index > module->iTestInfos.Count() )
-        {
-        HTI_LOG_TEXT( "**Calculated index > test info count of module**" );
-        User::Leave( KErrGeneral );
-        }
-
-    HTI_LOG_FORMAT( "Case found from index %d", index );
-    HTI_LOG_FUNC_OUT( "CHtiStifTfIf::GetCaseInfoL" );
-    return module->iTestInfos[index];
-    }
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::NewL
-// -----------------------------------------------------------------------------
-//
-CHtiTestModuleCaseInfos* CHtiTestModuleCaseInfos::NewL(
-                                                const TDesC& aModuleName )
-    {
-    CHtiTestModuleCaseInfos* self = NewLC( aModuleName );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::NewLC
-// -----------------------------------------------------------------------------
-//
-CHtiTestModuleCaseInfos* CHtiTestModuleCaseInfos::NewLC(
-                                                const TDesC& aModuleName )
-    {
-    CHtiTestModuleCaseInfos* self = new (ELeave) CHtiTestModuleCaseInfos;
-    CleanupStack::PushL( self );
-    self->ConstructL( aModuleName );
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::ConstructL
-// 2nd phase constructor.
-// -----------------------------------------------------------------------------
-//
-void CHtiTestModuleCaseInfos::ConstructL( const TDesC& aModuleName )
-    {
-    iModuleName = aModuleName.AllocL();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::CHtiTestModuleCaseInfos
-// C++ default constructor
-// -----------------------------------------------------------------------------
-//
-CHtiTestModuleCaseInfos::CHtiTestModuleCaseInfos()
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::~CHtiTestModuleCaseInfos
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CHtiTestModuleCaseInfos::~CHtiTestModuleCaseInfos()
-    {
-    delete iModuleName;
-    iTestInfos.ResetAndDestroy();
-    iTestInfos.Close();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::Compare
-// Compares the order of two CHtiTestModuleCaseInfos objects using module name
-// as the ordering key.
-// -----------------------------------------------------------------------------
-//
-TInt CHtiTestModuleCaseInfos::Compare( const CHtiTestModuleCaseInfos& aFirst,
-        const CHtiTestModuleCaseInfos& aSecond )
-    {
-    return ( aFirst.iModuleName )->Compare( *aSecond.iModuleName );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CHtiTestModuleCaseInfos::Match
-// Checks the equality of two CHtiTestModuleCaseInfos objects.
-// Objects are considered to be equal if their module name is equal.
-// -----------------------------------------------------------------------------
-//
-TBool CHtiTestModuleCaseInfos::Match( const CHtiTestModuleCaseInfos& aFirst,
-        const CHtiTestModuleCaseInfos& aSecond )
-    {
-    if ( ( aFirst.iModuleName )->Compare( *aSecond.iModuleName ) == 0 )
-        {
-        return true;
-        }
-
-    return false;
-    }
-
-
-//  End of File