adaptationlayer/tsy/simatktsy_dll/src/satmessaging.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/simatktsy_dll/src/satmessaging.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,2258 @@
+/*
+* Copyright (c) 2007-2009 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: 
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "satmessaging.h"       // csatmessaging class
+#include "satcc.h"              // sat call control class
+#include "sattimer.h"           // sat timer class
+#include "sateventdownload.h"   // sat event download class
+#include "satdatadownload.h"    // sat data download class
+#include "saticon.h"            // sat icon class
+#include "satmosmsctrl.h"       // sat mo sms control class
+#include "satnotifications.h"   // sat notifications class
+#include "ber_tlv.h"            // sat ber-tlv classes
+#include "satutil.h"            // sat utility class
+#include "satflightmodestatus.h"// sat flight mode status class
+#include "satnumberofslots.h"   // multimode tsy slot definitions
+
+#include <satcs.h>              // etel sat ipc request definitions
+#include <ctsy/serviceapi/cmmsmsutility.h>      // ton/npi constants, tsendsmsdataandattributes
+#include "cmmmessagerouter.h"   // cmessagerouter class of nokiatsy component
+#include <ctsy/pluginapi/cmmdatapackage.h>     // parameter packing
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>      // for ipc
+#include <tisi.h>               // isi message
+#include <infoisi.h>            // isa cellmo info server
+#include <uiccisi.h>            // UICC server
+
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "satmessagingtraces.h"
+#endif
+
+#if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
+#include <cmmsmstsy.h>          // sms functionality
+#define __TFLOGGER_H__
+#include <cmmphonetsy.h>
+
+#undef __TFLOGGER_H__
+#endif //NCP_COMMON_S60_VERSION_SUPPORT
+
+// EXTERNAL DATA STRUCTURES
+    //None
+
+// EXTERNAL FUNCTION PROTOTYPES
+    //None
+
+// CONSTANTS
+const TUint8 KHelp          = 1;
+const TUint8 KNoHelp        = 0;
+
+// MACROS
+    //None
+
+// LOCAL CONSTANTS AND MACROS
+    //None
+
+// MODULE DATA STRUCTURES
+    //None
+
+// LOCAL FUNCTION PROTOTYPES
+    //None
+
+// FORWARD DECLARATIONS
+    //None
+
+// ============================= LOCAL FUNCTIONS ===============================
+    //None
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::CTsySatMessaging
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+#if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
+CTsySatMessaging::CTsySatMessaging
+        (
+        CMmPhoneTsy*        aMmPhone,
+        CMmPhoNetSender*    aPnSend,
+        CMmPhoNetReceiver*  aPnReceive,
+        TName               aName
+        ) : CTsySatMessagingBase(),
+        iMmPhone( aMmPhone ),
+        iPnSend( aPnSend ),
+        iPnReceive( aPnReceive ),
+        iSatAppName( aName ),
+        iSendSmsTsyReqHandle( NULL )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_CTSYSATMESSAGING, "CTsySatMessaging::CTsySatMessaging" );
+    TFLOGSTRING("TSY: CTsySatMessaging::CTsySatMessaging");
+    /* None */
+    }
+#else
+CTsySatMessaging::CTsySatMessaging
+        (
+        CMmPhoNetSender*    aPnSend,
+        CMmPhoNetReceiver*  aPnReceive,
+        CMmMessageRouter* aRouter
+        )
+
+    {
+    OstTrace0( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_CTSYSATMESSAGING, "CTsySatMessaging::CTsySatMessaging" );
+
+        iPnSend = aPnSend;
+        iPnReceive = aPnReceive;
+        iRouter = aRouter;
+        iSendSmsTsyReqHandle = NULL;
+
+    TFLOGSTRING("TSY: CTsySatMessaging::CTsySatMessaging");
+    /* None */
+    }
+#endif //NCP_COMMON_S60_VERSION_SUPPORT
+
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::ConstructL()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_CONSTRUCTL, "CTsySatMessaging::ConstructL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::ConstructL");
+
+    // Create message handler object, to receive ISI messages from ISA CellMo
+    iSatMessHandler = CSatMessHandler::NewL( this, iPnSend );
+
+    // Phonet receiver has to know the SatMessHandler.
+    iPnReceive->SetSatMessHandler( iSatMessHandler );
+
+    // Initialize Flight Mode Status handler
+    iSatFlightModeStatus = CSatFlightModeStatus::NewL( iSatMessHandler, this );
+
+    // Initialize SAT Notifications objects
+    iNotifyMoSmControlRequest =
+        new( ELeave )CSatNotifyMoSmControlRequest( iSatMessHandler, this );
+    iNotifyDisplayText =
+        new( ELeave )CSatNotifyDisplayText( iSatMessHandler, this );
+    iNotifyGetInkey =
+        new( ELeave )CSatNotifyGetInkey( iSatMessHandler, this );
+    iNotifyGetInput =
+        new( ELeave )CSatNotifyGetInput( iSatMessHandler, this );
+    iNotifyPlayTone =
+        new( ELeave )CSatNotifyPlayTone( iSatMessHandler, this );
+    iNotifySetUpMenu =
+        new( ELeave )CSatNotifySetUpMenu( iSatMessHandler, this );
+    iNotifySelectItem =
+        new( ELeave )CSatNotifySelectItem( iSatMessHandler, this );
+    iNotifySendSm =
+        new( ELeave )CSatNotifySendSm( iSatMessHandler, this );
+    iNotifySendSs =
+        new( ELeave )CSatNotifySendSs( iSatMessHandler, this );
+    iNotifySendUssd =
+        new( ELeave )CSatNotifySendUssd( iSatMessHandler, this );
+    iNotifySetUpCall =
+        new( ELeave )CSatNotifySetUpCall( iSatMessHandler, this );
+    iNotifyRefresh =
+        new( ELeave )CSatNotifyRefresh( iSatMessHandler, this );
+    iNotifySimSessionEnd =
+        new( ELeave )CSatNotifySimSessionEnd( iSatMessHandler, this );
+    iNotifySetUpIdleModeText =
+        new( ELeave )CSatNotifySetUpIdleModeText( iSatMessHandler, this );
+    iNotifyLaunchBrowser =
+        new( ELeave )CSatNotifyLaunchBrowser( iSatMessHandler, this );
+    iNotifyCallControlRequest =
+        new( ELeave )CSatNotifyCallControlRequest( iSatMessHandler, this );
+    iNotifyPollInterval =
+        new( ELeave )CSatNotifyPollInterval( iSatMessHandler, this );
+    iNotifySendDtmf =
+        new( ELeave )CSatNotifySendDtmf( iSatMessHandler, this );
+    iNotifySetUpEventList =
+        new( ELeave )CSatNotifySetUpEventList( iSatMessHandler, this );
+    iNotifyPollingOff =
+        new( ELeave )CSatNotifyPollingOff( iSatMessHandler, this );
+    iNotifyLocalInfo =
+        new( ELeave )CSatNotifyLocalInfo( iSatMessHandler, this );
+    iNotifyTimerMgmt =
+        new( ELeave )CSatNotifyTimerMgmt( iSatMessHandler, this );
+    iNotifyMoreTime =
+        new( ELeave )CSatNotifyMoreTime( iSatMessHandler, this );
+    iNotifyOpenChannel =
+        new( ELeave )CSatNotifyOpenChannel( iSatMessHandler, this );
+    iNotifyLanguageNotification =
+        new( ELeave )CSatNotifyLanguageNotification( iSatMessHandler, this );
+    iNotifyGetChannelStatus =
+        new( ELeave )CSatNotifyGetChannelStatus( iSatMessHandler, this );
+    iNotifyCloseChannel =
+        new( ELeave )CSatNotifyCloseChannel( iSatMessHandler, this );
+    iNotifyReceiveData =
+        new( ELeave )CSatNotifyReceiveData( iSatMessHandler, this );
+    iNotifySendData =
+        new( ELeave )CSatNotifySendData( iSatMessHandler, this );
+
+    // Transaction id handling
+    iTransIdMsg = new( ELeave )TTransIdMessage();
+
+    // Initialize event download handler
+    iEventDownload = CSatEventDownload::NewL( iSatMessHandler, this );
+
+    // Initialize data download handler
+    iSatDataDownload = CSatDataDownload::NewL( iSatMessHandler, this );
+
+    // Initialize call control handler
+    iSatCC = CSatCC::NewL( iSatMessHandler, this );
+
+    // Initialize MO-SMS Control handler
+    iSatMoSmsCtrl = CSatMoSmsCtrl::NewL( iSatMessHandler, this );
+
+    // Initialize timer, this is used for implementing timer management
+    iSatTimer = CSatTimer::NewL( iSatMessHandler, this );
+
+    // Initialize SAT icon support implementation
+    iSatIcon = CSatIcon::NewL( iSatMessHandler, this );
+
+    // Request IMEI code. Needed in provide local info proactive command.
+    iSatMessHandler->InfoSerialNumberReadReq(
+        GetTransactionId(), INFO_SB_SN_IMEI_PLAIN );
+
+    // Request Network status
+    iSatMessHandler->NetCellInfoGetReq(
+        GetTransactionId() );
+
+    //Initalize flag, this is used to check if proactiveCommand is ongoing
+    iSatTimer->SetProactiveCommandOnGoingStatus( EFalse );
+
+    // Request access technology type
+    iSatMessHandler->NetRatReq( GetTransactionId() );
+
+#ifdef INFO_PP_SIM_OLD_POLL_INTERVAL
+    // Check old poll interval is supported by ME's Product Profile
+    iSatMessHandler->InfoPpReadReq( INFO_PP_SIM_OLD_POLL_INTERVAL );
+#endif
+
+#ifdef INFO_PP_ENHANCED_NETWORK_SELECTION
+    // Check INFO_PP_ENHANCED_NETWORK_SELECTION status in product profile
+    iSatMessHandler->InfoPpReadReq( INFO_PP_ENHANCED_NETWORK_SELECTION );
+#endif
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+#if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
+EXPORT_C CTsySatMessaging* CTsySatMessaging::NewL
+        (
+        CMmPhoneTsy*            aMmPhone,
+        CMmMessageRouterBase*   aRouter,
+        TName                   aName
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL" );
+
+    TFLOGSTRING("TSY: CTsySatMessaging::NewL");
+    // First check that given arguments are not NULL pointers
+    if ( ( NULL == aMmPhone ) || ( NULL == aRouter ) )
+        {
+        TFLOGSTRING("TSY: CTsySatMessaging::NewL, NULL pointers were given \
+            leaving!");
+        OstTrace0( TRACE_NORMAL, DUP2_CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL, NULL pointers were given leaving!" );
+
+        User::Leave( KErrArgument );
+        }
+    CMmPhoNetSender* pnSend = NULL;
+    CMmPhoNetReceiver* pnReceive = NULL;
+    // Get the ISI message router (to handle ISA CellMo messages)
+    CMmMessageRouter* licenseeMessageRouter =
+        static_cast<CMmMessageRouter*>( aRouter );
+    // Get the ISI message sender
+    pnSend = licenseeMessageRouter->GetPhoNetSender();
+    // Get the ISI message receivde
+    pnReceive = licenseeMessageRouter->GetPhoNetReceiver();
+
+    if ( ( NULL == pnSend ) || ( NULL == pnReceive ) )
+        {
+        // PhoNet is not correctly initialized. No conditions to survive.
+        // This may happen if LicenseeTSY stub is used with real SIM_ATK_TSY
+        TFLOGSTRING("TSY: CTsySatMessaging::NewL, Construction failed \
+            PhoNet is not initialized, leaving!");
+        OstTrace0( TRACE_NORMAL, DUP5_CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL, Construction failed PhoNet is not initialized, leaving!" );
+
+        User::Leave( KErrArgument );
+        }
+    // Create a SatMessaging session
+    CTsySatMessaging* subsession = new (ELeave) CTsySatMessaging( aMmPhone,
+        pnSend, pnReceive, aName );
+    CleanupStack::PushL( subsession );
+    subsession->ConstructL();
+    CleanupStack::Pop( subsession );
+    return subsession;
+    }
+#else
+EXPORT_C CTsySatMessaging* CTsySatMessaging::NewL
+        (
+        CMmMessageRouter*   aRouter
+        )
+    {
+    OstTrace0( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL" );
+
+    TFLOGSTRING("TSY: CTsySatMessaging::NewL");
+    // First check that given arguments are not NULL pointers
+    if ( NULL == aRouter )
+        {
+        TFLOGSTRING("TSY: CTsySatMessaging::NewL, NULL pointers were given \
+            leaving!");
+        OstTrace0( TRACE_NORMAL, DUP3_CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL, NULL pointers were given leaving!" );
+
+        User::Leave( KErrArgument );
+        }
+    CMmPhoNetSender* pnSend = NULL;
+    CMmPhoNetReceiver* pnReceive = NULL;
+    // Get the ISI message router (to handle ISA CellMo messages)
+
+    // Get the ISI message sender
+    pnSend = aRouter->GetPhoNetSender();
+    // Get the ISI message receivde
+    pnReceive = aRouter->GetPhoNetReceiver();
+
+    if ( ( NULL == pnSend ) || ( NULL == pnReceive ) )
+        {
+        // PhoNet is not correctly initialized. No conditions to survive.
+        // This may happen if LicenseeTSY stub is used with real SIM_ATK_TSY
+        TFLOGSTRING("TSY: CTsySatMessaging::NewL, Construction failed \
+            PhoNet is not initialized, leaving!");
+        OstTrace0( TRACE_NORMAL, DUP4_CTSYSATMESSAGING_NEWL, "CTsySatMessaging::NewL, Construction failed PhoNet is not initialized, leaving!" );
+
+        User::Leave( KErrArgument );
+        }
+    // Create a SatMessaging session
+    CTsySatMessaging* subsession = new (ELeave) CTsySatMessaging(
+        pnSend, pnReceive, aRouter );
+    CleanupStack::PushL( subsession );
+    subsession->ConstructL();
+    CleanupStack::Pop( subsession );
+    return subsession;
+    }
+#endif //NCP_COMMON_S60_VERSION_SUPPORT
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::~CTsySatMessaging
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CTsySatMessaging::~CTsySatMessaging()
+    {
+    OstTrace0( TRACE_NORMAL, DUP2_CTSYSATMESSAGING_CTSYSATMESSAGING, "CTsySatMessaging::~CTsySatMessaging" );
+    TFLOGSTRING("TSY: CTsySatMessaging::~CTsySatMessaging");
+
+    // Delete message handler object, SAT SMS sending
+    delete iSatMessHandler;
+
+    // Set pointer value to Null
+    if( iPnReceive )
+        {
+        iPnReceive->SetSatMessHandler( NULL );
+        }
+
+    // Delete internal components
+    delete iSatFlightModeStatus;
+    delete iTransIdMsg;
+    delete iEventDownload;
+    delete iSatDataDownload;
+    delete iSatCC;
+    delete iSatMoSmsCtrl;
+    delete iSatTimer;
+    delete iSatIcon;
+
+    // Delete Notifications objects
+    delete iNotifyMoSmControlRequest;
+    delete iNotifyDisplayText;
+    delete iNotifyGetInkey;
+    delete iNotifyGetInput;
+    delete iNotifyPlayTone;
+    delete iNotifySetUpMenu;
+    delete iNotifySelectItem;
+    delete iNotifySendSm;
+    delete iNotifySendSs;
+    delete iNotifySendUssd;
+    delete iNotifySetUpCall;
+    delete iNotifyRefresh;
+    delete iNotifySimSessionEnd;
+    delete iNotifySetUpIdleModeText;
+    delete iNotifyLaunchBrowser;
+    delete iNotifyCallControlRequest;
+    delete iNotifyPollInterval;
+    delete iNotifySendDtmf;
+    delete iNotifySetUpEventList;
+    delete iNotifyPollingOff;
+    delete iNotifyLocalInfo;
+    delete iNotifyTimerMgmt;
+    delete iNotifyMoreTime;
+    delete iNotifyOpenChannel;
+    delete iNotifyLanguageNotification;
+    delete iNotifyGetChannelStatus;
+    delete iNotifyCloseChannel;
+    delete iNotifyReceiveData;
+    delete iNotifySendData;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::OpenNewObjectByNameL
+// Opens a new object identified by a name.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTelObject* CTsySatMessaging::OpenNewObjectByNameL
+        (
+        const TDesC& /* aName */    // Name of the object
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_OPENNEWOBJECTBYNAMEL, "CTsySatMessaging::OpenNewObjectByNameL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::OpenNewObjectByNameL");
+    User::Leave( KErrNotSupported );
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::OpenNewObjectL
+// Opens a new object identified by new name. Can leave. Not in use.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTelObject* CTsySatMessaging::OpenNewObjectL
+        (
+        TDes& /*aNewName*/  // Name of the new object
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_OPENNEWOBJECTL, "CTsySatMessaging::OpenNewObjectL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::OpenNewObjectL");
+    User::Leave( KErrNotSupported );
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::ExtFunc
+// Command handler for ETel server messages. The IPC identifies
+// the command to be executed if supported.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::ExtFunc
+        (
+        const TTsyReqHandle aTsyReqHandle,  // Request handle
+        const TInt          aIpc,           // IPC number of request
+        const TDataPackage& aPackage        // Contains parameters for request
+        )
+    {
+    OstTraceExt2( TRACE_NORMAL, CTSYSATMESSAGING_EXTFUNC, "CTsySatMessaging::ExtFunc ReqHandle: %d IPC: %d", TInt(aTsyReqHandle), aIpc );
+
+    TFLOGSTRING3("TSY: CTsySatMessaging::ExtFunc ReqHandle=%d IPC=%d",
+        aTsyReqHandle, aIpc);
+    // some SAT functions need trapping, 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 after IPC handling function has called ReqComplete
+    // it doesn't Leave.
+    TInt trapError( KErrNone );
+    TRAP( trapError, DoExtFuncL( aTsyReqHandle, aIpc, aPackage ) );
+    if ( trapError != KErrNone )
+        {
+        ReqCompleted( aTsyReqHandle, trapError );
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::DoExtFuncL
+// Handles extended ETel SAT client requests, received from ExtFunc
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::DoExtFuncL
+        (
+        const TTsyReqHandle aTsyReqHandle,  // Request handle
+        const TInt          aIpc,           // IPC number of request
+        const TDataPackage& aPackage        // Contains parameters for request
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_DOEXTFUNCL, "CTsySatMessaging::DoExtFuncL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::DoExtFuncL");
+    TAny* dataPtr=aPackage.Ptr1();
+    TAny* dataPtr2=aPackage.Ptr2();
+    switch ( aIpc )
+        {
+        case ESatNotifyDisplayTextPCmd:
+            {
+            iNotifyDisplayText->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySelectItemPCmd:
+            {
+            iNotifySelectItem->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyGetInkeyPCmd:
+            {
+            iNotifyGetInkey->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyGetInputPCmd:
+            {
+            iNotifyGetInput->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyPlayTonePCmd:
+            {
+            iNotifyPlayTone->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySetUpMenuPCmd:
+            {
+            iNotifySetUpMenu->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySendSmPCmd:
+            {
+            iNotifySendSm->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySendSsPCmd:
+            {
+            iNotifySendSs->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySendUssdPCmd:
+            {
+            iNotifySendUssd->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySetUpCallPCmd:
+            {
+            iNotifySetUpCall->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyRefreshPCmd:
+            {
+            iNotifyRefresh->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyRefreshRequiredParam:
+            {
+            iNotifyRefresh->NotifyRefreshRequired( aTsyReqHandle,
+                aPackage.Des1n() );
+            break;
+            }
+        case ESatRefreshAllowed:
+            {
+            ReqCompleted( aTsyReqHandle,
+                iNotifyRefresh->RefreshAllowed( aPackage.Des1n() ) );
+            break;
+            }
+        case ESatNotifyProactiveSimSessionEnd:
+            {
+            iNotifySimSessionEnd->Notify( aTsyReqHandle, NULL );
+            break;
+            }
+        case ESatNotifySetUpIdleModeTextPCmd:
+            {
+            iNotifySetUpIdleModeText->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyLaunchBrowserPCmd:
+            {
+            iNotifyLaunchBrowser->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyCallControlRequest:
+            {
+            iNotifyCallControlRequest->Notify( aTsyReqHandle,
+                aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySendDtmfPCmd:
+            {
+            iNotifySendDtmf->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySetUpEventListPCmd:
+            {
+            iNotifySetUpEventList->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyOpenChannelPCmd:
+            {
+            iNotifyOpenChannel->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyCloseChannelPCmd:
+            {
+            iNotifyCloseChannel->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyReceiveDataPCmd:
+            {
+            iNotifyReceiveData->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifySendDataPCmd:
+            {
+            iNotifySendData->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatEventDownload:
+            {
+            iEventDownload->ExtFunc( aTsyReqHandle, aPackage );
+            break;
+            }
+        // All IPC functions could be done the same way as Notifies are done:
+        // a class instead of a bare function.
+        case ESatTerminalRsp:
+            {
+            TerminalResponse( REINTERPRET_CAST( RSat::TPCmd*, dataPtr ),
+                aPackage.Des2n(),
+                aTsyReqHandle );
+            break;
+            }
+        case ESatMenuSelection:
+            {
+            MenuSelection( aPackage.Des1n(), aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyCbDownload:
+            {
+            NotifyCbDownload( aPackage.Des1n(), aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySmsPpDownload:
+            {
+            NotifySmsPpDownload( aPackage.Des1n(), aTsyReqHandle );
+            break;
+            }
+        case ESatSendMessageNoLogging:
+            {
+            SendMessageNoLoggingL( aPackage.Des1n(),
+                REINTERPRET_CAST( TUint16*, dataPtr2 ),
+                aTsyReqHandle );
+            break;
+            }
+        case ESatGetIcon:
+            {
+            iSatIcon->GetIcon( REINTERPRET_CAST( TUint8*, dataPtr ),
+                REINTERPRET_CAST( RSat::TIcon*, dataPtr2 ),
+                aTsyReqHandle );
+            break;
+            }
+        case ESatGetImageInstance:
+            {
+            iSatIcon->GetImageInstance( aPackage.Des1n(),
+                aPackage.Des2n(), aTsyReqHandle );
+            break;
+            }
+        case ESatGetClut:
+            {
+            iSatIcon->GetClut(
+                REINTERPRET_CAST( RSat::TInstanceNumberAndOffset*, dataPtr ),
+                aPackage.Des2n(),
+                aTsyReqHandle);
+            break;
+            }
+        case ESatNotifyLanguageNotificationPCmd:
+            {
+            iNotifyLanguageNotification->Notify( aTsyReqHandle,
+                aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyLocalInfoPCmd:
+            {
+            iNotifyLocalInfo->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyGetChannelStatusPCmd:
+            {
+            iNotifyGetChannelStatus->Notify( aTsyReqHandle, aPackage.Des1n() );
+            break;
+            }
+        case ESatNotifyMoSmControlRequest:
+            {
+            iNotifyMoSmControlRequest->Notify( aTsyReqHandle,
+                aPackage.Des1n() );
+            break;
+            }
+        case ESatUsatClientReadyIndication:
+            {
+            UsatClientReadyIndication( aTsyReqHandle );
+            break;
+            }
+        // Set ret to KErrNotSupported, function not supported
+        default:
+            {
+            TFLOGSTRING2("TSY: CTsySatMessaging::DoExtFuncL unsupported IPC %d", aIpc);
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_DOEXTFUNCL, "CTsySatMessaging::DoExtFuncL unsupported IPC %d", aIpc );
+
+            ReqCompleted( aTsyReqHandle, KErrNotSupported );
+            break;
+            }
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::CancelService
+// Cancels the ongoing service
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::CancelService
+        (
+        const TInt          aIpc,           // IPC number of request
+        const TTsyReqHandle aTsyReqHandle   // Request handle
+        )
+    {
+    OstTraceExt2( TRACE_NORMAL, CTSYSATMESSAGING_CANCELSERVICE, "CTsySatMessaging::CancelService ReqHandle=%d, IPC=%d", TInt(aTsyReqHandle), aIpc );
+    TFLOGSTRING3("TSY: CTsySatMessaging::CancelService ReqHandle=%d IPC=%d",aTsyReqHandle, aIpc);
+    TInt ret( KErrNone );
+    switch ( aIpc )
+        {
+        case ESatNotifyDisplayTextPCmd:
+            {
+            ret = iNotifyDisplayText->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyGetInkeyPCmd:
+            {
+            ret = iNotifyGetInkey->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyGetInputPCmd:
+            {
+            ret = iNotifyGetInput->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyPlayTonePCmd:
+            {
+            ret = iNotifyPlayTone->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySetUpMenuPCmd:
+            {
+            ret =  iNotifySetUpMenu->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySelectItemPCmd:
+            {
+            ret = iNotifySelectItem->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySendSmPCmd:
+            {
+            ret = iNotifySendSm->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySendSsPCmd:
+            {
+            ret = iNotifySendSs->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySendUssdPCmd:
+            {
+            ret = iNotifySendUssd->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySetUpCallPCmd:
+            {
+            ret = iNotifySetUpCall->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyRefreshPCmd:
+            {
+            ret = iNotifyRefresh->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyRefreshRequiredParam:
+            {
+            ret = iNotifyRefresh->CancelRefreshRequiredNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyProactiveSimSessionEnd:
+            {
+            ret = iNotifySimSessionEnd->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySetUpIdleModeTextPCmd:
+            {
+            ret = iNotifySetUpIdleModeText->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyLaunchBrowserPCmd:
+            {
+            ret = iNotifyLaunchBrowser->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyCallControlRequest:
+            {
+            ret = iNotifyCallControlRequest->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySendDtmfPCmd:
+            {
+            ret = iNotifySendDtmf->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySetUpEventListPCmd:
+            {
+            ret = iNotifySetUpEventList->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyLanguageNotificationPCmd:
+            {
+            ret = iNotifyLanguageNotification->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyLocalInfoPCmd:
+            {
+            ret = iNotifyLocalInfo->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyOpenChannelPCmd:
+            {
+            iNotifyOpenChannel->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyMoSmControlRequest:
+            {
+            ret = iNotifyMoSmControlRequest->CancelNotification(
+                aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyCloseChannelPCmd:
+            {
+            iNotifyCloseChannel->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyReceiveDataPCmd:
+            {
+            iNotifyReceiveData->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifySendDataPCmd:
+            {
+            iNotifySendData->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatNotifyGetChannelStatusPCmd:
+            {
+            iNotifyGetChannelStatus->CancelNotification( aTsyReqHandle );
+            break;
+            }
+        case ESatEventDownload:
+            {
+            ret = iEventDownload->Cancel( aTsyReqHandle );
+            break;
+            }
+        case ESatTerminalRsp:
+        case ESatMenuSelection:
+        case ESatSendMessageNoLogging:
+        case ESatUsatClientReadyIndication:
+            {
+            ret = KErrNone;
+            break;
+            }
+        // Following functions are not supported, hence they are completed
+        // by DoExtFuncL function at once.
+        // ETel server will not pass cancel function to MMSAT, because the
+        // request is not 'ON' in ETel.
+        // They are listed here for future reference.
+        //
+        // ESatGetMeSideSatProfile
+        default:
+            {
+            TFLOGSTRING2("TSY: CTsySatMessaging::CancelService invalid IPC %d",aIpc);
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_CANCELSERVICE, "CTsySatMessaging::CancelService invalid IPC %d", aIpc );
+
+            ret = KErrGeneral;
+            break;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::ReqModeL
+// ReqMode method for checking what modes this component supports
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTelObject::TReqMode CTsySatMessaging::ReqModeL
+        (
+        const TInt aIpc     // IPC number of request
+        )
+    {
+    OstTrace1( TRACE_NORMAL, CTSYSATMESSAGING_REQMODEL, "CTsySatMessaging::ReqModeL, IPC=%d", aIpc );
+    TFLOGSTRING2("TSY: CTsySatMessaging::ReqModeL, IPC = %d",aIpc);
+    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 ESatNotifyCallControlRequest:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyPollingIntervalPCmd:
+        case ESatNotifyPollingOffPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifyReceiveDataPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:
+            {
+            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:
+        case ESatUsatClientReadyIndication:
+            {
+            break;
+            }
+        default:
+            {
+            TFLOGSTRING2( "TSY: CTsySatMessaging::ReqModeL unsupported IPC %d", aIpc );
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_REQMODEL, "CTsySatMessaging::ReqModeL unsupported IPC %d", aIpc );
+
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::Init
+// Initializer method that is called by ETel Server
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::Init()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_INIT, "CTsySatMessaging::Init" );
+    TFLOGSTRING("TSY: CTsySatMessaging::Init");
+    // none
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::RegisterNotification
+// Register given command, checks if the given command is supported
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::RegisterNotification
+        (
+        const TInt aIpc     // IPC number of request
+        )
+    {
+    OstTrace1( TRACE_NORMAL, CTSYSATMESSAGING_REGISTERNOTIFICATION, "CTsySatMessaging::RegisterNotification, IPC = %d", aIpc );
+    TFLOGSTRING2("TSY: CTsySatMessaging::RegisterNotification, IPC = %d",aIpc);
+    // 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 ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyCallControlRequest:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifyReceiveDataPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:
+            // ret already set to KErrNone
+            break;
+        // Following notifications are not supported,
+        // hence listed here for future reference.
+        //
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2("TSY: CTsySatMessaging::RegisterNotification, unsupported IPC %d", aIpc);
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_REGISTERNOTIFICATION, "CTsySatMessaging::RegisterNotification unsupported IPC %d", aIpc );
+
+            ret = KErrNotSupported;
+            break;
+            }
+        }
+    return ret;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::DeregisterNotification
+// DeRegister given command, checks if the given command is supported
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::DeregisterNotification
+        (
+        const TInt aIpc     // IPC number of request
+        )
+    {
+    OstTrace1( TRACE_NORMAL, CTSYSATMESSAGING_DEREGISTERNOTIFICATION, "CTsySatMessaging::DeregisterNotification, IPC = %d", aIpc );
+    TFLOGSTRING2( "TSY: CTsySatMessaging::DeregisterNotification\
+        IPC = %d", aIpc );
+    // 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 ESatNotifyProactiveSimSessionEnd:
+        case ESatNotifySetUpIdleModeTextPCmd:
+        case ESatNotifyLaunchBrowserPCmd:
+        case ESatNotifyCallControlRequest:
+        case ESatNotifySendDtmfPCmd:
+        case ESatNotifySetUpEventListPCmd:
+        case ESatNotifyLanguageNotificationPCmd:
+        case ESatNotifyLocalInfoPCmd:
+        case ESatNotifyOpenChannelPCmd:
+        case ESatNotifyCloseChannelPCmd:
+        case ESatNotifyReceiveDataPCmd:
+        case ESatNotifySendDataPCmd:
+        case ESatNotifyGetChannelStatusPCmd:
+        case ESatNotifyMoSmControlRequest:
+        case ESatNotifyRefreshRequiredParam:
+        case ESatRefreshAllowed:
+            // ret already set to KErrNone
+            break;
+        // Following notifications are not supported,
+        // hence listed here for future reference.
+        //
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2("TSY: CTsySatMessaging::DeregisterNotification \
+            unsupported IPC %d", aIpc);
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_DEREGISTERNOTIFICATION, "CTsySatMessaging::DeregisterNotification unsupported IPC %d", aIpc );
+
+            ret = KErrNotSupported;
+            break;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NumberOfSlotsL
+// Returns number of slots to be used for given IPC
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::NumberOfSlotsL
+        (
+        const TInt aIpc        // IPC number of request
+        )
+    {
+    OstTrace1( TRACE_NORMAL, CTSYSATMESSAGING_NUMBEROFSLOTSL, "CTsySatMessaging::NumberOfSlotsL IPC %d", aIpc );
+    TFLOGSTRING2("TSY: CTsySatMessaging::NumberOfSlotsL IPC %d", aIpc);
+    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 value: 1 slot
+            break;
+        // Following notifications are not supported,
+        // hence listed here for future reference.
+        //
+        // For above, use numberOfSlots = 2
+        default:
+            {
+            // Unknown or invalid IPC
+            TFLOGSTRING2( "TSY: CTsySatMessaging::NumberOfSlotsL\
+                unsupported IPC %d", aIpc );
+            OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_NUMBEROFSLOTSL, "CTsySatMessaging::NumberOfSlotsL unsupported IPC %d", aIpc );
+
+            User::Leave( KErrNotSupported );
+            break;
+            }
+        }
+    return numberOfSlots;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetSatMessHandler
+// Returns pointer to the SatMessHandler instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatMessHandler* CTsySatMessaging::GetSatMessHandler()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETSATMESSHANDLER, "CTsySatMessaging::GetSatMessHandler" );
+    TFLOGSTRING("TSY:CTsySatMessaging::GetSatMessHandler");
+    // Pointer to SAT message handler
+    return iSatMessHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetSatFlightModeStatus
+// Returns pointer to the CSatFlightModeStatus instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatFlightModeStatus* CTsySatMessaging::GetSatFlightModeStatus()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETSATFLIGHTMODESTATUS, "CTsySatMessaging::GetSatFlightModeStatus" );
+    TFLOGSTRING("TSY:CTsySatMessaging::GetSatFlightModeStatus");
+    // Pointer to SAT flight mode status
+    return iSatFlightModeStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::CompleteSendSmsMessage
+// Completes a SAT Originated SMS sending request to Etel SAT client
+// with the corresponding outcome.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::CompleteSendSmsMessage
+        (
+        TInt aStatus  // Message sending status from MMSMS
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_COMPLETESENDSMSMESSAGE, "CTsySatMessaging::CompleteSendSmsMessage" );
+    TFLOGSTRING("TSY: CTsySatMessaging::CompleteSendSmsMessage, entered");
+    if ( iSendSmsTsyReqHandle )
+        {
+        ReqCompleted( iSendSmsTsyReqHandle, aStatus );
+        iSendSmsTsyReqHandle = NULL;
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::MenuSelection
+// Menu selection command handler from ETel SAT client application.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::MenuSelection
+        (
+        TDes8*          aSelection,     // Contains menu selection parameters
+        TTsyReqHandle   aTsyReqHandle   // Request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_MENUSELECTION, "CTsySatMessaging::MenuSelection" );
+    TFLOGSTRING("TSY:CTsySatMessaging::MenuSelection");
+    TInt ret( KErrNone );
+    RSat::TMenuSelectionV1Pckg* aPckg =
+            REINTERPRET_CAST( RSat::TMenuSelectionV1Pckg*, aSelection );
+    RSat::TMenuSelectionV1& selectionV1 = ( *aPckg ) ();
+    TFLOGSTRING3("TSY:CTsySatMessaging::MenuSelection, iItemId %x, Help: %c",
+        selectionV1.iItemId, selectionV1.iHelp );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_MENUSELECTION, "CTsySatMessaging::MenuSelection iItemId: %hhu", selectionV1.iItemId );
+    OstTrace1( TRACE_NORMAL, DUP2_CTSYSATMESSAGING_MENUSELECTION, "CTsySatMessaging::MenuSelection Help: %{THelpRequest}", selectionV1.iHelp );
+
+    // Creating the menu selection message
+    if ( selectionV1.iHelp == RSat::EHelpRequested )
+        {
+        // Help requested
+        iSatMessHandler->MenuSelectionInd(
+            GetTransactionId(),
+            selectionV1.iItemId, KHelp ); // KHelp: 1
+        }
+    else
+        {
+        // No help requested
+        iSatMessHandler->MenuSelectionInd(
+            GetTransactionId(),
+            selectionV1.iItemId, KNoHelp ); // KNoHelp: 0
+        }
+    ReqCompleted( aTsyReqHandle, ret );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifyCbDownload
+// Cell broadcast data download from ETel SAT client application. Not in use.
+// CellBroadcast DDL is handled in CSatDataDownload class.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::NotifyCbDownload
+        (
+        TDes8*          /*aPackage*/,     //package containing pointer to client
+        TTsyReqHandle   aTsyReqHandle     //tsy request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYCBDOWNLOAD, "CTsySatMessaging::NotifyCbDownload" );
+    TFLOGSTRING("TSY:CTsySatMessaging::NotifyCbDownload");
+    TInt ret( KErrNone );
+    ReqCompleted( aTsyReqHandle, ret );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifySmsPpDownload
+// Sms-Pp data download from ETel SAT client application. Not in use.
+// Sms-Pp DDL is handled in CSatDataDownload class.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::NotifySmsPpDownload
+        (
+        TDes8*          /*aPackage*/,   //package containing pointer to client
+        TTsyReqHandle   aTsyReqHandle   //tsy request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYSMSPPDOWNLOAD, "CTsySatMessaging::NotifySmsPpDownload" );
+    TFLOGSTRING("TSY:CTsySatMessaging::NotifySmsPpDownload");
+    TInt ret( KErrNone );
+    ReqCompleted( aTsyReqHandle, ret );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SendMessageNoLoggingL
+// Send SMS No Logging command handler from client application.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::SendMessageNoLoggingL
+        (
+        TDes8*          aMsg,           // Pointer to message
+        TUint16*        /*aMsgRef*/,    // Message reference
+        TTsyReqHandle   aTsyReqHandle   // Request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::SendMessageNoLoggingL");
+    TInt ret( KErrNone );
+    // Save Reqhandle for CompleteSendSmsMessage
+    iSendSmsTsyReqHandle = aTsyReqHandle;
+    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;
+
+        #if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
+        // Get SMS messaging class pointer for sending sms messages
+        CMmSmsTsy* mmSmsTsy = iMmPhone->SmsSession();
+        TFLOGSTRING2("TSY: CTsySatMessaging::SendMessageNoLoggingL, \
+            mmSmsTsy: %x", mmSmsTsy );
+        OstTrace1( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL, mmSmsTsy: %x", mmSmsTsy );
+
+        if ( mmSmsTsy ) // Check that SMS session exist
+            {
+            // Call SMS sending function from MMSMS
+            ret = mmSmsTsy->SendSatMessage( this, pdu, sca, &numberType,
+                &numberPlan, EFalse, aTsyReqHandle );
+            TFLOGSTRING2("TSY: CTsySatMessaging::SendMessageNoLoggingL, \
+                SendSmsMessage done, ret: %x", ret );
+            OstTrace1( TRACE_NORMAL, DUP2_CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL, SendSmsMessage done, ret: %d", ret );
+            }
+        else
+            {
+            // No SMS session.
+            ret = KErrNotReady;
+            TFLOGSTRING("TSY: CTsySatMessaging::SendMessageNoLoggingL, \
+            no SMS session!");
+            OstTrace0( TRACE_NORMAL, DUP3_CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL, no SMS session!" );
+            }
+        #else //NCP_COMMON_S60_VERSION_SUPPORT
+        // Deliver attributes to message handler by using
+        // TMobileSmsSendAttributesV1 class.
+        RMobileSmsMessaging::TMobileSmsSendAttributesV1 msgAttrib;
+
+        msgAttrib.iFlags = ( RMobileSmsMessaging::KSmsDataFormat |
+        RMobileSmsMessaging::KGsmServiceCentre |
+        RMobileSmsMessaging::KMoreToSend );
+
+        msgAttrib.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+
+        // if service center address length  > 20 digits plus "+" sign
+        if ( sca->Length() > ( KMaxAmountOfDigits + 1 ) )
+            {
+            ret = KErrArgument;
+            }
+        else
+            {
+            msgAttrib.iGsmServiceCentre.iTelNumber.Copy( *sca );
+            msgAttrib.iGsmServiceCentre.iTypeOfNumber = numberType;
+            msgAttrib.iGsmServiceCentre.iNumberPlan = numberPlan;
+
+            msgAttrib.iMore = EFalse;
+            // create package
+            CMmDataPackage package;
+
+            // structure for all sms parameters and data
+            TSendSmsDataAndAttributes sendData;
+
+            sendData.iAttributes = &msgAttrib;
+            sendData.iMsgData = pdu;
+            sendData.iIpc = EMmTsySmsSendSatMessage;
+
+            // Pack parameters
+            package.PackData( &sendData );
+
+            // send request to NTSY
+            ret = iRouter->ExtFuncL( EMmTsySmsSendSatMessage, &package );
+            }
+        #endif //NCP_COMMON_S60_VERSION_SUPPORT
+        }
+    else // SCA missing
+        {
+        ret = KErrGeneral;
+        TFLOGSTRING("TSY: CTsySatMessaging::SendMessageNoLoggingL, \
+        SCA missing");
+        OstTrace0( TRACE_NORMAL, DUP4_CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL, SCA missing" );
+
+        }
+    // Failure in sending of SAT SMS, call complete method
+    if ( KErrNone != ret )
+        {
+        CompleteSendSmsMessage( ret );
+        TFLOGSTRING("TSY: CTsySatMessaging::SendMessageNoLoggingL, \
+        failure sending SAT SMS, complete");
+        OstTrace0( TRACE_NORMAL, DUP5_CTSYSATMESSAGING_SENDMESSAGENOLOGGINGL, "CTsySatMessaging::SendMessageNoLoggingL, failure sending SAT SMS, complete" );
+
+        }
+    return ret;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::TerminalResponse
+// Terminal response command handler from ETel SAT client application.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::TerminalResponse
+        (
+        RSat::TPCmd*    aPCmd,          // SAT command identifier
+        TDes8*          aRsp,           // Response
+        TTsyReqHandle   aTsyReqHandle   // Request handle
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_TERMINALRESPONSE, "CTsySatMessaging::TerminalResponse" );
+    TFLOGSTRING("TSY: CTsySatMessaging::TerminalResponse");
+    TInt ret( KErrNone );
+    switch ( *aPCmd )
+        {
+        case RSat::EDisplayText:
+            ret = iNotifyDisplayText->TerminalResponse( aRsp );
+            break;
+        case RSat::EGetInkey:
+            ret = iNotifyGetInkey->TerminalResponse( aRsp );
+            break;
+        case RSat::EGetInput:
+            ret = iNotifyGetInput->TerminalResponse( aRsp );
+            break;
+        case RSat::EPlayTone:
+            ret = iNotifyPlayTone->TerminalResponse( aRsp );
+            break;
+        case RSat::ESetUpMenu:
+            ret = iNotifySetUpMenu->TerminalResponse( aRsp );
+            break;
+        case RSat::ESelectItem:
+            ret = iNotifySelectItem->TerminalResponse( aRsp );
+            break;
+        case RSat::ESendSm:
+            ret = iNotifySendSm->TerminalResponse( aRsp );
+            break;
+        case RSat::ESendSs:
+            ret = iNotifySendSs->TerminalResponse( aRsp );
+            break;
+        case RSat::ESendUssd:
+            ret = iNotifySendUssd->TerminalResponse( aRsp );
+            break;
+        case RSat::ESetUpCall:
+            ret = iNotifySetUpCall->TerminalResponse( aRsp );
+            break;
+        case RSat::ERefresh:
+            ret = iNotifyRefresh->TerminalResponse( aRsp );
+            break;
+        case RSat::ESetUpIdleModeText:
+            ret = iNotifySetUpIdleModeText->TerminalResponse(aRsp );
+            break;
+        case RSat::ELaunchBrowser:
+            ret = iNotifyLaunchBrowser->TerminalResponse( aRsp );
+            break;
+        case RSat::ESendDtmf:
+            ret = iNotifySendDtmf->TerminalResponse( aRsp );
+            break;
+        case RSat::ESetUpEventList:
+            ret = iNotifySetUpEventList->TerminalResponse( aRsp );
+            break;
+        case RSat::ELocalInfo:
+            ret = iNotifyLocalInfo->TerminalResponse( aRsp );
+            break;
+        case RSat::ELanguageNotification:
+            ret = iNotifyLanguageNotification->TerminalResponse( aRsp );
+            break;
+        case RSat::EOpenChannelCs:
+        case RSat::EOpenChannelGprs:
+        case RSat::EOpenChannelLocal:
+            ret = this->iNotifyOpenChannel->TerminalResponse( aRsp );
+            break;
+        case RSat::EGetChannelStatus:
+            ret = iNotifyGetChannelStatus->TerminalResponse( aRsp );
+            break;
+        case RSat::ECloseChannel:
+             ret = iNotifyCloseChannel->TerminalResponse( aRsp );
+            break;
+        case RSat::EReceiveData:
+            ret = iNotifyReceiveData->TerminalResponse( aRsp );
+            break;
+        case RSat::ESendData:
+            ret = iNotifySendData->TerminalResponse( aRsp );
+            break;
+        default:
+            TFLOGSTRING("TSY: CTsySatMessaging::TerminalResponse, \
+            PCmd not supported");
+            OstTrace0( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_TERMINALRESPONSE, "CTsySatMessaging::TerminalResponse, PCmd not supported" );
+
+            ret =  KErrGeneral;
+            break;
+        }
+    ReqCompleted( aTsyReqHandle, ret );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::PCmdReceivedL
+// Handles an incoming proactive command from ISA CellMo SIM server
+// Called by CSatMessHandler when it receives proactive command ISI msg
+// originated by ISA CellMo SIM server.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::PCmdReceivedL( const TIsiReceiveC& aIsiMessage )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_PCMDRECEIVEDL, "CTsySatMessaging::PCmdReceivedL" );
+    TFLOGSTRING("TSY: CTsySatMessaging::PCmdReceivedL");
+    CBerTlv berTlv;
+    berTlv.BerTlv( aIsiMessage );
+    CTlv commandDetails;
+    berTlv.TlvByTagValue( &commandDetails, KTlvCommandDetailsTag );
+    //set flag on to indicate that proactive command is ongoing
+    iSatTimer->SetProactiveCommandOnGoingStatus( ETrue );
+    // Routes to a suitable MessageReceived method, in order to
+    // process the PCmd ISI message.
+    switch( commandDetails.GetShortInfo( ETLV_TypeOfCommand ) )
+        {
+        case KDisplayText:
+            iNotifyDisplayText->MessageReceived( aIsiMessage );
+            break;
+        case KGetInkey:
+            iNotifyGetInkey->MessageReceived( aIsiMessage );
+            break;
+        case KGetInput:
+            iNotifyGetInput->MessageReceived( aIsiMessage );
+            break;
+        case KPlayTone:
+            iNotifyPlayTone->MessageReceived( aIsiMessage );
+            break;
+        case KSetUpMenu:
+            iNotifySetUpMenu->MessageReceived( aIsiMessage );
+            break;
+        case KSelectItem:
+            iNotifySelectItem->MessageReceived( aIsiMessage );
+            break;
+        case KSendShortMessage:
+            iNotifySendSm->MessageReceived( aIsiMessage );
+            break;
+        case KSendSs:
+            iNotifySendSs->MessageReceived( aIsiMessage );
+            break;
+        case KSendUssd:
+            iNotifySendUssd->MessageReceived( aIsiMessage );
+            break;
+        case KSetUpCall:
+            iNotifySetUpCall->MessageReceived( aIsiMessage );
+            break;
+        case KRefresh:
+            iNotifyRefresh->MessageReceived( aIsiMessage );
+            break;
+        case KSetUpIdleModeText:
+            iNotifySetUpIdleModeText->MessageReceived( aIsiMessage );
+            break;
+        case KPollInterval:
+            iNotifyPollInterval->MessageReceived( aIsiMessage );
+            break;
+        case KSendDtmf:
+            iNotifySendDtmf->MessageReceived( aIsiMessage );
+            break;
+        case KSetUpEventList:
+            iNotifySetUpEventList->MessageReceived( aIsiMessage );
+            break;
+        case KPollingOff:
+            iNotifyPollingOff->MessageReceived( aIsiMessage );
+            break;
+        case KProvideLocalInformation:
+            iNotifyLocalInfo->MessageReceived( aIsiMessage );
+            break;
+        case KTimerManagement:
+            iNotifyTimerMgmt->MessageReceived( aIsiMessage );
+            break;
+        case KMoreTime:
+            iNotifyMoreTime->MessageReceived( aIsiMessage );
+            break;
+        case KLaunchBrowser:
+            iNotifyLaunchBrowser->MessageReceived( aIsiMessage );
+            break;
+        case KLanguageNotification:
+            iNotifyLanguageNotification->MessageReceived( aIsiMessage );
+            break;
+        case KGetChannelStatus:
+            iNotifyGetChannelStatus->MessageReceived( aIsiMessage );
+            break;
+        case KOpenChannel:
+            iNotifyOpenChannel->MessageReceived( aIsiMessage );
+            break;
+        case KCloseChannel:
+            iNotifyCloseChannel->MessageReceived( aIsiMessage );
+            break;
+        case KReceiveData:
+            iNotifyReceiveData->MessageReceived( aIsiMessage );
+            break;
+        case KSendData:
+            iNotifySendData->MessageReceived( aIsiMessage );
+            break;
+        default:
+            {
+            TFLOGSTRING("TSY: CTsySatMessaging::PCmdReceivedL, PCmd not supported");
+            OstTrace0( TRACE_NORMAL, DUP1_CTSYSATMESSAGING_PCMDRECEIVEDL, "CTsySatMessaging::PCmdReceivedL, PCmd not supported" );
+
+            // If proactive command is not supported, terminal response
+            // with "Command is beyond ME's capabilities" information
+            // will be send. ProactiveCommandOngoing status will be set
+            // to EFalse in SendTerminalResponseL().
+            TBuf8<5> cmdDetails;
+            cmdDetails.Copy( commandDetails.Data() );
+            TTlv tlvSpecificData;
+            // Create General Result TLV here
+            tlvSpecificData.AddTag( KTlvResultTag );
+            // General result
+            tlvSpecificData.AddByte( KCommandBeyondMeCapabilities );
+            iSatMessHandler->UiccCatReqTerminalResponse(
+                cmdDetails,
+                tlvSpecificData.GetDataWithoutTopLevelTag() ,
+                aIsiMessage.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::TimerExpiration
+// Timer Expiration handler
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::TimerExpiration
+        (
+        TInt aTimerId,
+        TUint32 aTimerValue
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_TIMEREXPIRATION, "CTsySatMessaging::TimerExpiration" );
+    TFLOGSTRING("TSY: CTsySatMessaging::TimerExpiration");
+    TUint8 time[3] = {0, 0, 0};
+    TInt num[3];
+    num[0] = aTimerValue/3600;         //hours
+    num[1] = ( aTimerValue%3600 )/60;  //minutes
+    num[2] = ( aTimerValue%3600 )%60;  //seconds
+    for ( TInt i = 0; i < 3; i++)
+        {
+        //convert to semi-octet
+        time[i] = TSatUtility::ConvertToSemiOctet( num[i] );
+        }
+    return iSatMessHandler->TimerExpirationInd(
+            GetTransactionId(),
+            (TUint8)aTimerId,
+            time );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetSatTimer
+// Returns pointer to the SatTimer instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatTimer* CTsySatMessaging::GetSatTimer()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETSATTIMER, "CTsySatMessaging::GetSatTimer" );
+    // Pointer to SAT timer
+    return iSatTimer;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetNotifyRefresh
+// Returns pointer to the CSatNotifyRefresh instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatNotifyRefresh* CTsySatMessaging::GetNotifyRefresh()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETNOTIFYREFRESH, "CTsySatMessaging::GetNotifyRefresh" );
+    return iNotifyRefresh;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetDataDownload
+// Returns pointer to the CSatDataDownload instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatDataDownload* CTsySatMessaging::GetDataDownload()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETDATADOWNLOAD, "CTsySatMessaging::GetDataDownload" );
+    return iSatDataDownload;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetNotifyPollInterval
+// Returns pointer to the NotifyPollInterval instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatNotifyPollInterval* CTsySatMessaging::GetNotifyPollInterval()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETNOTIFYPOLLINTERVAL, "CTsySatMessaging::GetNotifyPollInterval" );
+    return iNotifyPollInterval;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetMoSmsCtrl
+// Returns pointer to the CSatMoSmsCtrl instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatMoSmsCtrl* CTsySatMessaging::GetMoSmsCtrl()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETMOSMSCTRL, "CTsySatMessaging::GetMoSmsCtrl" );
+    return iSatMoSmsCtrl;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetEventDownload
+// Returns pointer to the CSatEventDownload instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatEventDownload* CTsySatMessaging::GetEventDownload()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETEVENTDOWNLOAD, "CTsySatMessaging::GetEventDownload" );
+    return iEventDownload;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetNotifyPollingOff
+// Returns pointer to the NotifyPollingOff instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatNotifyPollingOff* CTsySatMessaging::GetNotifyPollingOff()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETNOTIFYPOLLINGOFF, "CTsySatMessaging::GetNotifyPollingOff" );
+    return iNotifyPollingOff;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetNotifyLocalInfo
+// Returns pointer to the NotifyLocalInfo instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatNotifyLocalInfo* CTsySatMessaging::GetNotifyLocalInfo()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETNOTIFYLOCALINFO, "CTsySatMessaging::GetNotifyLocalInfo" );
+    return iNotifyLocalInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::EventDownloadReceived
+// Processes ISI messages that are relevant for event download
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::EventDownloadReceived
+        (
+        const TIsiReceiveC& aIsiMessage //Event download message
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_EVENTDOWNLOADRECEIVED, "CTsySatMessaging::EventDownloadReceived" );
+    iEventDownload->MessageReceived( aIsiMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SetUpEventList
+// Set up requested events that have to be reported to the SIM
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::SetUpEventList
+        (
+        TUint32 aEvents //events to be monitored
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SETUPEVENTLIST, "CTsySatMessaging::SetUpEventList" );
+    iEventDownload->SetUpEventList( aEvents );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SessionEnd
+// Notifies client about end of session
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::SessionEnd
+        (
+        const TIsiReceiveC& aIsiMessage //message ending session
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SESSIONEND, "CTsySatMessaging::SessionEnd" );
+    iNotifySimSessionEnd->MessageReceived( aIsiMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifyClientAboutCallControlEvent
+// Notifies Etel SAT client about call control event
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::NotifyClientAboutCallControlEvent
+        (
+        TDesC&                  aAlphaId, //Alpha id of call control event
+        RSat::TControlResult    aResult
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYCLIENTABOUTCALLCONTROLEVENT, "CTsySatMessaging::NotifyClientAboutCallControlEvent" );
+    iNotifyCallControlRequest->CompleteNotification( aAlphaId, aResult );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifyClientAboutCallControlEventL
+// Notifies Etel SAT client about call control event
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::NotifyClientAboutCallControlEventL
+        (
+        const TUint8 aCcResult,
+        TPtrC8 aEnvelopeResponse
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYCLIENTABOUTCALLCONTROLEVENTL, "CTsySatMessaging::NotifyClientAboutCallControlEventL" );
+    iNotifyCallControlRequest->CompleteNotificationL( aCcResult, aEnvelopeResponse );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifyClientAboutGprsCallControlEvent
+// Notifies Etel SAT client about GPRS call control event
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::NotifyClientAboutGprsCallControlEvent
+        (
+        const TDesC&                aAlphaId,
+        const RSat::TControlResult  aResult
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYCLIENTABOUTGPRSCALLCONTROLEVENT, "CTsySatMessaging::NotifyClientAboutGprsCallControlEvent" );
+    iNotifyCallControlRequest->CompleteNotification(
+        aAlphaId,
+        aResult );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::NotifyClientAboutMoSmControlEvent
+// Notifies client about Mo-Sms control event
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::NotifyClientAboutMoSmControlEvent
+        (
+        TDesC&                  aAlphaId, //Alpha id of MO-SMS control event
+        RSat::TControlResult    aResult
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_NOTIFYCLIENTABOUTMOSMCONTROLEVENT, "CTsySatMessaging::NotifyClientAboutMoSmControlEvent" );
+    iNotifyMoSmControlRequest->CompleteNotification( aAlphaId, aResult );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetTransactionId
+// Get new transaction id
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TUint8 CTsySatMessaging::GetTransactionId()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETTRANSACTIONID, "CTsySatMessaging::GetTransactionId" );
+    return iTransIdMsg->GetTransactionId( );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SatReady
+// Sat ready indication
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::SatReady
+        (
+        TUint8 aMsg // Message to be retrieved
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SATREADY, "CTsySatMessaging::SatReady" );
+    return iPnReceive->SatReady( aMsg );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::ClearCCArrays
+// Clears the array containing call control event data, due to
+// a refresh PCmd.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::ClearCCArrays()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_CLEARCCARRAYS, "CTsySatMessaging::ClearCCArrays" );
+    iSatCC->ClearArraysForRefresh();
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::CallControlReceivedL
+// Processes ISI messages that are relevant for call control
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::CallControlReceivedL
+        (
+        const TIsiReceiveC& aIsiMessage
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_CALLCONTROLRECEIVEDL, "CTsySatMessaging::CallControlReceivedL" );
+    iSatCC->MessageReceivedL( aIsiMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::DataDownloadReceivedL
+// Processes ISI messages that are relevant for call control
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::DataDownloadReceivedL
+        (
+        const TIsiReceiveC& aIsiMessage
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_DATADOWNLOADRECEIVEDL, "CTsySatMessaging::DataDownloadReceivedL" );
+    iSatDataDownload->MessageReceivedL( aIsiMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::MoSmsControlReceived
+// Processes ISI messages that are relevant for MoSm control
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::MoSmsControlReceived
+        (
+        const TIsiReceiveC& aIsiMessage
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_MOSMSCONTROLRECEIVED, "CTsySatMessaging::MoSmsControlReceived" );
+    if ( iSatMoSmsCtrl->IsActivated() )
+        {
+        iSatMoSmsCtrl->MessageReceived( aIsiMessage );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::IsMoSmControlBySimActivated
+// This methods returns ETrue if MoSmControl
+// is activated. Otherwise, it returns EFalse
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CTsySatMessaging::IsMoSmControlBySimActivated()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_ISMOSMCONTROLBYSIMACTIVATED, "CTsySatMessaging::IsMoSmControlBySimActivated" );
+    return iSatMoSmsCtrl->IsActivated();
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetSatIcon
+// Returns pointer to the SatIcon instance
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CSatIcon* CTsySatMessaging::GetSatIcon()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETSATICON, "CTsySatMessaging::GetSatIcon" );
+    // Pointer to SAT timer
+    return iSatIcon;
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::StoreCallConnectedEvent
+// Cache call connected envelope
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::StoreCallConnectedEvent
+        (
+        const TDesC8& aEnvelope
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_STORECALLCONNECTEDEVENT, "CTsySatMessaging::StoreCallConnectedEvent" );
+    iNotifySetUpCall->StoreCallConnectedEvent( aEnvelope );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SetSetUpCallStatus
+// Updates the status of SetUpCall command in SatEventDownload instance.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::SetSetUpCallStatus
+        (
+        const TBool aStatus
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SETSETUPCALLSTATUS, "CTsySatMessaging::SetSetUpCallStatus" );
+    iEventDownload->SetSetUpCallStatus( aStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SetStatusOfUssdSupport
+// Set CSatCC internal flag according to EF-SimServiceTable.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::SetStatusOfUssdSupport
+        (
+        const TBool aStatus
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SETSTATUSOFUSSDSUPPORT, "CTsySatMessaging::SetStatusOfUssdSupport" );
+    iSatCC->SetStatusOfUssdSupport( aStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::SetTonNpi
+// Set CSatCC internal Ton and Npi
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::SetTonNpi
+        (
+        const TUint8 aTonNpi
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_SETTONNPI, "CTsySatMessaging::SetTonNpi" );
+    iSatCC->SetTonNpi( aTonNpi );
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::StoreSms
+// Request the storing of SMS from CommonTsy
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CTsySatMessaging::StoreSmsL
+        (
+        RMobileSmsStore::TMobileGsmSmsEntryV1& aSmsEntry
+        )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_STORESMSL, "CTsySatMessaging::StoreSmsL" );
+    #if ( NCP_COMMON_S60_VERSION_SUPPORT == S60_VERSION_32 )
+    RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsPckg( aSmsEntry );
+
+    // Pack data and forward request to DOS
+    TDesC8* data = reinterpret_cast<TDesC8*>( &smsPckg );
+
+    CMmDataPackage package;
+    package.PackData( &data, &aSmsEntry.iIndex );
+
+    TRAPD( ret, ret = iMmPhone->MessageManager()->HandleRequestL(
+        EMobilePhoneStoreWrite, &package ) );
+
+    // Return leave code or return status of method.
+    return ret;
+    #else
+    RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsPckg( aSmsEntry );
+    TInt ret = KErrNone;
+
+    // Pack data and forward request to DOS
+    TDesC8* data = reinterpret_cast<TDesC8*>( &smsPckg );
+
+    CMmDataPackage package;
+    package.PackData( &data, &aSmsEntry.iIndex );
+
+    ret = iRouter->ExtFuncL( EMobilePhoneStoreWrite, &package );
+
+    return ret;
+    #endif //NCP_COMMON_S60_VERSION_SUPPORT
+    }
+
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::UsatClientReadyIndication
+// Inform SIMSON that (U)SAT client has sent all notifications and is ready to
+// receive proactive commands or that flight mode is on and (U)SAT client cannot
+// receive proactive commands.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTsySatMessaging::UsatClientReadyIndication( TTsyReqHandle aTsyReqHandle )
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_USATCLIENTREADYINDICATION, "CTsySatMessaging::UsatClientReadyIndication" );
+    TFLOGSTRING("TSY: CTsySatMessaging::UsatClientReadyIndication");
+
+    // Set SAT ready flag in satmesshandler
+    iSatMessHandler->SetSatReadyStatus( ETrue );
+
+    // If UICC server is ready, send command to enable or disable proactive
+    // commands
+    if ( iSatMessHandler->GetTerminalProfileStatus() )
+        {
+        if ( ! iSatFlightModeStatus->FlightModeStatusValue() )
+            {
+            iSatMessHandler->UiccCatReq( UICC_CAT_ENABLE );
+            }
+        else
+            {
+            iSatMessHandler->UiccCatReq( UICC_CAT_DISABLE );
+            }
+        }
+
+    // Complete ReqHandle immediately for preventing blocking of Etel server
+    // Client do not care about return value
+    ReqCompleted( aTsyReqHandle, KErrNone );
+    }
+
+#if ( NCP_COMMON_S60_VERSION_SUPPORT >= S60_VERSION_50 )
+// -----------------------------------------------------------------------------
+// CTsySatMessaging::GetMessageRouter
+// Returns pointer to message router
+// (other items were commented in a header)
+// -----------------------------------------------------------------------------
+//
+CMmMessageRouter* CTsySatMessaging::GetMessageRouter()
+    {
+    OstTrace0( TRACE_NORMAL, CTSYSATMESSAGING_GETMESSAGEROUTER, "CTsySatMessaging::GetMessageRouter" );
+    return iRouter;
+    }
+#endif
+
+// ================= OTHER EXPORTED FUNCTIONS ==================================
+
+//  End of File