diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserver/etelmultimode/DTsy/mmtsycall.cpp --- a/telephonyserver/etelmultimode/DTsy/mmtsycall.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserver/etelmultimode/DTsy/mmtsycall.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,1857 +1,1857 @@ -// 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 -#include "Dmmlog.h" - -//#define ASYNC_TIMEOUT 300000 // 0.3s - -// -// CCallDMmTsy -// -CCallDMmTsy* CCallDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) - { - CCallDMmTsy* call=new(ELeave) CCallDMmTsy(aPhone,aFac); - CleanupStack::PushL(call); - call->ConstructL(); - CleanupStack::Pop(); - return call; - } - -CCallDMmTsy::CCallDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) - :CCallDummyBase(aFac), iPhone(aPhone) - {} - -void CCallDMmTsy::ConstructL() - { - CCallDummyBase::ConstructL(); - LOGTEXT(_L8("CCallDMmTsy created")); - } - -CCallDMmTsy::~CCallDMmTsy() - { - LOGTEXT(_L8("CCallDMmTsy destroyed")); - } - -CTelObject* CCallDMmTsy::OpenNewObjectByNameL(const TDesC& aName) - { - // only fax objects can be opened from call objects - if (aName.Compare(_L("FAX"))==KErrNone) - return REINTERPRET_CAST(CTelObject*, CFaxDMmTsy::NewL(FacPtr())); - else - return NULL; - } - -CTelObject* CCallDMmTsy::OpenNewObjectL(TDes& /*aNewName*/) - { - // opening fax without a name is not supported - User::Leave(KErrNotSupported); - return NULL; - } - -CTelObject::TReqMode CCallDMmTsy::ReqModeL(const TInt aIpc) - { - // ReqModeL is called from the server's CTelObject::ReqAnalyserL - // in order to check the type of request it has - - // The following are example request types for this dummy TSY - // All TSYs do not have to have these request types but they have been given - // "sensible" values in this test code - - CTelObject::TReqMode ret=0; - switch (aIpc) - { -// -// No Flow Control NOR Multiple Completion -// - case EMobileCallGetMobileCallCaps: - case EMobileCallGetMobileCallStatus: - case EMobileCallGetMobileCallInfo: - case EMobileCallGetMobileDataCallCaps: - case EMobileCallGetMobileDataCallRLPRange: - case EMobileCallSetDynamicHscsdParams: - case EMobileCallGetCurrentHscsdInfo: - case EMobileCallSwitchAlternatingCall: - case EMobileCallDeflect: - case EMobileCallTransfer: - case EMobileCallGoOneToOne: - case EMobileCallActivateCCBS: - case EMobileCallRejectCCBS: - case EMobileCallSetPrivacy: - case EMobileCallSetTrafficChannel: - case EMobileCallNotifyTrafficChannelConfirmation: - case EMobileCallGetUUSCaps: - case EMobileCallActivateUUS: - case EMobileCallSendUUI: - case EMobileCallReceiveUUI: - case EMobileCallHangupWithUUI: - case EMobileCallAnswerWithUUI: - case EMobileCallAnswerMultimediaCallAsVoice: - case EMobileCallAnswerISV: - break; -// -// Flow Controlled Services -// - case EMobileCallHold: - case EMobileCallResume: - case EMobileCallSwap: - case EMobileCallDialEmergencyCall: - case EMobileCallDialNoFdnCheck: - case EMobileCallDialISV: - case EMobileCallDialCallControl: - ret=KReqModeFlowControlObeyed; - break; - -// -// Multiple Completion Services with Immediate Server Repost -// (Usually Notifications) -// - case EMobileCallNotifyMobileCallStatusChange: - case EMobileCallNotifyMobileCallCapsChange: - case EMobileCallNotifyCallEvent: - case EMobileCallNotifyRemotePartyInfoChange: - case EMobileCallNotifyMobileDataCallCapsChange: - case EMobileCallNotifyHscsdInfoChange: - case EMobileCallNotifyVoiceFallback: - case EMobileCallNotifyAlternatingCallSwitch: - case EMobileCallNotifyPrivacyConfirmation: - case EMobileCallNotifyUUSCapsChange: - case EMobileCallNotifyAudioToneEvent: - ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately; - break; -// -// Not Supported -// - case EMobileCallNotifyMobileCallStatusChangeCancel: - case EMobileCallHoldCancel: - case EMobileCallResumeCancel: - case EMobileCallSwapCancel: - case EMobileCallNotifyMobileCallCapsChangeCancel: - case EMobileCallNotifyCallEventCancel: - case EMobileCallDialEmergencyCallCancel: - case EMobileCallGetMobileCallInfoCancel: - case EMobileCallNotifyRemotePartyInfoChangeCancel: - case EMobileCallNotifyMobileDataCallCapsChangeCancel: - case EMobileCallGetMobileDataCallRLPRangeCancel: - case EMobileCallSetDynamicHscsdParamsCancel: - case EMobileCallSwitchAlternatingCallCancel: - case EMobileCallActivateCCBSCancel: - case EMobileCallNotifyPrivacyConfirmationCancel: - case EMobileCallNotifyTrafficChannelConfirmationCancel: - case EMobileCallNotifyVoiceFallbackCancel: - case EMobileCallNotifyUUSCapsChangeCancel: - case EMobileCallActivateUUSCancel: - case EMobileCallSendUUICancel: - case EMobileCallReceiveUUICancel: - case EMobileCallHangupWithUUICancel: - case EMobileCallAnswerWithUUICancel: - case EMobileCallDialNoFdnCheckCancel: - case EMobileCallDialCallControlCancel: - case EMobileCallAnswerMultimediaCallAsVoiceCancel: - case EMobileCallNotifyAudioToneEventCancel: - case EMobileCallDialISVCancel: - case EMobileCallAnswerISVCancel: - User::Leave(KErrNotSupported); - break; - - default: - ret=CCallBase::ReqModeL(aIpc); - break; - } - return ret; - } - - -TInt CCallDMmTsy::RegisterNotification(const TInt aIpc) - { - // RegisterNotification is called when the server recognises that this notification - // is being posted for the first time on this sub-session object. - - // It enables the TSY to "turn on" any regular notification messages that it may - // receive from the phone - - switch (aIpc) - { - case EMobileCallNotifyMobileCallStatusChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Status Change ")); - return KErrNone; - case EMobileCallNotifyMobileCallCapsChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Control Caps Change ")); - return KErrNone; - case EMobileCallNotifyCallEvent: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Event ")); - return KErrNone; - case EMobileCallNotifyRemotePartyInfoChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Remote Party Info Change ")); - return KErrNone; - case EMobileCallNotifyMobileDataCallCapsChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Data Call Caps Change ")); - return KErrNone; - case EMobileCallNotifyHscsdInfoChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Hscsd Info Change ")); - return KErrNone; - case EMobileCallNotifyVoiceFallback: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Voice Fallback ")); - return KErrNone; - case EMobileCallNotifyAlternatingCallSwitch: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Alternating Call Switch ")); - return KErrNone; - case EMobileCallNotifyPrivacyConfirmation: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Privacy Confirmation ")); - return KErrNone; - case EMobileCallNotifyTrafficChannelConfirmation: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Traffic Channel Confirmation ")); - return KErrNone; - case EMobileCallNotifyUUSCapsChange: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify UUS Caps Change ")); - return KErrNone; - case EMobileCallNotifyAudioToneEvent: - LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Audio Tone Event ")); - return KErrNone; - default: - // Unknown or invalid IPC - LOGTEXT(_L8("CCallDMmTsy: Register error, unknown IPC")); - return KErrNotSupported; - } - } - -TInt CCallDMmTsy::DeregisterNotification(const TInt aIpc) - { - // DeregisterNotification is called when the server recognises that this notification - // will not be posted again because the last client to have a handle on this sub-session - // object has just closed the handle. - - // It enables the TSY to "turn off" any regular notification messages that it may - // receive from the phone - - switch (aIpc) - { - case EMobileCallNotifyMobileCallStatusChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Status Change ")); - return KErrNone; - case EMobileCallNotifyMobileCallCapsChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Control Caps Change ")); - return KErrNone; - case EMobileCallNotifyCallEvent: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Event ")); - return KErrNone; - case EMobileCallNotifyRemotePartyInfoChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Remote Party Info Change ")); - return KErrNone; - case EMobileCallNotifyMobileDataCallCapsChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Data Call Caps Change ")); - return KErrNone; - case EMobileCallNotifyHscsdInfoChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Hscsd Info Change ")); - return KErrNone; - case EMobileCallNotifyVoiceFallback: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Voice Fallback ")); - return KErrNone; - case EMobileCallNotifyAlternatingCallSwitch: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Alternating Call Switch ")); - return KErrNone; - case EMobileCallNotifyPrivacyConfirmation: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Privacy Confirmation ")); - return KErrNone; - case EMobileCallNotifyTrafficChannelConfirmation: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Traffic Channel Confirmation ")); - return KErrNone; - case EMobileCallNotifyUUSCapsChange: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify UUS Caps Change ")); - return KErrNone; - case EMobileCallNotifyAudioToneEvent: - LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Audio Tone Event ")); - return KErrNone; - default: - // Unknown or invalid IPC - LOGTEXT(_L8("CCallDMmTsy: Deregister error, unknown IPC")); - return KErrNotSupported; - } - } - -TInt CCallDMmTsy::NumberOfSlotsL(const TInt aIpc) - { - // NumberOfSlotsL is called by the server when it is registering a new notification - // It enables the TSY to tell the server how many buffer slots to allocate for - // "repost immediately" notifications that may trigger before clients collect them - - TInt numberOfSlots=1; - switch (aIpc) - { - case EMobileCallNotifyMobileCallStatusChange: - case EMobileCallNotifyMobileCallCapsChange: - case EMobileCallNotifyCallEvent: - case EMobileCallNotifyMobileDataCallCapsChange: - case EMobileCallNotifyHscsdInfoChange: - case EMobileCallNotifyVoiceFallback: - case EMobileCallNotifyAlternatingCallSwitch: - case EMobileCallNotifyPrivacyConfirmation: - case EMobileCallNotifyTrafficChannelConfirmation: - case EMobileCallNotifyUUSCapsChange: - case EMobileCallNotifyAudioToneEvent: - LOGTEXT(_L8("CCallDMmTsy: Registered with 5 slots")); - numberOfSlots=5; - break; - case EMobileCallNotifyRemotePartyInfoChange: - - LOGTEXT(_L8("CCallDMmTsy: Registered with 1 slot")); - break; - default: - // Unknown or invalid Phone IPC - LOGTEXT(_L8("CCallDMmTsy: Number of Slots error, unknown IPC")); - User::Leave(KErrNotSupported); - break; - } - return numberOfSlots; - } - - -TInt CCallDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc, - const TDataPackage& aPackage) - { - // ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request - // for the TSY to process - // A request handle, request type and request data are passed to the TSY - - TAny* dataPtr=aPackage.Ptr1(); - TAny* dataPtr2=aPackage.Ptr2(); - - // The request data has to extracted from TDataPackage and the TAny* pointers have to - // be "cast" to the expected request data type - - switch (aIpc) - { -// -// No Flow Control NOR Multiple Completion -// - case EMobileCallGetMobileCallCaps: - return GetMobileCallCaps(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallGetMobileCallStatus: - return GetMobileCallStatus(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallStatus*,dataPtr)); - - case EMobileCallGetMobileCallInfo: - return GetMobileCallInfo(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallGetMobileDataCallCaps: - return GetMobileDataCallCaps(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallGetMobileDataCallRLPRange: - return GetMobileDataCallRLPRange(aTsyReqHandle, - REINTERPRET_CAST(TInt *, dataPtr), - aPackage.Des2n()); - - case EMobileCallSetDynamicHscsdParams: - return SetDynamicHscsdParams(aTsyReqHandle, - REINTERPRET_CAST(TInt*,dataPtr), - REINTERPRET_CAST(TInt*,dataPtr2)); - - case EMobileCallGetCurrentHscsdInfo: - return GetCurrentHscsdInfo(aTsyReqHandle,aPackage.Des1n()); - - case EMobileCallSwitchAlternatingCall: - return SwitchAlternatingCall(aTsyReqHandle); - - case EMobileCallDeflect: - return Deflect(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallDeflect*, dataPtr), - REINTERPRET_CAST(RMobilePhone::TMobileAddress*, dataPtr2)); - - case EMobileCallTransfer: - return Transfer(aTsyReqHandle); - - case EMobileCallGoOneToOne: - return GoOneToOne(aTsyReqHandle); - - case EMobileCallActivateCCBS: - return ActivateCCBS(aTsyReqHandle, - REINTERPRET_CAST(TInt*, dataPtr)); - - case EMobileCallRejectCCBS: - return RejectCCBS(aTsyReqHandle); - - case EMobileCallSetPrivacy: - return SetPrivacySetting(aTsyReqHandle, - REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr)); - - case EMobileCallNotifyPrivacyConfirmation: - return NotifyPrivacyConfirmation(aTsyReqHandle, - REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr)); - - case EMobileCallSetTrafficChannel: - return SetTrafficChannel(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallTch*, dataPtr)); - - case EMobileCallNotifyTrafficChannelConfirmation: - return NotifyTrafficChannelConfirmation(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallTch*,dataPtr)); - - case EMobileCallGetUUSCaps: - return GetUUSCaps(aTsyReqHandle, - REINTERPRET_CAST(TUint32*,dataPtr)); - - case EMobileCallActivateUUS: - return ActivateUUS(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallSendUUI: - return SendUUI(aTsyReqHandle, - REINTERPRET_CAST(TInt*,dataPtr), aPackage.Des2u()); - - case EMobileCallReceiveUUI: - return ReceiveUUI(aTsyReqHandle, aPackage.Des1u()); - - case EMobileCallHangupWithUUI: - return HangupWithUUI(aTsyReqHandle, aPackage.Des1u()); - - case EMobileCallAnswerWithUUI: - return AnswerIncomingCallWithUUI(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); - - case EMobileCallAnswerMultimediaCallAsVoice: - return AnswerMultimediaCallAsVoice(aTsyReqHandle, - aPackage.Des1n(), aPackage.Des2u()); - - case EMobileCallAnswerISV: - return AnswerIncomingCallISV(aTsyReqHandle, aPackage.Des1n()); - -// -// Flow Controlled Services -// - case EMobileCallHold: - return Hold(aTsyReqHandle); - - case EMobileCallResume: - return Resume(aTsyReqHandle); - - case EMobileCallSwap: - return Swap(aTsyReqHandle); - - case EMobileCallDialEmergencyCall: - return DialEmergencyCall(aTsyReqHandle, aPackage.Des1u()); - - case EMobileCallDialNoFdnCheck: - return DialNoFdnCheck(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); - - case EMobileCallDialISV: - return DialISV(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); - - case EMobileCallDialCallControl: - return DialCallControl(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); - -// -// Multiple Completion Services with Immediate Server Repost -// (Usually Notifications) -// - case EMobileCallNotifyMobileCallStatusChange: - return NotifyMobileCallStatusChange(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); - - case EMobileCallNotifyMobileCallCapsChange: - return NotifyMobileCallCapsChange(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallNotifyCallEvent: - return NotifyCallEvent(aTsyReqHandle, - REINTERPRET_CAST(RMobileCall::TMobileCallEvent*, dataPtr)); - - case EMobileCallNotifyRemotePartyInfoChange: - return NotifyRemotePartyInfoChange(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallNotifyMobileDataCallCapsChange: - return NotifyMobileDataCallCapsChange(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallNotifyHscsdInfoChange: - return NotifyHscsdInfoChange(aTsyReqHandle, aPackage.Des1n()); - - case EMobileCallNotifyVoiceFallback: - return NotifyVoiceFallback(aTsyReqHandle, aPackage.Des1u()); - - case EMobileCallNotifyAlternatingCallSwitch: - return NotifyAlternatingCallSwitch(aTsyReqHandle); - - case EMobileCallNotifyUUSCapsChange: - return NotifyUUSCapsChange(aTsyReqHandle, - REINTERPRET_CAST(TUint32*, dataPtr)); - - case EMobileCallNotifyAudioToneEvent: - return NotifyAudioToneEvent(aTsyReqHandle, aPackage.Des1n()); -// -// Cancels -// - case EMobileCallNotifyMobileCallStatusChangeCancel: - return NotifyMobileCallStatusChangeCancel(aTsyReqHandle); - case EMobileCallHoldCancel: - return HoldCancel(aTsyReqHandle); - case EMobileCallGetMobileCallInfoCancel: - return GetMobileCallInfoCancel(aTsyReqHandle); - case EMobileCallResumeCancel: - return ResumeCancel(aTsyReqHandle); - case EMobileCallSwapCancel: - return SwapCancel(aTsyReqHandle); - case EMobileCallNotifyMobileCallCapsChangeCancel: - return NotifyMobileCallCapsChangeCancel(aTsyReqHandle); - case EMobileCallNotifyCallEventCancel: - return NotifyCallEventCancel(aTsyReqHandle); - case EMobileCallDialEmergencyCallCancel: - return DialEmergencyCallCancel(aTsyReqHandle); - case EMobileCallNotifyRemotePartyInfoChangeCancel: - return NotifyRemotePartyInfoChangeCancel(aTsyReqHandle); - case EMobileCallNotifyVoiceFallbackCancel: - return NotifyVoiceFallbackCancel(aTsyReqHandle); - case EMobileCallNotifyUUSCapsChangeCancel: - return NotifyUUSCapsChangeCancel(aTsyReqHandle); - case EMobileCallDialNoFdnCheckCancel: - return DialNoFdnCheckCancel(aTsyReqHandle); - case EMobileCallDialCallControlCancel: - return DialCallControlCancel(aTsyReqHandle); - case EMobileCallNotifyAudioToneEventCancel: - return NotifyAudioToneEventCancel(aTsyReqHandle); - case EMobileCallDialISVCancel: - return DialISVCancel(aTsyReqHandle); - case EMobileCallAnswerISVCancel: - return AnswerIncomingCallISVCancel(aTsyReqHandle); - default: - return KErrNotSupported; - } - } - -TInt CCallDMmTsy::CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle) - { - // CancelService is called by the server when it is "cleaning-up" any still outstanding - // asynchronous requests before closing a client's sub-session. - // This will happen if a client closes its R-class handle without cancelling outstanding - // asynchronous requests. - - switch (aIpc) - { - case EMobileCallNotifyMobileCallStatusChange: - return NotifyMobileCallStatusChangeCancel(aTsyReqHandle); - case EMobileCallHold: - return HoldCancel(aTsyReqHandle); - case EMobileCallGetMobileCallInfo: - return GetMobileCallInfoCancel(aTsyReqHandle); - case EMobileCallResume: - return ResumeCancel(aTsyReqHandle); - case EMobileCallSwap: - return SwapCancel(aTsyReqHandle); - case EMobileCallNotifyMobileCallCapsChange: - return NotifyMobileCallCapsChangeCancel(aTsyReqHandle); - case EMobileCallNotifyCallEvent: - return NotifyCallEventCancel(aTsyReqHandle); - case EMobileCallDialEmergencyCall: - return DialEmergencyCallCancel(aTsyReqHandle); - case EMobileCallNotifyRemotePartyInfoChange: - return NotifyRemotePartyInfoChangeCancel(aTsyReqHandle); - case EMobileCallNotifyMobileDataCallCapsChange: - return NotifyMobileDataCallCapsChangeCancel(aTsyReqHandle); - case EMobileCallGetMobileDataCallRLPRange: - return GetMobileDataCallRLPRangeCancel(aTsyReqHandle); - case EMobileCallSetDynamicHscsdParams: - return SetDynamicHscsdParamsCancel(aTsyReqHandle); - case EMobileCallNotifyHscsdInfoChange: - return NotifyHscsdInfoChangeCancel(aTsyReqHandle); - case EMobileCallNotifyVoiceFallback: - return NotifyVoiceFallbackCancel(aTsyReqHandle); - case EMobileCallNotifyAlternatingCallSwitch: - return NotifyAlternatingCallSwitchCancel(aTsyReqHandle); - case EMobileCallDeflect: - return DeflectCancel(aTsyReqHandle); - case EMobileCallTransfer: - return TransferCancel(aTsyReqHandle); - case EMobileCallGoOneToOne: - return GoOneToOneCancel(aTsyReqHandle); - case EMobileCallSwitchAlternatingCall: - return SwitchAlternatingCallCancel(aTsyReqHandle); - case EMobileCallActivateCCBS: - return ActivateCCBSCancel(aTsyReqHandle); - case EMobileCallNotifyPrivacyConfirmation: - return NotifyPrivacyConfirmationCancel(aTsyReqHandle); - case EMobileCallNotifyTrafficChannelConfirmation: - return NotifyTrafficChannelConfirmationCancel(aTsyReqHandle); - case EMobileCallNotifyUUSCapsChange: - return NotifyUUSCapsChangeCancel(aTsyReqHandle); - case EMobileCallActivateUUS: - return ActivateUUSCancel(aTsyReqHandle); - case EMobileCallSendUUI: - return SendUUICancel(aTsyReqHandle); - case EMobileCallReceiveUUI: - return ReceiveUUICancel(aTsyReqHandle); - case EMobileCallHangupWithUUI: - return HangupWithUUICancel(aTsyReqHandle); - case EMobileCallAnswerWithUUI: - return AnswerIncomingCallWithUUICancel(aTsyReqHandle); - case EMobileCallDialNoFdnCheck: - return DialNoFdnCheckCancel(aTsyReqHandle); - case EMobileCallDialCallControl: - return DialCallControlCancel(aTsyReqHandle); - case EMobileCallAnswerMultimediaCallAsVoice: - return AnswerMultimediaCallAsVoiceCancel(aTsyReqHandle); - case EMobileCallNotifyAudioToneEvent: - return NotifyAudioToneEventCancel(aTsyReqHandle); - case EMobileCallDialISV: - return DialISVCancel(aTsyReqHandle); - case EMobileCallAnswerISV: - return AnswerIncomingCallISVCancel(aTsyReqHandle); - default: - return CCallBase::CancelService(aIpc,aTsyReqHandle); - } - } - -/***********************************************************************************/ -// -// The following methods are called from ExtFunc and/or CancelService. -// Each of these will process a TSY request or cancel a TSY request -// Here, example values are returned or checked within this dummy TSY in order to ensure -// that the integrity of the data passed to/from client is maintained -// -/***********************************************************************************/ - - -TInt CCallDMmTsy::GetMobileDataCallCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallCaps called")); - InitialiseDataCallCaps(aCaps); - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileDataCallCapsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) - { - if (!iNotifyMobileDataCallCapsChange++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyMobileDataCallCapsChange called")); - InitialiseDataCallCaps(aCaps); - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileDataCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyMobileDataCallCapsChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -void CCallDMmTsy::InitialiseDataCallCaps(TDes8* aCallCaps) - { - RMobileCall::TMobileCallDataCapsV1Pckg* callCapsV1Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallDataCapsV1Pckg*,aCallCaps); - RMobileCall::TMobileCallDataCapsV1& callCapsV1 = (*callCapsV1Pckg)(); - - callCapsV1.iSpeedCaps = DMMTSY_CALL_DATA_CAPS_SPEED; - callCapsV1.iProtocolCaps = DMMTSY_CALL_DATA_CAPS_CARRIER; - callCapsV1.iServiceCaps = DMMTSY_CALL_DATA_CAPS_SERVICE; - callCapsV1.iHscsdSupport = DMMTSY_CALL_DATA_CAPS_HSCSD; - callCapsV1.iMClass = DMMTSY_CALL_DATA_CAPS_MCLASS; - callCapsV1.iMaxRxTimeSlots = DMMTSY_CALL_DATA_CAPS_MAXRXTS; - callCapsV1.iMaxTxTimeSlots = DMMTSY_CALL_DATA_CAPS_MAXTXTS; - callCapsV1.iTotalRxTxTimeSlots = DMMTSY_CALL_DATA_CAPS_TOTRXTXTS; - callCapsV1.iCodingCaps = DMMTSY_CALL_DATA_CAPS_CODING; - callCapsV1.iAsymmetryCaps = DMMTSY_CALL_DATA_CAPS_ASYMETRY; - callCapsV1.iUserInitUpgrade = DMMTSY_CALL_DATA_CAPS_USERIMI; - } - -TInt CCallDMmTsy::GetMobileDataCallRLPRange(const TTsyReqHandle aTsyReqHandle, TInt* aRLPVersion, TDes8* aRLPRange) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallRLPRange called")); - - RMobileCall::TMobileDataRLPRangesV1Pckg* rlpRangeV1Pckg = REINTERPRET_CAST(RMobileCall::TMobileDataRLPRangesV1Pckg*, aRLPRange); - RMobileCall::TMobileDataRLPRangesV1& rlpRangeV1 = (*rlpRangeV1Pckg)(); - - if(*aRLPVersion == DMMTSY_CALL_RLP_VERSION1) - { - rlpRangeV1.iIWSMax = DMMTSY_CALL_DATA_RLP_WSMAX; - rlpRangeV1.iIWSMin = DMMTSY_CALL_DATA_RLP_WSMIN; - rlpRangeV1.iMWSMax = DMMTSY_CALL_DATA_RLP_MWSMAX; - rlpRangeV1.iMWSMin = DMMTSY_CALL_DATA_RLP_MWSMIN; - rlpRangeV1.iN2Max = DMMTSY_CALL_DATA_RLP_N2MAX; - rlpRangeV1.iN2Min = DMMTSY_CALL_DATA_RLP_N2MIN; - rlpRangeV1.iT1Max = DMMTSY_CALL_DATA_RLP_T1MAX; - rlpRangeV1.iT1Min = DMMTSY_CALL_DATA_RLP_T1MIN; - rlpRangeV1.iT4Max = DMMTSY_CALL_DATA_RLP_T4MAX; - rlpRangeV1.iT4Min = DMMTSY_CALL_DATA_RLP_T4MIN; - - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::GetMobileDataCallRLPRangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallRLPRangeCancel called")); - - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::SetDynamicHscsdParams(const TTsyReqHandle aTsyReqHandle, TInt* aAiur, TInt* aRxTimeslots) - { - LOGTEXT(_L8("CCallDMmTsy::SetHscsdParams called")); - - if ((*aAiur != DMMTSY_CALL_HCSD_AIUR) || - (*aRxTimeslots != DMMTSY_CALL_HCSD_TS)) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::SetDynamicHscsdParamsCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::SetHscsdParamsCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::GetCurrentHscsdInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aHSCSDInfo) - { - RMobileCall::TMobileCallHscsdInfoV1Pckg* HSCSDInfoPckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV1Pckg*,aHSCSDInfo); - RMobileCall::TMobileCallHscsdInfoV1& hscsdInfo = (*HSCSDInfoPckg)(); - LOGTEXT(_L8("CCallDMmTsy::GetCurrentHscsdInfo called")); - InitialiseHscsdInfo(hscsdInfo); - - if ((hscsdInfo.ExtensionId() == KEtelExtMultimodeV7) || - (hscsdInfo.ExtensionId() == KEtelExtMultimodeV8)) - { - RMobileCall::TMobileCallHscsdInfoV7Pckg* HSCSDInfoV7Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV7Pckg*,aHSCSDInfo); - RMobileCall::TMobileCallHscsdInfoV7& hscsdInfoV7 = (*HSCSDInfoV7Pckg)(); - - hscsdInfoV7.iCallParamOrigin = DMMTSY_CALL_PARAM_ORIGIN; - hscsdInfoV7.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; - hscsdInfoV7.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; - hscsdInfoV7.iAlphaId = DMMTSY_CALL_ALPHA_ID; - hscsdInfoV7.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; - } - if (hscsdInfo.ExtensionId() == KEtelExtMultimodeV8) - { - RMobileCall::TMobileCallHscsdInfoV8Pckg* HSCSDInfoV8Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV8Pckg*,aHSCSDInfo); - RMobileCall::TMobileCallHscsdInfoV8& hscsdInfoV8 = (*HSCSDInfoV8Pckg)(); - - hscsdInfoV8.iSubAddress = DMMTSY_CALL_SUBADDRESS; - hscsdInfoV8.iBearerCap1 = DMMTSY_CALL_BEARER_CAP1; - hscsdInfoV8.iBearerCap2 = DMMTSY_CALL_BEARER_CAP2; - hscsdInfoV8.iBCRepeatIndicator = DMMTSY_CALL_BC_REPEAT_INDICATOR; - } - - - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyHscsdInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aHSCSDInfo) - { - if (!iNotifyHscsdInfoChange++) - { - RMobileCall::TMobileCallHscsdInfoV1Pckg* HSCSDInfoPckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV1Pckg*,aHSCSDInfo); - RMobileCall::TMobileCallHscsdInfoV1& HSCSDInfo = (*HSCSDInfoPckg)(); - - LOGTEXT(_L8("CCallDMmTsy::NotifyHscsdInfoChange called")); - InitialiseHscsdInfo(HSCSDInfo); - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyHscsdInfoChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyHscsdInfoChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -void CCallDMmTsy::InitialiseHscsdInfo(RMobileCall::TMobileCallHscsdInfoV1& aHSCSDInfo) - { - aHSCSDInfo.iAiur = DMMTSY_CALL_HCSD_AIUR; - aHSCSDInfo.iRxTimeSlots = DMMTSY_CALL_HCSD_TS; - aHSCSDInfo.iTxTimeSlots = DMMTSY_CALL_HCSD_TS; - aHSCSDInfo.iCodings = DMMTSY_CALL_HCSD_CODING; - } - -TInt CCallDMmTsy::NotifyVoiceFallback(const TTsyReqHandle aTsyReqHandle, TDes* aCallName) - { - if (!iNotifyVoiceFallback++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyVoiceFallback Called")); - *aCallName = DMMTSY_VOICE_FALLBACK_CALL_NAME; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyVoiceFallbackCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyVoiceFallbackCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::SwitchAlternatingCall(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::SwitchAlternatingCall called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::SwitchAlternatingCallCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::SwitchAlternatingCallCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyAlternatingCallSwitch(const TTsyReqHandle aTsyReqHandle) - { - if (!iNotifyAlternatingCallSwitch++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyAlternatingCallSwitch called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyAlternatingCallSwitchCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyAlternatingCallSwitchCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - - - -TInt CCallDMmTsy::GetMobileCallCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileCallCaps called")); - RMobileCall::TMobileCallCapsV1Pckg *capsPckg = REINTERPRET_CAST(RMobileCall::TMobileCallCapsV1Pckg *,aCaps); - RMobileCall::TMobileCallCapsV1& caps = (*capsPckg)(); - caps.iCallControlCaps=DMMTSY_CALL_CONTROL_CAPS1; - caps.iCallEventCaps=DMMTSY_CALL_EVENT_CAPS1; - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileCallCapsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) - { - if(!iNotifyMobileCallCapsChange++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallCapsChange called")); - RMobileCall::TMobileCallCapsV1Pckg *capsPckg = REINTERPRET_CAST(RMobileCall::TMobileCallCapsV1Pckg *,aCaps); - RMobileCall::TMobileCallCapsV1& caps = (*capsPckg)(); - caps.iCallControlCaps=DMMTSY_CALL_CONTROL_CAPS2; - caps.iCallEventCaps=DMMTSY_CALL_EVENT_CAPS2; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallCapsChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::GetMobileCallStatus(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileCallStatus called")); - *aStatus=DMMTSY_CALL_STATUS1; - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileCallStatusChange(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) - { - if (iNotifyMobileCallStatusChangeAddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyMobileCallStatusChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallStatusChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::Hold(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Hold called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::HoldCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::HoldCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::Resume(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Resume called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::ResumeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::ResumeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::Swap(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Swap called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::SwapCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::SwapCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::Deflect(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallDeflect* aDeflectType, RMobilePhone::TMobileAddress* aDestination) - { - LOGTEXT(_L8("CCallDMmTsy::Deflect called")); - - if ((*aDeflectType != DMMTSY_CALL_DEFLECT_TYPE) || - (aDestination->iNumberPlan != DMMTSY_PHONE_NPI) || - (aDestination->iTypeOfNumber != DMMTSY_PHONE_TON) || - (aDestination->iTelNumber.Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::DeflectCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::DeflectCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::Transfer(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Transfer called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::TransferCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::TransferCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::GoOneToOne(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::GoOneToOne called")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::GoOneToOneCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::GoOneToOneCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyCallEvent(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallEvent* aEvent) - { - if(!iNotifyCallEvent++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyCallEvent called")); - *aEvent=DMMTSY_CALL_EVENT1; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyCallEventCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyCallEventCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::SetPrivacySetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aPrivacySetting) - { - LOGTEXT(_L8("CCallDMmTsy::Set Privacy called")); - if (*aPrivacySetting != DMMTSY_CALL_SET_PRIVACY) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyPrivacyConfirmation(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aPrivacySetting) - { - if(!iNotifyPrivacyConfirmation++) - { - LOGTEXT(_L8("CCallDMmTsy::Notify Privacy Confirmation Change")); - *aPrivacySetting = DMMTSY_CALL_SET_PRIVACY; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyPrivacyConfirmationCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Notify Privacy Confirmation Cancel")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::SetTrafficChannel(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallTch* aTchRequest) - { - LOGTEXT(_L8("CCallDMmTsy::Set Traffic Channel called")); - if (*aTchRequest != DMMTSY_CALL_TCH_REQUEST) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyTrafficChannelConfirmation(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallTch* aTchType) - { - if (!iNotifyTrafficChannelConfirmation++) - { - LOGTEXT(_L8("CCallDMmTsy::Notify Traffic Channel Confirmation")); - *aTchType = DMMTSY_CALL_TCH_SETTING; - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyTrafficChannelConfirmationCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::Notify Traffic Channel Confirmation Cancel")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::GetMobileCallInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileCallInfo called")); - RMobileCall::TMobileCallInfoV1Pckg* infoV1Pckg = (RMobileCall::TMobileCallInfoV1Pckg*)aInfo; - RMobileCall::TMobileCallInfoV1& infoV1 = (*infoV1Pckg)(); - - infoV1.iCallName=DMMTSY_CALL_NAME1; - infoV1.iLineName=DMMTSY_LINE_VOICE_NAME; - infoV1.iStatus=DMMTSY_CALL_STATUS4; - infoV1.iDuration=DMMTSY_CALL_DURATION1; - infoV1.iCallId=DMMTSY_CALL_ID1; - infoV1.iRemoteParty.iRemoteIdStatus=DMMTSY_CALL_REMOTEPARTYSTATUS1; - infoV1.iRemoteParty.iRemoteNumber.iTelNumber=DMMTSY_CALL_REMOTEPARTYNUMBER1; - infoV1.iRemoteParty.iDirection=DMMTSY_CALL_REMOTEPARTYDIRECTION1; - infoV1.iRemoteParty.iCallingName=DMMTSY_CALL_REMOTEPARTYNAME; - infoV1.iExitCode=DMMTSY_CALL_EXIT_CODE; - infoV1.iEmergency=DMMTSY_CALL_EMERGENCY_FLAG; - infoV1.iForwarded=DMMTSY_CALL_FORWARDED_FLAG; - infoV1.iService = DMMTSY_CALL_SERVICE; - infoV1.iValid = DMMTSY_CALL_VALID_FLAG; - infoV1.iPrivacy = DMMTSY_CALL_PRIVACY; - infoV1.iTch = DMMTSY_CALL_CHANNEL; - infoV1.iAlternatingCall = DMMTSY_CALL_ALTERNATING; - infoV1.iStartTime.Set(DMMTSY_PHONE_NWTINFO_YEAR,DMMTSY_PHONE_NWTINFO_MONTH,DMMTSY_PHONE_NWTINFO_DAY, - DMMTSY_PHONE_NWTINFO_HOUR, DMMTSY_PHONE_NWTINFO_MINUTE, DMMTSY_PHONE_NWTINFO_SECOND, - DMMTSY_PHONE_NWTINFO_MICRO); - - if (infoV1.ExtensionId() == KETelExtMultimodeV3 || - (infoV1.ExtensionId() == KETelExtMultimodeV4)) - { - RMobileCall::TMobileCallInfoV3Pckg* infoV3Pckg = (RMobileCall::TMobileCallInfoV3Pckg*)aInfo; - RMobileCall::TMobileCallInfoV3& infoV3 = (*infoV3Pckg)(); - infoV3.iSecurity = DMMTSY_CALL_SECURITY; - } - - if (infoV1.ExtensionId() == KEtelExtMultimodeV7) - { - RMobileCall::TMobileCallInfoV7Pckg* infoV7Pckg = (RMobileCall::TMobileCallInfoV7Pckg*)aInfo; - RMobileCall::TMobileCallInfoV7& infoV7 = (*infoV7Pckg)(); - infoV7.iSecurity = DMMTSY_CALL_SECURITY; - infoV7.iCallParamOrigin = DMMTSY_CALL_ORIGIN; - infoV7.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; - infoV7.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; - infoV7.iAlphaId = DMMTSY_CALL_ALPHA_ID; - infoV7.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; - } - if (infoV1.ExtensionId() == KEtelExtMultimodeV8) - { - RMobileCall::TMobileCallInfoV8Pckg* infoV8Pckg = (RMobileCall::TMobileCallInfoV8Pckg*)aInfo; - RMobileCall::TMobileCallInfoV8& infoV8 = (*infoV8Pckg)(); - infoV8.iSecurity = DMMTSY_CALL_SECURITY; - infoV8.iCallParamOrigin = DMMTSY_CALL_ORIGIN; - infoV8.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; - infoV8.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; - infoV8.iAlphaId = DMMTSY_CALL_ALPHA_ID; - infoV8.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; - infoV8.iSubAddress = DMMTSY_CALL_SUBADDRESS; - infoV8.iBearerCap1 = DMMTSY_CALL_BEARER_CAP1; - infoV8.iBearerCap2 = DMMTSY_CALL_BEARER_CAP2; - infoV8.iBCRepeatIndicator = DMMTSY_CALL_BC_REPEAT_INDICATOR; - } - - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::GetMobileCallInfoCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::GetMobileCallInfoCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyRemotePartyInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aRemotePartyInfo) - { - if (!iNotifyRemotePartyInfoChange++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyRemotePartyInfoChange called")); - RMobileCall::TMobileCallRemotePartyInfoV1Pckg* infoV1Pckg = (RMobileCall::TMobileCallRemotePartyInfoV1Pckg*)aRemotePartyInfo; - RMobileCall::TMobileCallRemotePartyInfoV1& infoV1 = (*infoV1Pckg)(); - - infoV1.iRemoteIdStatus=DMMTSY_CALL_REMOTEPARTYSTATUS2; - infoV1.iRemoteNumber.iTelNumber=DMMTSY_CALL_EMPTY_STRING; - infoV1.iDirection=DMMTSY_CALL_REMOTEPARTYDIRECTION2; - infoV1.iCallingName=DMMTSY_CALL_EMPTY_STRING; - - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyRemotePartyInfoChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyRemotePartyInfoChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::DialNoFdnCheck(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) - /** - * This method dials the number specified by aNumber. The number used for dialling - * is not checked against those in the Fixed Dialling Number list even if the FDN service is enabled - * - * @param aCallParams Supplies the call parameters for the dial request - * @param aNumber Supplies the number to dial - */ - - { - LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheck called")); - - TInt error = ValidateCallParams(aCallParams); - - if((error != KErrNone) || (aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - { - LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheck CallParams and DialNumber validated")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - - return KErrNone; - } - -TInt CCallDMmTsy::DialNoFdnCheckCancel(const TTsyReqHandle aTsyReqHandle) - /** - * This method cancels the dialling of the number specified by aNumber. The number used for dialling - * is not checked against those in the Fixed Dialling Number list even if the FDN service is enabled - */ - { - LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheckCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::DialCallControl(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) -/** - * This method dials the number specified by aNumber. Dialling via - * this function allows the TSY to know that the dial request is - * the result of call control. - * - * @param aCallParams Supplies the call parameters for the dial request - * @param aNumber Supplies the number to dial - */ - - { - LOGTEXT(_L8("CCallDMmTsy::DialCallControl called")); - - TInt error = ValidateCallParams(aCallParams); // Check V1 params - - // TODO need to validate the other params - - if((error != KErrNone) || (aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - { - LOGTEXT(_L8("CCallDMmTsy::DialCallControl CallParams and DialNumber validated")); - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - - return KErrNone; - } - -TInt CCallDMmTsy::DialCallControlCancel(const TTsyReqHandle aTsyReqHandle) -/** - * This method cancels the dialling of the number specified by aNumber. - */ - { - LOGTEXT(_L8("CCallDMmTsy::DialCallControlCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::DialEmergencyCall(const TTsyReqHandle aTsyReqHandle, TDesC* aNumber) - { - LOGTEXT(_L8("CCallDMmTsy::DialEmergencyCall called")); - if(aNumber->Compare(DMMTSY_EN_STORE_AMBULANCE_NUM) != 0) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - ReqCompleted(aTsyReqHandle,KErrNone); - - return KErrNone; - } - -TInt CCallDMmTsy::DialEmergencyCallCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::DialEmergencyCallCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::DialISV(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) - { - LOGTEXT(_L8("CCallDMmTsy::DialISV called")); - - TInt error = KErrNone; - - if(aCallParams) - { - - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg* callparamsPckg= - reinterpret_cast(const_cast(aCallParams)); - RMobileCall::TEtel3rdPartyMobileCallParamsV1& callparams=(*callparamsPckg)(); - - // check that the request is a 3rd party request - if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) - { - LOGTEXT(_L8("CCallDMmTsy::DIALISV, request from 3rd party.")); - - //Validate parameters - if ((aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER)!=KErrNone) || - (callparams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || - (callparams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG)) - { - error=KErrCorrupt; - } - } - else - { - LOGTEXT(_L8("CCallDMmTsy::DIALISV, request from non-3rd party.")); - error = KErrAccessDenied; - } - } - - else - { // No call parms data - error = KErrCorrupt; - } - - - if (error != KErrNone) - ReqCompleted(aTsyReqHandle,error); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - - } - -TInt CCallDMmTsy::DialISVCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::DialISVCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - - - -TInt CCallDMmTsy::ActivateCCBS(const TTsyReqHandle aTsyReqHandle, TInt* aIndex) - { - LOGTEXT(_L8("CCallDMmTsy::ActivateCCBS called")); - *aIndex=DMMTSY_PHONE_CCC_INDEX1; - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::ActivateCCBSCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::ActivateCCBSCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::RejectCCBS(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::RejectCCBS called")); - ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - -TInt CCallDMmTsy::GetUUSCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps) - { - LOGTEXT(_L8("CCallDMmTsy::GetUUSCaps called")); - *aCaps = DMMTSY_CALL_UUS_CAPS; - - iPhone->AddDelayedReq(aTsyReqHandle,this); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyUUSCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps) - { - if (!iNotifyUUSCapsChange++) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyUUSCapsChange called")); - *aCaps = DMMTSY_CALL_UUS_CAPS; - - iPhone->AddDelayedReq(aTsyReqHandle,this); - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyUUSCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyUUSCapsChangeCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::ValidateCallParams(TDesC8* aCallParams) - { - TInt error = KErrNone; - - RCall::TCallParamsPckg* paramsPckgV1 = (RCall::TCallParamsPckg*)aCallParams; - RCall::TCallParams& paramsV1 = (*paramsPckgV1)(); - - iDataCallParams.iSpeakerControl = paramsV1.iSpeakerControl; - iDataCallParams.iSpeakerVolume = paramsV1.iSpeakerVolume; - iDataCallParams.iInterval = paramsV1.iInterval; - iDataCallParams.iWaitForDialTone = paramsV1.iWaitForDialTone; - iMobileCallParams.iSpeakerControl = paramsV1.iSpeakerControl; - iMobileCallParams.iSpeakerVolume = paramsV1.iSpeakerVolume; - iMobileCallParams.iInterval = paramsV1.iInterval; - iMobileCallParams.iWaitForDialTone = paramsV1.iWaitForDialTone; - - if(paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV1) - { - if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) - error=KErrCorrupt; - - RMobileCall::TMobileCallParamsV1Pckg* mmParamsPckgV1 = (RMobileCall::TMobileCallParamsV1Pckg*)aCallParams; - RMobileCall::TMobileCallParamsV1& mmParamsV1 = (*mmParamsPckgV1)(); - - iMobileCallParams.iIdRestrict = mmParamsV1.iIdRestrict; - iMobileCallParams.iCug = mmParamsV1.iCug; - iMobileCallParams.iAutoRedial = mmParamsV1.iAutoRedial; - - if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || - (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || - (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || - (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || - (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || - (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG)) - - error=KErrCorrupt; - } - else if(paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV2) - { - if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) - error=KErrCorrupt; - - RMobileCall::TMobileCallParamsV2Pckg* mmParamsPckgV2 = (RMobileCall::TMobileCallParamsV2Pckg*)aCallParams; - RMobileCall::TMobileCallParamsV2& mmParamsV2 = (*mmParamsPckgV2)(); - - iMobileCallParams.iIdRestrict = mmParamsV2.iIdRestrict; - iMobileCallParams.iCug = mmParamsV2.iCug; - iMobileCallParams.iAutoRedial = mmParamsV2.iAutoRedial; - iMobileCallParams.iBearerMode = mmParamsV2.iBearerMode; - - if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || - (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || - (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || - (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || - (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || - (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG) || - (iMobileCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER)) - { - error=KErrCorrupt; - } - } - else if (paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV7) - { - if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) - error=KErrCorrupt; - - RMobileCall::TMobileCallParamsV7Pckg* mmParamsPckgV7 = (RMobileCall::TMobileCallParamsV7Pckg*)aCallParams; - RMobileCall::TMobileCallParamsV7& mmParamsV7 = (*mmParamsPckgV7)(); - - iMobileCallParams.iIdRestrict = mmParamsV7.iIdRestrict; - iMobileCallParams.iCug = mmParamsV7.iCug; - iMobileCallParams.iAutoRedial = mmParamsV7.iAutoRedial; - iMobileCallParams.iBearerMode = mmParamsV7.iBearerMode; - iMobileCallParams.iCallParamOrigin = mmParamsV7.iCallParamOrigin; - iMobileCallParams.iSubAddress = mmParamsV7.iSubAddress; - iMobileCallParams.iBearerCap1 = mmParamsV7.iBearerCap1; - iMobileCallParams.iBearerCap2 = mmParamsV7.iBearerCap2; - iMobileCallParams.iBCRepeatIndicator = mmParamsV7.iBCRepeatIndicator; - iMobileCallParams.iIconId.iQualifier = mmParamsV7.iIconId.iQualifier; - iMobileCallParams.iIconId.iIdentifier = mmParamsV7.iIconId.iIdentifier; - iMobileCallParams.iAlphaId = mmParamsV7.iAlphaId; - - if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || - (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || - (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || - (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || - (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || - (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG) || - (iMobileCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER) || - (iMobileCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || - (iMobileCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || - (iMobileCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || - (iMobileCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR) || - (iMobileCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || - (iMobileCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || - (iMobileCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) - { - error=KErrCorrupt; - } - } - - if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV1) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV2) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8)) - { - RMobileCall::TMobileDataCallParamsV1Pckg* dataParamsPckgV1 = (RMobileCall::TMobileDataCallParamsV1Pckg*)aCallParams; - RMobileCall::TMobileDataCallParamsV1& dataParamsV1 = (*dataParamsPckgV1)(); - - iDataCallParams.iService = dataParamsV1.iService; - iDataCallParams.iSpeed = dataParamsV1.iSpeed; - iDataCallParams.iProtocol = dataParamsV1.iProtocol; - iDataCallParams.iQoS = dataParamsV1.iQoS; - iDataCallParams.iRLPVersion = dataParamsV1.iRLPVersion; - iDataCallParams.iV42bisReq = dataParamsV1.iV42bisReq; - iDataCallParams.iUseEdge = dataParamsV1.iUseEdge; - - if ((iDataCallParams.iService != DMMTSY_DATA_CALL_SERVICE) || - (iDataCallParams.iSpeed != DMMTSY_DATA_CALL_SPEED) || - (iDataCallParams.iProtocol != DMMTSY_DATA_CALL_PROTOCOL) || - (iDataCallParams.iQoS != DMMTSY_DATA_CALL_QOS) || - (iDataCallParams.iRLPVersion != DMMTSY_DATA_CALL_RLP) || - (iDataCallParams.iV42bisReq != DMMTSY_DATA_CALL_V42BIS) || - (iDataCallParams.iUseEdge != DMMTSY_DATA_CALL_EGPRS_REQUIRED)) - - error=KErrCorrupt; - } - - if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV2) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8)) - { - RMobileCall::TMobileDataCallParamsV2Pckg* dataParamsPckgV2 = (RMobileCall::TMobileDataCallParamsV2Pckg*)aCallParams; - RMobileCall::TMobileDataCallParamsV2& dataParamsV2 = (*dataParamsPckgV2)(); - - iDataCallParams.iBearerMode = dataParamsV2.iBearerMode; - - if (iDataCallParams.iBearerMode != DMMTSY_PHONE_MULTICALLBEARERMODE_NOTSUPPORTED) - - error=KErrCorrupt; - } - if (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8) - { - RMobileCall::TMobileDataCallParamsV8Pckg* dataParamsPckgV8 = (RMobileCall::TMobileDataCallParamsV8Pckg*)aCallParams; - RMobileCall::TMobileDataCallParamsV8& dataParamsV8 = (*dataParamsPckgV8)(); - - iDataCallParams.iCallParamOrigin = dataParamsV8.iCallParamOrigin; - iDataCallParams.iSubAddress = dataParamsV8.iSubAddress; - iDataCallParams.iBearerCap1 = dataParamsV8.iBearerCap1; - iDataCallParams.iBearerCap2 = dataParamsV8.iBearerCap2; - iDataCallParams.iBCRepeatIndicator = dataParamsV8.iBCRepeatIndicator; - iDataCallParams.iIconId.iIdentifier = dataParamsV8.iIconId.iIdentifier; - iDataCallParams.iIconId.iQualifier = dataParamsV8.iIconId.iQualifier; - iDataCallParams.iAlphaId = dataParamsV8.iAlphaId; - - if ((iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || - (iDataCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || - (iDataCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || - (iDataCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || - (iDataCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR)|| - (iDataCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || - (iDataCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || - (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) - - error=KErrCorrupt; - } - - if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV1) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV2) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) - { - RMobileCall::TMobileHscsdCallParamsV1Pckg* hscsdParamsPckgV1 = (RMobileCall::TMobileHscsdCallParamsV1Pckg*)aCallParams; - RMobileCall::TMobileHscsdCallParamsV1& hscsdParamsV1 = (*hscsdParamsPckgV1)(); - - iDataCallParams.iWantedAiur = hscsdParamsV1.iWantedAiur; - iDataCallParams.iWantedRxTimeSlots = hscsdParamsV1.iWantedRxTimeSlots; - iDataCallParams.iMaxTimeSlots = hscsdParamsV1.iMaxTimeSlots; - iDataCallParams.iCodings = hscsdParamsV1.iCodings; - iDataCallParams.iAsymmetry = hscsdParamsV1.iAsymmetry; - iDataCallParams.iUserInitUpgrade = hscsdParamsV1.iUserInitUpgrade; - - if ((iDataCallParams.iWantedAiur != DMMTSY_CALL_HCSD_AIUR) || - (iDataCallParams.iWantedRxTimeSlots != DMMTSY_CALL_HCSD_TS) || - (iDataCallParams.iMaxTimeSlots != DMMTSY_CALL_HCSD_MAXTS) || - (iDataCallParams.iCodings != DMMTSY_CALL_HCSD_CODING) || - (iDataCallParams.iAsymmetry != DMMTSY_CALL_HCSD_ASYMMETRY) || - (iDataCallParams.iUserInitUpgrade != DMMTSY_CALL_HCSD_USER_IMI)) - - error=KErrCorrupt; - } - if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV2) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) - { - RMobileCall::TMobileHscsdCallParamsV2Pckg* hscsdParamsPckgV2 = (RMobileCall::TMobileHscsdCallParamsV2Pckg*)aCallParams; - RMobileCall::TMobileHscsdCallParamsV2& hscsdParamsV2 = (*hscsdParamsPckgV2)(); - - iDataCallParams.iBearerMode = hscsdParamsV2.iBearerMode; - - if ((iDataCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER)) - - error=KErrCorrupt; - } - - if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || - (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) - { - RMobileCall::TMobileHscsdCallParamsV7Pckg* hscsdParamsPckgV7 = (RMobileCall::TMobileHscsdCallParamsV7Pckg*)aCallParams; - RMobileCall::TMobileHscsdCallParamsV7& hscsdParamsV7 = (*hscsdParamsPckgV7)(); - - iDataCallParams.iCallParamOrigin = hscsdParamsV7.iCallParamOrigin; - iDataCallParams.iIconId = hscsdParamsV7.iIconId; - iDataCallParams.iAlphaId = hscsdParamsV7.iAlphaId; - - if ((iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || - (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) - - error=KErrCorrupt; - } - - if (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8) - { - RMobileCall::TMobileHscsdCallParamsV8Pckg* hscsdParamsPckgV8 = (RMobileCall::TMobileHscsdCallParamsV8Pckg*)aCallParams; - RMobileCall::TMobileHscsdCallParamsV8& hscsdParamsV8 = (*hscsdParamsPckgV8)(); - - iDataCallParams.iBearerMode = hscsdParamsV8.iBearerMode; - iDataCallParams.iCallParamOrigin = hscsdParamsV8.iCallParamOrigin; - iDataCallParams.iIconId.iIdentifier = hscsdParamsV8.iIconId.iIdentifier; - iDataCallParams.iIconId.iQualifier = hscsdParamsV8.iIconId.iQualifier; - iDataCallParams.iAlphaId = hscsdParamsV8.iAlphaId; - iDataCallParams.iSubAddress = hscsdParamsV8.iSubAddress; - iDataCallParams.iBearerCap1 = hscsdParamsV8.iBearerCap1; - iDataCallParams.iBearerCap2 = hscsdParamsV8.iBearerCap2; - iDataCallParams.iBCRepeatIndicator = hscsdParamsV8.iBCRepeatIndicator; - - if ((iDataCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER) || - (iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || - (iDataCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || - (iDataCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || - (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)|| - (iDataCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || - (iDataCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || - (iDataCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || - (iDataCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR)) - { - error = KErrCorrupt; - } - } - - return error; - } - -TInt CCallDMmTsy::ActivateUUS(const TTsyReqHandle aTsyReqHandle, TDes8* aUUIRequest) - { - LOGTEXT(_L8("CCallDMmTsy::ActivateUUS called")); - - RMobileCall::TMobileCallUUSRequestV1Pckg* uuiReqPckg = (RMobileCall::TMobileCallUUSRequestV1Pckg*)aUUIRequest; - RMobileCall::TMobileCallUUSRequestV1& uuiReq = (*uuiReqPckg)(); - - if((uuiReq.iServiceReq != DMMTSY_CALL_UUI_SERVICE_REQ) || - (uuiReq.iUUI.Compare(DMMTSY_CALL_UUI_INFO_DIAL) !=0 )) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::ActivateUUSCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::ActivateUUSDuringCallCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::SendUUI(const TTsyReqHandle aTsyReqHandle, TBool* aMore, TDesC16* aUUI) - { - LOGTEXT(_L8("CCallDMmTsy::SendUUI called")); - if( (aUUI->Compare(DMMTSY_CALL_UUI_INFO) != 0) || - (*aMore != DMMTSY_CALL_UUI_MORE_INFO) ) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::SendUUICancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::SendUUICancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::ReceiveUUI(const TTsyReqHandle aTsyReqHandle, TDes16* aUUI) - { - LOGTEXT(_L8("CCallDMmTsy::ReceiveUUI called")); - - aUUI->Copy(DMMTSY_CALL_UUI_INFO); - - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::ReceiveUUICancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::ReceiveUUICancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::HangupWithUUI(const TTsyReqHandle aTsyReqHandle, TDesC16* aUUI) - { - LOGTEXT(_L8("CCallDMmTsy::HangupWithUUI called")); - - if(aUUI->Compare(DMMTSY_CALL_UUI_INFO_HANGUP) != 0) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle, this); - - return KErrNone; - } - -TInt CCallDMmTsy::HangupWithUUICancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::HangupWithUUICancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::AnswerIncomingCallWithUUI(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC16* aUUI) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallWithUUI called")); - - TInt error = ValidateCallParams(aCallParams); - - if((error != KErrNone) || (aUUI->Compare(DMMTSY_CALL_UUI_INFO_ANSWER) != 0)) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::AnswerIncomingCallWithUUICancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallWithUUICancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - - -TInt CCallDMmTsy::AnswerMultimediaCallAsVoice(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDes16* aCallName) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerMultimediaCallAsVoice called")); - - TInt error = ValidateCallParams(aCallParams); - - *aCallName=DMMTSY_LINE_VOICE_NAME; - if(error != KErrNone) - ReqCompleted(aTsyReqHandle,KErrCorrupt); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - } - -TInt CCallDMmTsy::AnswerMultimediaCallAsVoiceCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerMultimediaCallAsVoiceCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::AnswerIncomingCallISV(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallISV called")); - - TInt error = KErrNone; - - if(aCallParams) - { - - RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg* callparamsPckg= - reinterpret_cast(const_cast(aCallParams)); - RMobileCall::TEtel3rdPartyMobileCallParamsV1& callparams=(*callparamsPckg)(); - - // check that the request is a 3rd party request - if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) - { - LOGTEXT(_L8("CCallDMmTsy::ANSWERINCOMINGCALLISV, request from 3rd party.")); - } - else - { - LOGTEXT(_L8("CCallDMmTsy::ANSWERINCOMINGCALLISV, request from non-3rd party.")); - error = KErrAccessDenied; - } - } - - else - { // No call parms data - error = KErrCorrupt; - } - - - if (error != KErrNone) - ReqCompleted(aTsyReqHandle,error); - else - iPhone->AddDelayedReq(aTsyReqHandle,this); - - return KErrNone; - - } - -TInt CCallDMmTsy::AnswerIncomingCallISVCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallISVCancel called")); - iPhone->RemoveDelayedReq(aTsyReqHandle); - ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CCallDMmTsy::NotifyAudioToneEvent(const TTsyReqHandle aTsyReqHandle, TDes8* aAudioTone) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyAudioToneEventChange called")); - - RMobileCall::TAudioToneV3Pckg* audioPckgV3 = (RMobileCall::TAudioToneV3Pckg*)aAudioTone; - RMobileCall::TAudioToneV3& audioTone = (*audioPckgV3)(); - - switch(iNotifyAudioToneEvent++) - { - case 0: - audioTone.iEvent = DMMTSY_AUDIO_START_TONE; - audioTone.iTone = DMMTSY_AUDIO_CONGESTION_TONE; - audioTone.iPlayedLocally = DMMTSY_AUDIO_PLAYED_LOCALLY; - ReqCompleted(aTsyReqHandle,KErrNone); - break; - case 1: - audioTone.iEvent = DMMTSY_AUDIO_STOP_TONE; - audioTone.iTone = DMMTSY_AUDIO_NO_TONE; - audioTone.iPlayedLocally = DMMTSY_AUDIO_PLAYED_LOCALLY; - iPhone->AddDelayedReq(aTsyReqHandle,this); - break; - default: - break; - } - return KErrNone; - } - -TInt CCallDMmTsy::NotifyAudioToneEventCancel(const TTsyReqHandle aTsyReqHandle) - { - LOGTEXT(_L8("CCallDMmTsy::NotifyAudioToneEventChangeCancel 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 +#include "Dmmlog.h" + +//#define ASYNC_TIMEOUT 300000 // 0.3s + +// +// CCallDMmTsy +// +CCallDMmTsy* CCallDMmTsy::NewL(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) + { + CCallDMmTsy* call=new(ELeave) CCallDMmTsy(aPhone,aFac); + CleanupStack::PushL(call); + call->ConstructL(); + CleanupStack::Pop(); + return call; + } + +CCallDMmTsy::CCallDMmTsy(CPhoneDMmTsy *aPhone, CPhoneFactoryDummyBase* aFac) + :CCallDummyBase(aFac), iPhone(aPhone) + {} + +void CCallDMmTsy::ConstructL() + { + CCallDummyBase::ConstructL(); + LOGTEXT(_L8("CCallDMmTsy created")); + } + +CCallDMmTsy::~CCallDMmTsy() + { + LOGTEXT(_L8("CCallDMmTsy destroyed")); + } + +CTelObject* CCallDMmTsy::OpenNewObjectByNameL(const TDesC& aName) + { + // only fax objects can be opened from call objects + if (aName.Compare(_L("FAX"))==KErrNone) + return REINTERPRET_CAST(CTelObject*, CFaxDMmTsy::NewL(FacPtr())); + else + return NULL; + } + +CTelObject* CCallDMmTsy::OpenNewObjectL(TDes& /*aNewName*/) + { + // opening fax without a name is not supported + User::Leave(KErrNotSupported); + return NULL; + } + +CTelObject::TReqMode CCallDMmTsy::ReqModeL(const TInt aIpc) + { + // ReqModeL is called from the server's CTelObject::ReqAnalyserL + // in order to check the type of request it has + + // The following are example request types for this dummy TSY + // All TSYs do not have to have these request types but they have been given + // "sensible" values in this test code + + CTelObject::TReqMode ret=0; + switch (aIpc) + { +// +// No Flow Control NOR Multiple Completion +// + case EMobileCallGetMobileCallCaps: + case EMobileCallGetMobileCallStatus: + case EMobileCallGetMobileCallInfo: + case EMobileCallGetMobileDataCallCaps: + case EMobileCallGetMobileDataCallRLPRange: + case EMobileCallSetDynamicHscsdParams: + case EMobileCallGetCurrentHscsdInfo: + case EMobileCallSwitchAlternatingCall: + case EMobileCallDeflect: + case EMobileCallTransfer: + case EMobileCallGoOneToOne: + case EMobileCallActivateCCBS: + case EMobileCallRejectCCBS: + case EMobileCallSetPrivacy: + case EMobileCallSetTrafficChannel: + case EMobileCallNotifyTrafficChannelConfirmation: + case EMobileCallGetUUSCaps: + case EMobileCallActivateUUS: + case EMobileCallSendUUI: + case EMobileCallReceiveUUI: + case EMobileCallHangupWithUUI: + case EMobileCallAnswerWithUUI: + case EMobileCallAnswerMultimediaCallAsVoice: + case EMobileCallAnswerISV: + break; +// +// Flow Controlled Services +// + case EMobileCallHold: + case EMobileCallResume: + case EMobileCallSwap: + case EMobileCallDialEmergencyCall: + case EMobileCallDialNoFdnCheck: + case EMobileCallDialISV: + case EMobileCallDialCallControl: + ret=KReqModeFlowControlObeyed; + break; + +// +// Multiple Completion Services with Immediate Server Repost +// (Usually Notifications) +// + case EMobileCallNotifyMobileCallStatusChange: + case EMobileCallNotifyMobileCallCapsChange: + case EMobileCallNotifyCallEvent: + case EMobileCallNotifyRemotePartyInfoChange: + case EMobileCallNotifyMobileDataCallCapsChange: + case EMobileCallNotifyHscsdInfoChange: + case EMobileCallNotifyVoiceFallback: + case EMobileCallNotifyAlternatingCallSwitch: + case EMobileCallNotifyPrivacyConfirmation: + case EMobileCallNotifyUUSCapsChange: + case EMobileCallNotifyAudioToneEvent: + ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately; + break; +// +// Not Supported +// + case EMobileCallNotifyMobileCallStatusChangeCancel: + case EMobileCallHoldCancel: + case EMobileCallResumeCancel: + case EMobileCallSwapCancel: + case EMobileCallNotifyMobileCallCapsChangeCancel: + case EMobileCallNotifyCallEventCancel: + case EMobileCallDialEmergencyCallCancel: + case EMobileCallGetMobileCallInfoCancel: + case EMobileCallNotifyRemotePartyInfoChangeCancel: + case EMobileCallNotifyMobileDataCallCapsChangeCancel: + case EMobileCallGetMobileDataCallRLPRangeCancel: + case EMobileCallSetDynamicHscsdParamsCancel: + case EMobileCallSwitchAlternatingCallCancel: + case EMobileCallActivateCCBSCancel: + case EMobileCallNotifyPrivacyConfirmationCancel: + case EMobileCallNotifyTrafficChannelConfirmationCancel: + case EMobileCallNotifyVoiceFallbackCancel: + case EMobileCallNotifyUUSCapsChangeCancel: + case EMobileCallActivateUUSCancel: + case EMobileCallSendUUICancel: + case EMobileCallReceiveUUICancel: + case EMobileCallHangupWithUUICancel: + case EMobileCallAnswerWithUUICancel: + case EMobileCallDialNoFdnCheckCancel: + case EMobileCallDialCallControlCancel: + case EMobileCallAnswerMultimediaCallAsVoiceCancel: + case EMobileCallNotifyAudioToneEventCancel: + case EMobileCallDialISVCancel: + case EMobileCallAnswerISVCancel: + User::Leave(KErrNotSupported); + break; + + default: + ret=CCallBase::ReqModeL(aIpc); + break; + } + return ret; + } + + +TInt CCallDMmTsy::RegisterNotification(const TInt aIpc) + { + // RegisterNotification is called when the server recognises that this notification + // is being posted for the first time on this sub-session object. + + // It enables the TSY to "turn on" any regular notification messages that it may + // receive from the phone + + switch (aIpc) + { + case EMobileCallNotifyMobileCallStatusChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Status Change ")); + return KErrNone; + case EMobileCallNotifyMobileCallCapsChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Control Caps Change ")); + return KErrNone; + case EMobileCallNotifyCallEvent: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Call Event ")); + return KErrNone; + case EMobileCallNotifyRemotePartyInfoChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Remote Party Info Change ")); + return KErrNone; + case EMobileCallNotifyMobileDataCallCapsChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Data Call Caps Change ")); + return KErrNone; + case EMobileCallNotifyHscsdInfoChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Hscsd Info Change ")); + return KErrNone; + case EMobileCallNotifyVoiceFallback: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Voice Fallback ")); + return KErrNone; + case EMobileCallNotifyAlternatingCallSwitch: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Alternating Call Switch ")); + return KErrNone; + case EMobileCallNotifyPrivacyConfirmation: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Privacy Confirmation ")); + return KErrNone; + case EMobileCallNotifyTrafficChannelConfirmation: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Traffic Channel Confirmation ")); + return KErrNone; + case EMobileCallNotifyUUSCapsChange: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify UUS Caps Change ")); + return KErrNone; + case EMobileCallNotifyAudioToneEvent: + LOGTEXT(_L8("CCallDMmTsy: RegisterNotification - Notify Audio Tone Event ")); + return KErrNone; + default: + // Unknown or invalid IPC + LOGTEXT(_L8("CCallDMmTsy: Register error, unknown IPC")); + return KErrNotSupported; + } + } + +TInt CCallDMmTsy::DeregisterNotification(const TInt aIpc) + { + // DeregisterNotification is called when the server recognises that this notification + // will not be posted again because the last client to have a handle on this sub-session + // object has just closed the handle. + + // It enables the TSY to "turn off" any regular notification messages that it may + // receive from the phone + + switch (aIpc) + { + case EMobileCallNotifyMobileCallStatusChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Status Change ")); + return KErrNone; + case EMobileCallNotifyMobileCallCapsChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Control Caps Change ")); + return KErrNone; + case EMobileCallNotifyCallEvent: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Call Event ")); + return KErrNone; + case EMobileCallNotifyRemotePartyInfoChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Remote Party Info Change ")); + return KErrNone; + case EMobileCallNotifyMobileDataCallCapsChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Data Call Caps Change ")); + return KErrNone; + case EMobileCallNotifyHscsdInfoChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Hscsd Info Change ")); + return KErrNone; + case EMobileCallNotifyVoiceFallback: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Voice Fallback ")); + return KErrNone; + case EMobileCallNotifyAlternatingCallSwitch: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Alternating Call Switch ")); + return KErrNone; + case EMobileCallNotifyPrivacyConfirmation: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Privacy Confirmation ")); + return KErrNone; + case EMobileCallNotifyTrafficChannelConfirmation: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Traffic Channel Confirmation ")); + return KErrNone; + case EMobileCallNotifyUUSCapsChange: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify UUS Caps Change ")); + return KErrNone; + case EMobileCallNotifyAudioToneEvent: + LOGTEXT(_L8("CCallDMmTsy: DeregisterNotification - Notify Audio Tone Event ")); + return KErrNone; + default: + // Unknown or invalid IPC + LOGTEXT(_L8("CCallDMmTsy: Deregister error, unknown IPC")); + return KErrNotSupported; + } + } + +TInt CCallDMmTsy::NumberOfSlotsL(const TInt aIpc) + { + // NumberOfSlotsL is called by the server when it is registering a new notification + // It enables the TSY to tell the server how many buffer slots to allocate for + // "repost immediately" notifications that may trigger before clients collect them + + TInt numberOfSlots=1; + switch (aIpc) + { + case EMobileCallNotifyMobileCallStatusChange: + case EMobileCallNotifyMobileCallCapsChange: + case EMobileCallNotifyCallEvent: + case EMobileCallNotifyMobileDataCallCapsChange: + case EMobileCallNotifyHscsdInfoChange: + case EMobileCallNotifyVoiceFallback: + case EMobileCallNotifyAlternatingCallSwitch: + case EMobileCallNotifyPrivacyConfirmation: + case EMobileCallNotifyTrafficChannelConfirmation: + case EMobileCallNotifyUUSCapsChange: + case EMobileCallNotifyAudioToneEvent: + LOGTEXT(_L8("CCallDMmTsy: Registered with 5 slots")); + numberOfSlots=5; + break; + case EMobileCallNotifyRemotePartyInfoChange: + + LOGTEXT(_L8("CCallDMmTsy: Registered with 1 slot")); + break; + default: + // Unknown or invalid Phone IPC + LOGTEXT(_L8("CCallDMmTsy: Number of Slots error, unknown IPC")); + User::Leave(KErrNotSupported); + break; + } + return numberOfSlots; + } + + +TInt CCallDMmTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc, + const TDataPackage& aPackage) + { + // ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request + // for the TSY to process + // A request handle, request type and request data are passed to the TSY + + TAny* dataPtr=aPackage.Ptr1(); + TAny* dataPtr2=aPackage.Ptr2(); + + // The request data has to extracted from TDataPackage and the TAny* pointers have to + // be "cast" to the expected request data type + + switch (aIpc) + { +// +// No Flow Control NOR Multiple Completion +// + case EMobileCallGetMobileCallCaps: + return GetMobileCallCaps(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallGetMobileCallStatus: + return GetMobileCallStatus(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallStatus*,dataPtr)); + + case EMobileCallGetMobileCallInfo: + return GetMobileCallInfo(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallGetMobileDataCallCaps: + return GetMobileDataCallCaps(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallGetMobileDataCallRLPRange: + return GetMobileDataCallRLPRange(aTsyReqHandle, + REINTERPRET_CAST(TInt *, dataPtr), + aPackage.Des2n()); + + case EMobileCallSetDynamicHscsdParams: + return SetDynamicHscsdParams(aTsyReqHandle, + REINTERPRET_CAST(TInt*,dataPtr), + REINTERPRET_CAST(TInt*,dataPtr2)); + + case EMobileCallGetCurrentHscsdInfo: + return GetCurrentHscsdInfo(aTsyReqHandle,aPackage.Des1n()); + + case EMobileCallSwitchAlternatingCall: + return SwitchAlternatingCall(aTsyReqHandle); + + case EMobileCallDeflect: + return Deflect(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallDeflect*, dataPtr), + REINTERPRET_CAST(RMobilePhone::TMobileAddress*, dataPtr2)); + + case EMobileCallTransfer: + return Transfer(aTsyReqHandle); + + case EMobileCallGoOneToOne: + return GoOneToOne(aTsyReqHandle); + + case EMobileCallActivateCCBS: + return ActivateCCBS(aTsyReqHandle, + REINTERPRET_CAST(TInt*, dataPtr)); + + case EMobileCallRejectCCBS: + return RejectCCBS(aTsyReqHandle); + + case EMobileCallSetPrivacy: + return SetPrivacySetting(aTsyReqHandle, + REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr)); + + case EMobileCallNotifyPrivacyConfirmation: + return NotifyPrivacyConfirmation(aTsyReqHandle, + REINTERPRET_CAST(RMobilePhone::TMobilePhonePrivacy*, dataPtr)); + + case EMobileCallSetTrafficChannel: + return SetTrafficChannel(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallTch*, dataPtr)); + + case EMobileCallNotifyTrafficChannelConfirmation: + return NotifyTrafficChannelConfirmation(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallTch*,dataPtr)); + + case EMobileCallGetUUSCaps: + return GetUUSCaps(aTsyReqHandle, + REINTERPRET_CAST(TUint32*,dataPtr)); + + case EMobileCallActivateUUS: + return ActivateUUS(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallSendUUI: + return SendUUI(aTsyReqHandle, + REINTERPRET_CAST(TInt*,dataPtr), aPackage.Des2u()); + + case EMobileCallReceiveUUI: + return ReceiveUUI(aTsyReqHandle, aPackage.Des1u()); + + case EMobileCallHangupWithUUI: + return HangupWithUUI(aTsyReqHandle, aPackage.Des1u()); + + case EMobileCallAnswerWithUUI: + return AnswerIncomingCallWithUUI(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); + + case EMobileCallAnswerMultimediaCallAsVoice: + return AnswerMultimediaCallAsVoice(aTsyReqHandle, + aPackage.Des1n(), aPackage.Des2u()); + + case EMobileCallAnswerISV: + return AnswerIncomingCallISV(aTsyReqHandle, aPackage.Des1n()); + +// +// Flow Controlled Services +// + case EMobileCallHold: + return Hold(aTsyReqHandle); + + case EMobileCallResume: + return Resume(aTsyReqHandle); + + case EMobileCallSwap: + return Swap(aTsyReqHandle); + + case EMobileCallDialEmergencyCall: + return DialEmergencyCall(aTsyReqHandle, aPackage.Des1u()); + + case EMobileCallDialNoFdnCheck: + return DialNoFdnCheck(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); + + case EMobileCallDialISV: + return DialISV(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); + + case EMobileCallDialCallControl: + return DialCallControl(aTsyReqHandle, aPackage.Des1n(), aPackage.Des2u()); + +// +// Multiple Completion Services with Immediate Server Repost +// (Usually Notifications) +// + case EMobileCallNotifyMobileCallStatusChange: + return NotifyMobileCallStatusChange(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallStatus*, dataPtr)); + + case EMobileCallNotifyMobileCallCapsChange: + return NotifyMobileCallCapsChange(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallNotifyCallEvent: + return NotifyCallEvent(aTsyReqHandle, + REINTERPRET_CAST(RMobileCall::TMobileCallEvent*, dataPtr)); + + case EMobileCallNotifyRemotePartyInfoChange: + return NotifyRemotePartyInfoChange(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallNotifyMobileDataCallCapsChange: + return NotifyMobileDataCallCapsChange(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallNotifyHscsdInfoChange: + return NotifyHscsdInfoChange(aTsyReqHandle, aPackage.Des1n()); + + case EMobileCallNotifyVoiceFallback: + return NotifyVoiceFallback(aTsyReqHandle, aPackage.Des1u()); + + case EMobileCallNotifyAlternatingCallSwitch: + return NotifyAlternatingCallSwitch(aTsyReqHandle); + + case EMobileCallNotifyUUSCapsChange: + return NotifyUUSCapsChange(aTsyReqHandle, + REINTERPRET_CAST(TUint32*, dataPtr)); + + case EMobileCallNotifyAudioToneEvent: + return NotifyAudioToneEvent(aTsyReqHandle, aPackage.Des1n()); +// +// Cancels +// + case EMobileCallNotifyMobileCallStatusChangeCancel: + return NotifyMobileCallStatusChangeCancel(aTsyReqHandle); + case EMobileCallHoldCancel: + return HoldCancel(aTsyReqHandle); + case EMobileCallGetMobileCallInfoCancel: + return GetMobileCallInfoCancel(aTsyReqHandle); + case EMobileCallResumeCancel: + return ResumeCancel(aTsyReqHandle); + case EMobileCallSwapCancel: + return SwapCancel(aTsyReqHandle); + case EMobileCallNotifyMobileCallCapsChangeCancel: + return NotifyMobileCallCapsChangeCancel(aTsyReqHandle); + case EMobileCallNotifyCallEventCancel: + return NotifyCallEventCancel(aTsyReqHandle); + case EMobileCallDialEmergencyCallCancel: + return DialEmergencyCallCancel(aTsyReqHandle); + case EMobileCallNotifyRemotePartyInfoChangeCancel: + return NotifyRemotePartyInfoChangeCancel(aTsyReqHandle); + case EMobileCallNotifyVoiceFallbackCancel: + return NotifyVoiceFallbackCancel(aTsyReqHandle); + case EMobileCallNotifyUUSCapsChangeCancel: + return NotifyUUSCapsChangeCancel(aTsyReqHandle); + case EMobileCallDialNoFdnCheckCancel: + return DialNoFdnCheckCancel(aTsyReqHandle); + case EMobileCallDialCallControlCancel: + return DialCallControlCancel(aTsyReqHandle); + case EMobileCallNotifyAudioToneEventCancel: + return NotifyAudioToneEventCancel(aTsyReqHandle); + case EMobileCallDialISVCancel: + return DialISVCancel(aTsyReqHandle); + case EMobileCallAnswerISVCancel: + return AnswerIncomingCallISVCancel(aTsyReqHandle); + default: + return KErrNotSupported; + } + } + +TInt CCallDMmTsy::CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle) + { + // CancelService is called by the server when it is "cleaning-up" any still outstanding + // asynchronous requests before closing a client's sub-session. + // This will happen if a client closes its R-class handle without cancelling outstanding + // asynchronous requests. + + switch (aIpc) + { + case EMobileCallNotifyMobileCallStatusChange: + return NotifyMobileCallStatusChangeCancel(aTsyReqHandle); + case EMobileCallHold: + return HoldCancel(aTsyReqHandle); + case EMobileCallGetMobileCallInfo: + return GetMobileCallInfoCancel(aTsyReqHandle); + case EMobileCallResume: + return ResumeCancel(aTsyReqHandle); + case EMobileCallSwap: + return SwapCancel(aTsyReqHandle); + case EMobileCallNotifyMobileCallCapsChange: + return NotifyMobileCallCapsChangeCancel(aTsyReqHandle); + case EMobileCallNotifyCallEvent: + return NotifyCallEventCancel(aTsyReqHandle); + case EMobileCallDialEmergencyCall: + return DialEmergencyCallCancel(aTsyReqHandle); + case EMobileCallNotifyRemotePartyInfoChange: + return NotifyRemotePartyInfoChangeCancel(aTsyReqHandle); + case EMobileCallNotifyMobileDataCallCapsChange: + return NotifyMobileDataCallCapsChangeCancel(aTsyReqHandle); + case EMobileCallGetMobileDataCallRLPRange: + return GetMobileDataCallRLPRangeCancel(aTsyReqHandle); + case EMobileCallSetDynamicHscsdParams: + return SetDynamicHscsdParamsCancel(aTsyReqHandle); + case EMobileCallNotifyHscsdInfoChange: + return NotifyHscsdInfoChangeCancel(aTsyReqHandle); + case EMobileCallNotifyVoiceFallback: + return NotifyVoiceFallbackCancel(aTsyReqHandle); + case EMobileCallNotifyAlternatingCallSwitch: + return NotifyAlternatingCallSwitchCancel(aTsyReqHandle); + case EMobileCallDeflect: + return DeflectCancel(aTsyReqHandle); + case EMobileCallTransfer: + return TransferCancel(aTsyReqHandle); + case EMobileCallGoOneToOne: + return GoOneToOneCancel(aTsyReqHandle); + case EMobileCallSwitchAlternatingCall: + return SwitchAlternatingCallCancel(aTsyReqHandle); + case EMobileCallActivateCCBS: + return ActivateCCBSCancel(aTsyReqHandle); + case EMobileCallNotifyPrivacyConfirmation: + return NotifyPrivacyConfirmationCancel(aTsyReqHandle); + case EMobileCallNotifyTrafficChannelConfirmation: + return NotifyTrafficChannelConfirmationCancel(aTsyReqHandle); + case EMobileCallNotifyUUSCapsChange: + return NotifyUUSCapsChangeCancel(aTsyReqHandle); + case EMobileCallActivateUUS: + return ActivateUUSCancel(aTsyReqHandle); + case EMobileCallSendUUI: + return SendUUICancel(aTsyReqHandle); + case EMobileCallReceiveUUI: + return ReceiveUUICancel(aTsyReqHandle); + case EMobileCallHangupWithUUI: + return HangupWithUUICancel(aTsyReqHandle); + case EMobileCallAnswerWithUUI: + return AnswerIncomingCallWithUUICancel(aTsyReqHandle); + case EMobileCallDialNoFdnCheck: + return DialNoFdnCheckCancel(aTsyReqHandle); + case EMobileCallDialCallControl: + return DialCallControlCancel(aTsyReqHandle); + case EMobileCallAnswerMultimediaCallAsVoice: + return AnswerMultimediaCallAsVoiceCancel(aTsyReqHandle); + case EMobileCallNotifyAudioToneEvent: + return NotifyAudioToneEventCancel(aTsyReqHandle); + case EMobileCallDialISV: + return DialISVCancel(aTsyReqHandle); + case EMobileCallAnswerISV: + return AnswerIncomingCallISVCancel(aTsyReqHandle); + default: + return CCallBase::CancelService(aIpc,aTsyReqHandle); + } + } + +/***********************************************************************************/ +// +// The following methods are called from ExtFunc and/or CancelService. +// Each of these will process a TSY request or cancel a TSY request +// Here, example values are returned or checked within this dummy TSY in order to ensure +// that the integrity of the data passed to/from client is maintained +// +/***********************************************************************************/ + + +TInt CCallDMmTsy::GetMobileDataCallCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallCaps called")); + InitialiseDataCallCaps(aCaps); + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileDataCallCapsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) + { + if (!iNotifyMobileDataCallCapsChange++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyMobileDataCallCapsChange called")); + InitialiseDataCallCaps(aCaps); + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileDataCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyMobileDataCallCapsChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +void CCallDMmTsy::InitialiseDataCallCaps(TDes8* aCallCaps) + { + RMobileCall::TMobileCallDataCapsV1Pckg* callCapsV1Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallDataCapsV1Pckg*,aCallCaps); + RMobileCall::TMobileCallDataCapsV1& callCapsV1 = (*callCapsV1Pckg)(); + + callCapsV1.iSpeedCaps = DMMTSY_CALL_DATA_CAPS_SPEED; + callCapsV1.iProtocolCaps = DMMTSY_CALL_DATA_CAPS_CARRIER; + callCapsV1.iServiceCaps = DMMTSY_CALL_DATA_CAPS_SERVICE; + callCapsV1.iHscsdSupport = DMMTSY_CALL_DATA_CAPS_HSCSD; + callCapsV1.iMClass = DMMTSY_CALL_DATA_CAPS_MCLASS; + callCapsV1.iMaxRxTimeSlots = DMMTSY_CALL_DATA_CAPS_MAXRXTS; + callCapsV1.iMaxTxTimeSlots = DMMTSY_CALL_DATA_CAPS_MAXTXTS; + callCapsV1.iTotalRxTxTimeSlots = DMMTSY_CALL_DATA_CAPS_TOTRXTXTS; + callCapsV1.iCodingCaps = DMMTSY_CALL_DATA_CAPS_CODING; + callCapsV1.iAsymmetryCaps = DMMTSY_CALL_DATA_CAPS_ASYMETRY; + callCapsV1.iUserInitUpgrade = DMMTSY_CALL_DATA_CAPS_USERIMI; + } + +TInt CCallDMmTsy::GetMobileDataCallRLPRange(const TTsyReqHandle aTsyReqHandle, TInt* aRLPVersion, TDes8* aRLPRange) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallRLPRange called")); + + RMobileCall::TMobileDataRLPRangesV1Pckg* rlpRangeV1Pckg = REINTERPRET_CAST(RMobileCall::TMobileDataRLPRangesV1Pckg*, aRLPRange); + RMobileCall::TMobileDataRLPRangesV1& rlpRangeV1 = (*rlpRangeV1Pckg)(); + + if(*aRLPVersion == DMMTSY_CALL_RLP_VERSION1) + { + rlpRangeV1.iIWSMax = DMMTSY_CALL_DATA_RLP_WSMAX; + rlpRangeV1.iIWSMin = DMMTSY_CALL_DATA_RLP_WSMIN; + rlpRangeV1.iMWSMax = DMMTSY_CALL_DATA_RLP_MWSMAX; + rlpRangeV1.iMWSMin = DMMTSY_CALL_DATA_RLP_MWSMIN; + rlpRangeV1.iN2Max = DMMTSY_CALL_DATA_RLP_N2MAX; + rlpRangeV1.iN2Min = DMMTSY_CALL_DATA_RLP_N2MIN; + rlpRangeV1.iT1Max = DMMTSY_CALL_DATA_RLP_T1MAX; + rlpRangeV1.iT1Min = DMMTSY_CALL_DATA_RLP_T1MIN; + rlpRangeV1.iT4Max = DMMTSY_CALL_DATA_RLP_T4MAX; + rlpRangeV1.iT4Min = DMMTSY_CALL_DATA_RLP_T4MIN; + + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::GetMobileDataCallRLPRangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileDataCallRLPRangeCancel called")); + + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::SetDynamicHscsdParams(const TTsyReqHandle aTsyReqHandle, TInt* aAiur, TInt* aRxTimeslots) + { + LOGTEXT(_L8("CCallDMmTsy::SetHscsdParams called")); + + if ((*aAiur != DMMTSY_CALL_HCSD_AIUR) || + (*aRxTimeslots != DMMTSY_CALL_HCSD_TS)) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::SetDynamicHscsdParamsCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::SetHscsdParamsCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::GetCurrentHscsdInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aHSCSDInfo) + { + RMobileCall::TMobileCallHscsdInfoV1Pckg* HSCSDInfoPckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV1Pckg*,aHSCSDInfo); + RMobileCall::TMobileCallHscsdInfoV1& hscsdInfo = (*HSCSDInfoPckg)(); + LOGTEXT(_L8("CCallDMmTsy::GetCurrentHscsdInfo called")); + InitialiseHscsdInfo(hscsdInfo); + + if ((hscsdInfo.ExtensionId() == KEtelExtMultimodeV7) || + (hscsdInfo.ExtensionId() == KEtelExtMultimodeV8)) + { + RMobileCall::TMobileCallHscsdInfoV7Pckg* HSCSDInfoV7Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV7Pckg*,aHSCSDInfo); + RMobileCall::TMobileCallHscsdInfoV7& hscsdInfoV7 = (*HSCSDInfoV7Pckg)(); + + hscsdInfoV7.iCallParamOrigin = DMMTSY_CALL_PARAM_ORIGIN; + hscsdInfoV7.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; + hscsdInfoV7.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; + hscsdInfoV7.iAlphaId = DMMTSY_CALL_ALPHA_ID; + hscsdInfoV7.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; + } + if (hscsdInfo.ExtensionId() == KEtelExtMultimodeV8) + { + RMobileCall::TMobileCallHscsdInfoV8Pckg* HSCSDInfoV8Pckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV8Pckg*,aHSCSDInfo); + RMobileCall::TMobileCallHscsdInfoV8& hscsdInfoV8 = (*HSCSDInfoV8Pckg)(); + + hscsdInfoV8.iSubAddress = DMMTSY_CALL_SUBADDRESS; + hscsdInfoV8.iBearerCap1 = DMMTSY_CALL_BEARER_CAP1; + hscsdInfoV8.iBearerCap2 = DMMTSY_CALL_BEARER_CAP2; + hscsdInfoV8.iBCRepeatIndicator = DMMTSY_CALL_BC_REPEAT_INDICATOR; + } + + + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyHscsdInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aHSCSDInfo) + { + if (!iNotifyHscsdInfoChange++) + { + RMobileCall::TMobileCallHscsdInfoV1Pckg* HSCSDInfoPckg = REINTERPRET_CAST(RMobileCall::TMobileCallHscsdInfoV1Pckg*,aHSCSDInfo); + RMobileCall::TMobileCallHscsdInfoV1& HSCSDInfo = (*HSCSDInfoPckg)(); + + LOGTEXT(_L8("CCallDMmTsy::NotifyHscsdInfoChange called")); + InitialiseHscsdInfo(HSCSDInfo); + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyHscsdInfoChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyHscsdInfoChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +void CCallDMmTsy::InitialiseHscsdInfo(RMobileCall::TMobileCallHscsdInfoV1& aHSCSDInfo) + { + aHSCSDInfo.iAiur = DMMTSY_CALL_HCSD_AIUR; + aHSCSDInfo.iRxTimeSlots = DMMTSY_CALL_HCSD_TS; + aHSCSDInfo.iTxTimeSlots = DMMTSY_CALL_HCSD_TS; + aHSCSDInfo.iCodings = DMMTSY_CALL_HCSD_CODING; + } + +TInt CCallDMmTsy::NotifyVoiceFallback(const TTsyReqHandle aTsyReqHandle, TDes* aCallName) + { + if (!iNotifyVoiceFallback++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyVoiceFallback Called")); + *aCallName = DMMTSY_VOICE_FALLBACK_CALL_NAME; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyVoiceFallbackCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyVoiceFallbackCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::SwitchAlternatingCall(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::SwitchAlternatingCall called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::SwitchAlternatingCallCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::SwitchAlternatingCallCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyAlternatingCallSwitch(const TTsyReqHandle aTsyReqHandle) + { + if (!iNotifyAlternatingCallSwitch++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyAlternatingCallSwitch called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyAlternatingCallSwitchCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyAlternatingCallSwitchCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + + + +TInt CCallDMmTsy::GetMobileCallCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileCallCaps called")); + RMobileCall::TMobileCallCapsV1Pckg *capsPckg = REINTERPRET_CAST(RMobileCall::TMobileCallCapsV1Pckg *,aCaps); + RMobileCall::TMobileCallCapsV1& caps = (*capsPckg)(); + caps.iCallControlCaps=DMMTSY_CALL_CONTROL_CAPS1; + caps.iCallEventCaps=DMMTSY_CALL_EVENT_CAPS1; + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileCallCapsChange(const TTsyReqHandle aTsyReqHandle, TDes8* aCaps) + { + if(!iNotifyMobileCallCapsChange++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallCapsChange called")); + RMobileCall::TMobileCallCapsV1Pckg *capsPckg = REINTERPRET_CAST(RMobileCall::TMobileCallCapsV1Pckg *,aCaps); + RMobileCall::TMobileCallCapsV1& caps = (*capsPckg)(); + caps.iCallControlCaps=DMMTSY_CALL_CONTROL_CAPS2; + caps.iCallEventCaps=DMMTSY_CALL_EVENT_CAPS2; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileCallCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallCapsChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::GetMobileCallStatus(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileCallStatus called")); + *aStatus=DMMTSY_CALL_STATUS1; + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileCallStatusChange(const TTsyReqHandle aTsyReqHandle,RMobileCall::TMobileCallStatus* aStatus) + { + if (iNotifyMobileCallStatusChangeAddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyMobileCallStatusChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyMobileCallStatusChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::Hold(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Hold called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::HoldCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::HoldCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::Resume(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Resume called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::ResumeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::ResumeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::Swap(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Swap called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::SwapCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::SwapCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::Deflect(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallDeflect* aDeflectType, RMobilePhone::TMobileAddress* aDestination) + { + LOGTEXT(_L8("CCallDMmTsy::Deflect called")); + + if ((*aDeflectType != DMMTSY_CALL_DEFLECT_TYPE) || + (aDestination->iNumberPlan != DMMTSY_PHONE_NPI) || + (aDestination->iTypeOfNumber != DMMTSY_PHONE_TON) || + (aDestination->iTelNumber.Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::DeflectCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::DeflectCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::Transfer(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Transfer called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::TransferCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::TransferCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::GoOneToOne(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::GoOneToOne called")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::GoOneToOneCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::GoOneToOneCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyCallEvent(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallEvent* aEvent) + { + if(!iNotifyCallEvent++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyCallEvent called")); + *aEvent=DMMTSY_CALL_EVENT1; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyCallEventCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyCallEventCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::SetPrivacySetting(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aPrivacySetting) + { + LOGTEXT(_L8("CCallDMmTsy::Set Privacy called")); + if (*aPrivacySetting != DMMTSY_CALL_SET_PRIVACY) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyPrivacyConfirmation(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TMobilePhonePrivacy* aPrivacySetting) + { + if(!iNotifyPrivacyConfirmation++) + { + LOGTEXT(_L8("CCallDMmTsy::Notify Privacy Confirmation Change")); + *aPrivacySetting = DMMTSY_CALL_SET_PRIVACY; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyPrivacyConfirmationCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Notify Privacy Confirmation Cancel")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::SetTrafficChannel(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallTch* aTchRequest) + { + LOGTEXT(_L8("CCallDMmTsy::Set Traffic Channel called")); + if (*aTchRequest != DMMTSY_CALL_TCH_REQUEST) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyTrafficChannelConfirmation(const TTsyReqHandle aTsyReqHandle, RMobileCall::TMobileCallTch* aTchType) + { + if (!iNotifyTrafficChannelConfirmation++) + { + LOGTEXT(_L8("CCallDMmTsy::Notify Traffic Channel Confirmation")); + *aTchType = DMMTSY_CALL_TCH_SETTING; + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyTrafficChannelConfirmationCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::Notify Traffic Channel Confirmation Cancel")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::GetMobileCallInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileCallInfo called")); + RMobileCall::TMobileCallInfoV1Pckg* infoV1Pckg = (RMobileCall::TMobileCallInfoV1Pckg*)aInfo; + RMobileCall::TMobileCallInfoV1& infoV1 = (*infoV1Pckg)(); + + infoV1.iCallName=DMMTSY_CALL_NAME1; + infoV1.iLineName=DMMTSY_LINE_VOICE_NAME; + infoV1.iStatus=DMMTSY_CALL_STATUS4; + infoV1.iDuration=DMMTSY_CALL_DURATION1; + infoV1.iCallId=DMMTSY_CALL_ID1; + infoV1.iRemoteParty.iRemoteIdStatus=DMMTSY_CALL_REMOTEPARTYSTATUS1; + infoV1.iRemoteParty.iRemoteNumber.iTelNumber=DMMTSY_CALL_REMOTEPARTYNUMBER1; + infoV1.iRemoteParty.iDirection=DMMTSY_CALL_REMOTEPARTYDIRECTION1; + infoV1.iRemoteParty.iCallingName=DMMTSY_CALL_REMOTEPARTYNAME; + infoV1.iExitCode=DMMTSY_CALL_EXIT_CODE; + infoV1.iEmergency=DMMTSY_CALL_EMERGENCY_FLAG; + infoV1.iForwarded=DMMTSY_CALL_FORWARDED_FLAG; + infoV1.iService = DMMTSY_CALL_SERVICE; + infoV1.iValid = DMMTSY_CALL_VALID_FLAG; + infoV1.iPrivacy = DMMTSY_CALL_PRIVACY; + infoV1.iTch = DMMTSY_CALL_CHANNEL; + infoV1.iAlternatingCall = DMMTSY_CALL_ALTERNATING; + infoV1.iStartTime.Set(DMMTSY_PHONE_NWTINFO_YEAR,DMMTSY_PHONE_NWTINFO_MONTH,DMMTSY_PHONE_NWTINFO_DAY, + DMMTSY_PHONE_NWTINFO_HOUR, DMMTSY_PHONE_NWTINFO_MINUTE, DMMTSY_PHONE_NWTINFO_SECOND, + DMMTSY_PHONE_NWTINFO_MICRO); + + if (infoV1.ExtensionId() == KETelExtMultimodeV3 || + (infoV1.ExtensionId() == KETelExtMultimodeV4)) + { + RMobileCall::TMobileCallInfoV3Pckg* infoV3Pckg = (RMobileCall::TMobileCallInfoV3Pckg*)aInfo; + RMobileCall::TMobileCallInfoV3& infoV3 = (*infoV3Pckg)(); + infoV3.iSecurity = DMMTSY_CALL_SECURITY; + } + + if (infoV1.ExtensionId() == KEtelExtMultimodeV7) + { + RMobileCall::TMobileCallInfoV7Pckg* infoV7Pckg = (RMobileCall::TMobileCallInfoV7Pckg*)aInfo; + RMobileCall::TMobileCallInfoV7& infoV7 = (*infoV7Pckg)(); + infoV7.iSecurity = DMMTSY_CALL_SECURITY; + infoV7.iCallParamOrigin = DMMTSY_CALL_ORIGIN; + infoV7.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; + infoV7.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; + infoV7.iAlphaId = DMMTSY_CALL_ALPHA_ID; + infoV7.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; + } + if (infoV1.ExtensionId() == KEtelExtMultimodeV8) + { + RMobileCall::TMobileCallInfoV8Pckg* infoV8Pckg = (RMobileCall::TMobileCallInfoV8Pckg*)aInfo; + RMobileCall::TMobileCallInfoV8& infoV8 = (*infoV8Pckg)(); + infoV8.iSecurity = DMMTSY_CALL_SECURITY; + infoV8.iCallParamOrigin = DMMTSY_CALL_ORIGIN; + infoV8.iIconId.iQualifier = DMMTSY_CALL_ICON_ID_QUALIFIER; + infoV8.iIconId.iIdentifier = DMMTSY_CALL_ICON_ID_IDENTIFIER; + infoV8.iAlphaId = DMMTSY_CALL_ALPHA_ID; + infoV8.iParamsCallControlModified = DMMTSY_CALL_PARAMS_CALL_CONTROL_MODIFIED; + infoV8.iSubAddress = DMMTSY_CALL_SUBADDRESS; + infoV8.iBearerCap1 = DMMTSY_CALL_BEARER_CAP1; + infoV8.iBearerCap2 = DMMTSY_CALL_BEARER_CAP2; + infoV8.iBCRepeatIndicator = DMMTSY_CALL_BC_REPEAT_INDICATOR; + } + + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::GetMobileCallInfoCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::GetMobileCallInfoCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyRemotePartyInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aRemotePartyInfo) + { + if (!iNotifyRemotePartyInfoChange++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyRemotePartyInfoChange called")); + RMobileCall::TMobileCallRemotePartyInfoV1Pckg* infoV1Pckg = (RMobileCall::TMobileCallRemotePartyInfoV1Pckg*)aRemotePartyInfo; + RMobileCall::TMobileCallRemotePartyInfoV1& infoV1 = (*infoV1Pckg)(); + + infoV1.iRemoteIdStatus=DMMTSY_CALL_REMOTEPARTYSTATUS2; + infoV1.iRemoteNumber.iTelNumber=DMMTSY_CALL_EMPTY_STRING; + infoV1.iDirection=DMMTSY_CALL_REMOTEPARTYDIRECTION2; + infoV1.iCallingName=DMMTSY_CALL_EMPTY_STRING; + + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyRemotePartyInfoChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyRemotePartyInfoChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::DialNoFdnCheck(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) + /** + * This method dials the number specified by aNumber. The number used for dialling + * is not checked against those in the Fixed Dialling Number list even if the FDN service is enabled + * + * @param aCallParams Supplies the call parameters for the dial request + * @param aNumber Supplies the number to dial + */ + + { + LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheck called")); + + TInt error = ValidateCallParams(aCallParams); + + if((error != KErrNone) || (aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + { + LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheck CallParams and DialNumber validated")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + + return KErrNone; + } + +TInt CCallDMmTsy::DialNoFdnCheckCancel(const TTsyReqHandle aTsyReqHandle) + /** + * This method cancels the dialling of the number specified by aNumber. The number used for dialling + * is not checked against those in the Fixed Dialling Number list even if the FDN service is enabled + */ + { + LOGTEXT(_L8("CCallDMmTsy::DialNoFdnCheckCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::DialCallControl(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) +/** + * This method dials the number specified by aNumber. Dialling via + * this function allows the TSY to know that the dial request is + * the result of call control. + * + * @param aCallParams Supplies the call parameters for the dial request + * @param aNumber Supplies the number to dial + */ + + { + LOGTEXT(_L8("CCallDMmTsy::DialCallControl called")); + + TInt error = ValidateCallParams(aCallParams); // Check V1 params + + // TODO need to validate the other params + + if((error != KErrNone) || (aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER) != 0)) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + { + LOGTEXT(_L8("CCallDMmTsy::DialCallControl CallParams and DialNumber validated")); + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + + return KErrNone; + } + +TInt CCallDMmTsy::DialCallControlCancel(const TTsyReqHandle aTsyReqHandle) +/** + * This method cancels the dialling of the number specified by aNumber. + */ + { + LOGTEXT(_L8("CCallDMmTsy::DialCallControlCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::DialEmergencyCall(const TTsyReqHandle aTsyReqHandle, TDesC* aNumber) + { + LOGTEXT(_L8("CCallDMmTsy::DialEmergencyCall called")); + if(aNumber->Compare(DMMTSY_EN_STORE_AMBULANCE_NUM) != 0) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + ReqCompleted(aTsyReqHandle,KErrNone); + + return KErrNone; + } + +TInt CCallDMmTsy::DialEmergencyCallCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::DialEmergencyCallCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::DialISV(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC* aNumber) + { + LOGTEXT(_L8("CCallDMmTsy::DialISV called")); + + TInt error = KErrNone; + + if(aCallParams) + { + + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg* callparamsPckg= + reinterpret_cast(const_cast(aCallParams)); + RMobileCall::TEtel3rdPartyMobileCallParamsV1& callparams=(*callparamsPckg)(); + + // check that the request is a 3rd party request + if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) + { + LOGTEXT(_L8("CCallDMmTsy::DIALISV, request from 3rd party.")); + + //Validate parameters + if ((aNumber->Compare(DMMTSY_PHONE_TEL_NUMBER)!=KErrNone) || + (callparams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || + (callparams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG)) + { + error=KErrCorrupt; + } + } + else + { + LOGTEXT(_L8("CCallDMmTsy::DIALISV, request from non-3rd party.")); + error = KErrAccessDenied; + } + } + + else + { // No call parms data + error = KErrCorrupt; + } + + + if (error != KErrNone) + ReqCompleted(aTsyReqHandle,error); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + + } + +TInt CCallDMmTsy::DialISVCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::DialISVCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + + + +TInt CCallDMmTsy::ActivateCCBS(const TTsyReqHandle aTsyReqHandle, TInt* aIndex) + { + LOGTEXT(_L8("CCallDMmTsy::ActivateCCBS called")); + *aIndex=DMMTSY_PHONE_CCC_INDEX1; + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::ActivateCCBSCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::ActivateCCBSCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::RejectCCBS(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::RejectCCBS called")); + ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + +TInt CCallDMmTsy::GetUUSCaps(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps) + { + LOGTEXT(_L8("CCallDMmTsy::GetUUSCaps called")); + *aCaps = DMMTSY_CALL_UUS_CAPS; + + iPhone->AddDelayedReq(aTsyReqHandle,this); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyUUSCapsChange(const TTsyReqHandle aTsyReqHandle, TUint32* aCaps) + { + if (!iNotifyUUSCapsChange++) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyUUSCapsChange called")); + *aCaps = DMMTSY_CALL_UUS_CAPS; + + iPhone->AddDelayedReq(aTsyReqHandle,this); + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyUUSCapsChangeCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyUUSCapsChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::ValidateCallParams(TDesC8* aCallParams) + { + TInt error = KErrNone; + + RCall::TCallParamsPckg* paramsPckgV1 = (RCall::TCallParamsPckg*)aCallParams; + RCall::TCallParams& paramsV1 = (*paramsPckgV1)(); + + iDataCallParams.iSpeakerControl = paramsV1.iSpeakerControl; + iDataCallParams.iSpeakerVolume = paramsV1.iSpeakerVolume; + iDataCallParams.iInterval = paramsV1.iInterval; + iDataCallParams.iWaitForDialTone = paramsV1.iWaitForDialTone; + iMobileCallParams.iSpeakerControl = paramsV1.iSpeakerControl; + iMobileCallParams.iSpeakerVolume = paramsV1.iSpeakerVolume; + iMobileCallParams.iInterval = paramsV1.iInterval; + iMobileCallParams.iWaitForDialTone = paramsV1.iWaitForDialTone; + + if(paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV1) + { + if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) + error=KErrCorrupt; + + RMobileCall::TMobileCallParamsV1Pckg* mmParamsPckgV1 = (RMobileCall::TMobileCallParamsV1Pckg*)aCallParams; + RMobileCall::TMobileCallParamsV1& mmParamsV1 = (*mmParamsPckgV1)(); + + iMobileCallParams.iIdRestrict = mmParamsV1.iIdRestrict; + iMobileCallParams.iCug = mmParamsV1.iCug; + iMobileCallParams.iAutoRedial = mmParamsV1.iAutoRedial; + + if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || + (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || + (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || + (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || + (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || + (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG)) + + error=KErrCorrupt; + } + else if(paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV2) + { + if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) + error=KErrCorrupt; + + RMobileCall::TMobileCallParamsV2Pckg* mmParamsPckgV2 = (RMobileCall::TMobileCallParamsV2Pckg*)aCallParams; + RMobileCall::TMobileCallParamsV2& mmParamsV2 = (*mmParamsPckgV2)(); + + iMobileCallParams.iIdRestrict = mmParamsV2.iIdRestrict; + iMobileCallParams.iCug = mmParamsV2.iCug; + iMobileCallParams.iAutoRedial = mmParamsV2.iAutoRedial; + iMobileCallParams.iBearerMode = mmParamsV2.iBearerMode; + + if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || + (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || + (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || + (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || + (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || + (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG) || + (iMobileCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER)) + { + error=KErrCorrupt; + } + } + else if (paramsV1.ExtensionId()==RMobileCall::KETelMobileCallParamsV7) + { + if (iMobileCallParams.iInterval != DMMTSY_CALL_INTERVAL) + error=KErrCorrupt; + + RMobileCall::TMobileCallParamsV7Pckg* mmParamsPckgV7 = (RMobileCall::TMobileCallParamsV7Pckg*)aCallParams; + RMobileCall::TMobileCallParamsV7& mmParamsV7 = (*mmParamsPckgV7)(); + + iMobileCallParams.iIdRestrict = mmParamsV7.iIdRestrict; + iMobileCallParams.iCug = mmParamsV7.iCug; + iMobileCallParams.iAutoRedial = mmParamsV7.iAutoRedial; + iMobileCallParams.iBearerMode = mmParamsV7.iBearerMode; + iMobileCallParams.iCallParamOrigin = mmParamsV7.iCallParamOrigin; + iMobileCallParams.iSubAddress = mmParamsV7.iSubAddress; + iMobileCallParams.iBearerCap1 = mmParamsV7.iBearerCap1; + iMobileCallParams.iBearerCap2 = mmParamsV7.iBearerCap2; + iMobileCallParams.iBCRepeatIndicator = mmParamsV7.iBCRepeatIndicator; + iMobileCallParams.iIconId.iQualifier = mmParamsV7.iIconId.iQualifier; + iMobileCallParams.iIconId.iIdentifier = mmParamsV7.iIconId.iIdentifier; + iMobileCallParams.iAlphaId = mmParamsV7.iAlphaId; + + if ((iMobileCallParams.iIdRestrict != DMMTSY_CALL_CLI_RESTRICT_SETTING1) || + (iMobileCallParams.iCug.iExplicitInvoke != DMMTSY_CALL_CUG_INVOKE) || + (iMobileCallParams.iCug.iCugIndex != DMMTSY_CALL_CUG_INDEX) || + (iMobileCallParams.iCug.iSuppressOA != DMMTSY_CALL_CUG_OA) || + (iMobileCallParams.iCug.iSuppressPrefCug != DMMTSY_CALL_CUG_PREF) || + (iMobileCallParams.iAutoRedial != DMMTSY_CALL_AUTO_REDIAL_FLAG) || + (iMobileCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER) || + (iMobileCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || + (iMobileCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || + (iMobileCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || + (iMobileCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR) || + (iMobileCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || + (iMobileCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || + (iMobileCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) + { + error=KErrCorrupt; + } + } + + if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV1) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV2) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8)) + { + RMobileCall::TMobileDataCallParamsV1Pckg* dataParamsPckgV1 = (RMobileCall::TMobileDataCallParamsV1Pckg*)aCallParams; + RMobileCall::TMobileDataCallParamsV1& dataParamsV1 = (*dataParamsPckgV1)(); + + iDataCallParams.iService = dataParamsV1.iService; + iDataCallParams.iSpeed = dataParamsV1.iSpeed; + iDataCallParams.iProtocol = dataParamsV1.iProtocol; + iDataCallParams.iQoS = dataParamsV1.iQoS; + iDataCallParams.iRLPVersion = dataParamsV1.iRLPVersion; + iDataCallParams.iV42bisReq = dataParamsV1.iV42bisReq; + iDataCallParams.iUseEdge = dataParamsV1.iUseEdge; + + if ((iDataCallParams.iService != DMMTSY_DATA_CALL_SERVICE) || + (iDataCallParams.iSpeed != DMMTSY_DATA_CALL_SPEED) || + (iDataCallParams.iProtocol != DMMTSY_DATA_CALL_PROTOCOL) || + (iDataCallParams.iQoS != DMMTSY_DATA_CALL_QOS) || + (iDataCallParams.iRLPVersion != DMMTSY_DATA_CALL_RLP) || + (iDataCallParams.iV42bisReq != DMMTSY_DATA_CALL_V42BIS) || + (iDataCallParams.iUseEdge != DMMTSY_DATA_CALL_EGPRS_REQUIRED)) + + error=KErrCorrupt; + } + + if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV2) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8)) + { + RMobileCall::TMobileDataCallParamsV2Pckg* dataParamsPckgV2 = (RMobileCall::TMobileDataCallParamsV2Pckg*)aCallParams; + RMobileCall::TMobileDataCallParamsV2& dataParamsV2 = (*dataParamsPckgV2)(); + + iDataCallParams.iBearerMode = dataParamsV2.iBearerMode; + + if (iDataCallParams.iBearerMode != DMMTSY_PHONE_MULTICALLBEARERMODE_NOTSUPPORTED) + + error=KErrCorrupt; + } + if (paramsV1.ExtensionId()==RMobileCall::KETelMobileDataCallParamsV8) + { + RMobileCall::TMobileDataCallParamsV8Pckg* dataParamsPckgV8 = (RMobileCall::TMobileDataCallParamsV8Pckg*)aCallParams; + RMobileCall::TMobileDataCallParamsV8& dataParamsV8 = (*dataParamsPckgV8)(); + + iDataCallParams.iCallParamOrigin = dataParamsV8.iCallParamOrigin; + iDataCallParams.iSubAddress = dataParamsV8.iSubAddress; + iDataCallParams.iBearerCap1 = dataParamsV8.iBearerCap1; + iDataCallParams.iBearerCap2 = dataParamsV8.iBearerCap2; + iDataCallParams.iBCRepeatIndicator = dataParamsV8.iBCRepeatIndicator; + iDataCallParams.iIconId.iIdentifier = dataParamsV8.iIconId.iIdentifier; + iDataCallParams.iIconId.iQualifier = dataParamsV8.iIconId.iQualifier; + iDataCallParams.iAlphaId = dataParamsV8.iAlphaId; + + if ((iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || + (iDataCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || + (iDataCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || + (iDataCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || + (iDataCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR)|| + (iDataCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || + (iDataCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || + (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) + + error=KErrCorrupt; + } + + if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV1) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV2) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) + { + RMobileCall::TMobileHscsdCallParamsV1Pckg* hscsdParamsPckgV1 = (RMobileCall::TMobileHscsdCallParamsV1Pckg*)aCallParams; + RMobileCall::TMobileHscsdCallParamsV1& hscsdParamsV1 = (*hscsdParamsPckgV1)(); + + iDataCallParams.iWantedAiur = hscsdParamsV1.iWantedAiur; + iDataCallParams.iWantedRxTimeSlots = hscsdParamsV1.iWantedRxTimeSlots; + iDataCallParams.iMaxTimeSlots = hscsdParamsV1.iMaxTimeSlots; + iDataCallParams.iCodings = hscsdParamsV1.iCodings; + iDataCallParams.iAsymmetry = hscsdParamsV1.iAsymmetry; + iDataCallParams.iUserInitUpgrade = hscsdParamsV1.iUserInitUpgrade; + + if ((iDataCallParams.iWantedAiur != DMMTSY_CALL_HCSD_AIUR) || + (iDataCallParams.iWantedRxTimeSlots != DMMTSY_CALL_HCSD_TS) || + (iDataCallParams.iMaxTimeSlots != DMMTSY_CALL_HCSD_MAXTS) || + (iDataCallParams.iCodings != DMMTSY_CALL_HCSD_CODING) || + (iDataCallParams.iAsymmetry != DMMTSY_CALL_HCSD_ASYMMETRY) || + (iDataCallParams.iUserInitUpgrade != DMMTSY_CALL_HCSD_USER_IMI)) + + error=KErrCorrupt; + } + if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV2) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) + { + RMobileCall::TMobileHscsdCallParamsV2Pckg* hscsdParamsPckgV2 = (RMobileCall::TMobileHscsdCallParamsV2Pckg*)aCallParams; + RMobileCall::TMobileHscsdCallParamsV2& hscsdParamsV2 = (*hscsdParamsPckgV2)(); + + iDataCallParams.iBearerMode = hscsdParamsV2.iBearerMode; + + if ((iDataCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER)) + + error=KErrCorrupt; + } + + if ((paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV7) || + (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8)) + { + RMobileCall::TMobileHscsdCallParamsV7Pckg* hscsdParamsPckgV7 = (RMobileCall::TMobileHscsdCallParamsV7Pckg*)aCallParams; + RMobileCall::TMobileHscsdCallParamsV7& hscsdParamsV7 = (*hscsdParamsPckgV7)(); + + iDataCallParams.iCallParamOrigin = hscsdParamsV7.iCallParamOrigin; + iDataCallParams.iIconId = hscsdParamsV7.iIconId; + iDataCallParams.iAlphaId = hscsdParamsV7.iAlphaId; + + if ((iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || + (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)) + + error=KErrCorrupt; + } + + if (paramsV1.ExtensionId()==RMobileCall::KETelMobileHscsdCallParamsV8) + { + RMobileCall::TMobileHscsdCallParamsV8Pckg* hscsdParamsPckgV8 = (RMobileCall::TMobileHscsdCallParamsV8Pckg*)aCallParams; + RMobileCall::TMobileHscsdCallParamsV8& hscsdParamsV8 = (*hscsdParamsPckgV8)(); + + iDataCallParams.iBearerMode = hscsdParamsV8.iBearerMode; + iDataCallParams.iCallParamOrigin = hscsdParamsV8.iCallParamOrigin; + iDataCallParams.iIconId.iIdentifier = hscsdParamsV8.iIconId.iIdentifier; + iDataCallParams.iIconId.iQualifier = hscsdParamsV8.iIconId.iQualifier; + iDataCallParams.iAlphaId = hscsdParamsV8.iAlphaId; + iDataCallParams.iSubAddress = hscsdParamsV8.iSubAddress; + iDataCallParams.iBearerCap1 = hscsdParamsV8.iBearerCap1; + iDataCallParams.iBearerCap2 = hscsdParamsV8.iBearerCap2; + iDataCallParams.iBCRepeatIndicator = hscsdParamsV8.iBCRepeatIndicator; + + if ((iDataCallParams.iBearerMode != DMMTSY_CALL_NEW_BEARER) || + (iDataCallParams.iCallParamOrigin != DMMTSY_CALL_PARAM_ORIGIN) || + (iDataCallParams.iIconId.iIdentifier != DMMTSY_CALL_ICON_ID_IDENTIFIER) || + (iDataCallParams.iIconId.iQualifier != DMMTSY_CALL_ICON_ID_QUALIFIER) || + (iDataCallParams.iAlphaId != DMMTSY_CALL_ALPHA_ID)|| + (iDataCallParams.iSubAddress != DMMTSY_CALL_SUBADDRESS) || + (iDataCallParams.iBearerCap1 != DMMTSY_CALL_BEARER_CAP1) || + (iDataCallParams.iBearerCap2 != DMMTSY_CALL_BEARER_CAP2) || + (iDataCallParams.iBCRepeatIndicator != DMMTSY_CALL_BC_REPEAT_INDICATOR)) + { + error = KErrCorrupt; + } + } + + return error; + } + +TInt CCallDMmTsy::ActivateUUS(const TTsyReqHandle aTsyReqHandle, TDes8* aUUIRequest) + { + LOGTEXT(_L8("CCallDMmTsy::ActivateUUS called")); + + RMobileCall::TMobileCallUUSRequestV1Pckg* uuiReqPckg = (RMobileCall::TMobileCallUUSRequestV1Pckg*)aUUIRequest; + RMobileCall::TMobileCallUUSRequestV1& uuiReq = (*uuiReqPckg)(); + + if((uuiReq.iServiceReq != DMMTSY_CALL_UUI_SERVICE_REQ) || + (uuiReq.iUUI.Compare(DMMTSY_CALL_UUI_INFO_DIAL) !=0 )) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::ActivateUUSCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::ActivateUUSDuringCallCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::SendUUI(const TTsyReqHandle aTsyReqHandle, TBool* aMore, TDesC16* aUUI) + { + LOGTEXT(_L8("CCallDMmTsy::SendUUI called")); + if( (aUUI->Compare(DMMTSY_CALL_UUI_INFO) != 0) || + (*aMore != DMMTSY_CALL_UUI_MORE_INFO) ) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::SendUUICancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::SendUUICancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::ReceiveUUI(const TTsyReqHandle aTsyReqHandle, TDes16* aUUI) + { + LOGTEXT(_L8("CCallDMmTsy::ReceiveUUI called")); + + aUUI->Copy(DMMTSY_CALL_UUI_INFO); + + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::ReceiveUUICancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::ReceiveUUICancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::HangupWithUUI(const TTsyReqHandle aTsyReqHandle, TDesC16* aUUI) + { + LOGTEXT(_L8("CCallDMmTsy::HangupWithUUI called")); + + if(aUUI->Compare(DMMTSY_CALL_UUI_INFO_HANGUP) != 0) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle, this); + + return KErrNone; + } + +TInt CCallDMmTsy::HangupWithUUICancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::HangupWithUUICancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::AnswerIncomingCallWithUUI(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDesC16* aUUI) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallWithUUI called")); + + TInt error = ValidateCallParams(aCallParams); + + if((error != KErrNone) || (aUUI->Compare(DMMTSY_CALL_UUI_INFO_ANSWER) != 0)) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::AnswerIncomingCallWithUUICancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallWithUUICancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + + +TInt CCallDMmTsy::AnswerMultimediaCallAsVoice(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams, TDes16* aCallName) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerMultimediaCallAsVoice called")); + + TInt error = ValidateCallParams(aCallParams); + + *aCallName=DMMTSY_LINE_VOICE_NAME; + if(error != KErrNone) + ReqCompleted(aTsyReqHandle,KErrCorrupt); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + } + +TInt CCallDMmTsy::AnswerMultimediaCallAsVoiceCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerMultimediaCallAsVoiceCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::AnswerIncomingCallISV(const TTsyReqHandle aTsyReqHandle, TDesC8* aCallParams) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallISV called")); + + TInt error = KErrNone; + + if(aCallParams) + { + + RMobileCall::TEtel3rdPartyMobileCallParamsV1Pckg* callparamsPckg= + reinterpret_cast(const_cast(aCallParams)); + RMobileCall::TEtel3rdPartyMobileCallParamsV1& callparams=(*callparamsPckg)(); + + // check that the request is a 3rd party request + if(callparams.ExtensionId() == RMobileCall::KETel3rdPartyCallParamsV1) + { + LOGTEXT(_L8("CCallDMmTsy::ANSWERINCOMINGCALLISV, request from 3rd party.")); + } + else + { + LOGTEXT(_L8("CCallDMmTsy::ANSWERINCOMINGCALLISV, request from non-3rd party.")); + error = KErrAccessDenied; + } + } + + else + { // No call parms data + error = KErrCorrupt; + } + + + if (error != KErrNone) + ReqCompleted(aTsyReqHandle,error); + else + iPhone->AddDelayedReq(aTsyReqHandle,this); + + return KErrNone; + + } + +TInt CCallDMmTsy::AnswerIncomingCallISVCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::AnswerIncomingCallISVCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CCallDMmTsy::NotifyAudioToneEvent(const TTsyReqHandle aTsyReqHandle, TDes8* aAudioTone) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyAudioToneEventChange called")); + + RMobileCall::TAudioToneV3Pckg* audioPckgV3 = (RMobileCall::TAudioToneV3Pckg*)aAudioTone; + RMobileCall::TAudioToneV3& audioTone = (*audioPckgV3)(); + + switch(iNotifyAudioToneEvent++) + { + case 0: + audioTone.iEvent = DMMTSY_AUDIO_START_TONE; + audioTone.iTone = DMMTSY_AUDIO_CONGESTION_TONE; + audioTone.iPlayedLocally = DMMTSY_AUDIO_PLAYED_LOCALLY; + ReqCompleted(aTsyReqHandle,KErrNone); + break; + case 1: + audioTone.iEvent = DMMTSY_AUDIO_STOP_TONE; + audioTone.iTone = DMMTSY_AUDIO_NO_TONE; + audioTone.iPlayedLocally = DMMTSY_AUDIO_PLAYED_LOCALLY; + iPhone->AddDelayedReq(aTsyReqHandle,this); + break; + default: + break; + } + return KErrNone; + } + +TInt CCallDMmTsy::NotifyAudioToneEventCancel(const TTsyReqHandle aTsyReqHandle) + { + LOGTEXT(_L8("CCallDMmTsy::NotifyAudioToneEventChangeCancel called")); + iPhone->RemoveDelayedReq(aTsyReqHandle); + ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + }