telephonyserver/etelmultimode/DTsy/mmtsystore.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserver/etelmultimode/DTsy/mmtsystore.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserver/etelmultimode/DTsy/mmtsystore.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,2728 +1,2728 @@
-// 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:
-//
-
-#include "mmtsy.h"
-#include "testdef.h"
-#include "ETELMM.H"
-#include <et_clsvr.h>
-#include "Dmmlog.h"
-
-
-CListReadAllAttempt* CListReadAllAttempt::NewL(RMobilePhone::TClientId* aId, TTsyReqHandle aReqHandle)
-	{
-	CListReadAllAttempt* read=new(ELeave) CListReadAllAttempt(aId, aReqHandle);
-	CleanupStack::PushL(read);
-	read->ConstructL();
-	CleanupStack::Pop();
-	return read;
-	}
-
-CListReadAllAttempt::CListReadAllAttempt(RMobilePhone::TClientId* aId, TTsyReqHandle aReqHandle)
-	:CBase()
-	{
-	iClient.iSessionHandle=aId->iSessionHandle;
-	iClient.iSubSessionHandle=aId->iSubSessionHandle;
-	iReqHandle=aReqHandle;
-	iListBuf = NULL;
-	}
-
-void CListReadAllAttempt::ConstructL()
-	{
-	}
-
-CListReadAllAttempt::~CListReadAllAttempt()
-	{
-	delete iListBuf;
-	}
-
-/**************************************************************************/
-//
-//	CSmsStoreDMmTsy
-//
-/**************************************************************************/
-
-CSmsStoreDMmTsy* CSmsStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,
-									   const TDesC& aName)
-	{
-	CSmsStoreDMmTsy* subsession=new(ELeave) CSmsStoreDMmTsy(aPhone,aFac,aName);
-	CleanupStack::PushL(subsession);
-	subsession->ConstructL();
-	CleanupStack::Pop();
-	return subsession;
-	}
-
-void CSmsStoreDMmTsy::Init()
-	{}
-
-CSmsStoreDMmTsy::CSmsStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,
-								 const TDesC& aName)
-	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
-	{
-	iSmsStoreName=aName;
-	}
-
-void CSmsStoreDMmTsy::ConstructL()
-	{
-	iSmsReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
-	LOGTEXT(_L8("CSmsStoreDMmTsy created"));
-	}
-
-CSmsStoreDMmTsy::~CSmsStoreDMmTsy()
-	{
-	for (TInt i=iSmsReadAll->Count()-1; i>=0; --i)
-		{
-		CListReadAllAttempt* ptr=iSmsReadAll->At(i);
-		iSmsReadAll->Delete(i);
-		delete ptr;
-		}
-	delete iSmsReadAll;
-	LOGTEXT(_L8("CSmsStoreDMmTsy destroyed"));
-	}
-
-CTelObject* CSmsStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject* CSmsStoreDMmTsy::OpenNewObjectL(TDes&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject::TReqMode CSmsStoreDMmTsy::ReqModeL(const TInt aIpc)
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-
-//
-// Normal Services
-//
-
-//
-// Flow Controlled Services
-//
-	case EMobilePhoneStoreRead:
-	case EMobilePhoneStoreWrite:
-	case EMobilePhoneStoreDelete:
-	case EMobilePhoneStoreDeleteAll:
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-	case EMobilePhoneStoreGetInfo:
-		ret=KReqModeFlowControlObeyed;
-		break;
-
-//
-// Multiple Completion Services with Immediate Server Repost
-// (Usually Notifications)
-//
-	case EMobilePhoneStoreNotifyStoreEvent:
-		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-		break;
-//
-// Cancel Requests
-//
-	case EMobilePhoneStoreGetInfoCancel:
-	case EMobilePhoneStoreReadCancel:
-	case EMobilePhoneStoreWriteCancel:
-	case EMobilePhoneStoreDeleteCancel:
-	case EMobilePhoneStoreDeleteAllCancel:
-	case EMobilePhoneStoreReadAllCancel:
-	case EMobilePhoneStoreNotifyStoreEventCancel:
-	default:
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return ret;
-	}
-
-TInt CSmsStoreDMmTsy::RegisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CSmsStoreDMmTsy: RegisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CSmsStoreDMmTsy: Register error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CSmsStoreDMmTsy::DeregisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CSmsStoreDMmTsy: DeregisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CSmsStoreDMmTsy: Deregister error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CSmsStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CSmsStoreDMmTsy: Registered with 10 slots"));
-		numberOfSlots=10;
-		break;
-	default:
-		// Unknown or invalid Phone IPC
-		LOGTEXT(_L8("CSmsStoreDMmTsy: Number of Slots error, unknown IPC"));
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return numberOfSlots;
-	}
-
-
-TInt CSmsStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-	{
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreRead:
-		return Read(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreWrite:
-		return Write(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreDelete:
-		return Delete(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAll(aTsyReqHandle);
-
-	case EMobilePhoneStoreGetInfo:
-		return GetInfo(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1*, dataPtr));
-
-	case EMobilePhoneStoreReadAllPhase1:
-		return ReadAllPhase1(aTsyReqHandle,
-			REINTERPRET_CAST(CRetrieveMobilePhoneSmsList::TBatchRequestData*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllPhase2(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
-
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEvent(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	default:
-		return KErrNotSupported;
-		}
-	}
-
-TInt CSmsStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreGetInfo:
-		return GetInfoCancel(aTsyReqHandle);
-	case EMobilePhoneStoreRead:
-		return ReadCancel(aTsyReqHandle);
-	case EMobilePhoneStoreWrite:
-		return WriteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDelete:
-		return DeleteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEventCancel(aTsyReqHandle);
-		}
-	return KErrGeneral;
-	}
-
-
-TInt CSmsStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::Read called"));
-
-	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg* entryPckg = (RMobileSmsStore::TMobileGsmSmsEntryV1Pckg*)aEntry;
-	RMobileSmsStore::TMobileGsmSmsEntryV1& entry = (*entryPckg)();
-
-	if (entry.iIndex!=DMMTSY_SMS_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		{
-		entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
-		entry.iMsgStatus =DMMTSY_SMS_STORE_STATUS1;
-		entry.iServiceCentre.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
-		entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
-		entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
-
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::Write called"));
-
-	RMobileSmsStore::TMobileCdmaSmsEntryV1Pckg* entryPckg = (RMobileSmsStore::TMobileCdmaSmsEntryV1Pckg*)aEntry;
-	RMobileSmsStore::TMobileCdmaSmsEntryV1& entry = (*entryPckg)();
-
-	if ((entry.iIndex != DMMTSY_SMS_STORE_INDEX2) ||
-		(entry.iMsgData.Compare(DMMTSY_SMS_MESSAGE_PDU2) != 0) ||
-		(entry.iMsgStatus != DMMTSY_SMS_STORE_STATUS2) ||
-		(entry.iRemoteParty.iTelNumber != DMMTSY_SMS_MESSAGE_REMOTEPARTYNUMBER2) ||
-		(entry.iTeleservice != DMMTSY_SMS_MESSAGE_TELESERVICE))
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::WriteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::Delete called"));
-	if (*aIndex!=DMMTSY_SMS_STORE_INDEX3)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteAll called"));
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhoneStore::TMobilePhoneStoreInfoV1* aInfo)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::GetInfo called"));
-
-	aInfo->iName=DMMTSY_MESSAGE_STORE_NAME;
-	aInfo->iType=DMMTSY_MESSAGE_STORE_TYPE;
-	aInfo->iTotalEntries=DMMTSY_MESSAGE_STORE_TOTAL_ENTRIES;
-	aInfo->iUsedEntries=DMMTSY_MESSAGE_STORE_USED_ENTRIES;
-	aInfo->iCaps=DMMTSY_MESSAGE_STORE_CAPS;
-
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::GetInfoCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
-									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
-									   TInt* aIndex)
-	{
-	if (!iNotifyStoreEvent++)
-		{
-		LOGTEXT(_L8("CSmsStoreDMmTsy::NotifyStoreEvent called"));
-		*aIndex=DMMTSY_SMS_STORE_INDEX4;
-		*aEvent=DMMTSY_MESSAGE_STORE_EVENT;
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::NotifyStoreEventCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CSmsStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneSmsList::TBatchRequestData* aRequest, TInt* aBufSize)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllPhase1 called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-
-	if (aRequest->iBatchRequest)
-		if ((aRequest->iBatchSize != DMMTSY_SMS_STORE_BATCH) ||
-		    (aRequest->iStartIndex != DMMTSY_SMS_STORE_START))
-			leaveCode = KErrCorrupt;
-
-	if (leaveCode == KErrNone)
-		{
-		if (aRequest->iEntryType==DMMTSY_SMS_STORE_GSMENTRY_TYPE)
-			{
-			TRAP(leaveCode, ret=ProcessReadAllGsmPhase1L(aTsyReqHandle, &aRequest->iClient, aBufSize););
-			}
-		else
-			{
-			TRAP(leaveCode, ret=ProcessReadAllCdmaPhase1L(aTsyReqHandle, &aRequest->iClient, aBufSize););
-			}
-		}
-
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-
-	return ret;
-	};
-
-TInt CSmsStoreDMmTsy::ProcessReadAllGsmPhase1L(const TTsyReqHandle aTsyReqHandle,
-											   RMobilePhone::TClientId* aId,
-											   TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneGsmSmsList* list=CMobilePhoneGsmSmsList::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_SMS_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			entry.iIndex = DMMTSY_SMS_STORE_INDEX1;
-			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
-			entry.iServiceCentre.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
-			entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
-			entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
-			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS1;
-			break;
-		case 1:
-			entry.iIndex = DMMTSY_SMS_STORE_INDEX2;
-			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU2;
-			entry.iServiceCentre.iTelNumber = DMMTSY_SMSP_STORE_SCA;
-			entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
-			entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
-			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS2;
-			break;
-		case 2:
-			// No need to recopy other info parameters
-			// as they are identical to the ones in case 1 for this test
-			entry.iIndex=DMMTSY_SMS_STORE_INDEX3;
-			break;
-		case 3:
-		default:
-			// No need to recopy other info parameters
-			// as they are identical to the ones in case 1 for this test
-			entry.iIndex=DMMTSY_SMS_STORE_INDEX4;
-			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
-
-	iSmsReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-
-TInt CSmsStoreDMmTsy::ProcessReadAllCdmaPhase1L(const TTsyReqHandle aTsyReqHandle,
-											   RMobilePhone::TClientId* aId,
-											   TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneCdmaSmsList* list=CMobilePhoneCdmaSmsList::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileSmsStore::TMobileCdmaSmsEntryV1 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_SMS_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			entry.iIndex = DMMTSY_SMS_STORE_INDEX1;
-			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
-			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS1;
-			entry.iRemoteParty.iTelNumber = DMMTSY_SMS_MESSAGE_REMOTEPARTYNUMBER1;
-			entry.iTeleservice = DMMTSY_SMS_MESSAGE_TELESERVICE;
-			break;
-		case 1:
-			entry.iIndex = DMMTSY_SMS_STORE_INDEX2;
-			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU2;
-			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS2;
-			break;
-		case 2:
-			// No need to recopy other info parameters
-			// as they are identical to the ones in case 1 for this test
-			entry.iIndex=DMMTSY_SMS_STORE_INDEX3;
-			break;
-		case 3:
-		default:
-			// No need to recopy other info parameters
-			// as they are identical to the ones in case 1 for this test
-			entry.iIndex=DMMTSY_SMS_STORE_INDEX4;
-			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
-
-	iSmsReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-
-TInt CSmsStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllPhase2 called"));
-	CListReadAllAttempt* read=NULL;
-	// Find the read attempt from this client
-	for (TInt i=0; i<iSmsReadAll->Count(); ++i)
-		{
-		read = iSmsReadAll->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;
-			iSmsReadAll->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 CSmsStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllCancel called"));
-
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-
-	// Remove the read all attempt from iSmsReadAll
-	CListReadAllAttempt* read=NULL;
-	for (TInt i=0; i<iSmsReadAll->Count(); ++i)
-		{
-		read = iSmsReadAll->At(i);
-		if (read->iReqHandle == aTsyReqHandle)
-			{
-			delete read;
-			iSmsReadAll->Delete(i);
-			break;
-			}
-		}
-
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-/**************************************************************************/
-//
-//	CNamStoreDMmTsy
-//
-/**************************************************************************/
-
-CNamStoreDMmTsy* CNamStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	{
-	CNamStoreDMmTsy* subsession=new(ELeave) CNamStoreDMmTsy(aPhone,aFac,aName);
-	CleanupStack::PushL(subsession);
-	subsession->ConstructL();
-	CleanupStack::Pop();
-	return subsession;
-	}
-
-void CNamStoreDMmTsy::Init()
-	{}
-
-CNamStoreDMmTsy::CNamStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
-	{
-	iNamStoreName=aName;
-	}
-
-void CNamStoreDMmTsy::ConstructL()
-	{
-	iNamReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
-	LOGTEXT(_L8("CNamStoreDMmTsy created"));
-	}
-
-CNamStoreDMmTsy::~CNamStoreDMmTsy()
-	{
-	for (TInt i=iNamReadAll->Count()-1; i>=0; --i)
-		{
-		CListReadAllAttempt* ptr=iNamReadAll->At(i);
-		iNamReadAll->Delete(i);
-		delete ptr;
-		}
-	delete iNamReadAll;
-	LOGTEXT(_L8("CNamStoreDMmTsy destroyed"));
-	}
-
-CTelObject* CNamStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject* CNamStoreDMmTsy::OpenNewObjectL(TDes&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject::TReqMode CNamStoreDMmTsy::ReqModeL(const TInt aIpc)
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-
-	case EMobileNamStoreSetActiveNam:
-		break;
-
-//
-// Flow Controlled Services
-//
-	case EMobilePhoneStoreRead:
-	case EMobilePhoneStoreWrite:
-	case EMobilePhoneStoreDelete:
-	case EMobilePhoneStoreDeleteAll:
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-	case EMobilePhoneStoreReadAllV4Phase1:
-	case EMobilePhoneStoreReadAllV4Phase2:
-	case EMobilePhoneStoreGetInfo:
-	case EMobileNamStoreStoreAll:
-	case EMobileNamStoreStoreAllV4:
-		ret=KReqModeFlowControlObeyed;
-		break;
-//
-// Multiple Completion Services with Immediate Server Repost
-// (Usually Notifications)
-//
-	case EMobilePhoneStoreNotifyStoreEvent:
-		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-		break;
-//
-// Cancel Requests
-//
-	case EMobilePhoneStoreGetInfoCancel:
-	case EMobilePhoneStoreReadCancel:
-	case EMobilePhoneStoreWriteCancel:
-	case EMobilePhoneStoreDeleteCancel:
-	case EMobilePhoneStoreDeleteAllCancel:
-	case EMobilePhoneStoreReadAllCancel:
-	case EMobilePhoneStoreNotifyStoreEventCancel:
-	case EMobileNamStoreStoreAllCancel:
-	case EMobileNamStoreStoreAllV4Cancel:
-	default:
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return ret;
-	}
-
-TInt CNamStoreDMmTsy::RegisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CNamStoreDMmTsy: RegisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CSmsStoreDMmTsy: Register error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CNamStoreDMmTsy::DeregisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CNamStoreDMmTsy: DeregisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CNamStoreDMmTsy: Deregister error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CNamStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CNamStoreDMmTsy: Registered with 2 slot"));
-		numberOfSlots=2;
-		break;
-	default:
-		// Unknown or invalid Phone IPC
-		LOGTEXT(_L8("CNamStoreDMmTsy: Number of Slots error, unknown IPC"));
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return numberOfSlots;
-	}
-
-
-TInt CNamStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-	{
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreRead:
-		return Read(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreWrite:
-		return Write(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreDelete:
-		return Delete(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAll(aTsyReqHandle);
-
-	case EMobilePhoneStoreGetInfo:
-		return GetInfo(aTsyReqHandle,
-			REINTERPRET_CAST(RMobileNamStore::TMobileNamStoreInfoV1*, dataPtr));
-
-	case EMobilePhoneStoreReadAllPhase1:
-		return ReadAllPhase1(aTsyReqHandle,
-			REINTERPRET_CAST(CRetrieveMobilePhoneNamList::TNamRequestData*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllPhase2(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
-
-	case EMobilePhoneStoreReadAllV4Phase1:
-		return ReadAllPhase1V4(aTsyReqHandle,
-			REINTERPRET_CAST(CRetrieveMobilePhoneNamList::TNamRequestData*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreReadAllV4Phase2:
-		return ReadAllPhase2V4(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
-
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEvent(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobileNamStoreSetActiveNam:
-		return SetActiveNam(aTsyReqHandle,
-				REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobileNamStoreStoreAll:
-		return StoreAll(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr),aPackage.Des2n());
-
-	case EMobileNamStoreStoreAllV4:
-		return StoreAllV4(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr),aPackage.Des2n());
-
-	default:
-		return KErrNotSupported;
-		}
-	}
-
-TInt CNamStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreGetInfo:
-		return GetInfoCancel(aTsyReqHandle);
-	case EMobilePhoneStoreRead:
-		return ReadCancel(aTsyReqHandle);
-	case EMobilePhoneStoreWrite:
-		return WriteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDelete:
-		return DeleteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-	case EMobilePhoneStoreReadAllV4Phase1:
-	case EMobilePhoneStoreReadAllV4Phase2:
-		return ReadAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEventCancel(aTsyReqHandle);
-	case EMobileNamStoreSetActiveNam:
-		return SetActiveNamCancel(aTsyReqHandle);
-	case EMobileNamStoreStoreAll:
-	case EMobileNamStoreStoreAllV4:
-		return StoreAllCancel(aTsyReqHandle);
-		}
-	return KErrGeneral;
-	}
-
-
-void CNamStoreDMmTsy::InitNamEntry(RMobileNamStore::TMobileNamEntryV1& aEntry)
-	{
-	aEntry.iNamId = DMMTSY_NAM_STORE_NAMID;
-	aEntry.iParamIdentifier = DMMTSY_NAM_STORE_PARAM;
-	aEntry.iData = DMMTSY_NAM_STORE_DATA;
-	}
-
-TInt CNamStoreDMmTsy::ValidateNamEntry(RMobileNamStore::TMobileNamEntryV1& aEntry)
-	{
-	if ((aEntry.iNamId != DMMTSY_NAM_STORE_NAMID) ||
-		(aEntry.iParamIdentifier != DMMTSY_NAM_STORE_PARAM) ||
-		(aEntry.iData.Compare(DMMTSY_NAM_STORE_DATA) != 0))
-		return KErrCorrupt;
-	else
-		return KErrNone;
-	}
-
-void CNamStoreDMmTsy::InitNamEntry(RMobileNamStore::TMobileNamEntryV4& aEntry)
-	{
-	aEntry.iNamId = DMMTSY_NAM_STORE_NAMID;
-	aEntry.iParamIdentifier = DMMTSY_NAM_STORE_PARAM;
-	aEntry.iData = DMMTSY_NAM_STORE_DATA_V4;
-	}
-
-TInt CNamStoreDMmTsy::ValidateNamEntry(RMobileNamStore::TMobileNamEntryV4& aEntry)
-	{
-	if ((aEntry.iNamId != DMMTSY_NAM_STORE_NAMID) ||
-		(aEntry.iParamIdentifier != DMMTSY_NAM_STORE_PARAM) ||
-		(aEntry.iData.Compare(DMMTSY_NAM_STORE_DATA_V4) != 0))
-		return KErrCorrupt;
-	else
-		return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::Read called"));
-	RMobileNamStore::TMobileNamEntryV1Pckg* entryPckg = (RMobileNamStore::TMobileNamEntryV1Pckg*)aEntry;
-	RMobileNamStore::TMobileNamEntryV4Pckg* entryV4Pckg = (RMobileNamStore::TMobileNamEntryV4Pckg*)aEntry;
-
-	RMobilePhone::TMultimodeType& entry = (*entryPckg)();
-	RMobileNamStore::TMobileNamEntryV1& entryV1 = (*entryPckg)();
-	RMobileNamStore::TMobileNamEntryV4& entryV4 = (*entryV4Pckg)();
-
-	if(entry.ExtensionId() == KETelExtMultimodeV1)
-		{
-		if (entryV1.iIndex!=DMMTSY_NAM_STORE_INDEX1)
-			ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		else
-			{
-			InitNamEntry(entryV1);
-			iPhone->AddDelayedReq(aTsyReqHandle,this);
-			}
-		}
-	else if(entry.ExtensionId() == KETelExtMultimodeV4)
-		{
-		if (entryV4.iIndex!=DMMTSY_NAM_STORE_INDEX1)
-			ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		else
-			{
-			InitNamEntry(entryV4);
-			iPhone->AddDelayedReq(aTsyReqHandle,this);
-			}
-		}
-	else
-		{
-		// if not multimode v1 or v4, there is a problem
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		}
-
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::Write called"));
-	RMobileNamStore::TMobileNamEntryV1Pckg* entryPckg = (RMobileNamStore::TMobileNamEntryV1Pckg*)aEntry;
-	RMobileNamStore::TMobileNamEntryV4Pckg* entryV4Pckg = (RMobileNamStore::TMobileNamEntryV4Pckg*)aEntry;
-
-	RMobilePhone::TMultimodeType& entry = (*entryPckg)();
-	RMobileNamStore::TMobileNamEntryV1& entryV1 = (*entryPckg)();
-	RMobileNamStore::TMobileNamEntryV4& entryV4 = (*entryV4Pckg)();
-
-	if(entry.ExtensionId() == KETelExtMultimodeV1)
-		{
-		if ((entryV1.iIndex!=DMMTSY_NAM_STORE_INDEX2) || (ValidateNamEntry(entryV1) != KErrNone))
-			ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		else
-			iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	else if(entry.ExtensionId() == KETelExtMultimodeV4)
-		{
-		if ((entryV4.iIndex!=DMMTSY_NAM_STORE_INDEX2) || (ValidateNamEntry(entryV4) != KErrNone))
-			ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		else
-			{
-			iPhone->AddDelayedReq(aTsyReqHandle,this);
-			}
-		}
-	else
-		{
-		// if not multimode v1 or v4, there is a problem
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		}
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::WriteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::Delete called"));
-	if (*aIndex!=DMMTSY_NAM_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteAll called"));
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobileNamStore::TMobileNamStoreInfoV1* aInfo)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::GetInfo called"));
-	aInfo->iName=DMMTSY_NAM_STORE_NAME;
-	aInfo->iType=DMMTSY_NAM_STORE_TYPE;
-	aInfo->iTotalEntries=DMMTSY_NAM_STORE_ENTRIES;
-	aInfo->iUsedEntries=DMMTSY_NAM_STORE_USED;
-	aInfo->iCaps=DMMTSY_NAM_STORE_CAPS;
-	aInfo->iNamCount = DMMTSY_NAM_STORE_COUNT;
-	aInfo->iActiveNam = DMMTSY_NAM_STORE_ACTIVE;
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::GetInfoCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
-									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
-									   TInt* aIndex)
-	{
-	if (!iNotifyStoreEvent++)
-		{
-		LOGTEXT(_L8("CNamStoreDMmTsy::NotifyStoreEvent called"));
-		*aIndex=DMMTSY_NAM_STORE_INDEX2;
-		*aEvent = DMMTSY_NAM_STORE_EVENT;
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::NotifyStoreEventCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneNamList::TNamRequestData* aRequestData, TInt* aBufSize)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase1 called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	if (aRequestData->iNamId != DMMTSY_NAM_STORE_NAMID)
-		leaveCode = KErrCorrupt;
-	else
-		{
-		TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, &aRequestData->iClient, aBufSize););
-		}
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	};
-
-TInt CNamStoreDMmTsy::ReadAllPhase1V4(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneNamList::TNamRequestData* aRequestData, TInt* aBufSize)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase1V4 called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	if (aRequestData->iNamId != DMMTSY_NAM_STORE_NAMID)
-		leaveCode = KErrCorrupt;
-	else
-		{
-		TRAP(leaveCode, ret=ProcessReadAllPhase1V4L(aTsyReqHandle, &aRequestData->iClient, aBufSize););
-		}
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	};
-
-TInt CNamStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
-											 RMobilePhone::TClientId* aId,
-											 TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneNamList* list=CMobilePhoneNamList::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileNamStore::TMobileNamEntryV1 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_NAM_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			InitNamEntry(entry);
-			entry.iIndex=DMMTSY_NAM_STORE_INDEX1;
-			break;
-		case 1:
-			InitNamEntry(entry);
-			entry.iIndex=DMMTSY_NAM_STORE_INDEX2;
-		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
-
-	iNamReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::ProcessReadAllPhase1V4L(const TTsyReqHandle aTsyReqHandle,
-											 RMobilePhone::TClientId* aId,
-											 TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneNamListV4* list=CMobilePhoneNamListV4::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileNamStore::TMobileNamEntryV4 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_NAM_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			InitNamEntry(entry);
-			entry.iIndex=DMMTSY_NAM_STORE_INDEX1;
-			break;
-		case 1:
-			InitNamEntry(entry);
-			entry.iIndex=DMMTSY_NAM_STORE_INDEX2;
-		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
-
-	iNamReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase2 called"));
-	CListReadAllAttempt* read=NULL;
-	// Find the read attempt from this client
-	for (TInt i=0; i<iNamReadAll->Count(); ++i)
-		{
-		read = iNamReadAll->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;
-			iNamReadAll->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 CNamStoreDMmTsy::ReadAllPhase2V4(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase2V4 called"));
-	CListReadAllAttempt* read=NULL;
-	// Find the read attempt from this client
-	for (TInt i=0; i<iNamReadAll->Count(); ++i)
-		{
-		read = iNamReadAll->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;
-			iNamReadAll->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 CNamStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-
-	// Remove the read all attempt from iNamReadAll
-	CListReadAllAttempt* read=NULL;
-	for (TInt i=0; i<iNamReadAll->Count(); ++i)
-		{
-		read = iNamReadAll->At(i);
-		if (read->iReqHandle == aTsyReqHandle)
-			{
-			delete read;
-			iNamReadAll->Delete(i);
-			break;
-			}
-		}
-
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::SetActiveNam(const TTsyReqHandle aTsyReqHandle, TInt *aNamId)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::SetActiveNam called"));
-
-	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::SetActiveNamCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::SetActiveCancelled called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::StoreAll(const TTsyReqHandle aTsyReqHandle, TInt* aNamId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAll called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
-		leaveCode = KErrCorrupt;
-	else
-		{
-		TRAP(leaveCode, ret=ProcessStoreAllL(aTsyReqHandle, aBuffer););
-		}
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	}
-
-TInt CNamStoreDMmTsy::StoreAllV4(const TTsyReqHandle aTsyReqHandle, TInt* aNamId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAll called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
-		leaveCode = KErrCorrupt;
-	else
-		{
-		TRAP(leaveCode, ret=ProcessStoreAllV4L(aTsyReqHandle, aBuffer););
-		}
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	}
-
-TInt CNamStoreDMmTsy::ProcessStoreAllL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
-	{
-	CMobilePhoneNamList* aNamList=CMobilePhoneNamList::NewL();
-	CleanupStack::PushL(aNamList);
-
-	aNamList->RestoreL(*aBuffer);
-
-	RMobileNamStore::TMobileNamEntryV1 entry;
-
-	if (aNamList->Enumerate() != DMMTSY_NAM_STORE_COUNT)
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aNamList->GetEntryL(0);
-
-	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX1) ||
-		(ValidateNamEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aNamList->GetEntryL(1);
-
-	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX2) ||
-		(ValidateNamEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(aNamList);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::ProcessStoreAllV4L(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
-	{
-	CMobilePhoneNamListV4* aNamList=CMobilePhoneNamListV4::NewL();
-	CleanupStack::PushL(aNamList);
-
-	aNamList->RestoreL(*aBuffer);
-
-	RMobileNamStore::TMobileNamEntryV4 entry;
-
-	if (aNamList->Enumerate() != DMMTSY_NAM_STORE_COUNT)
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aNamList->GetEntryL(0);
-
-	if(entry.ExtensionId() != KETelExtMultimodeV4)
-		{
-			ReqCompleted(aTsyReqHandle,KErrCorrupt);
-			return KErrNone;
-		}
-
-	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX1) ||
-		(ValidateNamEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aNamList->GetEntryL(1);
-
-	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX2) ||
-		(ValidateNamEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(aNamList);
-	return KErrNone;
-	}
-
-TInt CNamStoreDMmTsy::StoreAllCancel(TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-
-/**************************************************************************/
-//
-//	CONStoreDMmTsy
-//
-/**************************************************************************/
-
-CONStoreDMmTsy* CONStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	{
-	CONStoreDMmTsy* subsession=new(ELeave) CONStoreDMmTsy(aPhone,aFac,aName);
-	CleanupStack::PushL(subsession);
-	subsession->ConstructL();
-	CleanupStack::Pop();
-	return subsession;
-	}
-
-void CONStoreDMmTsy::Init()
-	{}
-
-CONStoreDMmTsy::CONStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
-	{
-	iONStoreName=aName;
-	}
-
-void CONStoreDMmTsy::ConstructL()
-	{
-	iONReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
-	LOGTEXT(_L8("CONStoreDMmTsy created"));
-	}
-
-CONStoreDMmTsy::~CONStoreDMmTsy()
-	{
-	for (TInt i=iONReadAll->Count()-1; i>=0; --i)
-		{
-		CListReadAllAttempt* ptr=iONReadAll->At(i);
-		iONReadAll->Delete(i);
-		delete ptr;
-		}
-	delete iONReadAll;
-	LOGTEXT(_L8("CONStoreDMmTsy destroyed"));
-	}
-
-CTelObject* CONStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject* CONStoreDMmTsy::OpenNewObjectL(TDes&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject::TReqMode CONStoreDMmTsy::ReqModeL(const TInt aIpc)
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-//
-// Flow Controlled Services
-//
-	case EMobilePhoneStoreRead:
-	case EMobilePhoneStoreWrite:
-	case EMobilePhoneStoreDelete:
-	case EMobilePhoneStoreDeleteAll:
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-	case EMobilePhoneStoreGetInfo:
-	case EMobileONStoreStoreAll:
-		ret=KReqModeFlowControlObeyed;
-		break;
-//
-// Multiple Completion Services with Immediate Server Repost
-// (Usually Notifications)
-//
-	case EMobilePhoneStoreNotifyStoreEvent:
-		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-		break;
-//
-// Cancel Requests
-//
-	case EMobilePhoneStoreGetInfoCancel:
-	case EMobilePhoneStoreReadCancel:
-	case EMobilePhoneStoreWriteCancel:
-	case EMobilePhoneStoreDeleteCancel:
-	case EMobilePhoneStoreDeleteAllCancel:
-	case EMobilePhoneStoreReadAllCancel:
-	case EMobilePhoneStoreNotifyStoreEventCancel:
-	case EMobileONStoreStoreAllCancel:
-	default:
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return ret;
-	}
-
-TInt CONStoreDMmTsy::RegisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CONStoreDMmTsy: RegisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CONStoreDMmTsy: Register error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CONStoreDMmTsy::DeregisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CONStoreDMmTsy: DeregisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CONStoreDMmTsy: Deregister error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CONStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CONStoreDMmTsy: Registered with 2 slot"));
-		numberOfSlots=2;
-		break;
-	default:
-		// Unknown or invalid Phone IPC
-		LOGTEXT(_L8("CONStoreDMmTsy: Number of Slots error, unknown IPC"));
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return numberOfSlots;
-	}
-
-
-TInt CONStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-	{
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreRead:
-		return Read(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreWrite:
-		return Write(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreDelete:
-		return Delete(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAll(aTsyReqHandle);
-
-	case EMobilePhoneStoreGetInfo:
-		return GetInfo(aTsyReqHandle,
-			REINTERPRET_CAST(RMobileONStore::TMobileONStoreInfoV1*, dataPtr));
-
-	case EMobilePhoneStoreReadAllPhase1:
-		return ReadAllPhase1(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllPhase2(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
-
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEvent(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobileONStoreStoreAll:
-		return StoreAll(aTsyReqHandle,aPackage.Des1n());
-
-
-	default:
-		return KErrNotSupported;
-		}
-	}
-
-TInt CONStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreGetInfo:
-		return GetInfoCancel(aTsyReqHandle);
-	case EMobilePhoneStoreRead:
-		return ReadCancel(aTsyReqHandle);
-	case EMobilePhoneStoreWrite:
-		return WriteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDelete:
-		return DeleteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEventCancel(aTsyReqHandle);
-	case EMobileONStoreStoreAll:
-		return StoreAllCancel(aTsyReqHandle);
-		}
-	return KErrGeneral;
-	}
-
-
-void CONStoreDMmTsy::InitONEntry(RMobileONStore::TMobileONEntryV1& aEntry)
-	{
-	aEntry.iMode = DMMTSY_ON_STORE_ENTRY_MODE;
-	aEntry.iText =  DMMTSY_ON_STORE_ENTRY_TEXT;
-	aEntry.iNumber.iTypeOfNumber = DMMTSY_PHONE_TON;
-	aEntry.iNumber.iNumberPlan = DMMTSY_PHONE_NPI;
-	aEntry.iNumber.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
-	aEntry.iService = DMMTSY_ON_STORE_ENTRY_SERVICE;
-	}
-
-TInt CONStoreDMmTsy::ValidateONEntry(RMobileONStore::TMobileONEntryV1& aEntry)
-	{
-	if ((aEntry.iMode != DMMTSY_ON_STORE_ENTRY_MODE) ||
-		(aEntry.iText.Compare(DMMTSY_ON_STORE_ENTRY_TEXT) != 0) ||
-		(aEntry.iNumber.iTypeOfNumber != DMMTSY_PHONE_TON) ||
-		(aEntry.iNumber.iNumberPlan != DMMTSY_PHONE_NPI) ||
-		(aEntry.iNumber.iTelNumber.Compare(DMMTSY_PHONE_TEL_NUMBER) != 0) ||
-		(aEntry.iService != DMMTSY_ON_STORE_ENTRY_SERVICE))
-		return KErrCorrupt;
-	else
-		return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::Read called"));
-	RMobileONStore::TMobileONEntryV1Pckg* entryPckg = (RMobileONStore::TMobileONEntryV1Pckg*)aEntry;
-	RMobileONStore::TMobileONEntryV1& entry = (*entryPckg)();
-
-	if (entry.iIndex!=DMMTSY_ON_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		{
-		InitONEntry(entry);
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::ReadCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::Write called"));
-	RMobileONStore::TMobileONEntryV1Pckg* entryPckg = (RMobileONStore::TMobileONEntryV1Pckg*)aEntry;
-	RMobileONStore::TMobileONEntryV1& entry = (*entryPckg)();
-
-	if ((entry.iIndex!=DMMTSY_ON_STORE_INDEX2) || (ValidateONEntry(entry) != KErrNone))
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::WriteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::Delete called"));
-	if (*aIndex!=DMMTSY_ON_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::DeleteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::DeleteAll called"));
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::DeleteAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobileONStore::TMobileONStoreInfoV1* aInfo)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::GetInfo called"));
-	aInfo->iName=DMMTSY_ON_STORE_NAME;
-	aInfo->iType=DMMTSY_ON_STORE_TYPE;
-	aInfo->iTotalEntries=DMMTSY_ON_STORE_ENTRIES;
-	aInfo->iUsedEntries=DMMTSY_ON_STORE_USED;
-	aInfo->iCaps=DMMTSY_ON_STORE_CAPS;
-
-	aInfo->iNumberLen = DMMTSY_ON_STORE_INFO_GSM_MAX_NUM;
-	aInfo->iTextLen = DMMTSY_ON_STORE_INFO_GSM_MAX_TEXT;
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::GetInfoCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
-									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
-									   TInt* aIndex)
-	{
-	if (!iNotifyStoreEvent++)
-		{
-		LOGTEXT(_L8("CONStoreDMmTsy::NotifyStoreEvent called"));
-		*aIndex=DMMTSY_ON_STORE_INDEX2;
-		*aEvent = DMMTSY_ON_STORE_EVENT;
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::NotifyStoreEventCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TInt* aBufSize)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllPhase1 called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, aId, aBufSize););
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	};
-
-TInt CONStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
-											 RMobilePhone::TClientId* aId,
-											 TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneONList* list=CMobilePhoneONList::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileONStore::TMobileONEntryV1 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_ON_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			InitONEntry(entry);
-			entry.iIndex=DMMTSY_ON_STORE_INDEX1;
-			break;
-		case 1:
-			InitONEntry(entry);
-			entry.iIndex=DMMTSY_ON_STORE_INDEX2;
-		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
-
-	iONReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-
-TInt CONStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllPhase2 called"));
-	CListReadAllAttempt* read=NULL;
-	// Find the read attempt from this client
-	for (TInt i=0; i<iONReadAll->Count(); ++i)
-		{
-		read = iONReadAll->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;
-			iONReadAll->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 CONStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-
-	// Remove the read all attempt from iONReadAll
-	CListReadAllAttempt* read=NULL;
-	for (TInt i=0; i<iONReadAll->Count(); ++i)
-		{
-		read = iONReadAll->At(i);
-		if (read->iReqHandle == aTsyReqHandle)
-			{
-			delete read;
-			iONReadAll->Delete(i);
-			break;
-			}
-		}
-
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-
-TInt CONStoreDMmTsy::StoreAll(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::StoreAll called"));
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	TRAP(leaveCode, ret=ProcessStoreAllL(aTsyReqHandle, aBuffer););
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-	return ret;
-	}
-
-TInt CONStoreDMmTsy::ProcessStoreAllL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
-	{
-	CMobilePhoneONList* aONList=CMobilePhoneONList::NewL();
-	CleanupStack::PushL(aONList);
-
-	aONList->RestoreL(*aBuffer);
-
-	RMobileONStore::TMobileONEntryV1 entry;
-
-	if (aONList->Enumerate() != DMMTSY_ON_STORE_COUNT)
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aONList->GetEntryL(0);
-
-	if ((entry.iIndex != DMMTSY_ON_STORE_INDEX1) ||
-		(ValidateONEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	entry=aONList->GetEntryL(1);
-
-	if ((entry.iIndex != DMMTSY_ON_STORE_INDEX2) ||
-		(ValidateONEntry(entry) != KErrNone))
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		return KErrNone;
-		}
-
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // aONList
-	return KErrNone;
-	}
-
-TInt CONStoreDMmTsy::StoreAllCancel(TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CONStoreDMmTsy::StoreAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-
-/**************************************************************************/
-//
-//	CENStoreDMmTsy
-//
-/**************************************************************************/
-
-CENStoreDMmTsy* CENStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	{
-	CENStoreDMmTsy* subsession=new(ELeave) CENStoreDMmTsy(aPhone,aFac,aName);
-	CleanupStack::PushL(subsession);
-	subsession->ConstructL();
-	CleanupStack::Pop();
-	return subsession;
-	}
-
-void CENStoreDMmTsy::Init()
-	{}
-
-CENStoreDMmTsy::CENStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
-	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
-	{
-	iENStoreName=aName;
-	}
-
-void CENStoreDMmTsy::ConstructL()
-	{
-	iENReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
-	LOGTEXT(_L8("CENStoreDMmTsy created"));
-	}
-
-CENStoreDMmTsy::~CENStoreDMmTsy()
-	{
-	if (iENReadAll)
-		{
-		for (TInt i=iENReadAll->Count()-1; i>=0; --i)
-			{
-			CListReadAllAttempt* ptr=iENReadAll->At(i);
-			iENReadAll->Delete(i);
-			delete ptr;
-			}
-		}
-	delete iENReadAll;
-	LOGTEXT(_L8("CENStoreDMmTsy destroyed"));
-	}
-
-CTelObject* CENStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject* CENStoreDMmTsy::OpenNewObjectL(TDes&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject::TReqMode CENStoreDMmTsy::ReqModeL(const TInt aIpc)
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-//
-// Non Flow controlled services
-//
-	case EMobilePhoneStoreReadAllPhase2:
-		break;
-//
-// Flow Controlled Services
-//
-	case EMobilePhoneStoreRead:
-	case EMobilePhoneStoreWrite:
-	case EMobilePhoneStoreDelete:
-	case EMobilePhoneStoreDeleteAll:
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreGetInfo:
-		ret=KReqModeFlowControlObeyed;
-		break;
-//
-// Multiple Completion Services with Immediate Server Repost
-// (Usually Notifications)
-//
-	case EMobilePhoneStoreNotifyStoreEvent:
-		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-		break;
-//
-// Cancel Requests
-//
-	case EMobilePhoneStoreGetInfoCancel:
-	case EMobilePhoneStoreReadCancel:
-	case EMobilePhoneStoreWriteCancel:
-	case EMobilePhoneStoreDeleteCancel:
-	case EMobilePhoneStoreDeleteAllCancel:
-	case EMobilePhoneStoreReadAllCancel:
-	case EMobilePhoneStoreNotifyStoreEventCancel:
-	default:
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return ret;
-	}
-
-TInt CENStoreDMmTsy::RegisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CENStoreDMmTsy: RegisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CENStoreDMmTsy: Register error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CENStoreDMmTsy::DeregisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CENStoreDMmTsy: DeregisterNotification - Store Event "));
-		return KErrNone;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CENStoreDMmTsy: Deregister error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CENStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CENStoreDMmTsy: Registered with 2 slot"));
-		numberOfSlots=2;
-		break;
-	default:
-		// Unknown or invalid Phone IPC
-		LOGTEXT(_L8("CENStoreDMmTsy: Number of Slots error, unknown IPC"));
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return numberOfSlots;
-	}
-
-
-TInt CENStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-	{
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreRead:
-		return Read(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreWrite:
-		return Write(aTsyReqHandle, aPackage.Des1n());
-
-	case EMobilePhoneStoreDelete:
-		return Delete(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAll(aTsyReqHandle);
-
-	case EMobilePhoneStoreGetInfo:
-		return GetInfo(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1*, dataPtr));
-
-	case EMobilePhoneStoreReadAllPhase1:
-		return ReadAllPhase1(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllPhase2(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
-
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEvent(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
-			REINTERPRET_CAST(TInt*,dataPtr2));
-
-	default:
-		return KErrNotSupported;
-		}
-	}
-
-TInt CENStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreGetInfo:
-		return GetInfoCancel(aTsyReqHandle);
-	case EMobilePhoneStoreRead:
-		return ReadCancel(aTsyReqHandle);
-	case EMobilePhoneStoreWrite:
-		return WriteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDelete:
-		return DeleteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDeleteAll:
-		return DeleteAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreReadAllPhase1:
-	case EMobilePhoneStoreReadAllPhase2:
-		return ReadAllCancel(aTsyReqHandle);
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return NotifyStoreEventCancel(aTsyReqHandle);
-		}
-	return KErrGeneral;
-	}
-
-
-void CENStoreDMmTsy::InitENEntry(RMobileENStore::TMobileENEntryV1& aEntry)
-	{
-	aEntry.iNetworkSpecific = DMMTSY_EN_STORE_NS;
-	aEntry.iMode            = DMMTSY_EN_STORE_MODE;
-	aEntry.iCountryCode     = DMMTSY_EN_STORE_CC;
-	aEntry.iIdentity        = DMMTSY_EN_STORE_ID;
-	aEntry.iNumber          = DMMTSY_EN_STORE_NUM;
-	aEntry.iAlphaId         = DMMTSY_EN_STORE_AMBULANCE_ID;
-	aEntry.iCallType        = DMMTSY_EN_STORE_CALL_TYPE;
-	}
-
-TInt CENStoreDMmTsy::ValidateENEntry(RMobileENStore::TMobileENEntryV1& aEntry)
-	{
-	if ((aEntry.iNetworkSpecific != DMMTSY_EN_STORE_NS) ||
-		(aEntry.iMode != DMMTSY_EN_STORE_MODE) ||
-		(aEntry.iCountryCode.Compare(DMMTSY_EN_STORE_CC) != 0) ||
-		(aEntry.iIdentity.Compare(DMMTSY_EN_STORE_ID) != 0) ||
-		(aEntry.iNumber.Compare(DMMTSY_EN_STORE_NUM) != 0) ||
-		(aEntry.iAlphaId.Compare(DMMTSY_EN_STORE_AMBULANCE_ID) != 0) ||
-	    (aEntry.iCallType != DMMTSY_EN_STORE_CALL_TYPE))
-		return KErrCorrupt;
-	else
-		return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
-	{
-
-	LOGTEXT(_L8("CENStoreDMmTsy::Read called"));
-	RMobileENStore::TMobileENEntryV1Pckg* entryPckg = (RMobileENStore::TMobileENEntryV1Pckg*)aEntry;
-	RMobileENStore::TMobileENEntryV1& entry = (*entryPckg)();
-
-	if (entry.iIndex!=DMMTSY_EN_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		{
-		InitENEntry(entry);
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::ReadCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
-	{
-
-	LOGTEXT(_L8("CENStoreDMmTsy::Write called"));
-	RMobileENStore::TMobileENEntryV1Pckg* entryPckg = (RMobileENStore::TMobileENEntryV1Pckg*)aEntry;
-	RMobileENStore::TMobileENEntryV1& entry = (*entryPckg)();
-
-	if ((entry.iIndex!=DMMTSY_EN_STORE_INDEX2) || (ValidateENEntry(entry) != KErrNone))
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::WriteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::Delete called"));
-
-	if (*aIndex!=DMMTSY_EN_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::DeleteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::DeleteAll called"));
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::DeleteAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhoneStore::TMobilePhoneStoreInfoV1* aInfo)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::GetInfo called"));
-
-	aInfo->iName=DMMTSY_EN_STORE_NAME;
-	aInfo->iType=DMMTSY_EN_STORE_TYPE;
-	aInfo->iTotalEntries=DMMTSY_EN_STORE_ENTRIES;
-	aInfo->iUsedEntries=DMMTSY_EN_STORE_USED;
-	aInfo->iCaps=DMMTSY_EN_STORE_CAPS;
-
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::GetInfoCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
-									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
-									   TInt* aIndex)
-	{
-	if (!iNotifyStoreEvent++)
-		{
-		LOGTEXT(_L8("CENStoreDMmTsy::NotifyStoreEvent called"));
-		*aIndex=DMMTSY_EN_STORE_INDEX2;
-		*aEvent = DMMTSY_EN_STORE_EVENT;
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::NotifyStoreEventCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CENStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId *aId, TInt* aBufSize)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllPhase1 called"));
-
-	TInt ret=KErrNone;
-	TInt leaveCode=KErrNone;
-	TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, aId, aBufSize););
-	if (leaveCode != KErrNone)
-		ReqCompleted(aTsyReqHandle,leaveCode);
-
-	return ret;
-	}
-
-TInt CENStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
-											 RMobilePhone::TClientId* aId,
-											 TInt* aBufSize)
-	{
-	// read the list, store its content and then return size of this buffer to client
-	CMobilePhoneENList* list=CMobilePhoneENList::NewL();
-	CleanupStack::PushL(list);
-
-	RMobileENStore::TMobileENEntryV1 entry;
-
-	// fill up an example list
-	for (TInt index=0; index < DMMTSY_EN_STORE_COUNT; index++)
-		{
-		switch (index)
-			{
-		case 0:
-			InitENEntry(entry);
-			entry.iIndex=DMMTSY_EN_STORE_INDEX1;
-			break;
-		case 1:
-			InitENEntry(entry);
-			entry.iIndex=DMMTSY_EN_STORE_INDEX2;
-		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
-
-	iENReadAll->AppendL(read);
-	CleanupStack::Pop(); // pop the CListReadAllAttempt
-
-	// return the CBufFlat’s size to client
-	*aBufSize=(read->iListBuf)->Size();
-
-	// Complete first phase of list retrieval
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-	CleanupStack::PopAndDestroy(); // pop&destroy list
-	return KErrNone;
-	}
-
-
-TInt CENStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllPhase2 called"));
-	CListReadAllAttempt* read=NULL;
-	// Find the read attempt from this client
-	for (TInt i=0; i<iENReadAll->Count(); ++i)
-		{
-		read = iENReadAll->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;
-			iENReadAll->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 CENStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-
-	// Remove the read all attempt from iENReadAll
-	CListReadAllAttempt* read=NULL;
-	for (TInt i=0; i<iENReadAll->Count(); ++i)
-		{
-		read = iENReadAll->At(i);
-		if (read->iReqHandle == aTsyReqHandle)
-			{
-			delete read;
-			iENReadAll->Delete(i);
-			break;
-			}
-		}
-
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-
-/**************************************************************************/
-//
-//	CMobilePhoneBookStoreDMmTsy
-//
-/**************************************************************************/
-
-CMobilePhoneBookStoreDMmTsy* CMobilePhoneBookStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName, const TDesC& aType)
-	{
-	CMobilePhoneBookStoreDMmTsy* subsession=new(ELeave) CMobilePhoneBookStoreDMmTsy(aPhone,aFac,aName,aType);
-	CleanupStack::PushL(subsession);
-	subsession->ConstructL();
-	CleanupStack::Pop();
-	return subsession;
-	}
-
-void CMobilePhoneBookStoreDMmTsy::Init()
-	{}
-
-CMobilePhoneBookStoreDMmTsy::CMobilePhoneBookStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName, const TDesC& aType)
-	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
-	{
-	iPhoneBookStoreName=aName;
-	iIccType=aType;
-	}
-
-void CMobilePhoneBookStoreDMmTsy::ConstructL()
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy created"));
-	}
-
-CMobilePhoneBookStoreDMmTsy::~CMobilePhoneBookStoreDMmTsy()
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy destroyed"));
-	}
-
-CTelObject* CMobilePhoneBookStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject* CMobilePhoneBookStoreDMmTsy::OpenNewObjectL(TDes&)
-	{
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
-
-CTelObject::TReqMode CMobilePhoneBookStoreDMmTsy::ReqModeL(const TInt aIpc)
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-//
-// Flow Controlled Services
-//
-	case EMobilePhoneBookStoreRead:
-	case EMobilePhoneBookStoreWrite:
-	case EMobilePhoneStoreDelete:
-	case EMobilePhoneStoreGetInfo:
-		ret=KReqModeFlowControlObeyed;
-		break;
-//
-// Multiple Completion Services with Immediate Server Repost
-// (Usually Notifications)
-//
-	case EMobilePhoneStoreNotifyStoreEvent:
-		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-		break;
-//
-// Cancel Requests
-//
-	case EMobilePhoneStoreGetInfoCancel:
-	case EMobilePhoneBookStoreReadCancel:
-	case EMobilePhoneBookStoreWriteCancel:
-	case EMobilePhoneStoreDeleteCancel:
-	case EMobilePhoneStoreNotifyStoreEventCancel:
-	default:
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return ret;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::RegisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: RegisterNotification - Store Event "));
-		return KErrNotSupported;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Register error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::DeregisterNotification(const TInt aIpc)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: DeregisterNotification - Store Event "));
-		return KErrNotSupported;
-	default:
-		// Unknown or invalid IPC
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Deregister error, unknown IPC"));
-		return KErrNotSupported;
-		}
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreNotifyStoreEvent:
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Registered with 2 slot"));
-		User::Leave(KErrNotSupported);
-		break;
-	default:
-		// Unknown or invalid Phone IPC
-		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Number of Slots error, unknown IPC"));
-		User::Leave(KErrNotSupported);
-		break;
-		}
-	return numberOfSlots;
-	}
-
-
-TInt CMobilePhoneBookStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-	{
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-	case EMobilePhoneBookStoreRead:
-		return Read(aTsyReqHandle,
-			REINTERPRET_CAST(RMobilePhoneBookStore::TPBIndexAndNumEntries*,dataPtr),
-			aPackage.Des2n());
-
-	case EMobilePhoneBookStoreWrite:
-		return Write(aTsyReqHandle, aPackage.Des1n(), REINTERPRET_CAST(TInt*,dataPtr2));
-
-	case EMobilePhoneStoreDelete:
-		return Delete(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*,dataPtr));
-
-	case EMobilePhoneStoreGetInfo:
-		return GetInfo(aTsyReqHandle,
-			REINTERPRET_CAST(TDes8*, dataPtr));
-
-	case EMobilePhoneStoreNotifyStoreEvent:
-	default:
-		return KErrNotSupported;
-		}
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-	{
-	switch (aIpc)
-		{
-	case EMobilePhoneStoreGetInfo:
-		return GetInfoCancel(aTsyReqHandle);
-	case EMobilePhoneBookStoreRead:
-		return ReadCancel(aTsyReqHandle);
-	case EMobilePhoneBookStoreWrite:
-		return WriteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreDelete:
-		return DeleteCancel(aTsyReqHandle);
-	case EMobilePhoneStoreNotifyStoreEvent:
-		return KErrNotSupported;
-		}
-	return KErrGeneral;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle,
-									   RMobilePhoneBookStore::TPBIndexAndNumEntries* aIndexAndEntries,
-									   TDes8* aPBData)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Read called"));
-
-	if (aIndexAndEntries->iIndex!=DMMTSY_PHONEBOOK_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		{
-		if(aIndexAndEntries->iNumSlots == DMMTSY_PHONE_ONE_ENTRY)
-			*aPBData = DMMTSY_PHONE_BOOK_DATA1;
-		else if(aIndexAndEntries->iNumSlots == DMMTSY_PHONE_NUM_OF_ENTRIES)
-			*aPBData = DMMTSY_PHONE_BOOK_MULTIPLE_DATA;
-
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::ReadCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aPBData, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Write called"));
-
-	if ((*aIndex!=DMMTSY_PHONEBOOK_STORE_INDEX2) ||
-		(aPBData->Compare(DMMTSY_PHONE_BOOK_DATA2) != 0))
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		{
-		// Test returned, allocated index
-		*aIndex=DMMTSY_PHONEBOOK_STORE_INDEX1;
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-		}
-
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::WriteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Delete called"));
-
-	if (*aIndex!=DMMTSY_PHONEBOOK_STORE_INDEX1)
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	else
-		iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::DeleteCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::GetInfo called"));
-
-	RMobilePhoneBookStore::TMobilePhoneBookInfoV1* pbInfo = (RMobilePhoneBookStore::TMobilePhoneBookInfoV1*)aInfo;
-
-	if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV1)
-		{
-		pbInfo->iName=DMMTSY_PHONEBOOK_STORE_NAME;
-		pbInfo->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
-		pbInfo->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
-		pbInfo->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
-		pbInfo->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
-		pbInfo->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
-		pbInfo->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
-		pbInfo->iLocation = DMMTSY_PHONEBOOK_LOCATION;
-		pbInfo->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
-		pbInfo->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
-		}
-	else if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV2)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV2* pbV2Info = (RMobilePhoneBookStore::TMobilePhoneBookInfoV2*)aInfo;
-		pbV2Info->iName=DMMTSY_PHONEBOOK_STORE_NAME;
-		pbV2Info->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
-		pbV2Info->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
-		pbV2Info->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
-		pbV2Info->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
-		pbV2Info->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
-		pbV2Info->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
-		pbV2Info->iLocation = DMMTSY_PHONEBOOK_LOCATION;
-		pbV2Info->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
-		pbV2Info->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
-		pbV2Info->iPhBkMode = DMMTSY_PHONEBOOK_TYPE;
-		}
-	else if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV5)
-		{
-		RMobilePhoneBookStore::TMobilePhoneBookInfoV5* pbV5Info = (RMobilePhoneBookStore::TMobilePhoneBookInfoV5*)aInfo;
-		pbV5Info->iName=DMMTSY_PHONEBOOK_STORE_NAME;
-		pbV5Info->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
-		pbV5Info->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
-		pbV5Info->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
-		pbV5Info->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
-		pbV5Info->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
-		pbV5Info->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
-		pbV5Info->iLocation = DMMTSY_PHONEBOOK_LOCATION;
-		pbV5Info->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
-		pbV5Info->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
-		pbV5Info->iPhBkMode = DMMTSY_PHONEBOOK_TYPE;
-		pbV5Info->iMaxSecondNames = DMMTSY_PHONEBOOK_MAXSECONDNAMES;
-		pbV5Info->iMaxTextLengthSecondName = DMMTSY_PHONEBOOK_MAXTEXTLENSECONDNAME;
-		pbV5Info->iMaxAdditionalNumbers = DMMTSY_PHONEBOOK_MAXADDNUM;
-		pbV5Info->iMaxTextLengthAdditionalNumber = DMMTSY_PHONEBOOK_MAXTEXTLENADDNUM;
-		pbV5Info->iMaxNumLengthAdditionalNumber = DMMTSY_PHONEBOOK_MAXNUMLENADDNUM;
-		pbV5Info->iMaxGroupNames = DMMTSY_PHONEBOOK_MAXGROUPNAMES;
-		pbV5Info->iMaxTextLengthGroupName = DMMTSY_PHONEBOOK_MAXTEXTLENGROUPNAME;
-		pbV5Info->iMaxEmailAddr = DMMTSY_PHONEBOOK_MAXEMAILADDR;
-		pbV5Info->iMaxTextLengthEmailAddr = DMMTSY_PHONEBOOK_MAXTEXTLENEMAILADDR;
-		}
-	iPhone->AddDelayedReq(aTsyReqHandle,this);
-
-	return KErrNone;
-	}
-
-TInt CMobilePhoneBookStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::GetInfoCancel called"));
-	iPhone->RemoveDelayedReq(aTsyReqHandle);
-	ReqCompleted(aTsyReqHandle,KErrCancel);
-	return KErrNone;
-	}
+// 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:
+//
+
+#include "mmtsy.h"
+#include "testdef.h"
+#include "ETELMM.H"
+#include <et_clsvr.h>
+#include "Dmmlog.h"
+
+
+CListReadAllAttempt* CListReadAllAttempt::NewL(RMobilePhone::TClientId* aId, TTsyReqHandle aReqHandle)
+	{
+	CListReadAllAttempt* read=new(ELeave) CListReadAllAttempt(aId, aReqHandle);
+	CleanupStack::PushL(read);
+	read->ConstructL();
+	CleanupStack::Pop();
+	return read;
+	}
+
+CListReadAllAttempt::CListReadAllAttempt(RMobilePhone::TClientId* aId, TTsyReqHandle aReqHandle)
+	:CBase()
+	{
+	iClient.iSessionHandle=aId->iSessionHandle;
+	iClient.iSubSessionHandle=aId->iSubSessionHandle;
+	iReqHandle=aReqHandle;
+	iListBuf = NULL;
+	}
+
+void CListReadAllAttempt::ConstructL()
+	{
+	}
+
+CListReadAllAttempt::~CListReadAllAttempt()
+	{
+	delete iListBuf;
+	}
+
+/**************************************************************************/
+//
+//	CSmsStoreDMmTsy
+//
+/**************************************************************************/
+
+CSmsStoreDMmTsy* CSmsStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,
+									   const TDesC& aName)
+	{
+	CSmsStoreDMmTsy* subsession=new(ELeave) CSmsStoreDMmTsy(aPhone,aFac,aName);
+	CleanupStack::PushL(subsession);
+	subsession->ConstructL();
+	CleanupStack::Pop();
+	return subsession;
+	}
+
+void CSmsStoreDMmTsy::Init()
+	{}
+
+CSmsStoreDMmTsy::CSmsStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac,
+								 const TDesC& aName)
+	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
+	{
+	iSmsStoreName=aName;
+	}
+
+void CSmsStoreDMmTsy::ConstructL()
+	{
+	iSmsReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
+	LOGTEXT(_L8("CSmsStoreDMmTsy created"));
+	}
+
+CSmsStoreDMmTsy::~CSmsStoreDMmTsy()
+	{
+	for (TInt i=iSmsReadAll->Count()-1; i>=0; --i)
+		{
+		CListReadAllAttempt* ptr=iSmsReadAll->At(i);
+		iSmsReadAll->Delete(i);
+		delete ptr;
+		}
+	delete iSmsReadAll;
+	LOGTEXT(_L8("CSmsStoreDMmTsy destroyed"));
+	}
+
+CTelObject* CSmsStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject* CSmsStoreDMmTsy::OpenNewObjectL(TDes&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject::TReqMode CSmsStoreDMmTsy::ReqModeL(const TInt aIpc)
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+
+//
+// Normal Services
+//
+
+//
+// Flow Controlled Services
+//
+	case EMobilePhoneStoreRead:
+	case EMobilePhoneStoreWrite:
+	case EMobilePhoneStoreDelete:
+	case EMobilePhoneStoreDeleteAll:
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+	case EMobilePhoneStoreGetInfo:
+		ret=KReqModeFlowControlObeyed;
+		break;
+
+//
+// Multiple Completion Services with Immediate Server Repost
+// (Usually Notifications)
+//
+	case EMobilePhoneStoreNotifyStoreEvent:
+		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+		break;
+//
+// Cancel Requests
+//
+	case EMobilePhoneStoreGetInfoCancel:
+	case EMobilePhoneStoreReadCancel:
+	case EMobilePhoneStoreWriteCancel:
+	case EMobilePhoneStoreDeleteCancel:
+	case EMobilePhoneStoreDeleteAllCancel:
+	case EMobilePhoneStoreReadAllCancel:
+	case EMobilePhoneStoreNotifyStoreEventCancel:
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return ret;
+	}
+
+TInt CSmsStoreDMmTsy::RegisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CSmsStoreDMmTsy: RegisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CSmsStoreDMmTsy: Register error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CSmsStoreDMmTsy::DeregisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CSmsStoreDMmTsy: DeregisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CSmsStoreDMmTsy: Deregister error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CSmsStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CSmsStoreDMmTsy: Registered with 10 slots"));
+		numberOfSlots=10;
+		break;
+	default:
+		// Unknown or invalid Phone IPC
+		LOGTEXT(_L8("CSmsStoreDMmTsy: Number of Slots error, unknown IPC"));
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return numberOfSlots;
+	}
+
+
+TInt CSmsStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+	{
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreRead:
+		return Read(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreWrite:
+		return Write(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreDelete:
+		return Delete(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAll(aTsyReqHandle);
+
+	case EMobilePhoneStoreGetInfo:
+		return GetInfo(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1*, dataPtr));
+
+	case EMobilePhoneStoreReadAllPhase1:
+		return ReadAllPhase1(aTsyReqHandle,
+			REINTERPRET_CAST(CRetrieveMobilePhoneSmsList::TBatchRequestData*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllPhase2(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
+
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEvent(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt CSmsStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreGetInfo:
+		return GetInfoCancel(aTsyReqHandle);
+	case EMobilePhoneStoreRead:
+		return ReadCancel(aTsyReqHandle);
+	case EMobilePhoneStoreWrite:
+		return WriteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDelete:
+		return DeleteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEventCancel(aTsyReqHandle);
+		}
+	return KErrGeneral;
+	}
+
+
+TInt CSmsStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::Read called"));
+
+	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg* entryPckg = (RMobileSmsStore::TMobileGsmSmsEntryV1Pckg*)aEntry;
+	RMobileSmsStore::TMobileGsmSmsEntryV1& entry = (*entryPckg)();
+
+	if (entry.iIndex!=DMMTSY_SMS_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		{
+		entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
+		entry.iMsgStatus =DMMTSY_SMS_STORE_STATUS1;
+		entry.iServiceCentre.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
+		entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
+		entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
+
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::Write called"));
+
+	RMobileSmsStore::TMobileCdmaSmsEntryV1Pckg* entryPckg = (RMobileSmsStore::TMobileCdmaSmsEntryV1Pckg*)aEntry;
+	RMobileSmsStore::TMobileCdmaSmsEntryV1& entry = (*entryPckg)();
+
+	if ((entry.iIndex != DMMTSY_SMS_STORE_INDEX2) ||
+		(entry.iMsgData.Compare(DMMTSY_SMS_MESSAGE_PDU2) != 0) ||
+		(entry.iMsgStatus != DMMTSY_SMS_STORE_STATUS2) ||
+		(entry.iRemoteParty.iTelNumber != DMMTSY_SMS_MESSAGE_REMOTEPARTYNUMBER2) ||
+		(entry.iTeleservice != DMMTSY_SMS_MESSAGE_TELESERVICE))
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::WriteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::Delete called"));
+	if (*aIndex!=DMMTSY_SMS_STORE_INDEX3)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteAll called"));
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::DeleteAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhoneStore::TMobilePhoneStoreInfoV1* aInfo)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::GetInfo called"));
+
+	aInfo->iName=DMMTSY_MESSAGE_STORE_NAME;
+	aInfo->iType=DMMTSY_MESSAGE_STORE_TYPE;
+	aInfo->iTotalEntries=DMMTSY_MESSAGE_STORE_TOTAL_ENTRIES;
+	aInfo->iUsedEntries=DMMTSY_MESSAGE_STORE_USED_ENTRIES;
+	aInfo->iCaps=DMMTSY_MESSAGE_STORE_CAPS;
+
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::GetInfoCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
+									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
+									   TInt* aIndex)
+	{
+	if (!iNotifyStoreEvent++)
+		{
+		LOGTEXT(_L8("CSmsStoreDMmTsy::NotifyStoreEvent called"));
+		*aIndex=DMMTSY_SMS_STORE_INDEX4;
+		*aEvent=DMMTSY_MESSAGE_STORE_EVENT;
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::NotifyStoreEventCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CSmsStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneSmsList::TBatchRequestData* aRequest, TInt* aBufSize)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllPhase1 called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+
+	if (aRequest->iBatchRequest)
+		if ((aRequest->iBatchSize != DMMTSY_SMS_STORE_BATCH) ||
+		    (aRequest->iStartIndex != DMMTSY_SMS_STORE_START))
+			leaveCode = KErrCorrupt;
+
+	if (leaveCode == KErrNone)
+		{
+		if (aRequest->iEntryType==DMMTSY_SMS_STORE_GSMENTRY_TYPE)
+			{
+			TRAP(leaveCode, ret=ProcessReadAllGsmPhase1L(aTsyReqHandle, &aRequest->iClient, aBufSize););
+			}
+		else
+			{
+			TRAP(leaveCode, ret=ProcessReadAllCdmaPhase1L(aTsyReqHandle, &aRequest->iClient, aBufSize););
+			}
+		}
+
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+
+	return ret;
+	};
+
+TInt CSmsStoreDMmTsy::ProcessReadAllGsmPhase1L(const TTsyReqHandle aTsyReqHandle,
+											   RMobilePhone::TClientId* aId,
+											   TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneGsmSmsList* list=CMobilePhoneGsmSmsList::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_SMS_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			entry.iIndex = DMMTSY_SMS_STORE_INDEX1;
+			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
+			entry.iServiceCentre.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
+			entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
+			entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
+			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS1;
+			break;
+		case 1:
+			entry.iIndex = DMMTSY_SMS_STORE_INDEX2;
+			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU2;
+			entry.iServiceCentre.iTelNumber = DMMTSY_SMSP_STORE_SCA;
+			entry.iServiceCentre.iTypeOfNumber = DMMTSY_PHONE_TON;
+			entry.iServiceCentre.iNumberPlan = DMMTSY_PHONE_NPI;
+			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS2;
+			break;
+		case 2:
+			// No need to recopy other info parameters
+			// as they are identical to the ones in case 1 for this test
+			entry.iIndex=DMMTSY_SMS_STORE_INDEX3;
+			break;
+		case 3:
+		default:
+			// No need to recopy other info parameters
+			// as they are identical to the ones in case 1 for this test
+			entry.iIndex=DMMTSY_SMS_STORE_INDEX4;
+			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
+
+	iSmsReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+
+TInt CSmsStoreDMmTsy::ProcessReadAllCdmaPhase1L(const TTsyReqHandle aTsyReqHandle,
+											   RMobilePhone::TClientId* aId,
+											   TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneCdmaSmsList* list=CMobilePhoneCdmaSmsList::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileSmsStore::TMobileCdmaSmsEntryV1 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_SMS_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			entry.iIndex = DMMTSY_SMS_STORE_INDEX1;
+			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU1;
+			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS1;
+			entry.iRemoteParty.iTelNumber = DMMTSY_SMS_MESSAGE_REMOTEPARTYNUMBER1;
+			entry.iTeleservice = DMMTSY_SMS_MESSAGE_TELESERVICE;
+			break;
+		case 1:
+			entry.iIndex = DMMTSY_SMS_STORE_INDEX2;
+			entry.iMsgData = DMMTSY_SMS_MESSAGE_PDU2;
+			entry.iMsgStatus = DMMTSY_SMS_STORE_STATUS2;
+			break;
+		case 2:
+			// No need to recopy other info parameters
+			// as they are identical to the ones in case 1 for this test
+			entry.iIndex=DMMTSY_SMS_STORE_INDEX3;
+			break;
+		case 3:
+		default:
+			// No need to recopy other info parameters
+			// as they are identical to the ones in case 1 for this test
+			entry.iIndex=DMMTSY_SMS_STORE_INDEX4;
+			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
+
+	iSmsReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+
+TInt CSmsStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllPhase2 called"));
+	CListReadAllAttempt* read=NULL;
+	// Find the read attempt from this client
+	for (TInt i=0; i<iSmsReadAll->Count(); ++i)
+		{
+		read = iSmsReadAll->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;
+			iSmsReadAll->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 CSmsStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CSmsStoreDMmTsy::ReadAllCancel called"));
+
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+
+	// Remove the read all attempt from iSmsReadAll
+	CListReadAllAttempt* read=NULL;
+	for (TInt i=0; i<iSmsReadAll->Count(); ++i)
+		{
+		read = iSmsReadAll->At(i);
+		if (read->iReqHandle == aTsyReqHandle)
+			{
+			delete read;
+			iSmsReadAll->Delete(i);
+			break;
+			}
+		}
+
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+/**************************************************************************/
+//
+//	CNamStoreDMmTsy
+//
+/**************************************************************************/
+
+CNamStoreDMmTsy* CNamStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	{
+	CNamStoreDMmTsy* subsession=new(ELeave) CNamStoreDMmTsy(aPhone,aFac,aName);
+	CleanupStack::PushL(subsession);
+	subsession->ConstructL();
+	CleanupStack::Pop();
+	return subsession;
+	}
+
+void CNamStoreDMmTsy::Init()
+	{}
+
+CNamStoreDMmTsy::CNamStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
+	{
+	iNamStoreName=aName;
+	}
+
+void CNamStoreDMmTsy::ConstructL()
+	{
+	iNamReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
+	LOGTEXT(_L8("CNamStoreDMmTsy created"));
+	}
+
+CNamStoreDMmTsy::~CNamStoreDMmTsy()
+	{
+	for (TInt i=iNamReadAll->Count()-1; i>=0; --i)
+		{
+		CListReadAllAttempt* ptr=iNamReadAll->At(i);
+		iNamReadAll->Delete(i);
+		delete ptr;
+		}
+	delete iNamReadAll;
+	LOGTEXT(_L8("CNamStoreDMmTsy destroyed"));
+	}
+
+CTelObject* CNamStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject* CNamStoreDMmTsy::OpenNewObjectL(TDes&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject::TReqMode CNamStoreDMmTsy::ReqModeL(const TInt aIpc)
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+
+	case EMobileNamStoreSetActiveNam:
+		break;
+
+//
+// Flow Controlled Services
+//
+	case EMobilePhoneStoreRead:
+	case EMobilePhoneStoreWrite:
+	case EMobilePhoneStoreDelete:
+	case EMobilePhoneStoreDeleteAll:
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+	case EMobilePhoneStoreReadAllV4Phase1:
+	case EMobilePhoneStoreReadAllV4Phase2:
+	case EMobilePhoneStoreGetInfo:
+	case EMobileNamStoreStoreAll:
+	case EMobileNamStoreStoreAllV4:
+		ret=KReqModeFlowControlObeyed;
+		break;
+//
+// Multiple Completion Services with Immediate Server Repost
+// (Usually Notifications)
+//
+	case EMobilePhoneStoreNotifyStoreEvent:
+		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+		break;
+//
+// Cancel Requests
+//
+	case EMobilePhoneStoreGetInfoCancel:
+	case EMobilePhoneStoreReadCancel:
+	case EMobilePhoneStoreWriteCancel:
+	case EMobilePhoneStoreDeleteCancel:
+	case EMobilePhoneStoreDeleteAllCancel:
+	case EMobilePhoneStoreReadAllCancel:
+	case EMobilePhoneStoreNotifyStoreEventCancel:
+	case EMobileNamStoreStoreAllCancel:
+	case EMobileNamStoreStoreAllV4Cancel:
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return ret;
+	}
+
+TInt CNamStoreDMmTsy::RegisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CNamStoreDMmTsy: RegisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CSmsStoreDMmTsy: Register error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CNamStoreDMmTsy::DeregisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CNamStoreDMmTsy: DeregisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CNamStoreDMmTsy: Deregister error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CNamStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CNamStoreDMmTsy: Registered with 2 slot"));
+		numberOfSlots=2;
+		break;
+	default:
+		// Unknown or invalid Phone IPC
+		LOGTEXT(_L8("CNamStoreDMmTsy: Number of Slots error, unknown IPC"));
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return numberOfSlots;
+	}
+
+
+TInt CNamStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+	{
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreRead:
+		return Read(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreWrite:
+		return Write(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreDelete:
+		return Delete(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAll(aTsyReqHandle);
+
+	case EMobilePhoneStoreGetInfo:
+		return GetInfo(aTsyReqHandle,
+			REINTERPRET_CAST(RMobileNamStore::TMobileNamStoreInfoV1*, dataPtr));
+
+	case EMobilePhoneStoreReadAllPhase1:
+		return ReadAllPhase1(aTsyReqHandle,
+			REINTERPRET_CAST(CRetrieveMobilePhoneNamList::TNamRequestData*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllPhase2(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
+
+	case EMobilePhoneStoreReadAllV4Phase1:
+		return ReadAllPhase1V4(aTsyReqHandle,
+			REINTERPRET_CAST(CRetrieveMobilePhoneNamList::TNamRequestData*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreReadAllV4Phase2:
+		return ReadAllPhase2V4(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
+
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEvent(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobileNamStoreSetActiveNam:
+		return SetActiveNam(aTsyReqHandle,
+				REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobileNamStoreStoreAll:
+		return StoreAll(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr),aPackage.Des2n());
+
+	case EMobileNamStoreStoreAllV4:
+		return StoreAllV4(aTsyReqHandle,REINTERPRET_CAST(TInt*,dataPtr),aPackage.Des2n());
+
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt CNamStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreGetInfo:
+		return GetInfoCancel(aTsyReqHandle);
+	case EMobilePhoneStoreRead:
+		return ReadCancel(aTsyReqHandle);
+	case EMobilePhoneStoreWrite:
+		return WriteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDelete:
+		return DeleteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+	case EMobilePhoneStoreReadAllV4Phase1:
+	case EMobilePhoneStoreReadAllV4Phase2:
+		return ReadAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEventCancel(aTsyReqHandle);
+	case EMobileNamStoreSetActiveNam:
+		return SetActiveNamCancel(aTsyReqHandle);
+	case EMobileNamStoreStoreAll:
+	case EMobileNamStoreStoreAllV4:
+		return StoreAllCancel(aTsyReqHandle);
+		}
+	return KErrGeneral;
+	}
+
+
+void CNamStoreDMmTsy::InitNamEntry(RMobileNamStore::TMobileNamEntryV1& aEntry)
+	{
+	aEntry.iNamId = DMMTSY_NAM_STORE_NAMID;
+	aEntry.iParamIdentifier = DMMTSY_NAM_STORE_PARAM;
+	aEntry.iData = DMMTSY_NAM_STORE_DATA;
+	}
+
+TInt CNamStoreDMmTsy::ValidateNamEntry(RMobileNamStore::TMobileNamEntryV1& aEntry)
+	{
+	if ((aEntry.iNamId != DMMTSY_NAM_STORE_NAMID) ||
+		(aEntry.iParamIdentifier != DMMTSY_NAM_STORE_PARAM) ||
+		(aEntry.iData.Compare(DMMTSY_NAM_STORE_DATA) != 0))
+		return KErrCorrupt;
+	else
+		return KErrNone;
+	}
+
+void CNamStoreDMmTsy::InitNamEntry(RMobileNamStore::TMobileNamEntryV4& aEntry)
+	{
+	aEntry.iNamId = DMMTSY_NAM_STORE_NAMID;
+	aEntry.iParamIdentifier = DMMTSY_NAM_STORE_PARAM;
+	aEntry.iData = DMMTSY_NAM_STORE_DATA_V4;
+	}
+
+TInt CNamStoreDMmTsy::ValidateNamEntry(RMobileNamStore::TMobileNamEntryV4& aEntry)
+	{
+	if ((aEntry.iNamId != DMMTSY_NAM_STORE_NAMID) ||
+		(aEntry.iParamIdentifier != DMMTSY_NAM_STORE_PARAM) ||
+		(aEntry.iData.Compare(DMMTSY_NAM_STORE_DATA_V4) != 0))
+		return KErrCorrupt;
+	else
+		return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::Read called"));
+	RMobileNamStore::TMobileNamEntryV1Pckg* entryPckg = (RMobileNamStore::TMobileNamEntryV1Pckg*)aEntry;
+	RMobileNamStore::TMobileNamEntryV4Pckg* entryV4Pckg = (RMobileNamStore::TMobileNamEntryV4Pckg*)aEntry;
+
+	RMobilePhone::TMultimodeType& entry = (*entryPckg)();
+	RMobileNamStore::TMobileNamEntryV1& entryV1 = (*entryPckg)();
+	RMobileNamStore::TMobileNamEntryV4& entryV4 = (*entryV4Pckg)();
+
+	if(entry.ExtensionId() == KETelExtMultimodeV1)
+		{
+		if (entryV1.iIndex!=DMMTSY_NAM_STORE_INDEX1)
+			ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		else
+			{
+			InitNamEntry(entryV1);
+			iPhone->AddDelayedReq(aTsyReqHandle,this);
+			}
+		}
+	else if(entry.ExtensionId() == KETelExtMultimodeV4)
+		{
+		if (entryV4.iIndex!=DMMTSY_NAM_STORE_INDEX1)
+			ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		else
+			{
+			InitNamEntry(entryV4);
+			iPhone->AddDelayedReq(aTsyReqHandle,this);
+			}
+		}
+	else
+		{
+		// if not multimode v1 or v4, there is a problem
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		}
+
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::Write called"));
+	RMobileNamStore::TMobileNamEntryV1Pckg* entryPckg = (RMobileNamStore::TMobileNamEntryV1Pckg*)aEntry;
+	RMobileNamStore::TMobileNamEntryV4Pckg* entryV4Pckg = (RMobileNamStore::TMobileNamEntryV4Pckg*)aEntry;
+
+	RMobilePhone::TMultimodeType& entry = (*entryPckg)();
+	RMobileNamStore::TMobileNamEntryV1& entryV1 = (*entryPckg)();
+	RMobileNamStore::TMobileNamEntryV4& entryV4 = (*entryV4Pckg)();
+
+	if(entry.ExtensionId() == KETelExtMultimodeV1)
+		{
+		if ((entryV1.iIndex!=DMMTSY_NAM_STORE_INDEX2) || (ValidateNamEntry(entryV1) != KErrNone))
+			ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		else
+			iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	else if(entry.ExtensionId() == KETelExtMultimodeV4)
+		{
+		if ((entryV4.iIndex!=DMMTSY_NAM_STORE_INDEX2) || (ValidateNamEntry(entryV4) != KErrNone))
+			ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		else
+			{
+			iPhone->AddDelayedReq(aTsyReqHandle,this);
+			}
+		}
+	else
+		{
+		// if not multimode v1 or v4, there is a problem
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		}
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::WriteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::Delete called"));
+	if (*aIndex!=DMMTSY_NAM_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteAll called"));
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::DeleteAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobileNamStore::TMobileNamStoreInfoV1* aInfo)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::GetInfo called"));
+	aInfo->iName=DMMTSY_NAM_STORE_NAME;
+	aInfo->iType=DMMTSY_NAM_STORE_TYPE;
+	aInfo->iTotalEntries=DMMTSY_NAM_STORE_ENTRIES;
+	aInfo->iUsedEntries=DMMTSY_NAM_STORE_USED;
+	aInfo->iCaps=DMMTSY_NAM_STORE_CAPS;
+	aInfo->iNamCount = DMMTSY_NAM_STORE_COUNT;
+	aInfo->iActiveNam = DMMTSY_NAM_STORE_ACTIVE;
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::GetInfoCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
+									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
+									   TInt* aIndex)
+	{
+	if (!iNotifyStoreEvent++)
+		{
+		LOGTEXT(_L8("CNamStoreDMmTsy::NotifyStoreEvent called"));
+		*aIndex=DMMTSY_NAM_STORE_INDEX2;
+		*aEvent = DMMTSY_NAM_STORE_EVENT;
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::NotifyStoreEventCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneNamList::TNamRequestData* aRequestData, TInt* aBufSize)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase1 called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	if (aRequestData->iNamId != DMMTSY_NAM_STORE_NAMID)
+		leaveCode = KErrCorrupt;
+	else
+		{
+		TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, &aRequestData->iClient, aBufSize););
+		}
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	};
+
+TInt CNamStoreDMmTsy::ReadAllPhase1V4(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneNamList::TNamRequestData* aRequestData, TInt* aBufSize)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase1V4 called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	if (aRequestData->iNamId != DMMTSY_NAM_STORE_NAMID)
+		leaveCode = KErrCorrupt;
+	else
+		{
+		TRAP(leaveCode, ret=ProcessReadAllPhase1V4L(aTsyReqHandle, &aRequestData->iClient, aBufSize););
+		}
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	};
+
+TInt CNamStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
+											 RMobilePhone::TClientId* aId,
+											 TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneNamList* list=CMobilePhoneNamList::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileNamStore::TMobileNamEntryV1 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_NAM_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			InitNamEntry(entry);
+			entry.iIndex=DMMTSY_NAM_STORE_INDEX1;
+			break;
+		case 1:
+			InitNamEntry(entry);
+			entry.iIndex=DMMTSY_NAM_STORE_INDEX2;
+		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
+
+	iNamReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::ProcessReadAllPhase1V4L(const TTsyReqHandle aTsyReqHandle,
+											 RMobilePhone::TClientId* aId,
+											 TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneNamListV4* list=CMobilePhoneNamListV4::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileNamStore::TMobileNamEntryV4 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_NAM_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			InitNamEntry(entry);
+			entry.iIndex=DMMTSY_NAM_STORE_INDEX1;
+			break;
+		case 1:
+			InitNamEntry(entry);
+			entry.iIndex=DMMTSY_NAM_STORE_INDEX2;
+		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
+
+	iNamReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase2 called"));
+	CListReadAllAttempt* read=NULL;
+	// Find the read attempt from this client
+	for (TInt i=0; i<iNamReadAll->Count(); ++i)
+		{
+		read = iNamReadAll->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;
+			iNamReadAll->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 CNamStoreDMmTsy::ReadAllPhase2V4(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllPhase2V4 called"));
+	CListReadAllAttempt* read=NULL;
+	// Find the read attempt from this client
+	for (TInt i=0; i<iNamReadAll->Count(); ++i)
+		{
+		read = iNamReadAll->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;
+			iNamReadAll->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 CNamStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::ReadAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+
+	// Remove the read all attempt from iNamReadAll
+	CListReadAllAttempt* read=NULL;
+	for (TInt i=0; i<iNamReadAll->Count(); ++i)
+		{
+		read = iNamReadAll->At(i);
+		if (read->iReqHandle == aTsyReqHandle)
+			{
+			delete read;
+			iNamReadAll->Delete(i);
+			break;
+			}
+		}
+
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::SetActiveNam(const TTsyReqHandle aTsyReqHandle, TInt *aNamId)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::SetActiveNam called"));
+
+	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::SetActiveNamCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::SetActiveCancelled called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::StoreAll(const TTsyReqHandle aTsyReqHandle, TInt* aNamId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAll called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
+		leaveCode = KErrCorrupt;
+	else
+		{
+		TRAP(leaveCode, ret=ProcessStoreAllL(aTsyReqHandle, aBuffer););
+		}
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	}
+
+TInt CNamStoreDMmTsy::StoreAllV4(const TTsyReqHandle aTsyReqHandle, TInt* aNamId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAll called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	if (*aNamId != DMMTSY_NAM_STORE_NAMID)
+		leaveCode = KErrCorrupt;
+	else
+		{
+		TRAP(leaveCode, ret=ProcessStoreAllV4L(aTsyReqHandle, aBuffer););
+		}
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	}
+
+TInt CNamStoreDMmTsy::ProcessStoreAllL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
+	{
+	CMobilePhoneNamList* aNamList=CMobilePhoneNamList::NewL();
+	CleanupStack::PushL(aNamList);
+
+	aNamList->RestoreL(*aBuffer);
+
+	RMobileNamStore::TMobileNamEntryV1 entry;
+
+	if (aNamList->Enumerate() != DMMTSY_NAM_STORE_COUNT)
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aNamList->GetEntryL(0);
+
+	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX1) ||
+		(ValidateNamEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aNamList->GetEntryL(1);
+
+	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX2) ||
+		(ValidateNamEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(aNamList);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::ProcessStoreAllV4L(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
+	{
+	CMobilePhoneNamListV4* aNamList=CMobilePhoneNamListV4::NewL();
+	CleanupStack::PushL(aNamList);
+
+	aNamList->RestoreL(*aBuffer);
+
+	RMobileNamStore::TMobileNamEntryV4 entry;
+
+	if (aNamList->Enumerate() != DMMTSY_NAM_STORE_COUNT)
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aNamList->GetEntryL(0);
+
+	if(entry.ExtensionId() != KETelExtMultimodeV4)
+		{
+			ReqCompleted(aTsyReqHandle,KErrCorrupt);
+			return KErrNone;
+		}
+
+	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX1) ||
+		(ValidateNamEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aNamList->GetEntryL(1);
+
+	if ((entry.iIndex != DMMTSY_NAM_STORE_INDEX2) ||
+		(ValidateNamEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(aNamList);
+	return KErrNone;
+	}
+
+TInt CNamStoreDMmTsy::StoreAllCancel(TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CNamStoreDMmTsy::StoreAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+
+/**************************************************************************/
+//
+//	CONStoreDMmTsy
+//
+/**************************************************************************/
+
+CONStoreDMmTsy* CONStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	{
+	CONStoreDMmTsy* subsession=new(ELeave) CONStoreDMmTsy(aPhone,aFac,aName);
+	CleanupStack::PushL(subsession);
+	subsession->ConstructL();
+	CleanupStack::Pop();
+	return subsession;
+	}
+
+void CONStoreDMmTsy::Init()
+	{}
+
+CONStoreDMmTsy::CONStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
+	{
+	iONStoreName=aName;
+	}
+
+void CONStoreDMmTsy::ConstructL()
+	{
+	iONReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
+	LOGTEXT(_L8("CONStoreDMmTsy created"));
+	}
+
+CONStoreDMmTsy::~CONStoreDMmTsy()
+	{
+	for (TInt i=iONReadAll->Count()-1; i>=0; --i)
+		{
+		CListReadAllAttempt* ptr=iONReadAll->At(i);
+		iONReadAll->Delete(i);
+		delete ptr;
+		}
+	delete iONReadAll;
+	LOGTEXT(_L8("CONStoreDMmTsy destroyed"));
+	}
+
+CTelObject* CONStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject* CONStoreDMmTsy::OpenNewObjectL(TDes&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject::TReqMode CONStoreDMmTsy::ReqModeL(const TInt aIpc)
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+//
+// Flow Controlled Services
+//
+	case EMobilePhoneStoreRead:
+	case EMobilePhoneStoreWrite:
+	case EMobilePhoneStoreDelete:
+	case EMobilePhoneStoreDeleteAll:
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+	case EMobilePhoneStoreGetInfo:
+	case EMobileONStoreStoreAll:
+		ret=KReqModeFlowControlObeyed;
+		break;
+//
+// Multiple Completion Services with Immediate Server Repost
+// (Usually Notifications)
+//
+	case EMobilePhoneStoreNotifyStoreEvent:
+		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+		break;
+//
+// Cancel Requests
+//
+	case EMobilePhoneStoreGetInfoCancel:
+	case EMobilePhoneStoreReadCancel:
+	case EMobilePhoneStoreWriteCancel:
+	case EMobilePhoneStoreDeleteCancel:
+	case EMobilePhoneStoreDeleteAllCancel:
+	case EMobilePhoneStoreReadAllCancel:
+	case EMobilePhoneStoreNotifyStoreEventCancel:
+	case EMobileONStoreStoreAllCancel:
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return ret;
+	}
+
+TInt CONStoreDMmTsy::RegisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CONStoreDMmTsy: RegisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CONStoreDMmTsy: Register error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CONStoreDMmTsy::DeregisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CONStoreDMmTsy: DeregisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CONStoreDMmTsy: Deregister error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CONStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CONStoreDMmTsy: Registered with 2 slot"));
+		numberOfSlots=2;
+		break;
+	default:
+		// Unknown or invalid Phone IPC
+		LOGTEXT(_L8("CONStoreDMmTsy: Number of Slots error, unknown IPC"));
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return numberOfSlots;
+	}
+
+
+TInt CONStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+	{
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreRead:
+		return Read(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreWrite:
+		return Write(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreDelete:
+		return Delete(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAll(aTsyReqHandle);
+
+	case EMobilePhoneStoreGetInfo:
+		return GetInfo(aTsyReqHandle,
+			REINTERPRET_CAST(RMobileONStore::TMobileONStoreInfoV1*, dataPtr));
+
+	case EMobilePhoneStoreReadAllPhase1:
+		return ReadAllPhase1(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllPhase2(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
+
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEvent(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobileONStoreStoreAll:
+		return StoreAll(aTsyReqHandle,aPackage.Des1n());
+
+
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt CONStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreGetInfo:
+		return GetInfoCancel(aTsyReqHandle);
+	case EMobilePhoneStoreRead:
+		return ReadCancel(aTsyReqHandle);
+	case EMobilePhoneStoreWrite:
+		return WriteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDelete:
+		return DeleteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEventCancel(aTsyReqHandle);
+	case EMobileONStoreStoreAll:
+		return StoreAllCancel(aTsyReqHandle);
+		}
+	return KErrGeneral;
+	}
+
+
+void CONStoreDMmTsy::InitONEntry(RMobileONStore::TMobileONEntryV1& aEntry)
+	{
+	aEntry.iMode = DMMTSY_ON_STORE_ENTRY_MODE;
+	aEntry.iText =  DMMTSY_ON_STORE_ENTRY_TEXT;
+	aEntry.iNumber.iTypeOfNumber = DMMTSY_PHONE_TON;
+	aEntry.iNumber.iNumberPlan = DMMTSY_PHONE_NPI;
+	aEntry.iNumber.iTelNumber = DMMTSY_PHONE_TEL_NUMBER;
+	aEntry.iService = DMMTSY_ON_STORE_ENTRY_SERVICE;
+	}
+
+TInt CONStoreDMmTsy::ValidateONEntry(RMobileONStore::TMobileONEntryV1& aEntry)
+	{
+	if ((aEntry.iMode != DMMTSY_ON_STORE_ENTRY_MODE) ||
+		(aEntry.iText.Compare(DMMTSY_ON_STORE_ENTRY_TEXT) != 0) ||
+		(aEntry.iNumber.iTypeOfNumber != DMMTSY_PHONE_TON) ||
+		(aEntry.iNumber.iNumberPlan != DMMTSY_PHONE_NPI) ||
+		(aEntry.iNumber.iTelNumber.Compare(DMMTSY_PHONE_TEL_NUMBER) != 0) ||
+		(aEntry.iService != DMMTSY_ON_STORE_ENTRY_SERVICE))
+		return KErrCorrupt;
+	else
+		return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::Read called"));
+	RMobileONStore::TMobileONEntryV1Pckg* entryPckg = (RMobileONStore::TMobileONEntryV1Pckg*)aEntry;
+	RMobileONStore::TMobileONEntryV1& entry = (*entryPckg)();
+
+	if (entry.iIndex!=DMMTSY_ON_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		{
+		InitONEntry(entry);
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::ReadCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::Write called"));
+	RMobileONStore::TMobileONEntryV1Pckg* entryPckg = (RMobileONStore::TMobileONEntryV1Pckg*)aEntry;
+	RMobileONStore::TMobileONEntryV1& entry = (*entryPckg)();
+
+	if ((entry.iIndex!=DMMTSY_ON_STORE_INDEX2) || (ValidateONEntry(entry) != KErrNone))
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::WriteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::Delete called"));
+	if (*aIndex!=DMMTSY_ON_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::DeleteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::DeleteAll called"));
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::DeleteAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobileONStore::TMobileONStoreInfoV1* aInfo)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::GetInfo called"));
+	aInfo->iName=DMMTSY_ON_STORE_NAME;
+	aInfo->iType=DMMTSY_ON_STORE_TYPE;
+	aInfo->iTotalEntries=DMMTSY_ON_STORE_ENTRIES;
+	aInfo->iUsedEntries=DMMTSY_ON_STORE_USED;
+	aInfo->iCaps=DMMTSY_ON_STORE_CAPS;
+
+	aInfo->iNumberLen = DMMTSY_ON_STORE_INFO_GSM_MAX_NUM;
+	aInfo->iTextLen = DMMTSY_ON_STORE_INFO_GSM_MAX_TEXT;
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::GetInfoCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
+									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
+									   TInt* aIndex)
+	{
+	if (!iNotifyStoreEvent++)
+		{
+		LOGTEXT(_L8("CONStoreDMmTsy::NotifyStoreEvent called"));
+		*aIndex=DMMTSY_ON_STORE_INDEX2;
+		*aEvent = DMMTSY_ON_STORE_EVENT;
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::NotifyStoreEventCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TInt* aBufSize)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllPhase1 called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, aId, aBufSize););
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	};
+
+TInt CONStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
+											 RMobilePhone::TClientId* aId,
+											 TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneONList* list=CMobilePhoneONList::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileONStore::TMobileONEntryV1 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_ON_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			InitONEntry(entry);
+			entry.iIndex=DMMTSY_ON_STORE_INDEX1;
+			break;
+		case 1:
+			InitONEntry(entry);
+			entry.iIndex=DMMTSY_ON_STORE_INDEX2;
+		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
+
+	iONReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+
+TInt CONStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllPhase2 called"));
+	CListReadAllAttempt* read=NULL;
+	// Find the read attempt from this client
+	for (TInt i=0; i<iONReadAll->Count(); ++i)
+		{
+		read = iONReadAll->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;
+			iONReadAll->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 CONStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::ReadAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+
+	// Remove the read all attempt from iONReadAll
+	CListReadAllAttempt* read=NULL;
+	for (TInt i=0; i<iONReadAll->Count(); ++i)
+		{
+		read = iONReadAll->At(i);
+		if (read->iReqHandle == aTsyReqHandle)
+			{
+			delete read;
+			iONReadAll->Delete(i);
+			break;
+			}
+		}
+
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+
+TInt CONStoreDMmTsy::StoreAll(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::StoreAll called"));
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	TRAP(leaveCode, ret=ProcessStoreAllL(aTsyReqHandle, aBuffer););
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+	return ret;
+	}
+
+TInt CONStoreDMmTsy::ProcessStoreAllL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
+	{
+	CMobilePhoneONList* aONList=CMobilePhoneONList::NewL();
+	CleanupStack::PushL(aONList);
+
+	aONList->RestoreL(*aBuffer);
+
+	RMobileONStore::TMobileONEntryV1 entry;
+
+	if (aONList->Enumerate() != DMMTSY_ON_STORE_COUNT)
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aONList->GetEntryL(0);
+
+	if ((entry.iIndex != DMMTSY_ON_STORE_INDEX1) ||
+		(ValidateONEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	entry=aONList->GetEntryL(1);
+
+	if ((entry.iIndex != DMMTSY_ON_STORE_INDEX2) ||
+		(ValidateONEntry(entry) != KErrNone))
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		return KErrNone;
+		}
+
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // aONList
+	return KErrNone;
+	}
+
+TInt CONStoreDMmTsy::StoreAllCancel(TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CONStoreDMmTsy::StoreAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+
+/**************************************************************************/
+//
+//	CENStoreDMmTsy
+//
+/**************************************************************************/
+
+CENStoreDMmTsy* CENStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	{
+	CENStoreDMmTsy* subsession=new(ELeave) CENStoreDMmTsy(aPhone,aFac,aName);
+	CleanupStack::PushL(subsession);
+	subsession->ConstructL();
+	CleanupStack::Pop();
+	return subsession;
+	}
+
+void CENStoreDMmTsy::Init()
+	{}
+
+CENStoreDMmTsy::CENStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName)
+	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
+	{
+	iENStoreName=aName;
+	}
+
+void CENStoreDMmTsy::ConstructL()
+	{
+	iENReadAll = new CArrayPtrFlat<CListReadAllAttempt>(1);
+	LOGTEXT(_L8("CENStoreDMmTsy created"));
+	}
+
+CENStoreDMmTsy::~CENStoreDMmTsy()
+	{
+	if (iENReadAll)
+		{
+		for (TInt i=iENReadAll->Count()-1; i>=0; --i)
+			{
+			CListReadAllAttempt* ptr=iENReadAll->At(i);
+			iENReadAll->Delete(i);
+			delete ptr;
+			}
+		}
+	delete iENReadAll;
+	LOGTEXT(_L8("CENStoreDMmTsy destroyed"));
+	}
+
+CTelObject* CENStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject* CENStoreDMmTsy::OpenNewObjectL(TDes&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject::TReqMode CENStoreDMmTsy::ReqModeL(const TInt aIpc)
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+//
+// Non Flow controlled services
+//
+	case EMobilePhoneStoreReadAllPhase2:
+		break;
+//
+// Flow Controlled Services
+//
+	case EMobilePhoneStoreRead:
+	case EMobilePhoneStoreWrite:
+	case EMobilePhoneStoreDelete:
+	case EMobilePhoneStoreDeleteAll:
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreGetInfo:
+		ret=KReqModeFlowControlObeyed;
+		break;
+//
+// Multiple Completion Services with Immediate Server Repost
+// (Usually Notifications)
+//
+	case EMobilePhoneStoreNotifyStoreEvent:
+		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+		break;
+//
+// Cancel Requests
+//
+	case EMobilePhoneStoreGetInfoCancel:
+	case EMobilePhoneStoreReadCancel:
+	case EMobilePhoneStoreWriteCancel:
+	case EMobilePhoneStoreDeleteCancel:
+	case EMobilePhoneStoreDeleteAllCancel:
+	case EMobilePhoneStoreReadAllCancel:
+	case EMobilePhoneStoreNotifyStoreEventCancel:
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return ret;
+	}
+
+TInt CENStoreDMmTsy::RegisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CENStoreDMmTsy: RegisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CENStoreDMmTsy: Register error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CENStoreDMmTsy::DeregisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CENStoreDMmTsy: DeregisterNotification - Store Event "));
+		return KErrNone;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CENStoreDMmTsy: Deregister error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CENStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CENStoreDMmTsy: Registered with 2 slot"));
+		numberOfSlots=2;
+		break;
+	default:
+		// Unknown or invalid Phone IPC
+		LOGTEXT(_L8("CENStoreDMmTsy: Number of Slots error, unknown IPC"));
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return numberOfSlots;
+	}
+
+
+TInt CENStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+	{
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreRead:
+		return Read(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreWrite:
+		return Write(aTsyReqHandle, aPackage.Des1n());
+
+	case EMobilePhoneStoreDelete:
+		return Delete(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAll(aTsyReqHandle);
+
+	case EMobilePhoneStoreGetInfo:
+		return GetInfo(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobilePhoneStoreInfoV1*, dataPtr));
+
+	case EMobilePhoneStoreReadAllPhase1:
+		return ReadAllPhase1(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllPhase2(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhone::TClientId*,dataPtr),aPackage.Des2n());
+
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEvent(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneStore::TMobileStoreEvent*,dataPtr),
+			REINTERPRET_CAST(TInt*,dataPtr2));
+
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt CENStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreGetInfo:
+		return GetInfoCancel(aTsyReqHandle);
+	case EMobilePhoneStoreRead:
+		return ReadCancel(aTsyReqHandle);
+	case EMobilePhoneStoreWrite:
+		return WriteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDelete:
+		return DeleteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDeleteAll:
+		return DeleteAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreReadAllPhase1:
+	case EMobilePhoneStoreReadAllPhase2:
+		return ReadAllCancel(aTsyReqHandle);
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return NotifyStoreEventCancel(aTsyReqHandle);
+		}
+	return KErrGeneral;
+	}
+
+
+void CENStoreDMmTsy::InitENEntry(RMobileENStore::TMobileENEntryV1& aEntry)
+	{
+	aEntry.iNetworkSpecific = DMMTSY_EN_STORE_NS;
+	aEntry.iMode            = DMMTSY_EN_STORE_MODE;
+	aEntry.iCountryCode     = DMMTSY_EN_STORE_CC;
+	aEntry.iIdentity        = DMMTSY_EN_STORE_ID;
+	aEntry.iNumber          = DMMTSY_EN_STORE_NUM;
+	aEntry.iAlphaId         = DMMTSY_EN_STORE_AMBULANCE_ID;
+	aEntry.iCallType        = DMMTSY_EN_STORE_CALL_TYPE;
+	}
+
+TInt CENStoreDMmTsy::ValidateENEntry(RMobileENStore::TMobileENEntryV1& aEntry)
+	{
+	if ((aEntry.iNetworkSpecific != DMMTSY_EN_STORE_NS) ||
+		(aEntry.iMode != DMMTSY_EN_STORE_MODE) ||
+		(aEntry.iCountryCode.Compare(DMMTSY_EN_STORE_CC) != 0) ||
+		(aEntry.iIdentity.Compare(DMMTSY_EN_STORE_ID) != 0) ||
+		(aEntry.iNumber.Compare(DMMTSY_EN_STORE_NUM) != 0) ||
+		(aEntry.iAlphaId.Compare(DMMTSY_EN_STORE_AMBULANCE_ID) != 0) ||
+	    (aEntry.iCallType != DMMTSY_EN_STORE_CALL_TYPE))
+		return KErrCorrupt;
+	else
+		return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
+	{
+
+	LOGTEXT(_L8("CENStoreDMmTsy::Read called"));
+	RMobileENStore::TMobileENEntryV1Pckg* entryPckg = (RMobileENStore::TMobileENEntryV1Pckg*)aEntry;
+	RMobileENStore::TMobileENEntryV1& entry = (*entryPckg)();
+
+	if (entry.iIndex!=DMMTSY_EN_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		{
+		InitENEntry(entry);
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::ReadCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aEntry)
+	{
+
+	LOGTEXT(_L8("CENStoreDMmTsy::Write called"));
+	RMobileENStore::TMobileENEntryV1Pckg* entryPckg = (RMobileENStore::TMobileENEntryV1Pckg*)aEntry;
+	RMobileENStore::TMobileENEntryV1& entry = (*entryPckg)();
+
+	if ((entry.iIndex!=DMMTSY_EN_STORE_INDEX2) || (ValidateENEntry(entry) != KErrNone))
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::WriteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::Delete called"));
+
+	if (*aIndex!=DMMTSY_EN_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::DeleteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::DeleteAll(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::DeleteAll called"));
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::DeleteAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::DeleteAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, RMobilePhoneStore::TMobilePhoneStoreInfoV1* aInfo)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::GetInfo called"));
+
+	aInfo->iName=DMMTSY_EN_STORE_NAME;
+	aInfo->iType=DMMTSY_EN_STORE_TYPE;
+	aInfo->iTotalEntries=DMMTSY_EN_STORE_ENTRIES;
+	aInfo->iUsedEntries=DMMTSY_EN_STORE_USED;
+	aInfo->iCaps=DMMTSY_EN_STORE_CAPS;
+
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::GetInfoCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::NotifyStoreEvent(const TTsyReqHandle aTsyReqHandle,
+									   RMobilePhoneStore::TMobileStoreEvent *aEvent,
+									   TInt* aIndex)
+	{
+	if (!iNotifyStoreEvent++)
+		{
+		LOGTEXT(_L8("CENStoreDMmTsy::NotifyStoreEvent called"));
+		*aIndex=DMMTSY_EN_STORE_INDEX2;
+		*aEvent = DMMTSY_EN_STORE_EVENT;
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::NotifyStoreEventCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::NotifyStoreEventCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CENStoreDMmTsy::ReadAllPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId *aId, TInt* aBufSize)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllPhase1 called"));
+
+	TInt ret=KErrNone;
+	TInt leaveCode=KErrNone;
+	TRAP(leaveCode, ret=ProcessReadAllPhase1L(aTsyReqHandle, aId, aBufSize););
+	if (leaveCode != KErrNone)
+		ReqCompleted(aTsyReqHandle,leaveCode);
+
+	return ret;
+	}
+
+TInt CENStoreDMmTsy::ProcessReadAllPhase1L(const TTsyReqHandle aTsyReqHandle,
+											 RMobilePhone::TClientId* aId,
+											 TInt* aBufSize)
+	{
+	// read the list, store its content and then return size of this buffer to client
+	CMobilePhoneENList* list=CMobilePhoneENList::NewL();
+	CleanupStack::PushL(list);
+
+	RMobileENStore::TMobileENEntryV1 entry;
+
+	// fill up an example list
+	for (TInt index=0; index < DMMTSY_EN_STORE_COUNT; index++)
+		{
+		switch (index)
+			{
+		case 0:
+			InitENEntry(entry);
+			entry.iIndex=DMMTSY_EN_STORE_INDEX1;
+			break;
+		case 1:
+			InitENEntry(entry);
+			entry.iIndex=DMMTSY_EN_STORE_INDEX2;
+		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
+
+	iENReadAll->AppendL(read);
+	CleanupStack::Pop(); // pop the CListReadAllAttempt
+
+	// return the CBufFlat’s size to client
+	*aBufSize=(read->iListBuf)->Size();
+
+	// Complete first phase of list retrieval
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+	CleanupStack::PopAndDestroy(); // pop&destroy list
+	return KErrNone;
+	}
+
+
+TInt CENStoreDMmTsy::ReadAllPhase2(TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId, TDes8* aBuffer)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllPhase2 called"));
+	CListReadAllAttempt* read=NULL;
+	// Find the read attempt from this client
+	for (TInt i=0; i<iENReadAll->Count(); ++i)
+		{
+		read = iENReadAll->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;
+			iENReadAll->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 CENStoreDMmTsy::ReadAllCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CENStoreDMmTsy::ReadAllCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+
+	// Remove the read all attempt from iENReadAll
+	CListReadAllAttempt* read=NULL;
+	for (TInt i=0; i<iENReadAll->Count(); ++i)
+		{
+		read = iENReadAll->At(i);
+		if (read->iReqHandle == aTsyReqHandle)
+			{
+			delete read;
+			iENReadAll->Delete(i);
+			break;
+			}
+		}
+
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+
+/**************************************************************************/
+//
+//	CMobilePhoneBookStoreDMmTsy
+//
+/**************************************************************************/
+
+CMobilePhoneBookStoreDMmTsy* CMobilePhoneBookStoreDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName, const TDesC& aType)
+	{
+	CMobilePhoneBookStoreDMmTsy* subsession=new(ELeave) CMobilePhoneBookStoreDMmTsy(aPhone,aFac,aName,aType);
+	CleanupStack::PushL(subsession);
+	subsession->ConstructL();
+	CleanupStack::Pop();
+	return subsession;
+	}
+
+void CMobilePhoneBookStoreDMmTsy::Init()
+	{}
+
+CMobilePhoneBookStoreDMmTsy::CMobilePhoneBookStoreDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac, const TDesC& aName, const TDesC& aType)
+	:CSubSessionExtDummyBase(aFac), iPhone(aPhone)
+	{
+	iPhoneBookStoreName=aName;
+	iIccType=aType;
+	}
+
+void CMobilePhoneBookStoreDMmTsy::ConstructL()
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy created"));
+	}
+
+CMobilePhoneBookStoreDMmTsy::~CMobilePhoneBookStoreDMmTsy()
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy destroyed"));
+	}
+
+CTelObject* CMobilePhoneBookStoreDMmTsy::OpenNewObjectByNameL(const TDesC&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject* CMobilePhoneBookStoreDMmTsy::OpenNewObjectL(TDes&)
+	{
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}
+
+CTelObject::TReqMode CMobilePhoneBookStoreDMmTsy::ReqModeL(const TInt aIpc)
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+//
+// Flow Controlled Services
+//
+	case EMobilePhoneBookStoreRead:
+	case EMobilePhoneBookStoreWrite:
+	case EMobilePhoneStoreDelete:
+	case EMobilePhoneStoreGetInfo:
+		ret=KReqModeFlowControlObeyed;
+		break;
+//
+// Multiple Completion Services with Immediate Server Repost
+// (Usually Notifications)
+//
+	case EMobilePhoneStoreNotifyStoreEvent:
+		ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+		break;
+//
+// Cancel Requests
+//
+	case EMobilePhoneStoreGetInfoCancel:
+	case EMobilePhoneBookStoreReadCancel:
+	case EMobilePhoneBookStoreWriteCancel:
+	case EMobilePhoneStoreDeleteCancel:
+	case EMobilePhoneStoreNotifyStoreEventCancel:
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return ret;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::RegisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: RegisterNotification - Store Event "));
+		return KErrNotSupported;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Register error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::DeregisterNotification(const TInt aIpc)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: DeregisterNotification - Store Event "));
+		return KErrNotSupported;
+	default:
+		// Unknown or invalid IPC
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Deregister error, unknown IPC"));
+		return KErrNotSupported;
+		}
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::NumberOfSlotsL(const TInt aIpc)
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreNotifyStoreEvent:
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Registered with 2 slot"));
+		User::Leave(KErrNotSupported);
+		break;
+	default:
+		// Unknown or invalid Phone IPC
+		LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy: Number of Slots error, unknown IPC"));
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	return numberOfSlots;
+	}
+
+
+TInt CMobilePhoneBookStoreDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+	{
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+	case EMobilePhoneBookStoreRead:
+		return Read(aTsyReqHandle,
+			REINTERPRET_CAST(RMobilePhoneBookStore::TPBIndexAndNumEntries*,dataPtr),
+			aPackage.Des2n());
+
+	case EMobilePhoneBookStoreWrite:
+		return Write(aTsyReqHandle, aPackage.Des1n(), REINTERPRET_CAST(TInt*,dataPtr2));
+
+	case EMobilePhoneStoreDelete:
+		return Delete(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*,dataPtr));
+
+	case EMobilePhoneStoreGetInfo:
+		return GetInfo(aTsyReqHandle,
+			REINTERPRET_CAST(TDes8*, dataPtr));
+
+	case EMobilePhoneStoreNotifyStoreEvent:
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+	{
+	switch (aIpc)
+		{
+	case EMobilePhoneStoreGetInfo:
+		return GetInfoCancel(aTsyReqHandle);
+	case EMobilePhoneBookStoreRead:
+		return ReadCancel(aTsyReqHandle);
+	case EMobilePhoneBookStoreWrite:
+		return WriteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreDelete:
+		return DeleteCancel(aTsyReqHandle);
+	case EMobilePhoneStoreNotifyStoreEvent:
+		return KErrNotSupported;
+		}
+	return KErrGeneral;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::Read(const TTsyReqHandle aTsyReqHandle,
+									   RMobilePhoneBookStore::TPBIndexAndNumEntries* aIndexAndEntries,
+									   TDes8* aPBData)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Read called"));
+
+	if (aIndexAndEntries->iIndex!=DMMTSY_PHONEBOOK_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		{
+		if(aIndexAndEntries->iNumSlots == DMMTSY_PHONE_ONE_ENTRY)
+			*aPBData = DMMTSY_PHONE_BOOK_DATA1;
+		else if(aIndexAndEntries->iNumSlots == DMMTSY_PHONE_NUM_OF_ENTRIES)
+			*aPBData = DMMTSY_PHONE_BOOK_MULTIPLE_DATA;
+
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::ReadCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::ReadCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::Write(const TTsyReqHandle aTsyReqHandle, TDesC8* aPBData, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Write called"));
+
+	if ((*aIndex!=DMMTSY_PHONEBOOK_STORE_INDEX2) ||
+		(aPBData->Compare(DMMTSY_PHONE_BOOK_DATA2) != 0))
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		{
+		// Test returned, allocated index
+		*aIndex=DMMTSY_PHONEBOOK_STORE_INDEX1;
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+		}
+
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::WriteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::WriteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::Delete(const TTsyReqHandle aTsyReqHandle, TInt* aIndex)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::Delete called"));
+
+	if (*aIndex!=DMMTSY_PHONEBOOK_STORE_INDEX1)
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	else
+		iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::DeleteCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::GetInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::GetInfo called"));
+
+	RMobilePhoneBookStore::TMobilePhoneBookInfoV1* pbInfo = (RMobilePhoneBookStore::TMobilePhoneBookInfoV1*)aInfo;
+
+	if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV1)
+		{
+		pbInfo->iName=DMMTSY_PHONEBOOK_STORE_NAME;
+		pbInfo->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
+		pbInfo->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
+		pbInfo->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
+		pbInfo->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
+		pbInfo->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
+		pbInfo->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
+		pbInfo->iLocation = DMMTSY_PHONEBOOK_LOCATION;
+		pbInfo->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
+		pbInfo->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
+		}
+	else if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV2)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV2* pbV2Info = (RMobilePhoneBookStore::TMobilePhoneBookInfoV2*)aInfo;
+		pbV2Info->iName=DMMTSY_PHONEBOOK_STORE_NAME;
+		pbV2Info->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
+		pbV2Info->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
+		pbV2Info->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
+		pbV2Info->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
+		pbV2Info->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
+		pbV2Info->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
+		pbV2Info->iLocation = DMMTSY_PHONEBOOK_LOCATION;
+		pbV2Info->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
+		pbV2Info->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
+		pbV2Info->iPhBkMode = DMMTSY_PHONEBOOK_TYPE;
+		}
+	else if(pbInfo->ExtensionId()==RMobilePhoneStore::KETelMobilePhonebookStoreV5)
+		{
+		RMobilePhoneBookStore::TMobilePhoneBookInfoV5* pbV5Info = (RMobilePhoneBookStore::TMobilePhoneBookInfoV5*)aInfo;
+		pbV5Info->iName=DMMTSY_PHONEBOOK_STORE_NAME;
+		pbV5Info->iType=DMMTSY_PHONEBOOK_STORE_TYPE;
+		pbV5Info->iTotalEntries=DMMTSY_PHONEBOOK_STORE_ENTRIES;
+		pbV5Info->iUsedEntries=DMMTSY_PHONEBOOK_STORE_USED;
+		pbV5Info->iCaps=DMMTSY_PHONEBOOK_STORE_CAPS;
+		pbV5Info->iMaxNumLength = DMMTSY_PHONEBOOK_MAXNL;
+		pbV5Info->iMaxTextLength = DMMTSY_PHONEBOOK_MAXTL;
+		pbV5Info->iLocation = DMMTSY_PHONEBOOK_LOCATION;
+		pbV5Info->iIdentity = DMMTSY_PHONEBOOK_IDENTITY;
+		pbV5Info->iChangeCounter = DMMTSY_PHONEBOOK_CHANGECOUNT;
+		pbV5Info->iPhBkMode = DMMTSY_PHONEBOOK_TYPE;
+		pbV5Info->iMaxSecondNames = DMMTSY_PHONEBOOK_MAXSECONDNAMES;
+		pbV5Info->iMaxTextLengthSecondName = DMMTSY_PHONEBOOK_MAXTEXTLENSECONDNAME;
+		pbV5Info->iMaxAdditionalNumbers = DMMTSY_PHONEBOOK_MAXADDNUM;
+		pbV5Info->iMaxTextLengthAdditionalNumber = DMMTSY_PHONEBOOK_MAXTEXTLENADDNUM;
+		pbV5Info->iMaxNumLengthAdditionalNumber = DMMTSY_PHONEBOOK_MAXNUMLENADDNUM;
+		pbV5Info->iMaxGroupNames = DMMTSY_PHONEBOOK_MAXGROUPNAMES;
+		pbV5Info->iMaxTextLengthGroupName = DMMTSY_PHONEBOOK_MAXTEXTLENGROUPNAME;
+		pbV5Info->iMaxEmailAddr = DMMTSY_PHONEBOOK_MAXEMAILADDR;
+		pbV5Info->iMaxTextLengthEmailAddr = DMMTSY_PHONEBOOK_MAXTEXTLENEMAILADDR;
+		}
+	iPhone->AddDelayedReq(aTsyReqHandle,this);
+
+	return KErrNone;
+	}
+
+TInt CMobilePhoneBookStoreDMmTsy::GetInfoCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	LOGTEXT(_L8("CMobilePhoneBookStoreDMmTsy::GetInfoCancel called"));
+	iPhone->RemoveDelayedReq(aTsyReqHandle);
+	ReqCompleted(aTsyReqHandle,KErrCancel);
+	return KErrNone;
+	}