/**
 * 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 );
}