diff -r b31261fd4e04 -r ccd8e69b5392 mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp --- a/mmsharing/mmshmanagersrv/src/musavailabilitypluginmanager.cpp Tue Feb 02 00:09:07 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,765 +0,0 @@ -/* -* Copyright (c) 2006-2007 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 "musavailabilitypluginmanager.h" -#include "musavasettings.h" -#include "musunittesting.h" -#include "musavainterface.h" -#include "muslogger.h" -#include "musavailabilitypluginmanagerobserver.h" -#include "musmanagerservercommon.h" -#include "musindicatorapi.h" -#include "musapplicationmanager.h" - -#include -#include -#include - - -// CONSTANTS - -using namespace MultimediaSharing; - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusAvailabilityPluginManager* CMusAvailabilityPluginManager::NewL( - MMusAvailabilityPluginManagerObserver& aObserver, - CMusApplicationManager& aApplicationManager ) - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::NewL()" ) - - CMusAvailabilityPluginManager* self = - CMusAvailabilityPluginManager::NewLC( aObserver, - aApplicationManager ); - - CleanupStack::Pop( self ); - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::NewL()" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusAvailabilityPluginManager* CMusAvailabilityPluginManager::NewLC( - MMusAvailabilityPluginManagerObserver& aObserver, - CMusApplicationManager& aApplicationManager ) - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::NewLC()" ) - - CMusAvailabilityPluginManager* self = - new( ELeave ) CMusAvailabilityPluginManager( aObserver, - aApplicationManager ); - - CleanupStack::PushL( self ); - self->ConstructL(); - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::NewLC()" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusAvailabilityPluginManager::~CMusAvailabilityPluginManager() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - ~CMusAvailabilityPluginManager()" ) - delete iPlugin; - delete iSessionParameters; - delete iIndicator; - iIndicator = NULL; - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - ~CMusAvailabilityPluginManager()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::ConstructL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::ConstructL()" ) - iSessionParameters = new( ELeave ) CDesCArrayFlat( KParameterCount ); - iPlugin = CMusAvaInterface::NewL(); - iPlugin->SetObserver( *this ); - iPlugin->SetSettingsObserver( *this ); - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::ConstructL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMusAvailabilityPluginManager::CMusAvailabilityPluginManager( - MMusAvailabilityPluginManagerObserver& aObserver, - CMusApplicationManager& aApplicationManager ) - : iObserver( aObserver ), - iApplicationManager( aApplicationManager ) - { - iPluginStarted = EFalse; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusAvailabilityPluginManager::ApplicationAllowed() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - ApplicationAllowed()" ) - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - ApplicationAllowed()" ) - return ( iPlugin->MandatoryAvailability() - || iPlugin->AvailabilityState( EMusAvaNameRegistration ) == - EMusAvaStatusInProgress - || iPlugin->AvailabilityState( EMusAvaNameRegistration ) == - EMusAvaStatusAvailable ); - } -// ----------------------------------------------------------------------------- -// If minumum availability is available returning mandaroty level status -// and if mandatory level status is available returning extension level status -// ----------------------------------------------------------------------------- -// -TMusAvailabilityStatus CMusAvailabilityPluginManager::Availability() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - Availability()" ) - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - Availability()" ) - return MapAvailabilities( iPlugin->AvailabilityStatus() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::InvestigateAvailabilityL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - InvestigateAvailabilityL()" ) - if( !iPluginStarted ) - { - iPlugin->StartL(); - iPluginStarted = ETrue; - } - - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - InvestigateAvailabilityL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::InvitationReceivedL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - InvitationReceivedL()" ) - - if( !iPluginStarted ) - { - iPlugin->StartL(); - iPluginStarted = ETrue; - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - InvitationReceivedL()" ) - } - -// ----------------------------------------------------------------------------- -// CMusAvailabilityPluginManager::OptionsReceived -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::OptionsReceivedL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - OptionsReceivedL()" ) - - if( !iPluginStarted ) - { - iPlugin->StartL(); - iPluginStarted = ETrue; - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - OptionsReceivedL()" ) - } - -// ----------------------------------------------------------------------------- -// CMusAvailabilityPluginManager::LoadPluginL -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::LoadPluginL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - LoadPluginL()" ) - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - LoadPluginL()" ) - } - -// ----------------------------------------------------------------------------- -// CMusAvailabilityPluginManager::UnloadPluginL -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::StopPluginL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - StopPluginL()" ) - if( iPluginStarted ) - { - iPlugin->Stop(); - iPluginStarted = EFalse; - } - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - StopPluginL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -MDesCArray& CMusAvailabilityPluginManager::SessionParametersL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - SessionParametersL()" ) - // update the values - UpdateSessionParametersL(); - - // then pass them - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - SessionParametersL()" ) - return *iSessionParameters; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::ManualQueryL() - { - - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - ManualQueryL()" ) - MMusAvaSettings& settings = iPlugin->Settings(); - - MUS_LOG( "mus: [MUSSRV] Status available" ) - - settings.SetManualActivation( MMusAvaSettings::EActivationAllowed ); - iPlugin->StartL(); - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - ManualQueryL()" ) - } - -TBool CMusAvailabilityPluginManager::PossibleToLaunch() - { - return iPlugin->ExtensionAvailability() && - iPlugin->AvailabilityStatus() == - MMusAvaObserver::EMusAvaStatusAvailable; - } -void CMusAvailabilityPluginManager::AvailabilityChanged( - TAvailabilityName /*aName*/, - TAvailabilityStatus aStatus ) - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - AvailabilityChanged()" ) - TRAPD( err , iObserver.AvailabilityChangedL( MapAvailabilities( aStatus ) ) ); - if ( err ) - { - // Not sure about what to do. Very rare situation. - MUS_LOG1( "mus: [MUSSRV] AvailabilityChangedL() leave code: %d",err ) - } - // Do some indicator things... - TRAP( err, IndicateAvailabilityL() ); - if ( err ) - { - // Not sure about what to do. Very rare situation. - MUS_LOG1( "mus: [MUSSRV] IndicateAvailabilityL() leave code: %d",err ) - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - AvailabilityChanged()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::AvailabilityError( - TAvailabilityName /*aName*/, - TAvailabilityStatus aStatus ) - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - AvailabilityError()" ) - TRAPD( err , iObserver.AvailabilityChangedL( MapAvailabilities( aStatus ) ) ); - if ( err ) - { - // Not sure about what to do. Very rare situation. - MUS_LOG1( "mus: [MUSSRV] AvailabilityChangedL() leave code: %d",err ) - } - - // Do some indicator things... - TRAP( err, IndicateAvailabilityL() ); - if ( err ) - { - MUS_LOG1( "mus: [MUSSRV] IndicateAvailabilityL() leave code: %d",err ) - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - AvailabilityError()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -MMusAvaSettingsObserver::TApplicationState CMusAvailabilityPluginManager:: - ApplicationState() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - ApplicationState()" ) - MMusAvaSettingsObserver::TApplicationState ret = EApplicationStateNotDefined; - if ( iApplicationManager.ApplicationRunning() ) - { - ret = EApplicationIsRunning; - } - else - { - ret = EApplicationNotRunning; - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - ApplicationState()" ) - return ret; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMusAvailabilityPluginManager::OptionAllowed() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - OptionAllowed()" ) - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - OptionAllowed()" ) - // TBD: Check it out - return iPlugin->AvailabilityState( MMusAvaObserver::EMusAvaOptionHandler ) - >= EMusAvaStatusNotExecuted; - } - -// ----------------------------------------------------------------------------- -// From MMusIndicatorObserver. -// Starts live video sharing. -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::StartLiveSharingL() - { - iObserver.StartLiveSharingL(); - } - -// ----------------------------------------------------------------------------- -// This functions cross-links TAvailabilityStatus and -// MultimediaSharing::TMusAvailabilityStatus -// ----------------------------------------------------------------------------- -// -MultimediaSharing::TMusAvailabilityStatus - CMusAvailabilityPluginManager::MapAvailabilities( - TAvailabilityStatus aStatus ) - { - MultimediaSharing::TMusAvailabilityStatus status; - switch( aStatus ) - { - case EMusAvaStatusNotExecuted: - { - MUS_LOG( "mus: [MUSSRV] that is \ - EMultimediaSharingNotAvailable" ) - status = EMultimediaSharingNotAvailable; - break; - } - case EMusAvaFailureCode: - { - MUS_LOG( "mus: [MUSSRV] that is \ - EMusAvaFailureCode" ) - status = EMultimediaFailureCode; - break; - } - case EMusAvaStatusInProgress: // EMusAvaStatusRegistering: - { - MUS_LOG( "mus: [MUSSRV] that is ESipRegistrationPending" ) - if ( iPlugin->CurrentAvailability() > EMusAvaNameRegistration ) - { - // SIP registration already performed, we're available - MUS_LOG( "mus: [MUSSRV] that is \ - EMultimediaSharingAvailable - a" ) - status = EMultimediaSharingAvailable; - } - else if ( - iPlugin->CurrentAvailability() == EMusAvaNameRegistration ) - { - // SIP register pending - MUS_LOG( "mus: [MUSSRV] that is \ - ESipRegistrationPending - a" ) - status = ESipRegistrationPending; - } - else - { - MUS_LOG( "mus: [MUSSRV] that is \ - EMultimediaSharingNotAvailable - a" ) - status = EMultimediaSharingNotAvailable; - } - break; - } - case EMusAvaStatusAvailable: - { - MUS_LOG( "mus: [MUSSRV] that is EMultimediaSharingAvailable" ) - status = EMultimediaSharingAvailable; - break; - } - case EMusAvaStatusNoSipProfile: - { - MUS_LOG( "mus: [MUSSRV] that is EErrNoSipProfile" ) - status = EErrNoSipProfile; - break; - } - case EMusAvaStatusNotRegistered: - { - MUS_LOG( "mus: [MUSSRV] that is EErrSipRegistration" ) - status = EErrSipRegistration; - break; - } - case EMusAvaStatusNoCall: - { - MUS_LOG( "mus: [MUSSRV] that is EErrNoActiveCall" ) - status = EErrNoActiveCall; - break; - } - case EMusAvaStatusCallOnHold: - { - MUS_LOG( "mus: [MUSSRV] that is EErrCallOnHold" ) - status = EErrCallOnHold; - break; - } - case EMusAvaOptionNotAvailable: - { - MUS_LOG( "mus: [MUSSRV] that is EErrOptionAvailable" ) - status = ESipOptionsNotCapable; - break; - } - case EMusAvaStatusConferenceCall: - { - MUS_LOG( "mus: [MUSSRV] that is EErrConferenceCall" ) - status = EErrConferenceCall; - break; - } - case EMusAvaStatusOptionsSent: - { - MUS_LOG( "mus: [MUSSRV] that is ESipOptionsCapable" ) - status = ESipOptionsSent; - break; - } - case EMusAvaStatusOptionsNotSent: - { - MUS_LOG( "mus: [MUSSRV] that is ESipOptionsNotSent" ) - status = ESipOptionsNotSent; - break; - } - case EMusAvaNetworkType: - { - MUS_LOG( "mus: [MUSSRV] that is EErrNetwork" ) - status = EErrNetwork; - break; - } - case EMusAvaRoamingError: - { - MUS_LOG( "mus: [MUSSRV] that is EErrRoaming" ) - status = EErrRoaming; - break; - } - case EMusAvaConnectionErr: - { - MUS_LOG( "mus: [MUSSRV] that is EErrConnection" ) - status = EErrConnection; - break; - } - case EMusActivationError: - { - MUS_LOG( "mus: [MUSSRV] that is EErrActivation" ) - status = EErrActivation; - break; - } - - case EMusAvaManualActivation: - { - MUS_LOG( "mus: [MUSSRV] that is Manual Activation" ) - status = EManualActivation; - break; - } - - case EMusAvaEdgeDtmStatusUnknown: - { - MUS_LOG( "mus: [MUSSRV] Edge/DTM support" ) - status = EErrNetwork; - break; - } - default: - MUS_LOG( "mus: [MUSSRV] that is unknown; returning \ - KErrUnknown" ) - status = ( TMusAvailabilityStatus ) KErrUnknown; - } - return status; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::UpdateSessionParametersL() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - UpdateSessionParametersL()" ) - // clear the table - iSessionParameters->Delete( 0, iSessionParameters->Count() ); - - HBufC* telNumber = TelNumberLC(); - iSessionParameters->AppendL( *telNumber ); - CleanupStack::PopAndDestroy( telNumber ); - - HBufC* sipAddresses = SipAddressesLC(); - iSessionParameters->AppendL( *sipAddresses ); - CleanupStack::PopAndDestroy( sipAddresses ); - - MMusAvaSettings& settings = iPlugin->Settings(); - - // append sip address proposal - iSessionParameters->AppendL( settings.SipAddressProposal() ); - - // Unsafe Magic number 16 is used but unsigned 32 bit integer (TInt32) - // can't go beyond 16 digits . - TBuf<16> contactIdBuf; - contactIdBuf.Num( settings.ContactId() ); - - // append contact id - iSessionParameters->AppendL( contactIdBuf ); - - // append video codec - HBufC* videoCodecs = VideoCodecsLC(); - iSessionParameters->AppendL( *videoCodecs ); - CleanupStack::PopAndDestroy( videoCodecs ); - - // Unsafe Magic number 16 is used but unsigned 32 bit integer (TInt32) - // can't go beyond 16 digits . - TBuf<16> sipProfileIdBuf; - sipProfileIdBuf.Num( settings.SipProfileId() ); - - MUS_LOG1("iSessionParameters -> SIP Profile ID = %d ", - settings.SipProfileId() ) - - // append sip profile id - iSessionParameters->AppendL( sipProfileIdBuf ); - - HBufC* contactName = ContactNameLC(); - iSessionParameters->AppendL( *contactName ); - CleanupStack::PopAndDestroy( contactName ); - - // append call privacy indication - MUS_LOG1("iSessionParameters -> Call Privacy = %d ", - settings.CallPrivacy() ) - TBuf<16> callPrivacy; - callPrivacy.Num( settings.CallPrivacy() ); - iSessionParameters->AppendL( callPrivacy ); - - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - UpdateSessionParametersL()" ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC* CMusAvailabilityPluginManager::SipAddressesLC() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - SipAddressesLC()" ) - HBufC* sipAddresses = NULL; - - // We have to keep up with KMaxPropertySize since it is advertised through - // RProperty to UI process. - TBuf tbuf; - _LIT( KComma, "," ); - - MMusAvaSettings& settings = iPlugin->Settings(); - const MDesCArray& addresses = settings.SipAddresses(); - MUS_LOG1( "mus: [MUSSRV] addresses.MdcaCount() %d", - addresses.MdcaCount() ) - - for( TInt i=0;i - addresses.MdcaPoint(i).Size()+KComma().Size()) - { - if( i > 0) tbuf.Append( KComma() ); - tbuf.Append( addresses.MdcaPoint( i ) ); - } - else - { - // if no space just break and do not continue further. - break; - } - } - sipAddresses = tbuf.AllocLC(); - - MUS_LOG_TDESC( "mus: [MUSSRV] SIP Address: ", (*sipAddresses) ); - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - SipAddressesLC()" ) - - return sipAddresses; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC* CMusAvailabilityPluginManager::VideoCodecsLC() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - VideoCodecsLC()" ) - HBufC* videoCodecs = NULL; - - // We have to keep up with KMaxPropertySize since it is advertised through - // RProperty to UI process. - TBuf tbuf; - _LIT( KComma, "," ); - - MMusAvaSettings& settings = iPlugin->Settings(); - const MDesCArray& codecs = settings.VideoCodecs(); - MUS_LOG1( "mus: [MUSSRV] addresses.MdcaCount() %d", - codecs.MdcaCount() ) - - for( TInt i=0;i - codecs.MdcaPoint(i).Size()+KComma().Size()) - { - if( i > 0) tbuf.Append( KComma() ); - tbuf.Append( codecs.MdcaPoint( i ) ); - } - else - { - // if no space just break and do not continue further. - break; - } - } - videoCodecs = tbuf.AllocLC(); - - MUS_LOG_TDESC( "mus: [MUSSRV] Video codecs: ", (*videoCodecs) ); - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - VideoCodecsLC()" ) - - return videoCodecs; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC* CMusAvailabilityPluginManager::TelNumberLC() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - TelNumberLC()" ) - - MMusAvaSettings& settings = iPlugin->Settings(); - - HBufC* telNumber = settings.TelNumber().AllocLC(); - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - TelNumberLC()" ) - - return telNumber; - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -HBufC* CMusAvailabilityPluginManager::ContactNameLC() - { - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - ContactNameLC()" ) - - MMusAvaSettings& settings = iPlugin->Settings(); - - HBufC* contactName = settings.ContactName().AllocLC(); - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - ContactNameLC()" ) - - return contactName; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMusAvailabilityPluginManager::IndicateAvailabilityL() - { - - MUS_LOG( "mus: [MUSSRV] -> CMusAvailabilityPluginManager::\ - IndicateAvailabilityL()" ) - - if( PossibleToLaunch() ) - { - MUS_LOG( "mus: [MUSSRV] Status available" ) - if( !iIndicator ) - { - MUS_LOG( "mus: [MUSSRV] Create indicator" ) - iIndicator = CMusIndicatorApi::NewL( *this ); - iIndicator->IndicateAvailabilityL(); - } - iApplicationManager.SetIndicatorStatusL( ETrue ); - } - else - { - MUS_LOG( "mus: [MUSSRV] Not available" ) - iApplicationManager.SetIndicatorStatusL( EFalse ); - delete iIndicator; - iIndicator = NULL; - } - - MUS_LOG( "mus: [MUSSRV] <- CMusAvailabilityPluginManager::\ - IndicateAvailabilityL()" ) - } -