telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmCustomTsy.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 23 6b1d113cdff3
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmCustomTsy.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmCustomTsy.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,6912 +1,6912 @@
-// 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:
-//
-
-
-
-//  INCLUDE FILES
-#include "CMmCustomTsy.h"
-#include "CMmCustomGsmExt.h"
-#include "cmmcalllist.h"
-#include "cmmphoneextinterface.h"
-#include "CMmWimTsy.h"
-#include "cmmcalltsy.h"
-#include "CMmCommonStaticUtility.h"
-#include "CMmSimLockTsy.h"
-#include "MmTsy_conf.h"
-#include <ctsy/tflogger.h>
-#include "cmmpblist.h"
-#include "cmmphonebookstoretsy.h"
-#include "CMmPacketTsy.h"
-#include "CMmSIMTsy.h"
-#include "CMmCustomSecurityTsy.h"
-#include <ctsy/serviceapi/gsmerror.h>
-#include <ctsy/serviceapi/cmmcustomvendorext.h>
-#include "cmmnettsy.h"  // for CMmNetTsy::CipheringIndicatorForcedOff()
-#include <ctsy/serviceapi/ctsydomaincrkeys.h>
-#include "ctsyprivatecrpkeys.h"
-#include <featureuids.h>
-
-// ======== MEMBER FUNCTIONS ========
-
-CMmCustomTsy::CMmCustomTsy():
-    iReqHandleType(ECustomTsyReqHandleUnknown)
-    {
-    iMmPhoneTsy = NULL;
-    iMmCustomExtInterface = NULL;
-    Mem::FillZ( iMmSubTsy, sizeof( iMmSubTsy ) );
-
-    // initialize internal data
-    iCipheringInfo.iIndStatus = EFalse;
-    iCipheringInfo.iCiphStatus = EFalse;
-    }
-
-void CMmCustomTsy::ConstructL(
-    CMmPhoneTsy* aMmPhoneTsy )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL");
-    iMmPhoneTsy = aMmPhoneTsy;
-
-    iMmCustomExtInterface = CMmCustomGsmExt::NewL( aMmPhoneTsy, this );
-    iMmSubTsy[ESubTsyIdxWIM] = CMmWimTsy::NewL( this );
-    iMmSubTsy[ESubTsyIdxSimLock] = CMmSimLockTsy::NewL( this );
-    iMmSubTsy[ESubTsyIdxPacket] = CMmPacketTsy::NewL( this, aMmPhoneTsy );
-
-    iMmSubTsy[ESubTsyIdxSIM]  = CMmSIMTsy::NewL( this );
-
-    iMmSecurityTsy = CMmCustomSecurityTsy::NewL( this, aMmPhoneTsy );
-
-
-
-#ifdef REQHANDLE_TIMER
-    // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( this, iMmPhoneTsy,
-        ECustomTsyMaxNumOfRequests, iCustomReqHandles );
-#else
-    // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL(
-        ECustomTsyMaxNumOfRequests, iCustomReqHandles );
-#endif
-
-    // register custom tsy in the message manager
-    Phone()->MessageManager()->RegisterTsyObject(
-        CMmMessageManagerBase::ECustomTsy, this );
-
-    iAdnCacheStatus = RMmCustomAPI::ECacheNotReady;
-    iFdnCacheStatus = RMmCustomAPI::ECacheNotReady;
-
-    iISVDialNumberCheckObject = NULL;
-    iISVDialNumberCheck = EFalse;
-    iGetIccCfStatusBootUp = ETrue;
-    //Get pointer to public CenRep
-    iCFISCentRep = iMmPhoneTsy->GetCfisCenRep();
-    iCFISPrivateCentRep = iMmPhoneTsy->GetCfisPRCenRep();
-	TInt err = iFeatureControl.Open();
-	iUsingFeatureManager = (err == KErrNone);
-    
-    // update/receive Icc Call forward information
-    if( iMmPhoneTsy->NosBootState()->iSIMReady )
-        {
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL -- GET ICC call forward indicators");       
-        // Get Icc cfis values from LTSY
-        Phone()->MessageManager()->HandleRequestL( 
-            ECustomGetIccCallForwardingStatusIPC );
-        }
-        
-    // check if HomeZoneParams has been already read in NotifySimStatusReady
- 	// if not, query again
-    if ( !iMmPhoneTsy->GetHomeZoneParamsChecked() )
-    	{
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - GetHomeZoneParamsChecked()");    	
-        CMmSIMTsy* simCustomTsy = NULL;
-        simCustomTsy = ( CMmSIMTsy* )GetSIMTsyPtr();
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - pointer created");
-	
-        if ( simCustomTsy )
-            {
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - CheckViagHomeZoneParamsL()");
-            simCustomTsy->CheckViagHomezoneParamsL();
-            iMmPhoneTsy->SetHomeZoneParamsChecked( ETrue );
-            }
-        else
-        	{
-TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - CheckViagHomeZoneParamsL() False");        		
-			iMmPhoneTsy->SetHomeZoneParamsChecked( EFalse );
-        	}
-    	}     
-    }
-
-CMmCustomTsy* CMmCustomTsy::NewL(
-    CMmPhoneTsy* aMmPhoneTsy )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NewL");
-    CMmCustomTsy* mmCustomTsy = new ( ELeave ) CMmCustomTsy();
-    CleanupClosePushL( *mmCustomTsy );
-    mmCustomTsy->ConstructL( aMmPhoneTsy );
-    CleanupStack::Pop( mmCustomTsy );
-
-    return mmCustomTsy;
-    }
-
-CMmCustomTsy::~CMmCustomTsy()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::~CMmCustomTsy");
-
-	iFeatureControl.Close();
-	
-    // Delete subsystems
-    for ( TInt i = 0; ESubTsyIdxMaxNum > i; i++ )
-        {
-        delete iMmSubTsy[i];
-        }
-
-    // Delete SecurityTsy
-    delete iMmSecurityTsy;
-
-    // Delete GSM extensions
-    delete iMmCustomExtInterface;
-    
-    // delete req handle store
-    delete iTsyReqHandleStore;
-
-    if ( iMmPhoneTsy )
-        {
-        iMmPhoneTsy->SetHomeZoneParamsChecked( EFalse );
-        iMmPhoneTsy->SetCustomTsy( NULL );
-        // unregister custom tsy in the message manager
-        iMmPhoneTsy->MessageManager()->DeregisterTsyObject(this);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::Phone
-// Returns pointer to PhoneTsy object
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CMmPhoneTsy* CMmCustomTsy::Phone()
-    {
-    return iMmPhoneTsy;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ExtFunc
-// Dispatches extension function requests. All functions that are not part
-// of the core function set, are routed via the ExtFunc method.
-// At the beginning of this method, packaged pointers are unpacked. Then
-// the correct function is selected using the IPC number.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ExtFunc(
-    const TTsyReqHandle aTsyReqHandle,
-    const TInt aIpc,
-    const TDataPackage& aPackage )
-    {
-    TInt ret = KErrNone;
-    TInt trapError = KErrNone;
-    
-    // Ensure the ReqHandleType is unset.
-    // This will detect cases where this method indirectly calls itself
-    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
-    // Such cases are not supported because iReqHandleType is in the context of this class instance,
-    // not this request, and we don't want the values set by the inner request and the outer request
-    // interfering with each other.
-    __ASSERT_DEBUG(iReqHandleType==ECustomTsyReqHandleUnknown, User::Invariant());
-
-    // before processing further the request, check if offline mode status
-    // is enabled and if the given request can be perfomed in that case.
-    if ( ERfsStateInfoInactive == iMmPhoneTsy->GetRfStateInfo() &&
-        !IsRequestPossibleInOffline( aIpc ) )
-        {
-TFLOGSTRING2 ("TSY: Offline mode ON, request is not allowed: %d", aIpc );
-        ret = CMmCommonStaticUtility::EpocErrorCode( KErrGeneral,
-                KErrGsmOfflineOpNotAllowed );
-
-        // Complete the request with appropiate error
-        ReqCompleted ( aTsyReqHandle, ret );
-        }
-    else
-        {
-        TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ); );
-
-        if ( KErrNone != trapError )
-            {
-            // error handling. Object cannot be created.
-            ret = trapError;
-            }
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::DoExtFuncL
-// This DoExtFuncL is called by Etel server when it has Custom API
-// request for the TSY. To process a request handle, request type and request
-// data are passed to the Custom TSY.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::DoExtFuncL(
-    const TTsyReqHandle aTsyReqHandle,
-    const TInt aIpc,
-    const TDataPackage& aPackage )
-    {
-    TInt ret( KErrNotSupported );
-
-    // first check if request is supported in CMmSecurityTsy
-    // (due layering that class is no longer a part of extension modules)
-
-    ret = iMmSecurityTsy->DoExtFuncL( aTsyReqHandle, aIpc, aPackage );
-
-    if ( KErrNotSupported == ret )
-        {
- 
-        // then check all the Custom extension modules
-        ret = CMmTsyBase::DoBaseExtFuncL( aTsyReqHandle, aIpc, aPackage );
-
-        // if extension modules did not serve this request
-        if ( KErrNotSupported == ret )
-            {
-            // Ensure the ReqHandleType is unset.
-            // This will detect cases where this method indirectly calls itself
-            // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
-            // Such cases are not supported because iReqHandleType is in the context of this class instance,
-            // not this request, and we don't want the values set by the inner request and the outer request
-            // interfering with each other.
-            __ASSERT_DEBUG(iReqHandleType==ECustomTsyReqHandleUnknown, User::Invariant());
-            
-            switch ( aIpc )
-                {
-                // Perform IMS Authentication
-                case EMobilePhoneIMSAuthenticate:
-                    ret = ImsAuthenticationL( aTsyReqHandle,
-                        REINTERPRET_CAST(
-                        RMobilePhone::TImsAuthenticateDataV5*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Get sim authentication data
-                case ECustomGetSimAuthenticationDataIPC:
-                    ret = SimAuthenticationL( aTsyReqHandle, aPackage );
-                    break;
-                // Notify Dtmf event
-                case ECustomNotifyDtmfEventIPC:
-                    ret = NotifyDtmfEvent(
-                        REINTERPRET_CAST( RMmCustomAPI::TDtmfInfo*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Get Diagnostic Octets - info 
-                case ECustomGetDiagnosticOctetsIPC:
-                   ret = GetDiagnosticInfo ( aTsyReqHandle,
-                       REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
-                   break;
-                // Get Remote Alerting Tone Status
-                case ECustomGetRemoteAlertingToneStatusIPC:
-                    ret = GetRemoteAlertingToneStatus ( aTsyReqHandle,
-                        REINTERPRET_CAST(
-                        RMmCustomAPI::TRemoteAlertingToneStatus*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Call Origin
-                case ECustomCallOriginIPC:
-                    ret = GetCallOrigin( aTsyReqHandle,
-                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ),
-                        REINTERPRET_CAST( RMmCustomAPI::TCallOrigin*,
-                        aPackage.Ptr2() ) );
-                    break;
-                // Terminate a Call/all calls
-                case ECustomTerminateCallIPC:
-                    ret = TerminateCallL( aTsyReqHandle,
-                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
-                    break;
-                // Get Als Blocked
-                case ECustomGetAlsBlockedIPC:
-                    ret = GetAlsBlockedL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TGetAlsBlockStatus*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Set Alternative Line Service Blocked
-                case ECustomSetAlsBlockedIPC:
-                    ret = SetAlsBlockedL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TSetAlsBlock*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Notify Als Blocked Change
-                case ECustomNotifyAlsBlockedChangedIPC:
-                    ret = NotifyAlsBlockedChanged (
-                        REINTERPRET_CAST( RMmCustomAPI::TGetAlsBlockStatus*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Get ALS pp support
-                case ECustomCheckAlsPpSupportIPC:
-                    ret = GetAlsPpSupportL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TAlsSupport*,
-                                          aPackage.Ptr1() ) );
-                    break;
-                // Get ciphering information
-                case ECustomGetCipheringInfoIPC:
-                    ret = GetCipheringInfoL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TCipheringInfo*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Notify ciphering information change
-                case ECustomNotifyCipheringInfoChangeIPC:
-                    ret = NotifyCipheringInfoChange(
-                        REINTERPRET_CAST(RMmCustomAPI::TCipheringInfo*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Notify NSPS status
-                case ECustomNotifyNSPSStatusIPC:
-                    ret = NotifyNSPSStatus (
-                         REINTERPRET_CAST(RMmCustomAPI::TNspsStatus*,
-                         aPackage.Ptr1() ) );
-                    break;
-                // Wake up network from NSPS status
-                case ECustomNetWakeupIPC:
-                    ret = NetWakeupL( aTsyReqHandle );
-                    break;
-                case ECustomClearCallBlackListIPC:
-                    ret = ClearCallBlackListL ( aTsyReqHandle );
-                    break;
-                // SS additional info notification
-                case ECustomSsAdditionalInfoNotificationIPC:
-                     ret = SsAdditionalInfoNotification(
-                        REINTERPRET_CAST( RMmCustomAPI::TSsAdditionalInfo*,
-                        aPackage.Ptr1() ) );
-                     break;
-                // Get the air time duration
-                case ECustomGetAirTimeDurationIPC:
-                    ret = GetAirTimeDuration ( aTsyReqHandle,
-                        REINTERPRET_CAST( TTimeIntervalSeconds*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Check emergency number
-                case ECustomCheckEmergencyNumberIPC:
-                    ret = CheckEmergencyNumberL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TEmerNumberCheckMode*,
-                            aPackage.Ptr1() ),
-                        REINTERPRET_CAST( TBool*, aPackage.Ptr2() ) );
-                    break;
-                // Get Network Operator Name
-                case ECustomGetNetworkProviderNameIPC:
-                    ret = GetNetworkOperatorNameL( aPackage.Des1u() );
-                    break;
-                // Get two digit dial support
-                case ECustomCheckTwoDigitDialSupportIPC:
-                    ret = CheckTwoDigitDialSupportL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TTwoDigitDialSupport*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Notify when phonebook cache is ready
-                case ECustomNotifyPndCacheReadyIPC:
-                    ret = NotifyPhoneBookCacheReady( aTsyReqHandle,
-                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
-                    break;
-                // Get phonebook cache status
-                case ECustomGetPndCacheStatusIPC:
-                    ret = GetPndCacheStatus( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TPndCacheStatus*,
-                            aPackage.Ptr1() ),
-                        REINTERPRET_CAST( const TName*, aPackage.Des2u() ) );
-                    break;
-                // Get the programmable operator name
-                case ECustomGetOperatorNameIPC:
-                    ret = GetOperatorNameL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TOperatorNameInfo*,
-                        aPackage.Ptr1() ) );
-                    break;
-                // Notify SS Network event
-                case ECustomNotifySsNetworkEventIPC:
-                    ret = NotifySsNetworkEvent(
-                        REINTERPRET_CAST( RMmCustomAPI::TSsTypeAndMode*,
-                        aPackage.Ptr1() ),
-                        REINTERPRET_CAST( RMmCustomAPI::TSsInfo*,
-                        aPackage.Ptr2() ) );
-                    break;
-                // Get the programmable operator logo
-                case ECustomGetProgrammableOperatorLogoIPC:
-                    ret = GetProgrammableOperatorLogoL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TOperatorId*,
-                        aPackage.Ptr1() ),
-                        REINTERPRET_CAST( RMmCustomAPI::TOperatorLogo*,
-                        aPackage.Ptr2() ) );
-                    break;
-                // Sat refresh complete notification
-                case ECustomSatRefreshCompleteNotificationIPC:
-                    ret = SatRefreshCompleteNotification();
-                    break;
-                // Reset the net server
-                case ECustomResetNetServerIPC:
-                    ret = ResetNetServerL( aTsyReqHandle );
-                    break;
-                // Notify Network Connection Failure
-                case ECustomNotifyNetworkConnectionFailureIPC:
-                    ret = NotifyNetworkConnectionFailure( );
-                    break;
-                // Get supported network modes
-                case ECustomGetSystemNetworkModesIPC:
-                    ret = GetSystemNetworkModesL( aTsyReqHandle,
-                        REINTERPRET_CAST(TUint32*, aPackage.Ptr1()) );
-                    break;
-                // Set system network mode
-                case ECustomSetSystemNetworkModeIPC:
-                    ret = SetSystemNetworkModeL( aTsyReqHandle,
-                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
-                        aPackage.Ptr1()) );
-                    break;
-                // Get current system network mode
-                case ECustomGetCurrentSystemNetworkModesIPC:
-                    ret = GetCurrentSystemNetworkModeL( aTsyReqHandle,
-                        REINTERPRET_CAST(TUint32*, aPackage.Ptr1()) );
-                    break;
-                // Get supported network bands
-                case ECustomGetBandSelectionIPC:
-                    ret = GetSystemNetworkBandL( aTsyReqHandle,
-                        REINTERPRET_CAST(RMmCustomAPI::TBandSelection*,
-                        aPackage.Ptr1()),
-                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
-                        aPackage.Ptr2()) );
-                    break;
-                // Set system network band
-                case ECustomSetBandSelectionIPC:
-                    ret = SetSystemNetworkBandL( aTsyReqHandle,
-                        REINTERPRET_CAST(RMmCustomAPI::TBandSelection*,
-                        aPackage.Ptr1() ),
-                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
-                        aPackage.Ptr2() ) );
-                    break;
-                // Notify SS request complete
-                case ECustomNotifySsRequestCompleteIPC:
-                    ret = SsRequestCompleteNotification(
-                         REINTERPRET_CAST( TInt*, aPackage.Ptr1() ) );
-                    break;
-                case ECustomGetLifeTimeIPC:
-                    ret = GetLifeTimeL( aTsyReqHandle, aPackage.Des1n() );
-                    break;
-                case ECustomReadSimFileIPC:
-                    ret = GetSimFileInfoL(aTsyReqHandle, aPackage.Des1n(),
-                        aPackage.Des2n());
-                    break;
-                // Get 3G phonebook info
-                case EGet3GPBInfoIPC:
-                    ret = Get3GPBInfo ( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::T3GPBInfo*,
-                        aPackage.Ptr1() ) );
-                    break;
-                case ECustomSetDriveModeIPC:
-                    ret = SetDriveModeL( aTsyReqHandle,
-                        REINTERPRET_CAST( RMmCustomAPI::TSetDriveMode*,
-                        aPackage.Ptr1() ) );
-                    break;
-                case ECustomSetSimMessageStatusReadIPC:
-                    ret = SetSimMessageStatusReadL( aTsyReqHandle,
-                        *( REINTERPRET_CAST(TTime*, aPackage.Ptr1() ) ),
-                        *( REINTERPRET_CAST(TInt*, aPackage.Ptr2() ) ) );
-                    break;
-                case ECustomNotifyRauEventIPC:
-                    ret = NotifyRauEvent(
-                        REINTERPRET_CAST( RMmCustomAPI::TRauEventStatus*,
-                        aPackage.Ptr1() ) );
-                    break;
-                case ECustomReadHSxPAStatusIPC:
-                    ret = ReadHSxPAStatusL( aTsyReqHandle, REINTERPRET_CAST(
-                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
-                    break;
-                case ECustomWriteHSxPAStatusIPC:
-                    ret = WriteHSxPAStatusL( aTsyReqHandle, REINTERPRET_CAST(
-                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
-                    break;
-                case ECustomNotifyHSxPAStatusIPC:
-                    ret = NotifyHSxPAStatus( REINTERPRET_CAST(
-                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
-                    break;
-                case ECustomGetIccCallForwardingStatusIPC:
-                	ret = GetIccCallForwardingStatusL( aTsyReqHandle,
-                    	aPackage.Des1n() );
-                	break;
-                case ECustomNotifyIccCallForwardingStatusChangeIPC:
-                    ret = NotifyIccCallForwardingStatusChange(
-                    	aPackage.Des1n() );
-                    break;
-                case ECustomNotifyCellInfoChangeIPC:
-                    ret = NotifyCellInfoChange( aPackage.Des1n() );
-                    break;
-                case ECustomGetCellInfoIPC:
-                    ret = GetCellInfoL( aPackage.Des1n() );
-                    break;
-                case ECustomGetServiceTableSupportbyApplicationIPC:
-                    ret = GetUSIMServiceSupportL( aTsyReqHandle, 
-                        REINTERPRET_CAST( RMmCustomAPI::TAppSupport*, 
-                        aPackage.Ptr1() ) );
-                    break;
-                case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-                    ret = NotifyRemoteAlertingToneStatusChange(
-                        REINTERPRET_CAST( 
-                        RMmCustomAPI::TRemoteAlertingToneStatus*,
-                        aPackage.Ptr1() ) );
-                    break;
-                default:
-                    // ret is already set as KErrNotSupported
-TFLOGSTRING2("TSY: CMmCustomTsy::DoExtFuncL unsupported ipc=%d", aIpc);
-                    break;
-                }
-
-            // save request handle
-            if ( ECustomTsyReqHandleUnknown != iReqHandleType )
-                {
-#ifdef REQHANDLE_TIMER
-                // set timer for the request
-                SetTypeOfResponse ( iReqHandleType, aTsyReqHandle );
-#else
-                iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType,
-                    aTsyReqHandle );
-#endif // REQHANDLE_TIMER
-                // We've finished with this value now. Clear it so it doesn't leak
-                //  up to any other instances of this method down the call stack
-                iReqHandleType = ECustomTsyReqHandleUnknown;
-                }
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::RegisterNotification
-// 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 DOS.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::RegisterNotification(
-    const TInt aIpc )
-    {
-    TInt ret ( KErrNotSupported );
-
-    switch( aIpc )
-        {
-        case ECustomNotifyRauEventIPC:
-        case ECustomNotifyDtmfEventIPC:
-        case ECustomNotifyAlsBlockedChangedIPC:
-        case ECustomNotifyCipheringInfoChangeIPC:
-        case ECustomNotifyNSPSStatusIPC:
-        case ECustomSsAdditionalInfoNotificationIPC:
-        case ECustomNotifySsRequestCompleteIPC:
-        case ECustomNotifyPndCacheReadyIPC:
-        case ECustomNotifySsNetworkEventIPC:
-        case ECustomSatRefreshCompleteNotificationIPC:
-        case ECustomNotifyNetworkConnectionFailureIPC:
-        case ECustomNotifyHSxPAStatusIPC:
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-        case ECustomNotifyCellInfoChangeIPC:
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-            ret =  KErrNone;
-            break;
-
-        default:
-            ret = CMmTsyBase::RegisterNotification( aIpc );
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::DeregisterNotification
-// Called when the server recognises 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 DOS.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::DeregisterNotification(
-    const TInt aIpc )
-    {
-    TInt ret ( KErrNotFound );
-
-    switch( aIpc )
-        {
-        case ECustomNotifyRauEventIPC:
-        case ECustomNotifyDtmfEventIPC:
-        case ECustomNotifyAlsBlockedChangedIPC:
-        case ECustomNotifyCipheringInfoChangeIPC:
-        case ECustomNotifyNSPSStatusIPC:
-        case ECustomSsAdditionalInfoNotificationIPC:
-        case ECustomNotifySsRequestCompleteIPC:
-        case ECustomNotifyPndCacheReadyIPC:
-        case ECustomNotifySsNetworkEventIPC:
-        case ECustomSatRefreshCompleteNotificationIPC:
-        case ECustomNotifyNetworkConnectionFailureIPC:
-        case ECustomNotifyHSxPAStatusIPC:
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-        case ECustomNotifyCellInfoChangeIPC:
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-            ret =  KErrNone;
-            break;
-        default:
-            ret = CMmTsyBase::DeregisterNotification( aIpc );
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ReqModeL
-// Returns request mode for given IPC. If the IPC number belongs to some of
-// the Custom API functions.
-// Possible return values:
-//     tsy has own buffering            =0x00000000  
-//     KReqModeMultipleCompletionEnabled=0x00000001
-//     KReqModeFlowControlObeyed=0x00000002
-//     KReqModeRePostImmediately=0x00000004
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CTelObject::TReqMode CMmCustomTsy::ReqModeL(
-    const TInt aIpc )
-    {
-    CTelObject::TReqMode ret = 0;
-
-    switch ( aIpc )
-        {
-        // methods using DOS
-        case ECustomNetWakeupIPC:
-        case ECustomGetNetworkProviderNameIPC:
-        case ECustomCheckTwoDigitDialSupportIPC:
-        case ECustomGetOperatorNameIPC:
-        case ECustomResetNetServerIPC:
-            ret = KReqModeFlowControlObeyed;
-            break;
-            
-        //TSYs wishing to implement their own buffering can return 0 
-        case ECustomSetAlsBlockedIPC:            
-        case ECustomSetDriveModeIPC:            
-            ret = 0;
-            break;
-
-        // Notifications
-        case ECustomNotifyRauEventIPC:
-        case ECustomNotifyDtmfEventIPC:
-        case ECustomNotifyAlsBlockedChangedIPC:
-        case ECustomNotifyCipheringInfoChangeIPC:
-        case ECustomNotifyNSPSStatusIPC:
-        case ECustomSsAdditionalInfoNotificationIPC:
-        case ECustomNotifyPndCacheReadyIPC:
-        case ECustomNotifySsNetworkEventIPC:
-        case ECustomSatRefreshCompleteNotificationIPC:
-        case ECustomNotifyNetworkConnectionFailureIPC:
-        case ECustomNotifySsRequestCompleteIPC:
-        case ECustomNotifyHSxPAStatusIPC:
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-        case ECustomNotifyCellInfoChangeIPC:
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-            ret = KReqModeRePostImmediately |
-                  KReqModeMultipleCompletionEnabled;
-            break;
-
-        // methods that are using DOS but have own flow control system
-        case ECustomGetProgrammableOperatorLogoIPC:
-        case ECustomTerminateCallIPC:
-        case ECustomCheckEmergencyNumberIPC:
-        case ECustomCheckAlsPpSupportIPC:
-        case ECustomGetAlsBlockedIPC:
-        case ECustomGetCipheringInfoIPC:
-        case ECustomClearCallBlackListIPC:
-        case ECustomGetSystemNetworkModesIPC:
-        case ECustomSetSystemNetworkModeIPC:
-        case ECustomGetCurrentSystemNetworkModesIPC:
-        case ECustomReadHSxPAStatusIPC:
-        case ECustomWriteHSxPAStatusIPC:
-        case ECustomGetIccCallForwardingStatusIPC:
-        case ECustomGetCellInfoIPC:
-        case ECustomGetBandSelectionIPC:
-        case ECustomSetBandSelectionIPC:
-
-        // methods not using DOS
-        case ECustomCallOriginIPC:
-        case ECustomGetDiagnosticOctetsIPC:
-        case ECustomGetAirTimeDurationIPC:
-        case ECustomGetRemoteAlertingToneStatusIPC:
-        case ECustomGetPndCacheStatusIPC:
-        case ECustomGetLifeTimeIPC:
-        case ECustomReadSimFileIPC:
-        case EGet3GPBInfoIPC:
-        case EMobilePhoneIMSAuthenticate:
-        case ECustomGetSimAuthenticationDataIPC:
-       	case ECustomGetServiceTableSupportbyApplicationIPC:
-
-        // from Security Tsy
-        case ECustomCheckSecurityCodeIPC:
-        case ECustomIsBlockedIPC:
-        case ECustomDisablePhoneLockIPC:
-        case ECustomGetActivePinIPC:
-        case ECustomSetSimMessageStatusReadIPC:
-            ret = 0;
-            break;
-        default:
-            ret = CMmTsyBase::ReqModeL ( aIpc );
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NumberOfSlotsL
-// Returns number of slots to be used for given IPC.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NumberOfSlotsL(
-    const TInt aIpc )
-    {
-    TInt numberOfSlots ( KMmCustomDefaultSlots );
-
-    switch ( aIpc )
-        {
-        case ECustomNotifyDtmfEventIPC:
-            numberOfSlots = KMmCustomNotifyDtmfEventSlots;
-            break;
-        case ECustomNotifyRauEventIPC:
-        case ECustomNotifyAlsBlockedChangedIPC:
-        case ECustomNotifyCipheringInfoChangeIPC:
-        case ECustomNotifyNSPSStatusIPC:
-        case ECustomSsAdditionalInfoNotificationIPC:
-        case ECustomNotifySsRequestCompleteIPC:
-        case ECustomNotifyPndCacheReadyIPC:
-        case ECustomNotifySsNetworkEventIPC:
-        case ECustomSatRefreshCompleteNotificationIPC:
-        case ECustomNotifyNetworkConnectionFailureIPC:
-        case ECustomNotifyHSxPAStatusIPC:
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-        case ECustomNotifyCellInfoChangeIPC:
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-            break;
-
-        default:
-            numberOfSlots = CMmTsyBase:: NumberOfSlotsL( aIpc );
-            break;
-        }
-
-    return numberOfSlots;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetRequiredPlatSecCaps
-// ETel server calls this method to find out capabilities of custom IPCs.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TSecurityPolicy CMmCustomTsy::GetRequiredPlatSecCaps(
-    const TInt aIpc )
-    {
-TFLOGSTRING2( "TSY: CMmCustomTsy::GetRequiredPlatSecCaps ipc=%d", aIpc );
-    // assume fail as default return value
-    TSecurityPolicy policy( TSecurityPolicy::EAlwaysFail );
-
-    // deal with cancellations
-    TInt ipc ( aIpc );
-    if (ipc >= KIpcCustomExt + EMobileCancelOffset)
-        {
-        ipc  -= EMobileCancelOffset;
-TFLOGSTRING2("TSY: CMmCustomTsy::GetRequiredPlatSecCaps cancel for ipc=%d", ipc);
-        }
-
-    switch ( ipc )
-        {
-        case ECustomNotifyRauEventIPC:
-        case ECustomSatRefreshCompleteNotificationIPC: // To be removed
-        case ECustomNotifyPndCacheReadyIPC:
-        case ECustomGetPndCacheStatusIPC:
-        case EGet3GPBInfoIPC:
-        case ECustomNotifyDtmfEventIPC:
-        case ECustomGetRemoteAlertingToneStatusIPC:
-        case ECustomCallOriginIPC:
-        case ECustomGetAlsBlockedIPC:
-        case ECustomNotifyAlsBlockedChangedIPC:
-        case ECustomCheckAlsPpSupportIPC:
-        case ECustomCheckEmergencyNumberIPC:
-        case ECustomGetCipheringInfoIPC:
-        case ECustomNotifyCipheringInfoChangeIPC:
-        case ECustomNotifyNSPSStatusIPC:
-        case ECustomNotifyProgrammableOperatorLogoChangeIPC:
-        case ECustomNotifyNetworkConnectionFailureIPC:
-        case ECustomNotifySsRequestCompleteIPC:
-        case ECustomGetActivePinIPC:
-        case ECustomGetSystemNetworkModesIPC:
-        case ECustomGetCurrentSystemNetworkModesIPC:
-        case ECustomGetATRIPC:
-        case ECustomNotifySimCardStatusIPC:
-        case ECustomGetSimCardReaderStatusIPC:
-        case ECustomNotifyHSxPAStatusIPC:
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-        case ECustomNotifyCellInfoChangeIPC:
-        case ECustomGetBandSelectionIPC:
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=None");
-            policy = TSecurityPolicy( TSecurityPolicy::EAlwaysPass );
-            break;
-
-        // NetworkControl
-        case ECustomResetNetServerIPC:
-        case ECustomSetSystemNetworkModeIPC:
-        case ECustomSimWarmResetIPC:
-        case ECustomSetBandSelectionIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl");
-            policy = TSecurityPolicy( ECapabilityNetworkControl );
-            break;
-
-        // NetworkControl, PowerMgmt
-        case ECustomPowerSimOnIPC:
-        case ECustomPowerSimOffIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl, PowerMgmt");
-            policy = TSecurityPolicy( ECapabilityNetworkControl,
-                ECapabilityPowerMgmt );
-            break;
-
-        // NetworkControl, ReadDeviceData
-        case ECustomReleaseFileIPC:
-        case ECustomRestartFileIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl, ReadDeviceData");
-            policy = TSecurityPolicy( ECapabilityNetworkControl,
-                ECapabilityReadDeviceData );
-            break;
-
-        // NetworkServices
-        case ECustomTerminateCallIPC:
-        case ECustomCancelUssdSessionIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkServices");
-            policy = TSecurityPolicy( ECapabilityNetworkServices );
-            break;
-
-        // NetworkServices, WriteDeviceData
-        case ECustomSetDriveModeIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkServices, WriteDeviceData");
-            policy = TSecurityPolicy( ECapabilityNetworkServices,
-                ECapabilityWriteDeviceData );
-            break;
-
-        // ReadDeviceData
-        case EReadViagHomeZoneParamsIPC:
-        case ECustomGetNetworkProviderNameIPC:
-        case ECustomGetDiagnosticOctetsIPC:
-        case ECustomGetLifeTimeIPC:
-        case ECustomGetOperatorNameIPC:
-        case ECustomGetProgrammableOperatorLogoIPC:
-        case ECustomSsAdditionalInfoNotificationIPC:
-        case ECustomIsBlockedIPC:
-        case ECustomCheckTwoDigitDialSupportIPC:
-        case ECustomNotifyEGprsInfoChange:
-        case ECustomGetEGprsInfo:
-        case EMobilePhoneIMSAuthenticate:
-        case ECustomReadHSxPAStatusIPC:
-        case ECustomGetIccCallForwardingStatusIPC:
-        case ECustomGetCellInfoIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData );
-            break;
-
-        // ReadDeviceData, Location
-        case EReadViagHomeZoneCacheIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, Location");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData,
-                ECapabilityLocation );
-            break;
-
-        // ReadDeviceData, ReadUserData
-        case ECustomNotifySsNetworkEventIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy= ReadDeviceData, ReadUserData");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData,
-                ECapabilityReadUserData );
-            break;
-
-        // ReadDeviceData, ReadUserData, Location
-        case ECustomReadSimFileIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, ReadUserData, Location");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData,
-                ECapabilityReadUserData,
-                ECapabilityLocation );
-            break;
-
-        // ReadDeviceData, ReadUserData, WriteUserData, NetworkControl
-        case ECustomGetSimAuthenticationDataIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, ReadUserData, WriteUserData, NetworkControl");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData,
-                ECapabilityReadUserData,
-                ECapabilityWriteUserData,
-                ECapabilityNetworkControl );
-            break;
-
-       	case ECustomGetServiceTableSupportbyApplicationIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData );
-            break;
-        // ReadDeviceData, WriteDeviceData, ReadUserData, WriteUserData,
-        // Location, NetworkServices, NetworkControl
-        case ECustomSendAPDUReqIPC:
-        case ECustomSendAPDUReqV2IPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, WriteDeviceData, ReadUserData, WriteUserData, Location, NetworkServices, NetworkControl");
-            policy = TSecurityPolicy( ECapabilityReadDeviceData,
-                ECapabilityWriteDeviceData,
-                ECapabilityReadUserData,
-                ECapabilityWriteUserData,
-                ECapabilityLocation,
-                ECapabilityNetworkServices,
-                ECapabilityNetworkControl  );
-            break;
-
-        // ReadUserData
-        case ECustomStartSimCbTopicBrowsingIPC:
-        case ECustomGetNextSimCbTopicIPC:
-        case ECustomGetAirTimeDurationIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadUserData");
-            policy = TSecurityPolicy( ECapabilityReadUserData );
-            break;
-
-        // WriteDeviceData
-        case ECustomSetAlwaysOnMode:
-        case ECustomSimLockActivateIPC:
-        case ECustomSimLockDeActivateIPC:
-        case ECustomSetAlsBlockedIPC:
-        case ECustomClearCallBlackListIPC:
-        case ECustomNetWakeupIPC:
-        case ECustomCheckSecurityCodeIPC:
-        case ECustomDisablePhoneLockIPC:
-        case ECustomSetSimMessageStatusReadIPC:
-        case ECustomWriteHSxPAStatusIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData");
-            policy = TSecurityPolicy( ECapabilityWriteDeviceData );
-            break;
-
-        // WriteDeviceData, Location
-        case EWriteViagHomeZoneCacheIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData, Location");
-            policy = TSecurityPolicy( ECapabilityWriteDeviceData,
-                ECapabilityLocation );
-            break;
-
-        // WriteUserData
-        case ECustomDeleteSimCbTopicIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteUserData");
-            policy = TSecurityPolicy( ECapabilityWriteUserData );
-            break;
-
-        // WriteDeviceData
-        case EWriteViagHomeZoneUHZIUESettingsIPC:
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData");
-            policy = TSecurityPolicy( ECapabilityWriteDeviceData );
-            break;
-        default:
-            // if none of the above then we end up here,
-            // as a default we already have caps as alwaysfail.
-TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=AlwaysFail");
-            break;
-        }
-
-    return policy;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CancelService
-// When the clients close their sub-sessions (eg. by calling RPhone::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 function in the TSY.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CancelService(
-    const TInt aIpc,
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    TInt ret ( KErrGeneral );
-
-    // When the clients close their sub-sessions (eg. by calling
-    // RPhone::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
-    // function in the TSY.
-
-    switch ( aIpc )
-        {
-        case ECustomTerminateCallIPC:
-        case ECustomSetAlsBlockedIPC:
-        case ECustomNetWakeupIPC:
-        case ECustomClearCallBlackListIPC:
-        case ECustomResetNetServerIPC:
-        case ECustomGetPndCacheStatusIPC:
-        case ECustomSetDriveModeIPC:
-        case ECustomSetBandSelectionIPC:	
-        case ECustomSetSystemNetworkModeIPC:            
-            // TSY has started a request and it is not possible to then
-            // cancel it. The best thing for the TSY to do in
-            // this case is to proceed as though the Cancel never happened.
-            // The server's call to the TSY cancel function will return
-            // synchronously. The TSY then continues to wait for the methods
-            // acknowledgement and when it receives it, the TSY will complete
-            // the original request.
-            ret = KErrNone;
-            break;
-        case ECustomNotifyRauEventIPC:
-            ret = NotifyRauEventCancel();
-            break;
-        case ECustomNotifyDtmfEventIPC:
-            ret = NotifyDtmfEventCancel( aTsyReqHandle );
-            break;
-        case ECustomGetAlsBlockedIPC:
-            ret = GetAlsBlockedCancel ();
-            break;
-        case ECustomGetCipheringInfoIPC:
-            ret = GetCipheringInfoCancel();
-            break;
-        case ECustomNotifyCipheringInfoChangeIPC:
-            ret = NotifyCipheringInfoChangeCancel( aTsyReqHandle );
-            break;
-        case ECustomNotifyNSPSStatusIPC:
-            ret = NotifyNSPSStatusCancel( aTsyReqHandle );
-            break;
-        case ECustomNotifyAlsBlockedChangedIPC:
-            ret = NotifyAlsBlockedChangedCancel( aTsyReqHandle );
-            break;
-        case ECustomCheckAlsPpSupportIPC:
-            ret = GetAlsPpSupportCancel();
-            break;
-        case ECustomSsAdditionalInfoNotificationIPC:
-            ret = SsAdditionalInfoNotificationCancel( aTsyReqHandle );
-            break;
-        case ECustomNotifySsRequestCompleteIPC:
-            ret = SsRequestCompleteNotificationCancel( aTsyReqHandle );
-            break;
-        case ECustomNotifyPndCacheReadyIPC:
-            ret = NotifyPhoneBookCacheReadyCancel( aTsyReqHandle );
-            break;
-        case ECustomCheckEmergencyNumberIPC:
-            ret = CheckEmergencyNumberCancel();
-            break;
-        case ECustomGetNetworkProviderNameIPC:
-            ret = GetNetworkOperatorNameCancel();
-            break;
-        case ECustomCheckTwoDigitDialSupportIPC:
-            ret = CheckTwoDigitDialSupportCancel();
-            break;
-        case ECustomGetOperatorNameIPC:
-            ret = GetOperatorNameCancel();
-            break;
-        case ECustomNotifySsNetworkEventIPC:
-            ret = NotifySsNetworkEventCancel();
-            break;
-        case ECustomGetProgrammableOperatorLogoIPC:
-            ret = GetProgrammableOperatorLogoCancel();
-            break;
-        case ECustomSatRefreshCompleteNotificationIPC:
-            ret = SatRefreshCompleteNotificationCancel( aTsyReqHandle );
-            break;
-        case ECustomGetCurrentSystemNetworkModesIPC:
-            ret = GetCurrentSystemNetworkModeCancel( aTsyReqHandle );
-            break;
-        case ECustomNotifyNetworkConnectionFailureIPC:
-            ret = NotifyNetworkConnectionFailureCancel();
-            break;
-        case ECustomReadSimFileIPC:
-            ret = GetSimFileInfoCancel( aTsyReqHandle );
-            break;
-        case ECustomGetLifeTimeIPC:
-            ret = GetLifeTimeCancel();
-            break;
-        case EGet3GPBInfoIPC:
-            ret = Get3GPBInfoCancel ();
-            break;
-        case ECustomGetSystemNetworkModesIPC:
-            ret = GetSystemNetworkModesCancel( aTsyReqHandle );
-            break;
-        case EMobilePhoneIMSAuthenticate:
-            ret = ImsAuthenticationCancel();
-            break;
-        case ECustomGetSimAuthenticationDataIPC:
-            ret = SimAuthenticationCancel();
-            break;
-        case ECustomReadHSxPAStatusIPC:
-            ret = ReadHSxPAStatusCancel();
-            break;
-        case ECustomWriteHSxPAStatusIPC:
-            ret = WriteHSxPAStatusCancel();
-            break;
-        case ECustomNotifyHSxPAStatusIPC:
-            ret = NotifyHSxPAStatusCancel();
-            break;
-        case ECustomNotifyIccCallForwardingStatusChangeIPC:
-            ret = NotifyIccCallForwardingStatusChangeCancel( aTsyReqHandle );
-            break;
-        case ECustomGetIccCallForwardingStatusIPC:
-            ret = GetIccCallForwardingStatusCancel();
-            break;
-        case ECustomNotifyCellInfoChangeIPC:
-            ret = NotifyCellInfoChangeCancel();
-            break;
-        case ECustomGetCellInfoIPC:
-            ret = GetCellInfoCancel();
-            break;
-        case ECustomGetBandSelectionIPC:
-            ret = GetSystemNetworkBandCancel( aTsyReqHandle );
-            break;
-       	case ECustomGetServiceTableSupportbyApplicationIPC:
-       		ret = GetUSIMServiceSupportCancel();
-       		break;
-        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
-            ret = NotifyRemoteAlertingToneStatusChangeCancel();
-            break;
-        case ECustomTsyGetIccCallForwardingStatus:
-          	ret = GetIccCallForwardingStatusCancel( aTsyReqHandle );
-          	break;
-        default:
-        	if ( iMmSecurityTsy->SupportingIPC( aIpc ) ) 
-        		{ 
-        		ret = iMmSecurityTsy->CancelService ( aIpc, 
-        				aTsyReqHandle ); 
-        		}
-            else
-                {
-                ret = CMmTsyBase::CancelService ( aIpc, aTsyReqHandle );
-                }
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::IMSAuthenticationL
-// Requests authentication data generatation from input parameters
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ImsAuthenticationL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMobilePhone::TImsAuthenticateDataV5* aAuthenticationData )
-    {
-    // Save pointer to client space
-    iIMSAuthenticationData = aAuthenticationData;
-
-    CMmDataPackage authenticationDataPackage;
-    authenticationDataPackage.PackData( iIMSAuthenticationData );
-
-    TInt ret = ( iMmPhoneTsy->MessageManager()->HandleRequestL(
-        EMobilePhoneIMSAuthenticate, &authenticationDataPackage ) );
-
-    // Check response of the extension
-    if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else
-        {
-        // Save the req handle type
-        iReqHandleType = ECustomTsyIMSAuthenticate;
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteImsAuthentication
-// Requests authentication data generatation from input parameters
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteImsAuthentication(
-    CMmDataPackage* aDataPackage,
-    TInt aResult )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyIMSAuthenticate );
-
-    if ( KErrNone == aResult )
-        {
-        if ( ECustomTsyReqHandleUnknown != reqHandle )
-            {
-            RMobilePhone::TImsAuthenticateDataV5* authenticationData;
-            aDataPackage->UnPackData( &authenticationData );
-
-            // Copy data to client
-            iIMSAuthenticationData->iRES.Copy( authenticationData->iRES );
-            iIMSAuthenticationData->iCK.Copy( authenticationData->iCK );
-            iIMSAuthenticationData->iIK.Copy( authenticationData->iIK );
-
-            iIMSAuthenticationData = NULL;
-
-            ReqCompleted( reqHandle, aResult );
-            }
-        }
-    else if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrTimedOut == aResult )
-            {
-            iIMSAuthenticationData = NULL;
-            }
-        else
-            {
-            RMobilePhone::TImsAuthenticateDataV5* authenticationData;
-            aDataPackage->UnPackData( &authenticationData );
-
-            // It is possible that request is completed whithout any data
-            // inside datapackage
-            if ( NULL != authenticationData )
-                {
-                iIMSAuthenticationData->iAUTS.Copy(
-                  authenticationData->iAUTS );
-
-                iIMSAuthenticationData = NULL;
-                }
-            }
-
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ImsAuthenticationCancel
-// Cancels sim authentication request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ImsAuthenticationCancel()
-    {
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyIMSAuthenticate );
-
-    // reset pointer to client data
-    iIMSAuthenticationData = NULL;
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SimAuthenticationL
-// Gets authentication parameters from sim
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SimAuthenticationL(
-    const TTsyReqHandle aTsyReqHandle,
-    const TDataPackage& aAuthData )
-    {
-    TInt ret ( KErrNone );
-    TInt rfStateInfo ( ERfsStateInfoNormal );
-
-TFLOGSTRING( "CMmCustomTSY: CMmCustomTsy::SimAuthentication" );
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(ECustomTsyGetSimAuthenticationData);
-    if(0 < reqHandle)
-        {
-        return KErrServerBusy;
-        }
-
-
-
-    RMmCustomAPI::TSimAuthenticationBase* basePtr =
-        REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationBase*,
-        aAuthData.Ptr1() );
-
-    CMmDataPackage authenticationDataPackage;
-
-    rfStateInfo = iMmPhoneTsy->GetRfStatus();
-
-    // Declare a RAND sized buffer
-    TBuf8<16> rand;
-
-    if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
-        basePtr->ExtensionId() )
-        {
-        iEapSim = REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationEapSim*,
-            basePtr );
-
-        rand.Append( iEapSim->iRandomParameters );
-
-        authenticationDataPackage.PackData( iEapSim, &rfStateInfo );
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
-        basePtr->ExtensionId() )
-        {
-        iEapAka = REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationEapAka*,
-            basePtr );
-
-        rand.Append( iEapAka->iRandomParameters );
-
-        authenticationDataPackage.PackData( iEapAka, &rfStateInfo );
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrap" );
-        iGbaBootstrap = REINTERPRET_CAST( 
-	        RMmCustomAPI::TSimAuthenticationGbaBootstrap*, basePtr );
-
-        rand.Append( iGbaBootstrap->iRandomParameters );
-
-        authenticationDataPackage.PackData( iGbaBootstrap, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrap" ); 
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapUpdate ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrapUpdate" );
-        iGbaBootstrapUpdate = REINTERPRET_CAST( 
-        	RMmCustomAPI::TSimAuthenticationGbaBootstrapUpdate*, basePtr );
-
-        authenticationDataPackage.PackData( iGbaBootstrapUpdate, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrapUpdate" ); 
-        }
-    else if ( 
-        RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapNafDerivation ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrapNafDerivation" );
-        iGbaNafDerivation = REINTERPRET_CAST( 
-        	RMmCustomAPI::TSimAuthenticationGbaNafDerivation*, basePtr );
-
-        authenticationDataPackage.PackData( iGbaNafDerivation, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrapNafDerivation" );
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskUpdate ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMskUpdate" );  
-        iMgvMskUpdate = REINTERPRET_CAST( 
-        	RMmCustomAPI::TSimAuthenticationMgvMskUpdate*, basePtr );
-
-        authenticationDataPackage.PackData( iMgvMskUpdate, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMskUpdate" );
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMtkGeneration ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMtkGeneration" );
-        iMgvMtkGeneration = REINTERPRET_CAST( 
-        	RMmCustomAPI::TSimAuthenticationMgvMtkGeneration*, basePtr );
-
-        authenticationDataPackage.PackData( iMgvMtkGeneration, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMtkGeneration" );
-        }
-    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskDeletion ==
-        basePtr->ExtensionId() )
-        {
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMskDeletion" );
-        iMgvMskDeletion = REINTERPRET_CAST( 
-        	RMmCustomAPI::TSimAuthenticationMgvMskDeletion*, basePtr );
-
-        authenticationDataPackage.PackData( iMgvMskDeletion, &rfStateInfo  ); 
-TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMskDeletion" ); 
-        }
-    else
-        {
-TFLOGSTRING2( "CMmCustomTSY: Invalid authentication type specified: %d", basePtr->ExtensionId() );
-        ret = KErrNotSupported;
-
-        iEapSim = NULL;
-        iEapAka = NULL;
-		iGbaBootstrap = NULL;
-		iGbaBootstrapUpdate = NULL;
-		iGbaNafDerivation = NULL;
-		iMgvMskUpdate = NULL;
-		iMgvMtkGeneration = NULL;
-		iMgvMskDeletion = NULL;
-
-        //ReqCompleted( aTsyReqHandle, ret );
-        }
-
-    // Check if Rand received from network is valid
-    // when if basePtr has ExtensionId of EEapSim or EEapAka
-    if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
-        basePtr->ExtensionId() || RMmCustomAPI::TSimAuthenticationBase::
-        EEapAka == basePtr->ExtensionId())/* || RMmCustomAPI::
-        TSimAuthenticationBase::EGbaBootstrap == basePtr->ExtensionId())*/
-	    {
-		ret =  CheckRandValidityL( rand );
-	    }
-      
-    if ( KErrNone == ret )
-       {
-       ret = ( iMmPhoneTsy->MessageManager()->HandleRequestL(
-           ECustomGetSimAuthenticationDataIPC, &authenticationDataPackage ) );
-
-       // check result
-       if ( KErrNone == ret )
-           {
-           // Save the req handle type
-           iReqHandleType = ECustomTsyGetSimAuthenticationData;
-           }
-       else
-           {
-           iEapSim = NULL;
-           iEapAka = NULL;
-		   iGbaBootstrap = NULL;
-	       iGbaBootstrapUpdate = NULL;
-		   iGbaNafDerivation = NULL;
-		   iMgvMskUpdate = NULL;
-		   iMgvMtkGeneration = NULL;
-		   iMgvMskDeletion = NULL;
-
-           ReqCompleted( aTsyReqHandle, ret );
-           }
-       }
-    else
-        {
-        iEapSim = NULL;
-        iEapAka = NULL;
-		iGbaBootstrap = NULL;
-		iGbaBootstrapUpdate = NULL;
-		iGbaNafDerivation = NULL;
-		iMgvMskUpdate = NULL;
-		iMgvMtkGeneration = NULL;
-		iMgvMskDeletion = NULL;
-
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSimAuthentication
-// Completes sim authenticaiton request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSimAuthentication(
-    CMmDataPackage* aDataPackage,
-    TInt aResult )
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::CompleteSimAuthentication" );
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSimAuthenticationData );
-
-    if ( KErrNone == aResult )
-        {
-        if ( ECustomTsyReqHandleUnknown != reqHandle )
-            {
-            RMmCustomAPI::TSimAuthenticationBase* basePtr;
-            aDataPackage->UnPackData( &basePtr );
-
-            // if 2G authentication needs to be completed
-            if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
-                basePtr->ExtensionId() )
-                {
-                RMmCustomAPI::TSimAuthenticationEapSim* eapSim;
-
-                aDataPackage->UnPackData( &eapSim );
-
-                // Copy data to client
-                iEapSim->iSRES.Copy( eapSim->iSRES );
-                iEapSim->iKC.Copy( eapSim->iKC );
-
-                iEapSim = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-                }
-            // if 3G authentication needs to be completed
-            else if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
-                basePtr->ExtensionId() )
-                {
-                RMmCustomAPI::TSimAuthenticationEapAka* eapAka;
-
-                aDataPackage->UnPackData( &eapAka );
-
-                // Copy data to client
-                iEapAka->iRES.Copy( eapAka->iRES );
-                iEapAka->iCK.Copy( eapAka->iCK );
-                iEapAka->iIK.Copy( eapAka->iIK );
-
-                iEapAka = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-                }
-            else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
-                basePtr->ExtensionId() )
-                {
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrap" );
-                RMmCustomAPI::TSimAuthenticationGbaBootstrap* gbaBootstrap;
-
-                aDataPackage->UnPackData( &gbaBootstrap );
-
-                // Copy data to client
-                iGbaBootstrap->iRES.Copy( gbaBootstrap->iRES );
-                iGbaBootstrap->iAUTS.Copy( gbaBootstrap->iAUTS );
-
-                iGbaBootstrap = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrap" );
-                }
-            else if ( 
-                RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapUpdate ==
-                basePtr->ExtensionId() )
-                {
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrapUpdate" );                
-                RMmCustomAPI::TSimAuthenticationGbaBootstrapUpdate* 
-                    gbaBootstrapUpdate;
-
-                aDataPackage->UnPackData( &gbaBootstrapUpdate );
-
-                // Copy data to client
-                iGbaBootstrapUpdate->iRandomParameters.Copy( 
-                    gbaBootstrapUpdate->iRandomParameters );
-
-                iGbaBootstrapUpdate = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrapUpdate" );
-                }
-            else if ( 
-                RMmCustomAPI::TSimAuthenticationBase::
-                    EGbaBootstrapNafDerivation == basePtr->ExtensionId() )
-                {
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrapNafDerivation" );                
-                RMmCustomAPI::TSimAuthenticationGbaNafDerivation* 
-                    gbaNafDerivation;
-
-                aDataPackage->UnPackData( &gbaNafDerivation );
-
-                // Copy data to client
-                iGbaNafDerivation->iKsExtNaf.Copy( 
-                    gbaNafDerivation->iKsExtNaf );
-
-                iGbaNafDerivation = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrapNafDerivation" );                
-                }
-            else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskUpdate ==
-                    basePtr->ExtensionId() )
-                {
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EMgvMskUpdate" );                
-                RMmCustomAPI::TSimAuthenticationMgvMskUpdate* mgvMskUpdate;
-
-                aDataPackage->UnPackData( &mgvMskUpdate );
-
-                // Copy data to client
-                iMgvMskUpdate->iMikey.Copy( mgvMskUpdate->iMikey );
-                // Smartcard support for MobileTV
-                iMgvMskUpdate->iBCASTManagement.Copy( mgvMskUpdate->iBCASTManagement );
-                iMgvMskUpdate->iParentalRating.Copy( mgvMskUpdate->iParentalRating );
-                iMgvMskUpdate->iSecurityPolicyExt.Copy( mgvMskUpdate->iSecurityPolicyExt );
-                               
-                iMgvMskUpdate = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EMgvMskUpdate" );
-                }
-            else if ( RMmCustomAPI::TSimAuthenticationBase::
-                    EMgvMtkGeneration == basePtr->ExtensionId() )
-                {
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EMgvMtkGeneration" );                
-                RMmCustomAPI::TSimAuthenticationMgvMtkGeneration* 
-                    mgvMtkGeneration;
-
-                aDataPackage->UnPackData( &mgvMtkGeneration );
-
-                // Copy data to client
-                iMgvMtkGeneration->iMtkSalt.Copy( mgvMtkGeneration->iMtkSalt );
-                // Smartcard support for MobileTV
-                iMgvMtkGeneration->iBCASTManagement.Copy( mgvMtkGeneration->iBCASTManagement );
-                iMgvMtkGeneration->iParentalControl.Copy( mgvMtkGeneration->iParentalControl );
-                iMgvMtkGeneration->iTrafficEncryptionKey.Copy( mgvMtkGeneration->iTrafficEncryptionKey );
-                iMgvMtkGeneration = NULL;
-
-                ReqCompleted( reqHandle, aResult );
-TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EMgvMtkGeneration" ); 
-                }
-            else if ( RMmCustomAPI::TSimAuthenticationBase::
-                    EMgvMskDeletion == basePtr->ExtensionId() )
-                {
-                ReqCompleted( reqHandle, aResult );
-                }
-            else
-                {
-TFLOGSTRING2( "CMmCustomTSY: Invalid authentication type specified: %d", basePtr->ExtensionId() );
-                aResult = KErrArgument;
-                ReqCompleted( reqHandle, aResult );
-                }
-            }
-        }
-    else if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrTimedOut == aResult )
-            {
-            iEapSim = NULL;
-            iEapAka = NULL;
-            }
-        else
-            {
-            RMmCustomAPI::TSimAuthenticationBase* basePtr;
-            aDataPackage->UnPackData( &basePtr );
-
-            // if no datapackage is received in error response
-            if ( NULL == basePtr )
-                {
-                iEapAka = NULL;
-                iEapSim = NULL;
-                }
-            else
-                {
-                // if 3G authentication needs to be completed
-                // copy AUTS sequence to client
-                if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
-                        basePtr->ExtensionId() )
-                    {
-                    RMmCustomAPI::TSimAuthenticationEapAka* eapAka;
-                    aDataPackage->UnPackData( &eapAka );
-
-                    iEapAka->iAUTS.Copy( eapAka->iAUTS );
-
-                    iEapAka = NULL;
-                    }
-                
-                else if( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
-                        basePtr->ExtensionId() )
-                    {
-TFLOGSTRING( "TSYMH: CompleteSimAuthentication RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap" );
-                    RMmCustomAPI::TSimAuthenticationGbaBootstrap* gbabootstrap;
-                    aDataPackage->UnPackData( &gbabootstrap );
-
-                    iGbaBootstrap->iAUTS.Copy( gbabootstrap->iAUTS );
-                    }
-                    
-                iEapSim = NULL;
-                }
-            }
-
-	    // reset pointer to client data
-		iGbaBootstrap = NULL;
-		iGbaBootstrapUpdate = NULL;
-		iMgvMskUpdate = NULL;
-		iMgvMtkGeneration = NULL;
-		iMgvMskDeletion = NULL;
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SimAuthenticationCancel
-// Cancels sim authentication request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SimAuthenticationCancel()
-    {
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSimAuthenticationData );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-	    {
-	    // reset pointer to client data
-	    iEapSim = NULL;
-	    iEapAka = NULL;
-		iGbaBootstrap = NULL;
-		iGbaBootstrapUpdate = NULL;
-		iMgvMskUpdate = NULL;
-		iMgvMtkGeneration = NULL;
-		iMgvMskDeletion = NULL;
-		
-	    // complete
-        ReqCompleted( reqHandle, KErrCancel );
-
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckRandValidityL
-// Checks if rand received from network is valid
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CheckRandValidityL(
-    TBuf8<16> aRand )
-    {
-    TInt ret( KErrNone );
-
-    TDesC8& rand = aRand;
-
-    CSHA1* sha1 = CSHA1::NewL();
-
-    sha1->Reset();
-
-    TPtrC8 messageDigest = sha1->Final( rand );
-
-    ret = FindSetBitsFromBackup( messageDigest );
-
-    // If bits were not found from rand_db.prv or
-    // if rand_db.prv itself was not found
-    if ( KErrNone == ret || KErrNotFound == ret )
-        {
-        ret = InsertBlobsToRandDb( messageDigest );
-        }
-
-    delete sha1;
-    sha1 = NULL;
-
-    if ( KErrArgument == ret && 0 == iFreshBitCounter )
-       {
-TFLOGSTRING( "CMmCustomTsy: RAND rejected" );
-       }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CreateRandDb
-// Creates rand_db.cur
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CreateRandDb()
-    {
-    TInt ret = ( KErrNone );
-
-    // local variable initialized to zero
-    TInt counter = 0;
-
-
-    // fileSize is initialized to 2 because of filesize calculation method
-    TInt fileSize = 2;
-
-    RFs   fs;
-    RFile file;
-    
-    ret = fs.Connect();
-    
-    TDriveNumber driveNumber;
-    driveNumber = fs.GetSystemDrive();
-    fs.CreatePrivatePath( driveNumber );
-    fs.SetSessionToPrivate( driveNumber );
-    
-    if ( KErrNone == ret )
-        {
-        ret = file.Create( fs, KRandDb, EFileShareAny );
-
-        if ( KErrNone != ret )
-            {
-TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' creation failed!" );
-            }
-        else if ( KErrNone == ret )
-            {
-            ret = file.Open( fs, KRandDb, EFileShareAny | EFileWrite );
-
-            if ( KErrNone == ret )
-                {
-                // calculates how many bits can be addressed with current
-                // BLOB_SIZE
-                for ( counter = 1; counter < BLOB_SIZE; counter++ )
-                    {
-                    fileSize = ( fileSize * 2 );
-                    }
-                // max number of bits is divided by 8 to get the actual
-                // filesize
-                fileSize = ( fileSize / 8 );
-
-                ret = file.SetSize( fileSize + METADATA_SIZE );
-
-				// empty tbuf for rand_db initialization
-				TBuf8<1024> empty;
-				TInt chunkSize = 1024;
-				empty.FillZ( chunkSize );
-				
-                // reset every byte of newly created rand_db to zero
-				TInt maxSize = ( fileSize + METADATA_SIZE );
-                for ( counter = 0; counter < maxSize;
-                    counter+=chunkSize )
-                    {
-                    TInt writeSize = maxSize - counter;
-                    if(writeSize > chunkSize)
-                        {
-                        writeSize = chunkSize;
-                        }
-                    ret = file.Write( counter, empty, writeSize );
-                    }
-
-                if ( KErrNone != ret )
-                    {
-TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' initialization failed!" );
-                    file.Close();
-                    }
-                }
-            else
-                {
-TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' open failed!" );
-                }
-            }
-
-        if ( KErrNone == ret )
-            {
-            file.Close();
-            fs.Close();
-            }
-        else
-            {
-            fs.Close();
-            }
-        }
-    else
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
-        }
-
-    // Give some time for file.Close() and fs.Close() to complete
-    User::After( 200000 );
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::InsertBlobsToRandDb
-// Inserts blobs to rand_db.cur
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::InsertBlobsToRandDb(
-    TPtrC8 aMessageDigest )
-    {
-    RFs fs;
-    RFile file;
-
-    TBuf8<1> byteFromRandDb;
-
-    TInt ret = KErrNone;
-
-    // Many local variables initialized to zero
-    TInt8 counter = 0;
-    TInt8 counter2 = 0;
-
-    TUint16 hexDigit = 0;
-    TUint8 blob = 0;
-    TInt byteNumber = 0;
-    TInt bit = 0;
-
-    TUint16 assignedBits = 0;
-    iFreshBitCounter = 0;
-
-    ret = fs.Connect();
-       
-    TDriveNumber driveNumber;
-    driveNumber = fs.GetSystemDrive();
-    fs.CreatePrivatePath( driveNumber );
-    fs.SetSessionToPrivate( driveNumber );
-
-    if ( KErrNone == ret )
-        {
-        ret = file.Open( fs, KRandDb, EFileShareExclusive | EFileWrite );
-        if ( KErrNotFound == ret )
-            {
-            ret = CreateRandDb();
-
-            if ( KErrNone == ret )
-                {
-                ret = file.Open( fs, KRandDb, EFileShareExclusive |
-                    EFileWrite );
-                if( KErrNone != ret )
-                    {
-TFLOGSTRING( "TSY: CMmCustomTsy: rand_db open failed" );
-                    }
-                }
-            if ( KErrNone != ret )
-                {
-                fs.Close();
-
-                return ret;
-                }
-            }
-
-        for ( counter = 0; counter < 20; counter++ )
-            {
-            // reset loop variables
-            hexDigit = 0;
-            assignedBits = 0;
-
-            // read one hexDigit from message digest
-            hexDigit = static_cast< TUint16 > ( aMessageDigest[counter] );
-            hexDigit <<= 8;
-            counter++;
-            hexDigit |= static_cast< TUint16 > ( aMessageDigest[counter] );
-
-            bit = 1;
-
-            // read as many bits from hexDigit as blobSize indicates
-            for ( counter2 = 0; counter2 < BLOB_SIZE; counter2++ )
-                {
-                assignedBits |= bit & hexDigit;
-                bit <<= 1;
-                }
-
-            byteNumber = ( assignedBits / 8 );
-            bit = ( assignedBits - ( byteNumber * 8 ) );
-
-            ret = file.Read( byteNumber, byteFromRandDb  );
-            if( KErrNone != ret )
-                {
-                break;
-                }
-
-            blob = 128;
-            blob >>= bit;
-
-            // if bit is not already set
-            if ( !blob == ( blob & byteFromRandDb[0] ) )
-                {
-
-                byteFromRandDb[0] |= blob;
-
-                ret = file.Write( byteNumber, byteFromRandDb );
-                if( KErrNone != ret )
-                    {
-                    break;
-                    }
-
-                iFreshBitCounter++;
-                }
-            }
-
-        file.Close();
-        fs.Close();
-        }
-    else
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
-        return ret;
-        }
-
-    // if no new bits were found e.g. RAND will be rejected
-    if ( 0 == iFreshBitCounter )
-        {
-        ret = KErrArgument;
-        }
-    else
-        {
-        ret = UpdateBitCounter();
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::UpdateBitCounter
-// Updates bitcounter information on rand_db.cur
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::UpdateBitCounter()
-    {
-    TInt ret( KErrNone );
-
-    RFs fs;
-    RFile file;
-
-    TBuf8<2> bitCounterBytes;
-
-    // local varibales initialized to zero
-    TUint16 bitCounter = 0;
-    TUint16 temporaryBitCounter = 0;
-    TInt8 counter = 0;
-
-    // fileSize is initialized to 2 because of filesize calculation method
-    TInt fileSize = 2;
-
-    ret = fs.Connect();
-    
-    TDriveNumber driveNumber;
-    driveNumber = fs.GetSystemDrive();
-    fs.CreatePrivatePath( driveNumber );
-    fs.SetSessionToPrivate( driveNumber );
-    
-    if ( KErrNone == ret )
-        {
-        ret = file.Open( fs, KRandDb, EFileShareExclusive | EFileWrite );
-        if ( KErrNone == ret )
-            {
-            // calculate filesize
-            for ( counter = 1; counter < BLOB_SIZE; counter++ )
-                {
-                fileSize = ( fileSize * 2 );
-                }
-            fileSize = ( fileSize / 8 );
-
-            ret = file.Read( fileSize, bitCounterBytes, 2 );
-            if ( KErrNone == ret  )
-                {
-                // read bitcounter info from rand_db
-                bitCounter = STATIC_CAST( TUint16, bitCounterBytes[0] );
-                bitCounter <<= 8;
-                bitCounter |= bitCounterBytes[1];
-
-                // add fresh bits to bit counter info
-                bitCounter += iFreshBitCounter;
-
-                temporaryBitCounter = bitCounter;
-                bitCounterBytes[1] = STATIC_CAST( TUint8,
-                  temporaryBitCounter );
-                temporaryBitCounter >>= 8;
-                bitCounterBytes[0] = STATIC_CAST( TUint8,
-                  temporaryBitCounter );
-
-                ret = file.Write( fileSize, bitCounterBytes, 2 );
-
-                // if more than half of the available bits are set
-                if ( ( fileSize * 4 ) < bitCounter )
-                    {
-                    ret = fs.Delete( KRandDbPrev );
-
-                    if ( KErrNotFound == ret  || KErrNone == ret )
-                        {
-                        ret = file.Rename( KRandDbPrev );
-                        }
-                    }
-                }
-
-            file.Close();
-            }
-
-        fs.Close();
-        }
-    else
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::FindSetBitsFromBackup
-// Checks rand_db.prv for set bits
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::FindSetBitsFromBackup(
-    TPtrC8 aMessageDigest )
-    {
-    RFs fs;
-    RFile file;
-    TBuf8<1> byteFromRandDb;
-
-    TInt ret = KErrNone;
-
-    // Many local variables initialized to zero
-    TInt8 counter = 0;
-    TInt8 counter2 = 0;
-
-    TUint16 hexDigit = 0;
-    TUint8 blob = 0;
-    TInt byteNumber = 0;
-    TInt bit = 0;
-
-    TUint16 assignedBits = 0;
-    iFreshBitCounter = 0;
-
-    ret = fs.Connect();
-    
-    TDriveNumber driveNumber;
-    driveNumber = fs.GetSystemDrive();
-    fs.CreatePrivatePath( driveNumber );
-    fs.SetSessionToPrivate( driveNumber );
-    
-    if( KErrNone == ret )
-    {
-    ret = file.Open( fs, KRandDbPrev, EFileShareAny | EFileRead );
-
-    if ( KErrNone == ret )
-        {
-        for ( counter = 0; counter < 20; counter++ )
-            {
-            // reset loop variables
-            hexDigit = 0;
-            assignedBits = 0;
-
-            // read one hexDigit from message digest
-            hexDigit = STATIC_CAST( TUint16, aMessageDigest[counter] );
-            hexDigit <<= 8;
-            counter++;
-            hexDigit |= STATIC_CAST( TUint16, aMessageDigest[counter] );
-
-            // Initialize bit to 1
-            bit = 1;
-
-            // read as many bits from hexDigit as blobSize indicates
-            for ( counter2 = 0; counter2 < BLOB_SIZE; counter2++ )
-                {
-                assignedBits |= bit & hexDigit;
-                bit <<= 1;
-                }
-
-            // calculate the byte and bit to be read from rand_db backup
-            byteNumber = ( assignedBits / 8 );
-            bit = ( assignedBits - ( byteNumber * 8 ) );
-
-            ret = file.Read( byteNumber, byteFromRandDb );
-            if ( KErrNone != ret )
-                {
-                break;
-                }
-
-            // Initialize blob to 10000000
-            blob = 128;
-            blob >>= bit;
-
-            // if bit is not found from old db
-            if ( !blob == ( blob & byteFromRandDb[0] ) )
-                {
-                iFreshBitCounter++;
-
-                file.Close();
-                fs.Close();
-
-                return ret;
-                }
-            }
-
-        file.Close();
-        fs.Close();
-
-        if ( 0 == iFreshBitCounter )
-            {
-            ret = KErrArgument;
-            }
-        else
-            {
-            ret = KErrNone;
-            }
-        }
-
-    if ( KErrNotFound == ret )
-        {
-        fs.Close();
-        }
-    }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::TerminateCallL
-// This method is used for terminating a call or all calls.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::TerminateCallL(
-    const TTsyReqHandle aTsyReqHandle,
-    const TName* aCallName )
-    {
-    // set return value to KErrNotFound
-    TInt ret( KErrNotFound );
-
-    TTsyReqHandle terminateCallHandle =
-        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyTerminateCall );
-
-    if ( 0 < terminateCallHandle )
-        {
-        //The request is already in processing because of previous request
-        //Complete request with status value informing the client about
-        //the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // Cases are:
-        // if parameter is ALL_CALLS
-        //     if any active or held call exists
-        //         hangup active and held calls
-        //     else
-        //         complete with KErrNone
-        // else (parameter is single call)
-        //     if call exists
-        //         hangup call
-        //     else
-        //         complete with KErrNotFound
-        //
-
-        // call id
-        TInt callId = -1;
-
-        // indicates if this is called in an error situation (ETrue)
-        // or by user request (EFalse);
-        TBool isError = EFalse;
-
-        // terminate all calls
-        // CompareF returns 0 if names are equal
-        if ( 0 == aCallName->CompareF( KTerminateAllCalls ) )
-            {
-            CMmCallTsy* activeCall =
-                iMmPhoneTsy->CallList()->GetMmCallByStatus(
-                    RMobileCall::EStatusConnected );
-            CMmCallTsy* heldCall =
-                iMmPhoneTsy->CallList()->GetMmCallByStatus(
-                    RMobileCall::EStatusHold );
-            CMmCallTsy* connectingCall =
-                iMmPhoneTsy->CallList()->GetMmCallByStatus(
-                    RMobileCall::EStatusDialling );
-            if ( NULL == connectingCall )
-                {
-                connectingCall =
-                iMmPhoneTsy->CallList()->GetMmCallByStatus(
-                    RMobileCall::EStatusConnecting );
-                }
-
-            if ( activeCall || heldCall || connectingCall )
-                {
-                // Let's have negative or zero mean "all active and held calls
-                // and the call id given by taking absolute value of
-                // parameter" as we need to somehow pass alerting call id,
-                // which is neither active or held call..
-                callId = ( NULL != connectingCall ) ?
-                    -TInt( connectingCall->CallId() ) : ( 0 );
-                CMmDataPackage dataPackage;
-                dataPackage.PackData( &callId, &isError );
-                ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
-                    ECustomTerminateCallIPC, &dataPackage );
-                }
-            else
-                {
-                ReqCompleted( aTsyReqHandle, KErrNone );
-                // return immediately, otherwise KErrNone would cause the
-                // request handle to be saved!
-                return KErrNone;
-                }
-            }
-        // terminate call by name
-        else
-            {
-            // change the cause value, a specific call termination is called
-            // when error has ocurred
-            isError = ETrue;
-
-            // get call object by name
-            CMmCallTsy* namedCall =
-                iMmPhoneTsy->CallList()->GetMmCallByName( aCallName );
-
-            // get call ID
-            if ( namedCall )
-                {
-                callId = namedCall->CallId();
-                CMmDataPackage dataPackage;
-                dataPackage.PackData( &callId, &isError );
-                ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
-                    ECustomTerminateCallIPC, &dataPackage );
-                }
-            }
-
-        if ( KErrNone != ret )
-            {
-            // request failed, complete with error value
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Store the request handle
-            iReqHandleType = ECustomTsyTerminateCall;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteTerminateCall
-// This method completes a TerminateCall or a DialCancel request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteTerminateCall(
-    TInt aError )
-    {
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteTerminateCall - aError: %d", aError );
-
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyTerminateCall );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // complete the request with reqhandle and aError
-        ReqCompleted( reqHandle, aError );
-        }
-    // Set 3rd party Dial check number to EFalse  
-    iISVDialNumberCheck = EFalse;    
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyDtmfEvent
-// This method allows a client to be notified when the DTMF phase of a call
-// has begun and completed
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyDtmfEvent(
-        RMmCustomAPI::TDtmfInfo* aInfo )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyDtmfEvent");
-    // save pointer to client data
-    iNotifyInfo = aInfo;
-
-    // save handle type
-    iReqHandleType = ECustomTsyNotifyDtmfEvent;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyDtmfEvent
-// Completes a NotifyDtmfEvent request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyDtmfEvent(
-    RMmCustomAPI::TDtmfInfo aInfo,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyDtmfEvent");
-    // reset request handle. Returns the deleted req handle.
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyDtmfEvent );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iNotifyInfo= aInfo;
-            }
-
-        // reset the internal variable
-        iNotifyInfo = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyDtmfEventCancel
-// This method cancels an outstanding notification of dtmf event, placed with
-// the NotifyDtmfEvent function.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyDtmfEventCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset pointer to client data
-    iNotifyInfo = NULL;
-
-    // reset reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyNotifyDtmfEvent );
-
-    // complete with KErrCancel
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetDiagnosticInfo
-// This function gets the SS diagnostic info (octets) of a call object.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetDiagnosticInfo(
-    const TTsyReqHandle aTsyReqHandle,
-    TName* aCallName )
-    {
-    TInt errorValue = KErrNone;
-    // get call object by name
-    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallByName(
-      aCallName );
-
-    // if call exists
-    if ( mmCall )
-        {
-        TUint8 diags = mmCall->GetDiagnostics();
-        //gets diagnostic value - check value -  return error code
-
-        if ( 0 != diags )
-            {
-TFLOGSTRING3( "TSY:CMmCustomTsy::GetDiagnosticInfo: Diagnostic info=%d asked for call id=%d", diags, mmCall->CallId() );
-            switch ( diags )
-                {                
-                case KDiagnosticInfoBarredWithCUG:
-                    errorValue = KErrDiagnosticInfoBarredWithCUG;
-                    break;
-                case KDiagnosticInfoBarredNoCUG:
-                    errorValue = KErrDiagnosticInfoBarredNoCUG; 
-                    break;
-                case KDiagnosticInfoBarredUnknownCUG:
-                    errorValue = KErrDiagnosticInfoBarredUnknownCUG;
-                    break;
-                case KDiagnosticInfoBarredIncompatibleCUG:
-                    errorValue = KErrDiagnosticInfoBarredIncompatibleCUG;
-                    break;
-                case KDiagnosticInfoBarredFailureCUG:
-                    errorValue = KErrDiagnosticInfoBarredFailureCUG;
-                    break;
-                case KDiagnosticInfoBarredClirNotSubscribed:
-                    errorValue = KErrDiagnosticInfoBarredClirNotSubscribed;
-                    break;   
-                case KDiagnosticInfoBarredCCBSPossible:
-                    errorValue = KErrDiagnosticInfoBarredCCBSPossible;
-                    break; 
-                case KDiagnosticInfoBarredCCBSNotPossible:
-                    errorValue = KErrDiagnosticInfoBarredCCBSNotPossible;
-                    break;
-                default:
-                    errorValue = KErrNone;
-                    break;
-                }
-            }
-TFLOGSTRING2( "TSY: CMmCustomTsy::GetDiagnosticInfo - ReqCompleted - Error code: %d", errorValue );
-        // complete errorvalue to client  - inform change  
-        ReqCompleted( aTsyReqHandle, errorValue ); 
-        }
-    else
-        {
-         // call is not found
-TFLOGSTRING("TSY: CMmCustomTsy::GetDiagnosticInfo - Call is not found");
-        ReqCompleted( aTsyReqHandle, KErrNotFound );
-        }
-TFLOGSTRING2( "TSY: CMmCustomTsy::GetDiagnosticInfo - Error code: %d", errorValue );
-   
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetDiagnosticOctects
-// This function sets the SS diagnostic octets of a call object when received
-// from DOS.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetDiagnosticOctects(
-    TInt aCallId,
-    TUint8 aDiags )
-    {
-    // get call object by id
-    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallById( aCallId );
-
-    // if call exists, set diagnostics
-    if ( mmCall )
-        {
-        mmCall->SetDiagnostics( aDiags );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetRemoteAlertingToneStatus
-// This function returns the remote alerting tone status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetRemoteAlertingToneStatus(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TRemoteAlertingToneStatus* aToneStatus )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetRemoteAlertingToneStatus");
-    TInt ret = iMmCustomExtInterface->GetRemoteAlertingToneStatus(
-        aToneStatus );
-
-    ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCallOrigin
-// This function returns the origin of the call (ETel or other), defined by
-// aCallName parameter.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCallOrigin(
-    const TTsyReqHandle aTsyReqHandle,
-    TName* aCallName,
-    RMmCustomAPI::TCallOrigin* aOrigin )
-    {
-    // get call object by name
-    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallByName(
-      aCallName );
-
-    // if call exists
-    if ( mmCall )
-        {
-        // get the call origin from Call Object
-        // if the call is a ghost call it means that is not made by ETEL
-         if ( mmCall->ETelOriginated() )
-            {
-            *aOrigin = RMmCustomAPI::EETelCall;
-            }
-         else
-            {
-            *aOrigin = RMmCustomAPI::EOutsider;
-            }
-        }
-    else // call not found
-        {
-        *aOrigin = RMmCustomAPI::EUnknown;
-        }
-
-    ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetAlsBlockedL
-// This method gets the alternating line service block status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetAlsBlockedL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TGetAlsBlockStatus* aBlockStatus )
-    {
-TFLOGSTRING3( "TSY: CMmCustomTsy::GetAlsBlockedL - Req handle: %d, Block status: %d", aTsyReqHandle, *aBlockStatus );
-    TTsyReqHandle getAlsBlockedHandle =
-        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetAlsBlocked );
-
-    if ( 0 < getAlsBlockedHandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to client data
-        iRetAlsBlockStatus = aBlockStatus;
-
-        // call DOS (no packed parameters)
-        TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
-            ECustomGetAlsBlockedIPC );
-
-        // check the result of the call
-        if ( KErrNone != ret )
-            {
-            ReqCompleted ( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Store the request handle
-            iReqHandleType = ECustomTsyGetAlsBlocked;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetAlsBlocked
-// Completes a GetAlsBlocked operation.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetAlsBlocked(
-    RMmCustomAPI::TGetAlsBlockStatus  aBlockStatus,
-    TInt aErrorCode )
-    {
-TFLOGSTRING3( "TSY: CMmCustomTsy::CompleteGetAlsBlocked - Block status: %d, Error code: %d", aBlockStatus, aErrorCode );
-    //reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetAlsBlocked );
-
-    // check if request was called
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        //check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iRetAlsBlockStatus = aBlockStatus;
-            }
-        // reset the internal variable
-        iRetAlsBlockStatus = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetAlsBlockedCancel
-// This method cancels getting of alternative line service block status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetAlsBlockedCancel()
-    {
-    // reset the pointer to client space
-    iRetAlsBlockStatus = NULL;
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetAlsBlocked );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::Get3GPBInfo
-// This method gets 3G phonebook info.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::Get3GPBInfo(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::T3GPBInfo* aInfo )
-    {
-    // Fill info struct
-    aInfo->iMaxLenAnr = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
-        iANRNumLengthMax;
-    aInfo->iMaxLenEmail = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
-        iEmailTextLengthMax;
-    aInfo->iMaxLenSne = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
-        iSNETextLengthMax;
-    aInfo->iMaxNumAnr = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
-        iANRNumOfEntriesPerEntry;
-    aInfo->iMaxNumEmail = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
-        iEmailNumOfEntriesPerEntry;
-    aInfo->iMaxNumGroupName = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
-        iGRPNumOfEntriesPerEntry;
-    aInfo->iMaxNumSne = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
-        iSNENumOfEntriesPerEntry;
-    aInfo->iMaxLenGroupName = -1;   // Not known
-
-    // complete with KErrNone
-    ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::Get3GPBInfoCancel
-// This method cancels getting of 3G phonebook info
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::Get3GPBInfoCancel()
-    {
-    // Get3GPBInfo is completed immediately after the request
-    // has been done. No cancelling possible.
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetAlsBlockedL
-// This method sets the alternating line service (ALS) block status using the
-// aBlockStatus variable.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SetAlsBlockedL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TSetAlsBlock* aBlockStatus )
-    {
-TFLOGSTRING3( "TSY: CMmCustomTsy::SetAlsBlockedL - Req handle: %d, Block status: %d", aTsyReqHandle, *aBlockStatus );
-    // get the handle
-    TTsyReqHandle setAlsBlockedHandle =
-        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsySetAlsBlocked );
-
-    if ( setAlsBlockedHandle > 0 )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to aBlockStatus (used for notification)
-        iSetBlockStatus = aBlockStatus;
-
-        // call DOS
-        // packed parameter: TSetAlsBlock (block status)
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( aBlockStatus );
-        TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
-            ECustomSetAlsBlockedIPC, &dataPackage );
-
-        // check success
-        if ( KErrNone != ret )
-            {
-            ReqCompleted ( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Store the request handle
-            iReqHandleType = ECustomTsySetAlsBlocked;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSetAlsBlocked
-// Completes a SetAlsBlocked request. If value for completion is KErrNone and
-// a NotifyAlsBlockedChanged has been requested this method calls
-// CompleteNotifyAlsBlockedChanged.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSetAlsBlocked(
-    TInt aErrorCode )
-    {
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteSetAlsBlocked - Error code: %d", aErrorCode );
-    // get reaq handle for NotifyAlsBlockedChanged
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyNotifyAlsBlockedChanged );
-
-    // check if notification was requested and Set was ok
-    if( ECustomTsyReqHandleUnknown != reqHandle && KErrNone == aErrorCode )
-        {
-        CompleteNotifyAlsBlockedChanged ();
-        }
-
-    // reset saved pointer
-    iSetBlockStatus = NULL;
-
-    // reset req handle. Returns the deleted req handle
-    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsySetAlsBlocked );
-
-    // check if request was called
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyAlsBlockedChanged
-// This method notifies a client of changed ALS blocked status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyAlsBlockedChanged(
-    RMmCustomAPI::TGetAlsBlockStatus* aBlockStatus )
-    {
-    // save pointer to client data
-    iRetNotifyAlsBlockStatus = aBlockStatus;
-
-    // save handle type
-    iReqHandleType = ECustomTsyNotifyAlsBlockedChanged;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyAlsBlockedChanged
-// This method notifies a client of changed ALS blocked status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyAlsBlockedChanged()
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyAlsBlockedChanged );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle && iSetBlockStatus)
-        {
-        // set the information for the client
-#ifndef USING_CTSY_DISPATCHER
-        if ( RMmCustomAPI::EActivateBlock == *iSetBlockStatus )
-#else	//USING_CTSY_DISPATCHER
-        if ( iSetBlockStatus && RMmCustomAPI::EActivateBlock == *iSetBlockStatus )
-#endif //USING_CTSY_DISPATCHER
-            {
-            *iRetNotifyAlsBlockStatus = RMmCustomAPI::EBlockStatusActive;
-            }
-        else // EDeactivateBlock == *iSetBlockStatus
-            {
-            *iRetNotifyAlsBlockStatus = RMmCustomAPI::EBlockStatusInactive;
-            }
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteNotifyAlsBlockedChanged - Block status: %d", *iSetBlockStatus );
-
-        // reset the varible
-        iRetNotifyAlsBlockStatus = NULL;
-
-        // complete
-        ReqCompleted( reqHandle, KErrNone );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyAlsBlockedChangedCancel
-// Cancels an outstanding NotifyAlsBlockedChanged notification.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyAlsBlockedChangedCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset the pointer to client data
-    iRetNotifyAlsBlockStatus = NULL;
-
-    // reset the reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyAlsBlockedChanged );
-
-    // complete
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetAlsPpSupportL
-// Gets ALS support information from Product Profile.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetAlsPpSupportL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TAlsSupport* aSupport )
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL");
-    // save pointer to client space
-    iAlsSupport = aSupport;
-    
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetAlsPpSupport );
-
-    if ( 0 < reqHandle )
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL - Already processing, save handle");
-        //The request is already in processing because of previous request
-        //Complete request with status value informing the client about
-		TCheckAlsPpSupportRequest* req = 
-                              new (ELeave) TCheckAlsPpSupportRequest();
-		req->iReqHandle = aTsyReqHandle;
-		req->iRetSupport = aSupport;
-		iCheckAlsPpSupportRequests.AppendL( req );
-        }
-    else
-        {
-    // call DOS (no packed parameters)
-    TInt ret = Phone()->MessageManager()->HandleRequestL(
-        ECustomCheckAlsPpSupportIPC );
-
-    if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL - Save handle");
-        // Save the req handle type
-        iReqHandleType = ECustomTsyGetAlsPpSupport;
-			// save request in queue for completion
-			TCheckAlsPpSupportRequest* req = 
-                              new (ELeave) TCheckAlsPpSupportRequest();
-			req->iReqHandle = aTsyReqHandle;
-			req->iRetSupport = aSupport;
-			iCheckAlsPpSupportRequests.AppendL( req );
-	        }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetAlsPpSupportCancel
-// Cancels an outstanding asynchronous request to get ALS support.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetAlsPpSupportCancel()
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportCancel");
-    // reset the pointer to client data
-    iAlsSupport = NULL;
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetAlsPpSupport );
-
-    // complete
-    TInt checkAlsPpSupportRequestsCount = 
-        iCheckAlsPpSupportRequests.Count();
-TFLOGSTRING2( "TSY: CMmCustomTsy::GetAlsPpSupportCancel - Cancel %d requests", checkAlsPpSupportRequestsCount );
-
-	for ( TInt i=0; i < checkAlsPpSupportRequestsCount ; i++ )
-		{
-        TCheckAlsPpSupportRequest* req = 
-            iCheckAlsPpSupportRequests[ i ];
-		//reset the return pointer
-        ReqCompleted( req->iReqHandle, KErrCancel );
-		}
-    // Complete the client request
-	// Destroy Array 
- 	iCheckAlsPpSupportRequests.ResetAndDestroy();
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetAlsPpSupport
-// Completes a GetAlsPpSupport request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetAlsPpSupport(
-    RMmCustomAPI::TAlsSupport aAlsSupport,
-    TInt aErrorCode )
-    {
-TFLOGSTRING3( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS support: %d, Error: %d", aAlsSupport, aErrorCode );
-    TBool status = EFalse;
-    
-    // Check if the get was called internally during boot
-    if( iMmPhoneTsy->GetAlsQueryInBoot() )
-        {
-    	if( RMmCustomAPI::EAlsSupportOn == aAlsSupport )
-            {
-TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS supported by SIM" );
-            status = ETrue;
-            }
-        //Update ALS status from sim
-        iMmPhoneTsy->SetAlsState( status );
-    	iMmPhoneTsy->SetAlsQueryInBoot( EFalse );
-        }
-    
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetAlsPpSupport );
-
-    // check if request was called
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iAlsSupport = aAlsSupport;
-
-            if( RMmCustomAPI::EAlsSupportOn == aAlsSupport )
-            	{
-TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS supported by SIM" );
-            	status = ETrue;
-            	}
-            //Update ALS status from sim
-            iMmPhoneTsy->SetAlsState( status );
-            }
-
-        // reset the internal variable
-        iAlsSupport = NULL;
-        // complete
-        TInt checkAlsPpSupportRequestsCount = 
-            iCheckAlsPpSupportRequests.Count();
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - Complete %d requests", checkAlsPpSupportRequestsCount );
-
-		for ( TInt i=0; i < checkAlsPpSupportRequestsCount ; i++ )
-			{
-            TCheckAlsPpSupportRequest* req = 
-                iCheckAlsPpSupportRequests[ i ];
-            
-            //set value in client side
-            *(req->iRetSupport) = aAlsSupport;
-			//reset the return pointer
-            ReqCompleted( req->iReqHandle, aErrorCode );
-			}
-        // Complete the client request
-		//Destroy Array 
- 		iCheckAlsPpSupportRequests.ResetAndDestroy();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCipheringInfoL
-// Get Ciphering Info
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCipheringInfoL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TCipheringInfo* aInfo )
-    {
-    // this is special case, only called when Ciphering indicator
-    // is forced off for some operators
-    if ( iMmPhoneTsy->GetNetTsy()->CipheringIndicatorForcedOff() )
-        {
-        aInfo->iIndStatus = EFalse;
-        aInfo->iCiphStatus = EFalse;
-
-        ReqCompleted( aTsyReqHandle, KErrNone );
-        }
-    // normal case
-    else
-        {
-        TTsyReqHandle getCipheringInfoHandle =
-            iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetCipheringInfo );
-
-        if ( 0 < getCipheringInfoHandle )
-            {
-            // The request is already in processing because of previous request
-            // Complete request with status value informing the client about
-            // the situation.
-            ReqCompleted( aTsyReqHandle, KErrServerBusy );
-            }
-        else
-            {
-            // save pointer to client space
-            iRetCipheringInfo = aInfo;
-
-            // call DOS (no packed parameters)
-            TInt ret = Phone()->MessageManager()->HandleRequestL(
-                ECustomGetCipheringInfoIPC );
-
-            // check the correct completion of the call to the extension
-            if ( KErrNone != ret )
-                {
-                ReqCompleted( aTsyReqHandle, ret );
-                }
-            else
-                {
-                // Save the req handle type
-                iReqHandleType = ECustomTsyGetCipheringInfo;
-                }
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetCipheringInfo
-// Completes a GetCipheringInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetCipheringInfo(
-    TBool aCipherIndStatus,
-    TInt aErrorCode )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCipheringInfo );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            iRetCipheringInfo->iIndStatus = aCipherIndStatus;
-            iRetCipheringInfo->iCiphStatus = iCipheringInfo.iCiphStatus;
-            }
-
-        // reset the internal variable
-        iRetCipheringInfo = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCipheringInfoCancel
-// This function cancels an outstanding GetCipheringInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCipheringInfoCancel()
-    {
-    // reset the pointer to client space
-    iRetCipheringInfo = NULL;
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCipheringInfo );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCipheringInfoChange
-// Notifies a client of ciphering info change.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyCipheringInfoChange(
-    RMmCustomAPI::TCipheringInfo* aInfo )
-    {
-    // save pointer to client data
-    iRetNotifyCipheringInfoChange = aInfo;
-
-    // set the reqhandle type
-    iReqHandleType = ECustomTsyNotifyCipheringInfoChange;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCipheringInfoChangeCancel
-// Cancels an outstanding NotifyCipheringInfoChange request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyCipheringInfoChangeCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset the pointer to client data
-    iRetNotifyCipheringInfoChange = NULL;
-
-    // reset the reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyCipheringInfoChange );
-
-    // complete
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyCipheringInfoChange
-// Completes the NotifyCipheringInfoChange method.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyCipheringInfoChange(
-    TBool aCipherIndStatus,
-    TBool aCipherStatus,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange entered");
-    // this is special case, only called when Ciphering indicator
-    // is forced off for some operators
-    if ( iMmPhoneTsy->GetNetTsy()->CipheringIndicatorForcedOff() )
-        {
-TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange: Ciphering forced off");
-        TTsyReqHandle handle = iTsyReqHandleStore->ResetTsyReqHandle(
-            ECustomTsyNotifyCipheringInfoChange );
-
-        if ( ECustomTsyReqHandleUnknown != handle )
-            {
-TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange: Ciphering forced off, request completed");
-            iRetNotifyCipheringInfoChange->iIndStatus = EFalse;
-            iRetNotifyCipheringInfoChange->iCiphStatus = ETrue;
-
-            iRetNotifyCipheringInfoChange = NULL;
-
-            ReqCompleted( handle, KErrNone );
-            }
-        }
-
-     // check if information has changed, continue only in case is changed
-    else
-        {
-        if ( iCipheringInfo.iIndStatus  != aCipherIndStatus ||
-            iCipheringInfo.iCiphStatus != aCipherStatus )
-            {
-            // save the information in the custom TSY
-            iCipheringInfo.iIndStatus = aCipherIndStatus;
-            iCipheringInfo.iCiphStatus = aCipherStatus;
-
-            // reset req handle. Returns the deleted req handle
-            TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-                ECustomTsyNotifyCipheringInfoChange );
-
-            // check if handle exists
-            if ( ECustomTsyReqHandleUnknown != reqHandle )
-                {
-                // set the information for the client
-                iRetNotifyCipheringInfoChange->iIndStatus =
-                    iCipheringInfo.iIndStatus;
-                iRetNotifyCipheringInfoChange->iCiphStatus =
-                    iCipheringInfo.iCiphStatus;
-
-                // reset the varible
-                iRetNotifyCipheringInfoChange = NULL;
-
-                // complete
-                ReqCompleted( reqHandle, aErrorCode );
-
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyNSPSStatus
-// Notifies a client of a change in NSPS (No Service Power Save) status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyNSPSStatus(
-    RMmCustomAPI::TNspsStatus* aNspsStatus )
-    {
-    // save pointer to client data
-    iRetNspsStatus = aNspsStatus;
-
-    // set the reqhandle type
-    iReqHandleType = ECustomTsyNotifyNSPSStatus;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyNSPSStatus
-// Completes the notification of a change in NSPS (No Service Power Save)
-// status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyNSPSStatus(
-    TBool aNspsStatus )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyNSPSStatus );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // set the information for the client
-        if ( aNspsStatus ) // the NSPS mode is ON
-            {
-            *iRetNspsStatus = RMmCustomAPI::ENspsOn;
-            }
-        else
-            {
-            *iRetNspsStatus = RMmCustomAPI::ENspsOff;
-            }
-
-        // reset the varible
-        iRetNspsStatus = NULL;
-
-        // complete
-        ReqCompleted( reqHandle, KErrNone );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyNSPSStatusCancel
-// Cancels an outstanding notification of a change in NSPS (No Service Power
-// Save) status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyNSPSStatusCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset pointer to client data
-    iRetNspsStatus = NULL;
-
-    // reset reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyNotifyNSPSStatus );
-
-    // complete with KErrCancel
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NetWakeupL
-// Send  NetWakeUp request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NetWakeupL(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // intialize ret value
-    TInt ret ( KErrNone );
-
-    // call DOS (no packed parameters)
-    ret = Phone()->MessageManager()->HandleRequestL( ECustomNetWakeupIPC );
-
-    // check result
-    if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else
-        {
-        // Save the req handle type
-        iReqHandleType = ECustomTsyNetWakeup;
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNetWakeup
-// Completes a NetWakeup request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNetWakeup(
-     TInt aErrorCode )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNetWakeup );
-
-    // check the handle and complete
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-#ifdef REQHANDLE_TIMER
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetTypeOfResponse
-// Sets the type of response for a given handle.
-// Automatic mode includes an automatic response in case of no response from
-// the DOS in a specified time.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::SetTypeOfResponse(
-    const TInt aReqHandleType,
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    TInt timeOut( 0 );
-    TInt ipc( 0 );
-
-    switch ( aReqHandleType )
-        {
-        case ECustomTsyCallGsmBlackListClear:
-            timeOut = KMmCustomCallGsmBlackListClearTimeOut;
-            ipc = ECustomClearCallBlackListIPC;
-            break;
-        case ECustomTsyTerminateCall:
-            timeOut = KMmCustomTerminateCallTimeOut;
-            ipc = ECustomTerminateCallIPC;
-            break;
-        case ECustomTsyGetAlsBlocked:
-            timeOut = KMmCustomGetAlsBlockedTimeOut;
-            ipc = ECustomGetAlsBlockedIPC;
-            break;
-        case ECustomTsySetAlsBlocked:
-            timeOut = KMmCustomSetAlsBlockedTimeOut;
-            ipc = ECustomSetAlsBlockedIPC;
-            break;
-        case ECustomTsyGetCipheringInfo:
-            timeOut = KMmCustomGetCipheringInfoTimeOut;
-            ipc = ECustomGetCipheringInfoIPC;
-            break;
-        case ECustomTsyCheckEmergencyNumber:
-            timeOut = KMmCustomCheckEmergencyNumberTimeout;
-            ipc = ECustomCheckEmergencyNumberIPC;
-            break;
-        case ECustomTsyGetNetworkOperatorName:
-            timeOut = KMmCustomGetNetworkOperatorNameTimeout;
-            ipc = ECustomGetNetworkProviderNameIPC;
-            break;
-        case ECustomTsyCheckTwoDigitDialSupport:
-            timeOut = KMmCustomCheckTwoDigitDialTimeout;
-            ipc = ECustomCheckTwoDigitDialSupportIPC;
-            break;
-        case ECustomTsyGetOperatorName:
-            timeOut = KMmCustomGetOperatorNameTimeout;
-            ipc = ECustomGetOperatorNameIPC;
-            break;
-        case ECustomTsyGetProgrammableOperatorLogo:
-            timeOut = KMmCustomGetProgrammableOperatorLogoTimeout;
-            ipc = ECustomGetProgrammableOperatorLogoIPC;
-            break;
-        case ECustomTsyResetNetServer:
-            timeOut = KMmCustomResetNetServer;
-            ipc = ECustomResetNetServerIPC;
-            break;
-        case ECustomTsyGetSimFileInfo:
-            timeOut = KMmCustomReadSimFile;
-            ipc = ECustomReadSimFileIPC;
-            break;
-        case ECustomTsyGetLifeTimerInfo:
-            timeOut = KMmCustomReadSimFile;
-            ipc = ECustomGetLifeTimeIPC;
-            break;
-        case ECustomTsyIMSAuthenticate:
-            timeOut = KMmCustomIMSAuthenticate;
-            ipc = EMobilePhoneIMSAuthenticate;
-            break;
-        case ECustomTsyGetSimAuthenticationData:
-            timeOut = KMmCustomGetSimAuthenticationData;
-            ipc = ECustomGetSimAuthenticationDataIPC;
-            break;
-        case ECustomTsySetDriveMode:
-            timeOut = KMmCustomSetDriveModeTimeOut;
-            ipc = ECustomSetDriveModeIPC;
-            break;
-        case ECustomTsyReadHSxPAStatus:
-            timeOut = KMmCustomTsyReadHSxPAStatusTimeOut;
-            ipc = ECustomReadHSxPAStatusIPC;
-            break;
-        case ECustomTsyWriteHSxPAStatus:
-            timeOut = KMmCustomTsyWriteHSxPAStatusTimeOut;
-            ipc = ECustomWriteHSxPAStatusIPC;
-            break;
-        case ECustomTsyGetIccCallForwardingStatus:
-        	timeOut = KMmCustomTsyGetIccCallForwardingStatusTimeOut;
-        	ipc = ECustomGetIccCallForwardingStatusIPC;
-        	break;
-        case ECustomTsyGetCellInfo:
-            timeOut = KMmCustomTsyGetCellInfoTimeOut;
-            ipc = ECustomGetCellInfoIPC;
-            break;
-       	case ECustomTsyGetUSIMServiceSupport:
-            timeOut = KMmCustomGetUSIMServiceSupportTimeOut;
-            ipc = ECustomGetServiceTableSupportbyApplicationIPC;
-            break;
-        case ECustomTsyGetSystemNetworkBand:
-            timeOut = KMmCustomTsyGetSystemNetworkBandTimeOut;
-            ipc = ECustomGetBandSelectionIPC;
-            break;
-        default:
-            // Does not use timer
-            iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType,
-                aTsyReqHandle );
-            break;
-        }
-
-    if ( 0 < timeOut )
-        {
-        // The timeout parameter is given in seconds.
-        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle,
-            timeOut, ipc );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::Complete
-// Completes the request due the timer expiration.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::Complete(
-    TInt aReqHandleType,
-    TInt aError,
-    TInt aIPC )
-    {
-TFLOGSTRING3( "TSY: CMmCustomTsy::Complete - ReqHandleType: %d Error: %d", aReqHandleType, aError );
-    TBool subTsyReqFound = EFalse;
-    TInt max = GetMaxNumberOfSubsystems();
-    CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr();
-
-    // Check Custom TSY's subsystems' req handles first
-    for ( TInt i = 0; max > i; i++ )
-        {
-        // check which custom object handles this IPC
-        if ( ( NULL != subTsyPtr[i] ) &&
-             ( EFalse != subTsyPtr[i]->SupportingIPC( aIPC ) ) )
-            {
-            // call complete method of the right custom object
-            subTsyPtr[i]->Complete( aReqHandleType, aError );
-            i = max;
-            subTsyReqFound = ETrue;
-            }
-        }
-
-    // If the reg handle was not found on Custom TSY's subsystems check the
-    // Custom TSY's request handles
-    if ( !subTsyReqFound )
-        {
-        TBuf<1> name(KNullDesC);
-        RMmCustomAPI::TOperatorNameInfo operatorNameInfo;
-        RMmCustomAPI::TLifeTimeData timeData;
-
-        // All possible Custom TSY req handle types are listed in the
-        // switch case below.
-        switch ( aReqHandleType )
-            {
-            case ECustomTsyCallGsmBlackListClear:
-                CompleteClearCallBlackList ( aError );
-                break;
-            case ECustomTsyTerminateCall:
-                CompleteTerminateCall( aError );
-                break;
-            case ECustomTsyGetAlsBlocked:
-                CompleteGetAlsBlocked( RMmCustomAPI::EBlockStatusUnknown,
-                    aError );
-                break;
-            case ECustomTsySetAlsBlocked:
-                CompleteSetAlsBlocked( aError );
-                break;
-            case ECustomTsyGetCipheringInfo:
-                CompleteGetCipheringInfo( EFalse, aError );
-                break;
-            case ECustomTsyCheckEmergencyNumber:
-                CompleteCheckEmergencyNumber( 0, aError );
-                break;
-            case ECustomTsyGetNetworkOperatorName:
-                CompleteGetNetworkOperatorName( &name, aError );
-                break;
-            case ECustomTsyCheckTwoDigitDialSupport:
-                CompleteCheckTwoDigitDialSupport(
-                    RMmCustomAPI::ETwoDigitDialSupportOff, aError );
-                break;
-            case ECustomTsyGetOperatorName:
-                // we don't initialize as this is response to error situation
-                CompleteGetOperatorName( operatorNameInfo , aError );
-                break;
-            case ECustomTsyResetNetServer:
-                CompleteResetNetServer( aError );
-                break;
-            case ECustomTsyGetSimFileInfo:
-                CompleteGetSimFileInfo( NULL, aError );
-                break;
-            case ECustomTsyGetLifeTimerInfo:
-                CompleteGetLifeTime( timeData, aError );
-                break;
-            case ECustomTsyGetProgrammableOperatorLogo:
-                CompleteGetProgrammableOperatorLogo( NULL, NULL, aError );
-                break;
-            case ECustomTsyGetSimAuthenticationData:
-                CompleteSimAuthentication( NULL, aError );
-                break;
-            case ECustomTsyIMSAuthenticate:
-                CompleteImsAuthentication( NULL, aError );
-                break;
-            case ECustomTsySetDriveMode:
-                CompleteSetDriveMode( aError );
-                break;
-            case ECustomTsyReadHSxPAStatus:
-                CompleteReadHSxPAStatus( NULL, aError );
-                break;
-            case ECustomTsyWriteHSxPAStatus:
-                CompleteWriteHSxPAStatus( aError );
-                break;
-            case ECustomTsyGetCellInfo:
-                CompleteGetCellInfo( NULL, aError );
-                break;
-            case ECustomTsyGetUSIMServiceSupport:
-                CompleteGetUSIMServiceSupport( NULL, aError );
-                break;
-            case ECustomTsyGetSystemNetworkBand:
-                CompleteGetSystemNetworkBand(
-                    RMmCustomAPI::ENetworkBandAny,
-                    RMmCustomAPI::KCapsNetworkModeDual,
-                    aError );
-                break;
-            case ECustomTsyGetIccCallForwardingStatus:
-                CompleteGetIccCallForwardingStatus( NULL, aError );
-                break;                
-            default:
-                break;
-            }
-        }
-    }
-#endif // REQHANDLE_TIMER
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ClearCallBlackList
-// Clears the Call Blacklist.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ClearCallBlackListL(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    TInt retValue ( KErrNone );
-
-    TTsyReqHandle reqhandle =
-        iTsyReqHandleStore->GetTsyReqHandle(
-            ECustomTsyCallGsmBlackListClear );
-
-    if ( 0 < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // call DOS and initialize ret value
-        // no parameters for DOS call
-        retValue = Phone()->MessageManager()->
-            HandleRequestL( ECustomClearCallBlackListIPC );
-
-        // check result
-        if ( KErrNone != retValue )
-            {
-            ReqCompleted( aTsyReqHandle, retValue );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsyCallGsmBlackListClear;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteClearCallBlackList
-// Completes a ClearCallBlackList request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteClearCallBlackList(
-    TInt aErrorCode )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCallGsmBlackListClear );
-
-    // check the handle and complete
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ClearCallBlackListCancel
-// Cancels an outstanding ClearCallBlackList request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ClearCallBlackListCancel()
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCallGsmBlackListClear );
-    // complete with KErrCancel
-    // check the handle and complete
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetAirTimeDuration
-// Gets the air time duration information from CMmPhoneTsy.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetAirTimeDuration(
-    const TTsyReqHandle aTsyReqHandle,
-    TTimeIntervalSeconds* aTime )
-    {
-    // get the air time duration from phone
-    Phone()->GetAirTimeDuration( *aTime );
-
-    // complete with KErrNone
-    ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckEmergencyNumberL
-// Checks whether given number is emergency number or not.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CheckEmergencyNumberL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TEmerNumberCheckMode* aNumberMode,
-    TBool* aResult )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL number=%S", &(aNumberMode->iNumber) );
-
-    TInt ret(KErrGeneral);
-
-    TTsyReqHandle requestHandle =
-        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyCheckEmergencyNumber );
-
-    // 3rd Dial check number
-    if( iISVDialNumberCheck && 0 == requestHandle )
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL - 3rd party client nbr check aResult  = %d" , aResult );
-        iEmergencyNumberCheckMode   = aNumberMode;
-        iEmergencyNumberCheckResult = aResult;
-
-        // parameter for DOS call: a TEmerNumberCheckMode
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( aNumberMode );
-        ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomCheckEmergencyNumberIPC, &dataPackage );
-        }
-
-    //Normal case
-    else
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL - aResult  = %d" , aResult );
-
-        if ( ( 0 < requestHandle || iISVDialNumberCheck ) && 0 != aTsyReqHandle )
-            {
-            // The request is already in processing because of previous request
-            ret = KErrServerBusy;
-            }
-        
-        else if( iISVDialNumberCheck && 0 == aTsyReqHandle )
-            {
-            ret = KErrServerBusy;
-            }
-        
-        else
-            {
-            // save pointers
-            iEmergencyNumberCheckMode   = aNumberMode;
-            iEmergencyNumberCheckResult = aResult;
-
-            // parameter for DOS call: a TEmerNumberCheckMode
-            CMmDataPackage dataPackage;
-            dataPackage.PackData( aNumberMode );
-            ret = Phone()->MessageManager()->HandleRequestL(
-                    ECustomCheckEmergencyNumberIPC, &dataPackage );
-
-            // check the correct completion of the call
-            if ( KErrNone == ret )
-                {
-                // Save the req handle type
-                iReqHandleType = ECustomTsyCheckEmergencyNumber;
-                }
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteCheckEmergencyNumber
-// Completes checking of emergency number.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteCheckEmergencyNumber(
-    RMmCustomAPI::TMobileTelNumber* aTelNumber,
-    TInt aErrorValue )
-    {
-
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber" );
-
-    // 3rd party number check completion0
-    if( iISVDialNumberCheck )
-        {
-        //Reset
-        TBool isEmergencyNbr = EFalse;
-
-        if ( KErrNone == aErrorValue && NULL == aTelNumber )
-            {
-            *iEmergencyNumberCheckResult = ETrue;
-            isEmergencyNbr = EFalse;
-            }
-        else
-            {
-            *iEmergencyNumberCheckResult = ETrue;
-            isEmergencyNbr = ETrue;
-            }
-
-    // check is the Dial cancel NULL
-    if( iISVDialNumberCheckObject )
-      {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber - Complete3rdPartyCallNbrCheck isEmergencyNbr = %d",isEmergencyNbr );
-      iISVDialNumberCheckObject->Complete3rdPartyCallNbrCheck(
-        isEmergencyNbr );
-      }
-
-      //reset pointer
-      iISVDialNumberCheckObject = NULL;
-      iISVDialNumberCheck = EFalse;
-      }
-
-    // Normal case
-    else
-      {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCheckEmergencyNumber );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorValue )
-            {
-            //set the information for the client
-        if ( aTelNumber )
-            {
-            *iEmergencyNumberCheckResult = ETrue;
-            iEmergencyNumberCheckMode->iNumber = *aTelNumber;
-            }
-        else
-            {
-            *iEmergencyNumberCheckResult = EFalse;
-            }
-        }
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber number=%S", &(iEmergencyNumberCheckMode->iNumber) );
-
-        // reset the internal variable
-        iEmergencyNumberCheckResult = NULL;
-        iEmergencyNumberCheckMode   = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorValue );
-        }
-
-        }
-
-    //Reset
-    iISVDialNumberCheck = EFalse;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckEmergencyNumberCancel
-// Cancels checking of emergency number.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CheckEmergencyNumberCancel()
-    {
-    iEmergencyNumberCheckResult = NULL;
-
-    // reset the req handle.Returns the deleted req handle.
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCheckEmergencyNumber );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyPhoneBookCacheReady
-// Notifies client when phonebookcache is ready.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyPhoneBookCacheReady(
-    const TTsyReqHandle,
-    TName*  aPndName )
-    {
-    iPndName = aPndName;
-
-    iReqHandleType = ECustomTsyNotifyCacheReady;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyPhoneBookCacheReady
-// Completes notify phonebook cache ready.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyPhoneBookCacheReady(
-    TName& aPndName,
-    TInt aResult )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyCacheReady );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        *iPndName = aPndName;
-
-        iPndName = NULL;
-
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyPhoneBookCacheReadyCancel
-// Cancels notify phonebook cache ready notification.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyPhoneBookCacheReadyCancel(
-    const TTsyReqHandle )
-    {
-    // reset request handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyCacheReady );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetPndCacheStatus
-// This function gets current status of phonebook caching.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetPndCacheStatus(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TPndCacheStatus* aPndStatus,
-    const TName* aPndName )
-    {
-    
-    TInt error = KErrNone;
-    // used phonebook is Adn
-    if ( 0 == aPndName->CompareF( KETelIccAdnPhoneBook ) )
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - ADN phonebook status: %d", iAdnCacheStatus);
-        *aPndStatus = iAdnCacheStatus;
-        }
-    // used phonebook is Fdn
-    else if ( 0 == aPndName->CompareF( KETelIccFdnPhoneBook ) )
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - FDN phonebook status: %d", iFdnCacheStatus);
-        *aPndStatus = iFdnCacheStatus;
-        }
-    // used phonebook doesn't have cache
-    else if ( ( 0 == aPndName->CompareF( KETelIccBdnPhoneBook ) ) ||
-              ( 0 == aPndName->CompareF( KETelIccSdnPhoneBook ) ) ||
-              ( 0 == aPndName->CompareF( KETelIccVoiceMailBox ) ) )
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - No cache for: %S ", aPndName);
-        *aPndStatus = RMmCustomAPI::ECacheNotUsed;
-        }
-    else
-        {
-TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - No cache found for: %S ", aPndName);        
-        error = KErrArgument;
-        }
-
-    ReqCompleted( aTsyReqHandle, error );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::UpdateCacheStatus
-// This method updates phonebook caching status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::UpdateCacheStatus(
-    RMmCustomAPI::TPndCacheStatus aPndStatus,
-    TName& aPndName )
-    {
-TFLOGSTRING3("TSY: CMmCustomTsy::UpdateCacheStatus - Phonebook: %S status: %d", &aPndName, aPndStatus);
-    // if used phonebook is Adn
-    if ( 0 == aPndName.CompareF( KETelIccAdnPhoneBook ) )
-        {
-        iAdnCacheStatus = aPndStatus;
-        }
-    // else if used phonebook is Fdn
-    else if ( 0 == aPndName.CompareF( KETelIccFdnPhoneBook ) )
-        {
-        iFdnCacheStatus = aPndStatus;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetNetworkOperatorNameL
-// Gets the network operator name from the SIM card.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetNetworkOperatorNameL(
-    TDes* aNetworkOperatorName )
-    {
-    // call DOS (no packed parameters)
-    TInt ret = Phone()->MessageManager()->HandleRequestL(
-        ECustomGetNetworkProviderNameIPC );
-
-    if ( KErrNone == ret )
-        {
-        // save pointer to client space and req handle type
-        iNetworkOperatorName = aNetworkOperatorName;        
-        iReqHandleType = ECustomTsyGetNetworkOperatorName;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetNetworkOperatorName
-// Completes getting network operator name from SIM card.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetNetworkOperatorName(
-    TDes* aName,
-    TInt aError )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetNetworkOperatorName );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( ( KErrNone == aError ) && ( NULL != aName ) )
-            {
-            if ( aName->Length() <= iNetworkOperatorName->MaxLength() )
-                {            
-                // set the information for the client
-                *iNetworkOperatorName = *aName;
-                }
-            else
-                {
-                // client delivered too small buffer
-                aError = KErrArgument;               
-                }
-            }
-
-        // reset the internal variable
-        iNetworkOperatorName = NULL;
-        // complete
-        ReqCompleted( reqHandle, aError );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetNetworkOperatorNameCancel
-// Cancels getting network operator name from SIM card.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetNetworkOperatorNameCancel()
-    {
-    // reset the pointer to client space
-    iNetworkOperatorName = NULL;
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetNetworkOperatorName );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SsAdditionalInfoNotification
-// Notification request for additional info message.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SsAdditionalInfoNotification(
-    RMmCustomAPI::TSsAdditionalInfo* aSsAdditionalInfo )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::SsAdditionalInfoNotification");
-    iRetSsAdditionalInfo = aSsAdditionalInfo;
-    iReqHandleType = ECustomTsyNotifySsAdditionalInfo;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SsAdditionalInfoNotificationCancel
-// Cancels notification request for additional info message.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SsAdditionalInfoNotificationCancel(
-    const TTsyReqHandle )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::SsAdditionalInfoNotificationCancel");
-    iRetSsAdditionalInfo = NULL;
-
-    // reset reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifySsAdditionalInfo );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSsAdditionalInfoNotification
-// Completes SsAdditionalInfo notification.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSsAdditionalInfoNotification(
-    RMmCustomAPI::TSsAdditionalInfo* aSsAdditionalInfo,
-    TInt aError )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteSsAdditionalInfoNotification");
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifySsAdditionalInfo );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // copy data to client
-        iRetSsAdditionalInfo->iOperationCode =
-            aSsAdditionalInfo->iOperationCode;
-        iRetSsAdditionalInfo->iAdditionalInfo.Copy(
-            aSsAdditionalInfo->iAdditionalInfo );
-
-        // reset pointer to client
-        iRetSsAdditionalInfo = NULL;
-
-        // Complete the client request
-        ReqCompleted( reqHandle, aError );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckTwoDigitDialSupportL
-// Checks two digit dialing support from Product Profile.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CheckTwoDigitDialSupportL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TTwoDigitDialSupport* aSupport )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CheckTwoDigitDialSupportL");
-    // save pointer to client space
-    iTwoDigitDialSupport = aSupport;
-
-    // call DOS
-    TInt error = Phone()->MessageManager()->HandleRequestL(
-        ECustomCheckTwoDigitDialSupportIPC );
-
-    if ( KErrNone != error )
-        {
-        ReqCompleted( aTsyReqHandle, error );
-        }
-    else
-        {
-        // Save the req handle type
-        iReqHandleType = ECustomTsyCheckTwoDigitDialSupport;
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckTwoDigitDialSupport
-// Completes a CheckTwoDigitDialSupport request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteCheckTwoDigitDialSupport(
-     RMmCustomAPI::TTwoDigitDialSupport aTwoDigitDialSupport,
-     TInt aErrorCode )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCheckTwoDigitDialSupport );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iTwoDigitDialSupport = aTwoDigitDialSupport;
-            }
-
-        // reset the internal variable
-        iTwoDigitDialSupport = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CheckTwoDigitDialSupportCancel
-// Cancels an outstanding CheckTwoDigitDialSupport request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::CheckTwoDigitDialSupportCancel()
-    {
-    // reset the pointer to client data
-    iTwoDigitDialSupport = NULL;
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyCheckTwoDigitDialSupport );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetOperatorNameL
-// Get the programmable operator name of the current network.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetOperatorNameL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TOperatorNameInfo* aOperatorNameInfo )
-    {
-    // save a pointer to client space
-    iRetOperatorNameInfo = aOperatorNameInfo;
-
-    // call DOS (no packed parameters)
-    TInt ret = Phone()->MessageManager()->HandleRequestL(
-        ECustomGetOperatorNameIPC );
-
-    // check result
-    if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else
-        {
-        // Save the req handle type
-        iReqHandleType = ECustomTsyGetOperatorName;
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetOperatorNameCancel
-// Cancels an outstanding GetOperatorName request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetOperatorNameCancel()
-    {
-    // reset the pointer to client space
-    iRetOperatorNameInfo = NULL;
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetOperatorName );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetOperatorName
-// Completes an outstanding GetOperatorName request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetOperatorName(
-    RMmCustomAPI::TOperatorNameInfo& aOperatorNameInfo,
-    TInt aErrorValue )
-    {
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetOperatorName );
-
-    // check the validity of the handler
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorValue )
-            {
-            // Copy the programmable operator name info in the client space
-            *iRetOperatorNameInfo = aOperatorNameInfo;
-            }
-        // reset the pointer to client space
-        iRetOperatorNameInfo = NULL;
-
-        // complete operation
-        ReqCompleted ( reqHandle, aErrorValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifySsNetworkEvent
-// Notifies the client about a network generated SS event.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifySsNetworkEvent(
-    RMmCustomAPI::TSsTypeAndMode* aSsTypeAndMode,
-    RMmCustomAPI::TSsInfo* aSsInfo )
-    {
-    // save pointer to client data
-    iSsTypeAndMode = aSsTypeAndMode;
-    iSsInfo = aSsInfo;
-
-    // set the reqhandle type
-    iReqHandleType = ECustomTsySsNotification;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifySsNetworkEventCancel
-// Cancels an outstanding NotifySsNetworkEvent.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifySsNetworkEventCancel()
-    {
-    // erase pointers to client data
-    iSsTypeAndMode = NULL;
-    iSsInfo = NULL;
-
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySsNotification );
-
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( tsyReqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifySsNetworkEvent
-// Completes NotifySsNetworkEvent.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifySsNetworkEvent(
-   RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode,
-   RMmCustomAPI::TSsInfo& aSsInfo,
-   TInt aErrorCode )
-    {
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySsNotification );
-
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-        {
-        if ( KErrNone == aErrorCode )
-            {
-            // save data in client space
-            *iSsTypeAndMode = aSsTypeAndMode;
-            *iSsInfo = aSsInfo;
-            }
-        // reset the pointers to client space
-        iSsTypeAndMode = NULL;
-        iSsInfo = NULL;
-        // complete
-        ReqCompleted( tsyReqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetProgrammableOperatorLogoL
-// Gets the programmable operator logo.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetProgrammableOperatorLogoL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TOperatorId* aOperatorId,
-    RMmCustomAPI::TOperatorLogo* aLogo )
-    {
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetProgrammableOperatorLogo );
-
-    if ( 0 < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save a pointer to client space
-        iRetOperatorLogoInfo = aLogo;
-        iRetOperatorIdInfo = aOperatorId;
-
-        // call DOS
-        // packed parameter: RMmCustomAPI::TOperatorId
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( aOperatorId );
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomGetProgrammableOperatorLogoIPC, &dataPackage );
-
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsyGetProgrammableOperatorLogo;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetProgrammableOperatorLogoCancel
-// Cancels an outstanding GetProgrammableOperatorLogo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetProgrammableOperatorLogoCancel()
-    {
-    // reset the pointers
-    iRetOperatorLogoInfo = NULL;
-    iRetOperatorIdInfo = NULL;
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetProgrammableOperatorLogo );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetProgrammableOperatorLogo
-// Completes GetProgrammableOperatorLogo.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetProgrammableOperatorLogo(
-    RMmCustomAPI::TOperatorId* aOperatorIdInfo,
-    RMmCustomAPI::TOperatorLogo* aLogoData,
-    TInt aErrorValue )
-    {
-   
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetProgrammableOperatorLogo );
-    
-    // check the validity of the handler
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorValue)
-            {
-            // if client has allocated big enough space for logo data, logo data
-            // is appended into client space pointer
-            if ( ( aLogoData->iOperatorLogo ) &&
-                ( aLogoData->iOperatorLogo->Size() <=
-                iRetOperatorLogoInfo->iOperatorLogo->MaxSize() ) )
-                {
-                // Copy the logo info in the client space
-                iRetOperatorLogoInfo->iLogoInfo = aLogoData->iLogoInfo;
-                // Copy the logo in the client space
-                iRetOperatorLogoInfo->iOperatorLogo->Copy( *(
-                    aLogoData->iOperatorLogo ) );
-                // Copy the operator info in the client space
-                *iRetOperatorIdInfo = *aOperatorIdInfo;
-                }
-            else
-                {
-                // logo will not fit into client space
-                aErrorValue = KErrTooBig;
-                }
-            }
-
-        // reset the pointers
-        iRetOperatorLogoInfo = NULL;
-        iRetOperatorIdInfo = NULL;
-
-        // complete operation
-        ReqCompleted ( reqHandle, aErrorValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SatRefreshCompleteNotification
-// Notifies the client of SAT refresh.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SatRefreshCompleteNotification()
-    {
-    iReqHandleType = ECustomTsySatRefreshCompleteNotification;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SatRefreshCompleteNotificationCancel
-// Cancels an outstanding asynchronous SatRefreshCompleteNotification request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SatRefreshCompleteNotificationCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsySatRefreshCompleteNotification );
-
-    // complete with KErrCancel
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSatRefreshCompleteNotification
-// Completes the notification of SAT refresh to the client.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSatRefreshCompleteNotification()
-    {
-    //Note iRefresh is never set to ETrue
-    
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsySatRefreshCompleteNotification );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // complete
-        ReqCompleted( reqHandle, KErrNone );
-        // set sat refresh flag off
-        SetSatRefreshStatus ( EFalse );
-        //Reset ME ALS info
-        Phone()->ResetMEAlsInfo();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetSatRefreshStatus
-// Sets aSatRefreshStatus into internal variable iIsRefresh.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CMmCustomTsy::SetSatRefreshStatus(
-    TBool aSatRefreshStatus )
-    {
-    iIsRefresh = aSatRefreshStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ResetNetServerL
-// Resets the net server to previous network selection when user doesn't select
-// a network from the network list got in a search.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ResetNetServerL(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::ResetNetServerL");
-    // call DOS (no packed parameters)
-    TInt ret = Phone()->MessageManager()->HandleRequestL(
-        ECustomResetNetServerIPC );
-
-    if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-    else
-        {
-        // Save the req handle type
-        iReqHandleType = ECustomTsyResetNetServer;
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteResetNetServer
-// Completes a ResetNetServer request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteResetNetServer(
-    TInt aErrorValue )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteResetNetServer - Error: %d", aErrorValue );
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyResetNetServer );
-
-    // Check the reqHandle
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-        {
-        // Check that the error value is not KErrCancel, because this will
-        // cause panic on the ETEL side - error: EZGO-6WVD5N  
-        if ( KErrCancel == aErrorValue )
-            {
-            // Convert the error value from KErrCancel to KErrNotReady
-            aErrorValue = KErrNotReady; 
-            }
-            
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteResetNetServer - complete with error value: %d", aErrorValue );
-        ReqCompleted( tsyReqHandle, aErrorValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyNetworkConnectionFailure
-// Notifies of a network connection failure. This failure is so severe that
-// the only way to recover is to restart the phone.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyNetworkConnectionFailure()
-    {
-    iReqHandleType = ECustomTsyNotifyNetworkConnectionFailure;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyNetworkConnectionFailureCancel
-// Cancels a NotifyNetworkConnectionFailure.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyNetworkConnectionFailureCancel()
-    {
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyNetworkConnectionFailure );
-
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( tsyReqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyNetworkConnectionFailure
-// Completes NotifyNetworkConnectionFailure.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyNetworkConnectionFailure()
-    {
-    // If SIM is inserted complete network connection failure
-    if ( iMmPhoneTsy->NosBootState()->iSIMReady )
-        {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyNetworkConnectionFailure");
-        // reset the reqhandle
-        TTsyReqHandle tsyReqHandle =
-            iTsyReqHandleStore->ResetTsyReqHandle(
-            ECustomTsyNotifyNetworkConnectionFailure );
-
-        // Check the reqHandle
-        if( ECustomTsyReqHandleUnknown != tsyReqHandle )
-            {
-            ReqCompleted ( tsyReqHandle, KErrNone );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SsRequestCompleteNotification
-// Notification request for "SS request complete".
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SsRequestCompleteNotification(
-    TInt* aStatus )
-    {
-    iRetSsRequestComplete = aStatus;
-    iReqHandleType = ECustomTsyNotifySsRequestComplete;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSsRequestCompleteNotification
-// Completes notification request for "SS request complete".
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSsRequestCompleteNotification(
-    TInt aSsStatus,
-    TInt aError )
-    {
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifySsRequestComplete );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( NULL == iRetSsRequestComplete )
-            {
-            ReqCompleted( reqHandle, KErrCorrupt );
-            }
-        else
-            {
-            *iRetSsRequestComplete = aSsStatus;
-            iRetSsRequestComplete = NULL;
-            ReqCompleted( reqHandle, aError );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SsRequestCompleteNotificationCancel
-// Cancels notification request for "SS request complete".
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SsRequestCompleteNotificationCancel(
-    const TTsyReqHandle )
-    {
-    iRetSsRequestComplete = NULL;
-
-    // reset reqhandler
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifySsRequestComplete );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel    	
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSystemNetworkModesL
-// This method gets the supported network modes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSystemNetworkModesL(
-    const TTsyReqHandle aTsyReqHandle,
-    TUint32* aSystemNetworkModes )
-    {
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetSystemNetworkModes );
-
-    if ( 0 < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to the packaged life timer info
-        iSystemNetworkModes = aSystemNetworkModes;
-        TBool useCurrentRats = EFalse;
-        // call DOS
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( &useCurrentRats );
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomGetSystemNetworkModesIPC, &dataPackage );
-
-        // Check response of the extension
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsyGetSystemNetworkModes;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetSystemOrCurrentNetworkModes
-// Completes a GetSystemNetworkModes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetSystemOrCurrentNetworkModes(
-    TUint32 aSystemNetworkModes,
-    TInt aResult )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSystemNetworkModes );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // set the information for the client
-        *iSystemNetworkModes = aSystemNetworkModes;
-
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-
-    // reset req handle. Returns the deleted req handle
-    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCurrentSystemNetworkMode );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // set the information for the client
-        *iCurrentNetworkMode = aSystemNetworkModes;
-
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSystemNetworkModesCancel
-// Cancels a GetSystemNetworkModes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSystemNetworkModesCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset the pointer to client data
-    iSystemNetworkModes = NULL;
-
-    // reset the reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSystemNetworkModes );
-
-    // complete
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetSystemNetworkModeL
-// This method sets the system network mode.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SetSystemNetworkModeL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkModeCaps )
-    {
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsySetSystemNetworkMode );
-
-    if ( 0 < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // call DOS
-        RMmCustomAPI::TNetworkModeCaps networkModeCaps =
-            *aSystemNetworkModeCaps;
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( &networkModeCaps );
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomSetSystemNetworkModeIPC, &dataPackage );
-
-        // Check response of the extension
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsySetSystemNetworkMode;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSetSystemNetworkMode
-// Completes a SetSystemNetworkMode.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSetSystemNetworkMode(
-    TInt aResult )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsySetSystemNetworkMode );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCurrentSystemNetworkModeL
-// This function gets the current network mode GSM/UMTS/Dual.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCurrentSystemNetworkModeL(
-    const TTsyReqHandle aTsyReqHandle,
-    TUint32* aNetworkMode )
-    {
-TFLOGSTRING("CMmCustomTsy::GetCurrentSystemNetworkModeL");
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetCurrentSystemNetworkMode );
-
-    if ( 0 < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        iCurrentNetworkMode = aNetworkMode;
-        // call DOS
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomGetCurrentSystemNetworkModesIPC );
-
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            iReqHandleType = ECustomTsyGetCurrentSystemNetworkMode;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-//  CMmCustomTsy::GetCurrentSystemNetworkModeCancel
-//  Cancel outstanding request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCurrentSystemNetworkModeCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING("CMmCustomTsy::GetCurrentSystemNetworkModeCancel");
-
-    // reset pointer to client data
-    iCurrentNetworkMode = NULL;
-
-    // reset reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCurrentSystemNetworkMode );
-
-    // complete with KErrCancel
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSimFileInfoL
-// Gets data from a given location of a given sim file determined by the
-// aSimFileInfoPckg parameter. Saves the pointer to the client side store
-// buffer for further completion.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSimFileInfoL(
-    const TTsyReqHandle aTsyReqHandle,
-    TDes8* aSimFileInfoPckg,
-    TDes8* aSimResponseBuffer )
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL" );
-    TTsyReqHandle reqHandle =
-        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetSimFileInfo );
-
-    // Unpack the TSimFileInfo data
-    RMmCustomAPI::TSimFileInfoPckg* simFileInfoPckg =
-        ( RMmCustomAPI::TSimFileInfoPckg* ) aSimFileInfoPckg;
-
-    RMmCustomAPI::TSimFileInfo simFileInfo = ( *simFileInfoPckg )();
-
-    if ( 0 < reqHandle )
-        {
-        //The request is already in processing because of previous request
-        //Check if the request is the same than before
-        
-        //Check the file path in SIM where file is read, the offset from 
-        //beginning of the file and amount of data to read
-        if ( ( KErrNotFound != simFileInfo.iPath.Match( iGetSimFileInfoReq.iPath ) ) 
-        	&& ( iGetSimFileInfoReq.iOffSet == simFileInfo.iOffSet )
-        	&& ( iGetSimFileInfoReq.iSize == simFileInfo.iSize ) )
-        	{
-TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL - Same info already requested" );
-
-			TGetSimFileInfoRequest* req = new ( ELeave ) TGetSimFileInfoRequest();
-			req->iReqHandle = aTsyReqHandle;
-			req->iSimFileInfo = aSimResponseBuffer;
-			iGetSimFileInfoRequests.AppendL( req );
-        	}
-        else
-        	{
-            //Complete request with status value informing the client about
-            //the situation.
-            ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        	}
-        }
-    else
-        {
-        iGetSimFileInfoReq = simFileInfo;
-        // call DOS
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( &simFileInfo );
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomReadSimFileIPC, &dataPackage );
-
-        // check the return value of the call to DOS
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL - Save handle" );
-	        // Save the req handle type
-	        iReqHandleType = ECustomTsyGetSimFileInfo;
-			// Save request in queue for completion
-	        TGetSimFileInfoRequest* req = new ( ELeave ) TGetSimFileInfoRequest();
-			req->iReqHandle = aTsyReqHandle;
-			req->iSimFileInfo = aSimResponseBuffer;
-			iGetSimFileInfoRequests.AppendL( req );
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSimFileInfoCancel
-// Cancels an outstanding GetSimFileInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSimFileInfoCancel( TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoCancel" );
-    
-	for ( TInt i = 0; i < iGetSimFileInfoRequests.Count(); i++ )
-		{
-		TGetSimFileInfoRequest* req = iGetSimFileInfoRequests[ i ];
-		if ( aTsyReqHandle == req->iReqHandle )
-			{
-			//reset the return pointer
-	        ReqCompleted( req->iReqHandle, KErrCancel );
-			
-	        iGetSimFileInfoRequests.Remove( i );
-	        iGetSimFileInfoRequests.Compress();
-	        
-	        //Delete TGetSimFileInfoRequest object
-	        delete req;
-			}
-		}
-
-	if ( 0 == iGetSimFileInfoRequests.Count() )
-		{
-	    // reset the reqhandle
-	    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-	        ECustomTsyGetSimFileInfo );
-	    
-		//Destroy Array
-		iGetSimFileInfoRequests.ResetAndDestroy();
-		}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetSimFileInfo
-// Completes an outstanding GetSimFileInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetSimFileInfo(
-    TDesC8* aData,
-    TInt aError )
-    {
-TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetSimFileInfo" );
-    
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyGetSimFileInfo );
-    
-    // Check the reqHandle
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-        {
-        // complete
-        TInt getSimFileInfoRequestsCount = iGetSimFileInfoRequests.Count();
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteGetSimFileInfo - Complete %d requests", getSimFileInfoRequestsCount );
-        
-		for ( TInt i = 0; i < getSimFileInfoRequestsCount; i++ )
-		    {
-		    TGetSimFileInfoRequest* req = iGetSimFileInfoRequests[ i ];
-		
-		    if ( ( KErrNone == aError ) && aData )
-		        {
-		        // check the size....
-		        if ( req->iSimFileInfo->MaxLength() >= aData->Length() )
-		            {
-		            req->iSimFileInfo->Copy( *aData );
-		            ReqCompleted( req->iReqHandle, aError );
-		            }
-		        else // data is too big for client's buffer
-		            {
-		            req->iSimFileInfo->Zero();
-		            ReqCompleted( req->iReqHandle, KErrOverflow );
-		            }
-		        }
-		    else
-	            {
-	            req->iSimFileInfo->Zero();
-	            ReqCompleted( req->iReqHandle, aError );
-	            }
-		    }
-        }
-	
-    //Destroy Array 
-    iGetSimFileInfoRequests.ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetLifeTimeL
-// Gets the life timer's information and the manufacturing date of the phone.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetLifeTimeL(
-    const TTsyReqHandle aTsyReqHandle,
-    TDes8* aLifeTimerInfoPckg )
-    {
-    
-    TInt ret( KErrNone );
-    TFLOGSTRING ("TSY: CMmCustomTsy::GetLifeTimeL");
-    if ( sizeof(RMmCustomAPI::TLifeTimeData) != aLifeTimerInfoPckg->MaxLength() )
-        {
-        TFLOGSTRING ("TSY: CMmCustomTsy::GetLifeTimeL bad size argument");
-        // Complete the request with appropiate error        
-        return KErrArgument;
-        }
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-            ECustomTsyGetLifeTimerInfo  );
-    if ( ECustomTsyReqHandleUnknown != reqHandle ) 
-        {
-TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - ECustomTsyReqHandleUnknown" );
-        // The request is already in processing because of previous request.
-        // Complete request with status value informing the client about 
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to the packaged life timer info
-        iLifeTimerInfoPckg = aLifeTimerInfoPckg;
-        TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - send request" );
-        iTsyReqHandleStore->SetTsyReqHandle( 
-                        ECustomTsyGetLifeTimerInfo, aTsyReqHandle );
-        ret = Phone()->MessageManager()->HandleRequestL(
-                ECustomGetLifeTimeIPC);
-        // Check response of the extension
-        if ( KErrNone != ret )
-            {
-            TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - DOS layer returned error " );
-            TTsyReqHandle tsyReqHandle =
-                iTsyReqHandleStore->ResetTsyReqHandle( 
-                                    ECustomTsyGetLifeTimerInfo );
-            if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-                {
-                TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - DOS error - unknown handle" );
-                }
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        }
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetLifeTimeCancel
-// Cancels an ongoing GetLifeTime request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetLifeTimeCancel()
-    {
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetLifeTimerInfo );
-
-    // reset pointer to client data
-    iLifeTimerInfoPckg = NULL;
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	// complete with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetLifeTime
-// Completes a GetLifeTime request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetLifeTime(
-    RMmCustomAPI::TLifeTimeData& aLifeTimerData,
-    TInt aErrorValue )
-    {
-    // reset the reqhandle
-    TTsyReqHandle tsyReqHandle =
-        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyGetLifeTimerInfo );
-
-    // Check the reqHandle
-    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
-        {
-        // Check if there is error
-        if ( KErrNone == aErrorValue )
-            {
-            // pack the return information
-            RMmCustomAPI::TLifeTimeDataPckg aPackg ( aLifeTimerData);
-            // Copy the return info into the client side
-            (*iLifeTimerInfoPckg) = aPackg;
-            }
-        // reset the pointer to client space
-        iLifeTimerInfoPckg = NULL;
-        // complete
-        ReqCompleted( tsyReqHandle, aErrorValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::DeliverCode
-// Deliveres code and unblock code.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::DeliverCodeL(
-    RMobilePhone::TCodeAndUnblockCode aCodes )
-    {
-    iMmSecurityTsy->DeliverCodeL( aCodes );
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetDriveModeL
-// This method sets Drive Mode status using the aModeStatus variable.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SetDriveModeL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TSetDriveMode* aModeStatus )
-    {
-TFLOGSTRING3("TSY: CMmCustomTsy::SetDriveModeL - Req handle: %d, Mode status: %d", aTsyReqHandle, *aModeStatus );
-	if ( (iUsingFeatureManager) && (iFeatureControl.FeatureSupported(NFeature::KDriveModeCanRestrictMtCalls) == KFeatureSupported) )
-        {
-        // get the handle
-        TTsyReqHandle setDriveModeHandle =
-            iTsyReqHandleStore->GetTsyReqHandle( ECustomTsySetDriveMode );
-
-        if ( setDriveModeHandle > 0 )
-            {
-            // The request is already in processing because of previous
-            // request. Complete request with status value informing the
-            // client about the situation.
-            ReqCompleted( aTsyReqHandle, KErrServerBusy );
-            }
-        else
-            {
-            // call DOS
-            // packed parameter: TSetDriveMode (mode status)
-            CMmDataPackage dataPackage;
-            dataPackage.PackData( aModeStatus );
-		    // allow for ECustomSetDriveModeIPC immediate completion
-#ifdef REQHANDLE_TIMER
-            // set timer for the request
-            SetTypeOfResponse ( ECustomTsySetDriveMode, aTsyReqHandle );
-#else
-            iTsyReqHandleStore->SetTsyReqHandle( ECustomTsySetDriveMode,
-                    aTsyReqHandle );
-#endif // REQHANDLE_TIMER
-            TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
-                ECustomSetDriveModeIPC, &dataPackage );
-
-            // check success
-            if ( (KErrNone != ret) && (iTsyReqHandleStore->ResetTsyReqHandle(ECustomTsySetDriveMode)) )
-                {
-                ReqCompleted ( aTsyReqHandle, ret );
-                }
-            }
-        }
-    else
-        {
-        ReqCompleted ( aTsyReqHandle, KErrNotSupported );
-        }
-	
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSetDriveMode
-// Completes a Set Drive Mode request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSetDriveMode(
-    TInt aErrorCode )
-    {
-TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteSetDriveMode - Error code: %d", aErrorCode );
-	if ( (iUsingFeatureManager) && (iFeatureControl.FeatureSupported(NFeature::KDriveModeCanRestrictMtCalls) == KFeatureSupported) )
-        {
-        //Reset req handle, returns the deleted req handle
-        TTsyReqHandle reqHandle =
-            iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySetDriveMode );
-
-        //check if request was called
-        if( ECustomTsyReqHandleUnknown != reqHandle )
-            {
-            //complete
-            ReqCompleted( reqHandle, aErrorCode );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::IsRequestPossibleInOffLine
-// Checks wether a ETel request can be performed or not while offline mode is
-// enabled
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmCustomTsy::IsRequestPossibleInOffline(
-    TInt aIpc )
-    {
-    // we assume here that most of the requests are possible, thefore
-    // we switch for the not possible ones, optimizing a bit the checking.
-    TBool isRequestPossible ( ETrue );
-    // yet another switching function, yeah!
-    switch ( aIpc )
-        {
-        //case ECustomSsAdditionalInfoNotificationIPC: //ok (but shouldn't be
-                                                       //triggered anyways)
-        //case ECustomNotifySsRequestCompleteIPC: //ok (but shouldn't be
-                                                  //triggered anyways)
-        //case ECustomStartSimCbTopicBrowsingIPC: //ok
-        //case ECustomGetNextSimCbTopicIPC: //ok
-        //case ECustomDeleteSimCbTopicIPC: //ok
-        //case ECustomReadSimFileIPC: //ok
-        //case ECustomNotifyDtmfEventIPC: //ok (policy is to leave
-                                          //the notifications as ok)
-        //case ECustomGetDiagnosticOctetsIPC: //ok (NO?, this only applies to
-                                              //call so...should be no)
-        //case ECustomSetAlsBlockedIPC: //ok
-        //case ECustomGetAlsBlockedIPC: //ok
-        //case ECustomCheckAlsPpSupportIPC: //ok
-        //case ECustomGetRemoteAlertingToneStatusIPC:
-        //case ECustomCallOriginIPC: //ok (only for emergency)
-        //case ECustomNotifyAlsBlockedChangedIPC: //ok //Notify Als
-                                                       //Blocked Change
-        //case ECustomTerminateCallIPC: //ok (or no?) //Terminate a Call
-        //case ECustomClearCallBlackListIPC: //ok //Clear call blacklist
-        //case ECustomSimLockActivateIPC: //ok
-        //case ECustomSimLockDeActivateIPC: //ok
-        //case EReadViagHomeZoneParamsIPC: //ok
-        //case EReadViagHomeZoneCacheIPC: //ok
-        //case EWriteViagHomeZoneCacheIPC: //ok
-        //case ECustomGetCipheringInfoIPC: //ok
-        //case ECustomNotifyCipheringInfoChangeIPC: //ok
-        //case ECustomNotifyNSPSStatusIPC: //ok
-        case ECustomNetWakeupIPC: //NO
-        //case ECustomGetNetworkProviderNameIPC: //ok //(info is got from sim)
-        case ECustomGetOperatorNameIPC: //NO //(there is no operator
-                                             //available in offline)
-        //case ECustomGetProgrammableOperatorLogoIPC: //ok
-        case ECustomResetNetServerIPC: //NO (or yes, but this one is sensible)
-        //case ECustomNotifyProgrammableOperatorLogoChangeIPC: //ok
-        //case ECustomNotifyNetworkConnectionFailureIPC: //ok
-        //case ECustomGetAirTimeDurationIPC: //ok (at least for emergency call)
-        //case ECustomNotifyPndCacheReadyIPC: //ok
-        //case ECustomGetPndCacheStatusIPC: //ok
-        //case ECustomNotifySsNetworkEventIPC: //ok //(shouldn't be possible
-                                                    //to get any )
-        //case ECustomCheckTwoDigitDialSupportIPC: //ok
-        //case ECustomSendAPDUReqIPC: //ok
-        //case ECustomGetLifeTimeIPC: //ok
-        //case ECustomIsBlockedIPC: //ok
-        //case ECustomCheckSecurityCodeIPC: //ok
-        //case ECustomCheckEmergencyNumberIPC: //ok
-        //case ECustomSatRefreshCompleteNotificationIPC: //ok
-        //case ECustomDisablePhoneLockIPC: //ok
-        //case ECustomGetActivePinIPC: //ok
-        //case ECustomReleaseFileIPC: //ok
-        //case ECustomRestartFileIPC: //ok
-        //case ECustomNotifyEGprsInfoChange: //ok
-        //case ECustomGetEGprsInfo: //ok
-        //case EGet3GPBInfoIPC: //ok
-        //case ECustomSetDriveModeIPC: //ok
-        //case ECustomReadHSxPAStatusIPC: //ok
-        //case ECustomWriteHSxPAStatusIPC: //ok
-        //case ECustomNotifyHSxPAStatusIPC: //ok
-        //case ECustomNotifyCellInfoChangeIPC: //ok
-        //case ECustomGetCellInfoIPC: //ok
-
-        //case ECustomGetBandSelectionIPC: //ok
-        //case ECustomNotifyRemoteAlertingToneStatusChangeIPC: //ok
-
-        case ECustomSetSystemNetworkModeIPC:
-        case ECustomSetBandSelectionIPC:
-            isRequestPossible = EFalse;
-            break;
-        default:
-            break;
-        }
-
-    return isRequestPossible;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetCurrentSystemNetworkMode
-// Completes Get Current System Network Mode
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetCurrentSystemNetworkMode(
-    TUint32 aCurrentNetwork,
-    TInt aResult )
-    {
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCurrentSystemNetworkMode );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // set the information for the client
-        *iCurrentNetworkMode = aCurrentNetwork;
-
-        // reset the varible
-        iCurrentNetworkMode = NULL;
-
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetSimMessageStatusReadL
-// Sets SIM SMS storage status to "read". Implements
-// CustomAPI method SetSimMessageStatusRead.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SetSimMessageStatusReadL(
-    const TTsyReqHandle aTsyReqHandle,
-    TTime& aTime,
-    TInt& aTimezoneDiff )
-    {
-    // NOTE: This method asynchronously calls DOS, and then immediately
-    // completes with KErrNone. Any problems or errors are silently ignored.
-
-    //call DOS
-    CMmDataPackage dataPackage;
-    dataPackage.PackData( &aTime, &aTimezoneDiff );
-    iMmPhoneTsy->MessageManager()->HandleRequestL(
-        ECustomSetSimMessageStatusReadIPC, &dataPackage );
-
-    // immediately complete, ignore the result.
-    ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ISVDialNumberCheck
-// Saves call object for completion
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::SetObjectForISVDialNumberCheck(
-    CMmVoiceCallTsy* aCallObject )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::SetObjectForISVDialNumberCheck aCallObject=%x", aCallObject );
-    //Save pointer for completion of check emergency number
-    iISVDialNumberCheckObject = aCallObject;
-    //ISV dial has been requested
-    iISVDialNumberCheck = ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyRauEvent
-// Sets RAU event notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyRauEvent(
-    RMmCustomAPI::TRauEventStatus* aEventStatus )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyRauEvent");
-
-    // save pointer to client data
-    iRauEventStatus = aEventStatus;
-
-    // save handle type
-    iReqHandleType = ECustomTsyNotifyRauEvent;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyRauEvent
-// Completes a NotifyRauEvent request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyRauEvent(
-    RMmCustomAPI::TRauEventStatus aEventStatus,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyRauEvent");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyRauEvent );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iRauEventStatus = aEventStatus;
-            }
-
-        // reset the internal variable
-        iRauEventStatus = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyRauEventCancel
-// This method cancels an outstanding notification of RAU event, placed with
-// the NotifyRauEvent function.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyRauEventCancel()
-    {
-    // reset reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
-        ECustomTsyNotifyRauEvent );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset pointer to client data
-        iRauEventStatus = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ReadHSxPAStatusL
-// Read high speed channel status
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ReadHSxPAStatusL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::ReadHSxPAStatusL");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyReadHSxPAStatus );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to client data
-        iRetHSxPAStatus = aHSxPAStatus;
-
-        // call DOS (no packed parameters)
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomReadHSxPAStatusIPC );
-
-        // check the result of the call
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Store the request handle
-            iReqHandleType = ECustomTsyReadHSxPAStatus;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteReadHSxPAStatus
-// Completes a ReadHSxPAStatus request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteReadHSxPAStatus(
-    CMmDataPackage* aDataPackage,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteReadHSxPAStatus");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyReadHSxPAStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorCode )
-            {
-            RMmCustomAPI::THSxPAStatus status;
-            aDataPackage->UnPackData( status );
-
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteReadHSxPAStatus, status = %d", status);
-
-            // Save the status.
-            iHSxPAStatus = status;
-
-            // set the information for the client
-            *iRetHSxPAStatus = status;
-
-            // reset the internal variable
-            iRetHSxPAStatus = NULL;
-            //Complete request to success
-            ReqCompleted( reqHandle, KErrNone );
-            }
-        else
-            {
-            // Complete with error
-            ReqCompleted( reqHandle, aErrorCode );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ReadHSxPAStatusCancel
-// Cancels a ReadHSxPAStatus request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::ReadHSxPAStatusCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::ReadHSxPAStatusCancel");
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyReadHSxPAStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset the pointer to client data
-        iRetHSxPAStatus = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::WriteHSxPAStatusL
-// Write HSxPAStatus
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::WriteHSxPAStatusL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::WriteHSxPAStatusL. New status: %d", *aHSxPAStatus);
-
-    iSetHSxPAStatus = aHSxPAStatus;
-
-    // get the handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyWriteHSxPAStatus );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        CMmDataPackage dataPackage;
-        dataPackage.PackData( iSetHSxPAStatus );
-
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomWriteHSxPAStatusIPC, &dataPackage );
-
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsyWriteHSxPAStatus;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteWriteHSxPAStatus
-// Complete WriteHSxPAStatus request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteWriteHSxPAStatus(
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteWriteHSxPAStatus");
-
-    //reset req handle.
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyWriteHSxPAStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorCode )
-            {
-            // Save the current status
-            iHSxPAStatus = *iSetHSxPAStatus;
-            }
-
-        // erase pointer to client data
-        iSetHSxPAStatus = NULL;
-
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::WriteHSxPAStatusCancel
-// Cancel WriteHSxPAStatus request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::WriteHSxPAStatusCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::WriteHSxPAStatusCancel");
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyWriteHSxPAStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // erase pointer to client data
-        iSetHSxPAStatus = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyHSxPAStatus
-// Set HSxPA notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyHSxPAStatus(
-    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyHSxPAStatus");
-
-    // save pointer to client data
-    iRetNotifyHSxPAStatus = aHSxPAStatus;
-
-    // set the reqhandle type
-    iReqHandleType = ECustomTsyNotifyHSxPAStatus;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyHSxPAStatus
-// Complete HSxPA notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyHSxPAStatus(
-    CMmDataPackage* aDataPackage,
-    TInt aErrorCode )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, Error: %d", aErrorCode);
-
-    RMmCustomAPI::THSxPAStatus status;
-    aDataPackage->UnPackData( status );
-
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, old status: %d", iHSxPAStatus);
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, new status: %d", status);
-
-    // check if status was changed
-    if ( iHSxPAStatus != status )
-        {
-        // Check if notification was requested
-        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            ECustomTsyNotifyHSxPAStatus );
-
-        if ( ECustomTsyReqHandleUnknown != reqHandle )
-            {
-            // check if response was ok
-            if ( KErrNone == aErrorCode )
-                {
-                // Save the status
-                iHSxPAStatus = status;
-
-                // set the information for the client
-                *iRetNotifyHSxPAStatus = status;
-
-                //Complete request to success
-                ReqCompleted( reqHandle, KErrNone );
-                }
-            else
-                {
-                // Complete error value
-                ReqCompleted( reqHandle, aErrorCode );
-                }
-
-            // reset the internal variable
-            iRetNotifyHSxPAStatus = NULL;
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyHSxPAStatusCancel
-// Cancel HSxPA notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyHSxPAStatusCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyHSxPAStatusCancel");
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyHSxPAStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset the pointer to client data
-        iRetNotifyHSxPAStatus = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCallForwardingStatusL
-// Gets  call forwarding status
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetIccCallForwardingStatusL(
-    TTsyReqHandle /*aTsyReqHandle*/,
-    TDes8* aCFIndicators )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetIccCallForwardingStatusL");
-
-    TInt ret( KErrGeneral );
-
-    //Get reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetIccCallForwardingStatus );
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ret = KErrServerBusy;
-        }
-    else
-        {
-        if(  sizeof(RMmCustomAPI::TCFIndicators) > aCFIndicators->Size())
-            {
-            ret = KErrArgument;    
-            }
-        else
-            {
-            //Store client side pointer
-            iRetCFIndicators =  aCFIndicators;
-            
-            ret = Phone()->MessageManager()->HandleRequestL(
-                ECustomGetIccCallForwardingStatusIPC );
-            
-            if ( KErrNone == ret )
-                {
-                // Save the req handle type
-                iReqHandleType = ECustomTsyGetIccCallForwardingStatus;
-                }
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetCallForwardingStatus
-// completes gets  call forwarding status request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetIccCallForwardingStatus(
-    CMmDataPackage* aDataPackage,
-    TInt aErrorCode )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus, aErrorCode=%d", aErrorCode );
-
-    //reset req handle.
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetIccCallForwardingStatus );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if( KErrNone == aErrorCode )
-            {
-            RMmCustomAPI::TCFIndicatorsPckg* tcfIndicatorPckg = REINTERPRET_CAST(
-                    	RMmCustomAPI::TCFIndicatorsPckg*, iRetCFIndicators );
-            RMmCustomAPI::TCFIndicators& tcfIndicator = ( *tcfIndicatorPckg )();
-
-            aDataPackage->UnPackData( iCurrentTCFIndicator );
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus, indicator=%u", iCurrentTCFIndicator.iIndicator );
-
-            tcfIndicator.iIndicator = iCurrentTCFIndicator.iIndicator;
-                tcfIndicator.iCFNumber.iTypeOfNumber =
-            iCurrentTCFIndicator.iCFNumber.iTypeOfNumber;
-            tcfIndicator.iCFNumber.iNumberPlan =
-                iCurrentTCFIndicator.iCFNumber.iNumberPlan;
-            tcfIndicator.iCFNumber.iTelNumber.Copy(
-               iCurrentTCFIndicator.iCFNumber.iTelNumber );
-
-	        // Update CenRep with latest valid data
-	        if( &iCurrentTCFIndicator )
-	            {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus : Update Central Repository");
-	            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
-	            iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );
-	
-	            iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan,
-	                iCurrentTCFIndicator.iCFNumber.iNumberPlan );
-	            iCFISCentRep->Set( KCtsyCallForwardingNumber,
-	                iCurrentTCFIndicator.iCFNumber.iTelNumber );
-	            iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId,
-	                iCurrentTCFIndicator.iMultipleSubscriberProfileID );
-	            }
-            }
-        //Erase client side pointer
-        iRetCFIndicators = NULL;
-        //Complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-
-    //Request is made during boot-up done only once
-    else if( iGetIccCfStatusBootUp )
-        {
-        if( KErrNone == aErrorCode )
-            {
-            iGetIccCfStatusBootUp = EFalse;
-            aDataPackage->UnPackData( iCurrentTCFIndicator );
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus CenRep key UnconditionalCFStatus not RESETED.");     
-
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus : Bootup case, KCtsyCallForwardingIndicator indicator=%u", iCurrentTCFIndicator.iIndicator );
-
-            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
-            iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );
-            iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan,
-            iCurrentTCFIndicator.iCFNumber.iNumberPlan );
-            iCFISCentRep->Set( KCtsyCallForwardingNumber,
-            iCurrentTCFIndicator.iCFNumber.iTelNumber );
-            iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId,
-            iCurrentTCFIndicator.iMultipleSubscriberProfileID );
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus CenRep updated."); 			
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetIccCallForwardingStatusCancel
-// Cancels Get icc call forwarding status
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetIccCallForwardingStatusCancel(
-	const TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING("CMmCustomTsy::GetIccCallForwardingStatusCancel");
-	// reset reqhandle
-	iTsyReqHandleStore->ResetTsyReqHandle(
-			ECustomTsyGetIccCallForwardingStatus );
-
-	// complete with KErrCancel
-	ReqCompleted( aTsyReqHandle, KErrCancel );
-
-	return KErrNone;
-    }
-	 
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetIccCallForwardingStatusCancel
-// Cancels an ongoing GetIccCallForwardingStatus request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetIccCallForwardingStatusCancel()
-    {
-    //Reset req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
-        ECustomTsyGetIccCallForwardingStatus );
-        
-    //Erase client side pointer
-    iRetCFIndicators = NULL;
-    
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-    	{
-    	//Complete request with cancel
-    	ReqCompleted( reqHandle, KErrCancel );
-    	}
-    
-    return KErrNone;
-    }
-    
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCallForwardingStatusChange
-// Set notification on
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyIccCallForwardingStatusChange(
-    TDes8* aCFIndicators )
-    {
-
-    iNotifyCFIndicator = aCFIndicators;
-    // save handle type
-    iReqHandleType = ECustomTsyNotifyIccCallForwardingStatusChange;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyCallForwardingStatusChange
-// Notifies client
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange(
-    CMmDataPackage* aDataPackage,
-    TInt aErrorCode )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange, Error: %d", aErrorCode);
-
-    RMmCustomAPI::TCFIndicators tempNotifyCFIndicator;
-    aDataPackage->UnPackData( tempNotifyCFIndicator );
-
-    TBool isChanged = IsIccCallForwardingStatusChanged(
-        tempNotifyCFIndicator );
-
-    // check if information was changed
-    if ( isChanged )
-        {
-        //Update CTSY internal buffer
-        iCurrentTCFIndicator = tempNotifyCFIndicator;
-
-        if ( KErrNone == aErrorCode )
-            {  
-			//Update CenRep
-
-            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
-			iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );	
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange : Update CenRep, KCtsyCallForwardingIndicator indicator=%u", iCurrentTCFIndicator.iIndicator );
-				
-        	iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan, 
-        	    iCurrentTCFIndicator.iCFNumber.iNumberPlan );
-			
-        	iCFISCentRep->Set( KCtsyCallForwardingNumber,
-        	    iCurrentTCFIndicator.iCFNumber.iTelNumber );        
-				        		    
-        	iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId, 
-        	    iCurrentTCFIndicator.iMultipleSubscriberProfileID );
-            //CenRep updated
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange CenRep updated."); 	            
-            }
-
-        // Check if notification was requested
-        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            ECustomTsyNotifyIccCallForwardingStatusChange );
-
-        if ( ECustomTsyReqHandleUnknown != reqHandle )
-            {
-            // check if response was ok
-            if ( KErrNone == aErrorCode )
-                {
-                RMmCustomAPI::TCFIndicatorsPckg* tcfIndicatorPckg =
-                REINTERPRET_CAST(
-                RMmCustomAPI::TCFIndicatorsPckg*, iNotifyCFIndicator );
-                RMmCustomAPI::TCFIndicators& tcfIndicator =
-                ( *tcfIndicatorPckg )();
-
-                if( sizeof(RMmCustomAPI::TCFIndicators) > tcfIndicatorPckg->Size())
-                    {
-                    ReqCompleted( reqHandle, KErrArgument);
-                    }
-                else
-                    {
-                    // Save the new info
-                    tcfIndicator = tempNotifyCFIndicator;
-                    //Complete request 
-                    ReqCompleted( reqHandle, KErrNone );
-                    }
-                }
-            else
-                {
-                // Complete with error value
-                ReqCompleted( reqHandle, aErrorCode );
-                }
-
-            // reset the internal variable
-            //iNotifyCFIndicator = NULL;
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCallForwardingStatusChangeCancel
-// Cancels notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyIccCallForwardingStatusChangeCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    // reset pointer to client data
-    iNotifyCFIndicator = NULL;
-
-    // reset reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyIccCallForwardingStatusChange );
-
-    // complete with KErrCancel
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::IsCallForwardingStatusChanged
-// Decides if CTSY internal indicator buffer differs from received buffer
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmCustomTsy::IsIccCallForwardingStatusChanged(
-    RMmCustomAPI::TCFIndicators& aNotifyCFIndicator )
-    {
-    TBool changed( EFalse );
-
-    if( ( aNotifyCFIndicator.iIndicator !=
-        iCurrentTCFIndicator.iIndicator ) ||
-        ( aNotifyCFIndicator.iCFNumber.iTypeOfNumber !=
-        iCurrentTCFIndicator.iCFNumber.iTypeOfNumber ) ||
-        ( aNotifyCFIndicator.iCFNumber.iNumberPlan !=
-        iCurrentTCFIndicator.iCFNumber.iNumberPlan ) ||
-        KErrNotFound == ( aNotifyCFIndicator.iCFNumber.iTelNumber.Match(
-        iCurrentTCFIndicator.iCFNumber.iTelNumber ) ) )
-        {
-        changed = ETrue;
-        }
-
-    return changed;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCellInfoL
-// Gets GSM/WCDMA cell(s) info.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCellInfoL(
-    TDes8* aCellInfoPckg )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetCellInfo");
-
-    TInt ret = KErrServerBusy;
-
-    // Try to get request handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetCellInfo );
-
-    if ( ECustomTsyReqHandleUnknown == reqHandle )
-        {
-        ret = KErrArgument;
-        
-        if ( sizeof( RMmCustomAPI::TMmCellInfo ) <= 
-             aCellInfoPckg->MaxLength() )
-            {
-            iCellInfoPckg = REINTERPRET_CAST(
-                RMmCustomAPI::TMmCellInfoPckg*, aCellInfoPckg );
-
-            ret = Phone()->MessageManager()->HandleRequestL(
-                ECustomGetCellInfoIPC  );	
-        
-    	    if ( KErrNone == ret )
-    	        {
-    	        // Save request handle in DoExtFuncL()
-    	        iReqHandleType = ECustomTsyGetCellInfo;
-    	        }
-    	    }
-		}
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetCellInfoCancel
-// Cancels an outstanding GetCellInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetCellInfoCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetCellInfoCancel");
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCellInfo );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-    	// reset pointer to client data
-        iCellInfoPckg = NULL;
-
-        // complete with cancel
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetCellInfo
-// Completes an outstanding GetCellInfo request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetCellInfo(
-    RMmCustomAPI::TMmCellInfo* aCellInfo,
-    TInt aErrorValue )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetCellInfo - aErrorValue %d", aErrorValue);
-
-    // reset the req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetCellInfo );
-
-    // check the validity of the handler
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorValue )
-            {
-            RMmCustomAPI::TMmCellInfo& tempCellInfo = ( *iCellInfoPckg )();
-            tempCellInfo = *aCellInfo;
-            }
-        // reset the pointer to client space
-        iCellInfoPckg = NULL;
-
-        // complete operation
-        ReqCompleted ( reqHandle, aErrorValue );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCellInfoChange
-// Notification cell(s) info changes
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyCellInfoChange(
-    TDes8* aCellInfoPckg )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyCellInfoChange");
-   
-    RMmCustomAPI::TMmCellInfo temp;
-	RMmCustomAPI::TMmCellInfoPckg tempPckg(temp);
-	
-	TInt paramLength = aCellInfoPckg->MaxLength();
-	TInt expectedLength = tempPckg.MaxLength();
-
-    TInt ret = KErrArgument;
-	if (paramLength == expectedLength)
-		{
-	    iRetNotifyCellInfoPckg = REINTERPRET_CAST( RMmCustomAPI::TMmCellInfoPckg*, aCellInfoPckg );
-	    // set the reqhandle type
-	    iReqHandleType = ECustomTsyNotifyCellInfoChange;
-	    
-	    ret = KErrNone;
-		}
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyCellInfoChange
-// Complete cell info change notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyCellInfoChange(
-    RMmCustomAPI::TMmCellInfo* aCellInfo,
-    TInt aErrorCode )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyCellInfoChange Error: %d", aErrorCode);
-
-    // Check if notification was requested
-	TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyCellInfoChange );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            RMmCustomAPI::TMmCellInfo& tempCellInfo = ( *iRetNotifyCellInfoPckg )();
-            tempCellInfo = *aCellInfo;
-            }
-        // reset the internal variable
-        iRetNotifyCellInfoPckg = NULL;
-
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyCellInfoChangeCancel
-// Cancel cell info change notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyCellInfoChangeCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyCellInfoChangeCancel");
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyCellInfoChange );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset the pointer to client data
-        iRetNotifyCellInfoPckg = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetPhonebookCacheStatus
-// Get Phonebook cache status
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-RMmCustomAPI::TPndCacheStatus CMmCustomTsy::GetPhonebookCacheStatus( 
-    TUint8 aPhoneBookType )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetPhonebookCacheStatus");
-    RMmCustomAPI::TPndCacheStatus ret( RMmCustomAPI::ECacheNotUsed );
-
-    switch ( aPhoneBookType )
-        {
-        case KADNPhoneBook:
-            ret = iAdnCacheStatus;
-            break;
-        case KFDNPhoneBook:
-            ret = iFdnCacheStatus;
-            break;
-        case KSDNPhoneBook:
-        case KVMBXPhoneBook:
-        case KMBDNPhoneBook:
-            ret = RMmCustomAPI::ECacheNotUsed;
-            break;
-        }
-    
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::ReqCompleted
-// Completes a request back to the client.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::ReqCompleted( const TTsyReqHandle aTsyReqHandle,
-    const TInt aError )
-    {
-TFLOGSTRING3("TSY: CMmCustomTsy::ReqCompleted, aTsyReqHandle=%d, aError=%d", aTsyReqHandle, aError );
-
-	CTelObject::ReqCompleted ( aTsyReqHandle, aError );
-	}
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSystemNetworkBandL
-// This method gets the supported network band.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSystemNetworkBandL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TBandSelection* aSystemNetworkBand,
-    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkMode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetSystemNetworkBandL");
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetSystemNetworkBand );
-
-    if ( ECustomTsyReqHandleUnknown < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to the packaged life timer info
-        iAvailableSystemNetworkBand = aSystemNetworkBand;
-        iSystemNetworkModeCaps = aSystemNetworkMode;
-        // call DOS
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomGetBandSelectionIPC );
-
-        // Check response of the extension
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsyGetSystemNetworkBand;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetSystemNetworkBand
-// Completes a GetSystemNetworkBand.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetSystemNetworkBand(
-    RMmCustomAPI::TBandSelection aSystemNetworkBand,
-    RMmCustomAPI::TNetworkModeCaps aSystemNetworkMode,
-    TInt aResult )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetSystemNetworkBand. Result: %d", aResult);
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSystemNetworkBand );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        
-        if ( KErrNone == aResult )
-            {
-            // set the information for the client
-            *iAvailableSystemNetworkBand = aSystemNetworkBand;
-            if ( *iSystemNetworkModeCaps != aSystemNetworkMode )
-                {
-                *iSystemNetworkModeCaps = aSystemNetworkMode;
-                }
-            }
-        
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-    
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetSystemNetworkBandCancel
-// Cancels a GetSystemNetworkBand.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetSystemNetworkBandCancel(
-    const TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetSystemNetworkBandCancel");
-    // reset the pointer to client data
-    iAvailableSystemNetworkBand = NULL;
-    iSystemNetworkModeCaps = NULL;
-
-    // reset the reqhandle
-    iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetSystemNetworkBand );
-
-    // complete
-    ReqCompleted( aTsyReqHandle, KErrCancel );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetSystemNetworkBandL
-// This method sets the system network band.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::SetSystemNetworkBandL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TBandSelection* aSystemNetworkBand,
-    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkModeCaps )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::SetSystemNetworkBandL");
-    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsySetSystemNetworkBand );
-
-    if ( ECustomTsyReqHandleUnknown < reqhandle )
-        {
-        // The request is already in processing because of previous request
-        // Complete request with status value informing the client about
-        // the situation.
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // call DOS
-        // The networkband to be set
-        RMmCustomAPI::TBandSelection networkBand =
-            *aSystemNetworkBand;
-        // Used network mode
-        RMmCustomAPI::TNetworkModeCaps networkMode =
-            *aSystemNetworkModeCaps;
-        CMmDataPackage dataPackage;
-        // Pack network mode and band
-        dataPackage.PackData( &networkBand, &networkMode );
-        TInt ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomSetBandSelectionIPC, &dataPackage );
-
-        // Check response of the extension
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Save the req handle type
-            iReqHandleType = ECustomTsySetSystemNetworkBand;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteSetSystemNetworkBand
-// Completes a SetSystemNetworkBand.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteSetSystemNetworkBand(
-    TInt aResult )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteSetSystemNetworkBand");
-    // reset req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsySetSystemNetworkBand );
-
-    // check if handle exists
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // complete
-        ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::SetIccCfBootUpFlag
-// Set new value for ICC CF bootup.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::SetIccCfBootUpFlag( TBool aBootUp )
-    {
-TFLOGSTRING2("TSY: CMmCustomTsy::SetIccCfBootUpFlag, aBootUp=%d", aBootUp );
-
-    iGetIccCfStatusBootUp = aBootUp;
-    }
-    
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetUSIMServiceSupportL
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetUSIMServiceSupportL(
-    const TTsyReqHandle aTsyReqHandle,
-    RMmCustomAPI::TAppSupport* aAppSupport )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetUSIMServiceSupportL");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        ECustomTsyGetUSIMServiceSupport );
-
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        ReqCompleted( aTsyReqHandle, KErrServerBusy );
-        }
-    else
-        {
-        // save pointer to client data
-        iAppSupport = aAppSupport;
-
-	    CMmDataPackage appSupportPackage;
-	    appSupportPackage.PackData( iAppSupport );
-
-        // call DOS (no packed parameters)
-        TInt ret = KErrNone;
-        ret = Phone()->MessageManager()->HandleRequestL(
-            ECustomGetServiceTableSupportbyApplicationIPC, &appSupportPackage);
-
-        // check the result of the call
-        if ( KErrNone != ret )
-            {
-            ReqCompleted( aTsyReqHandle, ret );
-            }
-        else
-            {
-            // Store the request handle
-            iReqHandleType = ECustomTsyGetUSIMServiceSupport;
-            }
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteGetUSIMServiceSupport
-// Completes a GetUSIMServiceSupport request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteGetUSIMServiceSupport(
-    CMmDataPackage* aDataPackage,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetUSIMServiceSupport");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetUSIMServiceSupport );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        if ( KErrNone == aErrorCode )
-            {
-            RMmCustomAPI::TAppSupport *appSupport;
-            aDataPackage->UnPackData( &appSupport );
-
-            // set the information for the client
-            *iAppSupport = *appSupport;
-
-            // reset the internal variable
-			iAppSupport = NULL;
-			
-            //Complete request to success
-            ReqCompleted( reqHandle, KErrNone );
-            }
-        else
-            {
-            // Complete with error
-            ReqCompleted( reqHandle, aErrorCode );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::GetUSIMServiceSupportCancel
-// Cancels a GetUSIMServiceSupport request
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::GetUSIMServiceSupportCancel()
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::GetUSIMServiceSupportCancel");
-
-    // reset the reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyGetUSIMServiceSupport );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset the pointer to client data
-		iAppSupport = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyRemoteAlertingToneStatusChange
-// Sets Remote Alerting Tone Status Change notification
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyRemoteAlertingToneStatusChange(
-    RMmCustomAPI::TRemoteAlertingToneStatus* aToneStatus )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::NotifyRemoteAlertingToneStatusChange");
-
-    // save pointer to client data
-    iToneStatus = aToneStatus;
-
-    // save handle type
-    iReqHandleType = ECustomTsyNotifyRemoteAlertingToneStatusChange;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange
-// Completes a NotifyRemoteToneAlertingStatusChange request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange(
-    RMmCustomAPI::TRemoteAlertingToneStatus aToneStatus,
-    TInt aErrorCode )
-    {
-TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange");
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        ECustomTsyNotifyRemoteAlertingToneStatusChange );
-
-    // check if request was called
-    if ( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // check if response was ok
-        if ( KErrNone == aErrorCode )
-            {
-            // set the information for the client
-            *iToneStatus = aToneStatus;
-            }
-
-        // reset the internal variable
-        iToneStatus = NULL;
-        // complete
-        ReqCompleted( reqHandle, aErrorCode );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmCustomTsy::NotifyRemoteAlertingToneStatusChangeCancel
-// This method cancels an outstanding notification of 
-// RemoteAlertingToneStatusChange.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmCustomTsy::NotifyRemoteAlertingToneStatusChangeCancel()
-    {
-    // reset reqhandle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
-        ECustomTsyNotifyRemoteAlertingToneStatusChange );
-
-    if( ECustomTsyReqHandleUnknown != reqHandle )
-        {
-        // reset pointer to client data
-        iToneStatus = NULL;
-
-        ReqCompleted( reqHandle, KErrCancel );
-        }
-
-    return KErrNone;
-    }
-
-//  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:
+//
+
+
+
+//  INCLUDE FILES
+#include "CMmCustomTsy.h"
+#include "CMmCustomGsmExt.h"
+#include "cmmcalllist.h"
+#include "cmmphoneextinterface.h"
+#include "CMmWimTsy.h"
+#include "cmmcalltsy.h"
+#include "CMmCommonStaticUtility.h"
+#include "CMmSimLockTsy.h"
+#include "MmTsy_conf.h"
+#include <ctsy/tflogger.h>
+#include "cmmpblist.h"
+#include "cmmphonebookstoretsy.h"
+#include "CMmPacketTsy.h"
+#include "CMmSIMTsy.h"
+#include "CMmCustomSecurityTsy.h"
+#include <ctsy/serviceapi/gsmerror.h>
+#include <ctsy/serviceapi/cmmcustomvendorext.h>
+#include "cmmnettsy.h"  // for CMmNetTsy::CipheringIndicatorForcedOff()
+#include <ctsy/serviceapi/ctsydomaincrkeys.h>
+#include "ctsyprivatecrpkeys.h"
+#include <featureuids.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmCustomTsy::CMmCustomTsy():
+    iReqHandleType(ECustomTsyReqHandleUnknown)
+    {
+    iMmPhoneTsy = NULL;
+    iMmCustomExtInterface = NULL;
+    Mem::FillZ( iMmSubTsy, sizeof( iMmSubTsy ) );
+
+    // initialize internal data
+    iCipheringInfo.iIndStatus = EFalse;
+    iCipheringInfo.iCiphStatus = EFalse;
+    }
+
+void CMmCustomTsy::ConstructL(
+    CMmPhoneTsy* aMmPhoneTsy )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL");
+    iMmPhoneTsy = aMmPhoneTsy;
+
+    iMmCustomExtInterface = CMmCustomGsmExt::NewL( aMmPhoneTsy, this );
+    iMmSubTsy[ESubTsyIdxWIM] = CMmWimTsy::NewL( this );
+    iMmSubTsy[ESubTsyIdxSimLock] = CMmSimLockTsy::NewL( this );
+    iMmSubTsy[ESubTsyIdxPacket] = CMmPacketTsy::NewL( this, aMmPhoneTsy );
+
+    iMmSubTsy[ESubTsyIdxSIM]  = CMmSIMTsy::NewL( this );
+
+    iMmSecurityTsy = CMmCustomSecurityTsy::NewL( this, aMmPhoneTsy );
+
+
+
+#ifdef REQHANDLE_TIMER
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( this, iMmPhoneTsy,
+        ECustomTsyMaxNumOfRequests, iCustomReqHandles );
+#else
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL(
+        ECustomTsyMaxNumOfRequests, iCustomReqHandles );
+#endif
+
+    // register custom tsy in the message manager
+    Phone()->MessageManager()->RegisterTsyObject(
+        CMmMessageManagerBase::ECustomTsy, this );
+
+    iAdnCacheStatus = RMmCustomAPI::ECacheNotReady;
+    iFdnCacheStatus = RMmCustomAPI::ECacheNotReady;
+
+    iISVDialNumberCheckObject = NULL;
+    iISVDialNumberCheck = EFalse;
+    iGetIccCfStatusBootUp = ETrue;
+    //Get pointer to public CenRep
+    iCFISCentRep = iMmPhoneTsy->GetCfisCenRep();
+    iCFISPrivateCentRep = iMmPhoneTsy->GetCfisPRCenRep();
+	TInt err = iFeatureControl.Open();
+	iUsingFeatureManager = (err == KErrNone);
+    
+    // update/receive Icc Call forward information
+    if( iMmPhoneTsy->NosBootState()->iSIMReady )
+        {
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL -- GET ICC call forward indicators");       
+        // Get Icc cfis values from LTSY
+        Phone()->MessageManager()->HandleRequestL( 
+            ECustomGetIccCallForwardingStatusIPC );
+        }
+        
+    // check if HomeZoneParams has been already read in NotifySimStatusReady
+ 	// if not, query again
+    if ( !iMmPhoneTsy->GetHomeZoneParamsChecked() )
+    	{
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - GetHomeZoneParamsChecked()");    	
+        CMmSIMTsy* simCustomTsy = NULL;
+        simCustomTsy = ( CMmSIMTsy* )GetSIMTsyPtr();
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - pointer created");
+	
+        if ( simCustomTsy )
+            {
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - CheckViagHomeZoneParamsL()");
+            simCustomTsy->CheckViagHomezoneParamsL();
+            iMmPhoneTsy->SetHomeZoneParamsChecked( ETrue );
+            }
+        else
+        	{
+TFLOGSTRING("TSY: CMmCustomTsy::ConstructL - CheckViagHomeZoneParamsL() False");        		
+			iMmPhoneTsy->SetHomeZoneParamsChecked( EFalse );
+        	}
+    	}     
+    }
+
+CMmCustomTsy* CMmCustomTsy::NewL(
+    CMmPhoneTsy* aMmPhoneTsy )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NewL");
+    CMmCustomTsy* mmCustomTsy = new ( ELeave ) CMmCustomTsy();
+    CleanupClosePushL( *mmCustomTsy );
+    mmCustomTsy->ConstructL( aMmPhoneTsy );
+    CleanupStack::Pop( mmCustomTsy );
+
+    return mmCustomTsy;
+    }
+
+CMmCustomTsy::~CMmCustomTsy()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::~CMmCustomTsy");
+
+	iFeatureControl.Close();
+	
+    // Delete subsystems
+    for ( TInt i = 0; ESubTsyIdxMaxNum > i; i++ )
+        {
+        delete iMmSubTsy[i];
+        }
+
+    // Delete SecurityTsy
+    delete iMmSecurityTsy;
+
+    // Delete GSM extensions
+    delete iMmCustomExtInterface;
+    
+    // delete req handle store
+    delete iTsyReqHandleStore;
+
+    if ( iMmPhoneTsy )
+        {
+        iMmPhoneTsy->SetHomeZoneParamsChecked( EFalse );
+        iMmPhoneTsy->SetCustomTsy( NULL );
+        // unregister custom tsy in the message manager
+        iMmPhoneTsy->MessageManager()->DeregisterTsyObject(this);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::Phone
+// Returns pointer to PhoneTsy object
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CMmPhoneTsy* CMmCustomTsy::Phone()
+    {
+    return iMmPhoneTsy;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ExtFunc
+// Dispatches extension function requests. All functions that are not part
+// of the core function set, are routed via the ExtFunc method.
+// At the beginning of this method, packaged pointers are unpacked. Then
+// the correct function is selected using the IPC number.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ExtFunc(
+    const TTsyReqHandle aTsyReqHandle,
+    const TInt aIpc,
+    const TDataPackage& aPackage )
+    {
+    TInt ret = KErrNone;
+    TInt trapError = KErrNone;
+    
+    // Ensure the ReqHandleType is unset.
+    // This will detect cases where this method indirectly calls itself
+    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
+    // Such cases are not supported because iReqHandleType is in the context of this class instance,
+    // not this request, and we don't want the values set by the inner request and the outer request
+    // interfering with each other.
+    __ASSERT_DEBUG(iReqHandleType==ECustomTsyReqHandleUnknown, User::Invariant());
+
+    // before processing further the request, check if offline mode status
+    // is enabled and if the given request can be perfomed in that case.
+    if ( ERfsStateInfoInactive == iMmPhoneTsy->GetRfStateInfo() &&
+        !IsRequestPossibleInOffline( aIpc ) )
+        {
+TFLOGSTRING2 ("TSY: Offline mode ON, request is not allowed: %d", aIpc );
+        ret = CMmCommonStaticUtility::EpocErrorCode( KErrGeneral,
+                KErrGsmOfflineOpNotAllowed );
+
+        // Complete the request with appropiate error
+        ReqCompleted ( aTsyReqHandle, ret );
+        }
+    else
+        {
+        TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ); );
+
+        if ( KErrNone != trapError )
+            {
+            // error handling. Object cannot be created.
+            ret = trapError;
+            }
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::DoExtFuncL
+// This DoExtFuncL is called by Etel server when it has Custom API
+// request for the TSY. To process a request handle, request type and request
+// data are passed to the Custom TSY.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::DoExtFuncL(
+    const TTsyReqHandle aTsyReqHandle,
+    const TInt aIpc,
+    const TDataPackage& aPackage )
+    {
+    TInt ret( KErrNotSupported );
+
+    // first check if request is supported in CMmSecurityTsy
+    // (due layering that class is no longer a part of extension modules)
+
+    ret = iMmSecurityTsy->DoExtFuncL( aTsyReqHandle, aIpc, aPackage );
+
+    if ( KErrNotSupported == ret )
+        {
+ 
+        // then check all the Custom extension modules
+        ret = CMmTsyBase::DoBaseExtFuncL( aTsyReqHandle, aIpc, aPackage );
+
+        // if extension modules did not serve this request
+        if ( KErrNotSupported == ret )
+            {
+            // Ensure the ReqHandleType is unset.
+            // This will detect cases where this method indirectly calls itself
+            // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
+            // Such cases are not supported because iReqHandleType is in the context of this class instance,
+            // not this request, and we don't want the values set by the inner request and the outer request
+            // interfering with each other.
+            __ASSERT_DEBUG(iReqHandleType==ECustomTsyReqHandleUnknown, User::Invariant());
+            
+            switch ( aIpc )
+                {
+                // Perform IMS Authentication
+                case EMobilePhoneIMSAuthenticate:
+                    ret = ImsAuthenticationL( aTsyReqHandle,
+                        REINTERPRET_CAST(
+                        RMobilePhone::TImsAuthenticateDataV5*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Get sim authentication data
+                case ECustomGetSimAuthenticationDataIPC:
+                    ret = SimAuthenticationL( aTsyReqHandle, aPackage );
+                    break;
+                // Notify Dtmf event
+                case ECustomNotifyDtmfEventIPC:
+                    ret = NotifyDtmfEvent(
+                        REINTERPRET_CAST( RMmCustomAPI::TDtmfInfo*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Get Diagnostic Octets - info 
+                case ECustomGetDiagnosticOctetsIPC:
+                   ret = GetDiagnosticInfo ( aTsyReqHandle,
+                       REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
+                   break;
+                // Get Remote Alerting Tone Status
+                case ECustomGetRemoteAlertingToneStatusIPC:
+                    ret = GetRemoteAlertingToneStatus ( aTsyReqHandle,
+                        REINTERPRET_CAST(
+                        RMmCustomAPI::TRemoteAlertingToneStatus*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Call Origin
+                case ECustomCallOriginIPC:
+                    ret = GetCallOrigin( aTsyReqHandle,
+                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ),
+                        REINTERPRET_CAST( RMmCustomAPI::TCallOrigin*,
+                        aPackage.Ptr2() ) );
+                    break;
+                // Terminate a Call/all calls
+                case ECustomTerminateCallIPC:
+                    ret = TerminateCallL( aTsyReqHandle,
+                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
+                    break;
+                // Get Als Blocked
+                case ECustomGetAlsBlockedIPC:
+                    ret = GetAlsBlockedL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TGetAlsBlockStatus*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Set Alternative Line Service Blocked
+                case ECustomSetAlsBlockedIPC:
+                    ret = SetAlsBlockedL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TSetAlsBlock*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Notify Als Blocked Change
+                case ECustomNotifyAlsBlockedChangedIPC:
+                    ret = NotifyAlsBlockedChanged (
+                        REINTERPRET_CAST( RMmCustomAPI::TGetAlsBlockStatus*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Get ALS pp support
+                case ECustomCheckAlsPpSupportIPC:
+                    ret = GetAlsPpSupportL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TAlsSupport*,
+                                          aPackage.Ptr1() ) );
+                    break;
+                // Get ciphering information
+                case ECustomGetCipheringInfoIPC:
+                    ret = GetCipheringInfoL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TCipheringInfo*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Notify ciphering information change
+                case ECustomNotifyCipheringInfoChangeIPC:
+                    ret = NotifyCipheringInfoChange(
+                        REINTERPRET_CAST(RMmCustomAPI::TCipheringInfo*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Notify NSPS status
+                case ECustomNotifyNSPSStatusIPC:
+                    ret = NotifyNSPSStatus (
+                         REINTERPRET_CAST(RMmCustomAPI::TNspsStatus*,
+                         aPackage.Ptr1() ) );
+                    break;
+                // Wake up network from NSPS status
+                case ECustomNetWakeupIPC:
+                    ret = NetWakeupL( aTsyReqHandle );
+                    break;
+                case ECustomClearCallBlackListIPC:
+                    ret = ClearCallBlackListL ( aTsyReqHandle );
+                    break;
+                // SS additional info notification
+                case ECustomSsAdditionalInfoNotificationIPC:
+                     ret = SsAdditionalInfoNotification(
+                        REINTERPRET_CAST( RMmCustomAPI::TSsAdditionalInfo*,
+                        aPackage.Ptr1() ) );
+                     break;
+                // Get the air time duration
+                case ECustomGetAirTimeDurationIPC:
+                    ret = GetAirTimeDuration ( aTsyReqHandle,
+                        REINTERPRET_CAST( TTimeIntervalSeconds*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Check emergency number
+                case ECustomCheckEmergencyNumberIPC:
+                    ret = CheckEmergencyNumberL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TEmerNumberCheckMode*,
+                            aPackage.Ptr1() ),
+                        REINTERPRET_CAST( TBool*, aPackage.Ptr2() ) );
+                    break;
+                // Get Network Operator Name
+                case ECustomGetNetworkProviderNameIPC:
+                    ret = GetNetworkOperatorNameL( aPackage.Des1u() );
+                    break;
+                // Get two digit dial support
+                case ECustomCheckTwoDigitDialSupportIPC:
+                    ret = CheckTwoDigitDialSupportL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TTwoDigitDialSupport*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Notify when phonebook cache is ready
+                case ECustomNotifyPndCacheReadyIPC:
+                    ret = NotifyPhoneBookCacheReady( aTsyReqHandle,
+                        REINTERPRET_CAST( TName*, aPackage.Ptr1() ) );
+                    break;
+                // Get phonebook cache status
+                case ECustomGetPndCacheStatusIPC:
+                    ret = GetPndCacheStatus( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TPndCacheStatus*,
+                            aPackage.Ptr1() ),
+                        REINTERPRET_CAST( const TName*, aPackage.Des2u() ) );
+                    break;
+                // Get the programmable operator name
+                case ECustomGetOperatorNameIPC:
+                    ret = GetOperatorNameL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TOperatorNameInfo*,
+                        aPackage.Ptr1() ) );
+                    break;
+                // Notify SS Network event
+                case ECustomNotifySsNetworkEventIPC:
+                    ret = NotifySsNetworkEvent(
+                        REINTERPRET_CAST( RMmCustomAPI::TSsTypeAndMode*,
+                        aPackage.Ptr1() ),
+                        REINTERPRET_CAST( RMmCustomAPI::TSsInfo*,
+                        aPackage.Ptr2() ) );
+                    break;
+                // Get the programmable operator logo
+                case ECustomGetProgrammableOperatorLogoIPC:
+                    ret = GetProgrammableOperatorLogoL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TOperatorId*,
+                        aPackage.Ptr1() ),
+                        REINTERPRET_CAST( RMmCustomAPI::TOperatorLogo*,
+                        aPackage.Ptr2() ) );
+                    break;
+                // Sat refresh complete notification
+                case ECustomSatRefreshCompleteNotificationIPC:
+                    ret = SatRefreshCompleteNotification();
+                    break;
+                // Reset the net server
+                case ECustomResetNetServerIPC:
+                    ret = ResetNetServerL( aTsyReqHandle );
+                    break;
+                // Notify Network Connection Failure
+                case ECustomNotifyNetworkConnectionFailureIPC:
+                    ret = NotifyNetworkConnectionFailure( );
+                    break;
+                // Get supported network modes
+                case ECustomGetSystemNetworkModesIPC:
+                    ret = GetSystemNetworkModesL( aTsyReqHandle,
+                        REINTERPRET_CAST(TUint32*, aPackage.Ptr1()) );
+                    break;
+                // Set system network mode
+                case ECustomSetSystemNetworkModeIPC:
+                    ret = SetSystemNetworkModeL( aTsyReqHandle,
+                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
+                        aPackage.Ptr1()) );
+                    break;
+                // Get current system network mode
+                case ECustomGetCurrentSystemNetworkModesIPC:
+                    ret = GetCurrentSystemNetworkModeL( aTsyReqHandle,
+                        REINTERPRET_CAST(TUint32*, aPackage.Ptr1()) );
+                    break;
+                // Get supported network bands
+                case ECustomGetBandSelectionIPC:
+                    ret = GetSystemNetworkBandL( aTsyReqHandle,
+                        REINTERPRET_CAST(RMmCustomAPI::TBandSelection*,
+                        aPackage.Ptr1()),
+                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
+                        aPackage.Ptr2()) );
+                    break;
+                // Set system network band
+                case ECustomSetBandSelectionIPC:
+                    ret = SetSystemNetworkBandL( aTsyReqHandle,
+                        REINTERPRET_CAST(RMmCustomAPI::TBandSelection*,
+                        aPackage.Ptr1() ),
+                        REINTERPRET_CAST(RMmCustomAPI::TNetworkModeCaps*,
+                        aPackage.Ptr2() ) );
+                    break;
+                // Notify SS request complete
+                case ECustomNotifySsRequestCompleteIPC:
+                    ret = SsRequestCompleteNotification(
+                         REINTERPRET_CAST( TInt*, aPackage.Ptr1() ) );
+                    break;
+                case ECustomGetLifeTimeIPC:
+                    ret = GetLifeTimeL( aTsyReqHandle, aPackage.Des1n() );
+                    break;
+                case ECustomReadSimFileIPC:
+                    ret = GetSimFileInfoL(aTsyReqHandle, aPackage.Des1n(),
+                        aPackage.Des2n());
+                    break;
+                // Get 3G phonebook info
+                case EGet3GPBInfoIPC:
+                    ret = Get3GPBInfo ( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::T3GPBInfo*,
+                        aPackage.Ptr1() ) );
+                    break;
+                case ECustomSetDriveModeIPC:
+                    ret = SetDriveModeL( aTsyReqHandle,
+                        REINTERPRET_CAST( RMmCustomAPI::TSetDriveMode*,
+                        aPackage.Ptr1() ) );
+                    break;
+                case ECustomSetSimMessageStatusReadIPC:
+                    ret = SetSimMessageStatusReadL( aTsyReqHandle,
+                        *( REINTERPRET_CAST(TTime*, aPackage.Ptr1() ) ),
+                        *( REINTERPRET_CAST(TInt*, aPackage.Ptr2() ) ) );
+                    break;
+                case ECustomNotifyRauEventIPC:
+                    ret = NotifyRauEvent(
+                        REINTERPRET_CAST( RMmCustomAPI::TRauEventStatus*,
+                        aPackage.Ptr1() ) );
+                    break;
+                case ECustomReadHSxPAStatusIPC:
+                    ret = ReadHSxPAStatusL( aTsyReqHandle, REINTERPRET_CAST(
+                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
+                    break;
+                case ECustomWriteHSxPAStatusIPC:
+                    ret = WriteHSxPAStatusL( aTsyReqHandle, REINTERPRET_CAST(
+                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
+                    break;
+                case ECustomNotifyHSxPAStatusIPC:
+                    ret = NotifyHSxPAStatus( REINTERPRET_CAST(
+                        RMmCustomAPI::THSxPAStatus*, aPackage.Ptr1() ) );
+                    break;
+                case ECustomGetIccCallForwardingStatusIPC:
+                	ret = GetIccCallForwardingStatusL( aTsyReqHandle,
+                    	aPackage.Des1n() );
+                	break;
+                case ECustomNotifyIccCallForwardingStatusChangeIPC:
+                    ret = NotifyIccCallForwardingStatusChange(
+                    	aPackage.Des1n() );
+                    break;
+                case ECustomNotifyCellInfoChangeIPC:
+                    ret = NotifyCellInfoChange( aPackage.Des1n() );
+                    break;
+                case ECustomGetCellInfoIPC:
+                    ret = GetCellInfoL( aPackage.Des1n() );
+                    break;
+                case ECustomGetServiceTableSupportbyApplicationIPC:
+                    ret = GetUSIMServiceSupportL( aTsyReqHandle, 
+                        REINTERPRET_CAST( RMmCustomAPI::TAppSupport*, 
+                        aPackage.Ptr1() ) );
+                    break;
+                case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+                    ret = NotifyRemoteAlertingToneStatusChange(
+                        REINTERPRET_CAST( 
+                        RMmCustomAPI::TRemoteAlertingToneStatus*,
+                        aPackage.Ptr1() ) );
+                    break;
+                default:
+                    // ret is already set as KErrNotSupported
+TFLOGSTRING2("TSY: CMmCustomTsy::DoExtFuncL unsupported ipc=%d", aIpc);
+                    break;
+                }
+
+            // save request handle
+            if ( ECustomTsyReqHandleUnknown != iReqHandleType )
+                {
+#ifdef REQHANDLE_TIMER
+                // set timer for the request
+                SetTypeOfResponse ( iReqHandleType, aTsyReqHandle );
+#else
+                iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType,
+                    aTsyReqHandle );
+#endif // REQHANDLE_TIMER
+                // We've finished with this value now. Clear it so it doesn't leak
+                //  up to any other instances of this method down the call stack
+                iReqHandleType = ECustomTsyReqHandleUnknown;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::RegisterNotification
+// 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 DOS.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::RegisterNotification(
+    const TInt aIpc )
+    {
+    TInt ret ( KErrNotSupported );
+
+    switch( aIpc )
+        {
+        case ECustomNotifyRauEventIPC:
+        case ECustomNotifyDtmfEventIPC:
+        case ECustomNotifyAlsBlockedChangedIPC:
+        case ECustomNotifyCipheringInfoChangeIPC:
+        case ECustomNotifyNSPSStatusIPC:
+        case ECustomSsAdditionalInfoNotificationIPC:
+        case ECustomNotifySsRequestCompleteIPC:
+        case ECustomNotifyPndCacheReadyIPC:
+        case ECustomNotifySsNetworkEventIPC:
+        case ECustomSatRefreshCompleteNotificationIPC:
+        case ECustomNotifyNetworkConnectionFailureIPC:
+        case ECustomNotifyHSxPAStatusIPC:
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+        case ECustomNotifyCellInfoChangeIPC:
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+            ret =  KErrNone;
+            break;
+
+        default:
+            ret = CMmTsyBase::RegisterNotification( aIpc );
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::DeregisterNotification
+// Called when the server recognises 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 DOS.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::DeregisterNotification(
+    const TInt aIpc )
+    {
+    TInt ret ( KErrNotFound );
+
+    switch( aIpc )
+        {
+        case ECustomNotifyRauEventIPC:
+        case ECustomNotifyDtmfEventIPC:
+        case ECustomNotifyAlsBlockedChangedIPC:
+        case ECustomNotifyCipheringInfoChangeIPC:
+        case ECustomNotifyNSPSStatusIPC:
+        case ECustomSsAdditionalInfoNotificationIPC:
+        case ECustomNotifySsRequestCompleteIPC:
+        case ECustomNotifyPndCacheReadyIPC:
+        case ECustomNotifySsNetworkEventIPC:
+        case ECustomSatRefreshCompleteNotificationIPC:
+        case ECustomNotifyNetworkConnectionFailureIPC:
+        case ECustomNotifyHSxPAStatusIPC:
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+        case ECustomNotifyCellInfoChangeIPC:
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+            ret =  KErrNone;
+            break;
+        default:
+            ret = CMmTsyBase::DeregisterNotification( aIpc );
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ReqModeL
+// Returns request mode for given IPC. If the IPC number belongs to some of
+// the Custom API functions.
+// Possible return values:
+//     tsy has own buffering            =0x00000000  
+//     KReqModeMultipleCompletionEnabled=0x00000001
+//     KReqModeFlowControlObeyed=0x00000002
+//     KReqModeRePostImmediately=0x00000004
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CTelObject::TReqMode CMmCustomTsy::ReqModeL(
+    const TInt aIpc )
+    {
+    CTelObject::TReqMode ret = 0;
+
+    switch ( aIpc )
+        {
+        // methods using DOS
+        case ECustomNetWakeupIPC:
+        case ECustomGetNetworkProviderNameIPC:
+        case ECustomCheckTwoDigitDialSupportIPC:
+        case ECustomGetOperatorNameIPC:
+        case ECustomResetNetServerIPC:
+            ret = KReqModeFlowControlObeyed;
+            break;
+            
+        //TSYs wishing to implement their own buffering can return 0 
+        case ECustomSetAlsBlockedIPC:            
+        case ECustomSetDriveModeIPC:            
+            ret = 0;
+            break;
+
+        // Notifications
+        case ECustomNotifyRauEventIPC:
+        case ECustomNotifyDtmfEventIPC:
+        case ECustomNotifyAlsBlockedChangedIPC:
+        case ECustomNotifyCipheringInfoChangeIPC:
+        case ECustomNotifyNSPSStatusIPC:
+        case ECustomSsAdditionalInfoNotificationIPC:
+        case ECustomNotifyPndCacheReadyIPC:
+        case ECustomNotifySsNetworkEventIPC:
+        case ECustomSatRefreshCompleteNotificationIPC:
+        case ECustomNotifyNetworkConnectionFailureIPC:
+        case ECustomNotifySsRequestCompleteIPC:
+        case ECustomNotifyHSxPAStatusIPC:
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+        case ECustomNotifyCellInfoChangeIPC:
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+            ret = KReqModeRePostImmediately |
+                  KReqModeMultipleCompletionEnabled;
+            break;
+
+        // methods that are using DOS but have own flow control system
+        case ECustomGetProgrammableOperatorLogoIPC:
+        case ECustomTerminateCallIPC:
+        case ECustomCheckEmergencyNumberIPC:
+        case ECustomCheckAlsPpSupportIPC:
+        case ECustomGetAlsBlockedIPC:
+        case ECustomGetCipheringInfoIPC:
+        case ECustomClearCallBlackListIPC:
+        case ECustomGetSystemNetworkModesIPC:
+        case ECustomSetSystemNetworkModeIPC:
+        case ECustomGetCurrentSystemNetworkModesIPC:
+        case ECustomReadHSxPAStatusIPC:
+        case ECustomWriteHSxPAStatusIPC:
+        case ECustomGetIccCallForwardingStatusIPC:
+        case ECustomGetCellInfoIPC:
+        case ECustomGetBandSelectionIPC:
+        case ECustomSetBandSelectionIPC:
+
+        // methods not using DOS
+        case ECustomCallOriginIPC:
+        case ECustomGetDiagnosticOctetsIPC:
+        case ECustomGetAirTimeDurationIPC:
+        case ECustomGetRemoteAlertingToneStatusIPC:
+        case ECustomGetPndCacheStatusIPC:
+        case ECustomGetLifeTimeIPC:
+        case ECustomReadSimFileIPC:
+        case EGet3GPBInfoIPC:
+        case EMobilePhoneIMSAuthenticate:
+        case ECustomGetSimAuthenticationDataIPC:
+       	case ECustomGetServiceTableSupportbyApplicationIPC:
+
+        // from Security Tsy
+        case ECustomCheckSecurityCodeIPC:
+        case ECustomIsBlockedIPC:
+        case ECustomDisablePhoneLockIPC:
+        case ECustomGetActivePinIPC:
+        case ECustomSetSimMessageStatusReadIPC:
+            ret = 0;
+            break;
+        default:
+            ret = CMmTsyBase::ReqModeL ( aIpc );
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NumberOfSlotsL(
+    const TInt aIpc )
+    {
+    TInt numberOfSlots ( KMmCustomDefaultSlots );
+
+    switch ( aIpc )
+        {
+        case ECustomNotifyDtmfEventIPC:
+            numberOfSlots = KMmCustomNotifyDtmfEventSlots;
+            break;
+        case ECustomNotifyRauEventIPC:
+        case ECustomNotifyAlsBlockedChangedIPC:
+        case ECustomNotifyCipheringInfoChangeIPC:
+        case ECustomNotifyNSPSStatusIPC:
+        case ECustomSsAdditionalInfoNotificationIPC:
+        case ECustomNotifySsRequestCompleteIPC:
+        case ECustomNotifyPndCacheReadyIPC:
+        case ECustomNotifySsNetworkEventIPC:
+        case ECustomSatRefreshCompleteNotificationIPC:
+        case ECustomNotifyNetworkConnectionFailureIPC:
+        case ECustomNotifyHSxPAStatusIPC:
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+        case ECustomNotifyCellInfoChangeIPC:
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+            break;
+
+        default:
+            numberOfSlots = CMmTsyBase:: NumberOfSlotsL( aIpc );
+            break;
+        }
+
+    return numberOfSlots;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetRequiredPlatSecCaps
+// ETel server calls this method to find out capabilities of custom IPCs.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TSecurityPolicy CMmCustomTsy::GetRequiredPlatSecCaps(
+    const TInt aIpc )
+    {
+TFLOGSTRING2( "TSY: CMmCustomTsy::GetRequiredPlatSecCaps ipc=%d", aIpc );
+    // assume fail as default return value
+    TSecurityPolicy policy( TSecurityPolicy::EAlwaysFail );
+
+    // deal with cancellations
+    TInt ipc ( aIpc );
+    if (ipc >= KIpcCustomExt + EMobileCancelOffset)
+        {
+        ipc  -= EMobileCancelOffset;
+TFLOGSTRING2("TSY: CMmCustomTsy::GetRequiredPlatSecCaps cancel for ipc=%d", ipc);
+        }
+
+    switch ( ipc )
+        {
+        case ECustomNotifyRauEventIPC:
+        case ECustomSatRefreshCompleteNotificationIPC: // To be removed
+        case ECustomNotifyPndCacheReadyIPC:
+        case ECustomGetPndCacheStatusIPC:
+        case EGet3GPBInfoIPC:
+        case ECustomNotifyDtmfEventIPC:
+        case ECustomGetRemoteAlertingToneStatusIPC:
+        case ECustomCallOriginIPC:
+        case ECustomGetAlsBlockedIPC:
+        case ECustomNotifyAlsBlockedChangedIPC:
+        case ECustomCheckAlsPpSupportIPC:
+        case ECustomCheckEmergencyNumberIPC:
+        case ECustomGetCipheringInfoIPC:
+        case ECustomNotifyCipheringInfoChangeIPC:
+        case ECustomNotifyNSPSStatusIPC:
+        case ECustomNotifyProgrammableOperatorLogoChangeIPC:
+        case ECustomNotifyNetworkConnectionFailureIPC:
+        case ECustomNotifySsRequestCompleteIPC:
+        case ECustomGetActivePinIPC:
+        case ECustomGetSystemNetworkModesIPC:
+        case ECustomGetCurrentSystemNetworkModesIPC:
+        case ECustomGetATRIPC:
+        case ECustomNotifySimCardStatusIPC:
+        case ECustomGetSimCardReaderStatusIPC:
+        case ECustomNotifyHSxPAStatusIPC:
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+        case ECustomNotifyCellInfoChangeIPC:
+        case ECustomGetBandSelectionIPC:
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=None");
+            policy = TSecurityPolicy( TSecurityPolicy::EAlwaysPass );
+            break;
+
+        // NetworkControl
+        case ECustomResetNetServerIPC:
+        case ECustomSetSystemNetworkModeIPC:
+        case ECustomSimWarmResetIPC:
+        case ECustomSetBandSelectionIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl");
+            policy = TSecurityPolicy( ECapabilityNetworkControl );
+            break;
+
+        // NetworkControl, PowerMgmt
+        case ECustomPowerSimOnIPC:
+        case ECustomPowerSimOffIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl, PowerMgmt");
+            policy = TSecurityPolicy( ECapabilityNetworkControl,
+                ECapabilityPowerMgmt );
+            break;
+
+        // NetworkControl, ReadDeviceData
+        case ECustomReleaseFileIPC:
+        case ECustomRestartFileIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkControl, ReadDeviceData");
+            policy = TSecurityPolicy( ECapabilityNetworkControl,
+                ECapabilityReadDeviceData );
+            break;
+
+        // NetworkServices
+        case ECustomTerminateCallIPC:
+        case ECustomCancelUssdSessionIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkServices");
+            policy = TSecurityPolicy( ECapabilityNetworkServices );
+            break;
+
+        // NetworkServices, WriteDeviceData
+        case ECustomSetDriveModeIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=NetworkServices, WriteDeviceData");
+            policy = TSecurityPolicy( ECapabilityNetworkServices,
+                ECapabilityWriteDeviceData );
+            break;
+
+        // ReadDeviceData
+        case EReadViagHomeZoneParamsIPC:
+        case ECustomGetNetworkProviderNameIPC:
+        case ECustomGetDiagnosticOctetsIPC:
+        case ECustomGetLifeTimeIPC:
+        case ECustomGetOperatorNameIPC:
+        case ECustomGetProgrammableOperatorLogoIPC:
+        case ECustomSsAdditionalInfoNotificationIPC:
+        case ECustomIsBlockedIPC:
+        case ECustomCheckTwoDigitDialSupportIPC:
+        case ECustomNotifyEGprsInfoChange:
+        case ECustomGetEGprsInfo:
+        case EMobilePhoneIMSAuthenticate:
+        case ECustomReadHSxPAStatusIPC:
+        case ECustomGetIccCallForwardingStatusIPC:
+        case ECustomGetCellInfoIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData );
+            break;
+
+        // ReadDeviceData, Location
+        case EReadViagHomeZoneCacheIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, Location");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData,
+                ECapabilityLocation );
+            break;
+
+        // ReadDeviceData, ReadUserData
+        case ECustomNotifySsNetworkEventIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy= ReadDeviceData, ReadUserData");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData,
+                ECapabilityReadUserData );
+            break;
+
+        // ReadDeviceData, ReadUserData, Location
+        case ECustomReadSimFileIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, ReadUserData, Location");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData,
+                ECapabilityReadUserData,
+                ECapabilityLocation );
+            break;
+
+        // ReadDeviceData, ReadUserData, WriteUserData, NetworkControl
+        case ECustomGetSimAuthenticationDataIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, ReadUserData, WriteUserData, NetworkControl");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData,
+                ECapabilityReadUserData,
+                ECapabilityWriteUserData,
+                ECapabilityNetworkControl );
+            break;
+
+       	case ECustomGetServiceTableSupportbyApplicationIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData );
+            break;
+        // ReadDeviceData, WriteDeviceData, ReadUserData, WriteUserData,
+        // Location, NetworkServices, NetworkControl
+        case ECustomSendAPDUReqIPC:
+        case ECustomSendAPDUReqV2IPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadDeviceData, WriteDeviceData, ReadUserData, WriteUserData, Location, NetworkServices, NetworkControl");
+            policy = TSecurityPolicy( ECapabilityReadDeviceData,
+                ECapabilityWriteDeviceData,
+                ECapabilityReadUserData,
+                ECapabilityWriteUserData,
+                ECapabilityLocation,
+                ECapabilityNetworkServices,
+                ECapabilityNetworkControl  );
+            break;
+
+        // ReadUserData
+        case ECustomStartSimCbTopicBrowsingIPC:
+        case ECustomGetNextSimCbTopicIPC:
+        case ECustomGetAirTimeDurationIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=ReadUserData");
+            policy = TSecurityPolicy( ECapabilityReadUserData );
+            break;
+
+        // WriteDeviceData
+        case ECustomSetAlwaysOnMode:
+        case ECustomSimLockActivateIPC:
+        case ECustomSimLockDeActivateIPC:
+        case ECustomSetAlsBlockedIPC:
+        case ECustomClearCallBlackListIPC:
+        case ECustomNetWakeupIPC:
+        case ECustomCheckSecurityCodeIPC:
+        case ECustomDisablePhoneLockIPC:
+        case ECustomSetSimMessageStatusReadIPC:
+        case ECustomWriteHSxPAStatusIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData");
+            policy = TSecurityPolicy( ECapabilityWriteDeviceData );
+            break;
+
+        // WriteDeviceData, Location
+        case EWriteViagHomeZoneCacheIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData, Location");
+            policy = TSecurityPolicy( ECapabilityWriteDeviceData,
+                ECapabilityLocation );
+            break;
+
+        // WriteUserData
+        case ECustomDeleteSimCbTopicIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteUserData");
+            policy = TSecurityPolicy( ECapabilityWriteUserData );
+            break;
+
+        // WriteDeviceData
+        case EWriteViagHomeZoneUHZIUESettingsIPC:
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=WriteDeviceData");
+            policy = TSecurityPolicy( ECapabilityWriteDeviceData );
+            break;
+        default:
+            // if none of the above then we end up here,
+            // as a default we already have caps as alwaysfail.
+TFLOGSTRING("TSY: CMmCustomTsy::GetRequiredPlatSecCaps policy=AlwaysFail");
+            break;
+        }
+
+    return policy;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CancelService
+// When the clients close their sub-sessions (eg. by calling RPhone::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 function in the TSY.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CancelService(
+    const TInt aIpc,
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    TInt ret ( KErrGeneral );
+
+    // When the clients close their sub-sessions (eg. by calling
+    // RPhone::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
+    // function in the TSY.
+
+    switch ( aIpc )
+        {
+        case ECustomTerminateCallIPC:
+        case ECustomSetAlsBlockedIPC:
+        case ECustomNetWakeupIPC:
+        case ECustomClearCallBlackListIPC:
+        case ECustomResetNetServerIPC:
+        case ECustomGetPndCacheStatusIPC:
+        case ECustomSetDriveModeIPC:
+        case ECustomSetBandSelectionIPC:	
+        case ECustomSetSystemNetworkModeIPC:            
+            // TSY has started a request and it is not possible to then
+            // cancel it. The best thing for the TSY to do in
+            // this case is to proceed as though the Cancel never happened.
+            // The server's call to the TSY cancel function will return
+            // synchronously. The TSY then continues to wait for the methods
+            // acknowledgement and when it receives it, the TSY will complete
+            // the original request.
+            ret = KErrNone;
+            break;
+        case ECustomNotifyRauEventIPC:
+            ret = NotifyRauEventCancel();
+            break;
+        case ECustomNotifyDtmfEventIPC:
+            ret = NotifyDtmfEventCancel( aTsyReqHandle );
+            break;
+        case ECustomGetAlsBlockedIPC:
+            ret = GetAlsBlockedCancel ();
+            break;
+        case ECustomGetCipheringInfoIPC:
+            ret = GetCipheringInfoCancel();
+            break;
+        case ECustomNotifyCipheringInfoChangeIPC:
+            ret = NotifyCipheringInfoChangeCancel( aTsyReqHandle );
+            break;
+        case ECustomNotifyNSPSStatusIPC:
+            ret = NotifyNSPSStatusCancel( aTsyReqHandle );
+            break;
+        case ECustomNotifyAlsBlockedChangedIPC:
+            ret = NotifyAlsBlockedChangedCancel( aTsyReqHandle );
+            break;
+        case ECustomCheckAlsPpSupportIPC:
+            ret = GetAlsPpSupportCancel();
+            break;
+        case ECustomSsAdditionalInfoNotificationIPC:
+            ret = SsAdditionalInfoNotificationCancel( aTsyReqHandle );
+            break;
+        case ECustomNotifySsRequestCompleteIPC:
+            ret = SsRequestCompleteNotificationCancel( aTsyReqHandle );
+            break;
+        case ECustomNotifyPndCacheReadyIPC:
+            ret = NotifyPhoneBookCacheReadyCancel( aTsyReqHandle );
+            break;
+        case ECustomCheckEmergencyNumberIPC:
+            ret = CheckEmergencyNumberCancel();
+            break;
+        case ECustomGetNetworkProviderNameIPC:
+            ret = GetNetworkOperatorNameCancel();
+            break;
+        case ECustomCheckTwoDigitDialSupportIPC:
+            ret = CheckTwoDigitDialSupportCancel();
+            break;
+        case ECustomGetOperatorNameIPC:
+            ret = GetOperatorNameCancel();
+            break;
+        case ECustomNotifySsNetworkEventIPC:
+            ret = NotifySsNetworkEventCancel();
+            break;
+        case ECustomGetProgrammableOperatorLogoIPC:
+            ret = GetProgrammableOperatorLogoCancel();
+            break;
+        case ECustomSatRefreshCompleteNotificationIPC:
+            ret = SatRefreshCompleteNotificationCancel( aTsyReqHandle );
+            break;
+        case ECustomGetCurrentSystemNetworkModesIPC:
+            ret = GetCurrentSystemNetworkModeCancel( aTsyReqHandle );
+            break;
+        case ECustomNotifyNetworkConnectionFailureIPC:
+            ret = NotifyNetworkConnectionFailureCancel();
+            break;
+        case ECustomReadSimFileIPC:
+            ret = GetSimFileInfoCancel( aTsyReqHandle );
+            break;
+        case ECustomGetLifeTimeIPC:
+            ret = GetLifeTimeCancel();
+            break;
+        case EGet3GPBInfoIPC:
+            ret = Get3GPBInfoCancel ();
+            break;
+        case ECustomGetSystemNetworkModesIPC:
+            ret = GetSystemNetworkModesCancel( aTsyReqHandle );
+            break;
+        case EMobilePhoneIMSAuthenticate:
+            ret = ImsAuthenticationCancel();
+            break;
+        case ECustomGetSimAuthenticationDataIPC:
+            ret = SimAuthenticationCancel();
+            break;
+        case ECustomReadHSxPAStatusIPC:
+            ret = ReadHSxPAStatusCancel();
+            break;
+        case ECustomWriteHSxPAStatusIPC:
+            ret = WriteHSxPAStatusCancel();
+            break;
+        case ECustomNotifyHSxPAStatusIPC:
+            ret = NotifyHSxPAStatusCancel();
+            break;
+        case ECustomNotifyIccCallForwardingStatusChangeIPC:
+            ret = NotifyIccCallForwardingStatusChangeCancel( aTsyReqHandle );
+            break;
+        case ECustomGetIccCallForwardingStatusIPC:
+            ret = GetIccCallForwardingStatusCancel();
+            break;
+        case ECustomNotifyCellInfoChangeIPC:
+            ret = NotifyCellInfoChangeCancel();
+            break;
+        case ECustomGetCellInfoIPC:
+            ret = GetCellInfoCancel();
+            break;
+        case ECustomGetBandSelectionIPC:
+            ret = GetSystemNetworkBandCancel( aTsyReqHandle );
+            break;
+       	case ECustomGetServiceTableSupportbyApplicationIPC:
+       		ret = GetUSIMServiceSupportCancel();
+       		break;
+        case ECustomNotifyRemoteAlertingToneStatusChangeIPC:
+            ret = NotifyRemoteAlertingToneStatusChangeCancel();
+            break;
+        case ECustomTsyGetIccCallForwardingStatus:
+          	ret = GetIccCallForwardingStatusCancel( aTsyReqHandle );
+          	break;
+        default:
+        	if ( iMmSecurityTsy->SupportingIPC( aIpc ) ) 
+        		{ 
+        		ret = iMmSecurityTsy->CancelService ( aIpc, 
+        				aTsyReqHandle ); 
+        		}
+            else
+                {
+                ret = CMmTsyBase::CancelService ( aIpc, aTsyReqHandle );
+                }
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::IMSAuthenticationL
+// Requests authentication data generatation from input parameters
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ImsAuthenticationL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMobilePhone::TImsAuthenticateDataV5* aAuthenticationData )
+    {
+    // Save pointer to client space
+    iIMSAuthenticationData = aAuthenticationData;
+
+    CMmDataPackage authenticationDataPackage;
+    authenticationDataPackage.PackData( iIMSAuthenticationData );
+
+    TInt ret = ( iMmPhoneTsy->MessageManager()->HandleRequestL(
+        EMobilePhoneIMSAuthenticate, &authenticationDataPackage ) );
+
+    // Check response of the extension
+    if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else
+        {
+        // Save the req handle type
+        iReqHandleType = ECustomTsyIMSAuthenticate;
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteImsAuthentication
+// Requests authentication data generatation from input parameters
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteImsAuthentication(
+    CMmDataPackage* aDataPackage,
+    TInt aResult )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyIMSAuthenticate );
+
+    if ( KErrNone == aResult )
+        {
+        if ( ECustomTsyReqHandleUnknown != reqHandle )
+            {
+            RMobilePhone::TImsAuthenticateDataV5* authenticationData;
+            aDataPackage->UnPackData( &authenticationData );
+
+            // Copy data to client
+            iIMSAuthenticationData->iRES.Copy( authenticationData->iRES );
+            iIMSAuthenticationData->iCK.Copy( authenticationData->iCK );
+            iIMSAuthenticationData->iIK.Copy( authenticationData->iIK );
+
+            iIMSAuthenticationData = NULL;
+
+            ReqCompleted( reqHandle, aResult );
+            }
+        }
+    else if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrTimedOut == aResult )
+            {
+            iIMSAuthenticationData = NULL;
+            }
+        else
+            {
+            RMobilePhone::TImsAuthenticateDataV5* authenticationData;
+            aDataPackage->UnPackData( &authenticationData );
+
+            // It is possible that request is completed whithout any data
+            // inside datapackage
+            if ( NULL != authenticationData )
+                {
+                iIMSAuthenticationData->iAUTS.Copy(
+                  authenticationData->iAUTS );
+
+                iIMSAuthenticationData = NULL;
+                }
+            }
+
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ImsAuthenticationCancel
+// Cancels sim authentication request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ImsAuthenticationCancel()
+    {
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyIMSAuthenticate );
+
+    // reset pointer to client data
+    iIMSAuthenticationData = NULL;
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SimAuthenticationL
+// Gets authentication parameters from sim
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SimAuthenticationL(
+    const TTsyReqHandle aTsyReqHandle,
+    const TDataPackage& aAuthData )
+    {
+    TInt ret ( KErrNone );
+    TInt rfStateInfo ( ERfsStateInfoNormal );
+
+TFLOGSTRING( "CMmCustomTSY: CMmCustomTsy::SimAuthentication" );
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(ECustomTsyGetSimAuthenticationData);
+    if(0 < reqHandle)
+        {
+        return KErrServerBusy;
+        }
+
+
+
+    RMmCustomAPI::TSimAuthenticationBase* basePtr =
+        REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationBase*,
+        aAuthData.Ptr1() );
+
+    CMmDataPackage authenticationDataPackage;
+
+    rfStateInfo = iMmPhoneTsy->GetRfStatus();
+
+    // Declare a RAND sized buffer
+    TBuf8<16> rand;
+
+    if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
+        basePtr->ExtensionId() )
+        {
+        iEapSim = REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationEapSim*,
+            basePtr );
+
+        rand.Append( iEapSim->iRandomParameters );
+
+        authenticationDataPackage.PackData( iEapSim, &rfStateInfo );
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
+        basePtr->ExtensionId() )
+        {
+        iEapAka = REINTERPRET_CAST( RMmCustomAPI::TSimAuthenticationEapAka*,
+            basePtr );
+
+        rand.Append( iEapAka->iRandomParameters );
+
+        authenticationDataPackage.PackData( iEapAka, &rfStateInfo );
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrap" );
+        iGbaBootstrap = REINTERPRET_CAST( 
+	        RMmCustomAPI::TSimAuthenticationGbaBootstrap*, basePtr );
+
+        rand.Append( iGbaBootstrap->iRandomParameters );
+
+        authenticationDataPackage.PackData( iGbaBootstrap, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrap" ); 
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapUpdate ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrapUpdate" );
+        iGbaBootstrapUpdate = REINTERPRET_CAST( 
+        	RMmCustomAPI::TSimAuthenticationGbaBootstrapUpdate*, basePtr );
+
+        authenticationDataPackage.PackData( iGbaBootstrapUpdate, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrapUpdate" ); 
+        }
+    else if ( 
+        RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapNafDerivation ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EGbaBootstrapNafDerivation" );
+        iGbaNafDerivation = REINTERPRET_CAST( 
+        	RMmCustomAPI::TSimAuthenticationGbaNafDerivation*, basePtr );
+
+        authenticationDataPackage.PackData( iGbaNafDerivation, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EGbaBootstrapNafDerivation" );
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskUpdate ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMskUpdate" );  
+        iMgvMskUpdate = REINTERPRET_CAST( 
+        	RMmCustomAPI::TSimAuthenticationMgvMskUpdate*, basePtr );
+
+        authenticationDataPackage.PackData( iMgvMskUpdate, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMskUpdate" );
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMtkGeneration ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMtkGeneration" );
+        iMgvMtkGeneration = REINTERPRET_CAST( 
+        	RMmCustomAPI::TSimAuthenticationMgvMtkGeneration*, basePtr );
+
+        authenticationDataPackage.PackData( iMgvMtkGeneration, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMtkGeneration" );
+        }
+    else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskDeletion ==
+        basePtr->ExtensionId() )
+        {
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::in EMgvMskDeletion" );
+        iMgvMskDeletion = REINTERPRET_CAST( 
+        	RMmCustomAPI::TSimAuthenticationMgvMskDeletion*, basePtr );
+
+        authenticationDataPackage.PackData( iMgvMskDeletion, &rfStateInfo  ); 
+TFLOGSTRING( "CMmCustomTSY: SimAuthenticationL::out EMgvMskDeletion" ); 
+        }
+    else
+        {
+TFLOGSTRING2( "CMmCustomTSY: Invalid authentication type specified: %d", basePtr->ExtensionId() );
+        ret = KErrNotSupported;
+
+        iEapSim = NULL;
+        iEapAka = NULL;
+		iGbaBootstrap = NULL;
+		iGbaBootstrapUpdate = NULL;
+		iGbaNafDerivation = NULL;
+		iMgvMskUpdate = NULL;
+		iMgvMtkGeneration = NULL;
+		iMgvMskDeletion = NULL;
+
+        //ReqCompleted( aTsyReqHandle, ret );
+        }
+
+    // Check if Rand received from network is valid
+    // when if basePtr has ExtensionId of EEapSim or EEapAka
+    if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
+        basePtr->ExtensionId() || RMmCustomAPI::TSimAuthenticationBase::
+        EEapAka == basePtr->ExtensionId())/* || RMmCustomAPI::
+        TSimAuthenticationBase::EGbaBootstrap == basePtr->ExtensionId())*/
+	    {
+		ret =  CheckRandValidityL( rand );
+	    }
+      
+    if ( KErrNone == ret )
+       {
+       ret = ( iMmPhoneTsy->MessageManager()->HandleRequestL(
+           ECustomGetSimAuthenticationDataIPC, &authenticationDataPackage ) );
+
+       // check result
+       if ( KErrNone == ret )
+           {
+           // Save the req handle type
+           iReqHandleType = ECustomTsyGetSimAuthenticationData;
+           }
+       else
+           {
+           iEapSim = NULL;
+           iEapAka = NULL;
+		   iGbaBootstrap = NULL;
+	       iGbaBootstrapUpdate = NULL;
+		   iGbaNafDerivation = NULL;
+		   iMgvMskUpdate = NULL;
+		   iMgvMtkGeneration = NULL;
+		   iMgvMskDeletion = NULL;
+
+           ReqCompleted( aTsyReqHandle, ret );
+           }
+       }
+    else
+        {
+        iEapSim = NULL;
+        iEapAka = NULL;
+		iGbaBootstrap = NULL;
+		iGbaBootstrapUpdate = NULL;
+		iGbaNafDerivation = NULL;
+		iMgvMskUpdate = NULL;
+		iMgvMtkGeneration = NULL;
+		iMgvMskDeletion = NULL;
+
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSimAuthentication
+// Completes sim authenticaiton request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSimAuthentication(
+    CMmDataPackage* aDataPackage,
+    TInt aResult )
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::CompleteSimAuthentication" );
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSimAuthenticationData );
+
+    if ( KErrNone == aResult )
+        {
+        if ( ECustomTsyReqHandleUnknown != reqHandle )
+            {
+            RMmCustomAPI::TSimAuthenticationBase* basePtr;
+            aDataPackage->UnPackData( &basePtr );
+
+            // if 2G authentication needs to be completed
+            if ( RMmCustomAPI::TSimAuthenticationBase::EEapSim ==
+                basePtr->ExtensionId() )
+                {
+                RMmCustomAPI::TSimAuthenticationEapSim* eapSim;
+
+                aDataPackage->UnPackData( &eapSim );
+
+                // Copy data to client
+                iEapSim->iSRES.Copy( eapSim->iSRES );
+                iEapSim->iKC.Copy( eapSim->iKC );
+
+                iEapSim = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+                }
+            // if 3G authentication needs to be completed
+            else if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
+                basePtr->ExtensionId() )
+                {
+                RMmCustomAPI::TSimAuthenticationEapAka* eapAka;
+
+                aDataPackage->UnPackData( &eapAka );
+
+                // Copy data to client
+                iEapAka->iRES.Copy( eapAka->iRES );
+                iEapAka->iCK.Copy( eapAka->iCK );
+                iEapAka->iIK.Copy( eapAka->iIK );
+
+                iEapAka = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+                }
+            else if ( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
+                basePtr->ExtensionId() )
+                {
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrap" );
+                RMmCustomAPI::TSimAuthenticationGbaBootstrap* gbaBootstrap;
+
+                aDataPackage->UnPackData( &gbaBootstrap );
+
+                // Copy data to client
+                iGbaBootstrap->iRES.Copy( gbaBootstrap->iRES );
+                iGbaBootstrap->iAUTS.Copy( gbaBootstrap->iAUTS );
+
+                iGbaBootstrap = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrap" );
+                }
+            else if ( 
+                RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrapUpdate ==
+                basePtr->ExtensionId() )
+                {
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrapUpdate" );                
+                RMmCustomAPI::TSimAuthenticationGbaBootstrapUpdate* 
+                    gbaBootstrapUpdate;
+
+                aDataPackage->UnPackData( &gbaBootstrapUpdate );
+
+                // Copy data to client
+                iGbaBootstrapUpdate->iRandomParameters.Copy( 
+                    gbaBootstrapUpdate->iRandomParameters );
+
+                iGbaBootstrapUpdate = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrapUpdate" );
+                }
+            else if ( 
+                RMmCustomAPI::TSimAuthenticationBase::
+                    EGbaBootstrapNafDerivation == basePtr->ExtensionId() )
+                {
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EGbaBootstrapNafDerivation" );                
+                RMmCustomAPI::TSimAuthenticationGbaNafDerivation* 
+                    gbaNafDerivation;
+
+                aDataPackage->UnPackData( &gbaNafDerivation );
+
+                // Copy data to client
+                iGbaNafDerivation->iKsExtNaf.Copy( 
+                    gbaNafDerivation->iKsExtNaf );
+
+                iGbaNafDerivation = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EGbaBootstrapNafDerivation" );                
+                }
+            else if ( RMmCustomAPI::TSimAuthenticationBase::EMgvMskUpdate ==
+                    basePtr->ExtensionId() )
+                {
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EMgvMskUpdate" );                
+                RMmCustomAPI::TSimAuthenticationMgvMskUpdate* mgvMskUpdate;
+
+                aDataPackage->UnPackData( &mgvMskUpdate );
+
+                // Copy data to client
+                iMgvMskUpdate->iMikey.Copy( mgvMskUpdate->iMikey );
+                // Smartcard support for MobileTV
+                iMgvMskUpdate->iBCASTManagement.Copy( mgvMskUpdate->iBCASTManagement );
+                iMgvMskUpdate->iParentalRating.Copy( mgvMskUpdate->iParentalRating );
+                iMgvMskUpdate->iSecurityPolicyExt.Copy( mgvMskUpdate->iSecurityPolicyExt );
+                               
+                iMgvMskUpdate = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EMgvMskUpdate" );
+                }
+            else if ( RMmCustomAPI::TSimAuthenticationBase::
+                    EMgvMtkGeneration == basePtr->ExtensionId() )
+                {
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::in EMgvMtkGeneration" );                
+                RMmCustomAPI::TSimAuthenticationMgvMtkGeneration* 
+                    mgvMtkGeneration;
+
+                aDataPackage->UnPackData( &mgvMtkGeneration );
+
+                // Copy data to client
+                iMgvMtkGeneration->iMtkSalt.Copy( mgvMtkGeneration->iMtkSalt );
+                // Smartcard support for MobileTV
+                iMgvMtkGeneration->iBCASTManagement.Copy( mgvMtkGeneration->iBCASTManagement );
+                iMgvMtkGeneration->iParentalControl.Copy( mgvMtkGeneration->iParentalControl );
+                iMgvMtkGeneration->iTrafficEncryptionKey.Copy( mgvMtkGeneration->iTrafficEncryptionKey );
+                iMgvMtkGeneration = NULL;
+
+                ReqCompleted( reqHandle, aResult );
+TFLOGSTRING( "CMmCustomTSY: CompleteSimAuthentication::out EMgvMtkGeneration" ); 
+                }
+            else if ( RMmCustomAPI::TSimAuthenticationBase::
+                    EMgvMskDeletion == basePtr->ExtensionId() )
+                {
+                ReqCompleted( reqHandle, aResult );
+                }
+            else
+                {
+TFLOGSTRING2( "CMmCustomTSY: Invalid authentication type specified: %d", basePtr->ExtensionId() );
+                aResult = KErrArgument;
+                ReqCompleted( reqHandle, aResult );
+                }
+            }
+        }
+    else if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrTimedOut == aResult )
+            {
+            iEapSim = NULL;
+            iEapAka = NULL;
+            }
+        else
+            {
+            RMmCustomAPI::TSimAuthenticationBase* basePtr;
+            aDataPackage->UnPackData( &basePtr );
+
+            // if no datapackage is received in error response
+            if ( NULL == basePtr )
+                {
+                iEapAka = NULL;
+                iEapSim = NULL;
+                }
+            else
+                {
+                // if 3G authentication needs to be completed
+                // copy AUTS sequence to client
+                if ( RMmCustomAPI::TSimAuthenticationBase::EEapAka ==
+                        basePtr->ExtensionId() )
+                    {
+                    RMmCustomAPI::TSimAuthenticationEapAka* eapAka;
+                    aDataPackage->UnPackData( &eapAka );
+
+                    iEapAka->iAUTS.Copy( eapAka->iAUTS );
+
+                    iEapAka = NULL;
+                    }
+                
+                else if( RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap ==
+                        basePtr->ExtensionId() )
+                    {
+TFLOGSTRING( "TSYMH: CompleteSimAuthentication RMmCustomAPI::TSimAuthenticationBase::EGbaBootstrap" );
+                    RMmCustomAPI::TSimAuthenticationGbaBootstrap* gbabootstrap;
+                    aDataPackage->UnPackData( &gbabootstrap );
+
+                    iGbaBootstrap->iAUTS.Copy( gbabootstrap->iAUTS );
+                    }
+                    
+                iEapSim = NULL;
+                }
+            }
+
+	    // reset pointer to client data
+		iGbaBootstrap = NULL;
+		iGbaBootstrapUpdate = NULL;
+		iMgvMskUpdate = NULL;
+		iMgvMtkGeneration = NULL;
+		iMgvMskDeletion = NULL;
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SimAuthenticationCancel
+// Cancels sim authentication request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SimAuthenticationCancel()
+    {
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSimAuthenticationData );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+	    {
+	    // reset pointer to client data
+	    iEapSim = NULL;
+	    iEapAka = NULL;
+		iGbaBootstrap = NULL;
+		iGbaBootstrapUpdate = NULL;
+		iMgvMskUpdate = NULL;
+		iMgvMtkGeneration = NULL;
+		iMgvMskDeletion = NULL;
+		
+	    // complete
+        ReqCompleted( reqHandle, KErrCancel );
+
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckRandValidityL
+// Checks if rand received from network is valid
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CheckRandValidityL(
+    TBuf8<16> aRand )
+    {
+    TInt ret( KErrNone );
+
+    TDesC8& rand = aRand;
+
+    CSHA1* sha1 = CSHA1::NewL();
+
+    sha1->Reset();
+
+    TPtrC8 messageDigest = sha1->Final( rand );
+
+    ret = FindSetBitsFromBackup( messageDigest );
+
+    // If bits were not found from rand_db.prv or
+    // if rand_db.prv itself was not found
+    if ( KErrNone == ret || KErrNotFound == ret )
+        {
+        ret = InsertBlobsToRandDb( messageDigest );
+        }
+
+    delete sha1;
+    sha1 = NULL;
+
+    if ( KErrArgument == ret && 0 == iFreshBitCounter )
+       {
+TFLOGSTRING( "CMmCustomTsy: RAND rejected" );
+       }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CreateRandDb
+// Creates rand_db.cur
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CreateRandDb()
+    {
+    TInt ret = ( KErrNone );
+
+    // local variable initialized to zero
+    TInt counter = 0;
+
+
+    // fileSize is initialized to 2 because of filesize calculation method
+    TInt fileSize = 2;
+
+    RFs   fs;
+    RFile file;
+    
+    ret = fs.Connect();
+    
+    TDriveNumber driveNumber;
+    driveNumber = fs.GetSystemDrive();
+    fs.CreatePrivatePath( driveNumber );
+    fs.SetSessionToPrivate( driveNumber );
+    
+    if ( KErrNone == ret )
+        {
+        ret = file.Create( fs, KRandDb, EFileShareAny );
+
+        if ( KErrNone != ret )
+            {
+TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' creation failed!" );
+            }
+        else if ( KErrNone == ret )
+            {
+            ret = file.Open( fs, KRandDb, EFileShareAny | EFileWrite );
+
+            if ( KErrNone == ret )
+                {
+                // calculates how many bits can be addressed with current
+                // BLOB_SIZE
+                for ( counter = 1; counter < BLOB_SIZE; counter++ )
+                    {
+                    fileSize = ( fileSize * 2 );
+                    }
+                // max number of bits is divided by 8 to get the actual
+                // filesize
+                fileSize = ( fileSize / 8 );
+
+                ret = file.SetSize( fileSize + METADATA_SIZE );
+
+				// empty tbuf for rand_db initialization
+				TBuf8<1024> empty;
+				TInt chunkSize = 1024;
+				empty.FillZ( chunkSize );
+				
+                // reset every byte of newly created rand_db to zero
+				TInt maxSize = ( fileSize + METADATA_SIZE );
+                for ( counter = 0; counter < maxSize;
+                    counter+=chunkSize )
+                    {
+                    TInt writeSize = maxSize - counter;
+                    if(writeSize > chunkSize)
+                        {
+                        writeSize = chunkSize;
+                        }
+                    ret = file.Write( counter, empty, writeSize );
+                    }
+
+                if ( KErrNone != ret )
+                    {
+TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' initialization failed!" );
+                    file.Close();
+                    }
+                }
+            else
+                {
+TFLOGSTRING( "TSY: CMmCustomTsy: 'rand_db.cur' open failed!" );
+                }
+            }
+
+        if ( KErrNone == ret )
+            {
+            file.Close();
+            fs.Close();
+            }
+        else
+            {
+            fs.Close();
+            }
+        }
+    else
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
+        }
+
+    // Give some time for file.Close() and fs.Close() to complete
+    User::After( 200000 );
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::InsertBlobsToRandDb
+// Inserts blobs to rand_db.cur
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::InsertBlobsToRandDb(
+    TPtrC8 aMessageDigest )
+    {
+    RFs fs;
+    RFile file;
+
+    TBuf8<1> byteFromRandDb;
+
+    TInt ret = KErrNone;
+
+    // Many local variables initialized to zero
+    TInt8 counter = 0;
+    TInt8 counter2 = 0;
+
+    TUint16 hexDigit = 0;
+    TUint8 blob = 0;
+    TInt byteNumber = 0;
+    TInt bit = 0;
+
+    TUint16 assignedBits = 0;
+    iFreshBitCounter = 0;
+
+    ret = fs.Connect();
+       
+    TDriveNumber driveNumber;
+    driveNumber = fs.GetSystemDrive();
+    fs.CreatePrivatePath( driveNumber );
+    fs.SetSessionToPrivate( driveNumber );
+
+    if ( KErrNone == ret )
+        {
+        ret = file.Open( fs, KRandDb, EFileShareExclusive | EFileWrite );
+        if ( KErrNotFound == ret )
+            {
+            ret = CreateRandDb();
+
+            if ( KErrNone == ret )
+                {
+                ret = file.Open( fs, KRandDb, EFileShareExclusive |
+                    EFileWrite );
+                if( KErrNone != ret )
+                    {
+TFLOGSTRING( "TSY: CMmCustomTsy: rand_db open failed" );
+                    }
+                }
+            if ( KErrNone != ret )
+                {
+                fs.Close();
+
+                return ret;
+                }
+            }
+
+        for ( counter = 0; counter < 20; counter++ )
+            {
+            // reset loop variables
+            hexDigit = 0;
+            assignedBits = 0;
+
+            // read one hexDigit from message digest
+            hexDigit = static_cast< TUint16 > ( aMessageDigest[counter] );
+            hexDigit <<= 8;
+            counter++;
+            hexDigit |= static_cast< TUint16 > ( aMessageDigest[counter] );
+
+            bit = 1;
+
+            // read as many bits from hexDigit as blobSize indicates
+            for ( counter2 = 0; counter2 < BLOB_SIZE; counter2++ )
+                {
+                assignedBits |= bit & hexDigit;
+                bit <<= 1;
+                }
+
+            byteNumber = ( assignedBits / 8 );
+            bit = ( assignedBits - ( byteNumber * 8 ) );
+
+            ret = file.Read( byteNumber, byteFromRandDb  );
+            if( KErrNone != ret )
+                {
+                break;
+                }
+
+            blob = 128;
+            blob >>= bit;
+
+            // if bit is not already set
+            if ( !blob == ( blob & byteFromRandDb[0] ) )
+                {
+
+                byteFromRandDb[0] |= blob;
+
+                ret = file.Write( byteNumber, byteFromRandDb );
+                if( KErrNone != ret )
+                    {
+                    break;
+                    }
+
+                iFreshBitCounter++;
+                }
+            }
+
+        file.Close();
+        fs.Close();
+        }
+    else
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
+        return ret;
+        }
+
+    // if no new bits were found e.g. RAND will be rejected
+    if ( 0 == iFreshBitCounter )
+        {
+        ret = KErrArgument;
+        }
+    else
+        {
+        ret = UpdateBitCounter();
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::UpdateBitCounter
+// Updates bitcounter information on rand_db.cur
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::UpdateBitCounter()
+    {
+    TInt ret( KErrNone );
+
+    RFs fs;
+    RFile file;
+
+    TBuf8<2> bitCounterBytes;
+
+    // local varibales initialized to zero
+    TUint16 bitCounter = 0;
+    TUint16 temporaryBitCounter = 0;
+    TInt8 counter = 0;
+
+    // fileSize is initialized to 2 because of filesize calculation method
+    TInt fileSize = 2;
+
+    ret = fs.Connect();
+    
+    TDriveNumber driveNumber;
+    driveNumber = fs.GetSystemDrive();
+    fs.CreatePrivatePath( driveNumber );
+    fs.SetSessionToPrivate( driveNumber );
+    
+    if ( KErrNone == ret )
+        {
+        ret = file.Open( fs, KRandDb, EFileShareExclusive | EFileWrite );
+        if ( KErrNone == ret )
+            {
+            // calculate filesize
+            for ( counter = 1; counter < BLOB_SIZE; counter++ )
+                {
+                fileSize = ( fileSize * 2 );
+                }
+            fileSize = ( fileSize / 8 );
+
+            ret = file.Read( fileSize, bitCounterBytes, 2 );
+            if ( KErrNone == ret  )
+                {
+                // read bitcounter info from rand_db
+                bitCounter = STATIC_CAST( TUint16, bitCounterBytes[0] );
+                bitCounter <<= 8;
+                bitCounter |= bitCounterBytes[1];
+
+                // add fresh bits to bit counter info
+                bitCounter += iFreshBitCounter;
+
+                temporaryBitCounter = bitCounter;
+                bitCounterBytes[1] = STATIC_CAST( TUint8,
+                  temporaryBitCounter );
+                temporaryBitCounter >>= 8;
+                bitCounterBytes[0] = STATIC_CAST( TUint8,
+                  temporaryBitCounter );
+
+                ret = file.Write( fileSize, bitCounterBytes, 2 );
+
+                // if more than half of the available bits are set
+                if ( ( fileSize * 4 ) < bitCounter )
+                    {
+                    ret = fs.Delete( KRandDbPrev );
+
+                    if ( KErrNotFound == ret  || KErrNone == ret )
+                        {
+                        ret = file.Rename( KRandDbPrev );
+                        }
+                    }
+                }
+
+            file.Close();
+            }
+
+        fs.Close();
+        }
+    else
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy: Could not connect to file server!" );
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::FindSetBitsFromBackup
+// Checks rand_db.prv for set bits
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::FindSetBitsFromBackup(
+    TPtrC8 aMessageDigest )
+    {
+    RFs fs;
+    RFile file;
+    TBuf8<1> byteFromRandDb;
+
+    TInt ret = KErrNone;
+
+    // Many local variables initialized to zero
+    TInt8 counter = 0;
+    TInt8 counter2 = 0;
+
+    TUint16 hexDigit = 0;
+    TUint8 blob = 0;
+    TInt byteNumber = 0;
+    TInt bit = 0;
+
+    TUint16 assignedBits = 0;
+    iFreshBitCounter = 0;
+
+    ret = fs.Connect();
+    
+    TDriveNumber driveNumber;
+    driveNumber = fs.GetSystemDrive();
+    fs.CreatePrivatePath( driveNumber );
+    fs.SetSessionToPrivate( driveNumber );
+    
+    if( KErrNone == ret )
+    {
+    ret = file.Open( fs, KRandDbPrev, EFileShareAny | EFileRead );
+
+    if ( KErrNone == ret )
+        {
+        for ( counter = 0; counter < 20; counter++ )
+            {
+            // reset loop variables
+            hexDigit = 0;
+            assignedBits = 0;
+
+            // read one hexDigit from message digest
+            hexDigit = STATIC_CAST( TUint16, aMessageDigest[counter] );
+            hexDigit <<= 8;
+            counter++;
+            hexDigit |= STATIC_CAST( TUint16, aMessageDigest[counter] );
+
+            // Initialize bit to 1
+            bit = 1;
+
+            // read as many bits from hexDigit as blobSize indicates
+            for ( counter2 = 0; counter2 < BLOB_SIZE; counter2++ )
+                {
+                assignedBits |= bit & hexDigit;
+                bit <<= 1;
+                }
+
+            // calculate the byte and bit to be read from rand_db backup
+            byteNumber = ( assignedBits / 8 );
+            bit = ( assignedBits - ( byteNumber * 8 ) );
+
+            ret = file.Read( byteNumber, byteFromRandDb );
+            if ( KErrNone != ret )
+                {
+                break;
+                }
+
+            // Initialize blob to 10000000
+            blob = 128;
+            blob >>= bit;
+
+            // if bit is not found from old db
+            if ( !blob == ( blob & byteFromRandDb[0] ) )
+                {
+                iFreshBitCounter++;
+
+                file.Close();
+                fs.Close();
+
+                return ret;
+                }
+            }
+
+        file.Close();
+        fs.Close();
+
+        if ( 0 == iFreshBitCounter )
+            {
+            ret = KErrArgument;
+            }
+        else
+            {
+            ret = KErrNone;
+            }
+        }
+
+    if ( KErrNotFound == ret )
+        {
+        fs.Close();
+        }
+    }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::TerminateCallL
+// This method is used for terminating a call or all calls.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::TerminateCallL(
+    const TTsyReqHandle aTsyReqHandle,
+    const TName* aCallName )
+    {
+    // set return value to KErrNotFound
+    TInt ret( KErrNotFound );
+
+    TTsyReqHandle terminateCallHandle =
+        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyTerminateCall );
+
+    if ( 0 < terminateCallHandle )
+        {
+        //The request is already in processing because of previous request
+        //Complete request with status value informing the client about
+        //the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // Cases are:
+        // if parameter is ALL_CALLS
+        //     if any active or held call exists
+        //         hangup active and held calls
+        //     else
+        //         complete with KErrNone
+        // else (parameter is single call)
+        //     if call exists
+        //         hangup call
+        //     else
+        //         complete with KErrNotFound
+        //
+
+        // call id
+        TInt callId = -1;
+
+        // indicates if this is called in an error situation (ETrue)
+        // or by user request (EFalse);
+        TBool isError = EFalse;
+
+        // terminate all calls
+        // CompareF returns 0 if names are equal
+        if ( 0 == aCallName->CompareF( KTerminateAllCalls ) )
+            {
+            CMmCallTsy* activeCall =
+                iMmPhoneTsy->CallList()->GetMmCallByStatus(
+                    RMobileCall::EStatusConnected );
+            CMmCallTsy* heldCall =
+                iMmPhoneTsy->CallList()->GetMmCallByStatus(
+                    RMobileCall::EStatusHold );
+            CMmCallTsy* connectingCall =
+                iMmPhoneTsy->CallList()->GetMmCallByStatus(
+                    RMobileCall::EStatusDialling );
+            if ( NULL == connectingCall )
+                {
+                connectingCall =
+                iMmPhoneTsy->CallList()->GetMmCallByStatus(
+                    RMobileCall::EStatusConnecting );
+                }
+
+            if ( activeCall || heldCall || connectingCall )
+                {
+                // Let's have negative or zero mean "all active and held calls
+                // and the call id given by taking absolute value of
+                // parameter" as we need to somehow pass alerting call id,
+                // which is neither active or held call..
+                callId = ( NULL != connectingCall ) ?
+                    -TInt( connectingCall->CallId() ) : ( 0 );
+                CMmDataPackage dataPackage;
+                dataPackage.PackData( &callId, &isError );
+                ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
+                    ECustomTerminateCallIPC, &dataPackage );
+                }
+            else
+                {
+                ReqCompleted( aTsyReqHandle, KErrNone );
+                // return immediately, otherwise KErrNone would cause the
+                // request handle to be saved!
+                return KErrNone;
+                }
+            }
+        // terminate call by name
+        else
+            {
+            // change the cause value, a specific call termination is called
+            // when error has ocurred
+            isError = ETrue;
+
+            // get call object by name
+            CMmCallTsy* namedCall =
+                iMmPhoneTsy->CallList()->GetMmCallByName( aCallName );
+
+            // get call ID
+            if ( namedCall )
+                {
+                callId = namedCall->CallId();
+                CMmDataPackage dataPackage;
+                dataPackage.PackData( &callId, &isError );
+                ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
+                    ECustomTerminateCallIPC, &dataPackage );
+                }
+            }
+
+        if ( KErrNone != ret )
+            {
+            // request failed, complete with error value
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Store the request handle
+            iReqHandleType = ECustomTsyTerminateCall;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteTerminateCall
+// This method completes a TerminateCall or a DialCancel request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteTerminateCall(
+    TInt aError )
+    {
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteTerminateCall - aError: %d", aError );
+
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyTerminateCall );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // complete the request with reqhandle and aError
+        ReqCompleted( reqHandle, aError );
+        }
+    // Set 3rd party Dial check number to EFalse  
+    iISVDialNumberCheck = EFalse;    
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyDtmfEvent
+// This method allows a client to be notified when the DTMF phase of a call
+// has begun and completed
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyDtmfEvent(
+        RMmCustomAPI::TDtmfInfo* aInfo )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyDtmfEvent");
+    // save pointer to client data
+    iNotifyInfo = aInfo;
+
+    // save handle type
+    iReqHandleType = ECustomTsyNotifyDtmfEvent;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyDtmfEvent
+// Completes a NotifyDtmfEvent request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyDtmfEvent(
+    RMmCustomAPI::TDtmfInfo aInfo,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyDtmfEvent");
+    // reset request handle. Returns the deleted req handle.
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyDtmfEvent );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iNotifyInfo= aInfo;
+            }
+
+        // reset the internal variable
+        iNotifyInfo = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyDtmfEventCancel
+// This method cancels an outstanding notification of dtmf event, placed with
+// the NotifyDtmfEvent function.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyDtmfEventCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset pointer to client data
+    iNotifyInfo = NULL;
+
+    // reset reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyNotifyDtmfEvent );
+
+    // complete with KErrCancel
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetDiagnosticInfo
+// This function gets the SS diagnostic info (octets) of a call object.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetDiagnosticInfo(
+    const TTsyReqHandle aTsyReqHandle,
+    TName* aCallName )
+    {
+    TInt errorValue = KErrNone;
+    // get call object by name
+    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallByName(
+      aCallName );
+
+    // if call exists
+    if ( mmCall )
+        {
+        TUint8 diags = mmCall->GetDiagnostics();
+        //gets diagnostic value - check value -  return error code
+
+        if ( 0 != diags )
+            {
+TFLOGSTRING3( "TSY:CMmCustomTsy::GetDiagnosticInfo: Diagnostic info=%d asked for call id=%d", diags, mmCall->CallId() );
+            switch ( diags )
+                {                
+                case KDiagnosticInfoBarredWithCUG:
+                    errorValue = KErrDiagnosticInfoBarredWithCUG;
+                    break;
+                case KDiagnosticInfoBarredNoCUG:
+                    errorValue = KErrDiagnosticInfoBarredNoCUG; 
+                    break;
+                case KDiagnosticInfoBarredUnknownCUG:
+                    errorValue = KErrDiagnosticInfoBarredUnknownCUG;
+                    break;
+                case KDiagnosticInfoBarredIncompatibleCUG:
+                    errorValue = KErrDiagnosticInfoBarredIncompatibleCUG;
+                    break;
+                case KDiagnosticInfoBarredFailureCUG:
+                    errorValue = KErrDiagnosticInfoBarredFailureCUG;
+                    break;
+                case KDiagnosticInfoBarredClirNotSubscribed:
+                    errorValue = KErrDiagnosticInfoBarredClirNotSubscribed;
+                    break;   
+                case KDiagnosticInfoBarredCCBSPossible:
+                    errorValue = KErrDiagnosticInfoBarredCCBSPossible;
+                    break; 
+                case KDiagnosticInfoBarredCCBSNotPossible:
+                    errorValue = KErrDiagnosticInfoBarredCCBSNotPossible;
+                    break;
+                default:
+                    errorValue = KErrNone;
+                    break;
+                }
+            }
+TFLOGSTRING2( "TSY: CMmCustomTsy::GetDiagnosticInfo - ReqCompleted - Error code: %d", errorValue );
+        // complete errorvalue to client  - inform change  
+        ReqCompleted( aTsyReqHandle, errorValue ); 
+        }
+    else
+        {
+         // call is not found
+TFLOGSTRING("TSY: CMmCustomTsy::GetDiagnosticInfo - Call is not found");
+        ReqCompleted( aTsyReqHandle, KErrNotFound );
+        }
+TFLOGSTRING2( "TSY: CMmCustomTsy::GetDiagnosticInfo - Error code: %d", errorValue );
+   
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetDiagnosticOctects
+// This function sets the SS diagnostic octets of a call object when received
+// from DOS.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetDiagnosticOctects(
+    TInt aCallId,
+    TUint8 aDiags )
+    {
+    // get call object by id
+    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallById( aCallId );
+
+    // if call exists, set diagnostics
+    if ( mmCall )
+        {
+        mmCall->SetDiagnostics( aDiags );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetRemoteAlertingToneStatus
+// This function returns the remote alerting tone status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetRemoteAlertingToneStatus(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TRemoteAlertingToneStatus* aToneStatus )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetRemoteAlertingToneStatus");
+    TInt ret = iMmCustomExtInterface->GetRemoteAlertingToneStatus(
+        aToneStatus );
+
+    ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCallOrigin
+// This function returns the origin of the call (ETel or other), defined by
+// aCallName parameter.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCallOrigin(
+    const TTsyReqHandle aTsyReqHandle,
+    TName* aCallName,
+    RMmCustomAPI::TCallOrigin* aOrigin )
+    {
+    // get call object by name
+    CMmCallTsy* mmCall = iMmPhoneTsy->CallList()->GetMmCallByName(
+      aCallName );
+
+    // if call exists
+    if ( mmCall )
+        {
+        // get the call origin from Call Object
+        // if the call is a ghost call it means that is not made by ETEL
+         if ( mmCall->ETelOriginated() )
+            {
+            *aOrigin = RMmCustomAPI::EETelCall;
+            }
+         else
+            {
+            *aOrigin = RMmCustomAPI::EOutsider;
+            }
+        }
+    else // call not found
+        {
+        *aOrigin = RMmCustomAPI::EUnknown;
+        }
+
+    ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetAlsBlockedL
+// This method gets the alternating line service block status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetAlsBlockedL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TGetAlsBlockStatus* aBlockStatus )
+    {
+TFLOGSTRING3( "TSY: CMmCustomTsy::GetAlsBlockedL - Req handle: %d, Block status: %d", aTsyReqHandle, *aBlockStatus );
+    TTsyReqHandle getAlsBlockedHandle =
+        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetAlsBlocked );
+
+    if ( 0 < getAlsBlockedHandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to client data
+        iRetAlsBlockStatus = aBlockStatus;
+
+        // call DOS (no packed parameters)
+        TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
+            ECustomGetAlsBlockedIPC );
+
+        // check the result of the call
+        if ( KErrNone != ret )
+            {
+            ReqCompleted ( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Store the request handle
+            iReqHandleType = ECustomTsyGetAlsBlocked;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetAlsBlocked
+// Completes a GetAlsBlocked operation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetAlsBlocked(
+    RMmCustomAPI::TGetAlsBlockStatus  aBlockStatus,
+    TInt aErrorCode )
+    {
+TFLOGSTRING3( "TSY: CMmCustomTsy::CompleteGetAlsBlocked - Block status: %d, Error code: %d", aBlockStatus, aErrorCode );
+    //reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetAlsBlocked );
+
+    // check if request was called
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        //check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iRetAlsBlockStatus = aBlockStatus;
+            }
+        // reset the internal variable
+        iRetAlsBlockStatus = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetAlsBlockedCancel
+// This method cancels getting of alternative line service block status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetAlsBlockedCancel()
+    {
+    // reset the pointer to client space
+    iRetAlsBlockStatus = NULL;
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetAlsBlocked );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::Get3GPBInfo
+// This method gets 3G phonebook info.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::Get3GPBInfo(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::T3GPBInfo* aInfo )
+    {
+    // Fill info struct
+    aInfo->iMaxLenAnr = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
+        iANRNumLengthMax;
+    aInfo->iMaxLenEmail = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
+        iEmailTextLengthMax;
+    aInfo->iMaxLenSne = ( TInt16 )iMmPhoneTsy->PhoneBookState()->
+        iSNETextLengthMax;
+    aInfo->iMaxNumAnr = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
+        iANRNumOfEntriesPerEntry;
+    aInfo->iMaxNumEmail = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
+        iEmailNumOfEntriesPerEntry;
+    aInfo->iMaxNumGroupName = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
+        iGRPNumOfEntriesPerEntry;
+    aInfo->iMaxNumSne = ( TInt8 )iMmPhoneTsy->PhoneBookState()->
+        iSNENumOfEntriesPerEntry;
+    aInfo->iMaxLenGroupName = -1;   // Not known
+
+    // complete with KErrNone
+    ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::Get3GPBInfoCancel
+// This method cancels getting of 3G phonebook info
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::Get3GPBInfoCancel()
+    {
+    // Get3GPBInfo is completed immediately after the request
+    // has been done. No cancelling possible.
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetAlsBlockedL
+// This method sets the alternating line service (ALS) block status using the
+// aBlockStatus variable.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SetAlsBlockedL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TSetAlsBlock* aBlockStatus )
+    {
+TFLOGSTRING3( "TSY: CMmCustomTsy::SetAlsBlockedL - Req handle: %d, Block status: %d", aTsyReqHandle, *aBlockStatus );
+    // get the handle
+    TTsyReqHandle setAlsBlockedHandle =
+        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsySetAlsBlocked );
+
+    if ( setAlsBlockedHandle > 0 )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to aBlockStatus (used for notification)
+        iSetBlockStatus = aBlockStatus;
+
+        // call DOS
+        // packed parameter: TSetAlsBlock (block status)
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( aBlockStatus );
+        TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
+            ECustomSetAlsBlockedIPC, &dataPackage );
+
+        // check success
+        if ( KErrNone != ret )
+            {
+            ReqCompleted ( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Store the request handle
+            iReqHandleType = ECustomTsySetAlsBlocked;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSetAlsBlocked
+// Completes a SetAlsBlocked request. If value for completion is KErrNone and
+// a NotifyAlsBlockedChanged has been requested this method calls
+// CompleteNotifyAlsBlockedChanged.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSetAlsBlocked(
+    TInt aErrorCode )
+    {
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteSetAlsBlocked - Error code: %d", aErrorCode );
+    // get reaq handle for NotifyAlsBlockedChanged
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyNotifyAlsBlockedChanged );
+
+    // check if notification was requested and Set was ok
+    if( ECustomTsyReqHandleUnknown != reqHandle && KErrNone == aErrorCode )
+        {
+        CompleteNotifyAlsBlockedChanged ();
+        }
+
+    // reset saved pointer
+    iSetBlockStatus = NULL;
+
+    // reset req handle. Returns the deleted req handle
+    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsySetAlsBlocked );
+
+    // check if request was called
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyAlsBlockedChanged
+// This method notifies a client of changed ALS blocked status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyAlsBlockedChanged(
+    RMmCustomAPI::TGetAlsBlockStatus* aBlockStatus )
+    {
+    // save pointer to client data
+    iRetNotifyAlsBlockStatus = aBlockStatus;
+
+    // save handle type
+    iReqHandleType = ECustomTsyNotifyAlsBlockedChanged;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyAlsBlockedChanged
+// This method notifies a client of changed ALS blocked status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyAlsBlockedChanged()
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyAlsBlockedChanged );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle && iSetBlockStatus)
+        {
+        // set the information for the client
+#ifndef USING_CTSY_DISPATCHER
+        if ( RMmCustomAPI::EActivateBlock == *iSetBlockStatus )
+#else	//USING_CTSY_DISPATCHER
+        if ( iSetBlockStatus && RMmCustomAPI::EActivateBlock == *iSetBlockStatus )
+#endif //USING_CTSY_DISPATCHER
+            {
+            *iRetNotifyAlsBlockStatus = RMmCustomAPI::EBlockStatusActive;
+            }
+        else // EDeactivateBlock == *iSetBlockStatus
+            {
+            *iRetNotifyAlsBlockStatus = RMmCustomAPI::EBlockStatusInactive;
+            }
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteNotifyAlsBlockedChanged - Block status: %d", *iSetBlockStatus );
+
+        // reset the varible
+        iRetNotifyAlsBlockStatus = NULL;
+
+        // complete
+        ReqCompleted( reqHandle, KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyAlsBlockedChangedCancel
+// Cancels an outstanding NotifyAlsBlockedChanged notification.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyAlsBlockedChangedCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset the pointer to client data
+    iRetNotifyAlsBlockStatus = NULL;
+
+    // reset the reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyAlsBlockedChanged );
+
+    // complete
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetAlsPpSupportL
+// Gets ALS support information from Product Profile.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetAlsPpSupportL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TAlsSupport* aSupport )
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL");
+    // save pointer to client space
+    iAlsSupport = aSupport;
+    
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetAlsPpSupport );
+
+    if ( 0 < reqHandle )
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL - Already processing, save handle");
+        //The request is already in processing because of previous request
+        //Complete request with status value informing the client about
+		TCheckAlsPpSupportRequest* req = 
+                              new (ELeave) TCheckAlsPpSupportRequest();
+		req->iReqHandle = aTsyReqHandle;
+		req->iRetSupport = aSupport;
+		iCheckAlsPpSupportRequests.AppendL( req );
+        }
+    else
+        {
+    // call DOS (no packed parameters)
+    TInt ret = Phone()->MessageManager()->HandleRequestL(
+        ECustomCheckAlsPpSupportIPC );
+
+    if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportL - Save handle");
+        // Save the req handle type
+        iReqHandleType = ECustomTsyGetAlsPpSupport;
+			// save request in queue for completion
+			TCheckAlsPpSupportRequest* req = 
+                              new (ELeave) TCheckAlsPpSupportRequest();
+			req->iReqHandle = aTsyReqHandle;
+			req->iRetSupport = aSupport;
+			iCheckAlsPpSupportRequests.AppendL( req );
+	        }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetAlsPpSupportCancel
+// Cancels an outstanding asynchronous request to get ALS support.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetAlsPpSupportCancel()
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetAlsPpSupportCancel");
+    // reset the pointer to client data
+    iAlsSupport = NULL;
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetAlsPpSupport );
+
+    // complete
+    TInt checkAlsPpSupportRequestsCount = 
+        iCheckAlsPpSupportRequests.Count();
+TFLOGSTRING2( "TSY: CMmCustomTsy::GetAlsPpSupportCancel - Cancel %d requests", checkAlsPpSupportRequestsCount );
+
+	for ( TInt i=0; i < checkAlsPpSupportRequestsCount ; i++ )
+		{
+        TCheckAlsPpSupportRequest* req = 
+            iCheckAlsPpSupportRequests[ i ];
+		//reset the return pointer
+        ReqCompleted( req->iReqHandle, KErrCancel );
+		}
+    // Complete the client request
+	// Destroy Array 
+ 	iCheckAlsPpSupportRequests.ResetAndDestroy();
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetAlsPpSupport
+// Completes a GetAlsPpSupport request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetAlsPpSupport(
+    RMmCustomAPI::TAlsSupport aAlsSupport,
+    TInt aErrorCode )
+    {
+TFLOGSTRING3( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS support: %d, Error: %d", aAlsSupport, aErrorCode );
+    TBool status = EFalse;
+    
+    // Check if the get was called internally during boot
+    if( iMmPhoneTsy->GetAlsQueryInBoot() )
+        {
+    	if( RMmCustomAPI::EAlsSupportOn == aAlsSupport )
+            {
+TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS supported by SIM" );
+            status = ETrue;
+            }
+        //Update ALS status from sim
+        iMmPhoneTsy->SetAlsState( status );
+    	iMmPhoneTsy->SetAlsQueryInBoot( EFalse );
+        }
+    
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetAlsPpSupport );
+
+    // check if request was called
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iAlsSupport = aAlsSupport;
+
+            if( RMmCustomAPI::EAlsSupportOn == aAlsSupport )
+            	{
+TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - ALS supported by SIM" );
+            	status = ETrue;
+            	}
+            //Update ALS status from sim
+            iMmPhoneTsy->SetAlsState( status );
+            }
+
+        // reset the internal variable
+        iAlsSupport = NULL;
+        // complete
+        TInt checkAlsPpSupportRequestsCount = 
+            iCheckAlsPpSupportRequests.Count();
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteGetAlsPpSupport - Complete %d requests", checkAlsPpSupportRequestsCount );
+
+		for ( TInt i=0; i < checkAlsPpSupportRequestsCount ; i++ )
+			{
+            TCheckAlsPpSupportRequest* req = 
+                iCheckAlsPpSupportRequests[ i ];
+            
+            //set value in client side
+            *(req->iRetSupport) = aAlsSupport;
+			//reset the return pointer
+            ReqCompleted( req->iReqHandle, aErrorCode );
+			}
+        // Complete the client request
+		//Destroy Array 
+ 		iCheckAlsPpSupportRequests.ResetAndDestroy();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCipheringInfoL
+// Get Ciphering Info
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCipheringInfoL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TCipheringInfo* aInfo )
+    {
+    // this is special case, only called when Ciphering indicator
+    // is forced off for some operators
+    if ( iMmPhoneTsy->GetNetTsy()->CipheringIndicatorForcedOff() )
+        {
+        aInfo->iIndStatus = EFalse;
+        aInfo->iCiphStatus = EFalse;
+
+        ReqCompleted( aTsyReqHandle, KErrNone );
+        }
+    // normal case
+    else
+        {
+        TTsyReqHandle getCipheringInfoHandle =
+            iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetCipheringInfo );
+
+        if ( 0 < getCipheringInfoHandle )
+            {
+            // The request is already in processing because of previous request
+            // Complete request with status value informing the client about
+            // the situation.
+            ReqCompleted( aTsyReqHandle, KErrServerBusy );
+            }
+        else
+            {
+            // save pointer to client space
+            iRetCipheringInfo = aInfo;
+
+            // call DOS (no packed parameters)
+            TInt ret = Phone()->MessageManager()->HandleRequestL(
+                ECustomGetCipheringInfoIPC );
+
+            // check the correct completion of the call to the extension
+            if ( KErrNone != ret )
+                {
+                ReqCompleted( aTsyReqHandle, ret );
+                }
+            else
+                {
+                // Save the req handle type
+                iReqHandleType = ECustomTsyGetCipheringInfo;
+                }
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetCipheringInfo
+// Completes a GetCipheringInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetCipheringInfo(
+    TBool aCipherIndStatus,
+    TInt aErrorCode )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCipheringInfo );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            iRetCipheringInfo->iIndStatus = aCipherIndStatus;
+            iRetCipheringInfo->iCiphStatus = iCipheringInfo.iCiphStatus;
+            }
+
+        // reset the internal variable
+        iRetCipheringInfo = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCipheringInfoCancel
+// This function cancels an outstanding GetCipheringInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCipheringInfoCancel()
+    {
+    // reset the pointer to client space
+    iRetCipheringInfo = NULL;
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCipheringInfo );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCipheringInfoChange
+// Notifies a client of ciphering info change.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyCipheringInfoChange(
+    RMmCustomAPI::TCipheringInfo* aInfo )
+    {
+    // save pointer to client data
+    iRetNotifyCipheringInfoChange = aInfo;
+
+    // set the reqhandle type
+    iReqHandleType = ECustomTsyNotifyCipheringInfoChange;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCipheringInfoChangeCancel
+// Cancels an outstanding NotifyCipheringInfoChange request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyCipheringInfoChangeCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset the pointer to client data
+    iRetNotifyCipheringInfoChange = NULL;
+
+    // reset the reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyCipheringInfoChange );
+
+    // complete
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyCipheringInfoChange
+// Completes the NotifyCipheringInfoChange method.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyCipheringInfoChange(
+    TBool aCipherIndStatus,
+    TBool aCipherStatus,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange entered");
+    // this is special case, only called when Ciphering indicator
+    // is forced off for some operators
+    if ( iMmPhoneTsy->GetNetTsy()->CipheringIndicatorForcedOff() )
+        {
+TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange: Ciphering forced off");
+        TTsyReqHandle handle = iTsyReqHandleStore->ResetTsyReqHandle(
+            ECustomTsyNotifyCipheringInfoChange );
+
+        if ( ECustomTsyReqHandleUnknown != handle )
+            {
+TFLOGSTRING("TSY:CMmCustomTsy::CompleteNotifyCipheringInfoChange: Ciphering forced off, request completed");
+            iRetNotifyCipheringInfoChange->iIndStatus = EFalse;
+            iRetNotifyCipheringInfoChange->iCiphStatus = ETrue;
+
+            iRetNotifyCipheringInfoChange = NULL;
+
+            ReqCompleted( handle, KErrNone );
+            }
+        }
+
+     // check if information has changed, continue only in case is changed
+    else
+        {
+        if ( iCipheringInfo.iIndStatus  != aCipherIndStatus ||
+            iCipheringInfo.iCiphStatus != aCipherStatus )
+            {
+            // save the information in the custom TSY
+            iCipheringInfo.iIndStatus = aCipherIndStatus;
+            iCipheringInfo.iCiphStatus = aCipherStatus;
+
+            // reset req handle. Returns the deleted req handle
+            TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+                ECustomTsyNotifyCipheringInfoChange );
+
+            // check if handle exists
+            if ( ECustomTsyReqHandleUnknown != reqHandle )
+                {
+                // set the information for the client
+                iRetNotifyCipheringInfoChange->iIndStatus =
+                    iCipheringInfo.iIndStatus;
+                iRetNotifyCipheringInfoChange->iCiphStatus =
+                    iCipheringInfo.iCiphStatus;
+
+                // reset the varible
+                iRetNotifyCipheringInfoChange = NULL;
+
+                // complete
+                ReqCompleted( reqHandle, aErrorCode );
+
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyNSPSStatus
+// Notifies a client of a change in NSPS (No Service Power Save) status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyNSPSStatus(
+    RMmCustomAPI::TNspsStatus* aNspsStatus )
+    {
+    // save pointer to client data
+    iRetNspsStatus = aNspsStatus;
+
+    // set the reqhandle type
+    iReqHandleType = ECustomTsyNotifyNSPSStatus;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyNSPSStatus
+// Completes the notification of a change in NSPS (No Service Power Save)
+// status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyNSPSStatus(
+    TBool aNspsStatus )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyNSPSStatus );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // set the information for the client
+        if ( aNspsStatus ) // the NSPS mode is ON
+            {
+            *iRetNspsStatus = RMmCustomAPI::ENspsOn;
+            }
+        else
+            {
+            *iRetNspsStatus = RMmCustomAPI::ENspsOff;
+            }
+
+        // reset the varible
+        iRetNspsStatus = NULL;
+
+        // complete
+        ReqCompleted( reqHandle, KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyNSPSStatusCancel
+// Cancels an outstanding notification of a change in NSPS (No Service Power
+// Save) status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyNSPSStatusCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset pointer to client data
+    iRetNspsStatus = NULL;
+
+    // reset reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyNotifyNSPSStatus );
+
+    // complete with KErrCancel
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NetWakeupL
+// Send  NetWakeUp request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NetWakeupL(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // intialize ret value
+    TInt ret ( KErrNone );
+
+    // call DOS (no packed parameters)
+    ret = Phone()->MessageManager()->HandleRequestL( ECustomNetWakeupIPC );
+
+    // check result
+    if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else
+        {
+        // Save the req handle type
+        iReqHandleType = ECustomTsyNetWakeup;
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNetWakeup
+// Completes a NetWakeup request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNetWakeup(
+     TInt aErrorCode )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNetWakeup );
+
+    // check the handle and complete
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+#ifdef REQHANDLE_TIMER
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetTypeOfResponse
+// Sets the type of response for a given handle.
+// Automatic mode includes an automatic response in case of no response from
+// the DOS in a specified time.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::SetTypeOfResponse(
+    const TInt aReqHandleType,
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    TInt timeOut( 0 );
+    TInt ipc( 0 );
+
+    switch ( aReqHandleType )
+        {
+        case ECustomTsyCallGsmBlackListClear:
+            timeOut = KMmCustomCallGsmBlackListClearTimeOut;
+            ipc = ECustomClearCallBlackListIPC;
+            break;
+        case ECustomTsyTerminateCall:
+            timeOut = KMmCustomTerminateCallTimeOut;
+            ipc = ECustomTerminateCallIPC;
+            break;
+        case ECustomTsyGetAlsBlocked:
+            timeOut = KMmCustomGetAlsBlockedTimeOut;
+            ipc = ECustomGetAlsBlockedIPC;
+            break;
+        case ECustomTsySetAlsBlocked:
+            timeOut = KMmCustomSetAlsBlockedTimeOut;
+            ipc = ECustomSetAlsBlockedIPC;
+            break;
+        case ECustomTsyGetCipheringInfo:
+            timeOut = KMmCustomGetCipheringInfoTimeOut;
+            ipc = ECustomGetCipheringInfoIPC;
+            break;
+        case ECustomTsyCheckEmergencyNumber:
+            timeOut = KMmCustomCheckEmergencyNumberTimeout;
+            ipc = ECustomCheckEmergencyNumberIPC;
+            break;
+        case ECustomTsyGetNetworkOperatorName:
+            timeOut = KMmCustomGetNetworkOperatorNameTimeout;
+            ipc = ECustomGetNetworkProviderNameIPC;
+            break;
+        case ECustomTsyCheckTwoDigitDialSupport:
+            timeOut = KMmCustomCheckTwoDigitDialTimeout;
+            ipc = ECustomCheckTwoDigitDialSupportIPC;
+            break;
+        case ECustomTsyGetOperatorName:
+            timeOut = KMmCustomGetOperatorNameTimeout;
+            ipc = ECustomGetOperatorNameIPC;
+            break;
+        case ECustomTsyGetProgrammableOperatorLogo:
+            timeOut = KMmCustomGetProgrammableOperatorLogoTimeout;
+            ipc = ECustomGetProgrammableOperatorLogoIPC;
+            break;
+        case ECustomTsyResetNetServer:
+            timeOut = KMmCustomResetNetServer;
+            ipc = ECustomResetNetServerIPC;
+            break;
+        case ECustomTsyGetSimFileInfo:
+            timeOut = KMmCustomReadSimFile;
+            ipc = ECustomReadSimFileIPC;
+            break;
+        case ECustomTsyGetLifeTimerInfo:
+            timeOut = KMmCustomReadSimFile;
+            ipc = ECustomGetLifeTimeIPC;
+            break;
+        case ECustomTsyIMSAuthenticate:
+            timeOut = KMmCustomIMSAuthenticate;
+            ipc = EMobilePhoneIMSAuthenticate;
+            break;
+        case ECustomTsyGetSimAuthenticationData:
+            timeOut = KMmCustomGetSimAuthenticationData;
+            ipc = ECustomGetSimAuthenticationDataIPC;
+            break;
+        case ECustomTsySetDriveMode:
+            timeOut = KMmCustomSetDriveModeTimeOut;
+            ipc = ECustomSetDriveModeIPC;
+            break;
+        case ECustomTsyReadHSxPAStatus:
+            timeOut = KMmCustomTsyReadHSxPAStatusTimeOut;
+            ipc = ECustomReadHSxPAStatusIPC;
+            break;
+        case ECustomTsyWriteHSxPAStatus:
+            timeOut = KMmCustomTsyWriteHSxPAStatusTimeOut;
+            ipc = ECustomWriteHSxPAStatusIPC;
+            break;
+        case ECustomTsyGetIccCallForwardingStatus:
+        	timeOut = KMmCustomTsyGetIccCallForwardingStatusTimeOut;
+        	ipc = ECustomGetIccCallForwardingStatusIPC;
+        	break;
+        case ECustomTsyGetCellInfo:
+            timeOut = KMmCustomTsyGetCellInfoTimeOut;
+            ipc = ECustomGetCellInfoIPC;
+            break;
+       	case ECustomTsyGetUSIMServiceSupport:
+            timeOut = KMmCustomGetUSIMServiceSupportTimeOut;
+            ipc = ECustomGetServiceTableSupportbyApplicationIPC;
+            break;
+        case ECustomTsyGetSystemNetworkBand:
+            timeOut = KMmCustomTsyGetSystemNetworkBandTimeOut;
+            ipc = ECustomGetBandSelectionIPC;
+            break;
+        default:
+            // Does not use timer
+            iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType,
+                aTsyReqHandle );
+            break;
+        }
+
+    if ( 0 < timeOut )
+        {
+        // The timeout parameter is given in seconds.
+        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle,
+            timeOut, ipc );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::Complete
+// Completes the request due the timer expiration.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::Complete(
+    TInt aReqHandleType,
+    TInt aError,
+    TInt aIPC )
+    {
+TFLOGSTRING3( "TSY: CMmCustomTsy::Complete - ReqHandleType: %d Error: %d", aReqHandleType, aError );
+    TBool subTsyReqFound = EFalse;
+    TInt max = GetMaxNumberOfSubsystems();
+    CMmSubTsyBase** subTsyPtr = GetSubsystemArrayPtr();
+
+    // Check Custom TSY's subsystems' req handles first
+    for ( TInt i = 0; max > i; i++ )
+        {
+        // check which custom object handles this IPC
+        if ( ( NULL != subTsyPtr[i] ) &&
+             ( EFalse != subTsyPtr[i]->SupportingIPC( aIPC ) ) )
+            {
+            // call complete method of the right custom object
+            subTsyPtr[i]->Complete( aReqHandleType, aError );
+            i = max;
+            subTsyReqFound = ETrue;
+            }
+        }
+
+    // If the reg handle was not found on Custom TSY's subsystems check the
+    // Custom TSY's request handles
+    if ( !subTsyReqFound )
+        {
+        TBuf<1> name(KNullDesC);
+        RMmCustomAPI::TOperatorNameInfo operatorNameInfo;
+        RMmCustomAPI::TLifeTimeData timeData;
+
+        // All possible Custom TSY req handle types are listed in the
+        // switch case below.
+        switch ( aReqHandleType )
+            {
+            case ECustomTsyCallGsmBlackListClear:
+                CompleteClearCallBlackList ( aError );
+                break;
+            case ECustomTsyTerminateCall:
+                CompleteTerminateCall( aError );
+                break;
+            case ECustomTsyGetAlsBlocked:
+                CompleteGetAlsBlocked( RMmCustomAPI::EBlockStatusUnknown,
+                    aError );
+                break;
+            case ECustomTsySetAlsBlocked:
+                CompleteSetAlsBlocked( aError );
+                break;
+            case ECustomTsyGetCipheringInfo:
+                CompleteGetCipheringInfo( EFalse, aError );
+                break;
+            case ECustomTsyCheckEmergencyNumber:
+                CompleteCheckEmergencyNumber( 0, aError );
+                break;
+            case ECustomTsyGetNetworkOperatorName:
+                CompleteGetNetworkOperatorName( &name, aError );
+                break;
+            case ECustomTsyCheckTwoDigitDialSupport:
+                CompleteCheckTwoDigitDialSupport(
+                    RMmCustomAPI::ETwoDigitDialSupportOff, aError );
+                break;
+            case ECustomTsyGetOperatorName:
+                // we don't initialize as this is response to error situation
+                CompleteGetOperatorName( operatorNameInfo , aError );
+                break;
+            case ECustomTsyResetNetServer:
+                CompleteResetNetServer( aError );
+                break;
+            case ECustomTsyGetSimFileInfo:
+                CompleteGetSimFileInfo( NULL, aError );
+                break;
+            case ECustomTsyGetLifeTimerInfo:
+                CompleteGetLifeTime( timeData, aError );
+                break;
+            case ECustomTsyGetProgrammableOperatorLogo:
+                CompleteGetProgrammableOperatorLogo( NULL, NULL, aError );
+                break;
+            case ECustomTsyGetSimAuthenticationData:
+                CompleteSimAuthentication( NULL, aError );
+                break;
+            case ECustomTsyIMSAuthenticate:
+                CompleteImsAuthentication( NULL, aError );
+                break;
+            case ECustomTsySetDriveMode:
+                CompleteSetDriveMode( aError );
+                break;
+            case ECustomTsyReadHSxPAStatus:
+                CompleteReadHSxPAStatus( NULL, aError );
+                break;
+            case ECustomTsyWriteHSxPAStatus:
+                CompleteWriteHSxPAStatus( aError );
+                break;
+            case ECustomTsyGetCellInfo:
+                CompleteGetCellInfo( NULL, aError );
+                break;
+            case ECustomTsyGetUSIMServiceSupport:
+                CompleteGetUSIMServiceSupport( NULL, aError );
+                break;
+            case ECustomTsyGetSystemNetworkBand:
+                CompleteGetSystemNetworkBand(
+                    RMmCustomAPI::ENetworkBandAny,
+                    RMmCustomAPI::KCapsNetworkModeDual,
+                    aError );
+                break;
+            case ECustomTsyGetIccCallForwardingStatus:
+                CompleteGetIccCallForwardingStatus( NULL, aError );
+                break;                
+            default:
+                break;
+            }
+        }
+    }
+#endif // REQHANDLE_TIMER
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ClearCallBlackList
+// Clears the Call Blacklist.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ClearCallBlackListL(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    TInt retValue ( KErrNone );
+
+    TTsyReqHandle reqhandle =
+        iTsyReqHandleStore->GetTsyReqHandle(
+            ECustomTsyCallGsmBlackListClear );
+
+    if ( 0 < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // call DOS and initialize ret value
+        // no parameters for DOS call
+        retValue = Phone()->MessageManager()->
+            HandleRequestL( ECustomClearCallBlackListIPC );
+
+        // check result
+        if ( KErrNone != retValue )
+            {
+            ReqCompleted( aTsyReqHandle, retValue );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsyCallGsmBlackListClear;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteClearCallBlackList
+// Completes a ClearCallBlackList request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteClearCallBlackList(
+    TInt aErrorCode )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCallGsmBlackListClear );
+
+    // check the handle and complete
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ClearCallBlackListCancel
+// Cancels an outstanding ClearCallBlackList request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ClearCallBlackListCancel()
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCallGsmBlackListClear );
+    // complete with KErrCancel
+    // check the handle and complete
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetAirTimeDuration
+// Gets the air time duration information from CMmPhoneTsy.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetAirTimeDuration(
+    const TTsyReqHandle aTsyReqHandle,
+    TTimeIntervalSeconds* aTime )
+    {
+    // get the air time duration from phone
+    Phone()->GetAirTimeDuration( *aTime );
+
+    // complete with KErrNone
+    ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckEmergencyNumberL
+// Checks whether given number is emergency number or not.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CheckEmergencyNumberL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TEmerNumberCheckMode* aNumberMode,
+    TBool* aResult )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL number=%S", &(aNumberMode->iNumber) );
+
+    TInt ret(KErrGeneral);
+
+    TTsyReqHandle requestHandle =
+        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyCheckEmergencyNumber );
+
+    // 3rd Dial check number
+    if( iISVDialNumberCheck && 0 == requestHandle )
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL - 3rd party client nbr check aResult  = %d" , aResult );
+        iEmergencyNumberCheckMode   = aNumberMode;
+        iEmergencyNumberCheckResult = aResult;
+
+        // parameter for DOS call: a TEmerNumberCheckMode
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( aNumberMode );
+        ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomCheckEmergencyNumberIPC, &dataPackage );
+        }
+
+    //Normal case
+    else
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::CheckEmergencyNumberL - aResult  = %d" , aResult );
+
+        if ( ( 0 < requestHandle || iISVDialNumberCheck ) && 0 != aTsyReqHandle )
+            {
+            // The request is already in processing because of previous request
+            ret = KErrServerBusy;
+            }
+        
+        else if( iISVDialNumberCheck && 0 == aTsyReqHandle )
+            {
+            ret = KErrServerBusy;
+            }
+        
+        else
+            {
+            // save pointers
+            iEmergencyNumberCheckMode   = aNumberMode;
+            iEmergencyNumberCheckResult = aResult;
+
+            // parameter for DOS call: a TEmerNumberCheckMode
+            CMmDataPackage dataPackage;
+            dataPackage.PackData( aNumberMode );
+            ret = Phone()->MessageManager()->HandleRequestL(
+                    ECustomCheckEmergencyNumberIPC, &dataPackage );
+
+            // check the correct completion of the call
+            if ( KErrNone == ret )
+                {
+                // Save the req handle type
+                iReqHandleType = ECustomTsyCheckEmergencyNumber;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteCheckEmergencyNumber
+// Completes checking of emergency number.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteCheckEmergencyNumber(
+    RMmCustomAPI::TMobileTelNumber* aTelNumber,
+    TInt aErrorValue )
+    {
+
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber" );
+
+    // 3rd party number check completion0
+    if( iISVDialNumberCheck )
+        {
+        //Reset
+        TBool isEmergencyNbr = EFalse;
+
+        if ( KErrNone == aErrorValue && NULL == aTelNumber )
+            {
+            *iEmergencyNumberCheckResult = ETrue;
+            isEmergencyNbr = EFalse;
+            }
+        else
+            {
+            *iEmergencyNumberCheckResult = ETrue;
+            isEmergencyNbr = ETrue;
+            }
+
+    // check is the Dial cancel NULL
+    if( iISVDialNumberCheckObject )
+      {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber - Complete3rdPartyCallNbrCheck isEmergencyNbr = %d",isEmergencyNbr );
+      iISVDialNumberCheckObject->Complete3rdPartyCallNbrCheck(
+        isEmergencyNbr );
+      }
+
+      //reset pointer
+      iISVDialNumberCheckObject = NULL;
+      iISVDialNumberCheck = EFalse;
+      }
+
+    // Normal case
+    else
+      {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCheckEmergencyNumber );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorValue )
+            {
+            //set the information for the client
+        if ( aTelNumber )
+            {
+            *iEmergencyNumberCheckResult = ETrue;
+            iEmergencyNumberCheckMode->iNumber = *aTelNumber;
+            }
+        else
+            {
+            *iEmergencyNumberCheckResult = EFalse;
+            }
+        }
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteCheckEmergencyNumber number=%S", &(iEmergencyNumberCheckMode->iNumber) );
+
+        // reset the internal variable
+        iEmergencyNumberCheckResult = NULL;
+        iEmergencyNumberCheckMode   = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorValue );
+        }
+
+        }
+
+    //Reset
+    iISVDialNumberCheck = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckEmergencyNumberCancel
+// Cancels checking of emergency number.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CheckEmergencyNumberCancel()
+    {
+    iEmergencyNumberCheckResult = NULL;
+
+    // reset the req handle.Returns the deleted req handle.
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCheckEmergencyNumber );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyPhoneBookCacheReady
+// Notifies client when phonebookcache is ready.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyPhoneBookCacheReady(
+    const TTsyReqHandle,
+    TName*  aPndName )
+    {
+    iPndName = aPndName;
+
+    iReqHandleType = ECustomTsyNotifyCacheReady;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyPhoneBookCacheReady
+// Completes notify phonebook cache ready.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyPhoneBookCacheReady(
+    TName& aPndName,
+    TInt aResult )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyCacheReady );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        *iPndName = aPndName;
+
+        iPndName = NULL;
+
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyPhoneBookCacheReadyCancel
+// Cancels notify phonebook cache ready notification.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyPhoneBookCacheReadyCancel(
+    const TTsyReqHandle )
+    {
+    // reset request handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyCacheReady );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetPndCacheStatus
+// This function gets current status of phonebook caching.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetPndCacheStatus(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TPndCacheStatus* aPndStatus,
+    const TName* aPndName )
+    {
+    
+    TInt error = KErrNone;
+    // used phonebook is Adn
+    if ( 0 == aPndName->CompareF( KETelIccAdnPhoneBook ) )
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - ADN phonebook status: %d", iAdnCacheStatus);
+        *aPndStatus = iAdnCacheStatus;
+        }
+    // used phonebook is Fdn
+    else if ( 0 == aPndName->CompareF( KETelIccFdnPhoneBook ) )
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - FDN phonebook status: %d", iFdnCacheStatus);
+        *aPndStatus = iFdnCacheStatus;
+        }
+    // used phonebook doesn't have cache
+    else if ( ( 0 == aPndName->CompareF( KETelIccBdnPhoneBook ) ) ||
+              ( 0 == aPndName->CompareF( KETelIccSdnPhoneBook ) ) ||
+              ( 0 == aPndName->CompareF( KETelIccVoiceMailBox ) ) )
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - No cache for: %S ", aPndName);
+        *aPndStatus = RMmCustomAPI::ECacheNotUsed;
+        }
+    else
+        {
+TFLOGSTRING2("TSY: CMmCustomTsy::GetPndCacheStatus - No cache found for: %S ", aPndName);        
+        error = KErrArgument;
+        }
+
+    ReqCompleted( aTsyReqHandle, error );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::UpdateCacheStatus
+// This method updates phonebook caching status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::UpdateCacheStatus(
+    RMmCustomAPI::TPndCacheStatus aPndStatus,
+    TName& aPndName )
+    {
+TFLOGSTRING3("TSY: CMmCustomTsy::UpdateCacheStatus - Phonebook: %S status: %d", &aPndName, aPndStatus);
+    // if used phonebook is Adn
+    if ( 0 == aPndName.CompareF( KETelIccAdnPhoneBook ) )
+        {
+        iAdnCacheStatus = aPndStatus;
+        }
+    // else if used phonebook is Fdn
+    else if ( 0 == aPndName.CompareF( KETelIccFdnPhoneBook ) )
+        {
+        iFdnCacheStatus = aPndStatus;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetNetworkOperatorNameL
+// Gets the network operator name from the SIM card.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetNetworkOperatorNameL(
+    TDes* aNetworkOperatorName )
+    {
+    // call DOS (no packed parameters)
+    TInt ret = Phone()->MessageManager()->HandleRequestL(
+        ECustomGetNetworkProviderNameIPC );
+
+    if ( KErrNone == ret )
+        {
+        // save pointer to client space and req handle type
+        iNetworkOperatorName = aNetworkOperatorName;        
+        iReqHandleType = ECustomTsyGetNetworkOperatorName;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetNetworkOperatorName
+// Completes getting network operator name from SIM card.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetNetworkOperatorName(
+    TDes* aName,
+    TInt aError )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetNetworkOperatorName );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( ( KErrNone == aError ) && ( NULL != aName ) )
+            {
+            if ( aName->Length() <= iNetworkOperatorName->MaxLength() )
+                {            
+                // set the information for the client
+                *iNetworkOperatorName = *aName;
+                }
+            else
+                {
+                // client delivered too small buffer
+                aError = KErrArgument;               
+                }
+            }
+
+        // reset the internal variable
+        iNetworkOperatorName = NULL;
+        // complete
+        ReqCompleted( reqHandle, aError );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetNetworkOperatorNameCancel
+// Cancels getting network operator name from SIM card.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetNetworkOperatorNameCancel()
+    {
+    // reset the pointer to client space
+    iNetworkOperatorName = NULL;
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetNetworkOperatorName );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SsAdditionalInfoNotification
+// Notification request for additional info message.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SsAdditionalInfoNotification(
+    RMmCustomAPI::TSsAdditionalInfo* aSsAdditionalInfo )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::SsAdditionalInfoNotification");
+    iRetSsAdditionalInfo = aSsAdditionalInfo;
+    iReqHandleType = ECustomTsyNotifySsAdditionalInfo;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SsAdditionalInfoNotificationCancel
+// Cancels notification request for additional info message.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SsAdditionalInfoNotificationCancel(
+    const TTsyReqHandle )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::SsAdditionalInfoNotificationCancel");
+    iRetSsAdditionalInfo = NULL;
+
+    // reset reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifySsAdditionalInfo );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSsAdditionalInfoNotification
+// Completes SsAdditionalInfo notification.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSsAdditionalInfoNotification(
+    RMmCustomAPI::TSsAdditionalInfo* aSsAdditionalInfo,
+    TInt aError )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteSsAdditionalInfoNotification");
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifySsAdditionalInfo );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // copy data to client
+        iRetSsAdditionalInfo->iOperationCode =
+            aSsAdditionalInfo->iOperationCode;
+        iRetSsAdditionalInfo->iAdditionalInfo.Copy(
+            aSsAdditionalInfo->iAdditionalInfo );
+
+        // reset pointer to client
+        iRetSsAdditionalInfo = NULL;
+
+        // Complete the client request
+        ReqCompleted( reqHandle, aError );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckTwoDigitDialSupportL
+// Checks two digit dialing support from Product Profile.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CheckTwoDigitDialSupportL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TTwoDigitDialSupport* aSupport )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CheckTwoDigitDialSupportL");
+    // save pointer to client space
+    iTwoDigitDialSupport = aSupport;
+
+    // call DOS
+    TInt error = Phone()->MessageManager()->HandleRequestL(
+        ECustomCheckTwoDigitDialSupportIPC );
+
+    if ( KErrNone != error )
+        {
+        ReqCompleted( aTsyReqHandle, error );
+        }
+    else
+        {
+        // Save the req handle type
+        iReqHandleType = ECustomTsyCheckTwoDigitDialSupport;
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckTwoDigitDialSupport
+// Completes a CheckTwoDigitDialSupport request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteCheckTwoDigitDialSupport(
+     RMmCustomAPI::TTwoDigitDialSupport aTwoDigitDialSupport,
+     TInt aErrorCode )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCheckTwoDigitDialSupport );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iTwoDigitDialSupport = aTwoDigitDialSupport;
+            }
+
+        // reset the internal variable
+        iTwoDigitDialSupport = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CheckTwoDigitDialSupportCancel
+// Cancels an outstanding CheckTwoDigitDialSupport request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::CheckTwoDigitDialSupportCancel()
+    {
+    // reset the pointer to client data
+    iTwoDigitDialSupport = NULL;
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyCheckTwoDigitDialSupport );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetOperatorNameL
+// Get the programmable operator name of the current network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetOperatorNameL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TOperatorNameInfo* aOperatorNameInfo )
+    {
+    // save a pointer to client space
+    iRetOperatorNameInfo = aOperatorNameInfo;
+
+    // call DOS (no packed parameters)
+    TInt ret = Phone()->MessageManager()->HandleRequestL(
+        ECustomGetOperatorNameIPC );
+
+    // check result
+    if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else
+        {
+        // Save the req handle type
+        iReqHandleType = ECustomTsyGetOperatorName;
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetOperatorNameCancel
+// Cancels an outstanding GetOperatorName request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetOperatorNameCancel()
+    {
+    // reset the pointer to client space
+    iRetOperatorNameInfo = NULL;
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetOperatorName );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetOperatorName
+// Completes an outstanding GetOperatorName request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetOperatorName(
+    RMmCustomAPI::TOperatorNameInfo& aOperatorNameInfo,
+    TInt aErrorValue )
+    {
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetOperatorName );
+
+    // check the validity of the handler
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorValue )
+            {
+            // Copy the programmable operator name info in the client space
+            *iRetOperatorNameInfo = aOperatorNameInfo;
+            }
+        // reset the pointer to client space
+        iRetOperatorNameInfo = NULL;
+
+        // complete operation
+        ReqCompleted ( reqHandle, aErrorValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifySsNetworkEvent
+// Notifies the client about a network generated SS event.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifySsNetworkEvent(
+    RMmCustomAPI::TSsTypeAndMode* aSsTypeAndMode,
+    RMmCustomAPI::TSsInfo* aSsInfo )
+    {
+    // save pointer to client data
+    iSsTypeAndMode = aSsTypeAndMode;
+    iSsInfo = aSsInfo;
+
+    // set the reqhandle type
+    iReqHandleType = ECustomTsySsNotification;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifySsNetworkEventCancel
+// Cancels an outstanding NotifySsNetworkEvent.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifySsNetworkEventCancel()
+    {
+    // erase pointers to client data
+    iSsTypeAndMode = NULL;
+    iSsInfo = NULL;
+
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySsNotification );
+
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( tsyReqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifySsNetworkEvent
+// Completes NotifySsNetworkEvent.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifySsNetworkEvent(
+   RMmCustomAPI::TSsTypeAndMode& aSsTypeAndMode,
+   RMmCustomAPI::TSsInfo& aSsInfo,
+   TInt aErrorCode )
+    {
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySsNotification );
+
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+        {
+        if ( KErrNone == aErrorCode )
+            {
+            // save data in client space
+            *iSsTypeAndMode = aSsTypeAndMode;
+            *iSsInfo = aSsInfo;
+            }
+        // reset the pointers to client space
+        iSsTypeAndMode = NULL;
+        iSsInfo = NULL;
+        // complete
+        ReqCompleted( tsyReqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetProgrammableOperatorLogoL
+// Gets the programmable operator logo.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetProgrammableOperatorLogoL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TOperatorId* aOperatorId,
+    RMmCustomAPI::TOperatorLogo* aLogo )
+    {
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetProgrammableOperatorLogo );
+
+    if ( 0 < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save a pointer to client space
+        iRetOperatorLogoInfo = aLogo;
+        iRetOperatorIdInfo = aOperatorId;
+
+        // call DOS
+        // packed parameter: RMmCustomAPI::TOperatorId
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( aOperatorId );
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomGetProgrammableOperatorLogoIPC, &dataPackage );
+
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsyGetProgrammableOperatorLogo;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetProgrammableOperatorLogoCancel
+// Cancels an outstanding GetProgrammableOperatorLogo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetProgrammableOperatorLogoCancel()
+    {
+    // reset the pointers
+    iRetOperatorLogoInfo = NULL;
+    iRetOperatorIdInfo = NULL;
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetProgrammableOperatorLogo );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetProgrammableOperatorLogo
+// Completes GetProgrammableOperatorLogo.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetProgrammableOperatorLogo(
+    RMmCustomAPI::TOperatorId* aOperatorIdInfo,
+    RMmCustomAPI::TOperatorLogo* aLogoData,
+    TInt aErrorValue )
+    {
+   
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetProgrammableOperatorLogo );
+    
+    // check the validity of the handler
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorValue)
+            {
+            // if client has allocated big enough space for logo data, logo data
+            // is appended into client space pointer
+            if ( ( aLogoData->iOperatorLogo ) &&
+                ( aLogoData->iOperatorLogo->Size() <=
+                iRetOperatorLogoInfo->iOperatorLogo->MaxSize() ) )
+                {
+                // Copy the logo info in the client space
+                iRetOperatorLogoInfo->iLogoInfo = aLogoData->iLogoInfo;
+                // Copy the logo in the client space
+                iRetOperatorLogoInfo->iOperatorLogo->Copy( *(
+                    aLogoData->iOperatorLogo ) );
+                // Copy the operator info in the client space
+                *iRetOperatorIdInfo = *aOperatorIdInfo;
+                }
+            else
+                {
+                // logo will not fit into client space
+                aErrorValue = KErrTooBig;
+                }
+            }
+
+        // reset the pointers
+        iRetOperatorLogoInfo = NULL;
+        iRetOperatorIdInfo = NULL;
+
+        // complete operation
+        ReqCompleted ( reqHandle, aErrorValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SatRefreshCompleteNotification
+// Notifies the client of SAT refresh.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SatRefreshCompleteNotification()
+    {
+    iReqHandleType = ECustomTsySatRefreshCompleteNotification;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SatRefreshCompleteNotificationCancel
+// Cancels an outstanding asynchronous SatRefreshCompleteNotification request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SatRefreshCompleteNotificationCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsySatRefreshCompleteNotification );
+
+    // complete with KErrCancel
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSatRefreshCompleteNotification
+// Completes the notification of SAT refresh to the client.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSatRefreshCompleteNotification()
+    {
+    //Note iRefresh is never set to ETrue
+    
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsySatRefreshCompleteNotification );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // complete
+        ReqCompleted( reqHandle, KErrNone );
+        // set sat refresh flag off
+        SetSatRefreshStatus ( EFalse );
+        //Reset ME ALS info
+        Phone()->ResetMEAlsInfo();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetSatRefreshStatus
+// Sets aSatRefreshStatus into internal variable iIsRefresh.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMmCustomTsy::SetSatRefreshStatus(
+    TBool aSatRefreshStatus )
+    {
+    iIsRefresh = aSatRefreshStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ResetNetServerL
+// Resets the net server to previous network selection when user doesn't select
+// a network from the network list got in a search.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ResetNetServerL(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::ResetNetServerL");
+    // call DOS (no packed parameters)
+    TInt ret = Phone()->MessageManager()->HandleRequestL(
+        ECustomResetNetServerIPC );
+
+    if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+    else
+        {
+        // Save the req handle type
+        iReqHandleType = ECustomTsyResetNetServer;
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteResetNetServer
+// Completes a ResetNetServer request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteResetNetServer(
+    TInt aErrorValue )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteResetNetServer - Error: %d", aErrorValue );
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyResetNetServer );
+
+    // Check the reqHandle
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+        {
+        // Check that the error value is not KErrCancel, because this will
+        // cause panic on the ETEL side - error: EZGO-6WVD5N  
+        if ( KErrCancel == aErrorValue )
+            {
+            // Convert the error value from KErrCancel to KErrNotReady
+            aErrorValue = KErrNotReady; 
+            }
+            
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteResetNetServer - complete with error value: %d", aErrorValue );
+        ReqCompleted( tsyReqHandle, aErrorValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyNetworkConnectionFailure
+// Notifies of a network connection failure. This failure is so severe that
+// the only way to recover is to restart the phone.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyNetworkConnectionFailure()
+    {
+    iReqHandleType = ECustomTsyNotifyNetworkConnectionFailure;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyNetworkConnectionFailureCancel
+// Cancels a NotifyNetworkConnectionFailure.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyNetworkConnectionFailureCancel()
+    {
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyNetworkConnectionFailure );
+
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( tsyReqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyNetworkConnectionFailure
+// Completes NotifyNetworkConnectionFailure.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyNetworkConnectionFailure()
+    {
+    // If SIM is inserted complete network connection failure
+    if ( iMmPhoneTsy->NosBootState()->iSIMReady )
+        {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyNetworkConnectionFailure");
+        // reset the reqhandle
+        TTsyReqHandle tsyReqHandle =
+            iTsyReqHandleStore->ResetTsyReqHandle(
+            ECustomTsyNotifyNetworkConnectionFailure );
+
+        // Check the reqHandle
+        if( ECustomTsyReqHandleUnknown != tsyReqHandle )
+            {
+            ReqCompleted ( tsyReqHandle, KErrNone );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SsRequestCompleteNotification
+// Notification request for "SS request complete".
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SsRequestCompleteNotification(
+    TInt* aStatus )
+    {
+    iRetSsRequestComplete = aStatus;
+    iReqHandleType = ECustomTsyNotifySsRequestComplete;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSsRequestCompleteNotification
+// Completes notification request for "SS request complete".
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSsRequestCompleteNotification(
+    TInt aSsStatus,
+    TInt aError )
+    {
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifySsRequestComplete );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( NULL == iRetSsRequestComplete )
+            {
+            ReqCompleted( reqHandle, KErrCorrupt );
+            }
+        else
+            {
+            *iRetSsRequestComplete = aSsStatus;
+            iRetSsRequestComplete = NULL;
+            ReqCompleted( reqHandle, aError );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SsRequestCompleteNotificationCancel
+// Cancels notification request for "SS request complete".
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SsRequestCompleteNotificationCancel(
+    const TTsyReqHandle )
+    {
+    iRetSsRequestComplete = NULL;
+
+    // reset reqhandler
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifySsRequestComplete );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel    	
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSystemNetworkModesL
+// This method gets the supported network modes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSystemNetworkModesL(
+    const TTsyReqHandle aTsyReqHandle,
+    TUint32* aSystemNetworkModes )
+    {
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetSystemNetworkModes );
+
+    if ( 0 < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to the packaged life timer info
+        iSystemNetworkModes = aSystemNetworkModes;
+        TBool useCurrentRats = EFalse;
+        // call DOS
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( &useCurrentRats );
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomGetSystemNetworkModesIPC, &dataPackage );
+
+        // Check response of the extension
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsyGetSystemNetworkModes;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetSystemOrCurrentNetworkModes
+// Completes a GetSystemNetworkModes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetSystemOrCurrentNetworkModes(
+    TUint32 aSystemNetworkModes,
+    TInt aResult )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSystemNetworkModes );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // set the information for the client
+        *iSystemNetworkModes = aSystemNetworkModes;
+
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+
+    // reset req handle. Returns the deleted req handle
+    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCurrentSystemNetworkMode );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // set the information for the client
+        *iCurrentNetworkMode = aSystemNetworkModes;
+
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSystemNetworkModesCancel
+// Cancels a GetSystemNetworkModes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSystemNetworkModesCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset the pointer to client data
+    iSystemNetworkModes = NULL;
+
+    // reset the reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSystemNetworkModes );
+
+    // complete
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetSystemNetworkModeL
+// This method sets the system network mode.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SetSystemNetworkModeL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkModeCaps )
+    {
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsySetSystemNetworkMode );
+
+    if ( 0 < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // call DOS
+        RMmCustomAPI::TNetworkModeCaps networkModeCaps =
+            *aSystemNetworkModeCaps;
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( &networkModeCaps );
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomSetSystemNetworkModeIPC, &dataPackage );
+
+        // Check response of the extension
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsySetSystemNetworkMode;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSetSystemNetworkMode
+// Completes a SetSystemNetworkMode.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSetSystemNetworkMode(
+    TInt aResult )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsySetSystemNetworkMode );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCurrentSystemNetworkModeL
+// This function gets the current network mode GSM/UMTS/Dual.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCurrentSystemNetworkModeL(
+    const TTsyReqHandle aTsyReqHandle,
+    TUint32* aNetworkMode )
+    {
+TFLOGSTRING("CMmCustomTsy::GetCurrentSystemNetworkModeL");
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetCurrentSystemNetworkMode );
+
+    if ( 0 < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        iCurrentNetworkMode = aNetworkMode;
+        // call DOS
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomGetCurrentSystemNetworkModesIPC );
+
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            iReqHandleType = ECustomTsyGetCurrentSystemNetworkMode;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+//  CMmCustomTsy::GetCurrentSystemNetworkModeCancel
+//  Cancel outstanding request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCurrentSystemNetworkModeCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING("CMmCustomTsy::GetCurrentSystemNetworkModeCancel");
+
+    // reset pointer to client data
+    iCurrentNetworkMode = NULL;
+
+    // reset reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCurrentSystemNetworkMode );
+
+    // complete with KErrCancel
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSimFileInfoL
+// Gets data from a given location of a given sim file determined by the
+// aSimFileInfoPckg parameter. Saves the pointer to the client side store
+// buffer for further completion.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSimFileInfoL(
+    const TTsyReqHandle aTsyReqHandle,
+    TDes8* aSimFileInfoPckg,
+    TDes8* aSimResponseBuffer )
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL" );
+    TTsyReqHandle reqHandle =
+        iTsyReqHandleStore->GetTsyReqHandle( ECustomTsyGetSimFileInfo );
+
+    // Unpack the TSimFileInfo data
+    RMmCustomAPI::TSimFileInfoPckg* simFileInfoPckg =
+        ( RMmCustomAPI::TSimFileInfoPckg* ) aSimFileInfoPckg;
+
+    RMmCustomAPI::TSimFileInfo simFileInfo = ( *simFileInfoPckg )();
+
+    if ( 0 < reqHandle )
+        {
+        //The request is already in processing because of previous request
+        //Check if the request is the same than before
+        
+        //Check the file path in SIM where file is read, the offset from 
+        //beginning of the file and amount of data to read
+        if ( ( KErrNotFound != simFileInfo.iPath.Match( iGetSimFileInfoReq.iPath ) ) 
+        	&& ( iGetSimFileInfoReq.iOffSet == simFileInfo.iOffSet )
+        	&& ( iGetSimFileInfoReq.iSize == simFileInfo.iSize ) )
+        	{
+TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL - Same info already requested" );
+
+			TGetSimFileInfoRequest* req = new ( ELeave ) TGetSimFileInfoRequest();
+			req->iReqHandle = aTsyReqHandle;
+			req->iSimFileInfo = aSimResponseBuffer;
+			iGetSimFileInfoRequests.AppendL( req );
+        	}
+        else
+        	{
+            //Complete request with status value informing the client about
+            //the situation.
+            ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        	}
+        }
+    else
+        {
+        iGetSimFileInfoReq = simFileInfo;
+        // call DOS
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( &simFileInfo );
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomReadSimFileIPC, &dataPackage );
+
+        // check the return value of the call to DOS
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoL - Save handle" );
+	        // Save the req handle type
+	        iReqHandleType = ECustomTsyGetSimFileInfo;
+			// Save request in queue for completion
+	        TGetSimFileInfoRequest* req = new ( ELeave ) TGetSimFileInfoRequest();
+			req->iReqHandle = aTsyReqHandle;
+			req->iSimFileInfo = aSimResponseBuffer;
+			iGetSimFileInfoRequests.AppendL( req );
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSimFileInfoCancel
+// Cancels an outstanding GetSimFileInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSimFileInfoCancel( TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetSimFileInfoCancel" );
+    
+	for ( TInt i = 0; i < iGetSimFileInfoRequests.Count(); i++ )
+		{
+		TGetSimFileInfoRequest* req = iGetSimFileInfoRequests[ i ];
+		if ( aTsyReqHandle == req->iReqHandle )
+			{
+			//reset the return pointer
+	        ReqCompleted( req->iReqHandle, KErrCancel );
+			
+	        iGetSimFileInfoRequests.Remove( i );
+	        iGetSimFileInfoRequests.Compress();
+	        
+	        //Delete TGetSimFileInfoRequest object
+	        delete req;
+			}
+		}
+
+	if ( 0 == iGetSimFileInfoRequests.Count() )
+		{
+	    // reset the reqhandle
+	    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+	        ECustomTsyGetSimFileInfo );
+	    
+		//Destroy Array
+		iGetSimFileInfoRequests.ResetAndDestroy();
+		}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetSimFileInfo
+// Completes an outstanding GetSimFileInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetSimFileInfo(
+    TDesC8* aData,
+    TInt aError )
+    {
+TFLOGSTRING( "TSY: CMmCustomTsy::CompleteGetSimFileInfo" );
+    
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyGetSimFileInfo );
+    
+    // Check the reqHandle
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+        {
+        // complete
+        TInt getSimFileInfoRequestsCount = iGetSimFileInfoRequests.Count();
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteGetSimFileInfo - Complete %d requests", getSimFileInfoRequestsCount );
+        
+		for ( TInt i = 0; i < getSimFileInfoRequestsCount; i++ )
+		    {
+		    TGetSimFileInfoRequest* req = iGetSimFileInfoRequests[ i ];
+		
+		    if ( ( KErrNone == aError ) && aData )
+		        {
+		        // check the size....
+		        if ( req->iSimFileInfo->MaxLength() >= aData->Length() )
+		            {
+		            req->iSimFileInfo->Copy( *aData );
+		            ReqCompleted( req->iReqHandle, aError );
+		            }
+		        else // data is too big for client's buffer
+		            {
+		            req->iSimFileInfo->Zero();
+		            ReqCompleted( req->iReqHandle, KErrOverflow );
+		            }
+		        }
+		    else
+	            {
+	            req->iSimFileInfo->Zero();
+	            ReqCompleted( req->iReqHandle, aError );
+	            }
+		    }
+        }
+	
+    //Destroy Array 
+    iGetSimFileInfoRequests.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetLifeTimeL
+// Gets the life timer's information and the manufacturing date of the phone.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetLifeTimeL(
+    const TTsyReqHandle aTsyReqHandle,
+    TDes8* aLifeTimerInfoPckg )
+    {
+    
+    TInt ret( KErrNone );
+    TFLOGSTRING ("TSY: CMmCustomTsy::GetLifeTimeL");
+    if ( sizeof(RMmCustomAPI::TLifeTimeData) != aLifeTimerInfoPckg->MaxLength() )
+        {
+        TFLOGSTRING ("TSY: CMmCustomTsy::GetLifeTimeL bad size argument");
+        // Complete the request with appropiate error        
+        return KErrArgument;
+        }
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+            ECustomTsyGetLifeTimerInfo  );
+    if ( ECustomTsyReqHandleUnknown != reqHandle ) 
+        {
+TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - ECustomTsyReqHandleUnknown" );
+        // The request is already in processing because of previous request.
+        // Complete request with status value informing the client about 
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to the packaged life timer info
+        iLifeTimerInfoPckg = aLifeTimerInfoPckg;
+        TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - send request" );
+        iTsyReqHandleStore->SetTsyReqHandle( 
+                        ECustomTsyGetLifeTimerInfo, aTsyReqHandle );
+        ret = Phone()->MessageManager()->HandleRequestL(
+                ECustomGetLifeTimeIPC);
+        // Check response of the extension
+        if ( KErrNone != ret )
+            {
+            TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - DOS layer returned error " );
+            TTsyReqHandle tsyReqHandle =
+                iTsyReqHandleStore->ResetTsyReqHandle( 
+                                    ECustomTsyGetLifeTimerInfo );
+            if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+                {
+                TFLOGSTRING( "TSY: CMmCustomTsy::GetLifeTimeL - DOS error - unknown handle" );
+                }
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        }
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetLifeTimeCancel
+// Cancels an ongoing GetLifeTime request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetLifeTimeCancel()
+    {
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetLifeTimerInfo );
+
+    // reset pointer to client data
+    iLifeTimerInfoPckg = NULL;
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	// complete with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetLifeTime
+// Completes a GetLifeTime request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetLifeTime(
+    RMmCustomAPI::TLifeTimeData& aLifeTimerData,
+    TInt aErrorValue )
+    {
+    // reset the reqhandle
+    TTsyReqHandle tsyReqHandle =
+        iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsyGetLifeTimerInfo );
+
+    // Check the reqHandle
+    if ( ECustomTsyReqHandleUnknown != tsyReqHandle )
+        {
+        // Check if there is error
+        if ( KErrNone == aErrorValue )
+            {
+            // pack the return information
+            RMmCustomAPI::TLifeTimeDataPckg aPackg ( aLifeTimerData);
+            // Copy the return info into the client side
+            (*iLifeTimerInfoPckg) = aPackg;
+            }
+        // reset the pointer to client space
+        iLifeTimerInfoPckg = NULL;
+        // complete
+        ReqCompleted( tsyReqHandle, aErrorValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::DeliverCode
+// Deliveres code and unblock code.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::DeliverCodeL(
+    RMobilePhone::TCodeAndUnblockCode aCodes )
+    {
+    iMmSecurityTsy->DeliverCodeL( aCodes );
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetDriveModeL
+// This method sets Drive Mode status using the aModeStatus variable.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SetDriveModeL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TSetDriveMode* aModeStatus )
+    {
+TFLOGSTRING3("TSY: CMmCustomTsy::SetDriveModeL - Req handle: %d, Mode status: %d", aTsyReqHandle, *aModeStatus );
+	if ( (iUsingFeatureManager) && (iFeatureControl.FeatureSupported(NFeature::KDriveModeCanRestrictMtCalls) == KFeatureSupported) )
+        {
+        // get the handle
+        TTsyReqHandle setDriveModeHandle =
+            iTsyReqHandleStore->GetTsyReqHandle( ECustomTsySetDriveMode );
+
+        if ( setDriveModeHandle > 0 )
+            {
+            // The request is already in processing because of previous
+            // request. Complete request with status value informing the
+            // client about the situation.
+            ReqCompleted( aTsyReqHandle, KErrServerBusy );
+            }
+        else
+            {
+            // call DOS
+            // packed parameter: TSetDriveMode (mode status)
+            CMmDataPackage dataPackage;
+            dataPackage.PackData( aModeStatus );
+		    // allow for ECustomSetDriveModeIPC immediate completion
+#ifdef REQHANDLE_TIMER
+            // set timer for the request
+            SetTypeOfResponse ( ECustomTsySetDriveMode, aTsyReqHandle );
+#else
+            iTsyReqHandleStore->SetTsyReqHandle( ECustomTsySetDriveMode,
+                    aTsyReqHandle );
+#endif // REQHANDLE_TIMER
+            TInt ret = iMmPhoneTsy->MessageManager()->HandleRequestL(
+                ECustomSetDriveModeIPC, &dataPackage );
+
+            // check success
+            if ( (KErrNone != ret) && (iTsyReqHandleStore->ResetTsyReqHandle(ECustomTsySetDriveMode)) )
+                {
+                ReqCompleted ( aTsyReqHandle, ret );
+                }
+            }
+        }
+    else
+        {
+        ReqCompleted ( aTsyReqHandle, KErrNotSupported );
+        }
+	
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSetDriveMode
+// Completes a Set Drive Mode request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSetDriveMode(
+    TInt aErrorCode )
+    {
+TFLOGSTRING2( "TSY: CMmCustomTsy::CompleteSetDriveMode - Error code: %d", aErrorCode );
+	if ( (iUsingFeatureManager) && (iFeatureControl.FeatureSupported(NFeature::KDriveModeCanRestrictMtCalls) == KFeatureSupported) )
+        {
+        //Reset req handle, returns the deleted req handle
+        TTsyReqHandle reqHandle =
+            iTsyReqHandleStore->ResetTsyReqHandle( ECustomTsySetDriveMode );
+
+        //check if request was called
+        if( ECustomTsyReqHandleUnknown != reqHandle )
+            {
+            //complete
+            ReqCompleted( reqHandle, aErrorCode );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::IsRequestPossibleInOffLine
+// Checks wether a ETel request can be performed or not while offline mode is
+// enabled
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmCustomTsy::IsRequestPossibleInOffline(
+    TInt aIpc )
+    {
+    // we assume here that most of the requests are possible, thefore
+    // we switch for the not possible ones, optimizing a bit the checking.
+    TBool isRequestPossible ( ETrue );
+    // yet another switching function, yeah!
+    switch ( aIpc )
+        {
+        //case ECustomSsAdditionalInfoNotificationIPC: //ok (but shouldn't be
+                                                       //triggered anyways)
+        //case ECustomNotifySsRequestCompleteIPC: //ok (but shouldn't be
+                                                  //triggered anyways)
+        //case ECustomStartSimCbTopicBrowsingIPC: //ok
+        //case ECustomGetNextSimCbTopicIPC: //ok
+        //case ECustomDeleteSimCbTopicIPC: //ok
+        //case ECustomReadSimFileIPC: //ok
+        //case ECustomNotifyDtmfEventIPC: //ok (policy is to leave
+                                          //the notifications as ok)
+        //case ECustomGetDiagnosticOctetsIPC: //ok (NO?, this only applies to
+                                              //call so...should be no)
+        //case ECustomSetAlsBlockedIPC: //ok
+        //case ECustomGetAlsBlockedIPC: //ok
+        //case ECustomCheckAlsPpSupportIPC: //ok
+        //case ECustomGetRemoteAlertingToneStatusIPC:
+        //case ECustomCallOriginIPC: //ok (only for emergency)
+        //case ECustomNotifyAlsBlockedChangedIPC: //ok //Notify Als
+                                                       //Blocked Change
+        //case ECustomTerminateCallIPC: //ok (or no?) //Terminate a Call
+        //case ECustomClearCallBlackListIPC: //ok //Clear call blacklist
+        //case ECustomSimLockActivateIPC: //ok
+        //case ECustomSimLockDeActivateIPC: //ok
+        //case EReadViagHomeZoneParamsIPC: //ok
+        //case EReadViagHomeZoneCacheIPC: //ok
+        //case EWriteViagHomeZoneCacheIPC: //ok
+        //case ECustomGetCipheringInfoIPC: //ok
+        //case ECustomNotifyCipheringInfoChangeIPC: //ok
+        //case ECustomNotifyNSPSStatusIPC: //ok
+        case ECustomNetWakeupIPC: //NO
+        //case ECustomGetNetworkProviderNameIPC: //ok //(info is got from sim)
+        case ECustomGetOperatorNameIPC: //NO //(there is no operator
+                                             //available in offline)
+        //case ECustomGetProgrammableOperatorLogoIPC: //ok
+        case ECustomResetNetServerIPC: //NO (or yes, but this one is sensible)
+        //case ECustomNotifyProgrammableOperatorLogoChangeIPC: //ok
+        //case ECustomNotifyNetworkConnectionFailureIPC: //ok
+        //case ECustomGetAirTimeDurationIPC: //ok (at least for emergency call)
+        //case ECustomNotifyPndCacheReadyIPC: //ok
+        //case ECustomGetPndCacheStatusIPC: //ok
+        //case ECustomNotifySsNetworkEventIPC: //ok //(shouldn't be possible
+                                                    //to get any )
+        //case ECustomCheckTwoDigitDialSupportIPC: //ok
+        //case ECustomSendAPDUReqIPC: //ok
+        //case ECustomGetLifeTimeIPC: //ok
+        //case ECustomIsBlockedIPC: //ok
+        //case ECustomCheckSecurityCodeIPC: //ok
+        //case ECustomCheckEmergencyNumberIPC: //ok
+        //case ECustomSatRefreshCompleteNotificationIPC: //ok
+        //case ECustomDisablePhoneLockIPC: //ok
+        //case ECustomGetActivePinIPC: //ok
+        //case ECustomReleaseFileIPC: //ok
+        //case ECustomRestartFileIPC: //ok
+        //case ECustomNotifyEGprsInfoChange: //ok
+        //case ECustomGetEGprsInfo: //ok
+        //case EGet3GPBInfoIPC: //ok
+        //case ECustomSetDriveModeIPC: //ok
+        //case ECustomReadHSxPAStatusIPC: //ok
+        //case ECustomWriteHSxPAStatusIPC: //ok
+        //case ECustomNotifyHSxPAStatusIPC: //ok
+        //case ECustomNotifyCellInfoChangeIPC: //ok
+        //case ECustomGetCellInfoIPC: //ok
+
+        //case ECustomGetBandSelectionIPC: //ok
+        //case ECustomNotifyRemoteAlertingToneStatusChangeIPC: //ok
+
+        case ECustomSetSystemNetworkModeIPC:
+        case ECustomSetBandSelectionIPC:
+            isRequestPossible = EFalse;
+            break;
+        default:
+            break;
+        }
+
+    return isRequestPossible;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetCurrentSystemNetworkMode
+// Completes Get Current System Network Mode
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetCurrentSystemNetworkMode(
+    TUint32 aCurrentNetwork,
+    TInt aResult )
+    {
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCurrentSystemNetworkMode );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // set the information for the client
+        *iCurrentNetworkMode = aCurrentNetwork;
+
+        // reset the varible
+        iCurrentNetworkMode = NULL;
+
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetSimMessageStatusReadL
+// Sets SIM SMS storage status to "read". Implements
+// CustomAPI method SetSimMessageStatusRead.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SetSimMessageStatusReadL(
+    const TTsyReqHandle aTsyReqHandle,
+    TTime& aTime,
+    TInt& aTimezoneDiff )
+    {
+    // NOTE: This method asynchronously calls DOS, and then immediately
+    // completes with KErrNone. Any problems or errors are silently ignored.
+
+    //call DOS
+    CMmDataPackage dataPackage;
+    dataPackage.PackData( &aTime, &aTimezoneDiff );
+    iMmPhoneTsy->MessageManager()->HandleRequestL(
+        ECustomSetSimMessageStatusReadIPC, &dataPackage );
+
+    // immediately complete, ignore the result.
+    ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ISVDialNumberCheck
+// Saves call object for completion
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::SetObjectForISVDialNumberCheck(
+    CMmVoiceCallTsy* aCallObject )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::SetObjectForISVDialNumberCheck aCallObject=%x", aCallObject );
+    //Save pointer for completion of check emergency number
+    iISVDialNumberCheckObject = aCallObject;
+    //ISV dial has been requested
+    iISVDialNumberCheck = ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyRauEvent
+// Sets RAU event notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyRauEvent(
+    RMmCustomAPI::TRauEventStatus* aEventStatus )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyRauEvent");
+
+    // save pointer to client data
+    iRauEventStatus = aEventStatus;
+
+    // save handle type
+    iReqHandleType = ECustomTsyNotifyRauEvent;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyRauEvent
+// Completes a NotifyRauEvent request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyRauEvent(
+    RMmCustomAPI::TRauEventStatus aEventStatus,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyRauEvent");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyRauEvent );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iRauEventStatus = aEventStatus;
+            }
+
+        // reset the internal variable
+        iRauEventStatus = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyRauEventCancel
+// This method cancels an outstanding notification of RAU event, placed with
+// the NotifyRauEvent function.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyRauEventCancel()
+    {
+    // reset reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
+        ECustomTsyNotifyRauEvent );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset pointer to client data
+        iRauEventStatus = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ReadHSxPAStatusL
+// Read high speed channel status
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ReadHSxPAStatusL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::ReadHSxPAStatusL");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyReadHSxPAStatus );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to client data
+        iRetHSxPAStatus = aHSxPAStatus;
+
+        // call DOS (no packed parameters)
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomReadHSxPAStatusIPC );
+
+        // check the result of the call
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Store the request handle
+            iReqHandleType = ECustomTsyReadHSxPAStatus;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteReadHSxPAStatus
+// Completes a ReadHSxPAStatus request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteReadHSxPAStatus(
+    CMmDataPackage* aDataPackage,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteReadHSxPAStatus");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyReadHSxPAStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorCode )
+            {
+            RMmCustomAPI::THSxPAStatus status;
+            aDataPackage->UnPackData( status );
+
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteReadHSxPAStatus, status = %d", status);
+
+            // Save the status.
+            iHSxPAStatus = status;
+
+            // set the information for the client
+            *iRetHSxPAStatus = status;
+
+            // reset the internal variable
+            iRetHSxPAStatus = NULL;
+            //Complete request to success
+            ReqCompleted( reqHandle, KErrNone );
+            }
+        else
+            {
+            // Complete with error
+            ReqCompleted( reqHandle, aErrorCode );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ReadHSxPAStatusCancel
+// Cancels a ReadHSxPAStatus request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::ReadHSxPAStatusCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::ReadHSxPAStatusCancel");
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyReadHSxPAStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset the pointer to client data
+        iRetHSxPAStatus = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::WriteHSxPAStatusL
+// Write HSxPAStatus
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::WriteHSxPAStatusL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::WriteHSxPAStatusL. New status: %d", *aHSxPAStatus);
+
+    iSetHSxPAStatus = aHSxPAStatus;
+
+    // get the handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyWriteHSxPAStatus );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( iSetHSxPAStatus );
+
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomWriteHSxPAStatusIPC, &dataPackage );
+
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsyWriteHSxPAStatus;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteWriteHSxPAStatus
+// Complete WriteHSxPAStatus request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteWriteHSxPAStatus(
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteWriteHSxPAStatus");
+
+    //reset req handle.
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyWriteHSxPAStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorCode )
+            {
+            // Save the current status
+            iHSxPAStatus = *iSetHSxPAStatus;
+            }
+
+        // erase pointer to client data
+        iSetHSxPAStatus = NULL;
+
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::WriteHSxPAStatusCancel
+// Cancel WriteHSxPAStatus request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::WriteHSxPAStatusCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::WriteHSxPAStatusCancel");
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyWriteHSxPAStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // erase pointer to client data
+        iSetHSxPAStatus = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyHSxPAStatus
+// Set HSxPA notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyHSxPAStatus(
+    RMmCustomAPI::THSxPAStatus* aHSxPAStatus )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyHSxPAStatus");
+
+    // save pointer to client data
+    iRetNotifyHSxPAStatus = aHSxPAStatus;
+
+    // set the reqhandle type
+    iReqHandleType = ECustomTsyNotifyHSxPAStatus;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyHSxPAStatus
+// Complete HSxPA notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyHSxPAStatus(
+    CMmDataPackage* aDataPackage,
+    TInt aErrorCode )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, Error: %d", aErrorCode);
+
+    RMmCustomAPI::THSxPAStatus status;
+    aDataPackage->UnPackData( status );
+
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, old status: %d", iHSxPAStatus);
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyHSxPAStatus, new status: %d", status);
+
+    // check if status was changed
+    if ( iHSxPAStatus != status )
+        {
+        // Check if notification was requested
+        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            ECustomTsyNotifyHSxPAStatus );
+
+        if ( ECustomTsyReqHandleUnknown != reqHandle )
+            {
+            // check if response was ok
+            if ( KErrNone == aErrorCode )
+                {
+                // Save the status
+                iHSxPAStatus = status;
+
+                // set the information for the client
+                *iRetNotifyHSxPAStatus = status;
+
+                //Complete request to success
+                ReqCompleted( reqHandle, KErrNone );
+                }
+            else
+                {
+                // Complete error value
+                ReqCompleted( reqHandle, aErrorCode );
+                }
+
+            // reset the internal variable
+            iRetNotifyHSxPAStatus = NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyHSxPAStatusCancel
+// Cancel HSxPA notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyHSxPAStatusCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyHSxPAStatusCancel");
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyHSxPAStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset the pointer to client data
+        iRetNotifyHSxPAStatus = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCallForwardingStatusL
+// Gets  call forwarding status
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetIccCallForwardingStatusL(
+    TTsyReqHandle /*aTsyReqHandle*/,
+    TDes8* aCFIndicators )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetIccCallForwardingStatusL");
+
+    TInt ret( KErrGeneral );
+
+    //Get reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetIccCallForwardingStatus );
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ret = KErrServerBusy;
+        }
+    else
+        {
+        if(  sizeof(RMmCustomAPI::TCFIndicators) > aCFIndicators->Size())
+            {
+            ret = KErrArgument;    
+            }
+        else
+            {
+            //Store client side pointer
+            iRetCFIndicators =  aCFIndicators;
+            
+            ret = Phone()->MessageManager()->HandleRequestL(
+                ECustomGetIccCallForwardingStatusIPC );
+            
+            if ( KErrNone == ret )
+                {
+                // Save the req handle type
+                iReqHandleType = ECustomTsyGetIccCallForwardingStatus;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetCallForwardingStatus
+// completes gets  call forwarding status request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetIccCallForwardingStatus(
+    CMmDataPackage* aDataPackage,
+    TInt aErrorCode )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus, aErrorCode=%d", aErrorCode );
+
+    //reset req handle.
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetIccCallForwardingStatus );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if( KErrNone == aErrorCode )
+            {
+            RMmCustomAPI::TCFIndicatorsPckg* tcfIndicatorPckg = REINTERPRET_CAST(
+                    	RMmCustomAPI::TCFIndicatorsPckg*, iRetCFIndicators );
+            RMmCustomAPI::TCFIndicators& tcfIndicator = ( *tcfIndicatorPckg )();
+
+            aDataPackage->UnPackData( iCurrentTCFIndicator );
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus, indicator=%u", iCurrentTCFIndicator.iIndicator );
+
+            tcfIndicator.iIndicator = iCurrentTCFIndicator.iIndicator;
+                tcfIndicator.iCFNumber.iTypeOfNumber =
+            iCurrentTCFIndicator.iCFNumber.iTypeOfNumber;
+            tcfIndicator.iCFNumber.iNumberPlan =
+                iCurrentTCFIndicator.iCFNumber.iNumberPlan;
+            tcfIndicator.iCFNumber.iTelNumber.Copy(
+               iCurrentTCFIndicator.iCFNumber.iTelNumber );
+
+	        // Update CenRep with latest valid data
+	        if( &iCurrentTCFIndicator )
+	            {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus : Update Central Repository");
+	            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
+	            iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );
+	
+	            iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan,
+	                iCurrentTCFIndicator.iCFNumber.iNumberPlan );
+	            iCFISCentRep->Set( KCtsyCallForwardingNumber,
+	                iCurrentTCFIndicator.iCFNumber.iTelNumber );
+	            iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId,
+	                iCurrentTCFIndicator.iMultipleSubscriberProfileID );
+	            }
+            }
+        //Erase client side pointer
+        iRetCFIndicators = NULL;
+        //Complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+
+    //Request is made during boot-up done only once
+    else if( iGetIccCfStatusBootUp )
+        {
+        if( KErrNone == aErrorCode )
+            {
+            iGetIccCfStatusBootUp = EFalse;
+            aDataPackage->UnPackData( iCurrentTCFIndicator );
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus CenRep key UnconditionalCFStatus not RESETED.");     
+
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus : Bootup case, KCtsyCallForwardingIndicator indicator=%u", iCurrentTCFIndicator.iIndicator );
+
+            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
+            iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );
+            iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan,
+            iCurrentTCFIndicator.iCFNumber.iNumberPlan );
+            iCFISCentRep->Set( KCtsyCallForwardingNumber,
+            iCurrentTCFIndicator.iCFNumber.iTelNumber );
+            iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId,
+            iCurrentTCFIndicator.iMultipleSubscriberProfileID );
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetIccCallForwardingStatus CenRep updated."); 			
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetIccCallForwardingStatusCancel
+// Cancels Get icc call forwarding status
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetIccCallForwardingStatusCancel(
+	const TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING("CMmCustomTsy::GetIccCallForwardingStatusCancel");
+	// reset reqhandle
+	iTsyReqHandleStore->ResetTsyReqHandle(
+			ECustomTsyGetIccCallForwardingStatus );
+
+	// complete with KErrCancel
+	ReqCompleted( aTsyReqHandle, KErrCancel );
+
+	return KErrNone;
+    }
+	 
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetIccCallForwardingStatusCancel
+// Cancels an ongoing GetIccCallForwardingStatus request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetIccCallForwardingStatusCancel()
+    {
+    //Reset req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
+        ECustomTsyGetIccCallForwardingStatus );
+        
+    //Erase client side pointer
+    iRetCFIndicators = NULL;
+    
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+    	{
+    	//Complete request with cancel
+    	ReqCompleted( reqHandle, KErrCancel );
+    	}
+    
+    return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCallForwardingStatusChange
+// Set notification on
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyIccCallForwardingStatusChange(
+    TDes8* aCFIndicators )
+    {
+
+    iNotifyCFIndicator = aCFIndicators;
+    // save handle type
+    iReqHandleType = ECustomTsyNotifyIccCallForwardingStatusChange;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyCallForwardingStatusChange
+// Notifies client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange(
+    CMmDataPackage* aDataPackage,
+    TInt aErrorCode )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange, Error: %d", aErrorCode);
+
+    RMmCustomAPI::TCFIndicators tempNotifyCFIndicator;
+    aDataPackage->UnPackData( tempNotifyCFIndicator );
+
+    TBool isChanged = IsIccCallForwardingStatusChanged(
+        tempNotifyCFIndicator );
+
+    // check if information was changed
+    if ( isChanged )
+        {
+        //Update CTSY internal buffer
+        iCurrentTCFIndicator = tempNotifyCFIndicator;
+
+        if ( KErrNone == aErrorCode )
+            {  
+			//Update CenRep
+
+            TPckg<TUint32> tempPckg( iCurrentTCFIndicator.iIndicator );
+			iCFISCentRep->Set( KCtsyCallForwardingIndicator, tempPckg );	
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange : Update CenRep, KCtsyCallForwardingIndicator indicator=%u", iCurrentTCFIndicator.iIndicator );
+				
+        	iCFISPrivateCentRep->Set( KCtsyCallForwardingNumberPlan, 
+        	    iCurrentTCFIndicator.iCFNumber.iNumberPlan );
+			
+        	iCFISCentRep->Set( KCtsyCallForwardingNumber,
+        	    iCurrentTCFIndicator.iCFNumber.iTelNumber );        
+				        		    
+        	iCFISPrivateCentRep->Set( KCtsyCallForwardingMspId, 
+        	    iCurrentTCFIndicator.iMultipleSubscriberProfileID );
+            //CenRep updated
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyIccCallForwardingStatusChange CenRep updated."); 	            
+            }
+
+        // Check if notification was requested
+        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            ECustomTsyNotifyIccCallForwardingStatusChange );
+
+        if ( ECustomTsyReqHandleUnknown != reqHandle )
+            {
+            // check if response was ok
+            if ( KErrNone == aErrorCode )
+                {
+                RMmCustomAPI::TCFIndicatorsPckg* tcfIndicatorPckg =
+                REINTERPRET_CAST(
+                RMmCustomAPI::TCFIndicatorsPckg*, iNotifyCFIndicator );
+                RMmCustomAPI::TCFIndicators& tcfIndicator =
+                ( *tcfIndicatorPckg )();
+
+                if( sizeof(RMmCustomAPI::TCFIndicators) > tcfIndicatorPckg->Size())
+                    {
+                    ReqCompleted( reqHandle, KErrArgument);
+                    }
+                else
+                    {
+                    // Save the new info
+                    tcfIndicator = tempNotifyCFIndicator;
+                    //Complete request 
+                    ReqCompleted( reqHandle, KErrNone );
+                    }
+                }
+            else
+                {
+                // Complete with error value
+                ReqCompleted( reqHandle, aErrorCode );
+                }
+
+            // reset the internal variable
+            //iNotifyCFIndicator = NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCallForwardingStatusChangeCancel
+// Cancels notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyIccCallForwardingStatusChangeCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    // reset pointer to client data
+    iNotifyCFIndicator = NULL;
+
+    // reset reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyIccCallForwardingStatusChange );
+
+    // complete with KErrCancel
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::IsCallForwardingStatusChanged
+// Decides if CTSY internal indicator buffer differs from received buffer
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmCustomTsy::IsIccCallForwardingStatusChanged(
+    RMmCustomAPI::TCFIndicators& aNotifyCFIndicator )
+    {
+    TBool changed( EFalse );
+
+    if( ( aNotifyCFIndicator.iIndicator !=
+        iCurrentTCFIndicator.iIndicator ) ||
+        ( aNotifyCFIndicator.iCFNumber.iTypeOfNumber !=
+        iCurrentTCFIndicator.iCFNumber.iTypeOfNumber ) ||
+        ( aNotifyCFIndicator.iCFNumber.iNumberPlan !=
+        iCurrentTCFIndicator.iCFNumber.iNumberPlan ) ||
+        KErrNotFound == ( aNotifyCFIndicator.iCFNumber.iTelNumber.Match(
+        iCurrentTCFIndicator.iCFNumber.iTelNumber ) ) )
+        {
+        changed = ETrue;
+        }
+
+    return changed;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCellInfoL
+// Gets GSM/WCDMA cell(s) info.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCellInfoL(
+    TDes8* aCellInfoPckg )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetCellInfo");
+
+    TInt ret = KErrServerBusy;
+
+    // Try to get request handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetCellInfo );
+
+    if ( ECustomTsyReqHandleUnknown == reqHandle )
+        {
+        ret = KErrArgument;
+        
+        if ( sizeof( RMmCustomAPI::TMmCellInfo ) <= 
+             aCellInfoPckg->MaxLength() )
+            {
+            iCellInfoPckg = REINTERPRET_CAST(
+                RMmCustomAPI::TMmCellInfoPckg*, aCellInfoPckg );
+
+            ret = Phone()->MessageManager()->HandleRequestL(
+                ECustomGetCellInfoIPC  );	
+        
+    	    if ( KErrNone == ret )
+    	        {
+    	        // Save request handle in DoExtFuncL()
+    	        iReqHandleType = ECustomTsyGetCellInfo;
+    	        }
+    	    }
+		}
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetCellInfoCancel
+// Cancels an outstanding GetCellInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetCellInfoCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetCellInfoCancel");
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCellInfo );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+    	// reset pointer to client data
+        iCellInfoPckg = NULL;
+
+        // complete with cancel
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetCellInfo
+// Completes an outstanding GetCellInfo request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetCellInfo(
+    RMmCustomAPI::TMmCellInfo* aCellInfo,
+    TInt aErrorValue )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetCellInfo - aErrorValue %d", aErrorValue);
+
+    // reset the req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetCellInfo );
+
+    // check the validity of the handler
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorValue )
+            {
+            RMmCustomAPI::TMmCellInfo& tempCellInfo = ( *iCellInfoPckg )();
+            tempCellInfo = *aCellInfo;
+            }
+        // reset the pointer to client space
+        iCellInfoPckg = NULL;
+
+        // complete operation
+        ReqCompleted ( reqHandle, aErrorValue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCellInfoChange
+// Notification cell(s) info changes
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyCellInfoChange(
+    TDes8* aCellInfoPckg )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyCellInfoChange");
+   
+    RMmCustomAPI::TMmCellInfo temp;
+	RMmCustomAPI::TMmCellInfoPckg tempPckg(temp);
+	
+	TInt paramLength = aCellInfoPckg->MaxLength();
+	TInt expectedLength = tempPckg.MaxLength();
+
+    TInt ret = KErrArgument;
+	if (paramLength == expectedLength)
+		{
+	    iRetNotifyCellInfoPckg = REINTERPRET_CAST( RMmCustomAPI::TMmCellInfoPckg*, aCellInfoPckg );
+	    // set the reqhandle type
+	    iReqHandleType = ECustomTsyNotifyCellInfoChange;
+	    
+	    ret = KErrNone;
+		}
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyCellInfoChange
+// Complete cell info change notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyCellInfoChange(
+    RMmCustomAPI::TMmCellInfo* aCellInfo,
+    TInt aErrorCode )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteNotifyCellInfoChange Error: %d", aErrorCode);
+
+    // Check if notification was requested
+	TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyCellInfoChange );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            RMmCustomAPI::TMmCellInfo& tempCellInfo = ( *iRetNotifyCellInfoPckg )();
+            tempCellInfo = *aCellInfo;
+            }
+        // reset the internal variable
+        iRetNotifyCellInfoPckg = NULL;
+
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyCellInfoChangeCancel
+// Cancel cell info change notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyCellInfoChangeCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyCellInfoChangeCancel");
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyCellInfoChange );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset the pointer to client data
+        iRetNotifyCellInfoPckg = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetPhonebookCacheStatus
+// Get Phonebook cache status
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+RMmCustomAPI::TPndCacheStatus CMmCustomTsy::GetPhonebookCacheStatus( 
+    TUint8 aPhoneBookType )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetPhonebookCacheStatus");
+    RMmCustomAPI::TPndCacheStatus ret( RMmCustomAPI::ECacheNotUsed );
+
+    switch ( aPhoneBookType )
+        {
+        case KADNPhoneBook:
+            ret = iAdnCacheStatus;
+            break;
+        case KFDNPhoneBook:
+            ret = iFdnCacheStatus;
+            break;
+        case KSDNPhoneBook:
+        case KVMBXPhoneBook:
+        case KMBDNPhoneBook:
+            ret = RMmCustomAPI::ECacheNotUsed;
+            break;
+        }
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::ReqCompleted
+// Completes a request back to the client.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::ReqCompleted( const TTsyReqHandle aTsyReqHandle,
+    const TInt aError )
+    {
+TFLOGSTRING3("TSY: CMmCustomTsy::ReqCompleted, aTsyReqHandle=%d, aError=%d", aTsyReqHandle, aError );
+
+	CTelObject::ReqCompleted ( aTsyReqHandle, aError );
+	}
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSystemNetworkBandL
+// This method gets the supported network band.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSystemNetworkBandL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TBandSelection* aSystemNetworkBand,
+    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkMode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetSystemNetworkBandL");
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetSystemNetworkBand );
+
+    if ( ECustomTsyReqHandleUnknown < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to the packaged life timer info
+        iAvailableSystemNetworkBand = aSystemNetworkBand;
+        iSystemNetworkModeCaps = aSystemNetworkMode;
+        // call DOS
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomGetBandSelectionIPC );
+
+        // Check response of the extension
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsyGetSystemNetworkBand;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetSystemNetworkBand
+// Completes a GetSystemNetworkBand.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetSystemNetworkBand(
+    RMmCustomAPI::TBandSelection aSystemNetworkBand,
+    RMmCustomAPI::TNetworkModeCaps aSystemNetworkMode,
+    TInt aResult )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::CompleteGetSystemNetworkBand. Result: %d", aResult);
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSystemNetworkBand );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        
+        if ( KErrNone == aResult )
+            {
+            // set the information for the client
+            *iAvailableSystemNetworkBand = aSystemNetworkBand;
+            if ( *iSystemNetworkModeCaps != aSystemNetworkMode )
+                {
+                *iSystemNetworkModeCaps = aSystemNetworkMode;
+                }
+            }
+        
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetSystemNetworkBandCancel
+// Cancels a GetSystemNetworkBand.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetSystemNetworkBandCancel(
+    const TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetSystemNetworkBandCancel");
+    // reset the pointer to client data
+    iAvailableSystemNetworkBand = NULL;
+    iSystemNetworkModeCaps = NULL;
+
+    // reset the reqhandle
+    iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetSystemNetworkBand );
+
+    // complete
+    ReqCompleted( aTsyReqHandle, KErrCancel );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetSystemNetworkBandL
+// This method sets the system network band.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::SetSystemNetworkBandL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TBandSelection* aSystemNetworkBand,
+    RMmCustomAPI::TNetworkModeCaps* aSystemNetworkModeCaps )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::SetSystemNetworkBandL");
+    TTsyReqHandle reqhandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsySetSystemNetworkBand );
+
+    if ( ECustomTsyReqHandleUnknown < reqhandle )
+        {
+        // The request is already in processing because of previous request
+        // Complete request with status value informing the client about
+        // the situation.
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // call DOS
+        // The networkband to be set
+        RMmCustomAPI::TBandSelection networkBand =
+            *aSystemNetworkBand;
+        // Used network mode
+        RMmCustomAPI::TNetworkModeCaps networkMode =
+            *aSystemNetworkModeCaps;
+        CMmDataPackage dataPackage;
+        // Pack network mode and band
+        dataPackage.PackData( &networkBand, &networkMode );
+        TInt ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomSetBandSelectionIPC, &dataPackage );
+
+        // Check response of the extension
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Save the req handle type
+            iReqHandleType = ECustomTsySetSystemNetworkBand;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteSetSystemNetworkBand
+// Completes a SetSystemNetworkBand.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteSetSystemNetworkBand(
+    TInt aResult )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteSetSystemNetworkBand");
+    // reset req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsySetSystemNetworkBand );
+
+    // check if handle exists
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // complete
+        ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::SetIccCfBootUpFlag
+// Set new value for ICC CF bootup.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::SetIccCfBootUpFlag( TBool aBootUp )
+    {
+TFLOGSTRING2("TSY: CMmCustomTsy::SetIccCfBootUpFlag, aBootUp=%d", aBootUp );
+
+    iGetIccCfStatusBootUp = aBootUp;
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetUSIMServiceSupportL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetUSIMServiceSupportL(
+    const TTsyReqHandle aTsyReqHandle,
+    RMmCustomAPI::TAppSupport* aAppSupport )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetUSIMServiceSupportL");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        ECustomTsyGetUSIMServiceSupport );
+
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+        // save pointer to client data
+        iAppSupport = aAppSupport;
+
+	    CMmDataPackage appSupportPackage;
+	    appSupportPackage.PackData( iAppSupport );
+
+        // call DOS (no packed parameters)
+        TInt ret = KErrNone;
+        ret = Phone()->MessageManager()->HandleRequestL(
+            ECustomGetServiceTableSupportbyApplicationIPC, &appSupportPackage);
+
+        // check the result of the call
+        if ( KErrNone != ret )
+            {
+            ReqCompleted( aTsyReqHandle, ret );
+            }
+        else
+            {
+            // Store the request handle
+            iReqHandleType = ECustomTsyGetUSIMServiceSupport;
+            }
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteGetUSIMServiceSupport
+// Completes a GetUSIMServiceSupport request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteGetUSIMServiceSupport(
+    CMmDataPackage* aDataPackage,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteGetUSIMServiceSupport");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetUSIMServiceSupport );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        if ( KErrNone == aErrorCode )
+            {
+            RMmCustomAPI::TAppSupport *appSupport;
+            aDataPackage->UnPackData( &appSupport );
+
+            // set the information for the client
+            *iAppSupport = *appSupport;
+
+            // reset the internal variable
+			iAppSupport = NULL;
+			
+            //Complete request to success
+            ReqCompleted( reqHandle, KErrNone );
+            }
+        else
+            {
+            // Complete with error
+            ReqCompleted( reqHandle, aErrorCode );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::GetUSIMServiceSupportCancel
+// Cancels a GetUSIMServiceSupport request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::GetUSIMServiceSupportCancel()
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::GetUSIMServiceSupportCancel");
+
+    // reset the reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyGetUSIMServiceSupport );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset the pointer to client data
+		iAppSupport = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyRemoteAlertingToneStatusChange
+// Sets Remote Alerting Tone Status Change notification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyRemoteAlertingToneStatusChange(
+    RMmCustomAPI::TRemoteAlertingToneStatus* aToneStatus )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::NotifyRemoteAlertingToneStatusChange");
+
+    // save pointer to client data
+    iToneStatus = aToneStatus;
+
+    // save handle type
+    iReqHandleType = ECustomTsyNotifyRemoteAlertingToneStatusChange;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange
+// Completes a NotifyRemoteToneAlertingStatusChange request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange(
+    RMmCustomAPI::TRemoteAlertingToneStatus aToneStatus,
+    TInt aErrorCode )
+    {
+TFLOGSTRING("TSY: CMmCustomTsy::CompleteNotifyRemoteAlertingToneStatusChange");
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        ECustomTsyNotifyRemoteAlertingToneStatusChange );
+
+    // check if request was called
+    if ( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // check if response was ok
+        if ( KErrNone == aErrorCode )
+            {
+            // set the information for the client
+            *iToneStatus = aToneStatus;
+            }
+
+        // reset the internal variable
+        iToneStatus = NULL;
+        // complete
+        ReqCompleted( reqHandle, aErrorCode );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmCustomTsy::NotifyRemoteAlertingToneStatusChangeCancel
+// This method cancels an outstanding notification of 
+// RemoteAlertingToneStatusChange.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmCustomTsy::NotifyRemoteAlertingToneStatusChangeCancel()
+    {
+    // reset reqhandle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
+        ECustomTsyNotifyRemoteAlertingToneStatusChange );
+
+    if( ECustomTsyReqHandleUnknown != reqHandle )
+        {
+        // reset pointer to client data
+        iToneStatus = NULL;
+
+        ReqCompleted( reqHandle, KErrCancel );
+        }
+
+    return KErrNone;
+    }
+
+//  End of File