/** * INPUT: * Headers: Contact*, Content-Type*, Content-Encoding*, Route* * Parameters: Content* * IDs: InviteDialogId*, SubscribeDialogId* * * OUTPUT: * Parameters: - * IDs: TransactionId, InviteDialogId */ void TCmdSendInviteWithinDriver::ExecuteL() { // -- Setup --------------------------------------------------------------- // Get SIP objects from registry CSIPSubscribeDialogAssoc* subscribeDialogAssoc = GetSubscribeDialogAssocL( EFalse ); // If there was a SubscribeDialogId, use it to create a new InviteDialogAssoc // If not, try to use a InviteDialogId for an existing InviteDialogAssoc CSIPInviteDialogAssoc* inviteDialogAssocOrg; CSIPInviteDialogAssoc* inviteDialogAssoc; if( subscribeDialogAssoc ) { // Create a new dialog association inviteDialogAssoc = CSIPInviteDialogAssoc::NewLC( subscribeDialogAssoc->Dialog() ); } else { // Get invitedialog inviteDialogAssocOrg = GetInviteDialogAssocL(); // Create a new dialog association inviteDialogAssoc = CSIPInviteDialogAssoc::NewLC( inviteDialogAssocOrg->Dialog() ); } // Extract both headers (that are still left) and content. CSIPMessageElements* elements = ExtractHeadersAndContentLC(); // -- Execution ----------------------------------------------------------- // Start SIP Invite transaction. CSIPClientTransaction* transaction = inviteDialogAssoc->SendInviteL( elements ); CleanupStack::Pop( elements ); // -- Response creation --------------------------------------------------- AddIdResponseL( KTransactionId, transaction ); // If subscribeDialogAssoc is valid, inviteDialogAssoc ptr is in CleanupStack if( subscribeDialogAssoc ) { CleanupStack::Pop( inviteDialogAssoc ); } AddIdResponseL( KInviteDialogId, inviteDialogAssoc ); }