30 CRequestQueueOneShot& aRequestAsyncOneShot) |
30 CRequestQueueOneShot& aRequestAsyncOneShot) |
31 : iLtsyFactoryV1(aLtsyFactory), |
31 : iLtsyFactoryV1(aLtsyFactory), |
32 iMessageManagerCallback(aMessageManagerCallback), |
32 iMessageManagerCallback(aMessageManagerCallback), |
33 iRequestAsyncOneShot(aRequestAsyncOneShot), |
33 iRequestAsyncOneShot(aRequestAsyncOneShot), |
34 iFoundDtmfStop(EFalse), iModeUsedForVoiceCallDial(RMobilePhone::EServiceUnspecified), |
34 iFoundDtmfStop(EFalse), iModeUsedForVoiceCallDial(RMobilePhone::EServiceUnspecified), |
35 iFdnCheckPerformed(EFalse),iSwapHeldCallId(KInvalidCallId), |
35 iFdnCheckPerformed(EFalse),iSwapCallId(KInvalidCallId), |
36 iSwapConnectedCallId(KInvalidCallId),iTransferHeldCallId(KInvalidCallId), |
36 iSecondSwapCallId(KInvalidCallId),iTransferHeldCallId(KInvalidCallId), |
37 iTransferSecondCallId(KInvalidCallId) |
37 iTransferSecondCallId(KInvalidCallId) |
38 { |
38 { |
39 iDtmfString.Zero(); |
39 iDtmfString.Zero(); |
40 } // CCallControlDispatcher::CCallControlDispatcher |
40 } // CCallControlDispatcher::CCallControlDispatcher |
41 |
41 |
235 iLtsyDispatchCallControlSwap = |
235 iLtsyDispatchCallControlSwap = |
236 static_cast<MLtsyDispatchCallControlSwap*>(swapInterface); |
236 static_cast<MLtsyDispatchCallControlSwap*>(swapInterface); |
237 __ASSERT_DEBUG(iLtsyDispatchCallControlSwap, CtsyDispatcherPanic(EInvalidNullPtr)); |
237 __ASSERT_DEBUG(iLtsyDispatchCallControlSwap, CtsyDispatcherPanic(EInvalidNullPtr)); |
238 } |
238 } |
239 |
239 |
|
240 if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCallControlFuncUnitId, MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId)) |
|
241 { |
|
242 TAny* swapInterface = NULL; |
|
243 iLtsyFactoryV1.GetDispatchHandler( |
|
244 MLtsyDispatchCallControlSwap::KLtsyDispatchCallControlSingleSwapApiId, |
|
245 swapInterface); |
|
246 iLtsyDispatchCallControlSingleSwap = |
|
247 static_cast<MLtsyDispatchCallControlSwap*>(swapInterface); |
|
248 __ASSERT_DEBUG(iLtsyDispatchCallControlSingleSwap, CtsyDispatcherPanic(EInvalidNullPtr)); |
|
249 } |
|
250 |
240 if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCallControlFuncUnitId, MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId)) |
251 if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCallControlFuncUnitId, MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId)) |
241 { |
252 { |
242 TAny* loanDataPortInterface = NULL; |
253 TAny* loanDataPortInterface = NULL; |
243 iLtsyFactoryV1.GetDispatchHandler( |
254 iLtsyFactoryV1.GetDispatchHandler( |
244 MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId, |
255 MLtsyDispatchCallControlLoanDataPort::KLtsyDispatchCallControlLoanDataPortApiId, |
837 |
848 |
838 if (iLtsyDispatchCallControlSwap) |
849 if (iLtsyDispatchCallControlSwap) |
839 { |
850 { |
840 const CCallDataPackage* dataPackage = static_cast<const CCallDataPackage*>(aDataPackage); |
851 const CCallDataPackage* dataPackage = static_cast<const CCallDataPackage*>(aDataPackage); |
841 RMobilePhone::TMobileService mode; |
852 RMobilePhone::TMobileService mode; |
842 dataPackage->GetCallIdAndMode(iSwapHeldCallId, mode); |
853 dataPackage->GetCallIdAndMode(iSwapCallId, mode); |
843 dataPackage->UnPackData(iSwapConnectedCallId); |
854 dataPackage->UnPackData(iSecondSwapCallId); |
844 ret = iLtsyDispatchCallControlSwap->HandleSwapReqL(iSwapHeldCallId, iSwapConnectedCallId); |
855 |
|
856 if (iSwapCallId == KInvalidCallId) |
|
857 { |
|
858 // Swapping a single call. |
|
859 ret = iLtsyDispatchCallControlSwap->HandleSwapReqL(iSecondSwapCallId); |
|
860 } |
|
861 else if (iSecondSwapCallId == KInvalidCallId) |
|
862 { |
|
863 // Swapping a single call. |
|
864 ret = iLtsyDispatchCallControlSwap->HandleSwapReqL(iSwapCallId); |
|
865 } |
|
866 else |
|
867 { |
|
868 ret = iLtsyDispatchCallControlSwap->HandleSwapReqL(iSwapCallId, iSecondSwapCallId); |
|
869 } |
845 } |
870 } |
846 |
871 |
847 return TSYLOGSETEXITERR(ret); |
872 return TSYLOGSETEXITERR(ret); |
848 } // CCallControlDispatcher::DispatchSwapL |
873 } // CCallControlDispatcher::DispatchSwapL |
849 |
874 |
1649 } |
1674 } |
1650 |
1675 |
1651 if (iTransferSecondCallId != KInvalidCallId) |
1676 if (iTransferSecondCallId != KInvalidCallId) |
1652 { |
1677 { |
1653 dataPackage.SetCallIdAndMode(iTransferSecondCallId, RMobilePhone::EServiceUnspecified); |
1678 dataPackage.SetCallIdAndMode(iTransferSecondCallId, RMobilePhone::EServiceUnspecified); |
1654 iSwapConnectedCallId = KInvalidCallId; |
1679 iSecondSwapCallId = KInvalidCallId; |
1655 iMessageManagerCallback.Complete(EMobileCallTransfer, &dataPackage, aError); |
1680 iMessageManagerCallback.Complete(EMobileCallTransfer, &dataPackage, aError); |
1656 } |
1681 } |
1657 |
1682 |
1658 } // CCallControlDispatcher::CallbackTransfer |
1683 } // CCallControlDispatcher::CallbackTransfer |
1659 |
1684 |
1724 // no reqHandle for this IPC so calling both here is OK. |
1749 // no reqHandle for this IPC so calling both here is OK. |
1725 |
1750 |
1726 // Check in case LTSY has completed a swap when no swap was called |
1751 // Check in case LTSY has completed a swap when no swap was called |
1727 // Don't complete back to CTSY in this case |
1752 // Don't complete back to CTSY in this case |
1728 |
1753 |
1729 if (iSwapHeldCallId != KInvalidCallId) |
1754 if (iSwapCallId != KInvalidCallId) |
1730 { |
1755 { |
1731 dataPackage.SetCallIdAndMode(iSwapHeldCallId, RMobilePhone::EServiceUnspecified); |
1756 dataPackage.SetCallIdAndMode(iSwapCallId, RMobilePhone::EServiceUnspecified); |
1732 iSwapHeldCallId = KInvalidCallId; |
1757 iSwapCallId = KInvalidCallId; |
1733 iMessageManagerCallback.Complete(EMobileCallSwap, &dataPackage, aError); |
1758 iMessageManagerCallback.Complete(EMobileCallSwap, &dataPackage, aError); |
1734 } |
1759 } |
1735 |
1760 |
1736 if (iSwapConnectedCallId != KInvalidCallId) |
1761 if (iSecondSwapCallId != KInvalidCallId) |
1737 { |
1762 { |
1738 dataPackage.SetCallIdAndMode(iSwapConnectedCallId, RMobilePhone::EServiceUnspecified); |
1763 dataPackage.SetCallIdAndMode(iSecondSwapCallId, RMobilePhone::EServiceUnspecified); |
1739 iSwapConnectedCallId = KInvalidCallId; |
1764 iSecondSwapCallId = KInvalidCallId; |
1740 iMessageManagerCallback.Complete(EMobileCallSwap, &dataPackage, aError); |
1765 iMessageManagerCallback.Complete(EMobileCallSwap, &dataPackage, aError); |
1741 } |
1766 } |
1742 |
1767 |
1743 } |
1768 } |
1744 |
1769 |