adaptationlayer/tsy/simatktsy_dll/internal/test/simatktsy_testtool/simatk/src/simatkblocks.cpp
changeset 0 63b37f68c1ce
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/simatktsy_dll/internal/test/simatktsy_testtool/simatk/src/simatkblocks.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,991 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Specific class for SIM ATK TSY tests
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <stifparser.h>
+#include "simatk.h"
+#include "saticon.h"
+#include "saterrors.h"
+
+#include "commandgetinkey.h"
+#include "commanddisplaytext.h"
+#include "commandgetinput.h"
+#include "commandsendss.h"
+#include "commandsendsm.h"
+#include "commandsetupcall.h"
+#include "commandplaytone.h"
+#include "commandsetupmenu.h"
+#include "commandselectitem.h"
+#include "satcallcontrol.h"
+#include "satmosmscontrol.h"
+#include "commandrefresh.h"
+#include "commandsendussd.h"
+#include "commandlocalinfo.h"
+#include "commandsetupeventlist.h"
+#include "commandsetupidlemodetext.h"
+#include "commandopenchannel.h"
+#include "commandsenddata.h"
+#include "commandlaunchbrowser.h"
+#include "commandsenddtmf.h"
+#include "commandlanguagenotification.h"
+#include "commandclosechannel.h"
+#include "commandreceivedata.h"
+#include "commandgetchannelstatus.h"
+
+
+// CONSTANTS
+_LIT( KCommandType, "CommandType" );
+
+// Commands can omit SessionEnd procedure from script by setting this flag to 0
+_LIT( KSessionEnd, "SessionEnd" );
+
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CSimAtk::Delete() 
+    {
+    iCoreLog->Log( _L( "CSimAtk::Delete" ) );    
+    // No implementation required
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::RunMethodL
+// Run specified method. Contains also table of test methods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::RunMethodL
+        ( 
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::RunMethodL" ) ); 
+    
+    // Store parser
+    if ( !iParser )   
+        {
+        iParser = &aItem;
+        }
+   
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+    
+        // Generic    
+        ENTRY( "Open", CSimAtk::Open ),
+        ENTRY( "Close", CSimAtk::Close ),
+        ENTRY( "WaitForRequest", CSimAtk::WaitForRequest ),
+        ENTRY( "Delay", CSimAtk::Delay ),
+        // ISC Control
+        ENTRY( "LoadIscTests", CSimAtk::LoadIscTests ),
+        ENTRY( "RunIscTestCase", CSimAtk::RunIscTestCase ),
+        ENTRY( "SyncIscTestCase", CSimAtk::SyncIscTestCase ),
+        ENTRY( "CancelTestCase", CSimAtk::CancelTestCase ),
+
+        ENTRY( "CheckData", CSimAtk::CheckData ),
+        ENTRY( "CheckProactiveCommand", CSimAtk::CheckData ),
+        ENTRY( "CheckIcon", CSimAtk::CheckIcon ),
+        
+        ENTRY( "SendResponse", CSimAtk::SendResponse ),
+        ENTRY( "SendEnvelope", CSimAtk::SendResponse ),
+        ENTRY( "SendTerminalResponse", CSimAtk::SendResponse )
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::Open
+// Open method function.
+// -----------------------------------------------------------------------------
+// 
+TInt CSimAtk::Open
+        (
+        CStifItemParser& aItem
+        )
+	{
+    iCoreLog->Log( _L( "CSimAtk::Open" ) );    
+	   
+    TInt ret( KErrNotFound );
+	TPtrC string;
+    aItem.GetString ( _L( "Open" ), string );    
+    
+    if ( _L( "SAT" ) == string )
+        {
+        ret = iSat.Open( iRphone );
+        iCoreLog->Log( _L( "CSimAtk::Open: SAT, return %d" ), ret );
+        }
+    else if ( _L( "IscControl" ) == string )
+        {
+        ret = iRIscTestControl.Connect();
+        iCoreLog->Log( _L( "CSimAtk::Open: IscControl, return %d" ), ret );
+        }
+    else if ( _L( "SmsMessaging" ) == string )
+        {
+        ret = iSmsMessaging.Open( iRphone );
+        iCoreLog->Log( _L( "CSimAtk::Open: SmsMessaging, return %d" ), ret );
+        }
+    else
+        {           
+        // If any Open item not found in SimAtk,then checks Core.
+    	CSimAtkCore::SetString( string );
+    	ret = CSimAtkCore::Open( aItem );
+        }
+        
+	return ret;	
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::Close
+// Close method function.
+// -----------------------------------------------------------------------------
+// 
+TInt CSimAtk::Close
+        (
+        CStifItemParser& aItem
+        )
+	{    
+    iCoreLog->Log( _L( "CSimAtk::Close" ) );    
+    TInt ret( KErrNotFound );
+	TPtrC string;
+    aItem.GetString ( _L( "Close" ), string );
+    
+    if ( _L( "SAT" ) == string)
+        {
+        iSat.Close(); 
+        ret = KErrNone;
+        }
+    else if ( _L( "IscControl" ) == string)
+        {
+        iRIscTestControl.Close();
+        ret = KErrNone;
+        }
+    else if ( _L( "SmsMessaging" ) == string)
+        {
+        iSmsMessaging.Close();
+        ret = KErrNone;
+        }
+    else
+        {          
+        // If any Close item not found in SimAtk, then checks Core.
+    	CSimAtkCore::SetString( string );
+    	ret = CSimAtkCore::Close( aItem );
+        }
+        
+	return ret;	
+    }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::NotifySimAtkL
+// Activates the notify
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::NotifySimAtkL
+        (
+        TRequestStatus& aReqStatus,
+        const TSatIpc& aNotifyIpc
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::NotifySimAtk" ) );    
+    
+    TInt ret( KErrNone );
+    
+    CSatBase* command = NULL;
+    
+    TPtrC notifyName( MapIpcToString( aNotifyIpc ) );    
+    
+    TInt index ( 0 );
+    
+    // Create test class only if it does not already exist
+    if ( KErrNotFound == FindIndex ( aNotifyIpc, index ) )
+        {
+        switch ( aNotifyIpc )
+            {
+            case ESatNotifyDisplayTextPCmd:
+        	    {
+        	    command = new (ELeave) CCommandDisplayText( aNotifyIpc, iSat,
+        	        *iParser, *iCoreLog );
+        		break;     
+                }
+            case ESatNotifyGetInkeyPCmd:
+                {
+        	    command = new (ELeave) CCommandGetInkey( aNotifyIpc, iSat,
+        	        *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyGetInputPCmd:
+                {
+        	    command = new (ELeave) CCommandGetInput( aNotifyIpc, iSat,
+        	        *iParser, *iCoreLog );           
+                break;
+                }
+            case ESatNotifyPlayTonePCmd:
+                {
+                command = new (ELeave) CCommandPlayTone( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyRefreshPCmd:
+                {
+                command = new (ELeave) CCommandRefresh( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyRefreshRequiredParam:
+                {
+                command = new (ELeave) CCommandRefresh( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySendSsPCmd:
+                {
+                command = new (ELeave) CCommandSendSs( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                
+                // Set Cc pointer    
+                CCommandSendUssd* ss 
+                    = static_cast<CCommandSendUssd*> ( command );
+                ss->SetCallControl( &iCallControl );
+                break;
+                }
+            case ESatNotifySendSmPCmd:
+                {
+                command = new (ELeave) CCommandSendSm( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySetUpCallPCmd:
+                {
+                command = new (ELeave) CCommandSetUpCall( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                
+                // Set Cc pointer    
+                CCommandSendUssd* call 
+                    = static_cast<CCommandSendUssd*> ( command );
+                call->SetCallControl( &iCallControl );
+                break;
+                }
+            case ESatNotifySetUpMenuPCmd:
+                {
+                command = new (ELeave) CCommandSetUpMenu( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySelectItemPCmd:
+                {
+                command = new (ELeave) CCommandSelectItem( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySendUssdPCmd:
+                {
+                command = new (ELeave) CCommandSendUssd( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                
+                // Set Cc pointer    
+                CCommandSendUssd* ussd 
+                    = static_cast<CCommandSendUssd*> ( command );
+                ussd->SetCallControl( &iCallControl );
+
+                break;
+                }
+            case ESatNotifyLocalInfoPCmd:
+                {
+                command = new (ELeave) CCommandLocalInfo( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySetUpEventListPCmd:
+                {
+                command = new (ELeave) CCommandSetUpEventList( aNotifyIpc,
+                    iSat, *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySetUpIdleModeTextPCmd:
+                {
+                command = new (ELeave) CCommandSetUpIdleModeText( aNotifyIpc, 
+                    iSat, *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyOpenChannelPCmd:
+                {
+                command = new (ELeave) CCommandOpenChannel( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySendDataPCmd:
+                {
+                command = new (ELeave) CCommandSendData( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyLaunchBrowserPCmd:
+                {
+                command = new (ELeave) CCommandLaunchBrowser( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifySendDtmfPCmd:
+                {
+                command = new (ELeave) CCommandSendDtmf( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyLanguageNotificationPCmd:
+                {
+                command = new (ELeave) CCommandLanguageNotification(
+                    aNotifyIpc, iSat, *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyCloseChannelPCmd:
+                {
+                command = new (ELeave) CCommandCloseChannel( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyReceiveDataPCmd:
+                {
+                command = new (ELeave) CCommandReceiveData( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyGetChannelStatusPCmd:
+                {
+                command = new (ELeave) CCommandGetChannelStatus( aNotifyIpc,
+                iSat, *iParser, *iCoreLog );
+                break;
+                }
+            case ESatNotifyCallControlRequest:
+                {
+                command = new (ELeave) CSatCallControl( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+
+                // Store pointer for SendSs/Ussd & Setup Call commands
+                iCallControl = command;
+                break;
+                }
+            case ESatNotifyMoSmControlRequest:
+                {
+                command = new (ELeave) CSatMoSmsControl( aNotifyIpc, iSat,
+                    *iParser, *iCoreLog );
+                break;
+                }                
+            case ESatNotifyProactiveSimSessionEnd:
+                {
+                // None. SimSessionEnd is notified automatically.
+                break;
+                }                
+            default:
+        		{
+        		iCoreLog->Log( _L( "CSimAtk::NotifySimAtk  %S not supported! \
+        		    Aborting..." ), &notifyName );
+        		ret = KErrNotSupported;
+        		CancelTestCase( ret );
+        		break;
+        		}
+            }
+            
+        if ( KErrNone == ret )
+            {
+            // Put command to array
+    	    iArray->AppendL( command );
+            }
+	    
+        }
+    else
+        {
+        // Reusing existing test class
+        command = iArray->At( index );
+        }
+            
+    
+    // If command was created, notify SAT
+    if ( NULL != command )
+        {
+        // Notify the SAT about command and SimSessionEnd
+		iCoreLog->Log( _L( "CSimAtk::NotifySimAtk \
+		    %S async method activated" ), &notifyName );
+
+        command->NotifySat( aReqStatus );
+        }
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::NotifySimAtkCancel
+// Cancels notifys
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::NotifySimAtkCancel
+        (
+        const TSatIpc& aNotify
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel" ) );
+    
+    TInt ret( KErrNone );
+    TInt index ( 0 );
+    
+    ret = FindIndex( aNotify, index );
+    
+    if ( KErrNone == ret )
+        {
+        iArray->At( index )->CancelRequest();
+        
+        iArray->Delete( index );
+        
+        if ( ESatNotifyCallControlRequest == aNotify )
+            {
+            iCallControl = NULL;
+            }
+    	
+    	iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel \
+    	    Async method cancelled" ) ); 
+        }
+    else
+        {
+    	iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel \
+    	    Cancellation requested but command not found! Aborting..." ) );
+
+        CancelTestCase( ret );
+        }
+    
+    return ret;
+    }
+   
+// -----------------------------------------------------------------------------
+// CSimAtk::LoadIscTests
+// Connects to ISC test control and loads XML file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::LoadIscTests
+        (
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::LoadIscTests" ) );    
+
+    TPtrC string;
+    aItem.GetString ( _L( "LoadIscTests" ), string );    
+    TInt ret( iRIscTestControl.LoadTestCases( string ) );   
+ 
+    if ( KErrNone == ret )
+        {
+        iCoreLog->Log( _L( "CSimAtk::LoadIscTests:\
+            %S loaded successfully." ), &string );
+        }
+    else
+        {
+        iCoreLog->Log( _L( "CSimAtk::LoadIscTests \
+            Loading failed: %S " ), &string );
+            
+        TPtrC errorString = MapErrorCodeToString( ret );
+        
+        iCoreLog->Log( _L( "CSimAtk::LoadIscTests \
+            %S" ), &errorString );
+        }
+    
+    return ret;
+    } 
+
+// -----------------------------------------------------------------------------
+// CSimAtk::RunIscTestCase
+// Starts the test procedure
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::RunIscTestCase
+        (
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::RunIscTestCase" ) );
+    
+    TInt ret( KErrNone );
+    
+    // XML file ID
+    TInt xmlId(0);    
+    if ( KErrNone == ( ret = aItem.GetInt( _L( "RunIscTestCase" ), xmlId ) ) )
+        {
+        // Test case ID
+        TInt testId(0);
+        if ( KErrNone == ( ret = aItem.GetNextInt( testId ) ) )
+            {
+            iCoreLog->Log( _L( "CSimAtk::RunIscTestCase: Id: %d" ), testId );
+            TInt test =  ( xmlId << 20 ) | testId;
+            iRIscTestControl.RunTestCase( test, iIscStatus );
+            }
+        }
+    if ( KErrNone != ret )
+        {
+        iCoreLog->Log( _L( "CSimAtk::RunIscTestCase Running failed!" ) );
+        CancelTestCase( ret );
+        }
+   
+    return ret; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::WaitForStatus
+// Halts the execution until an async req is completed.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::WaitForRequest
+        (
+        CStifItemParser& /*aItem*/
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::WaitForRequest" ) );    
+
+    User::WaitForRequest( iIscStatus );
+    
+    TInt errorStatus( iIscStatus.Int() );
+    
+    if ( KErrNone == errorStatus && iNeedSessionEnd && iSessionEnd.TimedOut() )
+        {
+        errorStatus = KErrTimedOut;            
+        }
+        
+    if ( KErrNone != errorStatus )
+        {
+        CancelTestCase( errorStatus );        
+        }
+       
+    return errorStatus; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::SyncIscTestCase
+// Connects to ISC test control and loads XML file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::SyncIscTestCase
+        (
+        CStifItemParser& /*aItem*/
+        )
+    {
+    TInt ret ( KErrNone );
+    
+    iCoreLog->Log( _L( "CSimAtk::SyncIscTestCase" ) );    
+    
+    ret = iRIscTestControl.SyncTestCase();
+    
+    iCoreLog->Log( _L( "CSimAtk::SyncIscTestCase \
+        Synch complete. Status: %d" ), ret );
+        
+    if ( KErrNone != ret )
+        {
+        CancelTestCase( ret );
+        }
+    
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::CancelTestCase
+// Test client originated test cancellation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::CancelTestCase
+        (
+        const TInt aReason
+        )
+    {
+    TPtrC error( MapErrorCodeToString( aReason ) );
+    
+    iCoreLog->Log( _L( "CSimAtk::CancelTestCase: %S" ), &error );
+
+    if ( iArray )
+        {
+        // Cancel all notifys and empty the array
+        for ( TInt i = 0 ; i < iArray->Count() ; i ++ )
+            {
+            iArray->At( i )->CancelRequest();
+            }
+        iArray->Reset();
+
+        iCallControl = NULL;
+        }
+        
+    iSessionEnd.Cancel();
+
+    iRIscTestControl.CancelTestCase();
+    
+    
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::CancelTestCase
+// Script originated test cancellation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::CancelTestCase
+        (
+        CStifItemParser& /*aItem*/
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::CancelTestCase" ) );    
+
+    if ( iArray )
+        {
+        // Cancel all notifys and empty the array
+        for ( TInt i = 0 ; i < iArray->Count() ; i ++ )
+            {
+            iArray->At( i )->CancelRequest();
+            }
+        iArray->Reset();
+
+        iCallControl = NULL;
+        }
+
+    iRIscTestControl.CancelTestCase();
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Delay
+// Halt script execution for given time
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::Delay
+        (
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::Delay" ) );
+    
+    TInt delay(0);
+    aItem.GetNextInt( delay );
+    User::After( delay );
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::CheckData
+// Verifies the validity of received data
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CheckData
+        (
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::CheckData" ) );    
+
+    TInt ret( KErrNone );
+    TInt commandIndex;
+    
+    if ( KErrNone == FindIndex( aItem, commandIndex ) )
+        {
+        ret = iArray->At( commandIndex )->CheckData();
+        }
+    else
+        {
+		iCoreLog->Log( _L( "CSimAtk::CheckData Unidentified command" ) );
+		ret = KErrGeneral;
+        }
+    
+    // Proactive command data was invalid or unexpected command received
+    if (KErrNone != ret)
+        {
+        iCoreLog->Log( _L( "CSimAtk::CheckData \
+            Checking of data failed, aborting." ) );
+        CancelTestCase( ret );
+        }
+    
+    return ret;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::SendResponse
+// Creates data packet from a script and sends it to Sim
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::SendResponse
+        (
+        CStifItemParser& aItem
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::SendResponse" ) );    
+
+    TInt ret( KErrNone );
+    TInt commandIndex;
+    
+    if ( KErrNone == FindIndex( aItem, commandIndex ) )
+        {
+        // Find command from array
+        CSatCommandBase* proactiveCommand = 
+            static_cast<CSatCommandBase*>(iArray->At( commandIndex ) );
+            
+        // Check if notifying of SessionEnd is omitted from script. Needed
+        // by default
+        iNeedSessionEnd = ETrue;
+        aItem.GetInt( KSessionEnd, iNeedSessionEnd );
+        
+        // In case of sending envelopes, SessionEnd has to be notified here
+        if ( iNeedSessionEnd && KRequestPending != iSessionEnd.Status() )
+            {
+            iSessionEnd.NotifySat(); 
+            }        
+
+        ret = proactiveCommand->SendResponse();
+        
+        if ( iNeedSessionEnd && KErrNone == ret )
+            {
+            // Sending OK, wait for a while for session end
+            ret = iSessionEnd.WaitSessionEnd();
+            }
+        
+        switch ( ret )
+            {
+            case KErrNone:
+                {
+        		iCoreLog->Log( _L( "CSimAtk::SendResponse \
+        		    Response sent successfully" ), ret );
+                break;
+                }
+            case KErrTimedOut:
+                {
+                // When there's data coming from SIM, SessionEnd is not
+                // completed and time out occurs. This is not error however,
+                // final check for SessionEnd status is made in WaitForRequest
+                ret = KErrNone;
+                
+        		iCoreLog->Log( _L( "CSimAtk::SendResponse \
+        		    SessionEnd Timed out" ) );
+                break;
+                }
+            default:
+                {
+        		iCoreLog->Log( _L( "CSimAtk::SendResponse \
+        		    Command returned an error code %d!" ), ret );
+                break;
+                }
+            }
+        }
+    else
+        {
+		iCoreLog->Log( _L( "CSimAtk::SendResponse \
+		    Unidentified command" ) );
+		ret = KErrGeneral;
+        }
+
+    if ( KErrNone != ret )
+        {
+        CancelTestCase( ret );
+        }
+
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::CheckIcon
+// Verifies the validity of provided icon info
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CheckIcon
+        (
+        CStifItemParser& aItem
+        )
+    {
+    TInt ret( KErrNone );
+
+    // Try to load mandatory SimType parameter from script
+    TPtrC simType;
+    
+    if ( KErrNone == aItem.GetString( KLoadIcon, simType ) )
+        {
+        TInt instanceNumber( 0 );
+        TInt recordId( 0 );
+        
+        // Get instance number identifier
+        if ( KErrNone != aItem.GetNextInt( instanceNumber ) )
+            {
+            ret = KErrArgument;
+            }
+        // Get record id.
+        else if ( KErrNone != aItem.GetNextInt( recordId ) )
+            {
+            ret = KErrArgument;
+            }
+        else
+            {
+            CSatIcon satIcon( iSat, simType, recordId );
+            ret = satIcon.CheckIcon( iCoreLog, instanceNumber );
+            }
+        }
+    else
+        {
+        ret = KErrArgument;
+        }
+        
+    if ( KErrNone != ret )
+        {
+        CancelTestCase( ret );
+        }        
+    
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::FindIndex
+// Finds the index of command in array based on the script parameter
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::FindIndex
+        (
+        CStifItemParser& aItem, // Reference to parser
+        TInt& aIndex // Index output
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::FindIndex (by name)") );
+                
+    TInt ret ( KErrNotFound );
+    TPtrC cmdName;
+    
+    if ( iArray )
+        {
+        if ( KErrNone != aItem.GetString( KCommandType, cmdName ) )
+            {
+            // Script did not provide command type.
+            // Return index 0 (first element) as a default.
+            if ( 0 < iArray->Count() )
+                {
+                aIndex = 0;
+                ret = KErrNone;
+                }
+            }
+        else
+            {
+            // Script provided a command type. For example:
+            // "CommandType ESatNotifyDisplayTextPCmd"
+            // Loop throught the array and look for matching command type.
+            // If array contains several commands of same type, latest is.
+            // returned            
+            TBool requestPending( EFalse ); // Not used
+            TSatIpc requestedCommand = 
+                MapStringToIpc( cmdName, requestPending );
+            
+            // Find command based on type
+            ret = FindIndex( requestedCommand, aIndex );
+            }
+        } // if (iArray)
+    else
+        {
+        // iArray is NULL
+        ret = KErrCorrupt;
+        }
+        
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::FindIndex
+// Finds the index of command in array based on the ipc of the command
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+TInt CSimAtk::FindIndex
+        (
+        const TSatIpc& aRequestedIpc, // Requested type
+        TInt& aIndex // Index output
+        )
+    {
+    iCoreLog->Log( _L( "CSimAtk::FindIndex (by IPC)") );
+    TInt ret ( KErrNotFound );
+    
+    if ( iArray )
+        {
+        TInt i = iArray->Count() - 1;
+        
+        for ( ; KErrNotFound == ret && i >= 0 ; i-- )
+            {
+            if ( iArray->At( i )->MatchIpc( aRequestedIpc ) )
+                {
+                aIndex = i;
+                ret = KErrNone;
+                }
+            }
+        }
+        
+    if ( KErrNone != ret )        
+        {
+        TPtrC cmdName( MapIpcToString( aRequestedIpc ) );
+        iCoreLog->Log( _L( "CSimAtk::FindIndex \
+            %S not found!"), &cmdName );
+        }        
+        
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimAtk::MapErrorCodeToString
+// 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------       
+//
+const TPtrC CSimAtk::MapErrorCodeToString( const TInt& aErrorCode )
+    {
+    TPtrC errorString( KNullDesC );
+    
+    for ( TUint8 i( 0 ) ; errorString == KNullDesC 
+          && i < KSatErrorListSize ; i++ )
+        {
+        if ( KSatErrorList[i].iErrorCode == aErrorCode )
+            {
+            errorString.Set( KSatErrorList[i].iErrorString );
+            }
+        }
+        
+    if ( errorString == KNullDesC )
+        {
+        errorString.Set( _L( "Unidentified error code" ) );
+
+        iCoreLog->Log( _L( "CSimAtk::MapErrorCodeToString \
+            Error code %d" ), aErrorCode );
+        }
+
+    return errorString;
+    }
+    
+//  End of File