This tutorial describes how to swap calls with the telephony API for applications.
#include <e32base.h> #include <Etel3rdParty.h> class CClientApp : public CActive { private: CTelephony* iTelephony; CTelephony::TCallId iCallIdA; CTelephony::TCallId iCallIdB; public: CClientApp(CTelephony* aTelephony, CTelephony::TCallId aCallIdA, CTelephony::TCallId aCallIdB); TInt SomeFunction(); private: /* These are the pure virtual methods from CActive that MUST be implemented by all active objects */ void RunL(); void DoCancel(); }; CClientApp::CClientApp(CTelephony* aTelephony, CTelephony::TCallId aCallId) : CActive(EPriorityStandard), iTelephony(aTelephony), iCallIdA(aCallIdA) iCallIdB(aCallIdB) { //default constructor } TInt CClientApp::SomeFunction() { // Check that the phone supports Resuming calls. CTelephony::TCallCapsV1 callCapsV1; CTelephony::TCallCapsV1Pckg callCapsV1Pckg(callCapsV1); iTelephony->GetCallDynamicCaps(iCallId, callCapsV1Pckg); if( callCapsV1.iControlCaps & CTelephony::KCapsSwap ) { // The call represented by 'iCallId' can be swapped iTelephony->Swap(iStatus, iCallIdA, iCallIdB); SetActive(); return KErrNone; } else { // The call cannot be swapped; // return an error indicate this. return KErrNotSupported; } } void CClientApp::RunL() { if(iStatus==KErrNone) {} // The call has been swapped successfully; } void CClientApp::DoCancel() { iTelephony->CancelAsync(CTelephony::ESwapCancel); }