diff -r 000000000000 -r f0cf47e981f9 mmsharing/mmshmanagersrv/src/musmanagerserversession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshmanagersrv/src/musmanagerserversession.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,258 @@ +/* +* 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 + +#include "muslogger.h" +#include "musmanageripccommon.h" +#include "musmanagerserveritcutility.h" +#include "musmanagerserversession.h" +#include "musmanagerserversessionobserver.h" +#include "musmanagerserver.h" + + +const TInt KServerRequestPending = 1; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +// +CMusManagerServerSession::CMusManagerServerSession( + CMusManagerServer& aServer, + MMusManagerServerSessionObserver& aObserver ) + : CSession2(), iServer( aServer ), iServerCore( aObserver ) + { + iServer.IncrementSessions(); + } + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +// +void CMusManagerServerSession::ConstructL() + { + + } + + +// --------------------------------------------------------------------------- +// First phase constructor. +// --------------------------------------------------------------------------- +// +CMusManagerServerSession* CMusManagerServerSession::NewL( + CMusManagerServer& aServer, + MMusManagerServerSessionObserver& aObserver ) + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerSession::NewL()" ); + CMusManagerServerSession* self = CMusManagerServerSession::NewLC( + aServer, + aObserver ); + CleanupStack::Pop( self ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::NewL()" ); + return self; + } + + +// --------------------------------------------------------------------------- +// First phase constructor. +// --------------------------------------------------------------------------- +// +CMusManagerServerSession* CMusManagerServerSession::NewLC( + CMusManagerServer& aServer, + MMusManagerServerSessionObserver& aObserver ) + { + CMusManagerServerSession* self = new( ELeave ) CMusManagerServerSession( + aServer, + aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Standard destructor. +// --------------------------------------------------------------------------- +// +CMusManagerServerSession::~CMusManagerServerSession() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerSession::~CMusManagerServerSession()" ); + iServer.DecrementSessions(); + iServerCore.CancelMonitoring( this ); + iAvailabilityStatus.Close(); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::~CMusManagerServerSession()" ); + } + +// ----------------------------------------------------------------------------- +// Start to monitor availability states for this session. +// ----------------------------------------------------------------------------- +// +TInt CMusManagerServerSession::MonitorAvailabilityL() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerSession::MonitorAvailabilityL" ); + if ( iAvailabilityStatus.Count() ) + { + MusManagerServerItcUtility::WriteAvailabilityReportL( + iMessage, iAvailabilityStatus[0] ); + iAvailabilityStatus.Remove( 0 ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::\ + MonitorAvailabilityL" ); + return KErrNone; + } + else + { + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::\ + MonitorAvailabilityL" ); + return KServerRequestPending; + } + } + +// --------------------------------------------------------------------------- +// Receives incoming messages. +// --------------------------------------------------------------------------- +// +void CMusManagerServerSession::ServiceL( const RMessage2& aMessage ) + { + MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServerSession::ServiceL( %d )", + ( TInt ) aMessage.Function() ); + TMusManagerIpcFunctions function + = ( TMusManagerIpcFunctions )aMessage.Function(); + + TInt retVal( KErrNone ); + + switch ( function ) + { + case EMusManagerIpcAvailabilityQuery: + { + TInt capability = iServerCore.AvailabilityQueryL(); + MusManagerServerItcUtility::WriteAvailabilityL( + aMessage, + capability ); + + iLastReport = ( MultimediaSharing::TMusAvailabilityStatus )capability; + break; + } + case EMusManagerIpcInvestigateAvailability: + { + TRAP( retVal, iServerCore.InvestigateAvailabilityL() ); + break; + } + case EMusManagerIpcInvitationReceived: + { + TUid channelId + = MusManagerServerItcUtility::ReadChannelIdL( aMessage ); + + TRAP( retVal, iServerCore.InvitationReceivedL( channelId ) ); + + break; + } + case EMusManagerIpcOptionsReceived: + { + TUid channelId + = MusManagerServerItcUtility::ReadChannelIdL( aMessage ); + + TRAP( retVal, iServerCore.OptionsReceivedL( channelId ) ); + break; + } + case EMusManagerIpcStartMultimediaSharing: + { + TInt useCase + = MusManagerServerItcUtility::ReadUseCaseL( aMessage ); + + TRAP( retVal, iServerCore.StartMultimediaSharingL( + (MultimediaSharing::TMusUseCase) useCase ) ); + break; + } + case EMusManagerIpcStopMultimediaSharing: + { + TRAP( retVal, iServerCore.StopMultimediaSharingL() ); + break; + } + case EMusManagerIpcStartObservingAvailability: + { + iServerCore.RegisterObserverL( this ); + break; + } + + case EMusManagerIpcMonitorAvailability: + { + iMessage = aMessage; + retVal = MonitorAvailabilityL(); + } + break; + case EMusManagerIpcCancelMonitoring: + { + iServerCore.CancelMonitoring( this ); + } + break; + case EMusManagerIpcHandleCommand: + { + TInt command + = MusManagerServerItcUtility::ReadCommandL( aMessage ); + + TRAP( retVal, iServerCore.CommandL( + ( MultimediaSharing::TCommandType ) command ) ); + } + break; + + default: + break; + } + + MUS_LOG1( "mus: [MUSSRV] - Message compleated with code %d", retVal ); + aMessage.Complete( retVal ); + + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::ServiceL()" ); + } + +void CMusManagerServerSession::AvailabilityChangedL( + MultimediaSharing::TMusAvailabilityStatus aAvailability ) + { + MUS_LOG1( "mus: [MUSSRV] -> CMusManagerServerCore::AvailabilityChangedL( %d )", + aAvailability ); + // inform ui via application manager (via session api) + if( iAvailabilityStatus.Count() && !iMessage.IsNull() ) + { + iAvailabilityStatus.AppendL( aAvailability ); + MusManagerServerItcUtility::WriteAvailabilityReportL( + iMessage, iAvailabilityStatus[0] ); + iAvailabilityStatus.Remove( 0 ); + iMessage.Complete( KErrNone ); + } + else if ( iMessage.IsNull() ) + { + iAvailabilityStatus.AppendL( aAvailability ); + } + else + { + MusManagerServerItcUtility::WriteAvailabilityReportL( + iMessage, aAvailability ); + iMessage.Complete( KErrNone ); + } + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::AvailabilityChangedL()" ); + } + +void CMusManagerServerSession::RequestComplete() + { + MUS_LOG( "mus: [MUSSRV] -> CMusManagerServerSession::RequestComplete()" ); + iMessage.Complete( KErrCancel ); + MUS_LOG( "mus: [MUSSRV] <- CMusManagerServerSession::RequestComplete()" ); + } +