telephonyserverplugins/simatktsy/src/csattsy.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/simatktsy/src/csattsy.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simatktsy/src/csattsy.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,1217 +1,1217 @@
-// Copyright (c) 2006-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:
-// Name        : CSatTsy.cpp
-// Part of     : Common SIM ATK TSY / commonsimatktsy
-// Main entry point for Etel requests
-// Version     : 1.0  
-//
-
-
-
-//  INCLUDE FILES
-#include <etelsat.h>                // Etel SAT API
-#include <satcs.h>                  // Etel SAT API
-//#include "CMmPhoneTsy.h"			// Phone Tsy class
-#include "CSatDataPackage.h"		// For data packages
-//#include "MmTsy_numberOfSlots.h"    // Number of Slots
-#include "cmmmessagemanagerbase.h"	// Message manager base
-#include <ctsy/pluginapi/mmessagerouter.h>
-#include <ctsy/serviceapi/mctsysatservice.h>
-//#include "CMmMessageRouterBase.h"	// Message router
-
-//#include "CMmSmsTsy.h"              // MmSmsTsy
-//#include "CMmMessageManager.h"      // Message manager
-
-#include "CSatTsy.h"				// Messaging class
-#include "CSatCCTsy.h"              // SatCallControl class
-#include "CSatIconTsy.h"            // SatIcon class
-#include "CSatNotificationsTsy.h"   // SatNotifications class
-#include "CSatNotifySetUpCall.h"    // CSatNotifySetUpCall    
-#include "CSatEventDownloadTsy.h"   // SatEventDownload class
-#include "CSatDataDownloadTsy.h"    // SatDataDownload class
-
-#include "msattsy_ipcdefs.h"		// Sat Tsy specific request types
-#include "TfLogger.h"               // For TFLOGSTRING
-#include "TSatUtility.h"		    // Sat Tsy Utility class
-#include "TTlv.h"					// TTlv class
-#include "CSatTsyReqHandleStore.h"  // Request handle storage
-
-#include "stktsy_number_of_slots.h"
-
-// -----------------------------------------------------------------------------
-// CSatTsy::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CSatTsy* CSatTsy::NewL
-		(
-		MMessageRouter& aMmMessageRouter,
-		MCtsySatService& aSatService
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::NewL");
-
-	// Create subsession
-    CSatTsy* subsession = new ( ELeave ) CSatTsy( aMmMessageRouter, aSatService );
-
-    CleanupStack::PushL( subsession );
-    subsession->ConstructL();
-    CleanupStack::Pop();
-
-	TFLOGSTRING("CSAT: CSatTsy::NewL, end of method");
-    return subsession;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::~CSatTsy
-// Destructor
-// -----------------------------------------------------------------------------
-// 
-CSatTsy::~CSatTsy
-		(
-		// None
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::~CSatTsy");
-
-    // Unregister.
-    iMessageManager->RegisterTsyObject(
-		CMmMessageManagerBase::ESatTsyObjType, NULL );
-
-    // Delete also specific TSY objects
-    delete iSatCCTsy;
-    delete iSatIconTsy;
-    delete iSatNotificationsTsy;
-    delete iSatDataDownloadTsy;
-    delete iSatEventDownloadTsy;
-	// Message router and message manager are deleted here
-    delete iMessageManager;
-    // Request handle store
-    delete iSatReqHandleStore;
-    TFLOGSTRING("CSAT: CSatTsy::~CSatTsy, end of method");
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::CSatTsy
-// C++ constructor
-// -----------------------------------------------------------------------------
-//
-CSatTsy::CSatTsy
-		( 
-        MMessageRouter& aMmMessageRouter,
-        MCtsySatService& aSatService
-		): 
-		iMessageRouter ( aMmMessageRouter ),
-		iSatService(aSatService)
-    {
-    // None
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::ConstructL
-// Symbian 2nd phase constructor. Initialises internal attributes.
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::ConstructL
-		( 
-        )
-    { 
-    TFLOGSTRING("CSAT: CSatTsy::ConstructL");
-    
-    // Set pointer to the message router 
-    iMessageManager = CMmMessageManagerBase::NewL(iMessageRouter);
-   
-    // Register
-    iMessageManager->RegisterTsyObject(
-		CMmMessageManagerBase::ESatTsyObjType, this );
-
-    // Create request handle store
-    iSatReqHandleStore = CSatTsyReqHandleStore::NewL( 
-        ESatMaxNumOfRequests, iSatReqHandles );
-
-	// Create IconTsy instance
-	iSatIconTsy = CSatIconTsy::NewL( this );
-	// Create NotificationsTsy instance
-	iSatNotificationsTsy = CSatNotificationsTsy::NewL( 
-        this, iSatReqHandleStore );              
-    // Create CCTsy instance
-    iSatCCTsy = CSatCCTsy::NewL( this, iSatNotificationsTsy );
-    // Create DataDownloadTsy instance
-    iSatDataDownloadTsy = CSatDataDownloadTsy::NewL( this );
-    // Create EventDownloadTsy instance
-	iSatEventDownloadTsy = CSatEventDownloadTsy::NewL( this );
-	
-    // Request to read Cbmids
-#ifdef USING_CTSY_DISPATCHER
-	//Commented out due to not seemingly doing anything as the STK TSY does not hold EF_cbmid cache
-    //iSatDataDownloadTsy->CompleteReadCbmidsL( );
-    // Request Network status (removed as no known completion)   
-    //iMessageManager->HandleRequestL( ESatTsyNetStatus );
-    // Check if guardians should be activated (removed as no known completion)
-	//iMessageManager->HandleRequestL( ESatTsyCallControlActivation );
-	//Check if the SIM card suppords USSD tlv's in the call control envelopes (removed as no known completion)
-	//iMessageManager->HandleRequestL( ESatTsyUssdControlActivation );
-	// Get the default bearer data
-	iMessageManager->HandleRequestL( ESatTsyGetBearerCapability );
-	//prime the cached version of this setting
-	iMessageManager->HandleRequestL( ESatTsyUssdStatus);
-#else
-	iSatDataDownloadTsy->CompleteReadCbmidsL( );
-	// Request Network status    
-	iMessageManager->HandleRequestL( ESatTsyNetStatus );
-	// Check if guardians should be activated
-	iMessageManager->HandleRequestL( ESatTsyCallControlActivation );
-	//Check if the SIM card suppords USSD tlv's in the call control envelopes
-	iMessageManager->HandleRequestL( ESatTsyUssdControlActivation );
-	// Get the default bearer data
-	iMessageManager->HandleRequestL( ESatTsyGetBearerCapability );
-#endif //USING_CTSY_DISPATCHER
-	// Notify Licencee SIM ATK TSY that we are ready to receive messages
-	iMessageManager->HandleRequestL( ESatTsyReady );
-	// Get SMS Point to Point Data Download support status
-    iMessageManager->HandleRequestL( ESatTsySmsPpDdlStatus );
-	
-	TFLOGSTRING("CSAT: CSatTsy::ConstructL, end of method");
-    }
-    
-// -----------------------------------------------------------------------------
-// CSatTsy::ExtFunc
-// TRAP's all CSatTsy related Etel API requests in cases that they fail.
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::ExtFunc
-		( 
-		const TTsyReqHandle aTsyReqHandle,  
-		const TInt aIpc,           
-		const TDataPackage& aPackage        
-		)
-    {
-    TFLOGSTRING3("CSAT: CSatTsy::ExtFunc ReqHandle=%d IPC=%d", aTsyReqHandle, 
-        aIpc);
-	TInt ret( KErrNone );
-
-    // Some SAT functions need trapping so we use two level function where 
-    // first one is just a trap harness
-    
-    // It is responsibility of IPC handling functions to always handle 
-    // calling ReqComplete, ( it must either call it, or arrange it to 
-    // be called in some way ), except in the case of Leave. It is also 
-    // assumed that if after IPC handling function has called ReqComplete, 
-    // then it doesn't Leave.
-    TInt trapError( KErrNone );
-
-    TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ) );
-
-    if ( KErrNone != trapError )
-        {
-        TFLOGSTRING2("CSAT: CSatTsy::ExtFunc, trapError: %d", trapError );
-        ReqCompleted( aTsyReqHandle, trapError );
-        }
-	else if ( KErrNone != ret )
-        {
-        TFLOGSTRING2("CSAT: CSatTsy::ExtFunc, ret: %d", ret);
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else										
-	    {
-        // Reset last Tsy request type
-        iReqHandleType = ESatReqHandleUnknown;
-        }
-
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::SaveReqHandle
-// Saves the request handle
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::SaveReqHandle
-		( 
-		const TTsyReqHandle aTsyReqHandle,  
-        const TSatRequestTypes aSatRequestType
-		)
-    {
-    TFLOGSTRING3("CSAT: CSatTsy::SaveReqHandle ReqHandle=%d ReqHandleType=%d", 
-        aTsyReqHandle, aSatRequestType);
-    
-    // Don't save the request handle if the type is unknown.
-    if ( ESatReqHandleUnknown != aSatRequestType )
-        {
-        iSatReqHandleStore->SetTsyReqHandle( aSatRequestType, aTsyReqHandle );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::ReqModeL
-// Mode service function used by ETel, request mode. ReqModeL is called from 
-// the server's CTelObject::ReqAnalyserL in order to check the type of request
-// it has.
-// -----------------------------------------------------------------------------
-//
-CTelObject::TReqMode CSatTsy::ReqModeL
-		( 
-		const TInt aIpc    
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::ReqModeL.");
-    CTelObject::TReqMode ret = 0;
-
-    switch ( aIpc )
-        {
-        // Multiple Completion Services
-        case ESatNotifyDisplayTextPCmd:
-        case ESatNotifyGetInkeyPCmd:
-        case ESatNotifyGetInputPCmd:
-        case ESatNotifyPlayTonePCmd:
-        case ESatNotifySetUpMenuPCmd:
-        case ESatNotifySelectItemPCmd:
-        case ESatNotifySendSmPCmd:
-        case ESatNotifySendSsPCmd:
-        case ESatNotifySendUssdPCmd:
-        case ESatNotifySetUpCallPCmd:
-        case ESatNotifyRefreshPCmd:
-        case ESatNotifyRefreshRequiredParam:
-        case ESatRefreshAllowed:        
-        case ESatNotifyCallControlRequest:
-        case ESatNotifySendDtmfPCmd:
-        case ESatNotifyMoSmControlRequest:
-        case ESatNotifySetUpEventListPCmd:
-        case ESatNotifySetUpIdleModeTextPCmd:
-        case ESatNotifyProactiveSimSessionEnd:
-        case ESatNotifyLaunchBrowserPCmd:
-        case ESatNotifyPollingIntervalPCmd:
-        case ESatNotifyPollingOffPCmd:
-        case ESatNotifyLanguageNotificationPCmd:
-        case ESatNotifyLocalInfoPCmd:
-        case ESatNotifyOpenChannelPCmd:
-        case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyCloseChannelPCmd:
-        case ESatNotifySendDataPCmd:
-        case ESatNotifyReceiveDataPCmd:               
-            {
-            ret = KReqModeMultipleCompletionEnabled;
-            break;
-            }
-        // Non-flow Controlled Services
-        case ESatTerminalRsp:
-        case ESatMenuSelection:
-        case ESatEventDownload:
-        case ESatGetIcon:
-        case ESatGetImageInstance:
-        case ESatGetClut:
-        case ESatGetMeSideSatProfile:
-        case ESatClientSatProfileIndication:
-        case ESatSendMessageNoLogging:
-            {
-            break;
-            }
-        default:
-            {
-            TFLOGSTRING2("CSAT: CSatTsy::ReqModeL unsupported IPC %d", aIpc);
-            User::Leave( KErrNotSupported );
-            break;
-            }
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::CancelService
-// Cancels Sat requests
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::CancelService
-		( 
-		const TInt aIpc,           
-		const TTsyReqHandle aTsyReqHandle   
-		)
-    {
-    TFLOGSTRING3("CSAT: CSatTsy::CancelService ReqHandle=%d IPC=%d", 
-        aTsyReqHandle, aIpc);
-    TInt ret( KErrNotSupported );
-
-	// When the clients close their sub-sessions (eg. by calling RLine::Close), 
-    // they may not have cancelled all their outstanding asynchronous requests 
-    // before closing.  It is up to the ETel server to clean up in this 
-    // situation, so the server will find the list of outstanding requests 
-    // related to that sub-session object and pass these outstanding IPC 
-    // request numbers, one at a time, to the CancelService method in the TSY.
-
-    switch ( aIpc )
-        {
-        case ESatTerminalRsp:
-        case ESatMenuSelection:
-        //case ESatSendMessageNoLogging:
-            {
-            ret = KErrNone;
-            break;
-            }
-        case ESatNotifyCallControlRequest:
-		case ESatNotifyMoSmControlRequest:        
-        case ESatNotifyDisplayTextPCmd:
-        case ESatNotifyGetInkeyPCmd:
-        case ESatNotifyGetInputPCmd:
-        case ESatNotifyPlayTonePCmd:
-        case ESatNotifySetUpMenuPCmd:
-        case ESatNotifySelectItemPCmd:
-        case ESatNotifySetUpCallPCmd:
-        case ESatNotifySendSmPCmd:
-        case ESatNotifySendSsPCmd:
-        case ESatNotifySendUssdPCmd:   
-        case ESatNotifyRefreshPCmd:
-        case ESatNotifyRefreshRequiredParam:
-        case ESatNotifySetUpIdleModeTextPCmd:
-        case ESatNotifySendDtmfPCmd:
-        case ESatNotifyLaunchBrowserPCmd:
-        case ESatNotifyLocalInfoPCmd:
-        case ESatNotifyLanguageNotificationPCmd:
-        case ESatNotifySetUpEventListPCmd:
-        case ESatNotifyProactiveSimSessionEnd:
-        case ESatNotifyOpenChannelPCmd:
-        case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyCloseChannelPCmd:
-        case ESatNotifySendDataPCmd:
-        case ESatNotifyReceiveDataPCmd:       
-            {
-            ret = iSatNotificationsTsy->CancelService ( aIpc, aTsyReqHandle );
-            break;
-            }
-        
-        case ESatEventDownload:
-            {
-            ret = iSatEventDownloadTsy->CancelService ( aIpc, aTsyReqHandle );
-            break;
-            }
-        
-        // Following functions are not supported, hence they are completed
-        // by DoExtFuncL function at once.
-        // ETel server will not pass cancel function to SAT, because the 
-        // request is not 'ON' in ETel.
-        // They are listed here for future reference.
-        //
-
-        // ESatNotifyMoSmControlRequest
-        // ESatEventDownload
-        // ESatGetMeSideSatProfile
-
-        default:
-            {
-            TFLOGSTRING2("CSAT: CSatTsy::CancelService invalid IPC %d", aIpc);
-            ret = KErrGeneral; 
-            break;           	
-            }
-        }
-    return ret;
-
-    }
-        
-// -----------------------------------------------------------------------------
-// CSatTsy::RegisterNotification
-// ETel Server subscribe notifications from NOS. RegisterNotification is called
-// when the server recognises that this notification is being posted for the 
-// first time on this sub-session object. It enables the TSY to "turn on" any 
-// regular notification messages that it may receive from the phone.
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::RegisterNotification
-		( 
-		const TInt aIpc    // IPC number of request
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::RegisterNotification.");
-    // Initialize return value
-    TInt ret( KErrNone );
-
-    switch ( aIpc )
-        {
-        case ESatNotifyDisplayTextPCmd:
-        case ESatNotifyGetInkeyPCmd:
-        case ESatNotifyGetInputPCmd:
-        case ESatNotifyPlayTonePCmd:
-        case ESatNotifySetUpMenuPCmd:
-        case ESatNotifySelectItemPCmd:
-        case ESatNotifySendSmPCmd:
-        case ESatNotifySendSsPCmd:
-        case ESatNotifySendUssdPCmd:
-        case ESatNotifySetUpCallPCmd:
-        case ESatNotifyRefreshPCmd:
-        case ESatNotifyRefreshRequiredParam:
-        case ESatRefreshAllowed:        
-        case ESatNotifyProactiveSimSessionEnd:
-        case ESatNotifySetUpIdleModeTextPCmd:
-        case ESatNotifyLaunchBrowserPCmd:
-        case ESatNotifyCallControlRequest:
-		case ESatNotifySendDtmfPCmd:
-        case ESatNotifySetUpEventListPCmd:
-        case ESatNotifyLanguageNotificationPCmd:
-        case ESatNotifyLocalInfoPCmd:
-        case ESatNotifyMoSmControlRequest:
-        case ESatNotifyOpenChannelPCmd:
-        case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyCloseChannelPCmd:
-        case ESatNotifySendDataPCmd:
-        case ESatNotifyReceiveDataPCmd:      
-            {
-            // Ret already set to KErrNone
-            break;
-            }
-        default:
-            {
-            // Unknown or invalid IPC
-            TFLOGSTRING2("CSAT: CSatTsy::RegisterNotification, \
-                Unsupported IPC %d", aIpc);
-            ret = KErrNotSupported;
-            break;
-            }
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::DeregisterNotification
-// ETel server unsubscribe notifications from NOS. DeregisterNotification is 
-// called when the server recognizes that this notification will not be posted 
-// again because the last client to have a handle on this sub-session object  
-// has just closed the handle. It enables the TSY to "turn off" any regular 
-// notification messages that it may receive from the phone.
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::DeregisterNotification
-		( 
-		const TInt aIpc    // IPC number of request
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::DeregisterNotification.");
-    // Initialize return value
-    TInt ret( KErrNone );
-
-    switch ( aIpc )
-        {
-        case ESatNotifyDisplayTextPCmd:
-        case ESatNotifyGetInkeyPCmd:
-        case ESatNotifyGetInputPCmd:
-        case ESatNotifyPlayTonePCmd:
-        case ESatNotifySetUpMenuPCmd:
-        case ESatNotifySelectItemPCmd:
-        case ESatNotifySendSmPCmd:
-        case ESatNotifySendSsPCmd:
-        case ESatNotifySendUssdPCmd:
-        case ESatNotifySetUpCallPCmd:
-        case ESatNotifyRefreshPCmd:
-        case ESatNotifyRefreshRequiredParam:
-        case ESatRefreshAllowed:        
-        case ESatNotifyProactiveSimSessionEnd:
-        case ESatNotifySetUpIdleModeTextPCmd:
-        case ESatNotifyLaunchBrowserPCmd:
-        case ESatNotifyCallControlRequest:
-		case ESatNotifySendDtmfPCmd:		
-        case ESatNotifySetUpEventListPCmd:
-        case ESatNotifyLanguageNotificationPCmd:
-        case ESatNotifyLocalInfoPCmd:
-        case ESatNotifyOpenChannelPCmd:
-        case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyMoSmControlRequest:
-        case ESatNotifyCloseChannelPCmd:
-        case ESatNotifySendDataPCmd:
-        case ESatNotifyReceiveDataPCmd:       
-            {
-            // Ret already set to KErrNone
-            break;
-            }
-        default:
-            {
-            // Unknown or invalid IPC
-            TFLOGSTRING2("CSAT: CSatTsy::DeregisterNotification, \
-                Unsupported IPC %d", aIpc);
-            ret = KErrNotSupported;
-            break;            	
-            }
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::NumberOfSlotsL
-// Returns number of slots to be used for given IPC. NumberOfSlotsL is called 
-// by the server when it is registering a new notification. It enables the TSY 
-// to tell the server how many buffer slots to allocate for "repost 
-// immediately" notifications that may trigger before clients collect them.
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::NumberOfSlotsL
-		( 
-		const TInt aIpc    // IPC number of request
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::NumberOfSlotsL.");
-    TInt numberOfSlots( 1 );
-
-    switch ( aIpc )
-        {
-        case ESatNotifyDisplayTextPCmd:
-            {
-            numberOfSlots = KSatNotifyDisplayTextPCmdSlots;
-            break;
-            }
-        case ESatNotifyGetInkeyPCmd:
-            {
-            numberOfSlots = KSatNotifyGetInkeyPCmdSlots;
-            break;
-            }
-        case ESatNotifyGetInputPCmd:
-            {
-            numberOfSlots = KSatNotifyGetInputPCmdSlots;
-            break;
-            }
-        case ESatNotifyPlayTonePCmd:
-            {
-            numberOfSlots = KSatNotifyPlayTonePCmdSlots;
-            break;
-            }
-        case ESatNotifySetUpMenuPCmd:
-            {
-            numberOfSlots = KSatNotifySetUpMenuPCmdSlots;
-            break;
-            }
-        case ESatNotifySelectItemPCmd:
-            {
-            numberOfSlots = KSatNotifySelectItemPCmdSlots;
-            break;
-            }
-        case ESatNotifySendSmPCmd:
-            {
-            numberOfSlots = KSatNotifySendSmPCmdSlots;
-            break;
-            }
-        case ESatNotifySendSsPCmd:
-            {
-            numberOfSlots = KSatNotifySendSsPCmdSlots;
-            break;
-            }
-        case ESatNotifySendUssdPCmd:
-            {
-            numberOfSlots = KSatNotifySendUssdPCmdSlots;
-            break;
-            }
-        case ESatNotifySetUpCallPCmd:
-            {
-            numberOfSlots = KSatNotifySetUpCallPCmdSlots;
-            break;
-            }
-        case ESatNotifyRefreshPCmd:
-            {
-            numberOfSlots = KSatNotifyRefreshPCmdSlots;
-            break;
-            }
-        case ESatNotifyProactiveSimSessionEnd:
-            {
-            numberOfSlots = KSatNotifyProactiveSimSessionEndSlots;
-            break;
-            }
-        case ESatNotifySetUpIdleModeTextPCmd:
-            {
-            numberOfSlots = KSatNotifySetUpIdleModeTextPCmdSlots;
-            break;
-            }
-        case ESatNotifyLaunchBrowserPCmd:
-            {
-            numberOfSlots = KSatNotifyLaunchBrowserSlots;
-            break;
-            }
-        case ESatNotifyCallControlRequest:
-            {
-            numberOfSlots = KSatNotifyCallControlRequestSlots;
-            break;
-            }
-        case ESatNotifySendDtmfPCmd:
-            {
-            numberOfSlots = KSatNotifySendDtmfSlots;
-            break;
-            }
-        case ESatNotifySetUpEventListPCmd:
-            {
-            numberOfSlots = KSatNotifySetUpEventListSlots;
-            break;
-            }
-        case ESatNotifyLanguageNotificationPCmd:
-        	{
-            numberOfSlots = KSatNotifySetUpEventListSlots;
-            break;
-        	}
-        case ESatNotifyLocalInfoPCmd:
-        case ESatNotifyOpenChannelPCmd:							
-	    case ESatNotifyCloseChannelPCmd:							
-	    case ESatNotifyReceiveDataPCmd:						
-	    case ESatNotifySendDataPCmd:								
-	    case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyMoSmControlRequest:
-        	{
-            numberOfSlots = KSatNotifySetUpEventListSlots;
-            break;
-        	}
-        case ESatNotifyRefreshRequiredParam:
-        case ESatRefreshAllowed:
-        	{
-        	// Default is set to one
-        	break;        	
-        	}
-        default:
-            {
-            // Unknown or invalid IPC
-            TFLOGSTRING2("CSAT: CSatTsy::NumberOfSlotsL, Unsupported IPC %d", 
-                aIpc);
-            User::Leave( KErrNotSupported );
-            break;
-            }
-        }  
-    return numberOfSlots;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::ReqCompleted
-// Completes requests to ETel
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::ReqCompleted
-		( 
-		TTsyReqHandle aReqHandle,
-        TInt aRet 
-        )
-	{
-	TFLOGSTRING2("CSAT: CSatTsy::ReqCompleted, ReqHandle=%d ", aReqHandle);
-#ifdef USING_CTSY_DISPATCHER
-	CTelObject::ReqCompleted( aReqHandle, aRet );
-#else
-	ReqCompleted( aReqHandle, aRet );
-#endif //USING_CTSY_DISPATCHER
-	}
-	
-// -----------------------------------------------------------------------------
-// CSatTsy::StoreCallConnectedEvent
-// Cache call connected envelope to CSatNotifySetUpCall class
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::StoreCallConnectedEvent
-        (
-        const TDesC8& aEnvelope
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::StoreCallConnectedEvent");
-    iSatNotificationsTsy->SatNotifySetUpCall()->StoreCallConnectedEvent( 
-        aEnvelope );
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::SetSetUpCallStatus
-// Set Status of SetUpCall command to the CSatEventDownloadTsy class
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::SetSetUpCallStatus
-        (
-        const TBool aStatus
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::SetSetUpCallStatus");
-    iSatEventDownloadTsy->SetSetUpCallStatus( aStatus );
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::SetUpEventList
-// Sets events that are reported to NAA
-// -----------------------------------------------------------------------------
-//
-void CSatTsy::SetUpEventList
-        (
-        TUint32 aEvents     // events to be monitored
-        ) 
-    {
-    TFLOGSTRING("CSAT: CSatTsy::SetUpEventList");
-    iSatEventDownloadTsy->SetUpEventList( aEvents );
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::MessageManager
-// This method returns a pointer to iMessageManager object.
-// -----------------------------------------------------------------------------
-//
-CMmMessageManagerBase* CSatTsy::MessageManager
-        (
-        // none
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::MessageManager");
-    return iMessageManager;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::SatCCTsy
-// This method returns a pointer to Call Control TSY object.
-// -----------------------------------------------------------------------------
-//
-CSatCCTsy* CSatTsy::SatCCTsy
-        (
-        // none
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::SatCCTsy");
-    return iSatCCTsy;
-    }  
-
-// -----------------------------------------------------------------------------
-// CSatTsy::GetSatReqHandleStore
-// Returns iSatReqHandleStore pointer and control to calling object
-// -----------------------------------------------------------------------------
-//
-CSatTsyReqHandleStore* CSatTsy::GetSatReqHandleStore
-	    (
-	    //none
-	    )
-	{
-    TFLOGSTRING("CSAT: CSatTsy::GetSatReqHandleStore");
-	return iSatReqHandleStore;
-	}
-
-// -----------------------------------------------------------------------------
-// CSatTsy::GetReqHandleType
-// Returns pointer to request handle type
-// -----------------------------------------------------------------------------
-//
-CSatTsy::TSatRequestTypes* CSatTsy::GetReqHandleType
-	    (
-	    //none
-	    )
-	{
-    TFLOGSTRING("CSAT: CSatTsy::GetReqHandleType");
-	return &iReqHandleType;
-	}
-
-// -----------------------------------------------------------------------------
-// CSatTsy::CompleteSendSmsMessage
-// Message from MMSMS side that message sending has been completed
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::CompleteSendSmsMessage
-        (
-        TInt aStatus 
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::CompleteSendSmsMessage");
-    
-    // Reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iSatNotificationsTsy->RequestHandleStore()->
-        ResetTsyReqHandle( CSatTsy::ESatSendMessageNoLoggingReqType );
-		
-	// In case the request was ongoing, continue..
-    if ( CSatTsy::ESatReqHandleUnknown != reqHandle )
-        {
-    	ReqCompleted( reqHandle, aStatus );
-        }
-    return KErrNone;
-    }
-    
-// -----------------------------------------------------------------------------
-// CSatTsy::IsMoSmControlBySimActivated
-// This method is required by CommonTSY, which needs to know whether the 
-// MoSmControlBySim is activated or not.
-// -----------------------------------------------------------------------------
-//
-TBool CSatTsy::IsMoSmControlBySimActivated
-		(
-		void
-		)
-    {
-    TFLOGSTRING("CSAT: CSatTsy::IsMoSmControlBySimActivated");
-    return iSatNotificationsTsy->IsMoSmControlActivated();
-    }
-
-#ifdef USING_CTSY_DISPATCHER
-    /**
-     * From MStkTsyCallOrigin 
-     * Dummy implementation for IsSimOriginatedCall function
-     *          
-     * @param aAddress The number whose origin is required.
-     * @return ETrue if call originates from a Proactive Command
-     */ 
-TBool CSatTsy::IsSimOriginatedCall
-			(
-			const TDesC8& aAddress
-			)
-	{
-	TFLOGSTRING("CSAT: CSatTsy::IsSimOriginatedCall");
-	TBool ret = EFalse;
-	if (iSatCCTsy)
-		{
-		ret = iSatCCTsy->HasProactiveOrigin(aAddress);
-		}
-	return ret;
-	}
-#endif //USING_CTSY_DISPATCHER
-
-// -----------------------------------------------------------------------------
-// CSatTsy::StoreProactiveAddress
-// Stores latest address of Send SS/Setup call proactive command to CSatCC
-// (other items were commented in a header). Method is also called when 
-// proactive session is over with parameter NULL.
-// -----------------------------------------------------------------------------
-//    
-void CSatTsy::StoreProactiveAddress
-        ( 
-        const TDesC8* aAddress 
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::StoreProactiveAddress");
-    iSatCCTsy->StoreAddressForCC( *aAddress );
-    }  
-    
-// -----------------------------------------------------------------------------
-// CSatTsy::SetTonNpi
-// Stores Ton Npi to CSatCC
-// -----------------------------------------------------------------------------
-//    
-void CSatTsy::SetTonNpi
-        ( 
-        const TUint8 aTonNpi 
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::SetTonNpi");
-    iSatCCTsy->SetTonNpiForSS( aTonNpi );
-    }  
-    
-// -----------------------------------------------------------------------------
-// CSatTsy::DoExtFuncL
-// Dispatch to correct SAT Tsy/function according to the IPC
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::DoExtFuncL
-		(
-		const TTsyReqHandle aTsyReqHandle,  
-		const TInt aIpc,           
-		const TDataPackage& aPackage	
-		)
-    {
-    TFLOGSTRING3("CSAT: CSatTsy::DoExtFuncL\t IPC:%d,\t Handle:%d",
-           aIpc, aTsyReqHandle);
-	TInt ret( KErrNone );
-
-	// Add here ALL supported Sat request types, and call either the correct 
-	//	Sat Tsy to handle the request, or a request directly here in CSatTsy.
-    switch ( aIpc )
-        {
-        // General
-        case ESatMenuSelection:
-            {
-            ret = MenuSelectionL( aTsyReqHandle, 
-				reinterpret_cast<RSat::TMenuSelectionV1Pckg*>( 
-				aPackage.Des1n() ) );
-            break;
-            }
-        case ESatSendMessageNoLogging:
-            {
-            SendMessageNoLogging( aPackage.Des1n(), aTsyReqHandle );
-            break;
-            }
-        // Icon
-        case ESatGetIcon:
-		case ESatGetImageInstance:
-		case ESatGetClut:
-            {
-            ret = iSatIconTsy->DoExtFuncL ( aTsyReqHandle, aIpc, aPackage );
-            break;
-            }
-        // Notifications
-        case ESatTerminalRsp:
-        case ESatNotifyCallControlRequest:
-        case ESatNotifyDisplayTextPCmd:
-        case ESatNotifyGetInkeyPCmd:
-        case ESatNotifyGetInputPCmd:
-        case ESatNotifyPlayTonePCmd:
-        case ESatNotifySetUpMenuPCmd:
-        case ESatNotifySelectItemPCmd:
-        case ESatNotifySendSmPCmd:
-        case ESatNotifySendSsPCmd:
-        case ESatNotifySendUssdPCmd:
-        case ESatNotifySetUpCallPCmd:
-		case ESatNotifyRefreshPCmd:
-        case ESatNotifyRefreshRequiredParam:
-        case ESatRefreshAllowed:
-        case ESatNotifySetUpEventListPCmd:
-        case ESatNotifySetUpIdleModeTextPCmd:
-        case ESatNotifySendDtmfPCmd:
-        case ESatNotifyLanguageNotificationPCmd:
-        case ESatNotifyLaunchBrowserPCmd:
-        case ESatNotifyLocalInfoPCmd:   
-        case ESatNotifyProactiveSimSessionEnd:
-        case ESatNotifyOpenChannelPCmd:
-        case ESatNotifyGetChannelStatusPCmd:
-        case ESatNotifyCloseChannelPCmd:
-        case ESatNotifySendDataPCmd:
-        case ESatNotifyReceiveDataPCmd:
-        case ESatNotifySmsPpDownload:
-        case ESatNotifyCbDownload:
-		case ESatNotifyMoSmControlRequest:                    
-            {
-            iSatNotificationsTsy->DoExtFuncL ( aTsyReqHandle, aIpc, aPackage );
-            break;
-            }
-        // EventDownload
-        case ESatEventDownload:
-            {
-            ret = iSatEventDownloadTsy->DoExtFuncL ( aTsyReqHandle, aIpc, 
-                aPackage );
-            break;
-            }
-        // Tsy internal requests
-        // Not supported
-        /*
-        case ESatGetMeSideSatProfile:
-        case ESatClientSatProfileIndication:
-        case ESatUsatClientReadyIndication:
-        case ESatGetProvisioningRefFile:
-        case ESatNotifyRefreshRequired:
-        // Notifications
-        case ESatNotifyPerformCardApduPCmd:
-        case ESatNotifyPowerOffCardPCmd:
-        case ESatNotifyPowerOnCardPCmd:
-        case ESatNotifyGetReaderStatusPCmd:
-        case ESatNotifyRunAtCommandPCmd:
-		case ESatNotifyPollingOff:
-		case ESatNotifyPollingInterval:
-        case ESatNotifyServiceSearchPCmd:
-        case ESatNotifyGetServiceInfoPCmd:
-        case ESatNotifyDeclareServicePCmd:
-        case ESatNotifyProactiveSimSessionStart:
-        case ESatNotifyTimerExpiration:
-        case ESatNotifyTimerMgmtPCmd:
-        case ESatNotifyTsyStateUpdated:
-        */
-
-		// Complete with KErrNotSupported, function not supported
-		default:
-			{
-			TFLOGSTRING2("CSAT: CSatTsy::DoExtFuncL unsupported IPC %d", aIpc);
-			ReqCompleted( aTsyReqHandle, KErrNotSupported );
-			break;
-			}
-        }
-
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::MenuSelection
-// Passes a menu selection response to DOS
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::MenuSelectionL
-		(
-		TTsyReqHandle   aTsyReqHandle,			
-		RSat::TMenuSelectionV1Pckg* aSelection	
-		) 
-    {
-    TFLOGSTRING("CSAT: CSatTsy::MenuSelection");
-    TInt ret( KErrNone );
-
-	// It should not be possible that the request is asked more than once at 
-	// time, therefore we do not need to check whether it is already ongoing
-
-	RSat::TMenuSelectionV1& selectionV1 = ( *aSelection ) ();
-	TFLOGSTRING3("CSAT:MenuSelection, iItemId %x, Help: %c", 
-		selectionV1.iItemId, selectionV1.iHelp );
-
-    TTlv tlvSpecificData;
-    
-    tlvSpecificData.Begin( KBerTlvMenuSelectionTag );
-    tlvSpecificData.AddTag( KTlvDeviceIdentityTag );
-    tlvSpecificData.AddByte( KKeypad );
-    tlvSpecificData.AddByte( KSim );
-    tlvSpecificData.AddTag( KTlvItemIdentifierTag );
-    tlvSpecificData.AddByte( selectionV1.iItemId );
-
-	// If user has requested help, add tag.
-    if ( RSat::EHelpRequested == selectionV1.iHelp )
-        {
-        tlvSpecificData.AddTag( KTlvHelpRequestTag );
-        }
-
-	// Pack parameter for DOS call.
-    TPtrC8 berTlv = tlvSpecificData.End();
-	CSatDataPackage dataPackage;
-	dataPackage.PackData( &berTlv );
-
-	ret = iMessageManager->HandleRequestL( ESatMenuSelection, &dataPackage );
-
-	if ( KErrNone == ret )
-        {
-    	// We must complete the request to the client right away, as an
-    	// indication that the request has been handled
-    	ReqCompleted( aTsyReqHandle, ret );    
-        }
-    
-    return ret; 
-    }
-
-// -----------------------------------------------------------------------------
-// CSatTsy::SendMessageNoLogging
-// Called by ETel server, passes SMS message to MMSMS
-// -----------------------------------------------------------------------------
-//
-TInt CSatTsy::SendMessageNoLogging
-        (
-        TDes8* aMsg,           
-        TTsyReqHandle   aTsyReqHandle   
-        )
-    {
-    TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging");
-    TInt ret( KErrNone );
-	
-	// Save the request handle
-    SaveReqHandle( aTsyReqHandle, ESatSendMessageNoLoggingReqType );
-	
-    RSat::TSatSmsV1Pckg* aPckg = reinterpret_cast<RSat::TSatSmsV1Pckg*>( 
-        aMsg );
-    RSat::TSatSmsV1& satSmsV1 = ( *aPckg ) ();
-
-    // SMS GSM extension checks that SCA length is not over the max limit
-    // that SMS allows
-
-    // Check that we have a SCA address
-    if ( 0x0 < satSmsV1.iServiceCenter.iTelNumber.Length() )
-        {
-        // SCA number conversion from unicode to GSM 3.40 format 
-        // is done by MMSMS dll
-
-        // Set SCA pointer
-        TDes16* sca;
-        sca = &satSmsV1.iServiceCenter.iTelNumber;
-
-        // Type of Number, mapping from ETelSat format to MMETel format
-        RMobilePhone::TMobileTON numberType;
-        
-        switch ( satSmsV1.iServiceCenter.iTypeOfNumber )
-            {
-            case RSat::ETypeOfNumberNotSet:
-            case RSat::EUnknownNumber:
-            	{	
-                numberType = RMobilePhone::EUnknownNumber;
-                break;
-            	}
-            case RSat::EInternationalNumber:
-            	{
-                numberType = RMobilePhone::EInternationalNumber;
-                break;
-            	}
-            case RSat::ENationalNumber:
-            	{
-                numberType = RMobilePhone::ENationalNumber;
-                break;
-            	}
-            case RSat::ENetworkSpecificNumber:
-            	{
-                numberType = RMobilePhone::ENetworkSpecificNumber;
-                break;
-            	}
-            case RSat::EDedicatedNumber:
-            	{
-                numberType = RMobilePhone::ESubscriberNumber;
-                break;
-            	}
-            default:
-            	{
-                // Unknown or invalid Type of Number
-                numberType = RMobilePhone::EUnknownNumber;
-                break;
-            	}
-            }
-
-        // Numbering Plan, mapping from ETelSat format to MMETel format
-        RMobilePhone::TMobileNPI numberPlan;
-        switch ( satSmsV1.iServiceCenter.iNumberPlan )
-            {
-            case RSat::ENumberingPlanNotSet:
-            case RSat::EUnknownNumberingPlan:
-            	{
-                numberPlan = RMobilePhone::EUnknownNumberingPlan;
-                break;
-            	}
-            case RSat::EIsdnNumberPlan:
-            	{
-                numberPlan = RMobilePhone::EIsdnNumberPlan;
-                break;
-            	}
-            case RSat::EDataNumberPlan:
-            	{
-                numberPlan = RMobilePhone::EDataNumberPlan;
-                break;
-            	}
-            case RSat::ETelexNumberPlan:
-            	{
-                numberPlan = RMobilePhone::ETelexNumberPlan;
-                break;
-            	}
-            case RSat::ENationalNumberPlan:
-            	{
-                numberPlan = RMobilePhone::ENationalNumberPlan;
-                break;
-            	}
-            case RSat::EPrivateNumberPlan:
-            	{
-                numberPlan = RMobilePhone::EPrivateNumberPlan;
-                break;
-            	}
-            default:
-            	{
-                // Unknown or invalid Numbering Plan
-                numberPlan = RMobilePhone::EUnknownNumberingPlan;
-                break;
-            	}
-            }
-
-        // SMS message, Packet Data Unit
-        TDes8* pdu;
-        pdu = &satSmsV1.iBuf;
-
-        // Call SMS sending function from MMSMS
-        ret = iSatService.SendSatMessage( *this, pdu, sca, &numberType, 
-                &numberPlan, EFalse, aTsyReqHandle );
-        TFLOGSTRING2("CSAT: CSatTsy::SendMessageNoLogging, \
-                SendSmsMessage done, ret: %x", ret);
-       
-       
-        }
-    else // SCA missing
-        {
-        ret = KErrGeneral;
-        TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging, SCA missing");
-        }
-
-    // Failure in sending of SAT SMS, call complete method
-    if ( KErrNone != ret )
-        {
-        CompleteSendSmsMessage( ret ); 
-        TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging, \
-            failure sending SAT SMS, complete");
-        }
-    
-    return KErrNone;
-
-    }     
-
-MmMessageManagerCallback* CSatTsy::GetMessageManagerCallback()    
-{
-	return iMessageManager->GetMessageManagerCallback();
-}
-
-
-//  End of File  
+// Copyright (c) 2006-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:
+// Name        : CSatTsy.cpp
+// Part of     : Common SIM ATK TSY / commonsimatktsy
+// Main entry point for Etel requests
+// Version     : 1.0  
+//
+
+
+
+//  INCLUDE FILES
+#include <etelsat.h>                // Etel SAT API
+#include <satcs.h>                  // Etel SAT API
+//#include "CMmPhoneTsy.h"			// Phone Tsy class
+#include "CSatDataPackage.h"		// For data packages
+//#include "MmTsy_numberOfSlots.h"    // Number of Slots
+#include "cmmmessagemanagerbase.h"	// Message manager base
+#include <ctsy/pluginapi/mmessagerouter.h>
+#include <ctsy/serviceapi/mctsysatservice.h>
+//#include "CMmMessageRouterBase.h"	// Message router
+
+//#include "CMmSmsTsy.h"              // MmSmsTsy
+//#include "CMmMessageManager.h"      // Message manager
+
+#include "CSatTsy.h"				// Messaging class
+#include "CSatCCTsy.h"              // SatCallControl class
+#include "CSatIconTsy.h"            // SatIcon class
+#include "CSatNotificationsTsy.h"   // SatNotifications class
+#include "CSatNotifySetUpCall.h"    // CSatNotifySetUpCall    
+#include "CSatEventDownloadTsy.h"   // SatEventDownload class
+#include "CSatDataDownloadTsy.h"    // SatDataDownload class
+
+#include "msattsy_ipcdefs.h"		// Sat Tsy specific request types
+#include "TfLogger.h"               // For TFLOGSTRING
+#include "TSatUtility.h"		    // Sat Tsy Utility class
+#include "TTlv.h"					// TTlv class
+#include "CSatTsyReqHandleStore.h"  // Request handle storage
+
+#include "stktsy_number_of_slots.h"
+
+// -----------------------------------------------------------------------------
+// CSatTsy::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSatTsy* CSatTsy::NewL
+		(
+		MMessageRouter& aMmMessageRouter,
+		MCtsySatService& aSatService
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::NewL");
+
+	// Create subsession
+    CSatTsy* subsession = new ( ELeave ) CSatTsy( aMmMessageRouter, aSatService );
+
+    CleanupStack::PushL( subsession );
+    subsession->ConstructL();
+    CleanupStack::Pop();
+
+	TFLOGSTRING("CSAT: CSatTsy::NewL, end of method");
+    return subsession;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::~CSatTsy
+// Destructor
+// -----------------------------------------------------------------------------
+// 
+CSatTsy::~CSatTsy
+		(
+		// None
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::~CSatTsy");
+
+    // Unregister.
+    iMessageManager->RegisterTsyObject(
+		CMmMessageManagerBase::ESatTsyObjType, NULL );
+
+    // Delete also specific TSY objects
+    delete iSatCCTsy;
+    delete iSatIconTsy;
+    delete iSatNotificationsTsy;
+    delete iSatDataDownloadTsy;
+    delete iSatEventDownloadTsy;
+	// Message router and message manager are deleted here
+    delete iMessageManager;
+    // Request handle store
+    delete iSatReqHandleStore;
+    TFLOGSTRING("CSAT: CSatTsy::~CSatTsy, end of method");
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::CSatTsy
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CSatTsy::CSatTsy
+		( 
+        MMessageRouter& aMmMessageRouter,
+        MCtsySatService& aSatService
+		): 
+		iMessageRouter ( aMmMessageRouter ),
+		iSatService(aSatService)
+    {
+    // None
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::ConstructL
+// Symbian 2nd phase constructor. Initialises internal attributes.
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::ConstructL
+		( 
+        )
+    { 
+    TFLOGSTRING("CSAT: CSatTsy::ConstructL");
+    
+    // Set pointer to the message router 
+    iMessageManager = CMmMessageManagerBase::NewL(iMessageRouter);
+   
+    // Register
+    iMessageManager->RegisterTsyObject(
+		CMmMessageManagerBase::ESatTsyObjType, this );
+
+    // Create request handle store
+    iSatReqHandleStore = CSatTsyReqHandleStore::NewL( 
+        ESatMaxNumOfRequests, iSatReqHandles );
+
+	// Create IconTsy instance
+	iSatIconTsy = CSatIconTsy::NewL( this );
+	// Create NotificationsTsy instance
+	iSatNotificationsTsy = CSatNotificationsTsy::NewL( 
+        this, iSatReqHandleStore );              
+    // Create CCTsy instance
+    iSatCCTsy = CSatCCTsy::NewL( this, iSatNotificationsTsy );
+    // Create DataDownloadTsy instance
+    iSatDataDownloadTsy = CSatDataDownloadTsy::NewL( this );
+    // Create EventDownloadTsy instance
+	iSatEventDownloadTsy = CSatEventDownloadTsy::NewL( this );
+	
+    // Request to read Cbmids
+#ifdef USING_CTSY_DISPATCHER
+	//Commented out due to not seemingly doing anything as the STK TSY does not hold EF_cbmid cache
+    //iSatDataDownloadTsy->CompleteReadCbmidsL( );
+    // Request Network status (removed as no known completion)   
+    //iMessageManager->HandleRequestL( ESatTsyNetStatus );
+    // Check if guardians should be activated (removed as no known completion)
+	//iMessageManager->HandleRequestL( ESatTsyCallControlActivation );
+	//Check if the SIM card suppords USSD tlv's in the call control envelopes (removed as no known completion)
+	//iMessageManager->HandleRequestL( ESatTsyUssdControlActivation );
+	// Get the default bearer data
+	iMessageManager->HandleRequestL( ESatTsyGetBearerCapability );
+	//prime the cached version of this setting
+	iMessageManager->HandleRequestL( ESatTsyUssdStatus);
+#else
+	iSatDataDownloadTsy->CompleteReadCbmidsL( );
+	// Request Network status    
+	iMessageManager->HandleRequestL( ESatTsyNetStatus );
+	// Check if guardians should be activated
+	iMessageManager->HandleRequestL( ESatTsyCallControlActivation );
+	//Check if the SIM card suppords USSD tlv's in the call control envelopes
+	iMessageManager->HandleRequestL( ESatTsyUssdControlActivation );
+	// Get the default bearer data
+	iMessageManager->HandleRequestL( ESatTsyGetBearerCapability );
+#endif //USING_CTSY_DISPATCHER
+	// Notify Licencee SIM ATK TSY that we are ready to receive messages
+	iMessageManager->HandleRequestL( ESatTsyReady );
+	// Get SMS Point to Point Data Download support status
+    iMessageManager->HandleRequestL( ESatTsySmsPpDdlStatus );
+	
+	TFLOGSTRING("CSAT: CSatTsy::ConstructL, end of method");
+    }
+    
+// -----------------------------------------------------------------------------
+// CSatTsy::ExtFunc
+// TRAP's all CSatTsy related Etel API requests in cases that they fail.
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::ExtFunc
+		( 
+		const TTsyReqHandle aTsyReqHandle,  
+		const TInt aIpc,           
+		const TDataPackage& aPackage        
+		)
+    {
+    TFLOGSTRING3("CSAT: CSatTsy::ExtFunc ReqHandle=%d IPC=%d", aTsyReqHandle, 
+        aIpc);
+	TInt ret( KErrNone );
+
+    // Some SAT functions need trapping so we use two level function where 
+    // first one is just a trap harness
+    
+    // It is responsibility of IPC handling functions to always handle 
+    // calling ReqComplete, ( it must either call it, or arrange it to 
+    // be called in some way ), except in the case of Leave. It is also 
+    // assumed that if after IPC handling function has called ReqComplete, 
+    // then it doesn't Leave.
+    TInt trapError( KErrNone );
+
+    TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ) );
+
+    if ( KErrNone != trapError )
+        {
+        TFLOGSTRING2("CSAT: CSatTsy::ExtFunc, trapError: %d", trapError );
+        ReqCompleted( aTsyReqHandle, trapError );
+        }
+	else if ( KErrNone != ret )
+        {
+        TFLOGSTRING2("CSAT: CSatTsy::ExtFunc, ret: %d", ret);
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else										
+	    {
+        // Reset last Tsy request type
+        iReqHandleType = ESatReqHandleUnknown;
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::SaveReqHandle
+// Saves the request handle
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::SaveReqHandle
+		( 
+		const TTsyReqHandle aTsyReqHandle,  
+        const TSatRequestTypes aSatRequestType
+		)
+    {
+    TFLOGSTRING3("CSAT: CSatTsy::SaveReqHandle ReqHandle=%d ReqHandleType=%d", 
+        aTsyReqHandle, aSatRequestType);
+    
+    // Don't save the request handle if the type is unknown.
+    if ( ESatReqHandleUnknown != aSatRequestType )
+        {
+        iSatReqHandleStore->SetTsyReqHandle( aSatRequestType, aTsyReqHandle );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::ReqModeL
+// Mode service function used by ETel, request mode. ReqModeL is called from 
+// the server's CTelObject::ReqAnalyserL in order to check the type of request
+// it has.
+// -----------------------------------------------------------------------------
+//
+CTelObject::TReqMode CSatTsy::ReqModeL
+		( 
+		const TInt aIpc    
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::ReqModeL.");
+    CTelObject::TReqMode ret = 0;
+
+    switch ( aIpc )
+        {
+        // Multiple Completion Services
+        case ESatNotifyDisplayTextPCmd:
+        case ESatNotifyGetInkeyPCmd:
+        case ESatNotifyGetInputPCmd:
+        case ESatNotifyPlayTonePCmd:
+        case ESatNotifySetUpMenuPCmd:
+        case ESatNotifySelectItemPCmd:
+        case ESatNotifySendSmPCmd:
+        case ESatNotifySendSsPCmd:
+        case ESatNotifySendUssdPCmd:
+        case ESatNotifySetUpCallPCmd:
+        case ESatNotifyRefreshPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:        
+        case ESatNotifyCallControlRequest:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyPollingIntervalPCmd:
+        case ESatNotifyPollingOffPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyReceiveDataPCmd:               
+            {
+            ret = KReqModeMultipleCompletionEnabled;
+            break;
+            }
+        // Non-flow Controlled Services
+        case ESatTerminalRsp:
+        case ESatMenuSelection:
+        case ESatEventDownload:
+        case ESatGetIcon:
+        case ESatGetImageInstance:
+        case ESatGetClut:
+        case ESatGetMeSideSatProfile:
+        case ESatClientSatProfileIndication:
+        case ESatSendMessageNoLogging:
+            {
+            break;
+            }
+        default:
+            {
+            TFLOGSTRING2("CSAT: CSatTsy::ReqModeL unsupported IPC %d", aIpc);
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::CancelService
+// Cancels Sat requests
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::CancelService
+		( 
+		const TInt aIpc,           
+		const TTsyReqHandle aTsyReqHandle   
+		)
+    {
+    TFLOGSTRING3("CSAT: CSatTsy::CancelService ReqHandle=%d IPC=%d", 
+        aTsyReqHandle, aIpc);
+    TInt ret( KErrNotSupported );
+
+	// When the clients close their sub-sessions (eg. by calling RLine::Close), 
+    // they may not have cancelled all their outstanding asynchronous requests 
+    // before closing.  It is up to the ETel server to clean up in this 
+    // situation, so the server will find the list of outstanding requests 
+    // related to that sub-session object and pass these outstanding IPC 
+    // request numbers, one at a time, to the CancelService method in the TSY.
+
+    switch ( aIpc )
+        {
+        case ESatTerminalRsp:
+        case ESatMenuSelection:
+        //case ESatSendMessageNoLogging:
+            {
+            ret = KErrNone;
+            break;
+            }
+        case ESatNotifyCallControlRequest:
+		case ESatNotifyMoSmControlRequest:        
+        case ESatNotifyDisplayTextPCmd:
+        case ESatNotifyGetInkeyPCmd:
+        case ESatNotifyGetInputPCmd:
+        case ESatNotifyPlayTonePCmd:
+        case ESatNotifySetUpMenuPCmd:
+        case ESatNotifySelectItemPCmd:
+        case ESatNotifySetUpCallPCmd:
+        case ESatNotifySendSmPCmd:
+        case ESatNotifySendSsPCmd:
+        case ESatNotifySendUssdPCmd:   
+        case ESatNotifyRefreshPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyReceiveDataPCmd:       
+            {
+            ret = iSatNotificationsTsy->CancelService ( aIpc, aTsyReqHandle );
+            break;
+            }
+        
+        case ESatEventDownload:
+            {
+            ret = iSatEventDownloadTsy->CancelService ( aIpc, aTsyReqHandle );
+            break;
+            }
+        
+        // Following functions are not supported, hence they are completed
+        // by DoExtFuncL function at once.
+        // ETel server will not pass cancel function to SAT, because the 
+        // request is not 'ON' in ETel.
+        // They are listed here for future reference.
+        //
+
+        // ESatNotifyMoSmControlRequest
+        // ESatEventDownload
+        // ESatGetMeSideSatProfile
+
+        default:
+            {
+            TFLOGSTRING2("CSAT: CSatTsy::CancelService invalid IPC %d", aIpc);
+            ret = KErrGeneral; 
+            break;           	
+            }
+        }
+    return ret;
+
+    }
+        
+// -----------------------------------------------------------------------------
+// CSatTsy::RegisterNotification
+// ETel Server subscribe notifications from NOS. RegisterNotification is called
+// when the server recognises that this notification is being posted for the 
+// first time on this sub-session object. It enables the TSY to "turn on" any 
+// regular notification messages that it may receive from the phone.
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::RegisterNotification
+		( 
+		const TInt aIpc    // IPC number of request
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::RegisterNotification.");
+    // Initialize return value
+    TInt ret( KErrNone );
+
+    switch ( aIpc )
+        {
+        case ESatNotifyDisplayTextPCmd:
+        case ESatNotifyGetInkeyPCmd:
+        case ESatNotifyGetInputPCmd:
+        case ESatNotifyPlayTonePCmd:
+        case ESatNotifySetUpMenuPCmd:
+        case ESatNotifySelectItemPCmd:
+        case ESatNotifySendSmPCmd:
+        case ESatNotifySendSsPCmd:
+        case ESatNotifySendUssdPCmd:
+        case ESatNotifySetUpCallPCmd:
+        case ESatNotifyRefreshPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:        
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyCallControlRequest:
+		case ESatNotifySendDtmfPCmd:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyReceiveDataPCmd:      
+            {
+            // Ret already set to KErrNone
+            break;
+            }
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2("CSAT: CSatTsy::RegisterNotification, \
+                Unsupported IPC %d", aIpc);
+            ret = KErrNotSupported;
+            break;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::DeregisterNotification
+// ETel server unsubscribe notifications from NOS. DeregisterNotification is 
+// called when the server recognizes that this notification will not be posted 
+// again because the last client to have a handle on this sub-session object  
+// has just closed the handle. It enables the TSY to "turn off" any regular 
+// notification messages that it may receive from the phone.
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::DeregisterNotification
+		( 
+		const TInt aIpc    // IPC number of request
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::DeregisterNotification.");
+    // Initialize return value
+    TInt ret( KErrNone );
+
+    switch ( aIpc )
+        {
+        case ESatNotifyDisplayTextPCmd:
+        case ESatNotifyGetInkeyPCmd:
+        case ESatNotifyGetInputPCmd:
+        case ESatNotifyPlayTonePCmd:
+        case ESatNotifySetUpMenuPCmd:
+        case ESatNotifySelectItemPCmd:
+        case ESatNotifySendSmPCmd:
+        case ESatNotifySendSsPCmd:
+        case ESatNotifySendUssdPCmd:
+        case ESatNotifySetUpCallPCmd:
+        case ESatNotifyRefreshPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:        
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyCallControlRequest:
+		case ESatNotifySendDtmfPCmd:		
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyReceiveDataPCmd:       
+            {
+            // Ret already set to KErrNone
+            break;
+            }
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2("CSAT: CSatTsy::DeregisterNotification, \
+                Unsupported IPC %d", aIpc);
+            ret = KErrNotSupported;
+            break;            	
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC. NumberOfSlotsL is called 
+// by the server when it is registering a new notification. It enables the TSY 
+// to tell the server how many buffer slots to allocate for "repost 
+// immediately" notifications that may trigger before clients collect them.
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::NumberOfSlotsL
+		( 
+		const TInt aIpc    // IPC number of request
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::NumberOfSlotsL.");
+    TInt numberOfSlots( 1 );
+
+    switch ( aIpc )
+        {
+        case ESatNotifyDisplayTextPCmd:
+            {
+            numberOfSlots = KSatNotifyDisplayTextPCmdSlots;
+            break;
+            }
+        case ESatNotifyGetInkeyPCmd:
+            {
+            numberOfSlots = KSatNotifyGetInkeyPCmdSlots;
+            break;
+            }
+        case ESatNotifyGetInputPCmd:
+            {
+            numberOfSlots = KSatNotifyGetInputPCmdSlots;
+            break;
+            }
+        case ESatNotifyPlayTonePCmd:
+            {
+            numberOfSlots = KSatNotifyPlayTonePCmdSlots;
+            break;
+            }
+        case ESatNotifySetUpMenuPCmd:
+            {
+            numberOfSlots = KSatNotifySetUpMenuPCmdSlots;
+            break;
+            }
+        case ESatNotifySelectItemPCmd:
+            {
+            numberOfSlots = KSatNotifySelectItemPCmdSlots;
+            break;
+            }
+        case ESatNotifySendSmPCmd:
+            {
+            numberOfSlots = KSatNotifySendSmPCmdSlots;
+            break;
+            }
+        case ESatNotifySendSsPCmd:
+            {
+            numberOfSlots = KSatNotifySendSsPCmdSlots;
+            break;
+            }
+        case ESatNotifySendUssdPCmd:
+            {
+            numberOfSlots = KSatNotifySendUssdPCmdSlots;
+            break;
+            }
+        case ESatNotifySetUpCallPCmd:
+            {
+            numberOfSlots = KSatNotifySetUpCallPCmdSlots;
+            break;
+            }
+        case ESatNotifyRefreshPCmd:
+            {
+            numberOfSlots = KSatNotifyRefreshPCmdSlots;
+            break;
+            }
+        case ESatNotifyProactiveSimSessionEnd:
+            {
+            numberOfSlots = KSatNotifyProactiveSimSessionEndSlots;
+            break;
+            }
+        case ESatNotifySetUpIdleModeTextPCmd:
+            {
+            numberOfSlots = KSatNotifySetUpIdleModeTextPCmdSlots;
+            break;
+            }
+        case ESatNotifyLaunchBrowserPCmd:
+            {
+            numberOfSlots = KSatNotifyLaunchBrowserSlots;
+            break;
+            }
+        case ESatNotifyCallControlRequest:
+            {
+            numberOfSlots = KSatNotifyCallControlRequestSlots;
+            break;
+            }
+        case ESatNotifySendDtmfPCmd:
+            {
+            numberOfSlots = KSatNotifySendDtmfSlots;
+            break;
+            }
+        case ESatNotifySetUpEventListPCmd:
+            {
+            numberOfSlots = KSatNotifySetUpEventListSlots;
+            break;
+            }
+        case ESatNotifyLanguageNotificationPCmd:
+        	{
+            numberOfSlots = KSatNotifySetUpEventListSlots;
+            break;
+        	}
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:							
+	    case ESatNotifyCloseChannelPCmd:							
+	    case ESatNotifyReceiveDataPCmd:						
+	    case ESatNotifySendDataPCmd:								
+	    case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyMoSmControlRequest:
+        	{
+            numberOfSlots = KSatNotifySetUpEventListSlots;
+            break;
+        	}
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:
+        	{
+        	// Default is set to one
+        	break;        	
+        	}
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2("CSAT: CSatTsy::NumberOfSlotsL, Unsupported IPC %d", 
+                aIpc);
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        }  
+    return numberOfSlots;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::ReqCompleted
+// Completes requests to ETel
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::ReqCompleted
+		( 
+		TTsyReqHandle aReqHandle,
+        TInt aRet 
+        )
+	{
+	TFLOGSTRING2("CSAT: CSatTsy::ReqCompleted, ReqHandle=%d ", aReqHandle);
+#ifdef USING_CTSY_DISPATCHER
+	CTelObject::ReqCompleted( aReqHandle, aRet );
+#else
+	ReqCompleted( aReqHandle, aRet );
+#endif //USING_CTSY_DISPATCHER
+	}
+	
+// -----------------------------------------------------------------------------
+// CSatTsy::StoreCallConnectedEvent
+// Cache call connected envelope to CSatNotifySetUpCall class
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::StoreCallConnectedEvent
+        (
+        const TDesC8& aEnvelope
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::StoreCallConnectedEvent");
+    iSatNotificationsTsy->SatNotifySetUpCall()->StoreCallConnectedEvent( 
+        aEnvelope );
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::SetSetUpCallStatus
+// Set Status of SetUpCall command to the CSatEventDownloadTsy class
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::SetSetUpCallStatus
+        (
+        const TBool aStatus
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::SetSetUpCallStatus");
+    iSatEventDownloadTsy->SetSetUpCallStatus( aStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::SetUpEventList
+// Sets events that are reported to NAA
+// -----------------------------------------------------------------------------
+//
+void CSatTsy::SetUpEventList
+        (
+        TUint32 aEvents     // events to be monitored
+        ) 
+    {
+    TFLOGSTRING("CSAT: CSatTsy::SetUpEventList");
+    iSatEventDownloadTsy->SetUpEventList( aEvents );
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::MessageManager
+// This method returns a pointer to iMessageManager object.
+// -----------------------------------------------------------------------------
+//
+CMmMessageManagerBase* CSatTsy::MessageManager
+        (
+        // none
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::MessageManager");
+    return iMessageManager;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::SatCCTsy
+// This method returns a pointer to Call Control TSY object.
+// -----------------------------------------------------------------------------
+//
+CSatCCTsy* CSatTsy::SatCCTsy
+        (
+        // none
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::SatCCTsy");
+    return iSatCCTsy;
+    }  
+
+// -----------------------------------------------------------------------------
+// CSatTsy::GetSatReqHandleStore
+// Returns iSatReqHandleStore pointer and control to calling object
+// -----------------------------------------------------------------------------
+//
+CSatTsyReqHandleStore* CSatTsy::GetSatReqHandleStore
+	    (
+	    //none
+	    )
+	{
+    TFLOGSTRING("CSAT: CSatTsy::GetSatReqHandleStore");
+	return iSatReqHandleStore;
+	}
+
+// -----------------------------------------------------------------------------
+// CSatTsy::GetReqHandleType
+// Returns pointer to request handle type
+// -----------------------------------------------------------------------------
+//
+CSatTsy::TSatRequestTypes* CSatTsy::GetReqHandleType
+	    (
+	    //none
+	    )
+	{
+    TFLOGSTRING("CSAT: CSatTsy::GetReqHandleType");
+	return &iReqHandleType;
+	}
+
+// -----------------------------------------------------------------------------
+// CSatTsy::CompleteSendSmsMessage
+// Message from MMSMS side that message sending has been completed
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::CompleteSendSmsMessage
+        (
+        TInt aStatus 
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::CompleteSendSmsMessage");
+    
+    // Reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iSatNotificationsTsy->RequestHandleStore()->
+        ResetTsyReqHandle( CSatTsy::ESatSendMessageNoLoggingReqType );
+		
+	// In case the request was ongoing, continue..
+    if ( CSatTsy::ESatReqHandleUnknown != reqHandle )
+        {
+    	ReqCompleted( reqHandle, aStatus );
+        }
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSatTsy::IsMoSmControlBySimActivated
+// This method is required by CommonTSY, which needs to know whether the 
+// MoSmControlBySim is activated or not.
+// -----------------------------------------------------------------------------
+//
+TBool CSatTsy::IsMoSmControlBySimActivated
+		(
+		void
+		)
+    {
+    TFLOGSTRING("CSAT: CSatTsy::IsMoSmControlBySimActivated");
+    return iSatNotificationsTsy->IsMoSmControlActivated();
+    }
+
+#ifdef USING_CTSY_DISPATCHER
+    /**
+     * From MStkTsyCallOrigin 
+     * Dummy implementation for IsSimOriginatedCall function
+     *          
+     * @param aAddress The number whose origin is required.
+     * @return ETrue if call originates from a Proactive Command
+     */ 
+TBool CSatTsy::IsSimOriginatedCall
+			(
+			const TDesC8& aAddress
+			)
+	{
+	TFLOGSTRING("CSAT: CSatTsy::IsSimOriginatedCall");
+	TBool ret = EFalse;
+	if (iSatCCTsy)
+		{
+		ret = iSatCCTsy->HasProactiveOrigin(aAddress);
+		}
+	return ret;
+	}
+#endif //USING_CTSY_DISPATCHER
+
+// -----------------------------------------------------------------------------
+// CSatTsy::StoreProactiveAddress
+// Stores latest address of Send SS/Setup call proactive command to CSatCC
+// (other items were commented in a header). Method is also called when 
+// proactive session is over with parameter NULL.
+// -----------------------------------------------------------------------------
+//    
+void CSatTsy::StoreProactiveAddress
+        ( 
+        const TDesC8* aAddress 
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::StoreProactiveAddress");
+    iSatCCTsy->StoreAddressForCC( *aAddress );
+    }  
+    
+// -----------------------------------------------------------------------------
+// CSatTsy::SetTonNpi
+// Stores Ton Npi to CSatCC
+// -----------------------------------------------------------------------------
+//    
+void CSatTsy::SetTonNpi
+        ( 
+        const TUint8 aTonNpi 
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::SetTonNpi");
+    iSatCCTsy->SetTonNpiForSS( aTonNpi );
+    }  
+    
+// -----------------------------------------------------------------------------
+// CSatTsy::DoExtFuncL
+// Dispatch to correct SAT Tsy/function according to the IPC
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::DoExtFuncL
+		(
+		const TTsyReqHandle aTsyReqHandle,  
+		const TInt aIpc,           
+		const TDataPackage& aPackage	
+		)
+    {
+    TFLOGSTRING3("CSAT: CSatTsy::DoExtFuncL\t IPC:%d,\t Handle:%d",
+           aIpc, aTsyReqHandle);
+	TInt ret( KErrNone );
+
+	// Add here ALL supported Sat request types, and call either the correct 
+	//	Sat Tsy to handle the request, or a request directly here in CSatTsy.
+    switch ( aIpc )
+        {
+        // General
+        case ESatMenuSelection:
+            {
+            ret = MenuSelectionL( aTsyReqHandle, 
+				reinterpret_cast<RSat::TMenuSelectionV1Pckg*>( 
+				aPackage.Des1n() ) );
+            break;
+            }
+        case ESatSendMessageNoLogging:
+            {
+            SendMessageNoLogging( aPackage.Des1n(), aTsyReqHandle );
+            break;
+            }
+        // Icon
+        case ESatGetIcon:
+		case ESatGetImageInstance:
+		case ESatGetClut:
+            {
+            ret = iSatIconTsy->DoExtFuncL ( aTsyReqHandle, aIpc, aPackage );
+            break;
+            }
+        // Notifications
+        case ESatTerminalRsp:
+        case ESatNotifyCallControlRequest:
+        case ESatNotifyDisplayTextPCmd:
+        case ESatNotifyGetInkeyPCmd:
+        case ESatNotifyGetInputPCmd:
+        case ESatNotifyPlayTonePCmd:
+        case ESatNotifySetUpMenuPCmd:
+        case ESatNotifySelectItemPCmd:
+        case ESatNotifySendSmPCmd:
+        case ESatNotifySendSsPCmd:
+        case ESatNotifySendUssdPCmd:
+        case ESatNotifySetUpCallPCmd:
+		case ESatNotifyRefreshPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyLocalInfoPCmd:   
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyReceiveDataPCmd:
+        case ESatNotifySmsPpDownload:
+        case ESatNotifyCbDownload:
+		case ESatNotifyMoSmControlRequest:                    
+            {
+            iSatNotificationsTsy->DoExtFuncL ( aTsyReqHandle, aIpc, aPackage );
+            break;
+            }
+        // EventDownload
+        case ESatEventDownload:
+            {
+            ret = iSatEventDownloadTsy->DoExtFuncL ( aTsyReqHandle, aIpc, 
+                aPackage );
+            break;
+            }
+        // Tsy internal requests
+        // Not supported
+        /*
+        case ESatGetMeSideSatProfile:
+        case ESatClientSatProfileIndication:
+        case ESatUsatClientReadyIndication:
+        case ESatGetProvisioningRefFile:
+        case ESatNotifyRefreshRequired:
+        // Notifications
+        case ESatNotifyPerformCardApduPCmd:
+        case ESatNotifyPowerOffCardPCmd:
+        case ESatNotifyPowerOnCardPCmd:
+        case ESatNotifyGetReaderStatusPCmd:
+        case ESatNotifyRunAtCommandPCmd:
+		case ESatNotifyPollingOff:
+		case ESatNotifyPollingInterval:
+        case ESatNotifyServiceSearchPCmd:
+        case ESatNotifyGetServiceInfoPCmd:
+        case ESatNotifyDeclareServicePCmd:
+        case ESatNotifyProactiveSimSessionStart:
+        case ESatNotifyTimerExpiration:
+        case ESatNotifyTimerMgmtPCmd:
+        case ESatNotifyTsyStateUpdated:
+        */
+
+		// Complete with KErrNotSupported, function not supported
+		default:
+			{
+			TFLOGSTRING2("CSAT: CSatTsy::DoExtFuncL unsupported IPC %d", aIpc);
+			ReqCompleted( aTsyReqHandle, KErrNotSupported );
+			break;
+			}
+        }
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::MenuSelection
+// Passes a menu selection response to DOS
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::MenuSelectionL
+		(
+		TTsyReqHandle   aTsyReqHandle,			
+		RSat::TMenuSelectionV1Pckg* aSelection	
+		) 
+    {
+    TFLOGSTRING("CSAT: CSatTsy::MenuSelection");
+    TInt ret( KErrNone );
+
+	// It should not be possible that the request is asked more than once at 
+	// time, therefore we do not need to check whether it is already ongoing
+
+	RSat::TMenuSelectionV1& selectionV1 = ( *aSelection ) ();
+	TFLOGSTRING3("CSAT:MenuSelection, iItemId %x, Help: %c", 
+		selectionV1.iItemId, selectionV1.iHelp );
+
+    TTlv tlvSpecificData;
+    
+    tlvSpecificData.Begin( KBerTlvMenuSelectionTag );
+    tlvSpecificData.AddTag( KTlvDeviceIdentityTag );
+    tlvSpecificData.AddByte( KKeypad );
+    tlvSpecificData.AddByte( KSim );
+    tlvSpecificData.AddTag( KTlvItemIdentifierTag );
+    tlvSpecificData.AddByte( selectionV1.iItemId );
+
+	// If user has requested help, add tag.
+    if ( RSat::EHelpRequested == selectionV1.iHelp )
+        {
+        tlvSpecificData.AddTag( KTlvHelpRequestTag );
+        }
+
+	// Pack parameter for DOS call.
+    TPtrC8 berTlv = tlvSpecificData.End();
+	CSatDataPackage dataPackage;
+	dataPackage.PackData( &berTlv );
+
+	ret = iMessageManager->HandleRequestL( ESatMenuSelection, &dataPackage );
+
+	if ( KErrNone == ret )
+        {
+    	// We must complete the request to the client right away, as an
+    	// indication that the request has been handled
+    	ReqCompleted( aTsyReqHandle, ret );    
+        }
+    
+    return ret; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSatTsy::SendMessageNoLogging
+// Called by ETel server, passes SMS message to MMSMS
+// -----------------------------------------------------------------------------
+//
+TInt CSatTsy::SendMessageNoLogging
+        (
+        TDes8* aMsg,           
+        TTsyReqHandle   aTsyReqHandle   
+        )
+    {
+    TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging");
+    TInt ret( KErrNone );
+	
+	// Save the request handle
+    SaveReqHandle( aTsyReqHandle, ESatSendMessageNoLoggingReqType );
+	
+    RSat::TSatSmsV1Pckg* aPckg = reinterpret_cast<RSat::TSatSmsV1Pckg*>( 
+        aMsg );
+    RSat::TSatSmsV1& satSmsV1 = ( *aPckg ) ();
+
+    // SMS GSM extension checks that SCA length is not over the max limit
+    // that SMS allows
+
+    // Check that we have a SCA address
+    if ( 0x0 < satSmsV1.iServiceCenter.iTelNumber.Length() )
+        {
+        // SCA number conversion from unicode to GSM 3.40 format 
+        // is done by MMSMS dll
+
+        // Set SCA pointer
+        TDes16* sca;
+        sca = &satSmsV1.iServiceCenter.iTelNumber;
+
+        // Type of Number, mapping from ETelSat format to MMETel format
+        RMobilePhone::TMobileTON numberType;
+        
+        switch ( satSmsV1.iServiceCenter.iTypeOfNumber )
+            {
+            case RSat::ETypeOfNumberNotSet:
+            case RSat::EUnknownNumber:
+            	{	
+                numberType = RMobilePhone::EUnknownNumber;
+                break;
+            	}
+            case RSat::EInternationalNumber:
+            	{
+                numberType = RMobilePhone::EInternationalNumber;
+                break;
+            	}
+            case RSat::ENationalNumber:
+            	{
+                numberType = RMobilePhone::ENationalNumber;
+                break;
+            	}
+            case RSat::ENetworkSpecificNumber:
+            	{
+                numberType = RMobilePhone::ENetworkSpecificNumber;
+                break;
+            	}
+            case RSat::EDedicatedNumber:
+            	{
+                numberType = RMobilePhone::ESubscriberNumber;
+                break;
+            	}
+            default:
+            	{
+                // Unknown or invalid Type of Number
+                numberType = RMobilePhone::EUnknownNumber;
+                break;
+            	}
+            }
+
+        // Numbering Plan, mapping from ETelSat format to MMETel format
+        RMobilePhone::TMobileNPI numberPlan;
+        switch ( satSmsV1.iServiceCenter.iNumberPlan )
+            {
+            case RSat::ENumberingPlanNotSet:
+            case RSat::EUnknownNumberingPlan:
+            	{
+                numberPlan = RMobilePhone::EUnknownNumberingPlan;
+                break;
+            	}
+            case RSat::EIsdnNumberPlan:
+            	{
+                numberPlan = RMobilePhone::EIsdnNumberPlan;
+                break;
+            	}
+            case RSat::EDataNumberPlan:
+            	{
+                numberPlan = RMobilePhone::EDataNumberPlan;
+                break;
+            	}
+            case RSat::ETelexNumberPlan:
+            	{
+                numberPlan = RMobilePhone::ETelexNumberPlan;
+                break;
+            	}
+            case RSat::ENationalNumberPlan:
+            	{
+                numberPlan = RMobilePhone::ENationalNumberPlan;
+                break;
+            	}
+            case RSat::EPrivateNumberPlan:
+            	{
+                numberPlan = RMobilePhone::EPrivateNumberPlan;
+                break;
+            	}
+            default:
+            	{
+                // Unknown or invalid Numbering Plan
+                numberPlan = RMobilePhone::EUnknownNumberingPlan;
+                break;
+            	}
+            }
+
+        // SMS message, Packet Data Unit
+        TDes8* pdu;
+        pdu = &satSmsV1.iBuf;
+
+        // Call SMS sending function from MMSMS
+        ret = iSatService.SendSatMessage( *this, pdu, sca, &numberType, 
+                &numberPlan, EFalse, aTsyReqHandle );
+        TFLOGSTRING2("CSAT: CSatTsy::SendMessageNoLogging, \
+                SendSmsMessage done, ret: %x", ret);
+       
+       
+        }
+    else // SCA missing
+        {
+        ret = KErrGeneral;
+        TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging, SCA missing");
+        }
+
+    // Failure in sending of SAT SMS, call complete method
+    if ( KErrNone != ret )
+        {
+        CompleteSendSmsMessage( ret ); 
+        TFLOGSTRING("CSAT: CSatTsy::SendMessageNoLogging, \
+            failure sending SAT SMS, complete");
+        }
+    
+    return KErrNone;
+
+    }     
+
+MmMessageManagerCallback* CSatTsy::GetMessageManagerCallback()    
+{
+	return iMessageManager->GetMessageManagerCallback();
+}
+
+
+//  End of File