vtengines/vtmediatorplugin/src/cvtmediatorplugin.cpp
changeset 18 d9b6a8729acd
parent 4 6dc066157ed4
child 23 c378a0498b84
child 27 dcbddbbaf8fd
--- a/vtengines/vtmediatorplugin/src/cvtmediatorplugin.cpp	Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1024 +0,0 @@
-/*
-* Copyright (c) 2008 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:  Video Telephony mediator plugin header
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32def.h>
-#include <w32std.h>
-#include <apacmdln.h>
-#include <apaflrec.h>
-#include <apgcli.h>
-#include <MediatorDomainUIDs.h>
-#include <eikdll.h>
-#include <apgcli.h>
-#include <apgwgnam.h>
-#include <apgtask.h>
-#include <mediatorcommandstotelephonyapi.h>
-#include <videotelcontrolmediatorapi.h>
-#include <videoteltophonecommandsapi.h>
-#include "cvtmediatorplugin.h"
-
-
-// CONSTANTS
-#ifdef _DEBUG
-#define TRACE(x) RDebug::Print( _L(x) );
-#define TRACE2(x,y) RDebug::Print( _L(x),y );
-#else
-#define TRACE(x)
-#define TRACE2(x,y)
-#endif
-                       
-// This array's values are used in algorithm defining if video telephone
-// application should be started. Previous state value is substracted from new 
-// state value and if result is greater than zero, app is started.
-// This tackles transitions where a state is for some reason skipped,
-// e.g. idle -> connected (dialling/ringing/answering states were not detected).
-// Negative value indicates call clearing.
-static const TInt KVtCallStateActionArray[] = {
-    0, //ECallStateUnknown
-    0, //ECallStateIdle
-    1, // ECallStateDialling
-    0, // ECallStateEmergencyDialling (not valid video call state)
-    1, // ECallStateRinging
-    1, // ECallStateConnecting
-    1, // ECallStateConnected
-    0, // ECallStateHangingUp
-    0, // ECallStateHeld (not valid video call state)
-    1, // ECallStateAnswering
-    0, // ECallStateRejecting
-    0  // ECallStateDisconnecting
-    };
-
-static const TInt KVtAppNotReady = 5000;
-
-static const TInt KVtEngMdtrCmdTimeout = 500000;
-
-static const TInt KVtInitCallId = -1000;
-
-// array granularity is 2 (use dataport, release dataport commands)
-static const TInt KVtMdtrCmdArrayGranularity = 2;
-
-const TUid KVtCmVideoTelUiUid = { 0x101F8681 };
-
-static const TInt KRamNeededForVideoCalls = 4000000;
-
-// VT application path 
-_LIT( KVtCmVideoTelUiPath, "\\sys\\bin\\videotelui.exe" );
-
-
-// -----------------------------------------------------------------------------
-// CMediatorTestPlugin::CMediatorTestPlugin
-// First phase construction.
-// -----------------------------------------------------------------------------
-CVtMediatorPlugin::CVtMediatorPlugin() : CMediatorPluginBase(),
-    iCommandList( KVtMdtrCmdArrayGranularity ),
-    iState( EWaitingAppLaunch ),
-    iActiveVideoCallState( ECallStateUnknown ),
-    iWaitingVideoCallState( ECallStateUnknown )
-    
-	{
-	ClearData(iActiveVideoCallInfo, iActiveVideoCallState);
-	ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState);
-	}
-	
-CMediatorPluginBase* CVtMediatorPlugin::NewL()
-    {
-    TRACE("CVtMediatorPlugin::NewL<")
-    CVtMediatorPlugin* self = new (ELeave) CVtMediatorPlugin;
-    TRACE("CVtMediatorPlugin::NewL>")
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor.
-// -----------------------------------------------------------------------------
-CVtMediatorPlugin::~CVtMediatorPlugin()
-	{
-	TRACE("CVtMediatorPlugin::~CVtMediatorPlugin<")
-    
-	if ( iMediatorNotifications )
-	    {
-	    iMediatorNotifications->UnregisterNotificationObserver();
-	    delete iMediatorNotifications;
-	    }
-
-	// ignore error
-	if ( iEventConsumer )
-	    {
-	    iEventConsumer->UnsubscribeEvent(
-	            KMediatorTelephonyDomain,
-	            KCatEventsFromTelephony,
-	            EPhoneEventCallData );     
-	    delete iEventConsumer;
-	    }
-        
-    // ignore error     
-	if ( iEventProvider )
-	    {
-	    iEventProvider->UnregisterEvent(
-	            KMediatorVideoTelephonyDomain,
-	            KCatVideotelInternalEvents,
-	            EVtMediatorEventVideoCallInformation );   
-	    delete iEventProvider;
-	    }
-        
-    // ignore error
-	if ( iCommandResponder )
-	    {
-	    iCommandResponder->UnregisterCommand(
-	                KMediatorVideoTelephonyDomain,
-	                KCatPhoneToVideotelCommands,
-	                iCommandList );
-	    iCommandList.Close();
-	    delete iCommandResponder;
-	    }
-	
-	delete iCommandInitiator;
-    
-           
-    if( iAppDeathActive )
-        {
-        delete iAppDeathActive;
-        iAppThread.Close();
-        iWsSession.Close();
-        
-        }
-
-    TRACE("CVtMediatorPlugin::~CVtMediatorPlugin>")
-	}
-
-// -----------------------------------------------------------------------------
-// StartL.
-// -----------------------------------------------------------------------------
-void CVtMediatorPlugin::StartL()
-	{
-    TRACE("CVtMediatorPlugin.StartL<")
-    
-    // for monitoring VT app starting
-    iMediatorNotifications = CMediatorNotifications::NewL();
-    iMediatorNotifications->RegisterNotificationObserver( this );
-    
-    // consumer for call data events
-    iEventConsumer = CMediatorEventConsumer::NewL( this );
-    
-    iCommandInitiator = CMediatorCommandInitiator::NewL( this );
-    
-    
-    RegisterVtInternalEventL();
-    
-    RegisterDataportCommandL();       
-          
-    TRACE("CVtMediatorPlugin.StartL>")
-	}
-
-// -----------------------------------------------------------------------------
-// MediatorEventL.
-// -----------------------------------------------------------------------------
-void CVtMediatorPlugin::MediatorEventL( TUid /*aDomain*/,
-                             TUid aCategory,
-                             TInt aEventId,
-                             const TDesC8& aData )
-    {
-    TRACE("CVtMediatorPlugin.MediatorEventL<")
-    if ( aCategory == KCatEventsFromTelephony &&
-         aEventId == EPhoneEventCallData )
-        {
-        TTelephonyCallDataParamPackage pckg;
-        pckg.Copy( aData );
-        const TTelephonyCallDataParam telCallData = pckg();        
-        HandleCallStateChangeL( telCallData );        
-        }
-    TRACE("CVtMediatorPlugin.MediatorEventL>")
-    }
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::MediatorEventsAddedL
-//
-// subscribes to CLI event when it is registered
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorEventsAddedL( TUid aDomain/*aDomain*/,
-                                   TUid aCategory,
-                                   const REventList& aEvents )
-    {
-    TRACE("CVtMediatorPlugin.MediatorEventsAddedL<")
-    
-    if ( aCategory == KCatEventsFromTelephony )
-        {
-        ChangeCallDataEventSubscriptionL( aEvents, ETrue );
-        }    
-    TRACE("CVtMediatorPlugin.MediatorEventsAddedL>")
-    }
-
-// -----------------------------------------------------------------------------
-// ?classname::?member_function
-//
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorCommandsAddedL( TUid /*aDomain*/,
-                                     TUid aCategory,
-                                     const RCommandList& /*aCommands*/ )
-    {
-    TRACE("CVtMediatorPlugin.MediatorCommandsAddedL<")
-    if ( aCategory == KCatPhoneToVideotelCommands )
-        {
-        HandleVtCommandRegistrationL();
-        }
-    TRACE("CVtMediatorPlugin.MediatorCommandsAddedL>")
-    }
-
-// -----------------------------------------------------------------------------
-// ?classname::?member_function
-//
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorCategoryRemovedL( TUid /*aDomain*/,
-    TUid /*aCategory*/ )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// ?classname::?member_function
-//
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorEventsRemovedL( TUid /*aDomain*/,
-                                     TUid aCategory,
-                                     const REventList& aEvents )
-    {
-    TRACE("CVtMediatorPlugin.MediatorEventsRemovedL<")
-    if ( aCategory == KCatEventsFromTelephony )
-        {
-        ChangeCallDataEventSubscriptionL( aEvents, EFalse );
-        }    
-    TRACE("CVtMediatorPlugin.MediatorEventsRemovedL>")
-    }
-
-// -----------------------------------------------------------------------------
-// ?classname::?member_function
-//
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorCommandsRemovedL( TUid /*aDomain*/,
-                                       TUid aCategory,
-                                       const RCommandList& /*aCommands*/ )
-    {
-    TRACE("CVtMediatorPlugin.MediatorCommandsRemovedL<")  
-    if ( aCategory == KCatPhoneToVideotelCommands )
-        {
-        // VT has unregistered commands, meaning it is shutting down
-        HandleVtCommandUnregistrationL();
-        }
-    TRACE("CVtMediatorPlugin.MediatorCommandsRemovedL>")
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::MediatorCommandL
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::MediatorCommandL( TUid aDomain,
-                                 TUid aCategory, 
-                                 TInt aCommandId,
-                                 TVersion /*aVersion*/, 
-                                 const TDesC8& aData )
-    {
-    TRACE("CVtMediatorPlugin.MediatorCommandL<") 
-    if ( aCategory == KCatPhoneToVideotelCommands )
-        {
-        if ( aCommandId == EVtCmdUseDataport )
-            {
-#ifdef _DEBUG           
-            // error in responding is ignored but printed on debug build
-            const TInt err =
-#endif            
-            iCommandResponder->IssueResponse( 
-                aDomain, aCategory, aCommandId, KErrNone, KNullDesC8() );
-            TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdUseDataport err=%d", err )
-            HandleDataportCommandL( aData );
-            }
-        else if ( aCommandId == EVtCmdReleaseDataport )
-            {
-            if ( EReady == iState )
-                {
-                const TVersion version( 
-                        KVideotelMdtrCommandsVersionMajor,
-                        KVideotelMdtrCommandsVersionMinor,
-                        KVideotelMdtrCommandsVersionBuild );
-
-#ifdef _DEBUG           
-            // error in responding is ignored but printed on debug build
-            const TInt err =
-#endif                          
-                iCommandInitiator->IssueCommand(
-                        KMediatorVideoTelephonyDomain,
-                        KCatVideotelInternalCommands,
-                        EVtMediatorReleaseDataport,
-                        version,
-                        KNullDesC8() );
-            TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdReleaseDataport, send to VT err=%d", err )
-                
-                }
-            else
-                {
-#ifdef _DEBUG           
-                // error in responding is ignored but printed on debug build
-                const TInt err =
-#endif            
-                iCommandResponder->IssueResponse( 
-                        aDomain, 
-                        aCategory, 
-                        aCommandId, 
-                        KErrNone, 
-                        KNullDesC8() );
-                TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdReleaseDataport, just Resp err=%d", err ) 
-                }
-           
-            }
-        }
-    TRACE("CVtMediatorPlugin.MediatorCommandL>")
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CommandResponseL
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::CommandResponseL( TUid aDomain, TUid aCategory, 
-    TInt aCommandId, TInt /*aStatus*/, const TDesC8& /*aData*/ )
-    {
-    TRACE("CVtMediatorPlugin.CommandResponseL<")
-    if( ( aDomain == KMediatorVideoTelephonyDomain ) &&
-        ( aCategory == KCatVideotelInternalCommands ) )
-        {
-        TInt res =
-        iCommandResponder->IssueResponse( 
-                KMediatorVideoTelephonyDomain,
-                KCatPhoneToVideotelCommands,
-                EVtCmdReleaseDataport, 
-                KErrNone, 
-                KNullDesC8() );         
-         TRACE2("CVtMediatorPlugin.CommandResponseL, IssueResponse res: %d", res )  
-         User::LeaveIfError( res );      
-        }
-    TRACE("CVtMediatorPlugin.CommandResponseL>")
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CancelMediatorCommand
-//
-// no-op
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::CancelMediatorCommand( TUid /*aDomain*/,
-                                      TUid /*aCategory*/, 
-                                      TInt /*aCommandId*/ )
-    {
-    }
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::ChangeCallDataEventSubscriptionL
-//
-// Takes care of 'call data' event subscription.
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::ChangeCallDataEventSubscriptionL(
-    const REventList& aEvents,
-    const TBool aEventRegistered )
-    {
-    TRACE("CVtMediatorPlugin.ChangeCLIEventSubscription<")
-   
-    TInt res( KErrNone );
-    TInt eventCount = aEvents.Count();
-    while ( eventCount-- )
-        {
-        const TEvent& aEvent = aEvents[ eventCount ];
-        if ( aEvent.iEventId == EPhoneEventCallData )
-            {
-            if ( aEventRegistered )
-                {
-                // Phone has registered Call data event => subscribe it                
-                const TVersion version(
-                    KTelephonyEventsVersionMajor,
-                    KTelephonyEventsVersionMinor,
-                    KTelephonyEventsVersionBuild );
-                res = iEventConsumer->SubscribeEvent(
-                    KMediatorTelephonyDomain,
-                    KCatEventsFromTelephony,
-                    EPhoneEventCallData, version );
-                }
-            else
-                {
-                // Phone has unregistered Call data event => unsubscribe it
-                res = iEventConsumer->UnsubscribeEvent(
-                    KMediatorTelephonyDomain,
-                    KCatEventsFromTelephony,
-                    EPhoneEventCallData );
-                }
-            TRACE2("   (un)subscribe result=%d", res )
-            eventCount = 0; // break loop
-            }
-        }
-    
-    TRACE2("CVtMediatorPlugin.ChangeCLIEventSubscription result=%d>", res )
-    User::LeaveIfError( res );
-    }
-    
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::HandleVtCommandRegistrationL
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::HandleVtCommandRegistrationL()
-    {
-    TRACE("CVtMediatorPlugin.HandleVtCommandRegistrationL<" )
-    if ( iState == EWaitingEventRegistration )
-        {
-        // VT app registered commands => it can also receive events
-        // NOTE: it is expected that VT application first subscribes
-        // to internal events and only after that registers commands to
-        // avoid timing problems.
-        iState = EReady;
-        delete iCallBack;
-        iCallBack = NULL;
-        TCallBack cb( &EventRaiserCallback, this );
-        iCallBack = new ( ELeave ) CAsyncCallBack( cb, 
-            CActive::EPriorityStandard );        
-        TRACE("CVtMediatorPlugin enque async callback" )
-        iCallBack->CallBack();        
-        }
-    TRACE("CVtMediatorPlugin.HandleVtCommandRegistrationL>" )
-    }
-
-TInt CVtMediatorPlugin::EventRaiserCallback( TAny* aAny )
-    {
-    TRACE("CVtMediatorPlugin.EventRaiserCallback<" )
-    CVtMediatorPlugin* plugin = reinterpret_cast<CVtMediatorPlugin*>( aAny );
-    delete plugin->iCallBack;
-    plugin->iCallBack = NULL;
-    TRAP_IGNORE( plugin->RaiseVtEventL() );
-    TRACE("CVtMediatorPlugin.EventRaiserCallback>" )
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::HandleVtCommandUnregistrationL()
-    {
-    // unregistration means that VT app is shutting down.    
-    TRACE("CVtMediatorPlugin.HandleVtCommandUnregistrationL<" )
-    ClearData(iActiveVideoCallInfo, iActiveVideoCallState);
-    //ClearData(iWaitingVideoCallInfo);
-    TRACE("CVtMediatorPlugin.HandleVtCommandUnregistrationL>" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::LaunchVtAppL()
-    {
-        
-    TRACE("CVtMediatorPlugin.LaunchVtAppL<" )
-    
-    if ( !IsEnoughMemory() )
-        {
-        const TVersion KTelephonyCmdVersion(
-                KTelephonyCommandsVersionMajor,
-                KTelephonyCommandsVersionMinor,
-                KTelephonyCommandsVersionBuild );
-        const TInt res =
-        iCommandInitiator->IssueCommand(
-                KMediatorTelephonyDomain,
-                KCatVideoTelToPhoneCommands,
-                EVtCmdLowMemory,
-                KTelephonyCmdVersion,
-                KNullDesC8() );
-        ClearData(iActiveVideoCallInfo, iActiveVideoCallState);
-        ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState);
-        TRACE("CVtMediatorPlugin.LaunchVtAppL, Insufficient Memory" )
-        return;
-        }
-
-    iAppDeathActive = new ( ELeave ) CAppDeathActive( *this, iAppThread );
-       
-    User::LeaveIfError( iWsSession.Connect() );
-
-    TInt wgId = 0;
-    TBool found = EFalse;
-
-    // Check if there is already application running. Then we do not 
-    // start new one - rather we just monitor the existing one.
-    while ( ( wgId != KErrNotFound ) && !found )
-        {
-        CApaWindowGroupName::FindByAppUid( 
-            KVtCmVideoTelUiUid, 
-            iWsSession, 
-            wgId );
-
-        TApaTask task( iWsSession );
-        task.SetWgId( wgId );
-        if ( task.Exists() )
-            {
-            if ( iAppThread.Open( task.ThreadId() ) == KErrNone )
-                {
-                TExitType exitType = iAppThread.ExitType();
-                found = ( exitType == EExitPending );
-
-                if ( found )
-                    {
-                    iAppThreadId = task.ThreadId();
-                    }
-                }
-            }
-            
-        if ( !found )
-            {
-            iAppThread.Close();
-             }
-        }
-
-    // If application was not found, then launch new application.
-    if ( !found )
-        {
-        TThreadId threadId;
-#ifndef SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
-        CApaCommandLine* cmd = CApaCommandLine::NewLC();
-        cmd->SetExecutableNameL( KVtCmVideoTelUiPath );
-#else // !SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
-        CApaCommandLine* cmd = CApaCommandLine::NewLC( KVtCmVideoTelUiPath );
-#endif // SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
-        cmd->SetCommandL( EApaCommandBackground );
-            
-        RApaLsSession session;
-        User::LeaveIfError( session.Connect() );
-        CleanupClosePushL( session );
-            
-        TInt err = session.StartApp( *cmd, threadId );
-        if ( err > KErrNone )
-            {
-            err = KErrGeneral;
-            }
-        User::LeaveIfError( err );
-        CleanupStack::PopAndDestroy( 2, cmd ); // CleanupClosePushL, cmd
-        User::LeaveIfError( iAppThread.Open( threadId ) );
-        iAppThreadId = threadId;
-        }
-
-    // Start active objects.
-    iState = EWaitingEventRegistration;
-    iAppDeathActive->Start();
-    TRACE("CVtMediatorPlugin.LaunchVtAppL>" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::SaveCallData( const TTelephonyCallDataParam& aData, TVtVideoTelephonyCallInformation& iVtCallInfo )
-    {
-    TRACE("CVtMediatorPlugin.SaveCallData<" )
-    iVtCallInfo.iDisplayText = aData.iCLIText.Left(
-        TVtVideoTelephonyCallInformation::TDisplayTextMaxLength );
-        
-    TRACE2("CVtMediatorPlugin.SaveCallData iDisplayText=%S",
-        &iVtCallInfo.iDisplayText );
-                
-    iVtCallInfo.iCallId = aData.iCallId;
-    
-    if ( KNullDesC() != aData.iRemotePhoneNumber )
-        {
-        iVtCallInfo.iVoiceCallPossible = ETrue;
-        }
-    iVtCallInfo.iEventDataValidity |= 
-        TVtVideoTelephonyCallInformation::EDisplayTextValid;
-    TRACE2("CVtMediatorPlugin.SaveCallData data saved=%d>",
-        aData.iCallType == ECallTypeVideo )
-    }
-
-                     
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::HandleDataportCommandL( const TDesC8& aData )
-    {
-    TRACE("CVtMediatorPlugin.HandleDataportCommandL<" ) 
-    TDataPortPackage pckg;
-    pckg.Copy( aData );
-    iActiveVideoCallInfo.iDataport = pckg();
-    iActiveVideoCallInfo.iEventDataValidity |= 
-        TVtVideoTelephonyCallInformation::EDataportValid;     
-    RaiseVtEventL();
-    TRACE("CVtMediatorPlugin.HandleDataportCommandL>" )
-    }
-
-                         
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::ClearData
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::ClearData(TVtVideoTelephonyCallInformation& aVtCallInfo, TCallState& aCallState)
-    {
-    TRACE("CVtMediatorPlugin.ClearData<" )
-    if ( aVtCallInfo.iCallId == iActiveVideoCallInfo.iCallId )
-        {
-        iState = EWaitingAppLaunch;
-        }
-    aVtCallInfo.iEventDataValidity = 0;
-    aVtCallInfo.iDataport.Zero();
-    aVtCallInfo.iVoiceCallPossible = EFalse;
-    //for video call, it should be 9/10
-    //for other call, it will be from -1 to 8
-    aVtCallInfo.iCallId = KVtInitCallId;
-    aVtCallInfo.iDisplayText.Zero();
-    aCallState = ECallStateIdle;
-    TRACE("CVtMediatorPlugin.ClearData>" )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::RegisterVtInternalEventL
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::RegisterVtInternalEventL()
-    {
-    TRACE("CVtMediatorPlugin.RegisterVtInternalEventL<" )
-    iEventProvider = CMediatorEventProvider::NewL();
-    
-    TVersion version(
-        KVideotelMdtrEventVersionMajor,
-        KVideotelMdtrEventVersionMinor,
-        KVideotelMdtrEventVersionBuild );
-
-    TCapabilitySet capSet;
-    capSet.SetEmpty();
-    capSet.AddCapability( ECapabilityReadDeviceData );
-            
-    const TInt err = iEventProvider->RegisterEvent(
-        KMediatorVideoTelephonyDomain,
-        KCatVideotelInternalEvents,
-        EVtMediatorEventVideoCallInformation,
-        version,
-        capSet );
-          
-   
-    TRACE2("CVtMediatorPlugin.RegisterVtInternalEventL err=%d>", err )
-    User::LeaveIfError( err );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::RegisterDataportCommandL
-//
-// 
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::RegisterDataportCommandL()
-    {
-    TRACE("CVtMediatorPlugin.RegisterDataportCommandL<" )
-    iCommandResponder = CMediatorCommandResponder::NewL( this );
-    
-    TCapabilitySet capSet;
-    capSet.SetEmpty();
-    capSet.AddCapability( ECapabilityWriteDeviceData );
-    MediatorService::TCommand command;
-    
-    command.iCaps = capSet;
-    command.iVersion = TVersion( 
-            KPhoneToVideotelCmdVersionMajor, 
-            KPhoneToVideotelCmdVersionMinor,
-            KPhoneToVideotelCmdVersionBuild );
-    command.iTimeout = KVtEngMdtrCmdTimeout;
-        
-    // enable microphone command
-    command.iCommandId = EVtCmdUseDataport;
-    iCommandList.Append( command );
-        
-    // Releasedataport command
-    capSet.SetEmpty();
-    capSet.AddCapability( ECapabilityPowerMgmt );
-    command.iCommandId = EVtCmdReleaseDataport;
-    iCommandList.Append( command );
-    
-    const TInt err = iCommandResponder->RegisterCommand( 
-        KMediatorVideoTelephonyDomain,
-        KCatPhoneToVideotelCommands,
-        iCommandList );    
-    
-    TRACE2("CVtMediatorPlugin.RegisterDataportCommandL err=%d>", err )
-    User::LeaveIfError( err );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::RaiseVtEventL
-//
-// Raises VT call info event if in suitable state, i.e. VT app has subscribed 
-// the event.
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::RaiseVtEventL()
-    {
-    TRACE("CVtMediatorPlugin.RaiseVtEventL<" )
-    TInt result = KVtAppNotReady;  // does not cause leave
-    TRACE2("CVtMediatorPlugin.RaiseVtEventL iState=%d>", 
-            iState )
-    TRACE2("CVtMediatorPlugin.RaiseVtEventL iActiveVideoCallState=%d>", 
-            iActiveVideoCallState )            
-    if ( iState == EReady && // application subscribed to the event
-    
-        // don't send event if video call is not starting/ongoing
-         ( iActiveVideoCallState >= ECallStateDialling &&
-         iActiveVideoCallState <= ECallStateConnected ) )
-        {
-        const TVersion version(
-            KVideotelMdtrEventVersionMajor,
-            KVideotelMdtrEventVersionMinor,
-            KVideotelMdtrEventVersionBuild );            
-            
-        const TVtMediatorInfoPackage pckg( iActiveVideoCallInfo );
-        result = iEventProvider->RaiseEvent(
-            KMediatorVideoTelephonyDomain,
-            KCatVideotelInternalEvents,
-            EVtMediatorEventVideoCallInformation,
-            version,
-            pckg
-            );
-        }
-    TRACE2("CVtMediatorPlugin.RaiseVtEventL result=%d>", result )
-    User::LeaveIfError( result );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::HandleCallStateChangeL
-//
-// Compares previous and new video call states and resolves based on result
-// if Video telephone applicaton should be launched.
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::HandleCallStateChangeL(
-    const TTelephonyCallDataParam& aData )
-    {
-    TRACE("CVtMediatorPlugin.HandleCallStateChangeL<" )    
-    
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL calltype=%d>", 
-            aData.iCallType )
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL saved Activecallid=%d>", 
-            iActiveVideoCallInfo.iCallId )
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL saved Waitingcallid=%d>", 
-            iWaitingVideoCallInfo.iCallId )
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL callid=%d>", 
-            aData.iCallId )   
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL ActiveCallOldState=%d>", 
-            iActiveVideoCallState )
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL WaitingCallOldState=%d>", 
-            iWaitingVideoCallState )
-    TRACE2("CVtMediatorPlugin.HandleCallStateChangeL NewState=%d>",
-            aData.iCallState )
-            
-    //if the call is waitingcall, just save/clear
-    if ( aData.iCallType == ECallTypeVideo ||       
-        // check also call id because in call clearing states call type may
-        // be unspecified but call id is saved in call setup and we can
-        // compare to it.
-         iActiveVideoCallInfo.iCallId == aData.iCallId  ||
-         iWaitingVideoCallInfo.iCallId == aData.iCallId )
-        {
-        TBool isWaitingCall = ETrue;
-        
-        /**
-         * firstly we should check the callid to identify if it is a waitingcal/activecall
-         * imagine the usecase that long press endkey to shutdown both calls.
-         * after that checking iState
-         */
-        if ( iWaitingVideoCallInfo.iCallId == aData.iCallId )
-            {
-            isWaitingCall =  ETrue;
-            }
-        else if ( iActiveVideoCallInfo.iCallId == aData.iCallId )
-            {
-            isWaitingCall = EFalse;
-            }
-        //no vt app launched, this happens while vt first launching or end key to shutdown both calls
-        else if ( iState == EWaitingAppLaunch )
-            {
-            isWaitingCall =  EFalse;
-            }
-        
-        TRACE2("CVtMediatorPlugin.HandleCallStateChangeL isWaitingCall=%d>",
-                isWaitingCall)
-        
-        TCallState& callState = isWaitingCall?iWaitingVideoCallState:iActiveVideoCallState;
-        TVtVideoTelephonyCallInformation& vtCallInfo = isWaitingCall?iWaitingVideoCallInfo:iActiveVideoCallInfo;
-            
-        TBool launchNeeded = KVtCallStateActionArray[ aData.iCallState ] -
-                    KVtCallStateActionArray[callState] > 0;
-        if ( isWaitingCall )
-            {
-            launchNeeded = EFalse;
-            }
-        callState = aData.iCallState;
-            
-        switch ( callState )
-            {
-            case ECallStateDialling:
-            case ECallStateRinging:
-            case ECallStateConnecting:
-            case ECallStateConnected:
-                SaveCallData( aData,  vtCallInfo);
-                break;
-            default:
-                // data becomes invalid in other states (=call clearing/idle)
-                ClearData(vtCallInfo, callState);
-                break;
-            }
-        if ( launchNeeded )
-            {
-            LaunchVtAppL();
-            }
-        if ( !isWaitingCall )
-            {
-            RaiseVtEventL();
-            }
-        }
-        
-    TRACE("CVtMediatorPlugin.HandleCallStateChangeL>" )
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::IsEnoughMemory
-//
-// Check if there is enough memory to launch
-// -----------------------------------------------------------------------------
-//
-TBool CVtMediatorPlugin::IsEnoughMemory()
-    {
-    TRACE("CVtMediatorPlugin::IsEnoughMemory<" )    
-    // Fetch amount of free memory.
-    TMemoryInfoV1Buf memory;
-    UserHal::MemoryInfo( memory );
-    TInt freeRam = (TInt)( memory().iFreeRamInBytes );
-    TRACE2("CVtMediatorPlugin::IsEnoughMemory: freeRam = %d", freeRam )
-    
-    TBool enoughRam = ETrue;
-
-    if ( freeRam < KRamNeededForVideoCalls )
-        {
-        FreeRam();
-        freeRam = (TInt)( memory().iFreeRamInBytes );
-        TRACE2("CVtMediatorPlugin::IsEnoughMemory: after free, freeRam = %d", freeRam )
-        if ( freeRam < KRamNeededForVideoCalls )
-            {
-            enoughRam = EFalse;
-            TRACE ("CVtMediatorPlugin::IsEnoughMemory : Not enough RAM")
-                
-            }
-        }
-    TRACE("CVtMediatorPlugin::IsEnoughMemory>" )    
-    return enoughRam;
-    }  
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::FreeRam
-// Try to free memory to match the memory usage of VT
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::FreeRam()
-    {
-    TRACE("CVtMediatorPlugin.FreeRam()<")
-    User::CompressAllHeaps();
-    TRACE("CVtMediatorPlugin.FreeRam()>")
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::StopDeathActiveL
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::StopDeathActiveL()
-    {
-    TRACE("CVtMediatorPlugin.StopDeathActive<")
-    delete iAppDeathActive;
-    iAppThread.Close();
-    iWsSession.Close();
-    //if there is a waiting call, check if we need to launch it
-    TRACE2("CVtMediatorPlugin.StopDeathActive WaitintCallID=%d>",
-            iWaitingVideoCallInfo.iCallId)
-    if ( iWaitingVideoCallInfo.iCallId != KVtInitCallId )
-        {
-        iActiveVideoCallInfo = iWaitingVideoCallInfo;
-        iActiveVideoCallState = iWaitingVideoCallState;
-        ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState);
-        
-        if ( iActiveVideoCallState == ECallStateDialling ||
-                iActiveVideoCallState ==  ECallStateRinging ||
-                iActiveVideoCallState == ECallStateConnecting ||
-                iActiveVideoCallState == ECallStateConnected ||
-                iActiveVideoCallState == ECallStateAnswering )
-                {
-                LaunchVtAppL();
-                RaiseVtEventL();
-                }
-        }
-    TRACE("CVtMediatorPlugin.StopDeathActive>")
-    }
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::CAppDeathActive
-// -----------------------------------------------------------------------------
-//
-CVtMediatorPlugin::CAppDeathActive::CAppDeathActive( 
-        CVtMediatorPlugin& aMediatorPlugin,
-        RThread& aAppThread
-    )
-    : CActive( CActive::EPriorityStandard ),
-      iMediatorPlugin( aMediatorPlugin ),
-      iAppThread( aAppThread )
-      
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::~CAppDeathActive
-// -----------------------------------------------------------------------------
-//
-CVtMediatorPlugin::CAppDeathActive::~CAppDeathActive()
-    {
-    TRACE("CVtMediatorPlugin.~CAppDeathActive")
-    Cancel();
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::Start
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::CAppDeathActive::Start()
-    {
-    TRACE("CVtMediatorPlugin.Start<")
-    Cancel();
-    iAppThread.Logon( iStatus );
-    SetActive();
-    TRACE("CVtMediatorPlugin.Start>")
-    }
-
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::RunL
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::CAppDeathActive::RunL()
-    {
-    //do something here
-    TRACE("CVtMediatorPlugin.RunL<")
-    iMediatorPlugin.StopDeathActiveL();
-    TRACE("CVtMediatorPlugin.RunL>")
-      
-    }
-        
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::DoCancel
-// -----------------------------------------------------------------------------
-//
-void CVtMediatorPlugin::CAppDeathActive::DoCancel()
-    {
-    iAppThread.LogonCancel( iStatus );
-    }
-        
-// -----------------------------------------------------------------------------
-// CVtMediatorPlugin::CAppDeathActive::RunError
-// -----------------------------------------------------------------------------
-//
-TInt CVtMediatorPlugin::CAppDeathActive::RunError( TInt /*aError*/ )
-    {
-    return KErrNone;
-    }