--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshmanagercli/src/musmanagerimpl.cpp Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,415 @@
+/*
+* 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 "musmanagerimpl.h"
+#include "musmanager.h"
+#include "musmanageripccommon.h"
+#include "musmanagerserverstarter.h"
+#include "muslogger.h"
+#include "musavailabilityobserver.h"
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImpl()
+ : iConnected( EFalse )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImpl( MMusAvailabilityObserver* aObserver )
+ : iConnected( EFalse ), iAvailabilityObserver( aObserver )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ConstructL()
+ {
+ if ( iAvailabilityObserver )
+ {
+ iListener = CMusManagerImplListener::NewL( this );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewL
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewL()
+ {
+ CMusManagerImpl* self = CMusManagerImpl::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewLC
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewLC()
+ {
+ CMusManagerImpl* self = new( ELeave ) CMusManagerImpl;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewL
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewL( MMusAvailabilityObserver* aObserver )
+ {
+ CMusManagerImpl* self = CMusManagerImpl::NewLC( aObserver );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::NewLC
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl* CMusManagerImpl::NewLC( MMusAvailabilityObserver* aObserver )
+ {
+ CMusManagerImpl* self = new( ELeave ) CMusManagerImpl( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::~CMusManagerImpl()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::~CMusManagerImpl()" );
+ delete iListener;
+ iSession.Disconnect();
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::~CMusManagerImpl()" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StartServer()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::StartServer()" );
+ TInt error = MusManagerServerStarter::Start();
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::StartServer()" );
+ }
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+TBool CMusManagerImpl::ServerStarted()
+ {
+ return MusManagerServerStarter::Started();
+ }
+
+// ---------------------------------------------------------------------------
+// CMusManagerImpl::~CMusManagerImpl
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ExamineAvailabilityL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::ExamineAvailabilityL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ iSession.InvestigateAvailabilityL();
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::ExamineAvailabilityL()" );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the current availability of MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerImpl::AvailabilityL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::AvailabilityL()" );
+
+ MultimediaSharing::TMusAvailabilityStatus status;
+
+ if( !ServerStarted() )
+ {
+ status = ( MultimediaSharing::TMusAvailabilityStatus ) KErrNotReady;
+ }
+ else
+ {
+ status = QueryAvailabilityL();
+ }
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::AvailabilityL()" );
+
+ return status;
+ }
+
+// ---------------------------------------------------------------------------
+// Forwards command to executed by MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::HandleCommandL(
+ MultimediaSharing::TCommandType aCommandType )
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::HandleCommandL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ iSession.HandleCommandL( aCommandType );
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::HandleCommandL()" );
+ }
+// ---------------------------------------------------------------------------
+// Forwards a SIP request to be handled by MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::HandleSipRequestL( TInt aChannelId )
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::HandleSipRequestL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ iSession.HandleSipRequestL( aChannelId );
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::HandleSipRequestL()" );
+ }
+
+// ---------------------------------------------------------------------------
+// Starts the MultimediaSharing application.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StartApplicationL( MultimediaSharing::TMusUseCase aUseCase )
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::StartApplicationL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ MultimediaSharing::TMusAvailabilityStatus status =
+ iSession.QueryAvailabilityL();
+
+ if( status < KErrNone || status >= MultimediaSharing::EErrSipRegistration )
+ {
+ MUS_LOG1( "mus: [MUSCLI] <- CMusManagerImpl::StartApplicationL( leave: %d )",
+ status );
+ User::Leave( status );
+ }
+
+ iSession.StartL( aUseCase );
+
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::StartApplicationL()" );
+ }
+
+// ---------------------------------------------------------------------------
+// Stops the MultimediaSharing application.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::StopApplicationL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::StopApplicationL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ iSession.StopL();
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::StopApplicationL()" );
+ }
+
+// ---------------------------------------------------------------------------
+// Starts investigating the current availability of MultimediaSharing.
+// ---------------------------------------------------------------------------
+//
+MultimediaSharing::TMusAvailabilityStatus CMusManagerImpl::QueryAvailabilityL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::QueryAvailabilityL()" );
+ // ensure server and connection are ok
+ InitSessionL();
+
+ MultimediaSharing::TMusAvailabilityStatus status
+ = iSession.QueryAvailabilityL();
+
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::QueryAvailabilityL()" );
+ return status;
+ }
+
+// ---------------------------------------------------------------------------
+// Starts to monitor availability
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::MonitorAvailabilityL( TRequestStatus& aRequestStatus )
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::MonitorAvailabilityL()" );
+
+ iPcArgs.Set( EMusManagerIpcArgAvailabilityStatus, &iPckg );
+ iSession.MonitorAvailabilityL( aRequestStatus, iPcArgs );
+
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::MonitorAvailabilityL()" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Starts server process, if needed, and then opens a session to it.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::InitSessionL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::InitSessionL()" );
+ // if server not started, start it
+ if( !ServerStarted() )
+ {
+ StartServer();
+ }
+
+ // if no session, connect
+ if( !iConnected )
+ {
+ ConnectL();
+ }
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::InitSessionL()" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Connects this client to the server process; opens a session.
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::ConnectL()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::ConnectL()" );
+ iSession.ConnectL();
+
+ iConnected = ETrue;
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::ConnectL()" );
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CancelMonitoring()
+ {
+ MUS_LOG( "mus: [MUSCLI] -> CMusManagerImpl::CancelMonitoring()" );
+ TRAP_IGNORE( iSession.CancelMonitoringL() );
+ MUS_LOG( "mus: [MUSCLI] <- CMusManagerImpl::CancelMonitoring()" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates listener
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImplListener*
+ CMusManagerImpl::CMusManagerImplListener::NewL(
+ CMusManagerImpl* aMusManagerImpl )
+ {
+ CMusManagerImplListener* self =
+ new ( ELeave ) CMusManagerImplListener( aMusManagerImpl );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructs listener
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImplListener::CMusManagerImplListener(
+ CMusManagerImpl* aMusManagerImpl ) :
+ CActive(0), iMusManagerImpl( aMusManagerImpl )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CMusManagerImplListener::ConstructL()
+ {
+ iMusManagerImpl->InitSessionL();
+ iMusManagerImpl->iSession.StartObservingAvailabilityL();
+ ListenL();
+ }
+
+// ---------------------------------------------------------------------------
+// Destructs listener
+// ---------------------------------------------------------------------------
+//
+CMusManagerImpl::CMusManagerImplListener::~CMusManagerImplListener()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// Start listening availability events
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CMusManagerImplListener::ListenL()
+ {
+ iMusManagerImpl->MonitorAvailabilityL( iStatus );
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CMusManagerImplListener::RunL()
+ {
+ iMusManagerImpl->iAvailabilityObserver->MusAvailabilityChangedL(
+ iMusManagerImpl->iPckg() );
+
+ // restart monitoring
+ ListenL();
+ }
+
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//
+TInt CMusManagerImpl::CMusManagerImplListener::RunError( TInt aError )
+ {
+ MUS_LOG1( "mus: [MUSCLI] CMusManagerImplListener::RunError: %d", \
+ aError );
+ return aError;
+ }
+
+// ---------------------------------------------------------------------------
+// Cancel
+// ---------------------------------------------------------------------------
+//
+void CMusManagerImpl::CMusManagerImplListener::DoCancel()
+ {
+ iMusManagerImpl->CancelMonitoring();
+ }