telephonyserverplugins/ctsydispatchlayer/test/mockltsy_under_ctsydispatch/src/cmockcallcontrolmesshandler.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 19 1f776524b15c
--- a/telephonyserverplugins/ctsydispatchlayer/test/mockltsy_under_ctsydispatch/src/cmockcallcontrolmesshandler.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/ctsydispatchlayer/test/mockltsy_under_ctsydispatch/src/cmockcallcontrolmesshandler.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,588 +1,588 @@
-// Copyright (c) 2008-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/ltsy/mltsydispatchcallcontrolinterface.h>
-#include <ctsy/ltsy/cctsydispatchercallback.h>
-#include <mmlist.h>
-#include <etelmm.h>
-
-#include "mmockmesshandlerbase.h"
-#include "cmockcallcontrolmesshandler.h"
-#include "cmockltsyengine.h"
-#include <test/tmockltsydata.h>
-#include <ctsy/ltsy/cctsydispatchercallback.h>
-
-#include "mockltsyindicatorids.h"
-
-// Example emergency numbers, used here for testing purposes only.
-_LIT(KEmergencyNumber999, "999");
-_LIT(KEmergencyNumber112, "112");
-
-/**
- * Factory function
- */
-CMockCallControlMessHandler* CMockCallControlMessHandler::NewL(CMockLtsyEngine& aEngine, CCtsyDispatcherCallback& aCallback )
-    {
-    CMockCallControlMessHandler* self = new (ELeave)CMockCallControlMessHandler(aEngine, aCallback);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-/**
- * Constructor
- */
-CMockCallControlMessHandler::CMockCallControlMessHandler(CMockLtsyEngine& aEngine, CCtsyDispatcherCallback& aCallback)
- : iMockLtsyEngine(aEngine), iCompletionCallback(aCallback)
-    {
-    }
-
-/**
- * 2nd phase contructor
- */
-void CMockCallControlMessHandler::ConstructL()
-    {
-    }
-
-/**
- * Destructor
- */
-CMockCallControlMessHandler::~CMockCallControlMessHandler()
-    {
-
-    }
-
-TBool CMockCallControlMessHandler::IsHandlerForApi(TInt aApiId)
-	{
-	switch (aApiId)
-		{
-		case KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId:
-		case KMockLtsyDispatchCallControlReceiveUuiIndId:
-		case KMockLtsyDispatchCallControlNotifyDataCallCapsChangeIndId:
-		case KMockLtsyDispatchCallControlNotifyIncomingCallIndId:
-		case KMockLtsyDispatchCallControlNotifyHscsdInfoChangeIndId:
-		case KMockLtsyDispatchCallControlNotifyCallEventIndId:
-		case KMockLtsyDispatchCallControlNotifyCallInfoChangeIndId:
-		case KMockLtsyDispatchCallControlRemoteAlertingToneChangeIndId:
-		case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
-		case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
-		case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
-		case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
-		case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
-		case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
-		case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
-		case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
-		case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
-		case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
-		case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
-		case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
-		case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
-		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
-		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
-		case MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId:
-		case MLtsyDispatchCallControlRecoverDataPort::KLtsyDispatchCallControlRecoverDataPortApiId:
-		case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
-		case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
-		case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
-		case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId:
-		case KMockLtsyDispatchCallControlNotifyIccCallForwardingStatusChangeIndId:
-		case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
-		case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
-		case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
-		case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
-		case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
-		case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
-		case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
-		case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
-			return iConfig.IsSupported(aApiId);
-		default:
-			return EFalse;
-		}
-	} // CMockCallControlMessHandler::IsHandlerForApi
-
-/**
- * Execute a request.
- */
-TInt CMockCallControlMessHandler::ExtFuncL(TInt aInterfaceId, VA_LIST& aList)
-    {
-    switch (aInterfaceId)
-    	{
-    	case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TBool isIsvCall = VA_ARG(aList, TBool);
-    		TMockLtsyData2<TInt, TInt> data(callId, isIsvCall);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
-    		{
-    		RMobileENStore::TEmergencyNumber& number = *VA_ARG(aList, RMobileENStore::TEmergencyNumber*);
-    		TMockLtsyData1<RMobileENStore::TEmergencyNumber> data(number);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
-    		{
-    		RMobilePhone::TMobilePhoneALSLine& alsLine = *VA_ARG(aList, RMobilePhone::TMobilePhoneALSLine*);
-    		TMockLtsyData1<RMobilePhone::TMobilePhoneALSLine> data(alsLine);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TInt hangUpCause = VA_ARG(aList, TInt);
-    		TMockLtsyData2<TInt, TInt> data(callId, hangUpCause);
-  			return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		RMobileCall::TMobileHscsdCallParamsV8& hscsdParams = *VA_ARG(aList, RMobileCall::TMobileHscsdCallParamsV8*);
-    		TMockLtsyData2<TInt, RMobileCall::TMobileHscsdCallParamsV8> data(callId, hscsdParams);
-  			return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
-    		{
-			RMobilePhone::TMobilePhoneALSLine& line = *VA_ARG(aList, RMobilePhone::TMobilePhoneALSLine*);
-    		RMobilePhone::TMobileAddress& dialledParty = *VA_ARG(aList, RMobilePhone::TMobileAddress*);
-    		RMobileCall::TMobileCallParamsV1& callParams = *VA_ARG(aList, RMobileCall::TMobileCallParamsV1*);
-    		TBool isIsvCall = VA_ARG(aList, TBool);
-    		RMobileCall::TCallParamOrigin& callOrigin = *VA_ARG(aList, RMobileCall::TCallParamOrigin*);
-    		TBool performFdnCheck = VA_ARG(aList, TBool);
-
-    		TMockLtsyData6<RMobilePhone::TMobilePhoneALSLine, RMobilePhone::TMobileAddress,
-    			RMobileCall::TMobileCallParamsV1, TBool, RMobileCall::TCallParamOrigin, TBool>
-    			data(line, dialledParty, callParams, isIsvCall, callOrigin, performFdnCheck);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TInt callId2 = VA_ARG(aList, TInt);
-    		TMockLtsyData2<TInt, TInt> data(callId, callId2);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		const TDesC& tones = *(VA_ARG(aList, const TDesC*));
-    		TInfoName tonesBuf;
-    		tonesBuf.Copy(tones.Left(KMaxInfoName));
-    		TMockLtsyData2<TInt, TInfoName> data(callId, tonesBuf);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
-    		{
-    		RMobilePhone::TMobilePhoneIdService& service = *VA_ARG(aList, RMobilePhone::TMobilePhoneIdService*);
-    		TMockLtsyData1<RMobilePhone::TMobilePhoneIdService> data(service);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
-    		{
-    		TInt heldCallId = VA_ARG(aList, TInt);
-    		TInt connectedCallId = VA_ARG(aList, TInt);
-    		TMockLtsyData2<TInt, TInt> data(heldCallId, connectedCallId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-		    RCall::TCommPort& commPort = *VA_ARG(aList, RCall::TCommPort*);
-		    _LIT(KDataPort, "DATAPORT::0");
-		    commPort.iPort = KDataPort;
-		    //sync call but data can still be checked.
-    		TMockLtsyData2<TInt, RCall::TCommPort> data(callId, commPort);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlRecoverDataPort::KLtsyDispatchCallControlRecoverDataPortApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		RCall::TCommPort& commPort = *VA_ARG(aList, RCall::TCommPort*);
-		    //sync call but data can still be checked.
-    		TMockLtsyData2<TInt, RCall::TCommPort> data(callId, commPort);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
-    		{
-    		TInt callId = VA_ARG(aList, TInt);
-    		TChar& tone = *(VA_ARG(aList, TChar*));
-    		TMockLtsyData2<TInt, TChar> data(callId, tone);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
-    		{
-		    TMockLtsyData0 data;
-		    return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
-    		{
-    		RMobilePhone::TMobileAddress& dialledParty = *VA_ARG(aList, RMobilePhone::TMobileAddress*);
-    		RMobileCall::TMobileDataCallParamsV1& callParams = *VA_ARG(aList, RMobileCall::TMobileDataCallParamsV1*);
-    		TBool performFdnCheck = VA_ARG(aList, TBool);
-    		TMockLtsyData3<RMobilePhone::TMobileAddress, RMobileCall::TMobileDataCallParamsV1, TBool>
-    			    	data(dialledParty, callParams, performFdnCheck);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId:
-    		{
-    		TDesC* emergencyNumber = VA_ARG(aList, TDesC*);
-    		TBool& isEmergencyNumber = *VA_ARG(aList, TBool*);
-    		if (*emergencyNumber == KEmergencyNumber999 || *emergencyNumber == KEmergencyNumber112)
-    			{
-    			isEmergencyNumber = ETrue;
-    			}
-    		else
-    			{
-    			isEmergencyNumber = EFalse;
-    			}
-    		//sync call but data can still be checked.
-    		TMockLtsyData2<TDesC*, TBool> data(emergencyNumber, isEmergencyNumber);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
-    	case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
-    	case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
-        case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
-    	case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
-    		{
-    		TMockLtsyData0 data;
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
-    		{
-    		RMmCustomAPI::TSetAlsBlock blocked = VA_ARG_ENUM(aList, RMmCustomAPI::TSetAlsBlock);
-    		TMockLtsyData1<RMmCustomAPI::TSetAlsBlock> data(blocked);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
-    		{
-     		TInt callId = VA_ARG(aList, TInt);
-    		TMockLtsyData1<TInt> data(callId);
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
-    		{
-    		TUint32 duration =VA_ARG(aList, TUint32);
-    		TMockLtsyData1<TUint32> data(duration);
-    		//The number of seconds that may have passed during a call is a timing measurement
-    		//and could vary if logging is enabled or the CPU is busy. Thus data is not checked.
-    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data, EFalse); 
-			}
-    	default:
-    		{
-    		ASSERT(NULL);
-    		TMockLtsyData0 data;
-		    return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
-    		}
-    	}
-
-    } // CMockCallControlMessHandler::ExtFuncL
-
-/**
- * Complete a request
- */
-void CMockCallControlMessHandler::CompleteL(TInt aIpc, const TDesC8& aData, TInt aResult)
-	{
-	switch(aIpc)
-		{
-		case KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId:
-		    {
-		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallStatus> callStatusData;
-		    callStatusData.DeserialiseL(aData);
-		    RMobileCall::TMobileCallStatus callStatus = callStatusData.Data1();
-			iCompletionCallback.CallbackCallControlNotifyCallStatusChangeInd(aResult, callStatusData.CallId(), callStatus);
-			}
-			break;
-		case KMockLtsyDispatchCallControlReceiveUuiIndId:
-		    {
-		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallUUI> uuiData;
-		    uuiData.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlReceiveUuiInd(aResult, uuiData.CallId(), uuiData.Data1());
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyDataCallCapsChangeIndId:
-		    {
-		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallDataCapsV1> capsData;
-		    capsData.DeserialiseL(aData);
-		    RMobileCall::TMobileCallDataCapsV1 mobileCallDataCaps = capsData.Data1();
-			iCompletionCallback.CallbackCallControlNotifyDataCallCapsChangeInd(aResult, capsData.CallId(), mobileCallDataCaps);
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyIncomingCallIndId:
-		    {
-		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallInfoV1> mockCallData1;
-		    mockCallData1.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlNotifyIncomingCallInd(aResult, mockCallData1.Data1());
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyHscsdInfoChangeIndId:
-		    {
-		    TMockLtsyCallData2Buf<RMobileCall::TMobileCallHscsdInfoV8, RMobileCall::TMobileCallDataCapsV1> infoData;
-		    infoData.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlNotifyHscsdInfoChangeInd(aResult, infoData.CallId(), infoData.Data1(), infoData.Data2());
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyCallEventIndId:
-		    {
-		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallEvent> callEventData;
-		    callEventData.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlNotifyCallEventInd(aResult, callEventData.CallId(), callEventData.Data1());
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyCallInfoChangeIndId:
-		    {
-		    TMockLtsyData1Buf<RMobileCall::TMobileCallInfoV1> data;
-			data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlNotifyCallInfoChangeInd(aResult, data.Data1());
-			}
-			break;
-		case KMockLtsyDispatchCallControlRemoteAlertingToneChangeIndId:
-		    {
-		    TMockLtsyData1Buf<RMmCustomAPI::TRemoteAlertingToneStatus> data;
-			data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlRemoteAlertingToneChangeInd(aResult, data.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> data;
-		    data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlAnswerComp(aResult, data.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> data;
-		    data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlHoldComp(aResult, data.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> data;
-		    data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlDialEmergencyComp(aResult, data.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
-		    {
-			iCompletionCallback.CallbackCallControlStopDtmfToneComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
-		    {
-			iCompletionCallback.CallbackCallControlSetActiveAlsLineComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
-		    {
-			iCompletionCallback.CallbackCallControlSendDtmfTonesCancelComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> callData;
-		    callData.DeserialiseL(aData);
-		    TInt callId = callData.Data1();
-			iCompletionCallback.CallbackCallControlHangUpComp(aResult, callId);
-			}
-			break;
-		case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> callData;
-		    callData.DeserialiseL(aData);
-		    TInt callId = callData.Data1();
-			iCompletionCallback.CallbackCallControlResumeComp(aResult, callId);
-			}
-			break;
-		case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
-		    {
-		    TMockLtsyData1Buf<TInt> callData;
-		    callData.DeserialiseL(aData);
-		    TInt callId = callData.Data1();
-			iCompletionCallback.CallbackCallControlSetDynamicHscsdParamsComp(aResult, callId);
-			}
-			break;
-		case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
-		    {
-		    TMockLtsyCallData0 data;
-   			data.DeserialiseL(aData);
-   			iCompletionCallback.CallbackCallControlDialVoiceComp(aResult, data.CallId());
-			}
-			break;
-		case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
-		    {
-			iCompletionCallback.CallbackCallControlTransferComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
-		    {
-			iCompletionCallback.CallbackCallControlSendDtmfTonesComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
-		    {
-		    TMockLtsyData1Buf<RMobilePhone::TMobilePhoneIdServiceStatus> data;
-		    data.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlGetIdentityServiceStatusComp(aResult, data.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
-		    {
-			iCompletionCallback.CallbackCallControlSwapComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
-		    {
-			iCompletionCallback.CallbackCallControlSwapComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
-			{
-			iCompletionCallback.CallbackCallControlStartDtmfToneComp(aResult);
-			break;
-			}
-		case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
-			{
-			TMockLtsyData1Buf<RMobilePhone::TMobilePhoneALSLine> alsLineData;
-			alsLineData.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlGetActiveAlsLineComp(aResult, alsLineData.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
-		    {
-		    TMockLtsyCallData0 data;
-		    data.DeserialiseL(aData);
-   			iCompletionCallback.CallbackCallControlDialDataComp(aResult, data.CallId());
-			}
-			break;
-		case KMockLtsyDispatchCallControlNotifyIccCallForwardingStatusChangeIndId:
-		    {
-		    TMockLtsyData3Buf<RMobilePhone::TMobileAddress,
-		    	RMobilePhone::TCFUIndicatorStatusFlags,
-		    	RMmCustomAPI::TMultipleSubscriberProfileID> data;
-		    data.DeserialiseL(aData);
-		    RMobilePhone::TMobileAddress addr = data.Data1();
-		    RMobilePhone::TCFUIndicatorStatusFlags flags = data.Data2();
-		    RMmCustomAPI::TMultipleSubscriberProfileID id = data.Data3();
-			iCompletionCallback.CallbackCallControlNotifyIccCallForwardingStatusChangeInd(aResult, addr, flags, id);
-			}
-			break;
-		case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
-		    {
-			TMockLtsyData1Buf<RMmCustomAPI::TAlsSupport> alsSupported;
-			alsSupported.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlGetAlsPpSupportComp(aResult, alsSupported.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
-		    {
-			TMockLtsyData1Buf<RMmCustomAPI::TGetAlsBlockStatus> alsStatus;
-			alsStatus.DeserialiseL(aData);
-			iCompletionCallback.CallbackCallControlGetAlsBlockedStatusComp(aResult, alsStatus.Data1());
-			}
-			break;
-		case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
-		    {
-   			iCompletionCallback.CallbackCallControlSetAlsBlockedComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
-		    {
-   			iCompletionCallback.CallbackCallControlTerminateErrorCallComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
-		    {
-   			iCompletionCallback.CallbackCallControlTerminateAllCallsComp(aResult);
-			}
-			break;
-		case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
-		    {
-			TMockLtsyData1Buf<RMmCustomAPI::TLifeTimeData> lifeTileData;
-			lifeTileData.DeserialiseL(aData);
-            switch(lifeTileData.Data1().iCaps)
-                {
-                case RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsLifeTime:
-                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iHours, lifeTileData.Data1().iMinutes);
-                    break;
-                case RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsManufacturerDate:
-                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iManufacturingDate);
-                    break;
-                case (RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsLifeTime | RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsManufacturerDate):
-                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iManufacturingDate, lifeTileData.Data1().iHours, lifeTileData.Data1().iMinutes);
-                    break;
-                case 0:
-                default:
-                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult);
-                    break;
-                };
-			}
-			break;
-		case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
-		    {
-			TMockLtsyData1Buf<RMobilePhone::TMobilePhoneCFUIndicatorV6> indicatorData;
-			indicatorData.DeserialiseL(aData);
-            iCompletionCallback.CallbackCallControlGetCallForwardingIndicatorComp(aResult,
-                                                                                  indicatorData.Data1().iCFNumber.iTypeOfNumber,
-                                                                                  indicatorData.Data1().iCFNumber.iNumberPlan,
-                                                                                  indicatorData.Data1().iCFNumber.iTelNumber,
-                                                                                  indicatorData.Data1().iIndicator,
-                                                                                  indicatorData.Data1().iMultipleSubscriberProfileID);
-			}
-			break;
-		case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
-			{
-			iCompletionCallback.CallbackCallControlUpdateLifeTimerComp(aResult);
-			}
-			break;
-		default:
-			{
-			// Shouldn't get here. will panic MessageManager()->Complete if allowed to continue
-			ASSERT(NULL);
-			}
-			break;
-		}
-	} // CMockCallControlMessHandler::CompleteL
+// Copyright (c) 2008-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/ltsy/mltsydispatchcallcontrolinterface.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+#include <mmlist.h>
+#include <etelmm.h>
+
+#include "mmockmesshandlerbase.h"
+#include "cmockcallcontrolmesshandler.h"
+#include "cmockltsyengine.h"
+#include <test/tmockltsydata.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+#include "mockltsyindicatorids.h"
+
+// Example emergency numbers, used here for testing purposes only.
+_LIT(KEmergencyNumber999, "999");
+_LIT(KEmergencyNumber112, "112");
+
+/**
+ * Factory function
+ */
+CMockCallControlMessHandler* CMockCallControlMessHandler::NewL(CMockLtsyEngine& aEngine, CCtsyDispatcherCallback& aCallback )
+    {
+    CMockCallControlMessHandler* self = new (ELeave)CMockCallControlMessHandler(aEngine, aCallback);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+/**
+ * Constructor
+ */
+CMockCallControlMessHandler::CMockCallControlMessHandler(CMockLtsyEngine& aEngine, CCtsyDispatcherCallback& aCallback)
+ : iMockLtsyEngine(aEngine), iCompletionCallback(aCallback)
+    {
+    }
+
+/**
+ * 2nd phase contructor
+ */
+void CMockCallControlMessHandler::ConstructL()
+    {
+    }
+
+/**
+ * Destructor
+ */
+CMockCallControlMessHandler::~CMockCallControlMessHandler()
+    {
+
+    }
+
+TBool CMockCallControlMessHandler::IsHandlerForApi(TInt aApiId)
+	{
+	switch (aApiId)
+		{
+		case KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId:
+		case KMockLtsyDispatchCallControlReceiveUuiIndId:
+		case KMockLtsyDispatchCallControlNotifyDataCallCapsChangeIndId:
+		case KMockLtsyDispatchCallControlNotifyIncomingCallIndId:
+		case KMockLtsyDispatchCallControlNotifyHscsdInfoChangeIndId:
+		case KMockLtsyDispatchCallControlNotifyCallEventIndId:
+		case KMockLtsyDispatchCallControlNotifyCallInfoChangeIndId:
+		case KMockLtsyDispatchCallControlRemoteAlertingToneChangeIndId:
+		case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
+		case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
+		case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
+		case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
+		case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
+		case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
+		case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
+		case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
+		case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
+		case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
+		case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
+		case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
+		case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
+		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
+		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
+		case MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId:
+		case MLtsyDispatchCallControlRecoverDataPort::KLtsyDispatchCallControlRecoverDataPortApiId:
+		case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
+		case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
+		case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
+		case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId:
+		case KMockLtsyDispatchCallControlNotifyIccCallForwardingStatusChangeIndId:
+		case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
+		case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
+		case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
+		case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
+		case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
+		case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
+		case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
+		case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
+			return iConfig.IsSupported(aApiId);
+		default:
+			return EFalse;
+		}
+	} // CMockCallControlMessHandler::IsHandlerForApi
+
+/**
+ * Execute a request.
+ */
+TInt CMockCallControlMessHandler::ExtFuncL(TInt aInterfaceId, VA_LIST& aList)
+    {
+    switch (aInterfaceId)
+    	{
+    	case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TBool isIsvCall = VA_ARG(aList, TBool);
+    		TMockLtsyData2<TInt, TInt> data(callId, isIsvCall);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
+    		{
+    		RMobileENStore::TEmergencyNumber& number = *VA_ARG(aList, RMobileENStore::TEmergencyNumber*);
+    		TMockLtsyData1<RMobileENStore::TEmergencyNumber> data(number);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
+    		{
+    		RMobilePhone::TMobilePhoneALSLine& alsLine = *VA_ARG(aList, RMobilePhone::TMobilePhoneALSLine*);
+    		TMockLtsyData1<RMobilePhone::TMobilePhoneALSLine> data(alsLine);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TInt hangUpCause = VA_ARG(aList, TInt);
+    		TMockLtsyData2<TInt, TInt> data(callId, hangUpCause);
+  			return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		RMobileCall::TMobileHscsdCallParamsV8& hscsdParams = *VA_ARG(aList, RMobileCall::TMobileHscsdCallParamsV8*);
+    		TMockLtsyData2<TInt, RMobileCall::TMobileHscsdCallParamsV8> data(callId, hscsdParams);
+  			return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
+    		{
+			RMobilePhone::TMobilePhoneALSLine& line = *VA_ARG(aList, RMobilePhone::TMobilePhoneALSLine*);
+    		RMobilePhone::TMobileAddress& dialledParty = *VA_ARG(aList, RMobilePhone::TMobileAddress*);
+    		RMobileCall::TMobileCallParamsV1& callParams = *VA_ARG(aList, RMobileCall::TMobileCallParamsV1*);
+    		TBool isIsvCall = VA_ARG(aList, TBool);
+    		RMobileCall::TCallParamOrigin& callOrigin = *VA_ARG(aList, RMobileCall::TCallParamOrigin*);
+    		TBool performFdnCheck = VA_ARG(aList, TBool);
+
+    		TMockLtsyData6<RMobilePhone::TMobilePhoneALSLine, RMobilePhone::TMobileAddress,
+    			RMobileCall::TMobileCallParamsV1, TBool, RMobileCall::TCallParamOrigin, TBool>
+    			data(line, dialledParty, callParams, isIsvCall, callOrigin, performFdnCheck);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TInt callId2 = VA_ARG(aList, TInt);
+    		TMockLtsyData2<TInt, TInt> data(callId, callId2);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		const TDesC& tones = *(VA_ARG(aList, const TDesC*));
+    		TInfoName tonesBuf;
+    		tonesBuf.Copy(tones.Left(KMaxInfoName));
+    		TMockLtsyData2<TInt, TInfoName> data(callId, tonesBuf);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
+    		{
+    		RMobilePhone::TMobilePhoneIdService& service = *VA_ARG(aList, RMobilePhone::TMobilePhoneIdService*);
+    		TMockLtsyData1<RMobilePhone::TMobilePhoneIdService> data(service);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
+    		{
+    		TInt heldCallId = VA_ARG(aList, TInt);
+    		TInt connectedCallId = VA_ARG(aList, TInt);
+    		TMockLtsyData2<TInt, TInt> data(heldCallId, connectedCallId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+		    RCall::TCommPort& commPort = *VA_ARG(aList, RCall::TCommPort*);
+		    _LIT(KDataPort, "DATAPORT::0");
+		    commPort.iPort = KDataPort;
+		    //sync call but data can still be checked.
+    		TMockLtsyData2<TInt, RCall::TCommPort> data(callId, commPort);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlRecoverDataPort::KLtsyDispatchCallControlRecoverDataPortApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		RCall::TCommPort& commPort = *VA_ARG(aList, RCall::TCommPort*);
+		    //sync call but data can still be checked.
+    		TMockLtsyData2<TInt, RCall::TCommPort> data(callId, commPort);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
+    		{
+    		TInt callId = VA_ARG(aList, TInt);
+    		TChar& tone = *(VA_ARG(aList, TChar*));
+    		TMockLtsyData2<TInt, TChar> data(callId, tone);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
+    		{
+		    TMockLtsyData0 data;
+		    return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
+    		{
+    		RMobilePhone::TMobileAddress& dialledParty = *VA_ARG(aList, RMobilePhone::TMobileAddress*);
+    		RMobileCall::TMobileDataCallParamsV1& callParams = *VA_ARG(aList, RMobileCall::TMobileDataCallParamsV1*);
+    		TBool performFdnCheck = VA_ARG(aList, TBool);
+    		TMockLtsyData3<RMobilePhone::TMobileAddress, RMobileCall::TMobileDataCallParamsV1, TBool>
+    			    	data(dialledParty, callParams, performFdnCheck);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlQueryIsEmergencyNumber::KLtsyDispatchCallControlQueryIsEmergencyNumberApiId:
+    		{
+    		TDesC* emergencyNumber = VA_ARG(aList, TDesC*);
+    		TBool& isEmergencyNumber = *VA_ARG(aList, TBool*);
+    		if (*emergencyNumber == KEmergencyNumber999 || *emergencyNumber == KEmergencyNumber112)
+    			{
+    			isEmergencyNumber = ETrue;
+    			}
+    		else
+    			{
+    			isEmergencyNumber = EFalse;
+    			}
+    		//sync call but data can still be checked.
+    		TMockLtsyData2<TDesC*, TBool> data(emergencyNumber, isEmergencyNumber);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
+    	case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
+    	case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
+        case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
+    	case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
+    		{
+    		TMockLtsyData0 data;
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
+    		{
+    		RMmCustomAPI::TSetAlsBlock blocked = VA_ARG_ENUM(aList, RMmCustomAPI::TSetAlsBlock);
+    		TMockLtsyData1<RMmCustomAPI::TSetAlsBlock> data(blocked);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
+    		{
+     		TInt callId = VA_ARG(aList, TInt);
+    		TMockLtsyData1<TInt> data(callId);
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
+    		{
+    		TUint32 duration =VA_ARG(aList, TUint32);
+    		TMockLtsyData1<TUint32> data(duration);
+    		//The number of seconds that may have passed during a call is a timing measurement
+    		//and could vary if logging is enabled or the CPU is busy. Thus data is not checked.
+    		return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data, EFalse); 
+			}
+    	default:
+    		{
+    		ASSERT(NULL);
+    		TMockLtsyData0 data;
+		    return iMockLtsyEngine.ExecuteCommandL(aInterfaceId, data);
+    		}
+    	}
+
+    } // CMockCallControlMessHandler::ExtFuncL
+
+/**
+ * Complete a request
+ */
+void CMockCallControlMessHandler::CompleteL(TInt aIpc, const TDesC8& aData, TInt aResult)
+	{
+	switch(aIpc)
+		{
+		case KMockLtsyDispatchCallControlNotifyCallStatusChangeIndId:
+		    {
+		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallStatus> callStatusData;
+		    callStatusData.DeserialiseL(aData);
+		    RMobileCall::TMobileCallStatus callStatus = callStatusData.Data1();
+			iCompletionCallback.CallbackCallControlNotifyCallStatusChangeInd(aResult, callStatusData.CallId(), callStatus);
+			}
+			break;
+		case KMockLtsyDispatchCallControlReceiveUuiIndId:
+		    {
+		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallUUI> uuiData;
+		    uuiData.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlReceiveUuiInd(aResult, uuiData.CallId(), uuiData.Data1());
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyDataCallCapsChangeIndId:
+		    {
+		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallDataCapsV1> capsData;
+		    capsData.DeserialiseL(aData);
+		    RMobileCall::TMobileCallDataCapsV1 mobileCallDataCaps = capsData.Data1();
+			iCompletionCallback.CallbackCallControlNotifyDataCallCapsChangeInd(aResult, capsData.CallId(), mobileCallDataCaps);
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyIncomingCallIndId:
+		    {
+		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallInfoV1> mockCallData1;
+		    mockCallData1.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlNotifyIncomingCallInd(aResult, mockCallData1.Data1());
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyHscsdInfoChangeIndId:
+		    {
+		    TMockLtsyCallData2Buf<RMobileCall::TMobileCallHscsdInfoV8, RMobileCall::TMobileCallDataCapsV1> infoData;
+		    infoData.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlNotifyHscsdInfoChangeInd(aResult, infoData.CallId(), infoData.Data1(), infoData.Data2());
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyCallEventIndId:
+		    {
+		    TMockLtsyCallData1Buf<RMobileCall::TMobileCallEvent> callEventData;
+		    callEventData.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlNotifyCallEventInd(aResult, callEventData.CallId(), callEventData.Data1());
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyCallInfoChangeIndId:
+		    {
+		    TMockLtsyData1Buf<RMobileCall::TMobileCallInfoV1> data;
+			data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlNotifyCallInfoChangeInd(aResult, data.Data1());
+			}
+			break;
+		case KMockLtsyDispatchCallControlRemoteAlertingToneChangeIndId:
+		    {
+		    TMockLtsyData1Buf<RMmCustomAPI::TRemoteAlertingToneStatus> data;
+			data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlRemoteAlertingToneChangeInd(aResult, data.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlAnswer::KLtsyDispatchCallControlAnswerApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> data;
+		    data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlAnswerComp(aResult, data.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlHold::KLtsyDispatchCallControlHoldApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> data;
+		    data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlHoldComp(aResult, data.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlDialEmergency::KLtsyDispatchCallControlDialEmergencyApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> data;
+		    data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlDialEmergencyComp(aResult, data.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlStopDtmfTone::KLtsyDispatchCallControlStopDtmfToneApiId:
+		    {
+			iCompletionCallback.CallbackCallControlStopDtmfToneComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlSetActiveAlsLine::KLtsyDispatchCallControlSetActiveAlsLineApiId:
+		    {
+			iCompletionCallback.CallbackCallControlSetActiveAlsLineComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlSendDtmfTonesCancel::KLtsyDispatchCallControlSendDtmfTonesCancelApiId:
+		    {
+			iCompletionCallback.CallbackCallControlSendDtmfTonesCancelComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlHangUp::KLtsyDispatchCallControlHangUpApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> callData;
+		    callData.DeserialiseL(aData);
+		    TInt callId = callData.Data1();
+			iCompletionCallback.CallbackCallControlHangUpComp(aResult, callId);
+			}
+			break;
+		case MLtsyDispatchCallControlResume::KLtsyDispatchCallControlResumeApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> callData;
+		    callData.DeserialiseL(aData);
+		    TInt callId = callData.Data1();
+			iCompletionCallback.CallbackCallControlResumeComp(aResult, callId);
+			}
+			break;
+		case MLtsyDispatchCallControlSetDynamicHscsdParams::KLtsyDispatchCallControlSetDynamicHscsdParamsApiId:
+		    {
+		    TMockLtsyData1Buf<TInt> callData;
+		    callData.DeserialiseL(aData);
+		    TInt callId = callData.Data1();
+			iCompletionCallback.CallbackCallControlSetDynamicHscsdParamsComp(aResult, callId);
+			}
+			break;
+		case MLtsyDispatchCallControlDialVoice::KLtsyDispatchCallControlDialVoiceApiId:
+		    {
+		    TMockLtsyCallData0 data;
+   			data.DeserialiseL(aData);
+   			iCompletionCallback.CallbackCallControlDialVoiceComp(aResult, data.CallId());
+			}
+			break;
+		case MLtsyDispatchCallControlTransfer::KLtsyDispatchCallControlTransferApiId:
+		    {
+			iCompletionCallback.CallbackCallControlTransferComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlSendDtmfTones::KLtsyDispatchCallControlSendDtmfTonesApiId:
+		    {
+			iCompletionCallback.CallbackCallControlSendDtmfTonesComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlGetIdentityServiceStatus::KLtsyDispatchCallControlGetIdentityServiceStatusApiId:
+		    {
+		    TMockLtsyData1Buf<RMobilePhone::TMobilePhoneIdServiceStatus> data;
+		    data.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlGetIdentityServiceStatusComp(aResult, data.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSwapApiId:
+		    {
+			iCompletionCallback.CallbackCallControlSwapComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId:
+		    {
+			iCompletionCallback.CallbackCallControlSwapComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlStartDtmfTone::KLtsyDispatchCallControlStartDtmfToneApiId:
+			{
+			iCompletionCallback.CallbackCallControlStartDtmfToneComp(aResult);
+			break;
+			}
+		case MLtsyDispatchCallControlGetActiveAlsLine::KLtsyDispatchCallControlGetActiveAlsLineApiId:
+			{
+			TMockLtsyData1Buf<RMobilePhone::TMobilePhoneALSLine> alsLineData;
+			alsLineData.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlGetActiveAlsLineComp(aResult, alsLineData.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlDialData::KLtsyDispatchCallControlDialDataApiId:
+		    {
+		    TMockLtsyCallData0 data;
+		    data.DeserialiseL(aData);
+   			iCompletionCallback.CallbackCallControlDialDataComp(aResult, data.CallId());
+			}
+			break;
+		case KMockLtsyDispatchCallControlNotifyIccCallForwardingStatusChangeIndId:
+		    {
+		    TMockLtsyData3Buf<RMobilePhone::TMobileAddress,
+		    	RMobilePhone::TCFUIndicatorStatusFlags,
+		    	RMmCustomAPI::TMultipleSubscriberProfileID> data;
+		    data.DeserialiseL(aData);
+		    RMobilePhone::TMobileAddress addr = data.Data1();
+		    RMobilePhone::TCFUIndicatorStatusFlags flags = data.Data2();
+		    RMmCustomAPI::TMultipleSubscriberProfileID id = data.Data3();
+			iCompletionCallback.CallbackCallControlNotifyIccCallForwardingStatusChangeInd(aResult, addr, flags, id);
+			}
+			break;
+		case MLtsyDispatchCallControlGetAlsPpSupport::KLtsyDispatchCallControlGetAlsPpSupportApiId:
+		    {
+			TMockLtsyData1Buf<RMmCustomAPI::TAlsSupport> alsSupported;
+			alsSupported.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlGetAlsPpSupportComp(aResult, alsSupported.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlGetAlsBlockedStatus::KLtsyDispatchCallControlGetAlsBlockedStatusApiId:
+		    {
+			TMockLtsyData1Buf<RMmCustomAPI::TGetAlsBlockStatus> alsStatus;
+			alsStatus.DeserialiseL(aData);
+			iCompletionCallback.CallbackCallControlGetAlsBlockedStatusComp(aResult, alsStatus.Data1());
+			}
+			break;
+		case MLtsyDispatchCallControlSetAlsBlocked::KLtsyDispatchCallControlSetAlsBlockedApiId:
+		    {
+   			iCompletionCallback.CallbackCallControlSetAlsBlockedComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlTerminateErrorCall::KLtsyDispatchCallControlTerminateErrorCallApiId:
+		    {
+   			iCompletionCallback.CallbackCallControlTerminateErrorCallComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlTerminateAllCalls::KLtsyDispatchCallControlTerminateAllCallsApiId:
+		    {
+   			iCompletionCallback.CallbackCallControlTerminateAllCallsComp(aResult);
+			}
+			break;
+		case MLtsyDispatchCallControlGetLifeTime::KLtsyDispatchCallControlGetLifeTimeApiId:
+		    {
+			TMockLtsyData1Buf<RMmCustomAPI::TLifeTimeData> lifeTileData;
+			lifeTileData.DeserialiseL(aData);
+            switch(lifeTileData.Data1().iCaps)
+                {
+                case RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsLifeTime:
+                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iHours, lifeTileData.Data1().iMinutes);
+                    break;
+                case RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsManufacturerDate:
+                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iManufacturingDate);
+                    break;
+                case (RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsLifeTime | RMmCustomAPI::TLifeTimeData::ELifeTimeDataCapsManufacturerDate):
+                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult, lifeTileData.Data1().iManufacturingDate, lifeTileData.Data1().iHours, lifeTileData.Data1().iMinutes);
+                    break;
+                case 0:
+                default:
+                    iCompletionCallback.CallbackCallControlGetLifeTimeComp(aResult);
+                    break;
+                };
+			}
+			break;
+		case MLtsyDispatchCallControlGetCallForwardingIndicator::KLtsyDispatchCallControlGetCallForwardingIndicatorApiId:
+		    {
+			TMockLtsyData1Buf<RMobilePhone::TMobilePhoneCFUIndicatorV6> indicatorData;
+			indicatorData.DeserialiseL(aData);
+            iCompletionCallback.CallbackCallControlGetCallForwardingIndicatorComp(aResult,
+                                                                                  indicatorData.Data1().iCFNumber.iTypeOfNumber,
+                                                                                  indicatorData.Data1().iCFNumber.iNumberPlan,
+                                                                                  indicatorData.Data1().iCFNumber.iTelNumber,
+                                                                                  indicatorData.Data1().iIndicator,
+                                                                                  indicatorData.Data1().iMultipleSubscriberProfileID);
+			}
+			break;
+		case MLtsyDispatchCallControlUpdateLifeTimer::KLtsyDispatchCallControlUpdateLifeTimerApiId:
+			{
+			iCompletionCallback.CallbackCallControlUpdateLifeTimerComp(aResult);
+			}
+			break;
+		default:
+			{
+			// Shouldn't get here. will panic MessageManager()->Complete if allowed to continue
+			ASSERT(NULL);
+			}
+			break;
+		}
+	} // CMockCallControlMessHandler::CompleteL