telephonyserver/etelmultimode/DTsy/mmtsyphone.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 16:12:37 +0300
changeset 20 244d7c5f118e
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
child 66 07a122eea281
permissions -rw-r--r--
Revision: 201015 Kit: 201015

// Copyright (c) 1997-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:
//

/**
 @file
*/


#include "mmtsy.h"
#include "testdef.h"
#include "ETELMM.H"
#include <et_clsvr.h>
#include "Dmmlog.h"
#include <etelmmerr.h>

//
//	CPhoneDMmTsy
//
CPhoneDMmTsy* CPhoneDMmTsy::NewL(CPhoneFactoryDummyBase* aFac)
	{
	CPhoneDMmTsy* phone=new(ELeave) CPhoneDMmTsy(aFac);
	CleanupStack::PushL(phone);
	phone->ConstructL();
	CleanupStack::Pop();
	return phone;
	}

CPhoneDMmTsy::CPhoneDMmTsy(CPhoneFactoryDummyBase* aFac)
: CPhoneDummyBase(aFac),
  iActiveRequestObjects(_FOFF(CPhoneDMmTsy::CActiveListNode,iNext))
	{}

void CPhoneDMmTsy::ConstructL()
	{
	iPhoneTestCount=1;
	CPhoneDummyBase::ConstructL();
	iGetDetectedNetworks = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetCFStatus = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetCB = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetCWStatus = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetCcbsRequests = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetPreferredNetworks = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetAuthorizationData = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iGetWlanSIDsData = new CArrayPtrFlat<CListReadAllAttempt>(1);
	iAuthReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);

	iAuthInfo=RMobilePhone::CImsAuthorizationInfoV5::NewL();
	LOGTEXT(_L8("CPhoneDMmTsy created"));
	}

CPhoneDMmTsy::~CPhoneDMmTsy()
	{
	if (iGetDetectedNetworks)
		iGetDetectedNetworks->ResetAndDestroy();
	if (iGetCFStatus)
		iGetCFStatus->ResetAndDestroy();
	if (iGetCB)
		iGetCB->ResetAndDestroy();
	if (iGetCWStatus)
		iGetCWStatus->ResetAndDestroy();
	if (iGetCcbsRequests)
		iGetCcbsRequests->ResetAndDestroy();
	if(iGetPreferredNetworks)
		iGetPreferredNetworks->ResetAndDestroy();
	
	if(iGetAuthorizationData)
		iGetAuthorizationData->ResetAndDestroy();
	
	if(iGetWlanSIDsData)
		iGetWlanSIDsData->ResetAndDestroy();
	
  	if(iAuthReadAll)
		iAuthReadAll->ResetAndDestroy();
  
	delete iGetDetectedNetworks;
	delete iGetCFStatus;
	delete iGetCB;
	delete iGetCWStatus;
	delete iGetCcbsRequests;
	delete iGetPreferredNetworks;
	delete iGetAuthorizationData;
	delete iAuthInfo;
	delete iGetWlanSIDsData;
	delete iAuthReadAll;
	
	LOGTEXT(_L8("CPhoneDMmTsy destroyed"));
	}

void CPhoneDMmTsy::Init()
	{
	// server calls this function once it has created the sub-session
	// it gives the TSY chance to do any initialisation it may need to do for
	// this sub-session
	}

CTelObject* CPhoneDMmTsy::OpenNewObjectByNameL(const TDesC& aName)
	{
	// Server calls this function when a client is opening an object from the phone
	// for the first time.
	// Multiple clients opening handles to the same sub-session object will be dealt with
	// by the server - i.e. by reference counting

	if((aName.Compare(DMMTSY_LINE_VOICE_NAME)==KErrNone) ||
	   (aName.Compare(DMMTSY_LINE_VOICE2_NAME)==KErrNone) ||
	   (aName.Compare(DMMTSY_LINE_DATA_NAME)==KErrNone) ||
	   (aName.Compare(DMMTSY_LINE_FAX_NAME)==KErrNone))

	   return REINTERPRET_CAST(CTelObject*,CLineDMmTsy::NewL(this,FacPtr()));

	if (aName.Compare(KETelSmsMessaging)==KErrNone)
	   return REINTERPRET_CAST(CTelObject*,CSmsMessagingDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelBroadcastMessaging)==KErrNone)
	   return REINTERPRET_CAST(CTelObject*,CBroadcastMessagingDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelUssdMessaging)==KErrNone)
	   return REINTERPRET_CAST(CTelObject*,CUssdMessagingDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelNamStore)==KErrNone)
		return REINTERPRET_CAST(CTelObject*, CNamStoreDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelOwnNumberStore)==KErrNone)
		return REINTERPRET_CAST(CTelObject*, CONStoreDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelEmergencyNumberStore)==KErrNone)
		return REINTERPRET_CAST(CTelObject*, CENStoreDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelIccVoiceMailBox)==KErrNone)
		return REINTERPRET_CAST(CTelObject*, CMobilePhoneBookStoreDMmTsy::NewL(this,FacPtr(),aName));

	if (aName.Compare(KETelConferenceCall) == 0)
		return REINTERPRET_CAST(CTelObject*, CMobileConferenceCallDMmTsy::NewL(this,FacPtr(),aName));
    
    if (aName.Compare(KETelLocationServices) == 0)
		return REINTERPRET_CAST(CTelObject*, CMobileLocationServicesDMmTsy::NewL(this,FacPtr(),aName));
	
	if (aName.Left(SCEAP_SSN_LENGTH).Compare(KETelSmartCardEapSession) == 0)
		{
		TInt len;

		// Extracting AID
		RMobilePhone::TAID tempAID;
		len = CharToSeptNumL(aName[SCEAP_SSN_LENGTH]) * 2;
		TPtrC ptrAid = aName.Mid(SCEAP_SSN_LENGTH + 1, len);
		ConvertTextToBinary(ptrAid, tempAID);

		// Extracting EapType
		RMobileSmartCardEap::TEapType eapType;
		TInt posTypeLength = SCEAP_SSN_LENGTH + len + 1;
		len = CharToSeptNumL(aName[posTypeLength]);
		TPtrC ptrEapT = aName.Mid(posTypeLength + 1, len);
		eapType.Copy(ptrEapT);

		CSmartCardEapDMmTsy* eapSubSessObj = NULL;
		TRAPD(err, eapSubSessObj = CSmartCardEapDMmTsy::NewL(this, tempAID, eapType, FacPtr()));

		if (err != KErrNone || eapSubSessObj == NULL)
			{
			User::Leave((err == KErrNone ? KErrGeneral : err));
			}

		return eapSubSessObj;
		} // End of opening Smart Card EAP sub-session

	TInt tLength;
	TPtrC remain(aName);

	if ((tLength=remain.Find(PHBOOK_DELIMITER))!=KErrNotFound)
		{
		if(aName.Left(tLength) == KETelIccVoiceMailBox
			&&	aName.Right(aName.Length()-tLength-2) == KEtelUSimPhoneBookType) 
			return REINTERPRET_CAST(CTelObject*, 
					CMobilePhoneBookStoreDMmTsy::NewL(this,FacPtr(),aName.Left(tLength),
												  aName.Right(aName.Length()-tLength-2)));
		}

	return NULL;
	}

/**
Returns the numerical value that corresponds to the numeric character
of its parameter (in base 17).

@param aDigit A char between '0' to '9' or between 'A' to 'G'
*/
TInt CPhoneDMmTsy::CharToSeptNumL(const TChar& aChar) const
	{
	TInt ret = 0;

	if((aChar >= '0') && (aChar <= '9'))
		{
		ret = TUint(aChar) - '0';
		}
	else if((aChar >= 'A') && (aChar <= 'G'))
		{
		ret = TUint(aChar) - 'A' + 10;
		}
	else
		{
		User::Leave(KErrArgument);
		}

	return ret;
	}

/**
Converts a buffer containing string of the hexadecimal characters,
representing the binary data, into this binary data!

@param aSrc The buffer containing text representation.
@param aDst Binary data will be written to this buffer.
*/
void CPhoneDMmTsy::ConvertTextToBinary(const TDesC& aSrc, TDes8& aDst)
	{
	aDst.SetLength(aSrc.Length() / 2);

	for (TInt i = 0; i < aSrc.Length(); i += 2)
		{
		TInt val = 0;
		if ((aSrc[i] >= '0') && (aSrc[i] <= '9'))
			{
			val = ((aSrc[i] - '0') << 4);
			}
		else if ((aSrc[i] >= 'A') && (aSrc[i] <= 'F'))
			{
			val = ((aSrc[i] - 'A' + 10) << 4);
			}

		if ((aSrc[i+1] >= '0') && (aSrc[i+1] <= '9'))
			{
			val += (aSrc[i+1] - '0');
			}
		else if ((aSrc[i+1] >= 'A') && (aSrc[i+1] <= 'F'))
			{
			val += (aSrc[i+1] - 'A' + 10);
			}

		aDst[i/2] = (TUint8) val;
		}
	}

CTelObject* CPhoneDMmTsy::OpenNewObjectL(TDes& /*aNewName*/)
	{
	// all objects opened from the phone are opened by name, hence this method
	// is not supported
	User::Leave(KErrNotSupported);
	return NULL;
	}


CTelObject::TReqMode CPhoneDMmTsy::ReqModeL(const TInt aIpc)
	{
	// ReqModeL is called from the server's CTelObject::ReqAnalyserL
	// in order to check the type of request it has.

	// The following are example request types for this dummy TSY
	// All TSYs do not have to have these request types but they have been given
	// "sensible" values in this test code

	CTelObject::TReqMode ret=0;
	switch (aIpc)
		{
	// Asynchronous Notification Requests
	case EMobilePhoneNotifyDTMFCapsChange:
	case EMobilePhoneNotifyStopInDTMFString:
	case EMobilePhoneNotifyModeChange:
	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
	case EMobilePhoneNotifyCurrentNetworkChange:
	case EMobilePhoneNotifyCellInfoChange:
	case EMobilePhoneNotifyIccAccessCapsChange:
	case EMobilePhoneNotifyBatteryInfoChange:
	case EMobilePhoneNotifySignalStrengthChange:
	case EMobilePhoneNotifyIndicatorChange:
	case EMobilePhoneNotifyCallServiceCapsChange:
	case EMobilePhoneNotifyCallForwardingStatusChange:
	case EMobilePhoneNotifyCallForwardingActive:
	case EMobilePhoneNotifyNetworkSelectionSettingChange:
	case EMobilePhoneNotifyNITZInfoChange:
	case EMobilePhoneNotifyCallBarringStatusChange:
	case EMobilePhoneNotifyCallWaitingStatusChange:
	case EMobilePhoneNotifyCCBSStatusChange:
	case EMobilePhoneNotifyCCBSRecall:
	case EMobilePhoneNotifyAlternatingCallCapsChange:
	case EMobilePhoneNotifyAlternatingCallModeChange:
	case EMobilePhoneNotifyALSLineChange:
	case EMobilePhoneNotifyCostCapsChange:
	case EMobilePhoneNotifyCostInfoChange:
	case EMobilePhoneNotifySecurityCapsChange:
	case EMobilePhoneNotifyLockInfoChange:
	case EMobilePhoneNotifySecurityCodeInfoChange:
	case EMobilePhoneNotifySecurityEvent:
	case EMobilePhoneNotifyMessageWaiting:
	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
	case EMobilePhoneNotifyFdnStatusChange:
	case EMobilePhoneNotifyMulticallParamsChange:
	case EMobilePhoneNotifyIncomingCallTypeChange:
	case EMobilePhoneNotifyUUSSettingChange:
	case EMobilePhoneNotifyDefaultPrivacyChange:
	case EMobilePhoneNotifyMultimediaCallPreferenceChange:
	case EMobilePhoneNotifyNetworkSecurityLevelChange:
	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
	case EMobilePhoneNotifyUSimApplicationsInfoChange:
	case EMobilePhoneNotifyMailboxNumbersChange:
	case EMobilePhoneNotifyMmsUpdate:
	case EMobilePhoneNotifyMmsConfig:
	case EMobilePhoneNotifyNetworkInvScanChange:
	case EMobilePhoneNotifyNetworkInvScanEvent:
	case EMobilePhoneNotifyAirTimeDurationChange:
	case EMobilePhoneNotifySendNetworkServiceRequest:
	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
	case EMobilePhoneNotifyDTMFEvent:
	case EMobilePhoneNotifyStorePreferredNetworksListChange:
	case EMobilePhoneNotifyCipheringIndicatorStatus:
	case EMobilePhoneNotifyIdentityServiceStatus:
	case EMobilePhoneNotifyIdentitySuppressionRejected:
	case EMobilePhoneNotifyMulticallIndicatorChange:
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
	case EMobilePhoneNotifyAPNListChanged:
	case EMobilePhoneNotifyAuthenticateDataChange:
	case EMobilePhoneNotifyWlanDataChange:
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
	

	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
	ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
		break;
	
	// Non flow-controlled requests
	case EMobilePhoneGetDTMFCaps:
	case EMobilePhoneStopDTMFTone:
	case EMobilePhoneGetNetworkCaps:
	case EMobilePhoneGetCurrentMode:
	case EMobilePhoneGetNetworkRegistrationStatus:
	case EMobilePhoneGetHomeNetwork:
	case EMobilePhoneGetCurrentNetwork:
	case EMobilePhoneGetCellInfo:
	case EMobilePhoneGetDetectedNetworksPhase1:
	case EMobilePhoneGetDetectedNetworksPhase2:
	case EMobilePhoneGetDetectedNetworksV2Phase1:
	case EMobilePhoneGetDetectedNetworksV2Phase2:
	case EMobilePhoneGetDetectedNetworksV5Phase1:
	case EMobilePhoneGetDetectedNetworksV5Phase2:
	case EMobilePhoneGetDetectedNetworksV8Phase1:
	case EMobilePhoneGetDetectedNetworksV8Phase2:
	case EMobilePhoneGetMultimodeCaps:
	case EMobilePhoneGetPhoneStoreInfo:
	case EMobilePhoneGetIccAccessCaps:
	case EMobilePhoneGetIccIdentity:
	case EMobilePhoneGetCustomerServiceProfile:
	case EMobilePhoneGetServiceTable:
	case EMobilePhoneGetBatteryCaps:
	case EMobilePhoneGetBatteryInfo:
	case EMobilePhoneGetSignalCaps:
	case EMobilePhoneGetSignalStrength:
	case EMobilePhoneGetIndicatorCaps:
	case EMobilePhoneGetIndicator:
	case EMobilePhoneGetIdentityCaps:
	case EMobilePhoneGetPhoneId:
	case EMobilePhoneGetSubscriberId:
	case EMobilePhoneGetCallServiceCaps:
	case EMobilePhoneGetCallForwardingStatusPhase1:
	case EMobilePhoneGetCallForwardingStatusPhase2:
	case EMobilePhoneGetFeatureCode:
	case EMobilePhoneGetNetworkSelectionSetting:
	case EMobilePhoneSetNetworkSelectionSetting:
	case EMobilePhoneSelectNetwork:
	case EMobilePhoneGetNITZInfo:
	case EMobilePhoneGetServiceProviderName:
	case EMobilePhoneGetIdentityServiceStatus:
	case EMobilePhoneGetBarringStatusPhase1:
	case EMobilePhoneGetBarringStatusPhase2:
	case EMobilePhoneSetCallBarringStatus:
	case EMobilePhoneSetCallBarringPassword:
	case EMobilePhoneGetWaitingStatusPhase1:
	case EMobilePhoneGetWaitingStatusPhase2:
	case EMobilePhoneSetCallWaitingStatus:
	case EMobilePhoneGetCCBSStatus:
	case EMobilePhoneDeactivateCCBS:
	case EMobilePhoneAcceptCCBSRecall:
	case EMobilePhoneRefuseCCBSRecall:
	case EMobilePhoneGetCompletionRequestsPhase1:
	case EMobilePhoneGetCompletionRequestsPhase2:
	case EMobilePhoneGetAlternatingCallCaps:
	case EMobilePhoneGetAlternatingCallMode:
	case EMobilePhoneSetAlternatingCallMode:
	case EMobilePhoneGetALSLine:
	case EMobilePhoneSetALSLine:
	case EMobilePhoneGetCostCaps:
	case EMobilePhoneClearCostMeter:
	case EMobilePhoneSetMaxCostMeter:
	case EMobilePhoneSetPuct:
	case EMobilePhoneGetCostInfo:
	case EMobilePhoneGetSecurityCaps:
	case EMobilePhoneGetLockInfo:
	case EMobilePhoneSetLockSetting:
	case EMobilePhoneGetSecurityCodeInfo:
	case EMobilePhoneChangeSecurityCode:
	case EMobilePhoneVerifySecurityCode:
	case EMobilePhoneAbortSecurityCode:
	case EMobilePhoneGetFdnStatus:
	case EMobilePhoneSetFdnSetting:
	case EMobilePhoneGetMulticallParams:
	case EMobilePhoneSetMulticallParams:
	case EMobilePhoneGetIncomingCallType:
	case EMobilePhoneSetIncomingCallType:
	case EMobilePhoneGetUUSSetting:
	case EMobilePhoneSetUUSSetting:
	case EMobilePhoneGetDefaultPrivacy:
	case EMobilePhoneSetDefaultPrivacy:
	case EMobilePhoneGetIccMessageWaitingIndicators:
	case EMobilePhoneSetIccMessageWaitingIndicators:
	case EMobilePhoneGetMultimediaCallPreference:
	case EMobilePhoneSetMultimediaCallPreference:
	case EMobilePhoneGetNetworkSecurityLevel:
	case EMobilePhoneEnumerateUSimApplications:
	case EMobilePhoneGetUSimAppsSelectionMode:
	case EMobilePhoneSetUSimAppsSelectionMode:
	case EMobilePhoneSetUSimApplicationStatus:
	case EMobilePhoneGetUSimApplicationsInfo:
	case EMobilePhoneSetSSPassword:
	case EMobilePhoneGetMailboxNumbers:
	case EMobilePhoneSetMmsUserConnParams:	
	case EMobilePhoneSetMmsUserPreferences:
	case EMobilePhoneGetMmsConfig:
	case EMobilePhoneGetHomeNetworkSearchPeriod:
	case EMobilePhoneGetLastUsedAccessTechnology:
	case EMobilePhoneGetNetworkInvScanSetting:
	case EMobilePhoneGetCallForwardingIndicator:
	case EMobilePhoneGetCompMethodName:
	case EMobilePhoneEnumerateAPNEntries:
	case EMobilePhoneGetAPNname:
	case EMobilePhoneAppendAPNName:
	case EMobilePhoneDeleteAPNName:
	case EMobilePhoneSetAPNControlListServiceStatus:
	case EMobilePhoneGetAPNControlListServiceStatus:
	case EMobilePhoneGetAirTimeDuration:
	case EMobilePhoneClearBlacklist:
	case EMobilePhoneGetPersonalisationCaps:
	case EMobilePhoneGetPersonalisationStatus:
	case EMobilePhoneSetPersonalisationStatus:
	case EMobilePhoneGetNetworkName:
	case EMobilePhoneGetPreferredNetworksPhase1:
	case EMobilePhoneGetPreferredNetworksPhase2:
	case EMobilePhoneStorePreferredNetworksList:
	case EMobilePhoneGetCipheringIndicatorStatus:
	case EMobilePhoneSetIdentityServiceStatus:
	case EMobilePhoneEnumerateSmartCardApplications:
	case EMobilePhoneGetSmartCardApplicationInfo:
	case EMobilePhoneSetSmartCardApplicationStatus:
	case EMobilePhoneGetScFileInfo:
	case EMobilePhoneReadScFile:
	case EMobilePhoneUpdateScFile:
	case EMobilePhoneGetCurrentActiveUSimApplication:
	case EMobilePhoneGetCurrentNetworkNoLocation:		
	case EMobilePhoneAuthorizationInfoPhase1:
	case EMobilePhoneAuthorizationInfoPhase2:
	case EMobilePhoneIMSAuthenticate:
	case EMobilePhoneSmartCardAuthenticate:
	case EETelPhoneSetEmergencyClient:
	case EMobilePhoneGetAuthenticationParams:
	case EMobilePhoneSetGbaBootstrapParams:
	case EMobilePhoneAuthenticationListPhase1:
	case EMobilePhoneAuthenticationListPhase2:
	case EMobilePhoneGetWlanData:
	case EMobilePhoneSetWlanData:
	case EMobilePhoneGetPreferredWlanSIDsPhase1:
	case EMobilePhoneGetPreferredWlanSIDsPhase2:
	case EMobilePhoneStorePreferredWlanSIDList:
		break;

	// Flow controlled requests
	case EMobilePhoneSendNetworkServiceRequest:
	case EMobilePhoneSendDTMFTones:
	case EMobilePhoneReadDTMFTones:
	case EMobilePhoneStartDTMFTone:
	case EMobilePhoneContinueDTMFStringSending:
	case EMobilePhoneSetCallForwardingStatus:
	case EMobilePhoneProgramFeatureCode:
	case EMobilePhoneTerminateAllCalls:
	case EMobilePhoneTerminateActiveCalls:
		ret=KReqModeFlowControlObeyed;
		break;
	default:
		ret=CPhoneBase::ReqModeL(aIpc);
		break;
		}
	return ret;
	}

TInt CPhoneDMmTsy::RegisterNotification(const TInt aIpc)
	{
	// RegisterNotification is called when the server recognises that this notification
	// is being posted for the first time on this sub-session object.

	// It enables the TSY to "turn on" any regular notification messages that it may 
	// receive from the phone

	switch (aIpc)
		{
	case EMobilePhoneNotifyDTMFCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - DTMF Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyStopInDTMFString:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - DTMF Stop In DTMF String "));
		return KErrNone;
	case EMobilePhoneNotifyModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Mode Change "));
		return KErrNone;
	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Registration Status Change "));
		return KErrNone;
	case EMobilePhoneNotifyCurrentNetworkChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Current network Change "));
		return KErrNone;
	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Current network ISV Change No Location"));
		return KErrNone;
	case EMobilePhoneNotifyCellInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Cell information Change "));
		return KErrNone;		
	case EMobilePhoneNotifyIccAccessCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - SIM Access Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyBatteryInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Battery Info Change "));
		return KErrNone;
	case EMobilePhoneNotifySignalStrengthChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Signal Strength Change "));
		return KErrNone;
	case EMobilePhoneNotifyIndicatorChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Indicator Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallServiceCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Call Service Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallForwardingStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Call Forwarding Status Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallForwardingActive:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Call Forwarding Active"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkSelectionSettingChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Network Selection Setting Change "));
		return KErrNone;
	case EMobilePhoneNotifyNITZInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Network Time Info Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallBarringStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Call Barring Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCallWaitingStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Call Waiting Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCCBSStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify CCBS Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCCBSRecall:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify CCBS Recall"));
		return KErrNone;
	case EMobilePhoneNotifyAlternatingCallCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Alternating Call Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyAlternatingCallModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Alternating Mode Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyALSLineChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify ALSLine Change"));
		return KErrNone;
	case EMobilePhoneNotifyCostCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Cost Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyCostInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Cost Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Security Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyLockInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Lock Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityCodeInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Security Code Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify On Security Event"));
		return KErrNone;
	case EMobilePhoneNotifyMessageWaiting:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Message Waiting"));
		return KErrNone;
	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Icc Message Waiting Indicators Change"));
		return KErrNone;
	case EMobilePhoneNotifyFdnStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Fdn Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyMulticallParamsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Multicall Params Change"));
		return KErrNone;
	case EMobilePhoneNotifyIncomingCallTypeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Incoming Call Type Change"));
		return KErrNone;
	case EMobilePhoneNotifyUUSSettingChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify UUS Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyDefaultPrivacyChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Privacy Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyMultimediaCallPreferenceChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Multimedia Call Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkSecurityLevelChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Network Security Level Change"));
		return KErrNone;	
	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify USim Applications Selection Mode Change"));
		return KErrNone;
	case EMobilePhoneNotifyUSimApplicationsInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify USim Applications Info Change"));
		return KErrNone;
	case EMobilePhoneNotifyMailboxNumbersChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Mobile Mailbox Numbers functionality"));
		return KErrNone;
	case EMobilePhoneNotifyMmsUpdate:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Mobile MMS Update functionality"));
		return KErrNone;
	case EMobilePhoneNotifyMmsConfig:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Mobile MMS  Config functionality"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkInvScanChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Network Investigation Scan Change functionality"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkInvScanEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Network Investigation Scan Event functionality"));
		return KErrNone;
	case EMobilePhoneNotifyAirTimeDurationChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Air Time Duration Change"));
		return KErrNone;
	case EMobilePhoneNotifySendNetworkServiceRequest:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Send Network Service Request"));
		return KErrNone;
	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify All Send Network Service Request"));
		return KErrNone;
	case EMobilePhoneNotifyDTMFEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify DTMF Event"));
		return KErrNone;
	case EMobilePhoneNotifyStorePreferredNetworksListChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Stored Networks List Change"));
		return KErrNone;
	case EMobilePhoneNotifyCipheringIndicatorStatus:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Ciphering Indicator Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyIdentityServiceStatus:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Identity Service Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyIdentitySuppressionRejected:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Identity Suppression Rejected"));
		return KErrNone;
	case EMobilePhoneNotifyMulticallIndicatorChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Multicall Indicator Change"));
		return KErrNone;
	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Ims Authorization Info Changed"));
		return KErrNone;
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Smart Card Application Info Change"));
		return KErrNone;
	case EMobilePhoneNotifyAPNListChanged:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify APN Control List Change"));
		return KErrNone;
	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify APN Control List Service Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyAuthenticateDataChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Authentication Data Change"));
		return KErrNone;
	case EMobilePhoneNotifyWlanDataChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Wlan Data Change"));
		return KErrNone;
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
		LOGTEXT(_L8("CPhoneDMmTsy: RegisterNotification - Notify Wlan SIDs List Change"));
		return KErrNone;		
		
	default:
		// Unknown or invalid SMS IPC
		return KErrNotSupported;
		}
	}

TInt CPhoneDMmTsy::DeregisterNotification(const TInt aIpc)
	{
	// DeregisterNotification is 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 the phone.

	switch (aIpc)
		{
	case EMobilePhoneNotifyDTMFCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - DTMF Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyStopInDTMFString:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - DTMF Stop In DTMF String "));
		return KErrNone;
	case EMobilePhoneNotifyModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Mode Change "));
		return KErrNone;
	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Registration Status Change "));
		return KErrNone;
	case EMobilePhoneNotifyCurrentNetworkChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Current network Change "));
		return KErrNone;
	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Current network Change No Location"));
		return KErrNone;
	case EMobilePhoneNotifyCellInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Cell information Change "));
		return KErrNone;		
	case EMobilePhoneNotifyIccAccessCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - SIM Access Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyBatteryInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Battery Info Change "));
		return KErrNone;
	case EMobilePhoneNotifySignalStrengthChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Signal Strength Change "));
		return KErrNone;
	case EMobilePhoneNotifyIndicatorChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Indicator Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallServiceCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Call Service Caps Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallForwardingStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Call Forwarding Status Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallForwardingActive:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Call Forwarding Active"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkSelectionSettingChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Network Selection Setting Change "));
		return KErrNone;
	case EMobilePhoneNotifyNITZInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Network Time Info Change "));
		return KErrNone;
	case EMobilePhoneNotifyCallBarringStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Call Barring Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCallWaitingStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Call Waiting Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCCBSStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify CCBS Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyCCBSRecall:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify CCBS Recall"));
		return KErrNone;
	case EMobilePhoneNotifyAlternatingCallCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Alternating Call Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyAlternatingCallModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Alternating Mode Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyALSLineChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify ALSLine Change"));
		return KErrNone;
	case EMobilePhoneNotifyCostCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Cost Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyCostInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Cost Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityCapsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Security Caps Change"));
		return KErrNone;
	case EMobilePhoneNotifyLockInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Lock Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityCodeInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Security Code Info Change"));
		return KErrNone;
	case EMobilePhoneNotifySecurityEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify On Security Event"));
		return KErrNone;	
	case EMobilePhoneNotifyMessageWaiting:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Message Waiting"));
		return KErrNone;
	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Icc Message Waiting Indicators Change"));
		return KErrNone;
	case EMobilePhoneNotifyFdnStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Fdn Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyMulticallParamsChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Multicall Params Change"));
		return KErrNone;
	case EMobilePhoneNotifyIncomingCallTypeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Incoming Call Type Change"));
		return KErrNone;
	case EMobilePhoneNotifyUUSSettingChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify UUS Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyDefaultPrivacyChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Privacy Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyMultimediaCallPreferenceChange:	
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Multimedia Call Setting Change"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkSecurityLevelChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Network Security Level Change"));
		return KErrNone;	
	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify USim Applications Selection Mode Change"));
		return KErrNone;
	case EMobilePhoneNotifyUSimApplicationsInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify USim Applications Info Change"));
		return KErrNone;
	case EMobilePhoneNotifyMailboxNumbersChange:			
		LOGTEXT(_L8("CPhoneDMmTsy:  DeregisterNotification - Notify Mobile Mailbox Numbers functionality"));
		return KErrNone;
	case EMobilePhoneNotifyMmsUpdate:
		LOGTEXT(_L8("CPhoneDMmTsy:  DeregisterNotification - Notify Mobile MMS Update functionality"));
		return KErrNone;
	case EMobilePhoneNotifyMmsConfig:
		LOGTEXT(_L8("CPhoneDMmTsy:  DeregisterNotification - Notify Mobile MMS Config functionality"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkInvScanChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Network Investigation Scan Change functionality"));
		return KErrNone;
	case EMobilePhoneNotifyNetworkInvScanEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Network Investigation Scan Event functionality"));
		return KErrNone;
	case EMobilePhoneNotifyAirTimeDurationChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Air Time Duration Change"));
		return KErrNone;
	case EMobilePhoneNotifySendNetworkServiceRequest:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Send Network Service Request"));
		return KErrNone;
	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify All Send Network Service Request"));
		return KErrNone;
	case EMobilePhoneNotifyDTMFEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify DTMF Event"));
		return KErrNone;	
	case EMobilePhoneNotifyStorePreferredNetworksListChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Stored Networks List Change"));
		return KErrNone;
	case EMobilePhoneNotifyCipheringIndicatorStatus:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Ciphering IndicatorStatus Change"));
		return KErrNone;
	case EMobilePhoneNotifyIdentityServiceStatus:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Identity Service Status Change"));
		return KErrNone;	
	case EMobilePhoneNotifyIdentitySuppressionRejected:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Identity Suppression Rejected"));
		return KErrNone;	
	case EMobilePhoneNotifyMulticallIndicatorChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify MulticallIndicator Change"));
		return KErrNone;
	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
		LOGTEXT(_L8("CPhoneDMmTsy:DeregisterNotification - Notify Ims Authorization Info Changed"));
		return KErrNone;
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Smart Card Application Info Change"));
		return KErrNone;
	case EMobilePhoneNotifyAPNListChanged:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify APN Control List Change"));
		return KErrNone;
	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify APN Control List Service Status Change"));
		return KErrNone;
	case EMobilePhoneNotifyAuthenticateDataChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Authentication Data Change"));
		return KErrNone;
	case EMobilePhoneNotifyWlanDataChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Wlan Data Change"));
		return KErrNone;
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
		LOGTEXT(_L8("CPhoneDMmTsy: DeregisterNotification - Notify Wlan SIDs list Change"));
		return KErrNone;		
	default:
		// Unknown or invalid sms IPC
		return KErrNotSupported;
		}
	}

TInt CPhoneDMmTsy::NumberOfSlotsL(const TInt aIpc)
	{
	// NumberOfSlotsL is called by the server when it is registering a new notification.
	// It enables the TSY to tell the server how many buffer slots to allocate for
	// "repost immediately" notifications that may trigger before clients collect them

	TInt numberOfSlots=1;
	switch (aIpc)
		{
	case EMobilePhoneNotifyBatteryInfoChange:
	case EMobilePhoneNotifySignalStrengthChange:
	case EMobilePhoneNotifyIndicatorChange:
		LOGTEXT(_L8("CPhoneDMmTsy: Registered with 10 slots"));
		numberOfSlots=10;
		break;

	case EMobilePhoneNotifyDTMFCapsChange:
	case EMobilePhoneNotifyStopInDTMFString:
	case EMobilePhoneNotifyCallServiceCapsChange:
	case EMobilePhoneNotifyCCBSRecall:
	case EMobilePhoneNotifyDTMFEvent:
		LOGTEXT(_L8("CPhoneDMmTsy: Registered with 5 slots"));
		numberOfSlots=5;
		break;
	
	case EMobilePhoneNotifyModeChange:
	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
	case EMobilePhoneNotifyCurrentNetworkChange:
	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
	case EMobilePhoneNotifyCellInfoChange:
	case EMobilePhoneNotifyIccAccessCapsChange:
	case EMobilePhoneNotifyCallForwardingStatusChange:
	case EMobilePhoneNotifyCallForwardingActive:
	case EMobilePhoneNotifyNetworkSelectionSettingChange:
	case EMobilePhoneNotifyNITZInfoChange:
	case EMobilePhoneNotifyCallBarringStatusChange:
	case EMobilePhoneNotifyCallWaitingStatusChange:
	case EMobilePhoneNotifyCCBSStatusChange:
	case EMobilePhoneNotifyAlternatingCallCapsChange:
	case EMobilePhoneNotifyAlternatingCallModeChange:
	case EMobilePhoneNotifyALSLineChange:
	case EMobilePhoneNotifyCostCapsChange:
	case EMobilePhoneNotifyCostInfoChange:
	case EMobilePhoneNotifySecurityCapsChange:
	case EMobilePhoneNotifyLockInfoChange:
	case EMobilePhoneNotifySecurityCodeInfoChange:
	case EMobilePhoneNotifySecurityEvent:
	case EMobilePhoneNotifyMessageWaiting:
	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
	case EMobilePhoneNotifyFdnStatusChange:
	case EMobilePhoneNotifyMulticallParamsChange:
	case EMobilePhoneNotifyIncomingCallTypeChange:
	case EMobilePhoneNotifyUUSSettingChange:
	case EMobilePhoneNotifyDefaultPrivacyChange:
	case EMobilePhoneNotifyMultimediaCallPreferenceChange:
	case EMobilePhoneNotifyNetworkSecurityLevelChange:
	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
	case EMobilePhoneNotifyUSimApplicationsInfoChange:
	case EMobilePhoneNotifyMailboxNumbersChange:
	case EMobilePhoneNotifyMmsUpdate:
	case EMobilePhoneNotifyMmsConfig:
	case EMobilePhoneNotifyNetworkInvScanChange:
	case EMobilePhoneNotifyNetworkInvScanEvent:
	case EMobilePhoneNotifyAirTimeDurationChange:
	case EMobilePhoneNotifySendNetworkServiceRequest:
	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
	case EMobilePhoneNotifyStorePreferredNetworksListChange:
	case EMobilePhoneNotifyCipheringIndicatorStatus:
	case EMobilePhoneNotifyIdentityServiceStatus:
	case EMobilePhoneNotifyIdentitySuppressionRejected:
	case EMobilePhoneNotifyMulticallIndicatorChange:
	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
	case EMobilePhoneNotifyAPNListChanged:
	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
	case EMobilePhoneNotifyAuthenticateDataChange:
	case EMobilePhoneNotifyWlanDataChange:
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
		LOGTEXT(_L8("CPhoneDMmTsy: Registered with 2 slots"));
		numberOfSlots=2;
		break;
	default:
		// Unknown or invalid Phone IPC
		User::Leave(KErrNotSupported);
		break;
		}
	return numberOfSlots;
	}


TInt CPhoneDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
		 				 const TDataPackage& aPackage)
	{
	// ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request 
	// for the TSY to process
	// A request handle, request type and request data are passed to the TSY

	TAny* dataPtr=aPackage.Ptr1();
	TAny* dataPtr2=aPackage.Ptr2();
	
	// The request data has to extracted from TDataPackage and the TAny* pointers have to
	// be "cast" to the expected request data type
	
	switch (aIpc)
		{
	// Non-Flow controlled requests

	case EMobilePhoneGetDTMFCaps:
		return GetDTMFCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneStopDTMFTone:
		return StopDTMFTone(aTsyReqHandle);

	case EMobilePhoneGetNetworkCaps:
		return GetNetworkCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetNetworkRegistrationStatus:
		return GetNetworkRegistrationStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneRegistrationStatus*, dataPtr));

	case EMobilePhoneGetHomeNetwork:
		return GetHomeNetwork(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneGetCurrentMode:
		return GetCurrentMode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkMode*, dataPtr));

	case EMobilePhoneGetCurrentNetwork:
		return GetCurrentNetwork(aTsyReqHandle, aPackage.Des1n(),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLocationAreaV1*, dataPtr2));

	case EMobilePhoneGetCellInfo:
		return GetCellInfo(aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneGetCurrentNetworkNoLocation:
		return GetCurrentNetwork(aTsyReqHandle, aPackage.Des1n(), NULL);

	case EMobilePhoneGetDetectedNetworksPhase1:
		return GetDetectedNetworksPhase1(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetDetectedNetworksPhase2:
		return GetDetectedNetworksPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneGetDetectedNetworksV2Phase1:
		return GetDetectedNetworksV2Phase1(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetDetectedNetworksV2Phase2:
		return GetDetectedNetworksV2Phase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneGetDetectedNetworksV5Phase1:
		return GetDetectedNetworksV5Phase1(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetDetectedNetworksV5Phase2:
		return GetDetectedNetworksV5Phase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneGetDetectedNetworksV8Phase1:
		return GetDetectedNetworksV8Phase1(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetDetectedNetworksV8Phase2:
		return GetDetectedNetworksV8Phase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneGetNetworkSelectionSetting:
		return GetNetworkSelectionSetting(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneSetNetworkSelectionSetting:
		return SetNetworkSelectionSetting(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneSelectNetwork:
		return SelectNetwork(aTsyReqHandle,
			REINTERPRET_CAST(TBool*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkManualSelection*, dataPtr2));

	case EMobilePhoneGetNITZInfo:
		return GetNetworkTimeInfo(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNITZ*, dataPtr));

	case EMobilePhoneGetServiceProviderName:
		return GetServiceProviderName(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneServiceProviderNameV2*, dataPtr));

	case EMobilePhoneGetMultimodeCaps:
		return GetMultimodeCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetPhoneStoreInfo:
		switch(aPackage.Type())
			{
			// Switch between the alternative implementations of GetPhoneStoreInfo
			case TDataPackage::EPackage1n2u:
				return GetPhoneStoreInfo(aTsyReqHandle,
						aPackage.Des1n(),aPackage.Des2u());
			case TDataPackage::EPackage1n2n:
				return GetPhoneStoreInfo(aTsyReqHandle, aPackage.Des2n(),
						REINTERPRET_CAST(RMobilePhone::TPhoneStoreNameAndIccType*, dataPtr));
			default:
				return NULL;
			}

	case EMobilePhoneGetIccAccessCaps:
		return GetIccAccessCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));
			
	case EMobilePhoneGetIccIdentity:
		return GetIccIdentity(aTsyReqHandle, REINTERPRET_CAST(RMobilePhone::TIccIdentity*, dataPtr));

	case EMobilePhoneGetCustomerServiceProfile:
		return GetCustomerServiceProfile(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneGetServiceTable:
		return GetServiceTable(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneServiceTable*,dataPtr),
			aPackage.Des2n());

	case EMobilePhoneGetBatteryCaps:
		return GetBatteryCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetBatteryInfo:
		return GetBatteryInfo(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneBatteryInfoV1*, dataPtr));

	case EMobilePhoneGetSignalCaps:
		return GetSignalCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetSignalStrength:
		return GetSignalStrength(aTsyReqHandle,
			REINTERPRET_CAST(TInt32*, dataPtr),
			REINTERPRET_CAST(TInt8*, dataPtr2));

	case EMobilePhoneGetIndicatorCaps:
		return GetIndicatorCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr),
			REINTERPRET_CAST(TUint32*, dataPtr2));

	case EMobilePhoneGetIndicator:
		return GetIndicator(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetIdentityCaps:
		return GetIdentityCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetPhoneId:
		return GetPhoneId(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdentityV1*, dataPtr));

	case EMobilePhoneGetSubscriberId:
		return GetSubscriberId(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneSubscriberId*, dataPtr));

	case EMobilePhoneGetDefaultPrivacy:
		return GetDefaultPrivacy(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr));

	case EMobilePhoneSetDefaultPrivacy:
		return SetDefaultPrivacy(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr));

	case EMobilePhoneGetCallServiceCaps:
		return GetCallServiceCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneGetCallForwardingStatusPhase1:
		return GetCallForwardingStatusPhase1(aTsyReqHandle,
			REINTERPRET_CAST(CRetrieveMobilePhoneCFList::TGetCallForwardingRequest*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetCallForwardingStatusPhase2:
		return GetCallForwardingStatusPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneGetFeatureCode:
		return GetFeatureCodeString(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TNetworkServiceAndAction*, dataPtr),
			aPackage.Des2u());

	case EMobilePhoneGetIdentityServiceStatus:
		return GetIdentityServiceStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TIdServiceAndLocation*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdServiceStatus*,dataPtr2));

	case EMobilePhoneGetBarringStatusPhase1:
		return GetCallBarringPhase1(aTsyReqHandle,
			REINTERPRET_CAST(CRetrieveMobilePhoneCBList::TGetCallBarringRequest*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetBarringStatusPhase2:
		return GetCallBarringPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneSetCallBarringStatus:
		return SetCallBarringStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCBCondition*,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCBChangeV1*,dataPtr2));

	case EMobilePhoneSetCallBarringPassword:
		return SetCallBarringPassword(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePasswordChangeV1*,dataPtr));

	case EMobilePhoneSetSSPassword:
		return SetSSPassword(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePasswordChangeV2*,dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetWaitingStatusPhase1:
		return GetCallWaitingPhase1(aTsyReqHandle,
			REINTERPRET_CAST(CRetrieveMobilePhoneCWList::TGetCallWaitingRequest*, dataPtr),
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetWaitingStatusPhase2:
		return GetCallWaitingPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());

	case EMobilePhoneSetCallWaitingStatus:
		return SetCallWaitingStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobileService*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneServiceAction*, dataPtr2));

	case EMobilePhoneGetCCBSStatus:
		return GetCCBSStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCCBSStatus*,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobileInfoLocation*,dataPtr2));

	case EMobilePhoneAcceptCCBSRecall:
		return AcceptCCBSRecall(aTsyReqHandle,
			REINTERPRET_CAST(TInt* ,dataPtr),aPackage.Des2u());

	case EMobilePhoneRefuseCCBSRecall:
		return RefuseCCBSRecall(aTsyReqHandle,
			REINTERPRET_CAST(TInt* ,dataPtr));

	case EMobilePhoneDeactivateCCBS:
		return DeactivateCCBS(aTsyReqHandle, 
			REINTERPRET_CAST(TInt* ,dataPtr));

	case EMobilePhoneGetCompletionRequestsPhase1:
		return GetCallCompletionPhase1(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr), REINTERPRET_CAST(TInt*,dataPtr2));

	case EMobilePhoneGetCompletionRequestsPhase2:
		return GetCallCompletionPhase2(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr), aPackage.Des2n());

	case EMobilePhoneGetAlternatingCallCaps:
		return GetAlternatingCallCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*,dataPtr));

	case EMobilePhoneGetAlternatingCallMode:
		return GetAlternatingCallMode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneAlternatingCallMode*,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobileService*,dataPtr2));
	
	case EMobilePhoneSetAlternatingCallMode:
		return SetAlternatingCallMode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneAlternatingCallMode*,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobileService*,dataPtr2));
	
	case EMobilePhoneGetALSLine:
		return GetALSLine(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneALSLine*,dataPtr));
	
	case EMobilePhoneSetALSLine:
		return SetALSLine(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneALSLine*,dataPtr));

	case EMobilePhoneGetCostCaps:
		return GetCostCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*,dataPtr));

	case EMobilePhoneSetMaxCostMeter:
		return SetMaxCostMeter(aTsyReqHandle,
			REINTERPRET_CAST(TUint*,dataPtr));

	case EMobilePhoneClearCostMeter:
		return ClearCostMeter(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCostMeters*,dataPtr));

	case EMobilePhoneSetPuct:
		return SetPuct(aTsyReqHandle,aPackage.Des1n());

	case EMobilePhoneGetCostInfo:
		return GetCostInfo(aTsyReqHandle,aPackage.Des1n());

	case EMobilePhoneGetSecurityCaps:
		return GetSecurityCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*,dataPtr));

	case EMobilePhoneGetLockInfo:
		return GetLockInfo(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLock *, dataPtr),
			aPackage.Des2n());

	case EMobilePhoneSetLockSetting:
		return SetLockSetting(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLock *, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLockSetting *, dataPtr2)
			);
	case EMobilePhoneChangeSecurityCode:
		return ChangeSecurityCode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneSecurityCode *, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePasswordChangeV1 *, dataPtr2));

	case EMobilePhoneGetSecurityCodeInfo:
		return GetSecurityCodeInfo(aTsyReqHandle,
			reinterpret_cast<RMobilePhone::TMobilePhoneSecurityCode *> (dataPtr),
			aPackage.Des2n());

	case EMobilePhoneVerifySecurityCode:
		return VerifySecurityCode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneSecurityCode *,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TCodeAndUnblockCode *, dataPtr2));

	case EMobilePhoneAbortSecurityCode:
		return AbortSecurityCode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneSecurityCode *, dataPtr));

	case EMobilePhoneGetFdnStatus:
		return GetFdnStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneFdnStatus*, dataPtr));

	case EMobilePhoneSetFdnSetting:
		return SetFdnSetting(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneFdnSetting*, dataPtr));

	case EMobilePhoneGetMulticallParams:
		return GetMulticallParams(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneSetMulticallParams:
		return SetMulticallParams(aTsyReqHandle, REINTERPRET_CAST(TInt*, dataPtr));

	case EMobilePhoneGetIncomingCallType:
		return GetIncomingCallType(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIncomingCallType*, dataPtr), 
			aPackage.Des2n());

	case EMobilePhoneSetIncomingCallType:
		return SetIncomingCallType(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIncomingCallType*, dataPtr), 
			aPackage.Des2n());

	case EMobilePhoneGetUUSSetting:
		return GetUUSSetting(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneUUSSetting*, dataPtr));

	case EMobilePhoneSetUUSSetting:
		return SetUUSSetting(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneUUSSetting*, dataPtr));

	case EMobilePhoneGetIccMessageWaitingIndicators:
		return GetIccMessageWaitingIndicators(aTsyReqHandle,aPackage.Des1n());

	case EMobilePhoneSetIccMessageWaitingIndicators:
		return SetIccMessageWaitingIndicators(aTsyReqHandle,aPackage.Des1n());
	
	case EMobilePhoneGetMultimediaCallPreference:
		return GetMultimediaCallPreference(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneMultimediaSettings*, dataPtr));

	case EMobilePhoneSetMultimediaCallPreference:
		return SetMultimediaCallPreference(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneMultimediaSettings*, dataPtr));

	case EMobilePhoneGetNetworkSecurityLevel:
		return GetNetworkSecurityLevel(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkSecurity*, dataPtr));

	case EMobilePhoneEnumerateUSimApplications:
		return EnumerateUSimApplications(aTsyReqHandle,
			REINTERPRET_CAST(TInt*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TAID*, dataPtr2));

	case EMobilePhoneGetUSimAppsSelectionMode:
		return GetUSimAppsSelectionMode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TUSimSelectionMode*, dataPtr));

	case EMobilePhoneSetUSimAppsSelectionMode:
		return SetUSimAppsSelectionMode(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TUSimSelectionMode*, dataPtr));

	case EMobilePhoneSetUSimApplicationStatus:
		return SetUSimApplicationStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TAID*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TUSimAppAction*, dataPtr2));

	case EMobilePhoneGetUSimApplicationsInfo:
		return GetUSimApplicationInfo(aTsyReqHandle,
			REINTERPRET_CAST(TInt*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TUSimApplicationInfoV2*, dataPtr2));
			
	case EMobilePhoneEnumerateSmartCardApplications:
		return EnumerateSmartCardApplications(aTsyReqHandle,
			reinterpret_cast<TUint*>(dataPtr));
			
	case EMobilePhoneGetSmartCardApplicationInfo:
		return GetSmartCardApplicationInfo(aTsyReqHandle, reinterpret_cast<TUint*>(dataPtr), aPackage.Des2n());
		
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
		return NotifySmartCardApplicationInfoChange(aTsyReqHandle, reinterpret_cast<RMobilePhone::TSmartCardApplicationEvent*>(dataPtr2), reinterpret_cast<RMobilePhone::TAID*>(dataPtr));
		
	case EMobilePhoneSetSmartCardApplicationStatus:
		return SetSmartCardApplicationStatus(aTsyReqHandle, reinterpret_cast<RMobilePhone::TAID*>(dataPtr), *reinterpret_cast<RMobilePhone::TSmartCardApplicationAction*>(dataPtr2));
		
	case EMobilePhoneGetScFileInfo:
		return GetScFileInfo(aTsyReqHandle, *reinterpret_cast<RMobilePhone::TScFilePath*>(dataPtr), aPackage.Des2n());
		
	case EMobilePhoneReadScFile:
		return ReadScFile(aTsyReqHandle, *reinterpret_cast<RMobilePhone::TScFilePathWithAccessOffsets*>(dataPtr), aPackage.Des2n());
		
	case EMobilePhoneUpdateScFile:
		return UpdateScFile(aTsyReqHandle, *reinterpret_cast<RMobilePhone::TScFilePathWithAccessOffsets*>(dataPtr), aPackage.Des2n());
		
	case EMobilePhoneGetCurrentActiveUSimApplication:
		return GetCurrentActiveUSimApplication(aTsyReqHandle, reinterpret_cast<RMobilePhone::TAID*>(dataPtr));
			
	case EMobilePhoneGetHomeNetworkSearchPeriod:
		return GetHomeNetworkSearchPeriod(aTsyReqHandle,
			REINTERPRET_CAST(TInt*, dataPtr));
			
	case EMobilePhoneGetLastUsedAccessTechnology:
		return GetLastUsedAccessTechnology(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkAccess*, dataPtr));
			
	case EMobilePhoneGetNetworkInvScanSetting:
		return GetNetworkInvScanSetting(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneInvestigationScan*, dataPtr));
			
	case EMobilePhoneGetCallForwardingIndicator:
		return GetCallForwardingIndicator(aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneGetCompMethodName:
		return GetCompMethodName(aTsyReqHandle, 
			*REINTERPRET_CAST(TUint8*, dataPtr), aPackage.Des2u());
			
	case EMobilePhoneEnumerateAPNEntries:
		return EnumerateAPNEntries(aTsyReqHandle, 
			REINTERPRET_CAST(TUint32*, dataPtr));
	
	case EMobilePhoneGetAPNname:
		return GetAPNname(aTsyReqHandle, 
			*REINTERPRET_CAST(TUint32*, dataPtr), aPackage.Des2n());

	case EMobilePhoneAppendAPNName:
		return AppendAPNName(aTsyReqHandle, aPackage.Des1n());
			
	case EMobilePhoneDeleteAPNName:
		return DeleteAPNName(aTsyReqHandle, 
			*REINTERPRET_CAST(TUint32*, dataPtr));
	
	case EMobilePhoneNotifyAPNListChanged:
		return NotifyAPNListChanged(aTsyReqHandle);
	
	case EMobilePhoneSetAPNControlListServiceStatus:
		return SetAPNControlListServiceStatus(aTsyReqHandle, 
			*REINTERPRET_CAST(RMobilePhone::TAPNControlListServiceStatus*, dataPtr));
			
	case EMobilePhoneGetAPNControlListServiceStatus:
		return GetAPNControlListServiceStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TAPNControlListServiceStatus*, dataPtr));
			
	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
		return NotifyAPNControlListServiceStatusChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TAPNControlListServiceStatus*, dataPtr));
	
	case EMobilePhoneGetAirTimeDuration:
		return GetAirTimeDuration(aTsyReqHandle, 
			REINTERPRET_CAST(TTimeIntervalSeconds*, dataPtr));
			
	case EMobilePhoneClearBlacklist:
		return ClearBlacklist(aTsyReqHandle);
		
	case EMobilePhoneGetPersonalisationCaps:
		return GetPersonalisationCaps(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));
			
	case EMobilePhoneGetPersonalisationStatus:
		return GetPersonalisationStatus(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));
			
	case EMobilePhoneSetPersonalisationStatus:
		return SetPersonalisationStatus(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePersonalisation*, dataPtr), aPackage.Des2u()); 
			
	case EMobilePhoneGetNetworkName:
		return GetCurrentNetworkName(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2n());	
		
	case EMobilePhoneGetPreferredNetworksPhase1:
		return GetPreferredNetworksPhase1(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), 
			REINTERPRET_CAST(TInt*, dataPtr2));

	case EMobilePhoneGetPreferredNetworksPhase2:
		return GetPreferredNetworksPhase2(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());		
			
	case EMobilePhoneStorePreferredNetworksList:
		return StorePreferredNetworksList(aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneGetCipheringIndicatorStatus:
		return GetCipheringIndicatorStatus(aTsyReqHandle, 
			*REINTERPRET_CAST(RMobilePhone::TMobileCallCipheringIndicator*, dataPtr));
			
	case EMobilePhoneSetIdentityServiceStatus:
		return SetIdentityServiceStatus(aTsyReqHandle, 
			*REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdService*, dataPtr),
			*REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdServiceSetting*, dataPtr2));

	// Flow controlled requests

	case EMobilePhoneSendNetworkServiceRequest:
		return SendNetworkServiceRequest(aTsyReqHandle, aPackage.Des1u());

	case EMobilePhoneSendDTMFTones:
		return SendDTMFTones(aTsyReqHandle, aPackage.Des1u());

	case EMobilePhoneReadDTMFTones:
		return ReadDTMFTones(aTsyReqHandle, aPackage.Des1u());

	case EMobilePhoneStartDTMFTone:
		return StartDTMFTone(aTsyReqHandle, 
			REINTERPRET_CAST(TChar*, dataPtr));

	case EMobilePhoneContinueDTMFStringSending:
		return ContinueDTMFStringSending(aTsyReqHandle,
			REINTERPRET_CAST(TBool*,dataPtr));

	case EMobilePhoneSetCallForwardingStatus:
		return SetCallForwardingStatus(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFCondition*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFChangeV1*, dataPtr2) );

	case EMobilePhoneProgramFeatureCode:
		return ProgramFeatureCodeString(aTsyReqHandle, 
			aPackage.Des2u(),
			REINTERPRET_CAST(RMobilePhone::TNetworkServiceAndAction*, dataPtr));
		
	case EMobilePhoneTerminateAllCalls:
		return TerminateAllCalls(aTsyReqHandle);
		
    case EMobilePhoneTerminateActiveCalls:
        return TerminateActiveCalls(aTsyReqHandle);
			
	case EMobilePhoneGetMailboxNumbers:
		return GetMailboxNumbers (aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneSetMmsUserConnParams:
		return SetMmsUserConnParams(aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneSetMmsUserPreferences:
		return SetMmsUserPreferences(aTsyReqHandle, aPackage.Des1n());
		
	case EMobilePhoneGetMmsConfig:
		return GetMmsConfig(aTsyReqHandle, 		
			*REINTERPRET_CAST(RMobilePhone::TMmsConnParams*,dataPtr), aPackage.Des2n());			
	//
	// Notification requests
	//

	case EMobilePhoneNotifyModeChange:
		return NotifyModeChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkMode*, dataPtr));

	case EMobilePhoneNotifyDTMFCapsChange:
		return NotifyDTMFCapsChange(aTsyReqHandle, 
			REINTERPRET_CAST(TUint32*, dataPtr));
	
	case EMobilePhoneNotifyStopInDTMFString:
		return NotifyStopInDTMFString(aTsyReqHandle);

	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
		return NotifyNetworkRegistrationStatusChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneRegistrationStatus*, dataPtr));

	case EMobilePhoneNotifyCurrentNetworkChange:
		return NotifyCurrentNetworkChange(aTsyReqHandle, aPackage.Des1n(),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLocationAreaV1*, dataPtr2));

	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
		return NotifyCurrentNetworkChange(aTsyReqHandle, aPackage.Des1n(), NULL);

	case EMobilePhoneNotifyCellInfoChange:
		return NotifyCellInfoChange(aTsyReqHandle, aPackage.Des1n());
	
	case EMobilePhoneNotifyIccAccessCapsChange:
		return NotifyIccAccessCapsChange(aTsyReqHandle, 
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneNotifyBatteryInfoChange:
		return NotifyBatteryInfoChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneBatteryInfoV1*, dataPtr));

	case EMobilePhoneNotifySignalStrengthChange:
		return NotifySignalStrengthChange(aTsyReqHandle,
			REINTERPRET_CAST(TInt32*, dataPtr), REINTERPRET_CAST(TInt8*, dataPtr2));

	case EMobilePhoneNotifyIndicatorChange:
		return NotifyIndicatorChange(aTsyReqHandle, REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneNotifyDefaultPrivacyChange:
		return NotifyDefaultPrivacyChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr));

	case EMobilePhoneNotifyCallForwardingStatusChange:
		return NotifyCallForwardingStatusChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFCondition*, dataPtr));

	case EMobilePhoneNotifyCallForwardingActive:
		return NotifyCallForwardingActive(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobileService*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFActive*, dataPtr2));

	case EMobilePhoneNotifyNetworkSelectionSettingChange:
		return NotifyNetworkSelectionSettingChange(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneNotifyNITZInfoChange:
		return NotifyNetworkTimeInfoChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNITZ*, dataPtr));

	case EMobilePhoneNotifyCallServiceCapsChange:
		return NotifyCallServiceCapsChange(aTsyReqHandle, 
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneNotifyCallBarringStatusChange:
		return NotifyCallBarringStatusChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCBCondition*,dataPtr));
	
	case EMobilePhoneNotifyCallWaitingStatusChange:
		return NotifyCallWaitingStatusChange(aTsyReqHandle,
			aPackage.Des1n());

	case EMobilePhoneNotifyCCBSStatusChange:
		return NotifyCCBSStatusChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneCCBSStatus*,dataPtr));

	case EMobilePhoneNotifyCCBSRecall:
		return NotifyCCBSRecall(aTsyReqHandle,aPackage.Des1n());

	case EMobilePhoneNotifyAlternatingCallCapsChange:
		return NotifyAlternatingCallCapsChange(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*,dataPtr));

	case EMobilePhoneNotifyAlternatingCallModeChange:
		return NotifyAlternatingCallModeChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneAlternatingCallMode*,dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobileService*,dataPtr2));

	case EMobilePhoneNotifyALSLineChange:
		return NotifyALSLineChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneALSLine*,dataPtr));

	case EMobilePhoneNotifyCostCapsChange:
		return NotifyCostCapsChange(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*,dataPtr));

	case EMobilePhoneNotifyCostInfoChange:
		return NotifyCostInfoChange(aTsyReqHandle,aPackage.Des1n());

	case EMobilePhoneNotifySecurityCapsChange:
		return NotifySecurityCapsChange(aTsyReqHandle,
			REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneNotifyLockInfoChange:
		return NotifyLockInfoChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneLock *, dataPtr),
			aPackage.Des2n());

	case EMobilePhoneNotifySecurityCodeInfoChange:
		return NotifySecurityCodeInfoChange(aTsyReqHandle,
			reinterpret_cast<RMobilePhone::TMobilePhoneSecurityCode*> (dataPtr),
			aPackage.Des2n());

	case EMobilePhoneNotifySecurityEvent:
		return NotifyOnSecurityEvent(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneSecurityEvent*,dataPtr));

	case EMobilePhoneNotifyMessageWaiting:
		return NotifyMessageWaiting(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr));

	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
		return NotifyIccMessageWaitingIndicatorsChange(aTsyReqHandle,aPackage.Des1n());
	
	case EMobilePhoneNotifyFdnStatusChange:
		return NotifyFdnStatusChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneFdnStatus*,dataPtr));

	case EMobilePhoneNotifyMulticallParamsChange:
		return NotifyMulticallParamsChange(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneNotifyIncomingCallTypeChange:
		return NotifyIncomingCallTypeChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIncomingCallType*, dataPtr),
			aPackage.Des2n());
	
	case EMobilePhoneNotifyUUSSettingChange:
		return NotifyUUSSettingChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneUUSSetting*, dataPtr));

	case EMobilePhoneNotifyMultimediaCallPreferenceChange:
		return NotifyMultimediaCallPreferenceChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneMultimediaSettings*, dataPtr));

	case EMobilePhoneNotifyNetworkSecurityLevelChange:
		return NotifyNetworkSecurityLevelChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkSecurity*, dataPtr));

	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
		return NotifyUSimAppsSelectionModeChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TUSimSelectionMode*, dataPtr));	

	case EMobilePhoneNotifyUSimApplicationsInfoChange:
		return NotifyUSimApplicationsInfoChange(aTsyReqHandle,
			REINTERPRET_CAST(TInt*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TAID*, dataPtr2));	
			
	case EMobilePhoneNotifyMailboxNumbersChange:		
			return NotifyMailboxNumbersChange (aTsyReqHandle, aPackage.Des1n());		

	case EMobilePhoneNotifyMmsUpdate:
		return NotifyMmsUpdate (aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneNotifyMmsConfig:
		return NotifyMmsConfig(aTsyReqHandle, 		
			*REINTERPRET_CAST(RMobilePhone::TMmsConnParams*,dataPtr), aPackage.Des2n());
		
	case EMobilePhoneNotifyNetworkInvScanChange:
		return NotifyNetworkInvScanChange(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneInvestigationScan*, dataPtr));
			
	case EMobilePhoneNotifyNetworkInvScanEvent:
		return NotifyNetworkInvScanEvent(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneInvestigationScanEvent*, dataPtr));
			
	case EMobilePhoneNotifyAirTimeDurationChange:
		return NotifyAirTimeDurationChange(aTsyReqHandle,
			REINTERPRET_CAST(TTimeIntervalSeconds*,dataPtr));

	case EMobilePhoneNotifySendNetworkServiceRequest:
		return NotifySendNetworkServiceRequest(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNotifySendSSOperation*, dataPtr), aPackage.Des2n());

	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
		return NotifyAllSendNetworkServiceRequest(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneNotifySendSSOperation*, dataPtr), aPackage.Des2n());
	
	case EMobilePhoneNotifyDTMFEvent:
		return NotifyDTMFEvent(aTsyReqHandle, REINTERPRET_CAST(RMobilePhone::TMobilePhoneDTMFEvent*, dataPtr));

	case EMobilePhoneNotifyStorePreferredNetworksListChange:
		return NotifyStorePreferredNetworksListChange(aTsyReqHandle);

	case EMobilePhoneNotifyCipheringIndicatorStatus:
		return NotifyCipheringIndicatorStatus(aTsyReqHandle,
			*REINTERPRET_CAST(RMobilePhone::TMobileCallCipheringIndicator*, dataPtr));

	case EMobilePhoneNotifyIdentityServiceStatus:
		return NotifyIdentityServiceStatus(aTsyReqHandle,
			*REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdService*, dataPtr),
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneIdServiceStatus*, dataPtr2));

	case EMobilePhoneNotifyIdentitySuppressionRejected:
		return NotifyIdentitySuppressionRejected(aTsyReqHandle);

	case EMobilePhoneNotifyMulticallIndicatorChange:
		return NotifyMulticallIndicatorChange(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TMobilePhoneMulticallIndicator*, dataPtr));

	case EMobilePhoneAuthorizationInfoPhase1:
			return GetAuthorizationInfoPhase1(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),
			REINTERPRET_CAST(TInt*,dataPtr2));


	case EMobilePhoneAuthorizationInfoPhase2:
		return GetAuthorizationInfoPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr), aPackage.Des2n());
			
	case EMobilePhoneIMSAuthenticate:
		return GetAuthenticationData(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneSmartCardAuthenticate:
		return GetSmartCardAuthenticationData(aTsyReqHandle, aPackage.Des1n(),
		         reinterpret_cast<RMobilePhone::TAID*>(dataPtr2));

	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
		return NotifyImsAuthorizationInfoChanged(aTsyReqHandle);
	
	case EETelPhoneSetEmergencyClient:
		return SetEmergencyClient(aTsyReqHandle,REINTERPRET_CAST(TUint32*, dataPtr));

	case EMobilePhoneNotifyAuthenticateDataChange:
		return NotifyAuthenticateDataChange(aTsyReqHandle, aPackage.Des1n());

	case EMobilePhoneGetAuthenticationParams:
		return GetAuthenticationParams(aTsyReqHandle, aPackage.Des1n(),aPackage.Des2n());
		
	case EMobilePhoneSetGbaBootstrapParams:
		return SetGbaBootstrapParams(aTsyReqHandle, reinterpret_cast<RMobilePhone::TAID*>(dataPtr2),aPackage.Des1n());
	
	case EMobilePhoneAuthenticationListPhase1:
		return GetAuthenticationListPhase1(aTsyReqHandle,
			REINTERPRET_CAST(CRetrieveMobilePhoneAuthenticationIds::TAuthRequestData*, dataPtr),REINTERPRET_CAST(TInt*, dataPtr2));
			
	case EMobilePhoneAuthenticationListPhase2:
		return GetAuthenticationListPhase2(aTsyReqHandle,
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());
	
	case EMobilePhoneNotifyWlanDataChange:
		return NotifyWlanDataChange(aTsyReqHandle,aPackage.Des1n());
	
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
		return NotifyPreferredWlanSIDListChange(aTsyReqHandle);
		
	case EMobilePhoneGetWlanData:
		return GetWlanData(aTsyReqHandle,aPackage.Des1n());
		
	case EMobilePhoneSetWlanData:
		return SetWlanData(aTsyReqHandle,aPackage.Des1n());
	
	case EMobilePhoneGetPreferredWlanSIDsPhase1:
		return GetPreferredWlanSIDsPhase1(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), 
			REINTERPRET_CAST(TInt*, dataPtr2));
			
	case EMobilePhoneGetPreferredWlanSIDsPhase2:
		return GetPreferredWlanSIDsPhase2(aTsyReqHandle, 
			REINTERPRET_CAST(RMobilePhone::TClientId*, dataPtr), aPackage.Des2n());		
						
	case EMobilePhoneStorePreferredWlanSIDList:
		return StorePreferredWlanSIDList(aTsyReqHandle, aPackage.Des1n());
		
	default:
		return KErrNotSupported;
		}
	}

TInt CPhoneDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
	{
	// CancelService is called by the server when it is "cleaning-up" any still outstanding
	// asynchronous requests before closing a client's sub-session.
	// This will happen if a client closes its R-class handle without cancelling outstanding
	// asynchronous requests.

	switch (aIpc)
		{
	case EMobilePhoneGetHomeNetwork:
		return GetHomeNetworkCancel(aTsyReqHandle);
	case EMobilePhoneNotifyModeChange:
		return NotifyModeChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyDTMFCapsChange:
		return NotifyDTMFCapsChangeCancel(aTsyReqHandle);
	case EMobilePhoneSendDTMFTones:
		return SendDTMFTonesCancel(aTsyReqHandle);
	case EMobilePhoneReadDTMFTones:
		return ReadDTMFTonesCancel(aTsyReqHandle);
	case EMobilePhoneNotifyStopInDTMFString:
		return NotifyStopInDTMFStringCancel(aTsyReqHandle);
	case EMobilePhoneGetNetworkRegistrationStatus:
		return GetNetworkRegistrationStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNetworkRegistrationStatusChange:
		return NotifyNetworkRegistrationStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCurrentNetwork:
		return GetCurrentNetworkCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCurrentNetworkChange:
		return NotifyCurrentNetworkChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCurrentNetworkNoLocation:
		return GetCurrentNetworkCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCurrentNetworkNoLocationChange:
		return NotifyCurrentNetworkChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCellInfo:
		return GetCellInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCellInfoChange:
		return NotifyCellInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetDetectedNetworksPhase1:
	case EMobilePhoneGetDetectedNetworksPhase2:
		return GetDetectedNetworksCancel(aTsyReqHandle);
	case EMobilePhoneGetDetectedNetworksV2Phase1:
	case EMobilePhoneGetDetectedNetworksV2Phase2:
		return GetDetectedNetworksV2Cancel(aTsyReqHandle);
	case EMobilePhoneGetDetectedNetworksV5Phase1:
	case EMobilePhoneGetDetectedNetworksV5Phase2:
		return GetDetectedNetworksV5Cancel(aTsyReqHandle);	
	case EMobilePhoneGetDetectedNetworksV8Phase1:
	case EMobilePhoneGetDetectedNetworksV8Phase2:
		return GetDetectedNetworksV8Cancel(aTsyReqHandle);
	case EMobilePhoneGetPhoneStoreInfo:
		return GetPhoneStoreInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIccAccessCapsChange:
		return NotifyIccAccessCapsChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCustomerServiceProfile:
		return GetCustomerServiceProfileCancel(aTsyReqHandle);
	case EMobilePhoneGetServiceTable:
		return GetServiceTableCancel(aTsyReqHandle);
	case EMobilePhoneGetBatteryInfo:
		return GetBatteryInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyBatteryInfoChange:
		return NotifyBatteryInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetSignalStrength:
		return GetSignalStrengthCancel(aTsyReqHandle);
	case EMobilePhoneNotifySignalStrengthChange:
		return NotifySignalStrengthChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetIndicator:
		return GetIndicatorCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIndicatorChange:
		return NotifyIndicatorChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetPhoneId:
		return GetPhoneIdCancel(aTsyReqHandle);
	case EMobilePhoneGetSubscriberId:
		return GetSubscriberIdCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCallServiceCapsChange:
		return NotifyCallServiceCapsChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCallForwardingStatusPhase1:
	case EMobilePhoneGetCallForwardingStatusPhase2:
		return GetCallForwardingStatusCancel(aTsyReqHandle);
	case EMobilePhoneSetCallForwardingStatus:
		return SetCallForwardingStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCallForwardingStatusChange:
		return NotifyCallForwardingStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCallForwardingActive:
		return NotifyCallForwardingActiveCancel(aTsyReqHandle);
	case EMobilePhoneProgramFeatureCode:
		return ProgramFeatureCodeStringCancel(aTsyReqHandle);
	case EMobilePhoneGetFeatureCode:
		return GetFeatureCodeStringCancel(aTsyReqHandle);
	case EMobilePhoneSendNetworkServiceRequest:
		return SendNetworkServiceRequestCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNetworkSelectionSettingChange:
		return NotifyNetworkSelectionSettingChangeCancel(aTsyReqHandle);
	case EMobilePhoneSelectNetwork:
		return SelectNetworkCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNITZInfoChange:
		return NotifyNetworkTimeInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetServiceProviderName:
		return GetServiceProviderNameCancel(aTsyReqHandle);
	case EMobilePhoneGetIdentityServiceStatus:
		return GetIdentityServiceStatusCancel(aTsyReqHandle);
	case EMobilePhoneGetBarringStatusPhase1:
	case EMobilePhoneGetBarringStatusPhase2:
		return GetCallBarringCancel(aTsyReqHandle);
	case EMobilePhoneSetCallBarringStatus:
		return SetCallBarringStatusCancel(aTsyReqHandle);
	case EMobilePhoneSetCallBarringPassword:
		return SetCallBarringPasswordCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCallBarringStatusChange:
		return NotifyCallBarringStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetWaitingStatusPhase1:
	case EMobilePhoneGetWaitingStatusPhase2:
		return GetCallWaitingCancel(aTsyReqHandle);
	case EMobilePhoneSetCallWaitingStatus:
		return SetCallWaitingStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCallWaitingStatusChange:
		return NotifyCallWaitingStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCCBSStatus:
		return GetCCBSStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCCBSStatusChange:
		return NotifyCCBSStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneDeactivateCCBS:
		return DeactivateCCBSCancel(aTsyReqHandle);
	case EMobilePhoneAcceptCCBSRecall:
		return AcceptCCBSRecallCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCCBSRecall:
		return NotifyCCBSRecallCancel(aTsyReqHandle);
	case EMobilePhoneGetCompletionRequestsPhase1:
	case EMobilePhoneGetCompletionRequestsPhase2:
		return GetCallCompletionCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAlternatingCallCapsChange:
		return NotifyAlternatingCallCapsChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAlternatingCallModeChange:
		return NotifyAlternatingCallModeChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetALSLine:
		return SetALSLineCancel(aTsyReqHandle);
	case EMobilePhoneNotifyALSLineChange:
		return NotifyALSLineChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCostCapsChange:
		return NotifyCostCapsChangeCancel(aTsyReqHandle);
	case EMobilePhoneClearCostMeter:
		return ClearCostMeterCancel(aTsyReqHandle);
	case EMobilePhoneSetMaxCostMeter:
		return SetMaxCostMeterCancel(aTsyReqHandle);
	case EMobilePhoneSetPuct:
		return SetPuctCancel(aTsyReqHandle);
	case EMobilePhoneGetCostInfo:
		return GetCostInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCostInfoChange:
		return NotifyCostInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifySecurityCapsChange:
		return NotifySecurityCapsChangeCancel(aTsyReqHandle);
	 case EMobilePhoneGetLockInfo:
		return GetLockInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyLockInfoChange:
		return NotifyLockInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetLockSetting:
		return SetLockSettingCancel(aTsyReqHandle);
	case EMobilePhoneChangeSecurityCode:
		return ChangeSecurityCodeCancel(aTsyReqHandle);
	case EMobilePhoneGetSecurityCodeInfo:
		return GetSecurityCodeInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifySecurityCodeInfoChange:
		return NotifySecurityCodeInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifySecurityEvent:
		return NotifyOnSecurityEventCancel(aTsyReqHandle);
	case EMobilePhoneVerifySecurityCode:
		return VerifySecurityCodeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMessageWaiting:
		return NotifyMessageWaitingCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIccMessageWaitingIndicatorsChange:
		return NotifyIccMessageWaitingIndicatorsChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetIccMessageWaitingIndicators:
		return GetIccMessageWaitingIndicatorsCancel(aTsyReqHandle);
	case EMobilePhoneSetIccMessageWaitingIndicators:
		return SetIccMessageWaitingIndicatorsCancel(aTsyReqHandle);
	case EMobilePhoneGetFdnStatus:
		return GetFdnStatusCancel(aTsyReqHandle);
	case EMobilePhoneSetFdnSetting:
		return SetFdnSettingCancel(aTsyReqHandle);
	case EMobilePhoneNotifyFdnStatusChange:
		return NotifyFdnStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetNetworkSelectionSetting:
		return SetNetworkSelectionSettingCancel(aTsyReqHandle);
	case EMobilePhoneSetAlternatingCallMode:
		return SetAlternatingCallModeCancel(aTsyReqHandle);
	case EMobilePhoneGetMulticallParams:
		return GetMulticallParamsCancel(aTsyReqHandle);
	case EMobilePhoneSetMulticallParams:
		return SetMulticallParamsCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMulticallParamsChange:
		return NotifyMulticallParamsChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetIncomingCallType:
		return GetIncomingCallTypeCancel(aTsyReqHandle);
	case EMobilePhoneSetIncomingCallType:
		return SetIncomingCallTypeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIncomingCallTypeChange:
		return NotifyIncomingCallTypeChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetUUSSetting:
		return GetUUSSettingCancel(aTsyReqHandle);
	case EMobilePhoneSetUUSSetting:
		return SetUUSSettingCancel(aTsyReqHandle);
	case EMobilePhoneNotifyUUSSettingChange:
		return NotifyUUSSettingChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetDefaultPrivacy:
		return SetDefaultPrivacyCancel(aTsyReqHandle);
	case EMobilePhoneNotifyDefaultPrivacyChange:
		return NotifyDefaultPrivacyChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetMultimediaCallPreference:
		return SetMultimediaCallPreferenceCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMultimediaCallPreferenceChange:
		return NotifyMultimediaCallPreferenceChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetNetworkSecurityLevel:
		return GetNetworkSecurityLevelCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNetworkSecurityLevelChange:
		return NotifyNetworkSecurityLevelChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyUSimAppsSelectionModeChange:
		return NotifyUSimAppsSelectionModeChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetUSimApplicationStatus:
		return SetUSimApplicationStatusCancel(aTsyReqHandle);
	case EMobilePhoneGetUSimApplicationsInfo:
		return GetUSimApplicationInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifyUSimApplicationsInfoChange:
		return NotifyUSimApplicationsInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneEnumerateUSimApplications:
		return EnumerateUSimApplicationsCancel(aTsyReqHandle);
	case EMobilePhoneEnumerateSmartCardApplications:
		return EnumerateSmartCardApplicationsCancel(aTsyReqHandle);
	case EMobilePhoneGetSmartCardApplicationInfo:
		return GetSmartCardApplicationInfoCancel(aTsyReqHandle);
	case EMobilePhoneNotifySmartCardApplicationInfoChange:
		return NotifySmartCardApplicationInfoChangeCancel(aTsyReqHandle);
	case EMobilePhoneSetSmartCardApplicationStatus:
		return SetSmartCardApplicationStatusCancel(aTsyReqHandle);
	case EMobilePhoneGetScFileInfo:
		return GetScFileInfoCancel(aTsyReqHandle);
	case EMobilePhoneReadScFile:
		return ReadScFileCancel(aTsyReqHandle);
	case EMobilePhoneUpdateScFile:
		return UpdateScFileCancel(aTsyReqHandle);
	case EMobilePhoneGetCurrentActiveUSimApplication:
		return GetCurrentActiveUSimApplicationCancel(aTsyReqHandle);
	case EMobilePhoneSetSSPassword:
		return SetSSPasswordCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMailboxNumbersChange:
		return NotifyMailboxNumbersChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetMailboxNumbers:
		return GetMailboxNumbersCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMmsUpdate:
		return NotifyMmsUpdateCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMmsConfig:
		return SetMmsUserConnParamsCancel(aTsyReqHandle);
	case EMobilePhoneSetMmsUserConnParams:
		return SetMmsUserConnParamsCancel(aTsyReqHandle);
	case EMobilePhoneSetMmsUserPreferences:
		return SetMmsUserPreferencesCancel(aTsyReqHandle);
	case EMobilePhoneGetMmsConfig:
		return GetMmsConfigCancel(aTsyReqHandle);
	case EMobilePhoneGetHomeNetworkSearchPeriod:
		return GetHomeNetworkSearchPeriodCancel(aTsyReqHandle);
	case EMobilePhoneGetLastUsedAccessTechnology:
		return GetLastUsedAccessTechnologyCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNetworkInvScanChange:
		return NotifyNetworkInvScanChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyNetworkInvScanEvent:
		return NotifyNetworkInvScanEventCancel(aTsyReqHandle);
	case EMobilePhoneGetCallForwardingIndicator:
		return GetCallForwardingIndicatorCancel(aTsyReqHandle);
	case EMobilePhoneGetCompMethodName:
		return GetCompMethodNameCancel(aTsyReqHandle);
	case EMobilePhoneEnumerateAPNEntries:
		return EnumerateAPNEntriesCancel(aTsyReqHandle);
	case EMobilePhoneGetAPNname:
		return GetAPNnameCancel(aTsyReqHandle);
	case EMobilePhoneAppendAPNName:
		return AppendAPNNameCancel(aTsyReqHandle);
	case EMobilePhoneDeleteAPNName:
		return DeleteAPNNameCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAPNListChanged:
		return NotifyAPNListChangedCancel(aTsyReqHandle);
	case EMobilePhoneSetAPNControlListServiceStatus:
		return SetAPNControlListServiceStatusCancel(aTsyReqHandle);
	case EMobilePhoneGetAPNControlListServiceStatus:
		return GetAPNControlListServiceStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAPNControlListServiceStatusChange:
		return NotifyAPNControlListServiceStatusChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAirTimeDurationChange:
		return NotifyAirTimeDurationChangeCancel(aTsyReqHandle);
	case EMobilePhoneTerminateAllCalls:
		return TerminateAllCallsCancel(aTsyReqHandle);
    case EMobilePhoneTerminateActiveCalls:
        return TerminateActiveCallsCancel(aTsyReqHandle);
	case EMobilePhoneNotifySendNetworkServiceRequest:
		return NotifySendNetworkServiceRequestCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAllSendNetworkServiceRequest:
		return NotifyAllSendNetworkServiceRequestCancel(aTsyReqHandle);
	case EMobilePhoneClearBlacklist:
		return ClearBlacklistCancel(aTsyReqHandle);
	case EMobilePhoneNotifyDTMFEvent:
		return NotifyDTMFEventCancel(aTsyReqHandle);
	case EMobilePhoneGetPersonalisationCaps:
		return GetPersonalisationCapsCancel(aTsyReqHandle);
	case EMobilePhoneGetPersonalisationStatus:
		return GetPersonalisationStatusCancel(aTsyReqHandle);
	case EMobilePhoneSetPersonalisationStatus:
		return SetPersonalisationStatusCancel(aTsyReqHandle);
	case EMobilePhoneGetNetworkName:
		return GetCurrentNetworkNameCancel(aTsyReqHandle);
	case EMobilePhoneGetPreferredNetworksPhase1:
	case EMobilePhoneGetPreferredNetworksPhase2:
		return GetPreferredNetworksCancel(aTsyReqHandle);
	case EMobilePhoneStorePreferredNetworksList:
		return StorePreferredNetworksListCancel(aTsyReqHandle);
	case EMobilePhoneNotifyStorePreferredNetworksListChange:
		return NotifyStorePreferredNetworksListChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetCipheringIndicatorStatus:
		return GetCipheringIndicatorStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyCipheringIndicatorStatus:
		return NotifyCipheringIndicatorStatusCancel(aTsyReqHandle);
	case EMobilePhoneSetIdentityServiceStatus:
		return SetIdentityServiceStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIdentityServiceStatus:
		return NotifyIdentityServiceStatusCancel(aTsyReqHandle);
	case EMobilePhoneNotifyIdentitySuppressionRejected:
		return NotifyIdentitySuppressionRejectedCancel(aTsyReqHandle);
	case EMobilePhoneNotifyMulticallIndicatorChange:
		return NotifyMulticallIndicatorChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyImsAuthorizationInfoChanged:
		return NotifyImsAuthorizationInfoChangedCancel(aTsyReqHandle);
	case EMobilePhoneAuthorizationInfoPhase1:
	case EMobilePhoneAuthorizationInfoPhase2:
		return GetAuthorizationInfoCancel(aTsyReqHandle);
	case EMobilePhoneIMSAuthenticate:
		return GetAuthenticationDataCancel(aTsyReqHandle);
	case EMobilePhoneSmartCardAuthenticate:
		return GetSmartCardAuthenticationDataCancel(aTsyReqHandle);
	case EMobilePhoneGetIccIdentity:
		return GetIccIdentityCancel(aTsyReqHandle);
	case EMobilePhoneNotifyAuthenticateDataChange:
		return NotifyAuthenticateDataChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetAuthenticationParams:
		return GetAuthenticationParamsCancel(aTsyReqHandle);
	case EMobilePhoneSetGbaBootstrapParams:
		return SetGbaBootstrapParamsCancel(aTsyReqHandle);
	case EMobilePhoneAuthenticationListPhase1:
	case EMobilePhoneAuthenticationListPhase2:
		return GetAuthenticationListCancel(aTsyReqHandle);
	case EMobilePhoneNotifyWlanDataChange:
		return NotifyWlanDataChangeCancel(aTsyReqHandle);
	case EMobilePhoneNotifyPreferredWlanSIDListChange:
		return NotifyPreferredWlanSIDListChangeCancel(aTsyReqHandle);
	case EMobilePhoneGetWlanData:
		return GetWlanDataCancel(aTsyReqHandle);
	case EMobilePhoneSetWlanData:
		return SetWlanDataCancel(aTsyReqHandle);
	case EMobilePhoneGetPreferredWlanSIDsPhase1:
	case EMobilePhoneGetPreferredWlanSIDsPhase2:
		return GetPreferredWlanSIDsCancel(aTsyReqHandle);
	case EMobilePhoneStorePreferredWlanSIDList:
		return StorePreferredWlanSIDListCancel(aTsyReqHandle);
	
	default:
		return CPhoneBase::CancelService(aIpc,aTsyReqHandle);
		}
	}

/***********************************************************************************/
//
// The following methods are called from ExtFunc and/or CancelService.
// Each of these will process a TSY request or cancel a TSY request
// Here, example values are returned or checked within this dummy TSY in order to ensure
// that the integrity of the data passed to/from client is maintained
//
/***********************************************************************************/

TInt CPhoneDMmTsy::GetMultimodeCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMultimodeCaps called"));
	*aCaps=DMMTSY_PHONE_MULTIMODE_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPhoneStoreInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aGetInfo,
		TDes* aName)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPhoneStoreInfo called"));

	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg *infoPckg = REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg *,aGetInfo);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 &info = (*infoPckg)();

	if (aName->Compare(DMMTSY_PHONE_STORE_NAME1) == 0)
		{
		info.iName=DMMTSY_PHONE_STORE_NAME1;
		info.iType=DMMTSY_PHONE_STORE_TYPE1;
		info.iTotalEntries=DMMTSY_PHONE_STORE_TOTAL_ENTRIES1;
		info.iUsedEntries=DMMTSY_PHONE_STORE_USED_ENTRIES1;
		info.iCaps=DMMTSY_PHONE_STORE_CAPS1;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else if (aName->Compare(DMMTSY_PHONE_STORE_NAME2) == 0)
		{
		info.iName=DMMTSY_PHONE_STORE_NAME2;
		info.iType=DMMTSY_PHONE_STORE_TYPE2;
		info.iTotalEntries=DMMTSY_PHONE_STORE_TOTAL_ENTRIES2;
		info.iUsedEntries=DMMTSY_PHONE_STORE_USED_ENTRIES2;
		info.iCaps=DMMTSY_PHONE_STORE_CAPS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPhoneStoreInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aGetInfo, 
		RMobilePhone::TPhoneStoreNameAndIccType* aTable)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPhoneStoreInfo called using IccType"));

	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg *infoPckg = REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg *,aGetInfo);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 &info = (*infoPckg)();

	if ((aTable->iStoreName.Compare(DMMTSY_PHONE_STORE_NAME1) == 0) &&
				(aTable->iMode.Compare(DMMTSY_PHONEBOOK_TYPE) == 0))
		{
		info.iName=DMMTSY_PHONE_STORE_NAME1;
		info.iType=DMMTSY_PHONE_STORE_TYPE1;
		info.iTotalEntries=DMMTSY_PHONE_STORE_TOTAL_ENTRIES1;
		info.iUsedEntries=DMMTSY_PHONE_STORE_USED_ENTRIES1;
		info.iCaps=DMMTSY_PHONE_STORE_CAPS1;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else if ((aTable->iStoreName.Compare(DMMTSY_PHONE_STORE_NAME2) == 0) &&
					(aTable->iMode.Compare(DMMTSY_PHONEBOOK_TYPE) == 0))
		{
		info.iName=DMMTSY_PHONE_STORE_NAME2;
		info.iType=DMMTSY_PHONE_STORE_TYPE2;
		info.iTotalEntries=DMMTSY_PHONE_STORE_TOTAL_ENTRIES2;
		info.iUsedEntries=DMMTSY_PHONE_STORE_USED_ENTRIES2;
		info.iCaps=DMMTSY_PHONE_STORE_CAPS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPhoneStoreInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPhoneStoreInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIccAccessCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIccAccessCaps called"));
	*aCaps=DMMTSY_PHONE_SIM_ACCESS_CAPS1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIccAccessCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifyIccAccessCaps++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyIccAccessCapsChange called"));
		*aCaps=DMMTSY_PHONE_SIM_ACCESS_CAPS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIccAccessCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIccAccessCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetIccIdentity(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TIccIdentity* aIdentity)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIccIdentity called"));
	*aIdentity=DMMTSY_PHONE_ICC_ID;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetIccIdentityCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIccIdentity called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCustomerServiceProfile(const TTsyReqHandle aTsyReqHandle, TDes8* aFile)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCustomerServiceProfile called"));
	RMobilePhone::TMobilePhoneCspFileV1Pckg* cspV1Pckg = (RMobilePhone::TMobilePhoneCspFileV1Pckg*)aFile;
	RMobilePhone::TMobilePhoneCspFileV1& cspV1 = (*cspV1Pckg)();

	cspV1.iCallOfferingServices=DMMTSY_PHONE_CSP_BYTE1;
	cspV1.iCallRestrictionServices=DMMTSY_PHONE_CSP_BYTE2;
	cspV1.iOtherSuppServices=DMMTSY_PHONE_CSP_BYTE3;
	cspV1.iCallCompletionServices=DMMTSY_PHONE_CSP_BYTE4;
	cspV1.iTeleservices=DMMTSY_PHONE_CSP_BYTE5;
	cspV1.iCphsTeleservices=DMMTSY_PHONE_CSP_BYTE6;
	cspV1.iCphsFeatures=DMMTSY_PHONE_CSP_BYTE7;
	cspV1.iNumberIdentServices=DMMTSY_PHONE_CSP_BYTE8;
	cspV1.iPhase2PlusServices=DMMTSY_PHONE_CSP_BYTE9;
	cspV1.iValueAddedServices=DMMTSY_PHONE_CSP_BYTE10;

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCustomerServiceProfileCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCustomerServiceProfileCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetServiceTable(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneServiceTable* aTable, TDes8* aFile)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetServiceTable called"));
	RMobilePhone::TMobilePhoneServiceTableV1Pckg* sstFilePckg = (RMobilePhone::TMobilePhoneServiceTableV1Pckg*) aFile;
	RMobilePhone::TMobilePhoneServiceTableV1 &sstFile = (*sstFilePckg)();
		
	if (*aTable!=DMMTSY_PHONE_SERVICE_TABLE)
		ReqCompleted(aTsyReqHandle,KErrCancel);
	else
		{
		if(sstFile.ExtensionId()==KEtelExtMultimodeV8)
			{
			LOGTEXT(_L8("CPhoneDMmTsy::GetServiceTable is using V8table"));
			RMobilePhone::TMobilePhoneServiceTableV8Pckg* sstV8Pckg = (RMobilePhone::TMobilePhoneServiceTableV8Pckg*)aFile;
			RMobilePhone::TMobilePhoneServiceTableV8& sstV8 = (*sstV8Pckg)();

			sstV8.iServices1To8=DMMTSY_PHONE_SST_BYTE1;
			sstV8.iServices9To16=DMMTSY_PHONE_SST_BYTE2;
			sstV8.iServices17To24=DMMTSY_PHONE_SST_BYTE3;
			sstV8.iServices25To32=DMMTSY_PHONE_SST_BYTE4;
			sstV8.iServices33To40=DMMTSY_PHONE_SST_BYTE5;
			sstV8.iServices41To48=DMMTSY_PHONE_SST_BYTE6;
			sstV8.iServices49To56=DMMTSY_PHONE_SST_BYTE7;
			sstV8.iAID=DMMTSY_PHONE_USIM_AID;			
			sstV8.iServices57To64=DMMTSY_PHONE_SST_BYTE8;
			sstV8.iServices65To72=DMMTSY_PHONE_SST_BYTE9;
			}
			
		if(sstFile.ExtensionId()==KETelExtMultimodeV2)
			{
			LOGTEXT(_L8("CPhoneDMmTsy::GetServiceTable is using V2table"));
			RMobilePhone::TMobilePhoneServiceTableV2Pckg* sstV2Pckg = (RMobilePhone::TMobilePhoneServiceTableV2Pckg*)aFile;
			RMobilePhone::TMobilePhoneServiceTableV2& sstV2 = (*sstV2Pckg)();

			sstV2.iServices1To8=DMMTSY_PHONE_SST_BYTE1;
			sstV2.iServices9To16=DMMTSY_PHONE_SST_BYTE2;
			sstV2.iServices17To24=DMMTSY_PHONE_SST_BYTE3;
			sstV2.iServices25To32=DMMTSY_PHONE_SST_BYTE4;
			sstV2.iServices33To40=DMMTSY_PHONE_SST_BYTE5;
			sstV2.iServices41To48=DMMTSY_PHONE_SST_BYTE6;
			sstV2.iServices49To56=DMMTSY_PHONE_SST_BYTE7;
			sstV2.iAID=DMMTSY_PHONE_USIM_AID;
			}
		else if(sstFile.ExtensionId()==KETelExtMultimodeV1)
			{
			LOGTEXT(_L8("CPhoneDMmTsy::GetServiceTable is using V1table"));

			sstFile.iServices1To8=DMMTSY_PHONE_SST_BYTE1;
			sstFile.iServices9To16=DMMTSY_PHONE_SST_BYTE2;
			sstFile.iServices17To24=DMMTSY_PHONE_SST_BYTE3;
			sstFile.iServices25To32=DMMTSY_PHONE_SST_BYTE4;
			sstFile.iServices33To40=DMMTSY_PHONE_SST_BYTE5;
			sstFile.iServices41To48=DMMTSY_PHONE_SST_BYTE6;
			sstFile.iServices49To56=DMMTSY_PHONE_SST_BYTE7;
			}

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetServiceTableCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetServiceTableCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetBatteryCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetBatteryCaps called"));
	*aCaps=DMMTSY_PHONE_BATTERY_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetBatteryInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneBatteryInfoV1* aInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetBatteryInfo called"));
	aInfo->iStatus=DMMTSY_PHONE_BATTERY_STATUS1;
	aInfo->iChargeLevel=DMMTSY_PHONE_BATTERY_CHARGE1;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetBatteryInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetBatteryInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyBatteryInfoChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneBatteryInfoV1* aInfo)
	{
	if (!iNotifyBatteryInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyBatteryInfoChange called"));
		aInfo->iStatus=DMMTSY_PHONE_BATTERY_STATUS2;
		aInfo->iChargeLevel=DMMTSY_PHONE_BATTERY_CHARGE2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyBatteryInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyBatteryInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSignalCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSignalCaps called"));
	*aCaps=DMMTSY_PHONE_SIGNAL_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSignalStrength(const TTsyReqHandle aTsyReqHandle, TInt32* aSignalStrength, TInt8* aBar)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSignalStrength called"));
	*aSignalStrength=DMMTSY_PHONE_SIGNAL_STRENGTH1;
	*aBar=DMMTSY_PHONE_SIGNAL_BAR1;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSignalStrengthCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSignalStrengthCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifySignalStrengthChange(const TTsyReqHandle aTsyReqHandle, TInt32* aSignalStrength, TInt8* aBar)
	{
	if (!iNotifySignalStrengthChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifySignalStrengthChange called"));
		*aSignalStrength=DMMTSY_PHONE_SIGNAL_STRENGTH2;
		*aBar=DMMTSY_PHONE_SIGNAL_BAR2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifySignalStrengthChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySignalStrengthChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIndicatorCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aActionCaps, TUint32* aIndCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIndicatorCaps called"));
	*aActionCaps=DMMTSY_PHONE_ACTION_INDICATOR_CAPS;
	*aIndCaps=DMMTSY_PHONE_INDICATOR_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIndicator(const TTsyReqHandle aTsyReqHandle, TUint32* aIndicator)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIndicator called"));
	*aIndicator=DMMTSY_PHONE_INDICATOR1;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIndicatorCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIndicatorCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIndicatorChange(const TTsyReqHandle aTsyReqHandle, TUint32* aIndicator)
	{
	if (!iNotifyIndicatorChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyIndicatorChange called"));
		*aIndicator=DMMTSY_PHONE_INDICATOR2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIndicatorChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIndicatorChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIdentityCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIdentityCaps called"));
	*aCaps=DMMTSY_PHONE_IDENTITY_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPhoneId(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIdentityV1* aId)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPhoneId called"));
	aId->iManufacturer=DMMTSY_PHONE_MANUFACTURER;
	aId->iModel=DMMTSY_PHONE_MODEL;
	aId->iRevision=DMMTSY_PHONE_REVISION;
	aId->iSerialNumber=DMMTSY_PHONE_SERIAL_NUMBER;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPhoneIdCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPhoneIdCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSubscriberId(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSubscriberId* aId)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSubscriberId called"));
	*aId=DMMTSY_PHONE_SUBSCRIBER_ID;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSubscriberIdCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSubscriberIdCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDTMFCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDTMFCaps called"));
	*aCaps=DMMTSY_PHONE_DTMF_CAPS1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyDTMFCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifyDTMFCapsChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyDTMFCapsChange called"));
		*aCaps=DMMTSY_PHONE_DTMF_CAPS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyDTMFCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyDTMFCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyStopInDTMFString(const TTsyReqHandle aTsyReqHandle)
	{
	if (!iNotifyStopInDTMFString++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyStopInDTMFString called"));
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyStopInDTMFStringCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyStopInDTMFStringCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ContinueDTMFStringSending(const TTsyReqHandle aTsyReqHandle, TBool *aContinue)
	{
	TInt err = KErrNone;
	if (!(*aContinue))
		err = KErrCorrupt;
	ReqCompleted(aTsyReqHandle,err);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SendDTMFTones(const TTsyReqHandle aTsyReqHandle, TDesC* aTones)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SendDTMFTones called"));
	if (aTones->Length()!=DMMTSY_PHONE_SEND_TONES_LENGTH)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else if (aTones->Compare(DMMTSY_PHONE_SEND_TONES)!=KErrNone)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SendDTMFTonesCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SendDTMFTonesCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ReadDTMFTones(const TTsyReqHandle aTsyReqHandle, TDes* aTones)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadDTMFTones called"));
	aTones->Copy(DMMTSY_PHONE_READ_TONES);
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ReadDTMFTonesCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadDTMFTonesCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::StartDTMFTone(const TTsyReqHandle aTsyReqHandle, TChar* aTone)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::StartDTMFTone called"));
	if (*aTone != DMMTSY_PHONE_SINGLE_TONE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::StopDTMFTone(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::StopDTMFTone called"));
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkCaps called"));
	*aCaps=DMMTSY_PHONE_NETWORK_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCurrentMode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNetworkMode* aMode)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentMode called"));
	*aMode=DMMTSY_PHONE_NETWORK_MODE1;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyModeChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNetworkMode* aMode)
	{
	if (!iNotifyModeChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyModeChange called"));
		*aMode=DMMTSY_PHONE_NETWORK_MODE2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyModeChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyModeChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetHomeNetwork(const TTsyReqHandle aTsyReqHandle, TDes8* aNetworkInfoPckg)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetHomeNetwork called"));
	RMobilePhone::TMobilePhoneNetworkInfoV1Pckg* networkInfoV1Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV1Pckg*)aNetworkInfoPckg;
	RMobilePhone::TMobilePhoneNetworkInfoV1& networkInfoV1 = (*networkInfoV1Pckg)();
	
	networkInfoV1.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
	networkInfoV1.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
	networkInfoV1.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
	networkInfoV1.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
	networkInfoV1.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
	networkInfoV1.iCdmaSID=DMMTSY_PHONE_HOME_NETWORK_SID;
	networkInfoV1.iAnalogSID=DMMTSY_PHONE_HOME_NETWORK_SID;
	networkInfoV1.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
	networkInfoV1.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
	networkInfoV1.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;

	if(networkInfoV1.ExtensionId() == KEtelExtMultimodeV8)
	{
		RMobilePhone::TMobilePhoneNetworkInfoV8Pckg* networkInfoV8Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV8Pckg*)aNetworkInfoPckg;
		RMobilePhone::TMobilePhoneNetworkInfoV8& networkInfoV8 = (*networkInfoV8Pckg)();
		networkInfoV8.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH;
		networkInfoV8.iHsdpaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSDPA_AVAILABILITY;
		networkInfoV8.iEgprsAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_EGPRS_AVAILABILITY;
		networkInfoV8.iHsupaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSUPA_AVAILABILITY;
	}

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetHomeNetworkCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetHomeNetworkCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCurrentNetwork(const TTsyReqHandle aTsyReqHandle, TDes8* aNetworkInfoPckg, RMobilePhone::TMobilePhoneLocationAreaV1* aArea)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetwork called"));
	RMobilePhone::TMobilePhoneNetworkInfoV1Pckg* networkInfoV1Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV1Pckg*)aNetworkInfoPckg;
	RMobilePhone::TMobilePhoneNetworkInfoV1& networkInfoV1 = (*networkInfoV1Pckg)();
	
	if(networkInfoV1.ExtensionId() == KETelExt3rdPartyV1)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetworkISV called"));
		RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1Pckg* networkInfoISVPckg = (RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1Pckg*)aNetworkInfoPckg;
		RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1& networkInfoISV = (*networkInfoISVPckg)();

		networkInfoISV.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE_ISV;
		networkInfoISV.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS_ISV;
		networkInfoISV.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND_ISV;
		networkInfoISV.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC_ISV;
		networkInfoISV.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID_ISV;
		networkInfoISV.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG_ISV;
		networkInfoISV.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME_ISV;
		networkInfoISV.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME_ISV;
		networkInfoISV.iCdmaSID=DMMTSY_PHONE_CURRENT_NETWORK_CDMASID_ISV;
		networkInfoISV.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_UTRAN_ISV;
		
		if(aArea)
			{
			aArea->iAreaKnown=DMMTSY_PHONE_CURRENT_NETWORK_AREAKNOWN_ISV;
			aArea->iLocationAreaCode=DMMTSY_PHONE_CURRENT_NETWORK_LAC_ISV;
			aArea->iCellId=DMMTSY_PHONE_CURRENT_NETWORK_CELLID_ISV;
			
			}	
		
		}
	else
		{
		if(networkInfoV1.ExtensionId() == KEtelExtMultimodeV8)
			{
			RMobilePhone::TMobilePhoneNetworkInfoV8Pckg* networkInfoV8Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV8Pckg*)aNetworkInfoPckg;
			RMobilePhone::TMobilePhoneNetworkInfoV8& networkInfoV8 = (*networkInfoV8Pckg)();
			networkInfoV8.iAccess = DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH1;
			
			networkInfoV8.iHsdpaAvailableIndicator = DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY1;
			networkInfoV8.iEgprsAvailableIndicator = DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY1;
			networkInfoV8.iHsupaAvailableIndicator = DMMTSY_PHONE_CURRENT_NETWORK_HSUPA_AVAILABILITY1;
			}
			

		else if(networkInfoV1.ExtensionId() == KEtelExtMultimodeV5)
			{
			RMobilePhone::TMobilePhoneNetworkInfoV5Pckg* networkInfoV5Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV5Pckg*)aNetworkInfoPckg;
			RMobilePhone::TMobilePhoneNetworkInfoV5& networkInfoV5 = (*networkInfoV5Pckg)();
			networkInfoV5.iAccess = DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_GSM;
			
			networkInfoV5.iHsdpaAvailableIndicator = DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY;
			networkInfoV5.iEgprsAvailableIndicator = DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY;
			}
			
		else if(networkInfoV1.ExtensionId() == KETelExtMultimodeV2)
			{
			RMobilePhone::TMobilePhoneNetworkInfoV2Pckg* networkInfoV2Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV2Pckg*)aNetworkInfoPckg;
			RMobilePhone::TMobilePhoneNetworkInfoV2& networkInfoV2 = (*networkInfoV2Pckg)();
			networkInfoV2.iAccess = DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_GSM;
			}
		
		networkInfoV1.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE1;
		networkInfoV1.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS1;
		networkInfoV1.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND1;
		networkInfoV1.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC1;
		networkInfoV1.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID1;
		networkInfoV1.iCdmaSID=DMMTSY_PHONE_CURRENT_NETWORK_SID;
		networkInfoV1.iAnalogSID=DMMTSY_PHONE_CURRENT_NETWORK_SID;
		networkInfoV1.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG1;
		networkInfoV1.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME1;
		networkInfoV1.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME1;

		if(aArea)
			{
			aArea->iAreaKnown=DMMTSY_PHONE_CURRENT_NETWORK_AREAKNOWN;
			aArea->iLocationAreaCode=DMMTSY_PHONE_CURRENT_NETWORK_LAC1;
			aArea->iCellId=DMMTSY_PHONE_CURRENT_NETWORK_CELLID1;
			}	
		}

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCurrentNetworkCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetworkCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCurrentNetworkChange(const TTsyReqHandle aTsyReqHandle, TDes8* aNetworkInfoPckg, RMobilePhone::TMobilePhoneLocationAreaV1* aArea)
	{
	if (!iNotifyCurrentNetworkChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCurrentNetworkChange called"));

		RMobilePhone::TMobilePhoneNetworkInfoV1Pckg* networkInfoPckg = (RMobilePhone::TMobilePhoneNetworkInfoV1Pckg*)aNetworkInfoPckg;
		RMobilePhone::TMobilePhoneNetworkInfoV1& networkInfo = (*networkInfoPckg)();
		
		if(networkInfo.ExtensionId() == KETelExt3rdPartyV1)
			{
			LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetworkISV called"));
			RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1Pckg* networkInfoISVPckg = (RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1Pckg*)aNetworkInfoPckg;
			RMobilePhone::TEtel3rdPartyMobileNetworkInfoV1& networkInfoISV = (*networkInfoISVPckg)();

			networkInfoISV.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE_ISV2;
			networkInfoISV.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS_ISV2;
			networkInfoISV.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND_ISV2;
			networkInfoISV.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC_ISV2;
			networkInfoISV.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID_ISV2;
			networkInfoISV.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG_ISV2;
			networkInfoISV.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME_ISV2;
			networkInfoISV.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME_ISV2;
			networkInfoISV.iCdmaSID=DMMTSY_PHONE_CURRENT_NETWORK_CDMASID_ISV2;
			networkInfoISV.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_UTRAN_ISV2;
					
			aArea->iAreaKnown=DMMTSY_PHONE_CURRENT_NETWORK_AREAKNOWN_ISV2;
			aArea->iLocationAreaCode=DMMTSY_PHONE_CURRENT_NETWORK_LAC_ISV2;
			aArea->iCellId=DMMTSY_PHONE_CURRENT_NETWORK_CELLID_ISV2;		
			
			}
		else
			{
			if(networkInfo.ExtensionId() == KETelExtMultimodeV2)
				{
				RMobilePhone::TMobilePhoneNetworkInfoV2Pckg* networkInfoV2Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV2Pckg*)aNetworkInfoPckg;
				RMobilePhone::TMobilePhoneNetworkInfoV2& networkInfoV2 = (*networkInfoV2Pckg)();
				networkInfoV2.iAccess = DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_GSM;
				//reset for V1
				iNotifyCurrentNetworkChange = 0;
				}		

			if(networkInfo.ExtensionId() == KEtelExtMultimodeV8)
				{
				RMobilePhone::TMobilePhoneNetworkInfoV8Pckg* networkInfoV8Pckg = (RMobilePhone::TMobilePhoneNetworkInfoV8Pckg*)aNetworkInfoPckg;
				RMobilePhone::TMobilePhoneNetworkInfoV8& networkInfoV8 = (*networkInfoV8Pckg)();
				networkInfoV8.iAccess = DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH2;
				//reset for V8
				networkInfoV8.iHsdpaAvailableIndicator= DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY2;
				networkInfoV8.iEgprsAvailableIndicator= DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY2;
				networkInfoV8.iHsupaAvailableIndicator= DMMTSY_PHONE_CURRENT_NETWORK_HSUPA_AVAILABILITY2;
				iNotifyCurrentNetworkChange = 0;
				}		

			networkInfo.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE2;
			networkInfo.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS2;
			networkInfo.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND2;
			networkInfo.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC2;
			networkInfo.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID2;
			networkInfo.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG2;
			networkInfo.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME2;
			networkInfo.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME2;

			if(aArea)
				{
				aArea->iAreaKnown=DMMTSY_PHONE_CURRENT_NETWORK_AREAKNOWN;
				aArea->iLocationAreaCode=DMMTSY_PHONE_CURRENT_NETWORK_LAC2;
				aArea->iCellId=DMMTSY_PHONE_CURRENT_NETWORK_CELLID2;
				}
				

			}
		//reset for etel3rd
		iNotifyCurrentNetworkChange = 0;

		AddDelayedReq(aTsyReqHandle,this);	
		}
	else
		{
		//reset for multiple completion test
		iNotifyCurrentNetworkChange = 0;
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCurrentNetworkChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCurrentNetworkChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCellInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aCellInfoPckg)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCellInfo called"));
	RMobilePhone::TMobilePhoneCellInfoV9Pckg* cellInfoPckg = (RMobilePhone::TMobilePhoneCellInfoV9Pckg*)aCellInfoPckg;
	RMobilePhone::TMobilePhoneCellInfoV9& cellInfo = (*cellInfoPckg)();
	
	cellInfo.iMode = DMMTSY_PHONE_CELL_INFO_MODE;
	cellInfo.iCellId = DMMTSY_PHONE_CELL_INFO_CELLID;
	cellInfo.iTimingAdvance = DMMTSY_PHONE_CELL_INFO_TIMING_ADVANCE;	
	cellInfo.iStatus = DMMTSY_PHONE_CELL_INFO_STATUS;
	
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCellInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCellInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCellInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCellInfoPckg)
	{
	if (!iNotifyCellInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCellInfoChange called"));

		RMobilePhone::TMobilePhoneCellInfoV9Pckg* cellInfoPckg = (RMobilePhone::TMobilePhoneCellInfoV9Pckg*)aCellInfoPckg;
		RMobilePhone::TMobilePhoneCellInfoV9& cellInfo = (*cellInfoPckg)();
	
		cellInfo.iMode = DMMTSY_PHONE_CELL_INFO_MODE2;
		cellInfo.iCellId = DMMTSY_PHONE_CELL_INFO_CELLID2;
		cellInfo.iTimingAdvance = DMMTSY_PHONE_CELL_INFO_TIMING_ADVANCE2;
		cellInfo.iStatus = DMMTSY_PHONE_CELL_INFO_STATUS2;
		
		AddDelayedReq(aTsyReqHandle,this);	
		}
	else
		{
		//reset for multiple completion test
		iNotifyCellInfoChange = 0;
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCellInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCellInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkRegistrationStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneRegistrationStatus* aStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkRegistrationStatus called"));
	*aStatus=DMMTSY_PHONE_REGISTRATION_STATUS1;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkRegistrationStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkRegistrationStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkRegistrationStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneRegistrationStatus* aStatus)
	{
	if(!iNotifyNetworkRegistrationStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkRegistrationStatusChange called"));
		*aStatus=DMMTSY_PHONE_REGISTRATION_STATUS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkRegistrationStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkRegistrationStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksPhase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessGetDetectedNetworksPhase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetDetectedNetworksPhase1L(const TTsyReqHandle aTsyReqHandle, 
													 RMobilePhone::TClientId* aClient, 
													 TInt* aBufSize)
	{
	// retrieve detected networks from phone, 
	// store each network as a list entry,
	// stream the list and then return size of this buffer to client
	CMobilePhoneNetworkList* list=CMobilePhoneNetworkList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneNetworkInfoV1 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_NETWORK_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE1;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS1;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND1;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC1;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID1;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG1;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME1;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME1;
			break;
		case 1:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE2;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS2;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND2;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC2;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID2;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG2;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME2;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME2;
			break;
		case 2:
		default:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetDetectedNetworks->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}



TInt CPhoneDMmTsy::GetDetectedNetworksPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetDetectedNetworks->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetDetectedNetworks
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetDetectedNetworks->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV2Phase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV2Phase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessGetDetectedNetworksV2Phase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetDetectedNetworksV2Phase1L(const TTsyReqHandle aTsyReqHandle, 
													 RMobilePhone::TClientId* aClient, 
													 TInt* aBufSize)
	{
	// Retrieve detected networks from phone, 
	// Store each network as a list entry of type TMobilePhoneNetworkInfoV2,
	// Stream the list and then return size of this buffer to client
	CMobilePhoneNetworkListV2* list=CMobilePhoneNetworkListV2::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneNetworkInfoV2 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_NETWORK_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE1;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS1;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND1;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC1;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID1;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG1;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME1;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME1;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH1;
			break;
		case 1:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE2;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS2;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND2;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC2;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID2;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG2;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME2;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME2;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH2;
			break;
		case 2:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH;
			break;
		case 3:
		default:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH3;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetDetectedNetworks->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}



TInt CPhoneDMmTsy::GetDetectedNetworksV2Phase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV2Phase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetDetectedNetworks->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV2Cancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV2Cancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetDetectedNetworks
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetDetectedNetworks->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

//
// GetDetectedNetworksV8 //
//
TInt CPhoneDMmTsy::GetDetectedNetworksV8Phase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV8Phase1 called"));
	TInt ret=KErrNone;
	TRAPD(leaveCode, ret=ProcessGetDetectedNetworksV8Phase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetDetectedNetworksV8Phase1L(const TTsyReqHandle aTsyReqHandle, 
					RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	// Retrieve detected networks from phone, 
	// Store each network as a list entry of type TMobilePhoneNetworkInfoV8,
	// Stream the list and then return size of this buffer to client
	CMobilePhoneNetworkListV8* list=CMobilePhoneNetworkListV8::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneNetworkInfoV8 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_NETWORK_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE1;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS1;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND1;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC1;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID1;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG1;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME1;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME1;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH1;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY1;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY1;
			entry.iHsupaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSUPA_AVAILABILITY1;
			break;
		case 1:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE2;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS2;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND2;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC2;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID2;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG2;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME2;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME2;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH2;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY2;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY2;
			entry.iHsupaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSUPA_AVAILABILITY2;
			break;
		case 2:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSDPA_AVAILABILITY;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_EGPRS_AVAILABILITY;
			entry.iHsupaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSUPA_AVAILABILITY;
			break;
		case 3:
		default:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH3;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSDPA_AVAILABILITY;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_EGPRS_AVAILABILITY;
			entry.iHsupaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSUPA_AVAILABILITY;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}
	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetDetectedNetworks->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV8Phase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV8Phase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetDetectedNetworks->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV8Cancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV8Cancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetDetectedNetworks
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetDetectedNetworks->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}


//
// GetDetectedNetworksV5 //
//
TInt CPhoneDMmTsy::GetDetectedNetworksV5Phase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV5Phase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessGetDetectedNetworksV5Phase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetDetectedNetworksV5Phase1L(const TTsyReqHandle aTsyReqHandle, 
													 RMobilePhone::TClientId* aClient, 
													 TInt* aBufSize)
	{
	// Retrieve detected networks from phone, 
	// Store each network as a list entry of type TMobilePhoneNetworkInfoV2,
	// Stream the list and then return size of this buffer to client
	CMobilePhoneNetworkListV5* list=CMobilePhoneNetworkListV5::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneNetworkInfoV5 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_NETWORK_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE1;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS1;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND1;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC1;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID1;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG1;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME1;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME1;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH1;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY1;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY1;
			break;
		case 1:
			entry.iMode=DMMTSY_PHONE_CURRENT_NETWORK_MODE2;
			entry.iStatus=DMMTSY_PHONE_CURRENT_NETWORK_STATUS2;
			entry.iBandInfo=DMMTSY_PHONE_CURRENT_NETWORK_BAND2;
			entry.iCountryCode=DMMTSY_PHONE_CURRENT_NETWORK_MCC2;
			entry.iNetworkId=DMMTSY_PHONE_CURRENT_NETWORK_ID2;
			entry.iDisplayTag=DMMTSY_PHONE_CURRENT_NETWORK_TAG2;
			entry.iShortName=DMMTSY_PHONE_CURRENT_NETWORK_SHORT_NAME2;
			entry.iLongName=DMMTSY_PHONE_CURRENT_NETWORK_LONG_NAME2;
			entry.iAccess=DMMTSY_PHONE_CURRENT_NETWORK_ACCESS_TECH2;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_HSDPA_AVAILABILITY2;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_CURRENT_NETWORK_EGPRS_AVAILABILITY2;
			break;
		case 2:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSDPA_AVAILABILITY;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_EGPRS_AVAILABILITY;
			break;
		case 3:
		default:
			entry.iMode=DMMTSY_PHONE_HOME_NETWORK_MODE;
			entry.iStatus=DMMTSY_PHONE_HOME_NETWORK_STATUS;
			entry.iBandInfo=DMMTSY_PHONE_HOME_NETWORK_BAND;
			entry.iCountryCode=DMMTSY_PHONE_HOME_NETWORK_MCC;
			entry.iNetworkId=DMMTSY_PHONE_HOME_NETWORK_ID;
			entry.iDisplayTag=DMMTSY_PHONE_HOME_NETWORK_TAG;
			entry.iShortName=DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
			entry.iLongName=DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
			entry.iAccess=DMMTSY_PHONE_HOME_NETWORK_ACCESS_TECH3;
			entry.iHsdpaAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_HSDPA_AVAILABILITY;
			entry.iEgprsAvailableIndicator=DMMTSY_PHONE_HOME_NETWORK_EGPRS_AVAILABILITY;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetDetectedNetworks->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV5Phase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV5Phase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetDetectedNetworks->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetDetectedNetworksV5Cancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDetectedNetworksV5Cancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetDetectedNetworks
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetDetectedNetworks->Count(); ++i)
		{
		read = iGetDetectedNetworks->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetDetectedNetworks->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

//

TInt CPhoneDMmTsy::GetNetworkSelectionSetting(const TTsyReqHandle aTsyReqHandle, TDes8* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkSelectionSetting called"));
	RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg* selectionPckg = (RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg*)aSetting;
	RMobilePhone::TMobilePhoneNetworkSelectionV1& selection = (*selectionPckg)();

	selection.iMethod = DMMTSY_PHONE_NETWORK_SELECTION_METHOD1;
	selection.iBandClass = DMMTSY_PHONE_NETWORK_SELECTION_BAND1;
	selection.iOperationMode = DMMTSY_PHONE_NETWORK_SELECTION_OPERATION1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetNetworkSelectionSetting(const TTsyReqHandle aTsyReqHandle, TDes8* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetNetworkSelectionSetting called"));
	RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg* selectionPckg = (RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg*)aSetting;
	RMobilePhone::TMobilePhoneNetworkSelectionV1& selection = (*selectionPckg)();

	if ((selection.iMethod != DMMTSY_PHONE_NETWORK_SELECTION_METHOD2) ||
	    (selection.iBandClass != DMMTSY_PHONE_NETWORK_SELECTION_BAND2) ||
	    (selection.iOperationMode != DMMTSY_PHONE_NETWORK_SELECTION_OPERATION2))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetNetworkSelectionSettingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetNetworkSelectionSettingCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkSelectionSettingChange(const TTsyReqHandle aTsyReqHandle, TDes8* aSetting)
	{
	if(!iNotifyNetworkSelectionSettingChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkSelectionSettingChange called"));

		RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg* selectionPckg = (RMobilePhone::TMobilePhoneNetworkSelectionV1Pckg*)aSetting;
		RMobilePhone::TMobilePhoneNetworkSelectionV1& selection = (*selectionPckg)();
		
		selection.iMethod = DMMTSY_PHONE_NETWORK_SELECTION_METHOD1;
		selection.iBandClass = DMMTSY_PHONE_NETWORK_SELECTION_BAND1;
		selection.iOperationMode = DMMTSY_PHONE_NETWORK_SELECTION_OPERATION1;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkSelectionSettingChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkSelectionSettingChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SelectNetwork(const TTsyReqHandle aTsyReqHandle, 
								 TBool* aIsManual, 
								 RMobilePhone::TMobilePhoneNetworkManualSelection* aManualSelection)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SelectNetwork called"));
	
	if (*aIsManual==DMMTSY_PHONE_MANUAL_SELECTION)
		{
		if ((aManualSelection->iCountry != DMMTSY_PHONE_COUNTRY_ID) ||
		    (aManualSelection->iNetwork != DMMTSY_PHONE_NETWORK_ID))

			ReqCompleted(aTsyReqHandle,KErrCorrupt);
		else
			AddDelayedReq(aTsyReqHandle,this);
		}
	else
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	
	return KErrNone;
	}

TInt CPhoneDMmTsy::SelectNetworkCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SelectNetworkCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkTimeInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNITZ* aDateTime)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkTimeInfo called"));

	aDateTime->iNitzFieldsUsed = DMMTSY_PHONE_NWTINFO_NITZ_USED;
	aDateTime->Set(DMMTSY_PHONE_NWTINFO_YEAR,DMMTSY_PHONE_NWTINFO_MONTH,DMMTSY_PHONE_NWTINFO_DAY,
		DMMTSY_PHONE_NWTINFO_HOUR, DMMTSY_PHONE_NWTINFO_MINUTE, DMMTSY_PHONE_NWTINFO_SECOND,
		DMMTSY_PHONE_NWTINFO_MICRO);
	aDateTime->iTimeZone = DMMTSY_PHONE_NWTINFO_TIMEZONE;
	aDateTime->iLongNetworkId = DMMTSY_PHONE_NWTINFO_LONG_ID;
	aDateTime->iShortNetworkId = DMMTSY_PHONE_NWTINFO_SHORT_ID;
	aDateTime->iDST = DMMTSY_PHONE_NWTINFO_DST;

	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkTimeInfoChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNITZ* aDateTime)
	{
	if(!iNotifyNetworkTimeInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkTimeInfoChange called"));

		aDateTime->iNitzFieldsUsed = DMMTSY_PHONE_NWTINFO_NITZ_USED;
		aDateTime->Set(DMMTSY_PHONE_NWTINFO_YEAR,DMMTSY_PHONE_NWTINFO_MONTH,DMMTSY_PHONE_NWTINFO_DAY,
			DMMTSY_PHONE_NWTINFO_HOUR, DMMTSY_PHONE_NWTINFO_MINUTE, DMMTSY_PHONE_NWTINFO_SECOND,
			DMMTSY_PHONE_NWTINFO_MICRO);
		aDateTime->iTimeZone = DMMTSY_PHONE_NWTINFO_TIMEZONE;
		aDateTime->iLongNetworkId = DMMTSY_PHONE_NWTINFO_LONG_ID;
		aDateTime->iShortNetworkId = DMMTSY_PHONE_NWTINFO_SHORT_ID;
		aDateTime->iDST = DMMTSY_PHONE_NWTINFO_DST;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkTimeInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkTimeInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetServiceProviderName(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneServiceProviderNameV2* aName)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetServiceProviderName called"));

	aName->iDisplayReq = DMMTSY_PHONE_DISPREQ;
	aName->iSPName = DMMTSY_PHONE_SPN_NAME;
	aName->iPLMNField = DMMTSY_PHONE_PLMN_FIELD;

	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetServiceProviderNameCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetServiceProviderNameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetDefaultPrivacy(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetDefaultPrivacy called"));

	*aSetting = DMMTSY_PHONE_PRIVACY_SETTING1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetDefaultPrivacy(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetDefaultPrivacy called"));

	if (*aSetting != DMMTSY_PHONE_PRIVACY_SETTING1)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetDefaultPrivacyCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetDefaultPrivacyCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyDefaultPrivacyChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aSetting)
	{
	if(!iNotifyDefaultPrivacyChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyDefaultPrivacyChange called"));

		*aSetting = DMMTSY_PHONE_PRIVACY_SETTING2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyDefaultPrivacyChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyDefaultPrivacyChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCallServiceCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallServiceCaps called"));
	*aCaps=DMMTSY_PHONE_CALL_SERVICE_CAPS1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallServiceCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifyCallServiceCaps++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallServiceCapsChange called"));
		*aCaps=DMMTSY_PHONE_CALL_SERVICE_CAPS2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallServiceCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallServiceCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ProgramFeatureCodeString(const TTsyReqHandle aTsyReqHandle, 
											TDesC* aFCString, RMobilePhone::TNetworkServiceAndAction *aFeatureCode)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ProgramFeatureCodeString called"));
	if ((aFCString->Compare(DMMTSY_PHONE_FEATURE_CODE) != 0) ||
	    (aFeatureCode->iService != DMMTSY_PHONE_NETWORK_SERVICE) || 
		(aFeatureCode->iAction != DMMTSY_PHONE_NETWORK_SERVICE_ACTION))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::ProgramFeatureCodeStringCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ProgramFeatureCodeStringCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetFeatureCodeString(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TNetworkServiceAndAction *aFeatureCode, TDes *aFCString)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetFeatureCodeString called"));
	if	(aFeatureCode->iService!=DMMTSY_PHONE_NETWORK_SERVICE2 || aFeatureCode->iAction!=DMMTSY_PHONE_NETWORK_SERVICE_ACTION2)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		*aFCString=DMMTSY_PHONE_FEATURE_CODE2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetFeatureCodeStringCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetFeatureCodeStringCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SendNetworkServiceRequest(const TTsyReqHandle aTsyReqHandle, TDesC* aString)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SendNetworkServiceRequest called"));
	if (aString->Compare(DMMTSY_PHONE_NETWORK_SERVICE_REQUEST)!=0)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SendNetworkServiceRequestCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SendNetworkServiceRequestCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCallForwardingStatusPhase1(const TTsyReqHandle aTsyReqHandle, 
												 CRetrieveMobilePhoneCFList::TGetCallForwardingRequest* aReqData, 
												 TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallForwardingStatusPhase1 called"));
	TInt ret=KErrNone;

	if ( ( (aReqData->iCondition==DMMTSY_PHONE_CF_CONDITION_CFU) &&
		   (aReqData->iLocation==DMMTSY_PHONE_CF_LOCATION) &&
		   (aReqData->iServiceGroup==DMMTSY_PHONE_CF_SERVICE_GROUP_ALL) ) ||
		 ( (aReqData->iCondition==DMMTSY_PHONE_CF_CONDITION_CFU) &&
		   (aReqData->iServiceGroup==DMMTSY_PHONE_CF_SERVICE_GROUP_FAX) &&
    	   (aReqData->iLocation==DMMTSY_PHONE_CF_CACHELOCATION) ) )		
		{
		TInt leaveCode=KErrNone;
		TRAP(leaveCode, ret=ProcessGetCallForwardingStatusPhase1L(aTsyReqHandle, aReqData, aBufSize););
		if (leaveCode != KErrNone)
			ReqCompleted(aTsyReqHandle,leaveCode);
		}
		else
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetCallForwardingStatusPhase1L(const TTsyReqHandle aTsyReqHandle, 
														 CRetrieveMobilePhoneCFList::TGetCallForwardingRequest* aReqData, 
														 TInt* aBufSize)
	{
	// retrieve call forwarding status of each line from phone, 
	// store each CF status response as a list entry,
	// stream the list and then return size of this buffer to client

	CMobilePhoneCFList* list=CMobilePhoneCFList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneCFInfoEntryV1 entry;
	RMobilePhone::TMobileService servicegroup = aReqData->iServiceGroup;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_CF_ENTRY_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iCondition=DMMTSY_PHONE_CF_CONDITION_CFU;
			entry.iServiceGroup=DMMTSY_PHONE_CF_SERVICE_GROUP_VOICE;
			entry.iStatus=DMMTSY_PHONE_CF_NOT_ACTIVE;
			entry.iNumber.iTelNumber=DMMTSY_PHONE_TEL_NUMBER;
			entry.iTimeout=DMMTSY_PHONE_CF_TIMEOUT;
			break;
		case 1:
			entry.iCondition=DMMTSY_PHONE_CF_CONDITION_CFU;
			entry.iServiceGroup=DMMTSY_PHONE_CF_SERVICE_GROUP_DATA;
			entry.iStatus=DMMTSY_PHONE_CF_ACTIVE;
			entry.iNumber.iTelNumber=DMMTSY_PHONE_TEL_NUMBER;
			entry.iTimeout=DMMTSY_PHONE_CF_TIMEOUT;
			break;
		case 2:
			entry.iCondition=DMMTSY_PHONE_CF_CONDITION_CFU;
			entry.iServiceGroup=DMMTSY_PHONE_CF_SERVICE_GROUP_FAX;
			entry.iStatus=DMMTSY_PHONE_CF_ACTIVE;
			entry.iNumber.iTelNumber=DMMTSY_PHONE_TEL_NUMBER;
			entry.iTimeout=DMMTSY_PHONE_CF_TIMEOUT;
			break;
		case 3:
		default:
			entry.iCondition=DMMTSY_PHONE_CF_CONDITION_CFU;
			entry.iServiceGroup=DMMTSY_PHONE_CF_SERVICE_GROUP_AUXVOICE;
			entry.iStatus=DMMTSY_PHONE_CF_UNKNOWN;
			entry.iTimeout=-1;
			break;
			}
			// Add the entry into the list, at the next empty location
		if( (servicegroup == DMMTSY_PHONE_CF_SERVICE_GROUP_ALL) || (servicegroup == entry.iServiceGroup) )
		list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(&(aReqData->iClient),aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC

	iGetCFStatus->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetCallForwardingStatusPhase2(const TTsyReqHandle aTsyReqHandle, 
												 RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallForwardingStatusPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetCFStatus->Count(); ++i)
		{
		read = iGetCFStatus->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetCFStatus->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetCallForwardingStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallForwardingStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetCFStatus
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetCFStatus->Count(); ++i)
		{
		read = iGetCFStatus->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetCFStatus->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallForwardingStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCFCondition* aCondition)
	{
	if(!iNotifyCallForwardingStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallForwardingStatusChange called"));
		*aCondition=DMMTSY_PHONE_CF_CONDITION_ALL;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallForwardingStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallForwardingStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallForwardingStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCFCondition* aCondition, RMobilePhone::TMobilePhoneCFChangeV1* aInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallForwardingStatus called"));
	if ((*aCondition!=DMMTSY_PHONE_CF_CONDITION_CFNRy) ||
		(aInfo->iServiceGroup!=DMMTSY_PHONE_CF_SERVICE_GROUP_VOICE) ||
		(aInfo->iAction!=DMMTSY_PHONE_CF_SETTING) ||
		(aInfo->iNumber.iTelNumber!=DMMTSY_PHONE_TEL_NUMBER) ||
		(aInfo->iTimeout!=DMMTSY_PHONE_CF_TIMEOUT))

		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallForwardingStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallForwardingStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallForwardingActive(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobileService* aServiceGroup, RMobilePhone::TMobilePhoneCFActive* aActive)
	{
	if(!iNotifyCallForwardingActive++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallForwardingActive called"));
		*aActive=DMMTSY_PHONE_CF_ACTIVE_TYPE;
		*aServiceGroup=DMMTSY_PHONE_CF_SERVICE_GROUP_FAX;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallForwardingActiveCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallForwardingActiveCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIdentityServiceStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TIdServiceAndLocation *aInfo,
											RMobilePhone::TMobilePhoneIdServiceStatus* aStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIdentityServiceStatus called"));
	if (aInfo->iLocation != DMMTSY_PHONE_ID_LOCATION || aInfo->iService != DMMTSY_PHONE_ID_SERVICE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		*aStatus = DMMTSY_PHONE_ID_STATUS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIdentityServiceStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIdentityServiceStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCallBarringPhase1(const TTsyReqHandle aTsyReqHandle, 
												 CRetrieveMobilePhoneCBList::TGetCallBarringRequest* aReqData, 
												 TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallBarringPhase1 called"));
	TInt ret=KErrNone;

	if ((aReqData->iCondition!=DMMTSY_PHONE_CB_CONDITION) ||
		(aReqData->iLocation!=DMMTSY_PHONE_CB_LOCATION))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		TInt leaveCode=KErrNone;
		TRAP(leaveCode, ret=ProcessGetCallBarringPhase1L(aTsyReqHandle, aReqData, aBufSize));
		if (leaveCode != KErrNone)
			ReqCompleted(aTsyReqHandle,leaveCode);
		}
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetCallBarringPhase1L(const TTsyReqHandle aTsyReqHandle, 
														 CRetrieveMobilePhoneCBList::TGetCallBarringRequest* aReqData,
														 TInt* aBufSize)
	{
	// retrieve call forwarding status of each line from phone, 
	// store each CB status response as a list entry,
	// stream the list and then return size of this buffer to client

	CMobilePhoneCBList* list=CMobilePhoneCBList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneCBInfoEntryV1 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_CALL_BARRING_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iCondition = DMMTSY_PHONE_CB_CONDITION0;
			entry.iServiceGroup = DMMTSY_PHONE_CB_SG0;
			entry.iStatus = DMMTSY_PHONE_CB_STATUS0;
			break;
		case 1:
			entry.iCondition = DMMTSY_PHONE_CB_CONDITION1;
			entry.iServiceGroup = DMMTSY_PHONE_CB_SG1;
			entry.iStatus = DMMTSY_PHONE_CB_STATUS1;
			break;
		case 2:
			entry.iCondition = DMMTSY_PHONE_CB_CONDITION2;
			entry.iServiceGroup = DMMTSY_PHONE_CB_SG2;
			entry.iStatus = DMMTSY_PHONE_CB_STATUS2;
			break;
		case 3:
		default:
			entry.iCondition = DMMTSY_PHONE_CB_CONDITION3;
			entry.iServiceGroup = DMMTSY_PHONE_CB_SG3;
			entry.iStatus = DMMTSY_PHONE_CB_STATUS3;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(&(aReqData->iClient),aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetCB->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetCallBarringPhase2(const TTsyReqHandle aTsyReqHandle, 
												 RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallBarringPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get call barring attempt from this client
	for (TInt i=0; i<iGetCB->Count(); ++i)
		{
		read = iGetCB->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetCB->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}
	
TInt CPhoneDMmTsy::GetCallBarringCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallBarringCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetCB
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetCB->Count(); ++i)
		{
		read = iGetCB->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetCB->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallBarringStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCBCondition *aCondition, RMobilePhone::TMobilePhoneCBChangeV1* aInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallBarringStatus called"));
	if (*aCondition != DMMTSY_PHONE_CB_CONDITION ||  aInfo->iAction != DMMTSY_PHONE_CB_ACTION ||
		(aInfo->iPassword.Compare(DMMTSY_PHONE_CB_PASSWORD) != 0))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallBarringStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallBarringStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallBarringStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCBCondition* aCondition)
	{
	if (!iNotifyCallBarringStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallBarringStatusChange called"));
		*aCondition = DMMTSY_PHONE_CB_CONDITION;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallBarringStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallBarringStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::SetCallBarringPassword(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePasswordChangeV1* aPassword)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallBarringPassword called"));
	if ((aPassword->iOldPassword.Compare(DMMTSY_PHONE_CB_PASSWORD) != 0) ||
		(aPassword->iNewPassword.Compare(DMMTSY_PHONE_CB_NEW_PASSWORD) != 0))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallBarringPasswordCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallBarringPasswordCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetSSPassword(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePasswordChangeV2* aPassword, TInt* aService)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetSSPassword called"));
	if ((aPassword->iOldPassword.Compare(DMMTSY_PHONE_CB_PASSWORD) != 0) ||
		(aPassword->iNewPassword.Compare(DMMTSY_PHONE_CB_NEW_PASSWORD) != 0) ||
		(aPassword->iVerifiedPassword.Compare(DMMTSY_PHONE_CB_VERIFIED_PASSWORD) != 0) &&
		aService != DMMTSY_PHONE_CB_ALL_SERVICES )
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetSSPasswordCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetSSPasswordCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}



TInt CPhoneDMmTsy::GetCallWaitingPhase1(const TTsyReqHandle aTsyReqHandle, 
												 CRetrieveMobilePhoneCWList::TGetCallWaitingRequest* aReqData, 
												 TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallWaitingPhase1 called"));
	TInt ret=KErrNone;

	if (aReqData->iLocation!=DMMTSY_PHONE_CW_LOCATION)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		TInt leaveCode=KErrNone;
		TRAP(leaveCode, ret=ProcessGetCallWaitingPhase1L(aTsyReqHandle, aReqData, aBufSize));
		if (leaveCode != KErrNone)
			ReqCompleted(aTsyReqHandle,leaveCode);
		}
	return ret;
	}

TInt CPhoneDMmTsy::ProcessGetCallWaitingPhase1L(const TTsyReqHandle aTsyReqHandle, 
														 CRetrieveMobilePhoneCWList::TGetCallWaitingRequest* aReqData, 
														 TInt* aBufSize)
	{
	// retrieve call forwarding status of each line from phone,
	// store each CW status response as a list entry,
	// stream the list and then return size of this buffer to client

	CMobilePhoneCWList* list=CMobilePhoneCWList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneCWInfoEntryV1 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_CW_ENTRY_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iServiceGroup = DMMTSY_PHONE_CW_SG0;
			entry.iStatus = DMMTSY_PHONE_CW_STATUS0;
			break;
		case 1:
			entry.iServiceGroup = DMMTSY_PHONE_CW_SG1;
			entry.iStatus = DMMTSY_PHONE_CW_STATUS1;
			break;
		case 2:
			entry.iServiceGroup = DMMTSY_PHONE_CW_SG2;
			entry.iStatus = DMMTSY_PHONE_CW_STATUS2;
			break;
		case 3:
		default:
			entry.iServiceGroup = DMMTSY_PHONE_CW_SG3;
			entry.iStatus = DMMTSY_PHONE_CW_STATUS3;
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(&(aReqData->iClient),aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetCWStatus->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetCallWaitingPhase2(const TTsyReqHandle aTsyReqHandle, 
												 RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallWaitingPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get call waiting attempt from this client
	for (TInt i=0; i<iGetCWStatus->Count(); ++i)
		{
		read = iGetCWStatus->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetCWStatus->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetCallWaitingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallWaitingCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetCWStatus
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetCWStatus->Count(); ++i)
		{
		read = iGetCWStatus->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetCWStatus->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}


TInt CPhoneDMmTsy::SetCallWaitingStatus(const TTsyReqHandle aTsyReqHandle,
										RMobilePhone::TMobileService* aServiceGroup,
										RMobilePhone::TMobilePhoneServiceAction *aAction)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallWaitingStatus called"));
	if ((*aAction != DMMTSY_PHONE_CW_SET_STATUS_ACTION) ||
		(*aServiceGroup != DMMTSY_PHONE_CW_SG0))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetCallWaitingStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetCallWaitingStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallWaitingStatusChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCWStatus)
	{
	if (!iNotifyCallWaitingStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallWaitingStatusChange called"));
		RMobilePhone::TMobilePhoneCWInfoEntryV1Pckg *cwInfoPckg = STATIC_CAST(RMobilePhone::TMobilePhoneCWInfoEntryV1Pckg*,aCWStatus);
		RMobilePhone::TMobilePhoneCWInfoEntryV1 &cwInfo = (*cwInfoPckg)();
		cwInfo.iServiceGroup = DMMTSY_PHONE_CW_SG0;
		cwInfo.iStatus = DMMTSY_PHONE_CW_STATUS0;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCallWaitingStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCallWaitingStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCCBSStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCCBSStatus* aCcbsStatus, RMobilePhone::TMobileInfoLocation* aLocation)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCCBSStatus called"));
	if (*aLocation != DMMTSY_PHONE_CCC_LOCATION)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		*aCcbsStatus = DMMTSY_PHONE_CCC_STATUS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCCBSStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCCBSStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCCBSStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCCBSStatus* aCcbsStatus)
	{
	if (!iNotifyCCBSStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCCBSStatusChange called"));
		*aCcbsStatus = DMMTSY_PHONE_CCC_STATUS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCCBSStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCCBSStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCCBSRecall(const TTsyReqHandle aTsyReqHandle, TDes8* aCCBSEntry)
	{
//	_asm{int 3};
	if (!iNotifyCCBSRecall++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCCBSRecall called"));
		
		RMobilePhone::TMobilePhoneCCBSEntryV1Pckg* ccbsPckg = STATIC_CAST(RMobilePhone::TMobilePhoneCCBSEntryV1Pckg*,aCCBSEntry);
		RMobilePhone::TMobilePhoneCCBSEntryV1& ccbs = (*ccbsPckg)();

		ccbs.iCcbsIndex=DMMTSY_PHONE_CCC_INDEX1;
		ccbs.iServiceGroup=DMMTSY_PHONE_CCC_SERVICE_GROUP0;
		ccbs.iDestination.iNumberPlan=DMMTSY_PHONE_CCC_DESTINATION_NP0;
		ccbs.iDestination.iTelNumber= DMMTSY_PHONE_CCC_DESTINATION_NUM0;
		ccbs.iDestination.iTypeOfNumber = DMMTSY_PHONE_CCC_DESTINATION_TON0;
		
		if(ccbs.ExtensionId()==KETelExtMultimodeV2)
			{
			RMobilePhone::TMobilePhoneCCBSEntryV2Pckg* ccbsPckgV2 = STATIC_CAST(RMobilePhone::TMobilePhoneCCBSEntryV2Pckg*,aCCBSEntry);
			RMobilePhone::TMobilePhoneCCBSEntryV2& ccbs2 = (*ccbsPckgV2)();
			
			// Set that the network has informed us that the CCBS request can proceed
			ccbs2.iEvent = DMMTSY_PHONE_CCC_DESTINATION_CCBS_RECEIVED;
			//reset for multiple complete V1
			iNotifyCCBSRecall = 0;
			}

		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		{
			// reset for the V2 test 
			iNotifyCCBSRecall=0;
		}
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyCCBSRecallCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCCBSRecallCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::AcceptCCBSRecall(const TTsyReqHandle aTsyReqHandle, TInt* aIndex, TDes* aCallName)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AcceptCCBSRecall called"));
	if(*aIndex!=DMMTSY_PHONE_CCC_INDEX1)
		return KErrCorrupt;
	*aCallName = DMMTSY_PHONE_CCC_CALLNAME0;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::AcceptCCBSRecallCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AcceptCCBSRecallCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::RefuseCCBSRecall(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::RefuseCCBSRecall called"));
	if(*aIndex!=DMMTSY_PHONE_CCC_INDEX1)
		return KErrCorrupt;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}


TInt CPhoneDMmTsy::DeactivateCCBS(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
	{
	if (*aIndex== -1)		//-1 means deactivate all
		return KErrEtelCallNotActive;
	if(*aIndex!=DMMTSY_PHONE_CCC_INDEX1) 
		return KErrCorrupt;
		
	LOGTEXT(_L8("CPhoneDMmTsy::DeactivateAllCCBS called"));
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::DeactivateCCBSCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::DeactivateAllCCBSCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCallCompletionPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aReqData, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallCompletionPhase1 called"));
	TInt ret = KErrNone;

	TRAPD(leaveCode, ret=ProcessGetCallCompletionPhase1L(aTsyReqHandle, aReqData, aBufSize));
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;	
	}

TInt CPhoneDMmTsy::ProcessGetCallCompletionPhase1L(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClientId, TInt* aBufSize)
	{
	CMobilePhoneCcbsList* list=CMobilePhoneCcbsList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePhoneCCBSEntryV1 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_PHONE_CCC_ENTRY_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iServiceGroup = DMMTSY_PHONE_CCC_SERVICE_GROUP0;
			entry.iCcbsIndex = DMMTSY_PHONE_CCC_INDEX0;
			entry.iDestination.iTypeOfNumber = DMMTSY_PHONE_CCC_DESTINATION_TON0;
			entry.iDestination.iNumberPlan = DMMTSY_PHONE_CCC_DESTINATION_NP0;
			entry.iDestination.iTelNumber = DMMTSY_PHONE_CCC_DESTINATION_NUM0;
			break;
		case 1:
			entry.iServiceGroup = DMMTSY_PHONE_CCC_SERVICE_GROUP1;
			entry.iCcbsIndex = DMMTSY_PHONE_CCC_INDEX1;
			entry.iDestination.iTypeOfNumber = DMMTSY_PHONE_CCC_DESTINATION_TON1;
			entry.iDestination.iNumberPlan = DMMTSY_PHONE_CCC_DESTINATION_NP1;
			entry.iDestination.iTelNumber = DMMTSY_PHONE_CCC_DESTINATION_NUM1;
			break;
		case 2:
			entry.iServiceGroup = DMMTSY_PHONE_CCC_SERVICE_GROUP2;
			entry.iCcbsIndex = DMMTSY_PHONE_CCC_INDEX2;
			entry.iDestination.iTypeOfNumber = DMMTSY_PHONE_CCC_DESTINATION_TON2;
			entry.iDestination.iNumberPlan = DMMTSY_PHONE_CCC_DESTINATION_NP2;
			entry.iDestination.iTelNumber = DMMTSY_PHONE_CCC_DESTINATION_NUM2;
			break;
		case 3:
			entry.iServiceGroup = DMMTSY_PHONE_CCC_SERVICE_GROUP3;
			entry.iCcbsIndex = DMMTSY_PHONE_CCC_INDEX3;
			entry.iDestination.iTypeOfNumber = DMMTSY_PHONE_CCC_DESTINATION_TON3;
			entry.iDestination.iNumberPlan = DMMTSY_PHONE_CCC_DESTINATION_NP3;
			entry.iDestination.iTelNumber = DMMTSY_PHONE_CCC_DESTINATION_NUM3;
		default:
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClientId,aTsyReqHandle);
	CleanupStack::PushL(read);

	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetCcbsRequests->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCallCompletionPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallCompletionPhase2 called"));
	CListReadAllAttempt* read=NULL;
	
	for (TInt i=0; i<iGetCcbsRequests->Count(); ++i)
		{
		read = iGetCcbsRequests->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetCcbsRequests->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}

TInt CPhoneDMmTsy::GetCallCompletionCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallWaitingCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetCcbsRequests
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetCcbsRequests->Count(); ++i)
		{
		read = iGetCcbsRequests->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetCcbsRequests->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAlternatingCallCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAlternatingCallCaps called"));

	*aCaps = DMMTSY_PHONE_ALTERNATING_CALL_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAlternatingCallCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifyAlternatingCallCapsChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyAlternatingCallCapsChange called"));
		*aCaps = DMMTSY_PHONE_ALTERNATING_CALL_CAPS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAlternatingCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAlternatingCallCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAlternatingCallMode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneAlternatingCallMode* aMode, RMobilePhone::TMobileService* aFirstService)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAlternatingCallMode called"));
	*aMode = DMMTSY_PHONE_ALTERNATING_CALL_MODE;
	*aFirstService = DMMTSY_PHONE_ALTERNATING_CALL_SERVICE;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetAlternatingCallMode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneAlternatingCallMode* aMode, RMobilePhone::TMobileService* aFirstService)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetAlternatingCallMode called"));
	if (*aMode != DMMTSY_PHONE_ALTERNATING_CALL_MODE || *aFirstService != DMMTSY_PHONE_ALTERNATING_CALL_SERVICE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetAlternatingCallModeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetAlternatingCallModeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAlternatingCallModeChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneAlternatingCallMode* aMode,RMobilePhone::TMobileService* aFirstService)
	{
	if (!iNotifyAlternatingCallModeChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyAlternatingCallModeChange called"));
		*aMode = DMMTSY_PHONE_ALTERNATING_CALL_MODE;
		*aFirstService = DMMTSY_PHONE_ALTERNATING_CALL_SERVICE;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAlternatingCallModeChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAlternatingCallModeChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetALSLine(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneALSLine* aALSLine)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetALSLine called"));
	*aALSLine = DMMTSY_PHONE_ALS_LINE;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetALSLine(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneALSLine* aALSLine)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetALSLine called"));
	if (*aALSLine != DMMTSY_PHONE_ALS_LINE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetALSLineCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetALSLineCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}


TInt CPhoneDMmTsy::NotifyALSLineChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneALSLine* aALSLine)
	{
	if (!iNotifyALSLineChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyALSLineChange called"));
		*aALSLine = DMMTSY_PHONE_ALS_LINE;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyALSLineChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyALSLineChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCostCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCostCaps called"));
	*aCaps = DMMTSY_PHONE_COST_CAPS;	
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCostCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifyCostCapsChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCostCapsChange called"));
		*aCaps = DMMTSY_PHONE_COST_CAPS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCostCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCostCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ClearCostMeter(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneCostMeters* aMeters)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ClearCostMeter called"));
	if (*aMeters != DMMTSY_PHONE_COST_METER)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::ClearCostMeterCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ClearCostMeterCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMaxCostMeter(const TTsyReqHandle aTsyReqHandle, TUint *aUnits)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMaxCostMeter called"));
	if (*aUnits != DMMTSY_PHONE_COST_UNITS)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMaxCostMeterCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMaxCostMeterCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetPuct(const TTsyReqHandle aTsyReqHandle, TDes8* aPuct)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetPuct called"));
	RMobilePhone::TMobilePhonePuctV1Pckg* puctPckg = STATIC_CAST(RMobilePhone::TMobilePhonePuctV1Pckg*,aPuct);
	RMobilePhone::TMobilePhonePuctV1& puct = (*puctPckg)();
	
	if ((puct.iCurrencyName.Compare(DMMTSY_PHONE_COST_PUCT_CNAME) != 0) || 
		(puct.iPricePerUnit != DMMTSY_PHONE_COST_PUCT_PPU))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::SetPuctCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetPuctCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCostInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aCostInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCostInfo called"));
	RMobilePhone::TMobilePhoneCostInfoV1Pckg* ciPckg = STATIC_CAST(RMobilePhone::TMobilePhoneCostInfoV1Pckg*,aCostInfo);
	RMobilePhone::TMobilePhoneCostInfoV1& ci = (*ciPckg)();

	ci.iService = DMMTSY_PHONE_COST_SERVICE;
	ci.iCCM = DMMTSY_PHONE_COST_CCM;
	ci.iACM = DMMTSY_PHONE_COST_ACM;
	ci.iACMmax = DMMTSY_PHONE_COST_ACMMAX;
	ci.iPuct.iCurrencyName = DMMTSY_PHONE_COST_PUCT_CNAME;
	ci.iPuct.iPricePerUnit = DMMTSY_PHONE_COST_PUCT_PPU;

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetCostInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCostInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyCostInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCostInfo)
	{
	if (!iNotifyCostInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyCostInfoChange called"));
		RMobilePhone::TMobilePhoneCostInfoV1Pckg* ciPckg = STATIC_CAST(RMobilePhone::TMobilePhoneCostInfoV1Pckg*,aCostInfo);
		RMobilePhone::TMobilePhoneCostInfoV1& ci = (*ciPckg)();
	
		ci.iService = DMMTSY_PHONE_COST_SERVICE;
		ci.iCCM = DMMTSY_PHONE_COST_CCM;
		ci.iACM = DMMTSY_PHONE_COST_ACM;
		ci.iACMmax = DMMTSY_PHONE_COST_ACMMAX;
		ci.iPuct.iCurrencyName = DMMTSY_PHONE_COST_PUCT_CNAME;
		ci.iPuct.iPricePerUnit = DMMTSY_PHONE_COST_PUCT_PPU;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCostInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCostInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetSecurityCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSecurityCaps called"));
	*aCaps = DMMTSY_PHONE_SECURITY_CAPS;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifySecurityCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps)
	{
	if (!iNotifySecurityCapsChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifySecurityCapsChange called"));
		*aCaps = DMMTSY_PHONE_SECURITY_CAPS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifySecurityCapsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySecurityCapsChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetLockInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneLock *aLock, TDes8* aLockInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetLockInfo called"));
	if (*aLock != DMMTSY_PHONE_SECURITY_LOCK)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		RMobilePhone::TMobilePhoneLockInfoV1Pckg* liPckg = STATIC_CAST(RMobilePhone::TMobilePhoneLockInfoV1Pckg*,aLockInfo);
		RMobilePhone::TMobilePhoneLockInfoV1& li = (*liPckg)();
		li.iStatus = DMMTSY_PHONE_SECURITY_STATUS;
		li.iSetting = DMMTSY_PHONE_SECURITY_SETTING;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetLockInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetLockInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyLockInfoChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneLock* aLock, TDes8* aLockInfo)
	{
	if (!iNotifyLockInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyLockInfoChange called"));
		RMobilePhone::TMobilePhoneLockInfoV1Pckg* liPckg = STATIC_CAST(RMobilePhone::TMobilePhoneLockInfoV1Pckg*,aLockInfo);
		RMobilePhone::TMobilePhoneLockInfoV1& li = (*liPckg)();
		li.iStatus = DMMTSY_PHONE_SECURITY_STATUS;
		li.iSetting = DMMTSY_PHONE_SECURITY_SETTING;
		*aLock = DMMTSY_PHONE_SECURITY_LOCK;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyLockInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyLockInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

 
TInt CPhoneDMmTsy::SetLockSetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneLock *aLock, RMobilePhone::TMobilePhoneLockSetting *aLockSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetLockSetting called"));
	if (*aLock != DMMTSY_PHONE_SECURITY_SC_LOCK || 
		*aLockSetting != DMMTSY_PHONE_SECURITY_SC_SETTING)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::SetLockSettingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetLockSettingCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::ChangeSecurityCode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityCode *aType, RMobilePhone::TMobilePhonePasswordChangeV1 *aChange)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ChangeSecurityCode called"));
	if ((*aType != DMMTSY_PHONE_SECURITY_CODE) || 
		(aChange->iOldPassword.Compare(DMMTSY_PHONE_SECURITY_OLD_PASS) != 0) ||
		(aChange->iNewPassword.Compare(DMMTSY_PHONE_SECURITY_NEW_PASS) != 0)) 
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
		
	return KErrNone;
	}

TInt CPhoneDMmTsy::ChangeSecurityCodeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ChangeSecurityCodeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetSecurityCodeInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityCode *aSecurityCode, TDes8* aSecurityCodeInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSecurityCodeInfo called"));
	if (*aSecurityCode != DMMTSY_PHONE_SECURITY_CODE)
		ReqCompleted(aTsyReqHandle,KErrNotFound);
	else
		{
		RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg* infoPckg = STATIC_CAST(RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg*,aSecurityCodeInfo);
		RMobilePhone::TMobilePhoneSecurityCodeInfoV5& info = (*infoPckg)();
		info.iRemainingEntryAttempts = DMMTSY_PHONE_SECURITY_REMAINING_ATTEMPTS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSecurityCodeInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSecurityCodeInfoCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifySecurityCodeInfoChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityCode* aSecurityCode,TDes8* aSecurityCodeInfo)
	{
	if (!iNotifySecurityCodeInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::SecurityCodeInfoChange called"));
		RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg* infoPckg = STATIC_CAST(RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg*,aSecurityCodeInfo);
		RMobilePhone::TMobilePhoneSecurityCodeInfoV5& info = (*infoPckg)();
		info.iRemainingEntryAttempts = DMMTSY_PHONE_SECURITY_REMAINING_ATTEMPTS;
		*aSecurityCode = DMMTSY_PHONE_SECURITY_CODE;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifySecurityCodeInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySecurityCodeInfoChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::NotifyOnSecurityEvent(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityEvent* aEvent)
	{
	if (!iNotifyOnSecurityEvent++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::Notify On Security Event called"));
		*aEvent = DMMTSY_PHONE_SECURITY_EVENT;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyOnSecurityEventCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyOnSecurityEventCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::VerifySecurityCode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityCode *aType, RMobilePhone::TCodeAndUnblockCode* aData)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::Verify Security Code called"));

	if ((*aType != DMMTSY_PHONE_SECURITY_CODE) ||
		(aData->iCode.Compare(DMMTSY_PHONE_SECURITY_OLD_PASS) != 0) ||
		(aData->iUnblockCode.Compare(DMMTSY_PHONE_SECURITY_NEW_PASS) != 0))
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::VerifySecurityCodeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::VerifySecurityCodeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::AbortSecurityCode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneSecurityCode *aType)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AbortSecurityCode called"));
	if (*aType != DMMTSY_PHONE_SECURITY_CODE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}


TInt CPhoneDMmTsy::NotifyMessageWaiting(const TTsyReqHandle aTsyReqHandle, TInt* aCount)
	{
	if (!iNotifyMessageWaiting++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyMessageWaiting called"));
		*aCount = DMMTSY_PHONE_MW_COUNT;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMessageWaitingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMessageWaitingCanel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetIccMessageWaitingIndicators(const TTsyReqHandle aTsyReqHandle, TDes8* aMsgIndicators)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIccMessageWaitingIndicators called"));
	RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* indPckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*,aMsgIndicators);
	RMobilePhone::TMobilePhoneMessageWaitingV1& indicators = (*indPckg)();
	indicators.iDisplayStatus=DMMTSY_PHONE_DISPLAYSTATUS; 
	indicators.iVoiceMsgs=DMMTSY_PHONE_VOICEMSGS;
	indicators.iAuxVoiceMsgs=DMMTSY_PHONE_AUXVOICEMSGS;
	indicators.iDataMsgs=DMMTSY_PHONE_DATAMSGS;
	indicators.iFaxMsgs=DMMTSY_PHONE_FAXMSGS;
	indicators.iEmailMsgs=DMMTSY_PHONE_EMAILMSGS;
	indicators.iOtherMsgs=DMMTSY_PHONE_OTHERMSGS;	
	
	if(indicators.ExtensionId() == KEtelExtMultimodeV8 )
		{
		RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* indV8Pckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*,aMsgIndicators);
		RMobilePhone::TMobilePhoneMessageWaitingV8& indicatorsV8 = (*indV8Pckg)();
		indicatorsV8.iVideoMsgs=DMMTSY_PHONE_VIDEOMSGS1;	
		}
	
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIccMessageWaitingIndicatorsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIccMessageWaitingIndicators called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::SetIccMessageWaitingIndicators(const TTsyReqHandle aTsyReqHandle, TDes8* aMsgIndicators)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIccMessageWaitingIndicators called"));
	RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* indPckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*,aMsgIndicators);
	RMobilePhone::TMobilePhoneMessageWaitingV1& indicators = (*indPckg)();
	if ((indicators.iDisplayStatus!=DMMTSY_PHONE_DISPLAYSTATUS) || 
			(indicators.iVoiceMsgs != DMMTSY_PHONE_VOICEMSGS2) ||
			(indicators.iAuxVoiceMsgs != DMMTSY_PHONE_AUXVOICEMSGS2) ||
			(indicators.iDataMsgs != DMMTSY_PHONE_DATAMSGS2) ||
			(indicators.iFaxMsgs != DMMTSY_PHONE_FAXMSGS2) ||
			(indicators.iEmailMsgs != DMMTSY_PHONE_EMAILMSGS2) ||
			(indicators.iOtherMsgs != DMMTSY_PHONE_OTHERMSGS2))
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		}
	
	if(indicators.ExtensionId() == KEtelExtMultimodeV8 ) 
 		{
 		RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* indV8Pckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*,aMsgIndicators);
		RMobilePhone::TMobilePhoneMessageWaitingV8& indicatorsV8 = (*indV8Pckg)();
		if (indicatorsV8.iVideoMsgs != DMMTSY_PHONE_VIDEOMSGS2)
			{
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
			}
		}

	AddDelayedReq(aTsyReqHandle,this);			
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetIccMessageWaitingIndicatorsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIccMessageWaitingIndicators called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyIccMessageWaitingIndicatorsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aMsgIndicators)
	{
	if (!iNotifyIccMessageWaitingChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyIccMessageWaitingIndicatorsChange called"));
		RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* indPckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*,aMsgIndicators);
		RMobilePhone::TMobilePhoneMessageWaitingV1& indicators = (*indPckg)();
		
		indicators.iDisplayStatus=DMMTSY_PHONE_DISPLAYSTATUS; 
		indicators.iVoiceMsgs=DMMTSY_PHONE_VOICEMSGS2;
		indicators.iAuxVoiceMsgs=DMMTSY_PHONE_AUXVOICEMSGS2;
		indicators.iDataMsgs=DMMTSY_PHONE_DATAMSGS2;
		indicators.iFaxMsgs=DMMTSY_PHONE_FAXMSGS2;
		indicators.iEmailMsgs=DMMTSY_PHONE_EMAILMSGS2;
		indicators.iOtherMsgs=DMMTSY_PHONE_OTHERMSGS2;
		
		if(indicators.ExtensionId() == KEtelExtMultimodeV8)
			{
			RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* indV8Pckg = STATIC_CAST(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*,aMsgIndicators);
			RMobilePhone::TMobilePhoneMessageWaitingV8& indicatorsV8 = (*indV8Pckg)();
			indicatorsV8.iVideoMsgs=DMMTSY_PHONE_VIDEOMSGS2;
			iNotifyIccMessageWaitingChange = 0;	
			} 
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		{
		//reset for multiple complete test
		iNotifyIccMessageWaitingChange = 0;		
		}	
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIccMessageWaitingIndicatorsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIccMessageWaitingIndicatorsChange called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetFdnStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneFdnStatus* aFdnStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetFdnStatus called"));
	*aFdnStatus = DMMTSY_PHONE_FDN_STATUS;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetFdnStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetFdnStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::SetFdnSetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneFdnSetting *aFdnSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetFdnSetting called"));
	if (*aFdnSetting != DMMTSY_PHONE_FDN_SETTING)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);	
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetFdnSettingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetFdnSettingCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyFdnStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneFdnStatus* aFdnStatus)
	{
	if (!iNotifyFdnStatusChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyFdnStatusChange called"));
		*aFdnStatus = DMMTSY_PHONE_FDN_STATUS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyFdnStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyFdnStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetMulticallParams(const TTsyReqHandle aTsyReqHandle, TDes8* aMulticallParams)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMulticallParams called"));

	RMobilePhone::TMobilePhoneMulticallSettingsV1Pckg *multicallParamsPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneMulticallSettingsV1Pckg *, aMulticallParams);
	RMobilePhone::TMobilePhoneMulticallSettingsV1     &multicallParams     = (*multicallParamsPckg)();

	multicallParams.iUserMaxBearers              = DMMTSY_PHONE_USER_MAX_BEARERS1;
	multicallParams.iServiceProviderMaxBearers  = DMMTSY_PHONE_PROVIDER_MAX_BEARERS1;
	multicallParams.iNetworkSupportedMaxBearers = DMMTSY_PHONE_NETWORK_MAX_BEARERS1;
	multicallParams.iUESupportedMaxBearers      = DMMTSY_PHONE_UE_MAX_BEARERS1;

	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMulticallParams(const TTsyReqHandle aTsyReqHandle, TInt* aUserMaxBearers)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMulticallParams called"));

	if (*aUserMaxBearers != DMMTSY_PHONE_USER_MAX_BEARERS1)
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetMulticallParamsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMulticallParamsCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMulticallParamsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMulticallParamsCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyMulticallParamsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aMulticallParams)
	{
	if (!iNotifyMulticallParamsChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyMulticallParamsChange called"));

		RMobilePhone::TMobilePhoneMulticallSettingsV1Pckg *multicallParamsPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneMulticallSettingsV1Pckg *, aMulticallParams);
		RMobilePhone::TMobilePhoneMulticallSettingsV1     &multicallParams     = (*multicallParamsPckg)();

		multicallParams.iUserMaxBearers              = DMMTSY_PHONE_USER_MAX_BEARERS2;
		multicallParams.iServiceProviderMaxBearers  = DMMTSY_PHONE_PROVIDER_MAX_BEARERS2;
		multicallParams.iNetworkSupportedMaxBearers = DMMTSY_PHONE_NETWORK_MAX_BEARERS2;
		multicallParams.iUESupportedMaxBearers      = DMMTSY_PHONE_UE_MAX_BEARERS2;		

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMulticallParamsChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMulticallParamsChangeCancel called"));
	
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIncomingCallType(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIncomingCallType* aCallType, TDes8* aDataParams)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIncomingCallType called"));

	RMobileCall::TMobileDataCallParamsV1Pckg *dataParamsPckgV1 = REINTERPRET_CAST(RMobileCall::TMobileDataCallParamsV1Pckg*, aDataParams);
	RMobileCall::TMobileDataCallParamsV1     &dataParamsV1     = (*dataParamsPckgV1)();

	dataParamsV1.iService = DMMTSY_DATA_CALL_SERVICE;
	dataParamsV1.iSpeed = DMMTSY_DATA_CALL_SPEED;
	dataParamsV1.iProtocol = DMMTSY_DATA_CALL_PROTOCOL;
	dataParamsV1.iQoS = DMMTSY_DATA_CALL_QOS;
	dataParamsV1.iRLPVersion = DMMTSY_DATA_CALL_RLP;
	dataParamsV1.iV42bisReq = DMMTSY_DATA_CALL_V42BIS;
 	dataParamsV1.iUseEdge = DMMTSY_DATA_CALL_EGPRS_REQUIRED;

	*aCallType = DMMTSY_PHONE_INCOMING_CALL_TYPES;

	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetIncomingCallTypeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetIncomingCallTypeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;

	}

TInt CPhoneDMmTsy::SetIncomingCallType(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIncomingCallType* aCallType, TDes8* aDataParams)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIncomingCallType called"));

	RMobileCall::TMobileDataCallParamsV1Pckg *dataParamsPckgV1 = REINTERPRET_CAST(RMobileCall::TMobileDataCallParamsV1Pckg*, aDataParams);
	RMobileCall::TMobileDataCallParamsV1     &dataParamsV1     = (*dataParamsPckgV1)();

	if ((*aCallType != DMMTSY_PHONE_INCOMING_CALL_TYPES) ||
		(dataParamsV1.iService != DMMTSY_DATA_CALL_SERVICE) ||
		(dataParamsV1.iSpeed != DMMTSY_DATA_CALL_SPEED) ||
		(dataParamsV1.iProtocol != DMMTSY_DATA_CALL_PROTOCOL) ||
		(dataParamsV1.iQoS != DMMTSY_DATA_CALL_QOS) || 
		(dataParamsV1.iRLPVersion != DMMTSY_DATA_CALL_RLP) ||
		(dataParamsV1.iV42bisReq != DMMTSY_DATA_CALL_V42BIS) ||
 		(dataParamsV1.iUseEdge != DMMTSY_DATA_CALL_EGPRS_REQUIRED))

		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetIncomingCallTypeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIncomingCallTypeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;

	}

TInt CPhoneDMmTsy::NotifyIncomingCallTypeChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIncomingCallType* aCallType, TDes8* aDataParams)
	{
	if (!iNotifyIncomingCallTypeChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyIncomingCallTypeChange called"));

		RMobileCall::TMobileDataCallParamsV1Pckg *dataParamsPckg = REINTERPRET_CAST(RMobileCall::TMobileDataCallParamsV1Pckg*, aDataParams);
		RMobileCall::TMobileDataCallParamsV1     &dataParams     = (*dataParamsPckg)();

		if(dataParams.ExtensionId() == RMobileCall::KETelMobileDataCallParamsV2)
			{
			RMobileCall::TMobileDataCallParamsV2Pckg *dataParamsPckgV2 = REINTERPRET_CAST(RMobileCall::TMobileDataCallParamsV2Pckg*, aDataParams);
			RMobileCall::TMobileDataCallParamsV2     &dataParamsV2     = (*dataParamsPckgV2)();
			dataParamsV2.iBearerMode = DMMTSY_PHONE_MULTICALLBEARERMODE_NOTSUPPORTED;
			//reset for V1
			iNotifyIncomingCallTypeChange = 0;
			}
		dataParams.iService = DMMTSY_DATA_CALL_SERVICE1;
		dataParams.iSpeed = DMMTSY_DATA_CALL_SPEED1;
		dataParams.iProtocol = DMMTSY_DATA_CALL_PROTOCOL1;
		dataParams.iQoS = DMMTSY_DATA_CALL_QOS1;
		dataParams.iRLPVersion = DMMTSY_DATA_CALL_RLP1;
		dataParams.iV42bisReq = DMMTSY_DATA_CALL_V42BIS1;
 		dataParams.iUseEdge = DMMTSY_DATA_CALL_EGPRS_NOTREQUIRED;

		*aCallType = DMMTSY_PHONE_INCOMING_CALL_TYPES1;
		
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		{
		//reset for multiple complete test
		iNotifyIncomingCallTypeChange = 0;
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyIncomingCallTypeChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIncomingCallTypeChangeCancel called"));
	
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetUUSSetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneUUSSetting* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetUUSSetting called"));

	*aSetting = DMMTSY_PHONE_UUS_SETTING1;

	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetUUSSettingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetUUSSettingCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetUUSSetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneUUSSetting* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetUUSSetting called"));

	if(*aSetting != DMMTSY_PHONE_UUS_SETTING2)
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetUUSSettingCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetUUSSettingCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUUSSettingChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneUUSSetting* aSetting)
	{
	if (!iNotifyUUSSettingChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyUUSSettingChange called"));

		*aSetting = DMMTSY_PHONE_UUS_SETTING2;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUUSSettingChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyUUSSettingChangeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetMultimediaCallPreference(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneMultimediaSettings* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMultimediaCallPreference called"));

	*aSetting = DMMTSY_PHONE_MM_SETTING;

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMultimediaCallPreference(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneMultimediaSettings* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMultimediaCallPreference called"));

	if(*aSetting != DMMTSY_PHONE_MM_SETTING)
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMultimediaCallPreferenceCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMultimediaCallPreferenceCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMultimediaCallPreferenceChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneMultimediaSettings* aSetting)
	{
	if (!iNotifyMmCallPrefChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyMultimediaCallPreferenceChange called"));

		*aSetting = DMMTSY_PHONE_MM_SETTING_2;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMultimediaCallPreferenceChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMultimediaCallPreferenceChangeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkSecurityLevel(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNetworkSecurity* aSecurity)
	{

	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkSecurityLevel called"));

	*aSecurity = DMMTSY_PHONE_NET_SECURITY;

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetNetworkSecurityLevelCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkSecurityLevelCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkSecurityLevelChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNetworkSecurity* aSecurity)
	{

	if (!iNotifyNetworkSecurityChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkSecurityLevelChange called"));
	
		*aSecurity = DMMTSY_PHONE_NET_SECURITY;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyNetworkSecurityLevelChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkSecurityLevelChangeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::EnumerateUSimApplications(const TTsyReqHandle aTsyReqHandle, TInt* aCount, RMobilePhone::TAID* aActiveAID)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateUSimApplications called"));

	*aCount = DMMTSY_PHONE_USIM_COUNT;
	aActiveAID->Copy(DMMTSY_PHONE_USIM_AID);
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::EnumerateUSimApplicationsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateUSimApplicationsCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetUSimApplicationStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAID* aAID, RMobilePhone::TUSimAppAction* aAction)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetUSimApplicationStatus called"));

	if ((*aAction != DMMTSY_PHONE_USIM_ACTIVATE) ||
		(aAID->Compare(DMMTSY_PHONE_USIM_AID) !=0 ))
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetUSimApplicationStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetUSimApplicationStatusCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetUSimApplicationInfo(const TTsyReqHandle aTsyReqHandle, TInt* aIndex, RMobilePhone::TUSimApplicationInfoV2* aInfo)
	{

	LOGTEXT(_L8("CPhoneDMmTsy::GetUSimApplicationInfo called"));

	if(*aIndex != DMMTSY_PHONE_USIM_APPINDEX)
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		{
		aInfo->iLabel.Copy(DMMTSY_PHONE_USIM_APPLABEL);
		aInfo->iAID.Copy(DMMTSY_PHONE_USIM_AID);
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetUSimApplicationInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetUSimApplicationInfoCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUSimApplicationsInfoChange(const TTsyReqHandle aTsyReqHandle, TInt* aCount, RMobilePhone::TAID* aActiveAID)
	{
	if (!iNotifyUSimApplicationsInfoChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyUSimApplicationsInfoChange called"));
		
		aActiveAID->Copy(DMMTSY_PHONE_USIM_AID);
		*aCount = DMMTSY_PHONE_USIM_COUNT;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUSimApplicationsInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyUSimApplicationsInfoChangeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetUSimAppsSelectionMode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TUSimSelectionMode* aMode)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetUSimAppsSelectionMode called"));

	*aMode = DMMTSY_PHONE_USIM_SELMODE;

	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetUSimAppsSelectionMode(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TUSimSelectionMode* aMode)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetUSimAppsSelectionMode called"));

	if(*aMode != DMMTSY_PHONE_USIM_SELMODE)
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUSimAppsSelectionModeChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TUSimSelectionMode* aMode)
	{
	if (!iNotifyUSimAppsSelectionModeChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyUSimAppsSelectionModeChange called"));

		*aMode = DMMTSY_PHONE_USIM_SELMODE;

		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyUSimAppsSelectionModeChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyUSimAppsSelectionModeChangeCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetMailboxNumbers(const TTsyReqHandle aTsyReqHandle, TDes8 *aMailBox)
	{
	RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg *mailboxPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*, aMailBox);
	RMobilePhone::TMobilePhoneVoicemailIdsV3 &mailbox     = (*mailboxPckg)();
		
	LOGTEXT(_L8("CPhoneDMmTsy::GetMailboxNumbers called"));
	mailbox.iVoice = DMMTSY_PHONE_MAILBOXNUMBER_VOICE;
	mailbox.iData = DMMTSY_PHONE_MAILBOXNUMBER_DATA;
	mailbox.iFax = DMMTSY_PHONE_MAILBOXNUMBER_FAX;
	mailbox.iOther = DMMTSY_PHONE_MAILBOXNUMBER_OTHER;
		
	if(mailbox.ExtensionId() == KEtelExtMultimodeV8 )
		{
		RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg *mailboxV8Pckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*, aMailBox);
		RMobilePhone::TMobilePhoneVoicemailIdsV8 &mailboxV8     = (*mailboxV8Pckg)();
		LOGTEXT(_L8("CPhoneDMmTsy::GetMailboxNumbers V8 class is called"));
		mailboxV8.iVideo = DMMTSY_PHONE_MAILBOXNUMBER_VIDEO;
		}
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;	
	}

	
TInt CPhoneDMmTsy::GetMailboxNumbersCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMailboxNumbersCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyMailboxNumbersChange(const TTsyReqHandle aTsyReqHandle, TDes8 *aMailBox)
	
	{
	RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg *mailboxPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*, aMailBox);
	RMobilePhone::TMobilePhoneVoicemailIdsV3 &mailbox     = (*mailboxPckg)();
	
	if (!iNotifyMailBoxNumbersChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyMailboxNumbersChange called"));
		mailbox.iVoice = DMMTSY_PHONE_MAILBOXNUMBER_VOICE;
		mailbox.iData = DMMTSY_PHONE_MAILBOXNUMBER_DATA;
		mailbox.iFax = DMMTSY_PHONE_MAILBOXNUMBER_FAX;
		mailbox.iOther = DMMTSY_PHONE_MAILBOXNUMBER_OTHER;
		
		if(mailbox.ExtensionId() == KEtelExtMultimodeV8)
			{
			RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg *mailboxPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*, aMailBox);
			RMobilePhone::TMobilePhoneVoicemailIdsV8 &mailbox     = (*mailboxPckg)();
			mailbox.iVideo = DMMTSY_PHONE_MAILBOXNUMBER_VIDEO;
			iNotifyMailBoxNumbersChange=0;
			}
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		{
		iNotifyMailBoxNumbersChange=0;		
		}

	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyMailboxNumbersChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMailboxNumbersChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMmsUpdate(const TTsyReqHandle aTsyReqHandle, TDes8 *aNotification)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMmsUpdate called"));

	RMobilePhone::TMmsNotificationV3Pckg *mmsPckg = REINTERPRET_CAST(RMobilePhone::TMmsNotificationV3Pckg *, aNotification);
	RMobilePhone::TMmsNotificationV3 &mms = (*mmsPckg)();

	if (!iNotifyMmsUpdate++)
		{
		mms.iSpace = DMMTSY_PHONE_MMS_UPDATE_SPACE;
		mms.iNotification = DMMTSY_PHONE_MMS_UPDATE_NOTIFICATION;
		mms.iMmsStatus = DMMTSY_PHONE_MMS_UPDATE_STATUS;
		mms.iImplementation = DMMTSY_PHONE_MMS_UPDATE_IMPLEMENTATION;
		mms.iNotify = DMMTSY_PHONE_MMS_UPDATE_NOTIFY;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetAirTimeDuration(const TTsyReqHandle aTsyReqHandle, TTimeIntervalSeconds* aTime)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAirTimeDuration called"));
	*aTime=DMMTSY_AIR_TIME_DURATION1;
	ReqCompleted(aTsyReqHandle,KErrNone);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyAirTimeDurationChange(const TTsyReqHandle aTsyReqHandle, TTimeIntervalSeconds* aTime)
	{
	if (!iNotifyAirTimeChangeChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyAirTimeDurationChange called"));
		*aTime=DMMTSY_AIR_TIME_DURATION2;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAirTimeDurationChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAirTimeDurationChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::TerminateAllCalls(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::TerminateAllCalls called"));
	if (!iTerminateAllCalls++)
		{
		//Just return KErrNone
		ReqCompleted(aTsyReqHandle,KErrNone);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::TerminateAllCallsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::TerminateAllCallsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::TerminateActiveCalls(const TTsyReqHandle aTsyReqHandle)
    {
    LOGTEXT(_L8("CPhoneDMmTsy::TerminateActiveCalls called"));
    if (!iTerminateActiveCalls++)
        {
        //Just return KErrNone
        ReqCompleted(aTsyReqHandle,KErrNone);
        }
    return KErrNone;
    }
    
TInt CPhoneDMmTsy::TerminateActiveCallsCancel(const TTsyReqHandle aTsyReqHandle)
    {
    LOGTEXT(_L8("CPhoneDMmTsy::TerminateActiveCallsCancel called"));
    RemoveDelayedReq(aTsyReqHandle);
    ReqCompleted(aTsyReqHandle,KErrCancel);
    return KErrNone;
    }

 TInt CPhoneDMmTsy::NotifySendNetworkServiceRequest(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNotifySendSSOperation* aOperation, TDes8* aRequestComplete)
 	{
 	LOGTEXT(_L8("CPhoneDMmTsy::NotifySendNetworkServiceRequest called"));
	if (!iNotifySendNetworkServiceRequest++)
		{
		RMobilePhone::TMobilePhoneSendSSRequestV3Pckg* ssRequestPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneSendSSRequestV3Pckg*,aRequestComplete);
		RMobilePhone::TMobilePhoneSendSSRequestV3& ssRequest = (*ssRequestPckg)();
			
		if(*aOperation!=DMMTSY_PHONE_NOTIFY_SERVICEREQUEST || 
			ssRequest.ExtensionId()!=KETelExtMultimodeV3)
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
		else
			{	
			ssRequest.iOpCode = DMMTSY_PHONE_NOTIFY_OPCODE;
			ssRequest.iAdditionalInfo = DMMTSY_PHONE_NOTIFY_ADDINFO;			
			ReqCompleted(aTsyReqHandle,KErrNone);
			}
		}	
	return KErrNone;
 	}
 
 TInt CPhoneDMmTsy::NotifySendNetworkServiceRequestCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySendNetworkServiceRequestCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
 TInt CPhoneDMmTsy::NotifyAllSendNetworkServiceRequest(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNotifySendSSOperation* aOperation, TDes8* aRequestComplete)
 	{
 	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAllSendNetworkServiceRequest called"));
	
	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg* ssRequestPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneSendSSRequestV3Pckg*,aRequestComplete);
	RMobilePhone::TMobilePhoneSendSSRequestV3& ssRequest = (*ssRequestPckg)();
			
	if(ssRequest.ExtensionId()!=KETelExtMultimodeV3)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		//Return the error for some Invoke operation, like received from network.
		*aOperation = DMMTSY_PHONE_NOTIFY_SERVICEREQUEST_ERROR;
		//Return result problem code (return Mistyped Parameter)
		ssRequest.iOpCode = DMMTSY_PHONE_NOTIFY_RETURN_ERROR_PROBLEM_CODE;
		ssRequest.iAdditionalInfo = DMMTSY_PHONE_NOTIFY_ADDINFO;
		AddDelayedReq(aTsyReqHandle, this);
		}				
	
	return KErrNone;
 	}
 	
 TInt CPhoneDMmTsy::NotifyAllSendNetworkServiceRequestCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAllSendNetworkServiceRequestCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

 TInt CPhoneDMmTsy::ClearBlacklist(const TTsyReqHandle aTsyReqHandle)
 	{
	LOGTEXT(_L8("CPhoneDMmTsy::ClearBlacklist called"));
	if (!iClearBlacklist++)
		{
		//Just return KErrNone
		ReqCompleted(aTsyReqHandle,KErrNone);
		}
	return KErrNone; 	
 	}
 	
TInt CPhoneDMmTsy::ClearBlacklistCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ClearBlacklistCancel called"));
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyDTMFEvent(const TTsyReqHandle aTsyReqHandle,RMobilePhone::TMobilePhoneDTMFEvent* aEvent)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyDTMFEvent called"));
	if (!iNotifyDTMFEvent++)
		{
		*aEvent = DMMTSY_PHONE_NOTIFY_DTMFEVENT_ON;
		ReqCompleted(aTsyReqHandle,KErrNone);
		}
	return KErrNone; 	
	}
	
TInt CPhoneDMmTsy::NotifyDTMFEventCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyDTMFEventCancel called"));
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetPersonalisationCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps) 
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPersonalisationCaps called"));
	*aCaps = (DMMTSY_PHONE_PERS_CAPS_SERV_PROV | DMMTSY_PHONE_PERS_CAPS_NETWORK);
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetPersonalisationCapsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPersonalisationCapsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPersonalisationStatus(const TTsyReqHandle aTsyReqHandle, TUint32* aPersSchemes) 
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPersonalisationStatus called"));
	*aPersSchemes = (DMMTSY_PHONE_PERS_GET_NETWORK_SUB | DMMTSY_PHONE_PERS_GET_CORPORATE);
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetPersonalisationStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPersonalisationStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetPersonalisationStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePersonalisation* aPersSchemes, TDes* aPersCode) 
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetPersonalisationStatus called"));
	if((*aPersSchemes == DMMTSY_PHONE_PERS_SET_USIM) &&
	   (*aPersCode == DMMTSY_PHONE_PERS_SET_CODE))
		AddDelayedReq(aTsyReqHandle,this);
	else
		ReqCompleted(aTsyReqHandle,KErrCorrupt);			
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::SetPersonalisationStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetPersonalisationStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCurrentNetworkName(const TTsyReqHandle aTsyReqHandle, TDes8* aNetworkName, TDes8* aLocInfo)	
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetworkName called"));

	RMobilePhone::TMobilePhoneNetworkNameV3Pckg* networkNamePckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneNetworkNameV3Pckg*,aNetworkName);
	RMobilePhone::TMobilePhoneNetworkNameV3& networkName = (*networkNamePckg)();
	
	RMobilePhone::TMobilePhoneOPlmnV3Pckg* plmnPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneOPlmnV3Pckg*,aLocInfo);
	RMobilePhone::TMobilePhoneOPlmnV3& plmn = (*plmnPckg)();
	
	if(networkName.ExtensionId() != KETelExtMultimodeV3 ||
	   plmn.ExtensionId() != KETelExtMultimodeV3)
	   		ReqCompleted(aTsyReqHandle,KErrCorrupt);	
	 else
	 	{
	 	//Fill TMobilePhoneNetworkNameV3
	 	networkName.iLongName = DMMTSY_PHONE_HOME_NETWORK_LONG_NAME;
		networkName.iShortName = DMMTSY_PHONE_HOME_NETWORK_SHORT_NAME;
		networkName.iOtherNames = DMMTSY_PHONE_HOME_NETWORK_OTHER_NAMES;
		//Fill TMobilePhoneOPlmnV3
		plmn.iCountryCode = DMMTSY_PHONE_COUNTRY_ID;
		plmn.iNetworkId = DMMTSY_PHONE_NETWORK_ID;
		plmn.iPNNid = DMMTSY_PHONE_HOME_NETWORK_NAME_LOC_ID;		
		plmn.iFirstLocationAreaCode = DMMTSY_PHONE_HOME_NETWORK_FIRST_ID;
		plmn.iLastLocationAreaCode = DMMTSY_PHONE_HOME_NETWORK_LAST_ID;
		AddDelayedReq(aTsyReqHandle,this);
	 	}
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::GetCurrentNetworkNameCancel(const TTsyReqHandle aTsyReqHandle)	
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentNetworkNameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetPreferredNetworksPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredNetworksPhase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessGetPreferredNetworksPhase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	}	
	
TInt CPhoneDMmTsy::ProcessGetPreferredNetworksPhase1L(const TTsyReqHandle aTsyReqHandle, 
													 RMobilePhone::TClientId* aClient, 
													 TInt* aBufSize)
	{
	// retrieve stored networks from USIM,
	// store each entry.
	// stream the list and then return size of this buffer to client
	CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMobilePreferredNetworkEntryV3 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_PHONE_NTWK_LIST_ENTRIES; index++)
		{
		switch (index)
			{
		case 0:
			entry.iAccess = DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_GSM;
			entry.iUserDefined = DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_FALSE;
			entry.iCountryCode = DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID1;
			entry.iNetworkId = DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1;
			break;
		case 1:
			entry.iAccess = DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_GSMC;
			entry.iUserDefined = DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_FALSE;
			entry.iCountryCode = DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2;
			entry.iNetworkId = DMMTSY_PHONE_NTWK_LIST_NETWORK_ID2;
			break;
		case 2:
		default:
			entry.iAccess = DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_UTRAN;
			entry.iUserDefined = DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_TRUE;
			entry.iCountryCode = DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2;
			entry.iNetworkId = DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1;
			break;
		case 3:
			entry.iAccess = DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_WLAN;
			entry.iUserDefined = DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_TRUE;
			entry.iCountryCode = DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2;
			entry.iNetworkId = DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1;
			break;
			
			}
		// Add the entry into the list, at the next empty location
		list->AddEntryL(entry);
		}

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetPreferredNetworks->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}



TInt CPhoneDMmTsy::GetPreferredNetworksPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredNetworksPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetPreferredNetworks->Count(); ++i)
		{
		read = iGetPreferredNetworks->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetPreferredNetworks->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}
	
TInt CPhoneDMmTsy::GetPreferredNetworksCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredNetworksPhaseCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetPreferredNetworks
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetPreferredNetworks->Count(); ++i)
		{
		read = iGetPreferredNetworks->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetPreferredNetworks->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMmsUpdateCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMmsUpdateCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMmsUserConnParams(const TTsyReqHandle aTsyReqHandle, TDes8* aConnectivity)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMmsUserConnParams called"));
	if(aConnectivity->Compare(DMMTSY_PHONE_MMS_USER_CONN_PARAMS) == 0 )
		AddDelayedReq(aTsyReqHandle,this);		
	else
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	return KErrNone;
	} 
	
TInt CPhoneDMmTsy::SetMmsUserConnParamsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMmsUserConnParamsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMmsUserPreferences(const TTsyReqHandle aTsyReqHandle, TDes8* aPreferences)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMmsUserPreferences called"));
	if(aPreferences->Compare(DMMTSY_PHONE_MMS_USER_PREF_PARAMS) == 0 )
		AddDelayedReq(aTsyReqHandle,this);		
	else
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetMmsUserPreferencesCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetMmsUserPreferencesCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetMmsConfig(const TTsyReqHandle aTsyReqHandle,  RMobilePhone::TMmsConnParams aType, TDes8* aConnectivity)

	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMmsConfig called"));
	if (aType == DMMTSY_PHONE_MMS_USER_CONN_PARAMS_TYPE )
		{
		*aConnectivity = DMMTSY_PHONE_MMS_USER_CONN_PARAMS;
		AddDelayedReq(aTsyReqHandle,this);
		} 
	else
		ReqCompleted(aTsyReqHandle, KErrCorrupt);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetMmsConfigCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetMmsConfigCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}	
	
TInt CPhoneDMmTsy::NotifyMmsConfig(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMmsConnParams aType, TDes8* aConnectivity)
	
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMmsConfig called"));
	if(!iNotifyMmsConfig++)
		{
		if (aType == DMMTSY_PHONE_MMS_USER_CONN_PARAMS_TYPE )
			{
			*aConnectivity = DMMTSY_PHONE_MMS_USER_CONN_PARAMS;
			AddDelayedReq(aTsyReqHandle,this);
			} 
		else
			ReqCompleted(aTsyReqHandle, KErrCorrupt);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyMmsConfigCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMmsConfigCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetHomeNetworkSearchPeriod(const TTsyReqHandle aTsyReqHandle, TInt* aSearchIntv)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetHomeNetworkSearchPeriod called"));
	*aSearchIntv = DMMTSY_PHONE_HOME_NETWORK_SEARCHINTV;
	AddDelayedReq(aTsyReqHandle,this);	
	return KErrNone;
	
	}
	
TInt CPhoneDMmTsy::GetHomeNetworkSearchPeriodCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetHomeNetworkSearchPeriodCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetLastUsedAccessTechnology(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneNetworkAccess* aAccessTech)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetLastUsedAccessTechnology called"));
	*aAccessTech = DMMTSY_PHONE_LAST_USED_ACCESS_TECH;
	AddDelayedReq(aTsyReqHandle,this);	
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetLastUsedAccessTechnologyCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetLastUsedAccessTechnologyCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetNetworkInvScanSetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneInvestigationScan* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetNetworkInvScanSetting called"));
	*aSetting = DMMTSY_PHONE_NETWORK_INV_SCAN;
	AddDelayedReq(aTsyReqHandle,this);	
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyNetworkInvScanChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneInvestigationScan* aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkInvScanChange called"));
	if(!iNotifyNetworkInvScanChange++)
		{
		*aSetting = DMMTSY_PHONE_NETWORK_INV_SCAN;
		AddDelayedReq(aTsyReqHandle,this);	
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyNetworkInvScanChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkInvScanChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::NotifyNetworkInvScanEvent(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneInvestigationScanEvent* aEvent)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkInvScanEvent called"));
	if(!iNotifyNetworkInvScanEvent++)
		{
		*aEvent = DMMTSY_PHONE_NETWORK_INV_SCAN_EVENT;
		AddDelayedReq(aTsyReqHandle,this);	
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyNetworkInvScanEventCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyNetworkInvScanEventCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::GetCallForwardingIndicator(const TTsyReqHandle aTsyReqHandle, TDes8* aIndicator)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallForwardingIndicator called"));
	
	RMobilePhone::TMobilePhoneCFUIndicatorV3Pckg* indicatorPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFUIndicatorV3Pckg*, aIndicator);
	RMobilePhone::TMobilePhoneCFUIndicatorV3& indicator = (*indicatorPckg)();
	if( indicator.ExtensionId() == KETelExtMultimodeV3 )
		{
		indicator.iIndicator = DMMTSY_PHONE_CFU_INDICATOR;
		}
	else if(indicator.ExtensionId() == KEtelExtMultimodeV6 )
		{
		RMobilePhone::TMobilePhoneCFUIndicatorV6Pckg* indicatorPckg = REINTERPRET_CAST(RMobilePhone::TMobilePhoneCFUIndicatorV6Pckg*, aIndicator);
		RMobilePhone::TMobilePhoneCFUIndicatorV6& indicator = (*indicatorPckg)();
		indicator.iIndicator = DMMTSY_PHONE_CFU_INDICATOR1;
		indicator.iCFNumber.iTypeOfNumber = DMMTSY_PHONE_CFU_TON;
		indicator.iCFNumber.iNumberPlan = DMMTSY_PHONE_CFU_NPI;
		indicator.iCFNumber.iTelNumber = DMMTSY_PHONE_CFU_TELNUMBER;
		indicator.iMultipleSubscriberProfileID = DMMTSY_PHONE_CFU_MSP;
		}
	AddDelayedReq(aTsyReqHandle,this);	
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetCallForwardingIndicatorCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCallForwardingIndicatorCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetCompMethodName(const TTsyReqHandle aTsyReqHandle, TUint aCmi, TDes* aAlphaTag)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCompMethodName called"));
	if(aCmi != DMMTSY_PHONE_CB_COMP_METHOD_ID)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		{
		*aAlphaTag = DMMTSY_PHONE_CB_ALPHA_TAG;
		AddDelayedReq(aTsyReqHandle,this);	
		}
	return KErrNone;
	}
TInt CPhoneDMmTsy::GetCompMethodNameCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCompMethodNameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::EnumerateAPNEntries(const TTsyReqHandle aTsyReqHandle, TUint32* aIndex)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateAPNEntries called"));
	*aIndex = DMMTSY_PHONE_APN_ENUMERATE;
	AddDelayedReq(aTsyReqHandle,this);	
	return KErrNone;
	}

TInt CPhoneDMmTsy::EnumerateAPNEntriesCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateAPNEntriesCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetAPNname(const TTsyReqHandle aTsyReqHandle, TUint32 aIndex, TDes8* aAPN)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAPNname called"));
	
	RMobilePhone::TAPNEntryV3Pckg* entryPckg = REINTERPRET_CAST(RMobilePhone::TAPNEntryV3Pckg*, aAPN);
	RMobilePhone::TAPNEntryV3& entry = (*entryPckg)();
	
	switch(aIndex)
		{
	case 0:
		{
		entry.iApn.Append(DMMTSY_PHONE_APN_ENTRY1);
		AddDelayedReq(aTsyReqHandle,this);
		}
		break;
	case 1:
		{
		entry.iApn.Append(DMMTSY_PHONE_APN_ENTRY2);
		AddDelayedReq(aTsyReqHandle,this);	
		}
		break;
	case 2:
		{
		entry.iApn.Append(DMMTSY_PHONE_APN_ENTRY3);
		AddDelayedReq(aTsyReqHandle,this);	
		}
		break;
	default:
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		break;
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAPNnameCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAPNnameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::AppendAPNName(const TTsyReqHandle aTsyReqHandle, TDes8* aAPN)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AppendAPNName called"));
	
	RMobilePhone::TAPNEntryV3Pckg* entryPckg = REINTERPRET_CAST(RMobilePhone::TAPNEntryV3Pckg*, aAPN);
	RMobilePhone::TAPNEntryV3& entry = (*entryPckg)();
	
	if ((entry.iApn.Length() > RMobilePhone::KMaxApnName) ||
		(entry.iApn != DMMTSY_PHONE_APN_ENTRY_TO_APPEND))
		{
		// Checking that the entry passed in is equal to DMMTSY_PHONE_APN_ENTRY_TO_APPEND
		// confirms that the APN entry has made it from the client to the TSY properly,
		// i.e the packaging etc. works.
		ReqCompleted(aTsyReqHandle, KErrBadName);
		}
	else 
		{
		AddDelayedReq(aTsyReqHandle, this);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::AppendAPNNameCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AppendAPNNameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::DeleteAPNName(const TTsyReqHandle aTsyReqHandle, TUint32 aIndex)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::DeleteAPNName called"));
	if (aIndex > (DMMTSY_PHONE_APN_ENUMERATE-1))
		{
		ReqCompleted(aTsyReqHandle, KErrTooBig);
		}
	else
		{
		AddDelayedReq(aTsyReqHandle, this);
		}
	return KErrNone; 
	}
	
TInt CPhoneDMmTsy::DeleteAPNNameCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::DeleteAPNNameCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);	
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAPNListChanged(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAPNListChanged called"));
	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAPNListChangedCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAPNListChangedCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);	
	return KErrNone;	
	}

TInt CPhoneDMmTsy::SetAPNControlListServiceStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAPNControlListServiceStatus aAPNControlListServiceStatus)
	{
	if ((aAPNControlListServiceStatus != DMMTSY_PHONE_APN_CONTROL_LIST_SERVICE_ENABLED) &&
		(aAPNControlListServiceStatus != DMMTSY_PHONE_APN_CONTROL_LIST_SERVICE_DISABLED))
		{
		ReqCompleted(aTsyReqHandle, KErrArgument);
		}
	else
		{
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::SetAPNControlListServiceStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetAPNControlListServiceStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);	
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetAPNControlListServiceStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAPNControlListServiceStatus* aAPNControlListServiceStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAPNControlListServiceStatus called"));
	*aAPNControlListServiceStatus = DMMTSY_PHONE_APN_CONTROL_LIST_SERVICE_DISABLED;
	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetAPNControlListServiceStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAPNControlListServiceStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);	
	return KErrNone;	
	}

TInt CPhoneDMmTsy::NotifyAPNControlListServiceStatusChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAPNControlListServiceStatus* aAPNControlListServiceStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAPNControlListServiceStatusChange called"));
	*aAPNControlListServiceStatus = DMMTSY_PHONE_APN_CONTROL_LIST_SERVICE_ENABLED;
	AddDelayedReq(aTsyReqHandle, this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAPNControlListServiceStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAPNControlListServiceStatusChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::StorePreferredNetworksList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
	{
	LOGTEXT(_L8("CSmsMessagingDMmTsy::StorePreferredNetworksList called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessStorePreferredNetworksListL(aTsyReqHandle, aBuffer););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	};

TInt CPhoneDMmTsy::ProcessStorePreferredNetworksListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
	{
	CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL();
	CleanupStack::PushL(list);
	
	list->RestoreL(*aBuffer);

	RMobilePhone::TMobilePreferredNetworkEntryV3 entry;

	if (list->Enumerate() != DMMTSY_PHONE_NTWK_LIST_ENTRIES)
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		CleanupStack::PopAndDestroy(); // list
		return KErrNone;
		}

	TInt error=KErrNone;
	TInt ret;
	for (TInt i=0; i<DMMTSY_PHONE_NTWK_LIST_ENTRIES; ++i)
		{
		TRAP(ret,entry=list->GetEntryL(i));
		if (ret != KErrNone)
			break;
			switch(i)
			{
			case 0:
				{
				if(entry.iAccess != DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_WLAN ||
				entry.iUserDefined != DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_TRUE ||
				entry.iCountryCode != DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2 ||
				entry.iNetworkId != DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1)
					error  = KErrCorrupt;
				}
				
				break;
			case 1:
				{
				if(entry.iAccess != DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_UTRAN ||
				entry.iUserDefined != DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_TRUE ||
				entry.iCountryCode != DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2 ||
				entry.iNetworkId != DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1)
					error  = KErrCorrupt;
				}
				
				break;
			case 2:
				{
				if(entry.iAccess != DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_GSMC ||
				entry.iUserDefined != DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_FALSE ||
				entry.iCountryCode != DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID2 ||
				entry.iNetworkId != DMMTSY_PHONE_NTWK_LIST_NETWORK_ID2)
					error  = KErrCorrupt;
				}
				break;
			case 3:
			default:
				{
				if(entry.iAccess != DMMTSY_PHONE_NTWK_LIST_ACCESS_CAPS_GSM ||
				entry.iUserDefined != DMMTSY_PHONE_NTWK_LIST_USER_DEFINED_FALSE ||
				entry.iCountryCode != DMMTSY_PHONE_NTWK_LIST_COUNTRY_ID1 ||
				entry.iNetworkId != DMMTSY_PHONE_NTWK_LIST_NETWORK_ID1)
					error  = KErrCorrupt;
				}
				break;
			}
		}
	if(error==KErrNone)	
		AddDelayedReq(aTsyReqHandle,this);
	else
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	CleanupStack::PopAndDestroy(); // list
	return KErrNone;
	}

TInt CPhoneDMmTsy::StorePreferredNetworksListCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CSmspStoreDMmTsy::StorePreferredNetworksListCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyStorePreferredNetworksListChange(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyStorePreferredNetworksListChange called"));
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyStorePreferredNetworksListChangeCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyStorePreferredNetworksListChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetCipheringIndicatorStatus(TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobileCallCipheringIndicator& aIndicatorStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCipheringIndicatorStatus called"));
	aIndicatorStatus = DMMTSY_PHONE_NET_CIPHER_IND;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetCipheringIndicatorStatusCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCipheringIndicatorStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyCipheringIndicatorStatus(TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobileCallCipheringIndicator& aIndicatorStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCipheringIndicatorStatus called"));
	if (!iNotifyCipheringIndicatorStatus++)
		{
		aIndicatorStatus = DMMTSY_PHONE_NET_CIPHER_IND;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyCipheringIndicatorStatusCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyCipheringIndicatorStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetIdentityServiceStatus(TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIdService aService, RMobilePhone::TMobilePhoneIdServiceSetting aSetting)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIdentityServiceStatus called"));
	if(aService != DMMTSY_PHONE_ID_SERVICE || aSetting != DMMTSY_PHONE_ID_SETTING)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else
		AddDelayedReq(aTsyReqHandle,this);

	return KErrNone;
	}

TInt CPhoneDMmTsy::SetIdentityServiceStatusCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetIdentityServiceStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt  CPhoneDMmTsy::NotifyIdentityServiceStatus(TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneIdService aService, RMobilePhone::TMobilePhoneIdServiceStatus* aStatus)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIdentityServiceStatus called"));
	if (!iNotifyIdentityServiceStatus++)
		{
		if(aService!=DMMTSY_PHONE_ID_SERVICE)
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
		else
			{
			*aStatus = DMMTSY_PHONE_ID_STATUS;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
	return KErrNone;
	}
TInt CPhoneDMmTsy::NotifyIdentityServiceStatusCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIdentityServiceStatusCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt  CPhoneDMmTsy::NotifyIdentitySuppressionRejected(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIdentitySuppressionRejected called"));
	if (!iNotifyIdentitySuppressionRejected++)
		{
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}
TInt CPhoneDMmTsy::NotifyIdentitySuppressionRejectedCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyIdentitySuppressionRejectedCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMulticallIndicatorChange(TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhoneMulticallIndicator* aMulticallIndicator)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMulticallIndicatorChange called"));
	if (!iNotifyMulticallIndicatorChange++)
		{
		*aMulticallIndicator = DMMTSY_PHONE_MULTICALL_IND;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyMulticallIndicatorChangeCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyMulticallIndicatorChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::EnumerateSmartCardApplications(const TTsyReqHandle aTsyReqHandle,TUint* aCount)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateSmartCardApplications called"));

	*aCount = DMMTSY_PHONE_SC_COUNT;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}

TInt CPhoneDMmTsy::EnumerateSmartCardApplicationsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::EnumerateSmartCardApplicationsCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetSmartCardApplicationInfo(const TTsyReqHandle aTsyReqHandle,TUint* aAppIndex, TDes8* aInfoBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSmartCardApplicationInfo called"));

	if(*aAppIndex == DMMTSY_PHONE_SC_APP_INDEX1)
		{
		RMobilePhone::TSmartCardApplicationInfoV5Pckg *ScAppInfoPckg = REINTERPRET_CAST(RMobilePhone::TSmartCardApplicationInfoV5Pckg *, aInfoBuffer);
		RMobilePhone::TSmartCardApplicationInfoV5 &ScAppInfo = (*ScAppInfoPckg)();
		
		if(ScAppInfo.ExtensionId() != KEtelExtMultimodeV5)
			{
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
			}
		else
			{
			ScAppInfo.iAID = DMMTSY_PHONE_SC_AID;
			ScAppInfo.iLabel = DMMTSY_PHONE_SC_LABEL;
			}			
		}
	else
		{
		return DMMTSY_PHONE_SC_OUTOFRANGE;	
		}	
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;		
	}
	
TInt CPhoneDMmTsy::GetSmartCardApplicationInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSmartCardApplicationInfoCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifySmartCardApplicationInfoChange(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TSmartCardApplicationEvent* aEvent, RMobilePhone::TAID* aAID)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySmartCardApplicationInfoChange called"));
	if(!iNotifySmartCardApplicationInfoChange++)
		{
		*aEvent = DMMTSY_PHONE_SC_EVENT_ACTIVATE;
		*aAID = DMMTSY_PHONE_SC_AID;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifySmartCardApplicationInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifySmartCardApplicationInfoChange called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::SetSmartCardApplicationStatus(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAID* aAID, RMobilePhone::TSmartCardApplicationAction aAction)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetSmartCardApplicationStatus called"));

	if(*aAID != DMMTSY_PHONE_SC_AID2 || aAction != DMMTSY_PHONE_SC_ACTION_TERMINATE)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else		
		AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;		
	}
	
TInt CPhoneDMmTsy::SetSmartCardApplicationStatusCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetSmartCardApplicationStatusCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::GetScFileInfo(const TTsyReqHandle aTsyReqHandle, const RMobilePhone::TScFilePath& aFilePathId, TDes8* aInfo)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetScFileInfo called"));

	if(aFilePathId.iAID != DMMTSY_PHONE_SC_AID || aFilePathId.iPath != DMMTSY_PHONE_SC_PATH_REF)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else		
		{
		RMobilePhone::TScFileInfoV5Pckg *scFileInfoPckg = REINTERPRET_CAST(RMobilePhone::TScFileInfoV5Pckg*, aInfo);
		RMobilePhone::TScFileInfoV5 &scFileInfo = (*scFileInfoPckg)();
		
		if(scFileInfo.ExtensionId() != KEtelExtMultimodeV5)
			{
			ReqCompleted(aTsyReqHandle,KErrCorrupt);
			}
		else
			{
			scFileInfo.iFileID = DMMTSY_PHONE_SC_FILEID;
			scFileInfo.iNumberRecords = DMMTSY_PHONE_SC_NORECORDS;
			scFileInfo.iRecordLength = DMMTSY_PHONE_SC_RECORD_SIZE;
			scFileInfo.iType = DMMTSY_PHONE_SC_TYPE;
			scFileInfo.iTotalLength = DMMTSY_PHONE_SC_FILESIZE;
			}	
		AddDelayedReq(aTsyReqHandle,this);
		}		
	return KErrNone;		
	}
	
TInt CPhoneDMmTsy::GetScFileInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetScFileInfoCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::ReadScFile(const TTsyReqHandle aTsyReqHandle, const RMobilePhone::TScFilePathWithAccessOffsets& aFilePathOffsets, TDes8* aReadBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadScFile called"));
	
	if(aFilePathOffsets.iAID != DMMTSY_PHONE_SC_AID || aFilePathOffsets.iPath != DMMTSY_PHONE_SC_PATH_REF || aFilePathOffsets.iType != DMMTSY_PHONE_SC_TYPE || aFilePathOffsets.iCount != DMMTSY_PHONE_SC_NORECORDS || aFilePathOffsets.iStartOffset != DMMTSY_PHONE_SC_START_OFFSET)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else		
		{
		aReadBuffer->Zero();
		aReadBuffer->Append(DMMTSY_PHONE_SC_RECORD0);
		aReadBuffer->Append(DMMTSY_PHONE_SC_RECORD1);
		aReadBuffer->Append(DMMTSY_PHONE_SC_RECORD2);
		
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::ReadScFileCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadScFileCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::UpdateScFile(const TTsyReqHandle aTsyReqHandle, const RMobilePhone::TScFilePathWithAccessOffsets& aFilePathOffsets, TDes8* aWriteBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::UpdateScFile called"));
	
	TInt startoffset = 0;
	TPtr8 record0(aWriteBuffer->MidTPtr(startoffset,DMMTSY_PHONE_SC_RECORD_SIZE));
	startoffset += DMMTSY_PHONE_SC_RECORD_SIZE;
	TPtr8 record1(aWriteBuffer->MidTPtr(startoffset,DMMTSY_PHONE_SC_RECORD_SIZE));
	startoffset += DMMTSY_PHONE_SC_RECORD_SIZE;
	TPtr8 record2(aWriteBuffer->MidTPtr(startoffset,DMMTSY_PHONE_SC_RECORD_SIZE));
		
	if(aFilePathOffsets.iAID != DMMTSY_PHONE_SC_AID || aFilePathOffsets.iPath != DMMTSY_PHONE_SC_PATH_REF || aFilePathOffsets.iType != DMMTSY_PHONE_SC_TYPE || aFilePathOffsets.iCount != DMMTSY_PHONE_SC_NORECORDS || aFilePathOffsets.iStartOffset != DMMTSY_PHONE_SC_START_OFFSET)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else if(record0 != DMMTSY_PHONE_SC_RECORD0 || record1 != DMMTSY_PHONE_SC_RECORD1 || record2 != DMMTSY_PHONE_SC_RECORD2)
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
	else	
		AddDelayedReq(aTsyReqHandle,this);
		
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::UpdateScFileCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::UpdateScFileCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
TInt CPhoneDMmTsy::GetCurrentActiveUSimApplication(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TAID* aAID)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentActiveUSimApplication called"));

	*aAID = DMMTSY_PHONE_SC_AID;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;		
	}
	
TInt CPhoneDMmTsy::GetCurrentActiveUSimApplicationCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetCurrentActiveUSimApplicationCancel called"));

	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}
	
CPhoneDMmTsy* CPhoneDMmTsy::This(TAny* aPtr)
	{
	return REINTERPRET_CAST(CPhoneDMmTsy*,aPtr);
	}

TInt CPhoneDMmTsy::GetAuthorizationInfoPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthorizationInfoPhase1 called"));
	TInt ret(KErrNone);
	TInt leaveCode(KErrNone);
	TRAP(leaveCode, ret=ProcessGetAuthorizationInfoPhase1L(aTsyReqHandle, aId, aBufSize););
	if (leaveCode != KErrNone)
		ReqCompleted(aTsyReqHandle,leaveCode);
	return ret;
	};

TInt CPhoneDMmTsy::ProcessGetAuthorizationInfoPhase1L(const TTsyReqHandle aTsyReqHandle,
											 RMobilePhone::TClientId* aClient,
											 TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthorizationInfoPhase1 called"));	

	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	HBufC8* iBuff=NULL;
	iAuthInfo->ExternalizeL(iBuff);	
	CleanupStack::PushL(iBuff);
		
	CBufFlat* buf=CBufFlat::NewL(iBuff->Length());
	CleanupStack::PushL(buf);
	buf->InsertL(0,*iBuff);	
	
	read->iListBuf = buf;
	CleanupStack::Pop(buf);	
	CleanupStack::PopAndDestroy(iBuff);
	
	iGetAuthorizationData->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
TInt CPhoneDMmTsy::GetAuthorizationInfoPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthorizationInfoPhase2 called"));	
	CListReadAllAttempt* read=NULL;
	// Find the get detected network attempt from this client
	for (TInt i=0; i<iGetAuthorizationData->Count(); ++i)
		{
		read = iGetAuthorizationData->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuffer->Copy(bufPtr);
			delete read;
			iGetAuthorizationData->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrBadHandle);
	return KErrNone;
	}


TInt CPhoneDMmTsy::GetAuthorizationInfoCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthorizationInfoCancel called"));

	// Remove the read all attempt from iGetAuthorizationData
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetAuthorizationData->Count(); ++i)
		{
		read = iGetAuthorizationData->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetAuthorizationData->Delete(i);
			break;
			}
		}
		
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAuthenticationData(const TTsyReqHandle aTsyReqHandle,TDes8* aAuthenticationData)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AuthentificationData called"));
	TInt ret(KErrNone);
	User::After(300000); // wait to have KRequestPending
	RMobilePhone::TImsAuthenticateDataV5Pckg* authenticateDataPckgd=(RMobilePhone::TImsAuthenticateDataV5Pckg*)aAuthenticationData;
	RMobilePhone::TImsAuthenticateDataV5& authenticateData=(*authenticateDataPckgd)();
	if(authenticateData.iAUTN!=DMMTSY_PHONE_AUTN_IN || authenticateData.iRAND!=DMMTSY_PHONE_RAND_IN)
		{
		ret=KErrCorrupt;
		ReqCompleted(aTsyReqHandle,ret);
		}
	else
		{
		authenticateData.iAUTN=DMMTSY_PHONE_AUTN_OUT;
		authenticateData.iRAND=DMMTSY_PHONE_RAND_OUT;
		authenticateData.iRES=DMMTSY_PHONE_RES_OUT;
		authenticateData.iIK=DMMTSY_PHONE_IK_OUT;
		authenticateData.iCK=DMMTSY_PHONE_CK_OUT;
		authenticateData.iAUTS=DMMTSY_PHONE_AUTS_OUT;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAuthenticationDataCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::AuthentificationDataCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyImsAuthorizationInfoChanged(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyImsAuthorizationInfoChanged called"));
	if (!iNotifyImsAuthorizationInfoChange++)
		{
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	
	}
TInt CPhoneDMmTsy::NotifyImsAuthorizationInfoChangedCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyImsAuthorizationInfoChangedCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetSmartCardAuthenticationData(const TTsyReqHandle aTsyReqHandle, TDes8* aSmartCardAuthData, RMobilePhone::TAID* aAID)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSmartCardAuthenticationData called"));

	RMobilePhone::TSmartCardAuthenticateDataV6Pckg *smartCardAuthenticateDataPckg =
	  reinterpret_cast<RMobilePhone::TSmartCardAuthenticateDataV6Pckg*>(aSmartCardAuthData);

	RMobilePhone::TSmartCardAuthenticateDataV6 &smartCardAuthenticateData =
	  (*smartCardAuthenticateDataPckg)();

	if (aAID != NULL)
		{
		if (*aAID != DMMTSY_PHONE_GBA_AID() && 
			*aAID != DMMTSY_PHONE_EAPAPP_AID() &&
			*aAID != DMMTSY_PHONE_MBMS_AID())
			{
			ReqCompleted(aTsyReqHandle, KErrCorrupt);
			return KErrNone;
			}
		}
	// USIM authentication
	if(smartCardAuthenticateData.ExtensionId() == KEtelExtMultimodeV6)
		{
		if(smartCardAuthenticateData.iAUTN != DMMTSY_PHONE_SC_AUTN_IN ||
		  smartCardAuthenticateData.iRAND != DMMTSY_PHONE_SC_RAND_IN)
			{
			ReqCompleted(aTsyReqHandle, KErrCorrupt);
			}
		else
			{
			smartCardAuthenticateData.iAUTN=DMMTSY_PHONE_SC_AUTN_OUT;
			smartCardAuthenticateData.iRAND=DMMTSY_PHONE_SC_RAND_OUT;
			smartCardAuthenticateData.iRES=DMMTSY_PHONE_SC_RES_OUT;
			smartCardAuthenticateData.iIK=DMMTSY_PHONE_SC_IK_OUT;
			smartCardAuthenticateData.iCK=DMMTSY_PHONE_SC_CK_OUT;
			smartCardAuthenticateData.iAUTS=DMMTSY_PHONE_SC_AUTS_OUT;
			smartCardAuthenticateData.iKc=DMMTSY_PHONE_SC_KC_OUT;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileGbaBootstrapAuthDataV8)
		{
		RMobilePhone::TGbaBootstrapAuthDataV8Pckg *gbaBootstrapAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TGbaBootstrapAuthDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TGbaBootstrapAuthDataV8 &gbaBootstrapAuthData =
		  (*gbaBootstrapAuthenticateDataPckg)();
		
		 if(gbaBootstrapAuthData.iAUTN != DMMTSY_PHONE_GBA_AUTN_IN ||
				gbaBootstrapAuthData.iRAND != DMMTSY_PHONE_GBA_RAND_IN)
			{
			iGbaBootstrapAuthDataFail++;
			switch(iGbaBootstrapAuthDataFail)
				{
			case 1:
				gbaBootstrapAuthData.iRES=DMMTSY_PHONE_GBA_FAIL_RES_OUT;
				gbaBootstrapAuthData.iAUTS=DMMTSY_PHONE_GBA_FAIL_AUTS_OUT;
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthVerificationFailure);
				break;
			
			case 2:
				gbaBootstrapAuthData.iRES=DMMTSY_PHONE_GBA_FAIL_RES_OUT;
				gbaBootstrapAuthData.iAUTS=DMMTSY_PHONE_GBA_SUCC_AUTS_OUT;
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthMacInvalid);
				break;
				
			case 3:
			default:
				gbaBootstrapAuthData.iRES=DMMTSY_PHONE_GBA_FAIL_RES_OUT;
				gbaBootstrapAuthData.iAUTS=DMMTSY_PHONE_GBA_SUCC_AUTS_OUT;
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iGbaBootstrapAuthDataFail=0;
				break;
				}
			}
		else
			{
			gbaBootstrapAuthData.iRES=DMMTSY_PHONE_GBA_SUCC_RES_OUT;
			gbaBootstrapAuthData.iAUTS=DMMTSY_PHONE_GBA_SUCC_AUTS_OUT;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileGbaNafAuthDataV8)
		{
		RMobilePhone::TGbaNafAuthDataV8Pckg *gbaNafAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TGbaNafAuthDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TGbaNafAuthDataV8 &gbaNafAuthData=
		  (*gbaNafAuthenticateDataPckg)();
		if(gbaNafAuthData.iNafId != DMMTSY_PHONE_GBA_VALID_NAFID ||
				gbaNafAuthData.iImpi != DMMTSY_PHONE_GBA_VALID_IMPI)
			{
			iGbaNafAuthDataFail++;
			switch(iGbaNafAuthDataFail)
				{	
			case 1:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthKeyNotFound);
				break;
				
			case 2:
				ReqCompleted(aTsyReqHandle, KErrCorrupt);
				break;	
					
			case 3:
			default:
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iGbaNafAuthDataFail=0;
				break;	
				}
			}
		else
			{
			gbaNafAuthData.iKsExtNaf=DMMTSY_PHONE_GBA_KS_EXTNAF;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileMbmsMskUpdateDataV8)
		{
		RMobilePhone::TMbmsMskUpdateDataV8Pckg *mbmsMskUpdateAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TMbmsMskUpdateDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TMbmsMskUpdateDataV8 &mbmsMskUpdateAuthData=
		  (*mbmsMskUpdateAuthenticateDataPckg)();
		 if(mbmsMskUpdateAuthData.iInputMikey == DMMTSY_PHONE_MBMS_INVALID_IMIKEY)
			{
			iMbmsMskUpdateAuthDataFail++;
			switch(iMbmsMskUpdateAuthDataFail)
				{
			case 1:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthKeyNotFound);
				break;
					
			case 2:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthKeyInvalid);
				break;
					
			case 3:
				ReqCompleted(aTsyReqHandle, KErrCorrupt);
				break;
					
			case 4:
			default:
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iMbmsMskUpdateAuthDataFail=0;
				break;
				}
			} 
		else if(mbmsMskUpdateAuthData.iInputMikey == DMMTSY_PHONE_MBMS_VALID_IMIKEY_WO_VBIT)
			{
			AddDelayedReq(aTsyReqHandle,this);
			}
		else if (mbmsMskUpdateAuthData.iInputMikey == DMMTSY_PHONE_MBMS_VALID_IMIKEY_W_VBIT)
			{
			mbmsMskUpdateAuthData.iOutputMikey=DMMTSY_PHONE_MBMS_OMIKEY_FOR_W_VBIT;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
		
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileMbmsMtkGenerateDataV8)
		{
		RMobilePhone::TMbmsMtkGenerateDataV8Pckg *mbmsMtkGenerateAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TMbmsMtkGenerateDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TMbmsMtkGenerateDataV8 &mbmsMtkGenerateAuthData=
		  (*mbmsMtkGenerateAuthenticateDataPckg)();
		  
		if(mbmsMtkGenerateAuthData.iMikey!= DMMTSY_PHONE_MBMS_VALID_IMIKEY)
			{
			iMbmsMtkGenerateAuthDataFail++;
			switch(iMbmsMtkGenerateAuthDataFail)
				{
			case 1:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthKeyNotFound);
				break;
						
			case 2:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthKeyInvalid);
				break;
						
			case 3:
				ReqCompleted(aTsyReqHandle, KErrMMEtelAuthMacInvalid);
				break;
						
			case 4:
				ReqCompleted(aTsyReqHandle, KErrCorrupt);
				break;
						
			case 5:
			default:
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iMbmsMtkGenerateAuthDataFail=0;
				break;
				}
			}
		else
			{
			mbmsMtkGenerateAuthData.iMtk = DMMTSY_PHONE_MBMS_VALID_MTK;
			mbmsMtkGenerateAuthData.iSaltKey = DMMTSY_PHONE_MBMS_VALID_SALTKEY;
			AddDelayedReq(aTsyReqHandle,this);
			}
		}
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileMbmsMskDeleteDataV8)
		{
		RMobilePhone::TMbmsMskDeleteDataV8Pckg *mbmsMskDeleteAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TMbmsMskDeleteDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TMbmsMskDeleteDataV8 &mbmsMskDeleteAuthData=
		  (*mbmsMskDeleteAuthenticateDataPckg)();
		  
		if((mbmsMskDeleteAuthData.iKeyDomainId!= DMMTSY_PHONE_MBMS_VALID_KEYDMN) ||
		   (mbmsMskDeleteAuthData.iMskIdKeyGroup != DMMTSY_PHONE_MBMS_VALID_MSKIDGRP))	
			{
			iMbmsMskDeleteAuthDataFail++;
			switch(iMbmsMskDeleteAuthDataFail)
				{
			case 1:
				ReqCompleted(aTsyReqHandle, KErrNotFound);
				break;
					
			case 2:
			default:
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iMbmsMskDeleteAuthDataFail=0;
				break;
				}	
			}
		else
			{
			AddDelayedReq(aTsyReqHandle,this);	
			}
		}
	else if(smartCardAuthenticateData.ExtensionId() == RMobilePhone::KETelMobileMbmsMukDeleteDataV8)
		{
		RMobilePhone::TMbmsMukDeleteDataV8Pckg *mbmsMukDeleteAuthenticateDataPckg =
		  STATIC_CAST(RMobilePhone::TMbmsMukDeleteDataV8Pckg*,aSmartCardAuthData);

		RMobilePhone::TMbmsMukDeleteDataV8 &mbmsMukDeleteAuthData=
		  (*mbmsMukDeleteAuthenticateDataPckg)();
		  
		if(mbmsMukDeleteAuthData.iMukIdTlv!= DMMTSY_PHONE_MBMS_VALID_MUKID) 
			{
			iMbmsMukDeleteAuthDataFail++;
			switch(iMbmsMukDeleteAuthDataFail)
				{
			case 1:
				ReqCompleted(aTsyReqHandle, KErrNotFound);
				break;
					
			case 2:
			default:
				ReqCompleted(aTsyReqHandle, KErrInUse);
				iMbmsMukDeleteAuthDataFail=0;
				break;
				}	
			}
		else
			{
			AddDelayedReq(aTsyReqHandle,this);	
			}
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetSmartCardAuthenticationDataCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetSmartCardAuthenticationDataCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle, KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::SetEmergencyClient(const TTsyReqHandle aTsyReqHandle, TUint32* aEmergencyRequest)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetEmergencyClient called"));
	
	switch (*aEmergencyRequest)
		{
	case RPhone::EEmergencyLCSRequest:
	case RPhone::EEmergencyCSVoiceCallRequest:
	case RPhone::EEmergencyLCSRequest | RPhone::EEmergencyCSVoiceCallRequest:
		ReqCompleted(aTsyReqHandle, KErrNone);
		break;
	default:
		return KErrCorrupt;
		}
	
	return KErrNone;
	}

//
// First Ordinal Functions
//
extern "C"
	{
	IMPORT_C CPhoneFactoryBase* LibEntry();	// Force "Proper Name" export
	}

EXPORT_C CPhoneFactoryBase* LibEntry()
	{
	CPhoneFactoryDMmTsy* factory = NULL;
	TRAP_IGNORE(factory = CPhoneFactoryDMmTsy::NewL());
	return factory;
	}

//
// DMmTsy Phone Factory Functions
//

CPhoneFactoryDMmTsy* CPhoneFactoryDMmTsy::NewL()
	{
	CPhoneFactoryDMmTsy *This = new (ELeave) CPhoneFactoryDMmTsy;
	CleanupStack::PushL(This);
	This->ConstructL();
	CleanupStack::Pop();
	return This;
	}

CPhoneFactoryDMmTsy::CPhoneFactoryDMmTsy()
	{
	iVersion=TVersion(	KTsyEtelMajorVersionNumber,
						KTsyEtelMinorVersionNumber,
						KTsyEtelBuildVersionNumber);
	}

CPhoneFactoryDMmTsy::~CPhoneFactoryDMmTsy()
	{
	LOGDESTROY();
	}

CPhoneBase * CPhoneFactoryDMmTsy::NewPhoneL(const TDesC& aName)
	{
	if (aName.Compare(DMMTSY_PHONE_NAME)==KErrNone)
		return CPhoneDMmTsy::NewL(this);
	else if (aName.Compare(DMMTSY_PHONE_NAMEAUTH1)==KErrNone)
		{
		CPhoneDMmTsy* phone=CPhoneDMmTsy::NewL(this);
		CleanupStack::PushL(phone);
		// it van be initialised in different ways by using name of the phone -
		// that's why different names of phones shall be used
		phone->iAuthInfo->iIMPI=DMMTSY_PHONE1_IMPI;
		phone->iAuthInfo->iIMPUArray.Append(DMMTSY_PHONE1_IMPU0);
		phone->iAuthInfo->iHomeNetworkDomainName=DMMTSY_PHONE1_HNDN;
		phone->iAuthInfo->iAuthenticationDataSource=DMMTSY_PHONE1_DATASOURCE;
		CleanupStack::Pop(phone);
		return phone;
		}
	else if (aName.Compare(DMMTSY_PHONE_NAMEAUTH2)==KErrNone)
		{
		CPhoneDMmTsy* phone=CPhoneDMmTsy::NewL(this);
		CleanupStack::PushL(phone);
		// it van be initialised in different ways by using name of the phone -
		// that's why different names of phones shall be used
		phone->iAuthInfo->iIMPI=DMMTSY_PHONE2_IMPI;
		phone->iAuthInfo->iIMPUArray.Append(DMMTSY_PHONE2_IMPU1);
		phone->iAuthInfo->iIMPUArray.Append(DMMTSY_PHONE2_IMPU2);
		phone->iAuthInfo->iIMPUArray.Append(DMMTSY_PHONE2_IMPU3);
		phone->iAuthInfo->iIMPUArray.Append(DMMTSY_PHONE2_IMPU4);
		phone->iAuthInfo->iHomeNetworkDomainName=DMMTSY_PHONE2_HNDN;
		phone->iAuthInfo->iAuthenticationDataSource=DMMTSY_PHONE2_DATASOURCE;
		CleanupStack::Pop(phone);
		return phone;
		}
	else if (aName.Compare(DMMTSY_PHONE_NAMEAUTH3)==KErrNone)
		{
		CPhoneDMmTsy* phone=CPhoneDMmTsy::NewL(this);
		CleanupStack::PushL(phone);
		// it van be initialised in different ways by using name of the phone -
		// that's why different names of phones shall be used
		phone->iAuthInfo->iIMPI=DMMTSY_PHONE3_IMPI;
		phone->iAuthInfo->iHomeNetworkDomainName=DMMTSY_PHONE3_HNDN;
		phone->iAuthInfo->iAuthenticationDataSource=DMMTSY_PHONE3_DATASOURCE;
		CleanupStack::Pop(phone);
		return phone;
		}
	return NULL;
	}

TBool CPhoneFactoryDMmTsy::IsSupported(const TInt /*aMixin*/)
	{
	return EFalse;
	}

//
// methods for CActiveListNode
//

CPhoneDMmTsy::CActiveListNode::CActiveListNode(CActive *aActive, const TTsyReqHandle aTsyReqHandle) :
	iActive(aActive), iTsyReqHandle(aTsyReqHandle)
	{

	}

CPhoneDMmTsy::CActiveListNode::~CActiveListNode()
	{
	delete iActive;
	}

//
// methods for the list of aos which corresspond to the outstanding delayed asyncrhonous reqs
//

TInt CPhoneDMmTsy::FindDelayedReq(const TTsyReqHandle aTsyReqHandle, CActiveListNode *& aNode)
	{
	TInt err = KErrNotFound;
	TSglQueIter<CActiveListNode> iter(iActiveRequestObjects);
	iter.SetToFirst();

	CActiveListNode *node = aNode = NULL;
	while ((node = iter++) != NULL)
		if (node->iTsyReqHandle == aTsyReqHandle)
			break;

	if (node != NULL)
		{
		aNode = node;
		err = KErrNone;
		}

	return err;
	}

TInt CPhoneDMmTsy::RemoveDelayedReq(const TTsyReqHandle aTsyReqHandle)
	{
	CActiveListNode *aNode = NULL;
	TInt err = FindDelayedReq(aTsyReqHandle,aNode);
	if (err == KErrNone)
		{
		iActiveRequestObjects.Remove(*aNode);
		delete aNode;
		}
	return err;
	}

void CPhoneDMmTsy::RegisterDelayedReqL(const TTsyReqHandle aTsyReqHandle, CTelObject *aTelObject)
	{
	CDelayedCompleter *delayed = CDelayedCompleter::NewL(aTsyReqHandle,this,aTelObject);
	CleanupStack::PushL(delayed);
	CActiveListNode *newNode = new (ELeave) CActiveListNode(delayed,aTsyReqHandle);
	iActiveRequestObjects.AddLast(*newNode);
	delayed->After(100000);
	CleanupStack::Pop(); // delayed
	}
void CPhoneDMmTsy::RegisterDelayedReqL(const TTsyReqHandle aTsyReqHandle, CTelObject *aTelObject,TInt aPriority)
	{
	CDelayedCompleter *delayed = CDelayedCompleter::NewL(aTsyReqHandle,this,aTelObject);
	CleanupStack::PushL(delayed);
	CActiveListNode *newNode = new (ELeave) CActiveListNode(delayed,aTsyReqHandle);
	iActiveRequestObjects.AddLast(*newNode);
	delayed->After(aPriority);
	CleanupStack::Pop(); // delayed
	}
void CPhoneDMmTsy::AddDelayedReq(const TTsyReqHandle aTsyReqHandle, CTelObject *aTelObject)
	{
	TRAPD(err, RegisterDelayedReqL(aTsyReqHandle, aTelObject));

	if (err != KErrNone)
		{
		ReqCompleted(aTsyReqHandle, err);
		}
	}
void CPhoneDMmTsy::AddDelayedReq(const TTsyReqHandle aTsyReqHandle, CTelObject *aTelObject,TInt aPriority)
	{
	TRAPD(err, RegisterDelayedReqL(aTsyReqHandle, aTelObject, aPriority));


	if (err != KErrNone)
		{
		ReqCompleted(aTsyReqHandle, err);
		}
	}

TInt CPhoneDMmTsy::NotifyAuthenticateDataChange(const TTsyReqHandle aTsyReqHandle,TDes8* aAuthInfo)
	{
	if(!iNotifyAuthenticationDataChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyAuthenticationDataChange called"));
		RMobilePhone::TAuthInfoV8Pckg *authInfoV8Pckg = STATIC_CAST(RMobilePhone::TAuthInfoV8Pckg*,aAuthInfo);
		RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfoV8Pckg)();
		authInfoV8.iAID = DMMTSY_PHONE_GBA_AID;
		authInfoV8.iData = DMMTSY_PHONE_AUTH_DATA_GBA_PARAMS;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyAuthenticateDataChangeCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyAuthenticationDataChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetGbaBootstrapParams(const TTsyReqHandle aTsyReqHandle,RMobilePhone::TAID* aAID,TDes8* aParams)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetGbaBootstrapParams called"));
	RMobilePhone::TBsfDataV8Pckg *bsfDataV8Pckg = STATIC_CAST(RMobilePhone::TBsfDataV8Pckg*,aParams);
	RMobilePhone::TBsfDataV8 &bsfDataV8 = (*bsfDataV8Pckg)();
	if((bsfDataV8.iBtid != DMMTSY_PHONE_BSF_VALID_BTID) ||
		(bsfDataV8.iKeyLifetime != DMMTSY_PHONE_BSF_VALID_KEYLIFETIME) ||
		(*aAID != DMMTSY_PHONE_GBA_AID )) 
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		}
	else
		{
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;	
	}

TInt CPhoneDMmTsy::SetGbaBootstrapParamsCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetGbaBootstrapParamsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}	

TInt CPhoneDMmTsy::GetAuthenticationParams(const TTsyReqHandle aTsyReqHandle,TDes8* aAuthInfo,TDes8* aParams)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthenticationParams called"));
	RMobilePhone::TAuthInfoV8Pckg *authInfoV8Pckg = STATIC_CAST(RMobilePhone::TAuthInfoV8Pckg*,aAuthInfo);
	RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfoV8Pckg)();
	if(authInfoV8.iData == DMMTSY_PHONE_AUTH_DATA_GBA_PARAMS && authInfoV8.iAID == DMMTSY_PHONE_GBA_AID)
		{
		RMobilePhone::TGbaBootstrapParamsV8Pckg *gbaBootstrapV8Pckg = STATIC_CAST(RMobilePhone::TGbaBootstrapParamsV8Pckg*,aParams);
		RMobilePhone::TGbaBootstrapParamsV8 &gbaBootstrapV8 = (*gbaBootstrapV8Pckg)();
		gbaBootstrapV8.iRand = DMMTSY_PHONE_GBA_RAND_IN;
		gbaBootstrapV8.iBtid = DMMTSY_PHONE_BSF_VALID_BTID;
		gbaBootstrapV8.iKeyLifetime = DMMTSY_PHONE_BSF_VALID_KEYLIFETIME;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else if(authInfoV8.iData == DMMTSY_PHONE_AUTH_DATA_MBMS_MUK && authInfoV8.iAID == DMMTSY_PHONE_MBMS_AID)
		{
		RMobilePhone::TMbmsUserKeyV8Pckg *mbmsUserKeyV8Pckg = STATIC_CAST(RMobilePhone::TMbmsUserKeyV8Pckg*,aParams);
		RMobilePhone::TMbmsUserKeyV8 &mbmsUserKeyV8 = (*mbmsUserKeyV8Pckg)();
		mbmsUserKeyV8.iMukIdi = DMMTSY_PHONE_MBMS_VALID_MUK_IDI;
		mbmsUserKeyV8.iMukIdr = DMMTSY_PHONE_MBMS_VALID_MUK_IDR;
		mbmsUserKeyV8.iTimeStampCounter = DMMTSY_PHONE_MBMS_VALID_MUK_ITIMESTM;
		AddDelayedReq(aTsyReqHandle,this);
		}
	else
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		}
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetAuthenticationParamsCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthenticationParamsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAuthenticationListPhase1(const TTsyReqHandle aTsyReqHandle,CRetrieveMobilePhoneAuthenticationIds::TAuthRequestData* aRequest,TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetAuthenticationListPhase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	
	if (((aRequest->iAuthInfo.iData) == DMMTSY_PHONE_AUTH_DATA_NAF_LIST) ||
		((aRequest->iAuthInfo.iData) == DMMTSY_PHONE_AUTH_DATA_MBMS_MSK))
		{
		leaveCode = KErrNone;
		}
	else
	 	{
	 	leaveCode = KErrCorrupt;	
	 	}  

	if (leaveCode == KErrNone)
		{
		if (aRequest->iAuthInfo.iData==DMMTSY_PHONE_AUTH_DATA_NAF_LIST)
			{
			TRAP(leaveCode, ret=ProcessGetGbaPhase1L(aTsyReqHandle, &aRequest->iClient,aBufSize););
			}
		else if(aRequest->iAuthInfo.iData==DMMTSY_PHONE_AUTH_DATA_MBMS_MSK)
			{
			TRAP(leaveCode, ret=ProcessGetMbmsPhase1L(aTsyReqHandle, &aRequest->iClient,aBufSize););
			}
		}

	if (leaveCode != KErrNone)
		{
		ReqCompleted(aTsyReqHandle,leaveCode);
		}
	return ret;
	};

TInt CPhoneDMmTsy::ProcessGetGbaPhase1L(const TTsyReqHandle aTsyReqHandle,
											   RMobilePhone::TClientId* aId,TInt* aBufSize)
	{
	// read the list, store its content and then return size of this buffer to client
	CMobilePhoneGbaNafIdList* list=CMobilePhoneGbaNafIdList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TGbaNafEntryV8 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_PHONE_GBA_NAFLIST_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iNafId = DMMTSY_PHONE_GBA_NAFLIST_NAFID_ONE;
			entry.iBtid = DMMTSY_PHONE_GBA_NAFLIST_BTID_ONE;
			break;
		case 1:
			entry.iNafId = DMMTSY_PHONE_GBA_NAFLIST_NAFID_TWO;
			entry.iBtid = DMMTSY_PHONE_GBA_NAFLIST_BTID_TWO;
			break;
		case 2:
			entry.iNafId = DMMTSY_PHONE_GBA_NAFLIST_NAFID_THREE;
			entry.iBtid = DMMTSY_PHONE_GBA_NAFLIST_BTID_THREE;
			break;
		case 3:
		default:
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}
	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aId, aTsyReqHandle);
	CleanupStack::PushL(read);

	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC

	iAuthReadAll->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt

	// return the CBufFlat’s size to client
	*aBufSize=(read->iListBuf)->Size();

	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::ProcessGetMbmsPhase1L(const TTsyReqHandle aTsyReqHandle,
											   RMobilePhone::TClientId* aId,TInt* aBufSize)
	{
	// read the list, store its content and then return size of this buffer to client
	CMobilePhoneMbmsMskIdList* list=CMobilePhoneMbmsMskIdList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TMskEntryV8 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_PHONE_MBMS_LIST_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iKeyDomainId = DMMTSY_PHONE_MBMSLIST_KEYDMN_ONE;
			entry.iMskId = DMMTSY_PHONE_MBMSLIST_MSKID_ONE;
			entry.iTimeStampCounter = DMMTSY_PHONE_MBMSLIST_TIMESTM_ONE;
			break;
		case 1:
			entry.iKeyDomainId = DMMTSY_PHONE_MBMSLIST_KEYDMN_TWO;
			entry.iMskId = DMMTSY_PHONE_MBMSLIST_MSKID_TWO;
			entry.iTimeStampCounter = DMMTSY_PHONE_MBMSLIST_TIMESTM_TWO;
			break;
		case 2:
			entry.iKeyDomainId = DMMTSY_PHONE_MBMSLIST_KEYDMN_THREE;
			entry.iMskId = DMMTSY_PHONE_MBMSLIST_MSKID_THREE;
			entry.iTimeStampCounter = DMMTSY_PHONE_MBMSLIST_TIMESTM_THREE;
			break;
		case 3:
		default:
			break;
			}
			// Add the entry into the list, at the next empty location
			list->AddEntryL(entry);
		}
	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aId, aTsyReqHandle);
	CleanupStack::PushL(read);

	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC

	iAuthReadAll->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt

	// return the CBufFlat’s size to client
	*aBufSize=(read->iListBuf)->Size();

	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetAuthenticationListPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadAllPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the read attempt from this client
	for (TInt i=0; i<iAuthReadAll->Count(); ++i)
		{
		read = iAuthReadAll->At(i);
		if ((read->iClient.iSessionHandle==aId->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aId->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuffer->Copy(bufPtr);
			delete read;
			iAuthReadAll->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}
	
TInt CPhoneDMmTsy::GetAuthenticationListCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::ReadAllCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iAuthReadAll
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iAuthReadAll->Count(); ++i)
		{
		read = iAuthReadAll->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iAuthReadAll->Delete(i);
			break;
			}
		}

	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

//
// Wlan
//
TInt CPhoneDMmTsy::NotifyWlanDataChange(const TTsyReqHandle aTsyReqHandle,TDes8* aData)
	{
	if(!iNotifyWlanDataChange++)
		{
		LOGTEXT(_L8("CPhoneDMmTsy::NotifyWlanDataChange called"));
		RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = STATIC_CAST(RMobilePhone::TUsimWlanDataV8Pckg*,aData);
		RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)();
		WlanDataV8.iFieldsUsed = DMMTSY_PHONE_WLAN_LIST_DATA_FLAGS;
		WlanDataV8.iPseudonym = DMMTSY_PHONE_WLAN_VALID_PSEUDONYM;
		WlanDataV8.iReauthenticationId = DMMTSY_PHONE_WLAN_VALID_REAUTHID;
		WlanDataV8.iMasterKey = DMMTSY_PHONE_WLAN_VALID_MASTERKEY;
		WlanDataV8.iCounter = DMMTSY_PHONE_WLAN_VALID_COUNTER;
		AddDelayedReq(aTsyReqHandle,this);
		}
	return KErrNone;
	}

TInt CPhoneDMmTsy::NotifyWlanDataChangeCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyWlanDataChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::SetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetWlanData called"));
	RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = STATIC_CAST(RMobilePhone::TUsimWlanDataV8Pckg*,aData);
	RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)();
	if((WlanDataV8.iFieldsUsed != DMMTSY_PHONE_WLAN_LIST_DATA_FLAGS) ||
	(WlanDataV8.iPseudonym != DMMTSY_PHONE_WLAN_VALID_PSEUDONYM) ||
	(WlanDataV8.iReauthenticationId != DMMTSY_PHONE_WLAN_VALID_REAUTHID) ||
	(WlanDataV8.iMasterKey != DMMTSY_PHONE_WLAN_VALID_MASTERKEY) ||
	(WlanDataV8.iCounter != DMMTSY_PHONE_WLAN_VALID_COUNTER))
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		}
	else
		{
		AddDelayedReq(aTsyReqHandle,this);
		}
		
	return KErrNone;	
	}

TInt CPhoneDMmTsy::SetWlanDataCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::SetWlanDataCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}	

TInt CPhoneDMmTsy::GetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetWlanData called"));
	RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = STATIC_CAST(RMobilePhone::TUsimWlanDataV8Pckg*,aData);
	RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)();
	WlanDataV8.iFieldsUsed = DMMTSY_PHONE_WLAN_LIST_DATA_FLAGS;
	WlanDataV8.iPseudonym = DMMTSY_PHONE_WLAN_VALID_PSEUDONYM;
	WlanDataV8.iReauthenticationId = DMMTSY_PHONE_WLAN_VALID_REAUTHID;
	WlanDataV8.iMasterKey = DMMTSY_PHONE_WLAN_VALID_MASTERKEY;
	WlanDataV8.iCounter = DMMTSY_PHONE_WLAN_VALID_COUNTER;
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;	
	}

TInt CPhoneDMmTsy::GetWlanDataCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetWlanDataCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::StorePreferredWlanSIDList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::StorePreferredWlanSIDList called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessStorePreferredWlanSIDListL(aTsyReqHandle, aBuffer););
	if (leaveCode != KErrNone)
		{
		ReqCompleted(aTsyReqHandle,leaveCode);
		}
	return ret;
	};

TInt CPhoneDMmTsy::ProcessStorePreferredWlanSIDListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
	{
	CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL();
	CleanupStack::PushL(list);
	
	list->RestoreL(*aBuffer);

	RMobilePhone::TWlanSIDV8 entry;

	if (list->Enumerate() != DMMTSY_PHONE_WLAN_SIDLIST_COUNT)
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		CleanupStack::PopAndDestroy(); // list
		return KErrNone;
		}

	TInt error=KErrNone;
	TInt ret;
	for (TInt i=0; i<DMMTSY_PHONE_WLAN_SIDLIST_COUNT; ++i)
		{
		TRAP(ret,entry=list->GetEntryL(i));
		if (ret != KErrNone)
			break;
		switch(i)
			{
		case 0:
			{
			if(entry.iWSID != DMMTSY_PHONE_WLAN_WSID_ONE ||
			   entry.iUserDefined != DMMTSY_PHONE_WLAN_USERDEFD_ONE)
				{
				error  = KErrCorrupt;
				}
			}
			break;
		case 1:
			{
			if(entry.iWSID != DMMTSY_PHONE_WLAN_WSID_TWO ||
			   entry.iUserDefined != DMMTSY_PHONE_WLAN_USERDEFD_TWO)
				{
				error  = KErrCorrupt;
				}
			}
			break;
		case 2:
		default:
			{
			if(entry.iWSID != DMMTSY_PHONE_WLAN_WSID_THREE ||
			   entry.iUserDefined != DMMTSY_PHONE_WLAN_USERDEFD_THREE)
				{
				error  = KErrCorrupt;
				}
			}
			break;
			}
		}
	if(error==KErrNone)	
		{
		AddDelayedReq(aTsyReqHandle,this);	
		}
	else
		{
		ReqCompleted(aTsyReqHandle,KErrCorrupt);
		}
	CleanupStack::PopAndDestroy(); 
	return KErrNone;
	}

TInt CPhoneDMmTsy::StorePreferredWlanSIDListCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::StorePreferredWlanSIDListCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyPreferredWlanSIDListChange(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyPreferredWlanSIDListChange called"));
	AddDelayedReq(aTsyReqHandle,this);
	return KErrNone;
	}
	
TInt CPhoneDMmTsy::NotifyPreferredWlanSIDListChangeCancel(TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::NotifyPreferredWlanSIDListChangeCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPreferredWlanSIDsPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredWlanSIDsPhase1 called"));
	TInt ret=KErrNone;
	TInt leaveCode=KErrNone;
	TRAP(leaveCode, ret=ProcessGetPreferredWlanSIDsPhase1L(aTsyReqHandle, aClient, aBufSize););
	if (leaveCode != KErrNone)
		{
		ReqCompleted(aTsyReqHandle,leaveCode);
		}
	return ret;
	}	
	
TInt CPhoneDMmTsy::ProcessGetPreferredWlanSIDsPhase1L(const TTsyReqHandle aTsyReqHandle, 
													 RMobilePhone::TClientId* aClient, 
													 TInt* aBufSize)
	{
	// retrieve stored Wlan specific IDs from USIM,
	// store each entry.
	// stream the list and then return size of this buffer to client
	CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL();
	CleanupStack::PushL(list);

	RMobilePhone::TWlanSIDV8 entry;

	// fill up an example list
	for (TInt index=0; index < DMMTSY_PHONE_WLAN_SIDLIST_COUNT; index++)
		{
		switch (index)
			{
		case 0:
			entry.iWSID = DMMTSY_PHONE_WLAN_WSID_ONE;
		    entry.iUserDefined = DMMTSY_PHONE_WLAN_USERDEFD_ONE;
			break;
			
		case 1:
			entry.iWSID = DMMTSY_PHONE_WLAN_WSID_TWO;
		    entry.iUserDefined = DMMTSY_PHONE_WLAN_USERDEFD_TWO;
			break;
		
		case 2:
		default:
			entry.iWSID = DMMTSY_PHONE_WLAN_WSID_THREE;
		    entry.iUserDefined = DMMTSY_PHONE_WLAN_USERDEFD_THREE;
			break;
			}
		// Add the entry into the list, at the next empty location
		list->AddEntryL(entry);
		}
	// Store the streamed list and the client ID
	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
	CleanupStack::PushL(read);
	
	read->iListBuf = list->StoreLC();
	CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC
	
	iGetWlanSIDsData->AppendL(read);
	CleanupStack::Pop(); // pop the CListReadAllAttempt
	
	// return the CBufBase’s size to client
	*aBufSize=(read->iListBuf)->Size();
	
	// Complete first phase of list retrieval
	AddDelayedReq(aTsyReqHandle,this);
	CleanupStack::PopAndDestroy(); // pop&destroy list
	return KErrNone;
	}

TInt CPhoneDMmTsy::GetPreferredWlanSIDsPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredNetworksPhase2 called"));
	CListReadAllAttempt* read=NULL;
	// Find the get preferred wlan SIDs from this client
	for (TInt i=0; i<iGetWlanSIDsData->Count(); ++i)
		{
		read = iGetWlanSIDsData->At(i);
		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
			{
			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
			// Copy the streamed list to the client
			aBuf->Copy(bufPtr);
			delete read;
			iGetWlanSIDsData->Delete(i);
			ReqCompleted(aTsyReqHandle,KErrNone);
			return KErrNone;
			}
		}
	// Should handle error case of not finding the matching client from read all phase 1
	return KErrNotFound;
	}
	
TInt CPhoneDMmTsy::GetPreferredWlanSIDsCancel(const TTsyReqHandle aTsyReqHandle)
	{
	LOGTEXT(_L8("CPhoneDMmTsy::GetPreferredWlanSIDsCancel called"));
	RemoveDelayedReq(aTsyReqHandle);
	// Remove the read all attempt from iGetWlanSIDsData
	CListReadAllAttempt* read=NULL;
	for (TInt i=0; i<iGetWlanSIDsData->Count(); ++i)
		{
		read = iGetWlanSIDsData->At(i);
		if (read->iReqHandle == aTsyReqHandle)
			{
			delete read;
			iGetWlanSIDsData->Delete(i);
			break;
			}
		}
	ReqCompleted(aTsyReqHandle,KErrCancel);
	return KErrNone;
	}

/*******************************************************************/
//
// CDelayedCompleter
//
/*******************************************************************/



CDelayedCompleter::CDelayedCompleter(const TTsyReqHandle aTsyReqHandle, CPhoneDMmTsy *aPhoneObject,
									CTelObject *aTelObject) :
		CTimer(EPriorityStandard),iTsyReqHandle(aTsyReqHandle), iPhoneObject(aPhoneObject),
			iTelObject(aTelObject)
	{

	}

CDelayedCompleter* CDelayedCompleter::NewL(const TTsyReqHandle aTsyReqHandle, CPhoneDMmTsy *aPhoneObject,
									CTelObject *aTelObject)
	{
	CDelayedCompleter* This = new (ELeave) CDelayedCompleter(aTsyReqHandle,aPhoneObject,aTelObject);
	CleanupStack::PushL(This);
	This->ConstructL();
	CleanupStack::Pop();
	return This;
	}

void CDelayedCompleter::ConstructL()
	{
	CTimer::ConstructL();
	CActiveScheduler::Add(this);
	}

void CDelayedCompleter::RunL()
	{
	iTelObject->ReqCompleted(iTsyReqHandle,KErrNone);
	(void) iPhoneObject->RemoveDelayedReq(iTsyReqHandle); // we get deleted here
	}