telephonyserverplugins/common_tsy/test/component/mockltsy/mockltsy/src/cmocksmsmesshandler.cpp
// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "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 <ctsy/pluginapi/mmmessagemanagercallback.h>
#include "cmocksmsmesshandler.h"
#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
#include "etelmm.h"
#include <ctsy/tflogger.h>
#include "cmockltsyengine.h"
#include "tmockltsydata.h"
#include <ctsy/serviceapi/cmmsmsutility.h>
/**
Factory function
*/
CMockSmsMessHandler* CMockSmsMessHandler::NewL(CMmMessageRouter* aMessageRouter)
{
CMockSmsMessHandler* self = new (ELeave)CMockSmsMessHandler(aMessageRouter);
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop();
return self;
}
/**
Constructor
*/
CMockSmsMessHandler::CMockSmsMessHandler(CMmMessageRouter* aMessageRouter)
:iMessageRouter(aMessageRouter)
{
}
/**
2nd phase contructor
*/
void CMockSmsMessHandler::ConstructL()
{
}
/**
Destructor
*/
CMockSmsMessHandler::~CMockSmsMessHandler()
{
for (TInt i = 0; i<iWcdmaBroadcastMessages.Count(); i++)
{
if ( iWcdmaBroadcastMessages[i] )
{
iWcdmaBroadcastMessages[i]->ResetAndDestroy();
}
}
iWcdmaBroadcastMessages.ResetAndDestroy();
for (TInt i = 0; i<iSmsParametersList.Count(); i++)
{
if ( iSmsParametersList[i] )
{
iSmsParametersList[i]->ResetAndDestroy();
}
}
iSmsParametersList.ResetAndDestroy();
for (TInt i = 0; i<iSmsMsgList.Count(); i++)
{
if ( iSmsMsgList[i] )
{
iSmsMsgList[i]->ResetAndDestroy();
}
}
iSmsMsgList.ResetAndDestroy();
iBroadcastIdLists.ResetAndDestroy();
}
/**
Execute a request
*/
TInt CMockSmsMessHandler::ExtFuncL(
TInt aIpc,
const CMmDataPackage* aMmDataPackage)
{
switch (aIpc)
{
case EMobileSmsMessagingSetMoSmsBearer:
{
RMobileSmsMessaging::TMobileSmsBearer smsData;
aMmDataPackage->UnPackData(smsData);
TMockLtsyData1<RMobileSmsMessaging::TMobileSmsBearer> data(smsData);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileSmsMessagingNackSmsStored:
{
TDesC8* ptr;
TInt cause;
TMockLtsyData2<TDesC8*, TInt> data(ptr, cause);
aMmDataPackage->UnPackData(ptr, cause);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileSmsMessagingSendMessageNoFdnCheck:
case EMobileSmsMessagingSendMessage:
{
TSendSmsDataAndAttributes smsData;
aMmDataPackage->UnPackData(smsData);
TMockLtsyData1<TSendSmsDataAndAttributes> data(smsData);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileUssdMessagingSendMessageNoFdnCheck:
case EMobileUssdMessagingSendMessage:
{
TDes8* ptr1 = NULL;
TDes8** ptr2 = NULL;
aMmDataPackage->UnPackData(&ptr1, &ptr2);
TPckg<TName>* msgData = ( TPckg<TName>* ) ptr1;
TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1>* msgAttributes =
( TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1>* ) *ptr2;
TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1>
data( ( *msgData )(), ( *msgAttributes )());
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileBroadcastMessagingStoreIdList:
{
CMobilePhoneBroadcastIdList* idList = NULL;
RMobileBroadcastMessaging::TMobileBroadcastIdType type
= RMobileBroadcastMessaging::EGsmBroadcastId;
// make proper change when
// CTSY component defect is fixed:
// looking at the CTSY implementation of StoreBroadcastIdList IPC
// it is wrong since it does nothing.
aMmDataPackage->UnPackData(idList, type);
TMockLtsyData2<CMobilePhoneBroadcastIdList*,
RMobileBroadcastMessaging::TMobileBroadcastIdType>
data(idList, type);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileBroadcastMessagingGetIdListPhase1:
{
RMobileBroadcastMessaging::TMobileBroadcastIdType type
= RMobileBroadcastMessaging::EGsmBroadcastId;
// make proper change when
// CTSY component defect is fixed:
// looking at the CTSY implementation of EMobileBroadcastMessagingGetIdListPhase1 IPC
// it is wrong since it does nothing.
aMmDataPackage->UnPackData(type);
TMockLtsyData1<RMobileBroadcastMessaging::TMobileBroadcastIdType>
data(type);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileBroadcastMessagingSetFilterSetting:
case EMobileBroadcastMessagingReceiveMessageCancel:
case EMobileBroadcastMessagingReceiveMessage:
{
TCbsCbmiAndLangAndFilter *packedData;
aMmDataPackage->UnPackData(&packedData);
TMockLtsyData1<TCbsCbmiAndLangAndFilter> data(*packedData);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobileSmsMessagingAckSmsStored:
{
TDesC8* ptr;
if(NULL == aMmDataPackage)
{
ptr = NULL;
}
else
{
aMmDataPackage->UnPackData(ptr);
}
TMockLtsyData1<TDesC8*> data(ptr);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobilePhoneStoreRead:
{
TInt index;
aMmDataPackage->UnPackData(index);
TMockLtsyData1<TInt> data(index);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobilePhoneStoreWrite:
{
TDes8** ptr1 = NULL;
TInt * index = NULL;
aMmDataPackage->UnPackData(&ptr1, &index);
TPckg<RMobilePhone::TMultimodeType>* pckg =
( TPckg<RMobilePhone::TMultimodeType>* ) *ptr1;
switch( ( *pckg )().ExtensionId() )
{
case RMobileSmsStore::KETelMobileGsmSmsEntryV1:
{
TPckg<RMobileSmsStore::TMobileGsmSmsEntryV1>* entryPckg =
( TPckg<RMobileSmsStore::TMobileGsmSmsEntryV1>* ) *ptr1;
TMockLtsyData2<RMobileSmsStore::TMobileGsmSmsEntryV1, TInt>
data( ( *entryPckg )(), *index);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case RMobileSmsStore::KETelMobileCdmaSmsEntryV1:
{
TPckg<RMobileSmsStore::TMobileCdmaSmsEntryV1>* entryPckg =
( TPckg<RMobileSmsStore::TMobileCdmaSmsEntryV1>* ) *ptr1;
TMockLtsyData2<RMobileSmsStore::TMobileCdmaSmsEntryV1, TInt>
data( ( *entryPckg )(), *index);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
default:
{
TMockLtsyData0 data;
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
}
}
case EMobilePhoneStoreDelete:
{
TInt* index = NULL;
aMmDataPackage->UnPackData(&index);
TMockLtsyData1<TInt> data(*index);
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
case EMobilePhoneStoreReadAllPhase1:
case EMobilePhoneStoreGetInfo:
case EMobilePhoneStoreDeleteAll:
case EMobileSmsMessagingGetSmspListPhase1:
case EMobileSmsMessagingResumeSmsReception:
default:
{
TMockLtsyData0 data;
return iMessageRouter->MockLtsyEngine()->ExecuteCommandL(aIpc, data);
}
}
}
void CMockSmsMessHandler::CompleteL(TInt aIpc, const TDesC8& aData, TInt aResult)
{
CMmDataPackage dataPackage;
switch (aIpc)
{
case EMmTsyActivateSmsRouting:
{
TMockLtsyData1Buf<TUint8> status;
status.DeserialiseL(aData);
dataPackage.PackData(status.Data1Ptr());
}
break;
case EMobileSmsMessagingGetMessageStoreInfo:
{
TMockLtsyData2Buf< TInt, TInt > data;
data.DeserialiseL(aData);
dataPackage.PackData(data.Data1Ptr(), data.Data2Ptr());
}
break;
case EMobileSmsMessagingReceiveMessage:
{
TMockLtsyData2Buf< TBool, TSmsMsg* > data;
CleanupClosePushL(data);
data.DeserialiseL(aData);
dataPackage.PackData(data.Data1Ptr(), data.Data2Ptr());
iMessageRouter->MessageManagerCallback()->Complete(aIpc, &dataPackage, aResult);
CleanupStack::PopAndDestroy(1);
return;
}
case EMobileSmsMessagingSendMessageNoFdnCheck:
case EMobileSmsMessagingSendMessage:
{
TMockLtsyData2Buf<TInt16, TBuf8<RMobileSmsMessaging::KGsmTpduSize> > data;
data.DeserialiseL(aData);
dataPackage.PackData(data.Data1Ptr(), data.Data2Ptr());
}
break;
case EMmTsyGsmBroadcastNotifyMessageReceived:
{
TMockLtsyData1Buf<TGsmCbsMsg> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr());
}
break;
case EMmTsyWcdmaBroadcastNotifyMessageReceived:
if ( KErrNone == aResult )
{
TMockLtsyData2Buf<CArrayPtrFlat< TWcdmaCbsMsg >*, TUint8> data;
data.DeserialiseL(aData);
if ( data.Data1() )
{
iWcdmaBroadcastMessages.Append(data.Data1());
}
dataPackage.PackData(data.Data1Ptr(), data.Data2Ptr());
}
break;
case EMobileSmsMessagingGetSmspListPhase1:
if ( KErrNone == aResult )
{
TMockLtsyData1Buf<CArrayPtrFlat< TSmsParameters >*> data;
data.DeserialiseL(aData);
if ( data.Data1() )
{
iSmsParametersList.Append(data.Data1());
}
dataPackage.PackData(data.Data1());
}
break;
case EMobileUssdMessagingNotifyNetworkRelease:
{
if (aData.Length() > sizeof(RMobilePhone::TMobilePhoneSendSSRequestV3))
{
TMockLtsyData2Buf<RMobilePhone::TMobilePhoneSendSSRequestV3,
RMobileUssdMessaging::TMobileUssdAttributesV1> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr(), msg.Data2Ptr() );
}
else
{
TMockLtsyData1Buf<RMobilePhone::TMobilePhoneSendSSRequestV3> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr());
}
}
break;
case EMobileUssdMessagingSendRelease:
{
TMockLtsyData1Buf<RMobilePhone::TMobilePhoneSendSSRequestV3> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr());
}
break;
case EMobileUssdMessagingReceiveMessage:
{
TMockLtsyData2Buf<TBuf8<KMaxName>,
RMobileUssdMessaging::TMobileUssdAttributesV1> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr(), msg.Data2Ptr());
}
break;
case EMobilePhoneStoreRead:
{
TMockLtsyData1Buf<TSmsMsg> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr());
}
break;
case EMobilePhoneStoreWrite:
{
TMockLtsyData2Buf<TUint8, TBool> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr(), msg.Data2Ptr());
}
break;
case EMobilePhoneStoreGetInfo:
{
TMockLtsyData2Buf<TUint8, TInt> msg;
msg.DeserialiseL(aData);
dataPackage.PackData(msg.Data1Ptr(), msg.Data2Ptr());
}
break;
case EMobilePhoneStoreReadAllPhase1:
{
TMockLtsyData2Buf<CArrayPtrFlat< TSmsMsg >*, TBool> data;
data.DeserialiseL(aData);
if ( data.Data1() )
{
iSmsMsgList.Append(data.Data1());
}
dataPackage.PackData(data.Data1Ptr(), data.Data2Ptr());
}
break;
case EMobileBroadcastMessagingGetIdListPhase1:
{
// make proper change when
// CTSY component defect is fixed:
// looking at the CTSY implementation of EMobileBroadcastMessagingGetIdListPhase1 IPC
// it is wrong since it does nothing.
CMobilePhoneBroadcastIdList* idList = CMobilePhoneBroadcastIdList::NewL();
CleanupStack::PushL(idList);
iBroadcastIdLists.Append(idList);
CleanupStack::Pop(idList);
TSerializer<CMobilePhoneBroadcastIdList>::DeserialiseL(aData, *idList);
dataPackage.PackData(&idList);
}
break;
case EMobilePhoneStoreDelete:
case EMobilePhoneStoreDeleteAll:
case EMobileBroadcastMessagingSetFilterSetting:
case EMobileBroadcastMessagingReceiveMessageCancel:
case EMobileBroadcastMessagingReceiveMessage:
case EMobileBroadcastMessagingStoreIdList:
default:
// complete event without data
break;
}
iMessageRouter->MessageManagerCallback()->Complete(aIpc, &dataPackage, aResult);
}