mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp
changeset 22 496ad160a278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshmanagersrv/src/musmanagerservercore.cpp	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,501 @@
+/*
+* Copyright (c) 2006 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:  ?Description
+*
+*/
+
+
+#include "musunittesting.h"
+
+#include "musmanagerservercore.h"
+#include "musapplicationmanager.h"
+#include "musavailabilitypluginmanager.h"
+#include "musmonitoravailabilityobserver.h"
+#include "muslogger.h"
+#include "musmanagerservercoreobserver.h"
+#include "musmanager.h"
+#include "musmanagerservercommon.h"
+
+using namespace MultimediaSharing;
+
+// CONSTANTS
+_LIT8( KMusEngineName, "MultimediaSharing" );
+
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::NewL
+// -----------------------------------------------------------------------------
+//
+CMusManagerServerCore* CMusManagerServerCore::NewL(
+    MMusManagerServerCoreObserver& aObserver )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::NewL()" );
+
+    CMusManagerServerCore* self = CMusManagerServerCore::NewLC( aObserver );
+    CleanupStack::Pop( self );
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::NewL()" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::NewLC
+// -----------------------------------------------------------------------------
+//
+CMusManagerServerCore* CMusManagerServerCore::NewLC(
+    MMusManagerServerCoreObserver& aObserver )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::NewLC()" );
+
+    CMusManagerServerCore* self
+        = new( ELeave ) CMusManagerServerCore( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::NewLC()" );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::CMusManagerServerCore
+// -----------------------------------------------------------------------------
+//
+CMusManagerServerCore::CMusManagerServerCore( MMusManagerServerCoreObserver& aObserver )
+    : iObserver( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::ConstructL()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::ConstructL" );
+    
+    iApplicationManager = CMusApplicationManager::NewL();
+    
+    iApplicationManager->ResolvePluginNameL( iPluginName );
+    
+    iPluginManager = CMusAvailabilityPluginManager::NewL( *this, *iApplicationManager );
+
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::ConstructL" );
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::~CMusManagerServerCore
+// -----------------------------------------------------------------------------
+//
+CMusManagerServerCore::~CMusManagerServerCore()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::CMusManagerServerCore" );
+
+     // inform ui via application manager (via session api)
+    
+    delete iPluginManager;
+
+    delete iApplicationManager;
+    
+     // go through interested client sessions
+    StopMonitoring();
+    iAvailabilityMonitors.Close();
+    
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::CMusManagerServerCore" );
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::~CMusManagerServerCore
+// -----------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerServerCore::AvailabilityQueryL()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::AvailabilityQueryL" );
+    MultimediaSharing::TMusAvailabilityStatus status
+            = Availability();
+   
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::AvailabilityQueryL" );
+    return status;
+    }
+ // -----------------------------------------------------------------------------
+// CMusManagerServerCore::InvestigateAvailability
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::CommandL( MultimediaSharing::TCommandType aCommandType )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::CommandL" );
+     if ( aCommandType == MultimediaSharing::ECommandManualActivation &&
+          IsMusEnginePlugin() )
+		{
+		MUS_LOG( "mus: [MUSSRV]    Manual Activation is started" )
+		iPluginManager->ManualQueryL();
+		}
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::CommandL" );
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::InvestigateAvailability
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::InvestigateAvailabilityL()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::InvestigateAvailabilityL" );
+    if ( IsMusEnginePlugin() )
+        {
+        iPluginManager->InvestigateAvailabilityL();
+        }
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::InvestigateAvailabilityL" );
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::InvitationReceived
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::InvitationReceivedL( TUid aChannelId )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::InvitationReceivedL" );
+
+    TInt uid = aChannelId.iUid;
+
+    if( uid == CMusManager::ESipInviteDesired &&
+        ApplicationAllowed() )
+        {        
+        PrepareForReceivedInviteL();
+        
+        // write session boundary values
+        WriteSessionPropertiesL(
+                MultimediaSharing::EMusReceive,
+                Availability(),
+                iPluginManager->SessionParametersL() );
+
+        iApplicationManager->StartApplicationL();
+        }
+    else if( uid == CMusManager::ESipInviteDesired2WayVideo &&
+            ApplicationAllowed() )
+        {
+        PrepareForReceivedInviteL();
+        
+        // write session boundary values
+        WriteSessionPropertiesL(
+                MultimediaSharing::EMusReceiveTwoWayVideo,
+                Availability(),
+                iPluginManager->SessionParametersL() );
+
+        iApplicationManager->StartApplicationL();
+        }
+    else if ( IsMusEnginePlugin() )
+        {
+        if( uid == CMusManager::ESipInviteNotDesired )
+            {
+            iPluginManager->InvitationReceivedL();
+            }
+        else
+            {
+            User::Leave( KErrNotReady );
+            }
+        }
+
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::InvitationReceivedL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::OptionsReceivedL( TUid /*aChannelId*/ )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::OptionsReceivedL" );
+    if ( IsMusEnginePlugin() )
+        {
+        iPluginManager->OptionsReceivedL();    
+        }    
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::OptionsReceivedL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::StartMultimediaSharingL( MultimediaSharing::TMusUseCase aUseCase )
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::StartMultimediaSharingL" );
+    if( !iApplicationManager->ApplicationRunning() &&
+        ApplicationAllowed() )
+        {
+        // write session boundary values
+        WriteSessionPropertiesL(
+                aUseCase,
+                Availability(),
+                iPluginManager->SessionParametersL() );
+
+        // start actual application
+        iApplicationManager->StartApplicationL();
+        }
+    else
+        {
+        iApplicationManager->ShowApplicationL();
+        }
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::StartMultimediaSharingL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::StopMultimediaSharingL()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::StopMultimediaSharingL" );
+    iApplicationManager->StopApplicationL();
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::StopMultimediaSharingL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::EventNoSessions()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::EventNoSessions" );
+    if ( IsMusEnginePlugin() ) 
+        {
+        TRAPD( error, iPluginManager->StopPluginL() );
+        if( error )
+            {
+            // iObserver.StopServer();
+            }        
+        }
+    iObserver.StopServer();
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::EventNoSessions" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::PluginStopped()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::PluginStopped" );
+    if( iObserver.SessionCount() == 0 )
+        {
+        iObserver.StopServer();
+        }
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::PluginStopped" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::AvailabilityChangedL(
+    MultimediaSharing::TMusAvailabilityStatus aAvailability )
+    {
+    MUS_LOG1( "mus: [MUSSRV]  -> CMusManagerServerCore::AvailabilityChangedL( %d )",
+              aAvailability );
+    
+    if ( !IsMusEnginePlugin() )
+        {
+        MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::AvailabilityChangedL - \
+                non-MuS plugin");
+        return;
+        }
+    // inform ui via application manager (via session api)
+
+    WriteSessionPropertiesL(
+            aAvailability,
+            iPluginManager->SessionParametersL() );
+    
+    if( iAvailabilityMonitors.Count() )
+    	{	
+    	// go through interested client sessions
+	    for( TInt i=0; i<iAvailabilityMonitors.Count(); i++ )
+	        {
+	        // and inform each about the new status
+	       	iAvailabilityMonitors[i]->AvailabilityChangedL( 
+	       		aAvailability );
+	        }
+    	}
+    
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::AvailabilityChangedL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::CancelMonitoring( MMusMonitorAvailabilityObserver* aObserver )
+	{
+	TInt index = iAvailabilityMonitors.Find( aObserver );
+		
+	if( index != KErrNotFound )
+		{
+		iAvailabilityMonitors[index]->RequestComplete();
+		iAvailabilityMonitors.Remove( index );
+		}	
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::RegisterObserverL( 
+									MMusMonitorAvailabilityObserver* aObserver )
+	{
+    if( iAvailabilityMonitors.Find( aObserver ) == KErrNotFound )
+		{
+		iAvailabilityMonitors.AppendL( aObserver );
+		}
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::RegisterObserver" );	
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//	
+void CMusManagerServerCore::RemoveObserver( MMusMonitorAvailabilityObserver* aObserver )
+	{
+	MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::RemoveObserver" );
+    TInt index = iAvailabilityMonitors.Find( aObserver );
+		
+	if( index != KErrNotFound )
+		{
+		iAvailabilityMonitors.Remove( index );
+		}
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::RemoveObserver" );	
+	}
+
+// -----------------------------------------------------------------------------
+// From MMusAvailabilityPluginManagerObserver.
+// Starts live video sharing.
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::StartSharingWithUseCaseL( 
+    MultimediaSharing::TMusUseCase aUseCase )
+    {
+    MUS_LOG1( "mus: [MUSSRV]  -> CMusManagerServerCore::StartSharingWithUseCaseL:%d", 
+              aUseCase );
+    
+    StartMultimediaSharingL( aUseCase );
+    
+    MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::StartSharingWithUseCaseL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::StopMonitoring()
+	{
+	// go through interested client sessions
+    for( TInt i=0; i<iAvailabilityMonitors.Count(); i++ )
+        {
+        // and inform each about the new status
+       	iAvailabilityMonitors[i]->RequestComplete();
+       	iAvailabilityMonitors.Remove( i );
+        }			
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::IsMusEnginePlugin
+// -----------------------------------------------------------------------------
+//
+TBool CMusManagerServerCore::IsMusEnginePlugin()
+    {
+    TBool isMus( EFalse );    
+    if ( !iPluginName.Compare( KMusEngineName ) )
+        {
+        isMus = ETrue;
+        }
+    return isMus;
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::Availability
+// -----------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerServerCore::Availability()
+    {
+    MUS_LOG( "mus: [MUSSRV]  -> CMusManagerServerCore::Availability" );
+    if ( IsMusEnginePlugin() ) 
+        {
+        MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::Availability - MuS plugin" );
+        return iPluginManager->Availability();
+        }
+    else
+        {
+        MUS_LOG( "mus: [MUSSRV]  <- CMusManagerServerCore::Availability - non-MuS plugin" );
+        return EMultimediaSharingAvailable;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::ApplicationAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CMusManagerServerCore::ApplicationAllowed()
+    {
+    if ( IsMusEnginePlugin() )
+        {
+        return iPluginManager->ApplicationAllowed();
+        }
+    else
+        {
+        return ETrue;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::PrepareForReceivedInviteL
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::PrepareForReceivedInviteL()
+    {
+    if ( IsMusEnginePlugin() )
+        {
+        iPluginManager->PrepareForReceivedInviteL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::WriteSessionPropertiesL
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::WriteSessionPropertiesL(
+        MultimediaSharing::TMusUseCase aUseCase,
+        MultimediaSharing::TMusAvailabilityStatus aStatus,
+        MDesCArray& aSessionParameters )
+    {
+    if ( IsMusEnginePlugin() )
+        {
+        iApplicationManager->WriteSessionPropertiesL(
+                                    aUseCase,
+                                    aStatus,
+                                    aSessionParameters );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMusManagerServerCore::WriteSessionPropertiesL
+// -----------------------------------------------------------------------------
+//
+void CMusManagerServerCore::WriteSessionPropertiesL(
+        MultimediaSharing::TMusAvailabilityStatus aStatus,
+        MDesCArray& aSessionParameters )
+    {
+    if ( IsMusEnginePlugin() )
+        {
+        iApplicationManager->WriteSessionPropertiesL(
+                                    aStatus,
+                                    aSessionParameters );
+        }
+    }
+
+//  End of File