diff -r b31261fd4e04 -r ccd8e69b5392 mmsharing/mmshavailability/src/musavadefaultimp.cpp --- a/mmsharing/mmshavailability/src/musavadefaultimp.cpp Tue Feb 02 00:09:07 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,513 +0,0 @@ -/* -* Copyright (c) 2005-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: This is default implementation class for CMusAvaInterface -* -*/ - - - -#include "musavadefaultimp.h" -#include "musavaavailabilityobserver.h" -#include "musavaobserver.h" -#include "musavasettingsimp.h" -#include "musavasharedobject.h" -#include "muslogger.h" -#include "musavainvitehandler.h" -#include "musavanetworkavailability.h" -#include "musavacontactavailability.h" -#include "musavaconnectionavailability.h" -#include "musavaregisteravailability.h" -#include "musavaoptionhandler.h" -#include "musavadefaultoptionhandler.h" -#include "musavasipprofileavailability.h" -#include "musavasettingavailability.h" - -#include "mussesseioninformationapi.h" - -#include - - -const MMusAvaObserver::TAvailabilityName KMinimumAvailability - = MMusAvaObserver::EMusAvaBearerStatus; - -const MMusAvaObserver::TAvailabilityName KMandatoryAvailability - = MMusAvaObserver::EMusAvaNameRegistration; - -const MMusAvaObserver::TAvailabilityName KExtensionAvailability - = MMusAvaObserver::EMusAvaOptionHandler; - - -// ----------------------------------------------------------------------------- -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMusAvaDefaultImp* CMusAvaDefaultImp::NewL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::NewL" ) - CMusAvaDefaultImp* self = new (ELeave) CMusAvaDefaultImp(); - CleanupStack::PushL (self); - self->ConstructL(); - CleanupStack::Pop( self ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::NewL" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// C++ destructor. -// ----------------------------------------------------------------------------- -// -CMusAvaDefaultImp::~CMusAvaDefaultImp() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::~CMusAvaDefaultImp" ) - this->Stop(); - iAvailabilities.ResetAndDestroy(); - delete iSettings; - iSettings = NULL; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::~CMusAvaDefaultImp" ) - } - - -// ----------------------------------------------------------------------------- -// Symbian second-phase constructor. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::ConstructL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::ConstructL" ) - iSettings = CMusAvaSettingsImp::NewL(); - CreateAvailabilityModulesL(); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::ConstructL" ) - } - - -// ----------------------------------------------------------------------------- -// C++ Constructor -// ----------------------------------------------------------------------------- -// -CMusAvaDefaultImp::CMusAvaDefaultImp() - :iObserver( NULL ), - iCurrentAvailability( MMusAvaObserver::EMusAvaNameNotDefined ), - iAvailabilityStatus ( MMusAvaObserver::EMusAvaStatusNotExecuted ), - iStopping( EFalse ), - iExecuteStarted( EFalse ) - { - } - - -// ----------------------------------------------------------------------------- -// Creates concrete factory and all availability objects -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::CreateAvailabilityModulesL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::\ - CreateAvailabilityModulesL" ) - - if ( iAvailabilities.Count() ) - { - Stop(); - iAvailabilities.ResetAndDestroy(); - } - - /* We need handlers all the time to respond incoming Invite/Options - So construct this modules first. - */ - ConstuctHandlerAvailabilityModulesL(); - - /* We must check the static availability modules like sipprofile - mus activation settings. if this fails then this - will be fatal and no need to go and construct further. - */ - ConstructStaticAvailabilityModulesL(); - - /* Check the handler and static availability modules are OK . If it is not - * OK then dont need to create further availability modules. - */ - for ( TInt i = 0; i < iAvailabilities.Count(); i++ ) - { - if ( !iAvailabilities[i]->Available()) - { - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaDefaultImp:: \ - CreateAvailabilityModulesL Fails! Module = %d ",i ) - return ; - } - } - - /* This should construct modules in where availability could change - * dynamically such as network,bearer and call status etc. - */ - ConstructDynamicAvailabilityModulesL(); - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::\ - CreateAvailabilityModulesL" ) - } - -// ----------------------------------------------------------------------------- -// Creates concrete standard availability objects -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::ConstuctHandlerAvailabilityModulesL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::\ - ConstuctHandlerAvailabilityModulesL" ) - - CMusAvaInviteHandler* inviteHandler = CMusAvaInviteHandler::NewLC( - *this, *iSettings ) ; - iAvailabilities.AppendL( inviteHandler ); - CleanupStack::Pop( inviteHandler ); - - CMusAvaDefaultOptionHandler* defaultOptionHandler = - CMusAvaDefaultOptionHandler::NewLC( *this, *iSettings ); - iAvailabilities.AppendL( defaultOptionHandler ); - CleanupStack::Pop( defaultOptionHandler ); - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::\ - ConstuctHandlerAvailabilityModulesL" ) - } - -// ----------------------------------------------------------------------------- -// Creates concrete standard availability objects -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::ConstructStaticAvailabilityModulesL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::\ - ConstructStaticAvailabilityModulesL" ) - - /* Mus Activation Settings */ - CMusAvaSettingAvailability* settingAvailability = - CMusAvaSettingAvailability::NewLC( *this ); - iAvailabilities.AppendL( settingAvailability ); - CleanupStack::Pop( settingAvailability ); - - /* Existence of Sip profile */ - CMusAvaSipprofileAvailability* sipprofileExist = - CMusAvaSipprofileAvailability::NewLC( *this ) ; - iAvailabilities.AppendL( sipprofileExist ); - CleanupStack::Pop( sipprofileExist ); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp:: \ - ConstructStaticAvailabilityModulesL" ) - } - -// ----------------------------------------------------------------------------- -// Creates concrete standard availability objects -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::ConstructDynamicAvailabilityModulesL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::\ - ConstructDynamicAvailabilityModulesL" ) - // Create network availability - CMusAvaNetworkAvailability* networkAvailability = - CMusAvaNetworkAvailability::NewLC( *this, *iSettings ) ; - iAvailabilities.AppendL( networkAvailability ); - CleanupStack::Pop( networkAvailability ); - - // Contact availability - CMusAvaContactAvailability* contactAvailability = - CMusAvaContactAvailability::NewLC( *this, *iSettings ); - iAvailabilities.AppendL( contactAvailability ); - CleanupStack::Pop( contactAvailability ); - - //Connection monitor - CMusAvaConnectionAvailability* connectionAvailability = - CMusAvaConnectionAvailability::NewLC( *this, *iSettings ); - iAvailabilities.AppendL( connectionAvailability ); - CleanupStack::Pop( connectionAvailability ); - - // Create register availability - CMusAvaRegisterAvailability* registerAvailability = - CMusAvaRegisterAvailability::NewLC( *this, *iSettings ); - iAvailabilities.AppendL( registerAvailability ); - CleanupStack::Pop( registerAvailability ); - - // Extension availabilities -> - - // Create SIP options availability - CMusAvaOptionHandler* optionHandler = - CMusAvaOptionHandler::NewLC( *this, *iSettings ); - iAvailabilities.AppendL( optionHandler ); - CleanupStack::Pop( optionHandler ); - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::ConstructDynamicAvailabilityModulesL" ) - } - -// ----------------------------------------------------------------------------- -// Create work for executing availability report. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::ExecuteAvailablitityModules() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::\ - ExecuteAvailablitityModules" ) - iExecuteStarted = ETrue; - TBool goOn = ETrue; - for ( TInt i = 0; i < iAvailabilities.Count() && goOn; i++ ) - { - if ( !iAvailabilities[i]->Available() && - !iAvailabilities[i]->Executing()) - { - iAvailabilities[i]->Execute(); - if ( iAvailabilities[i]->State() < MMusAvaObserver::EMusAvaStatusInProgress ) - { - goOn = EFalse; - } - } - } - iExecuteStarted = EFalse; - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::\ - ExecuteAvailablitityModules" ) - } - - -// ----------------------------------------------------------------------------- -// Retuns setting interface for the client. -// ----------------------------------------------------------------------------- -// -MMusAvaSettings& CMusAvaDefaultImp::Settings() - { - return *iSettings; - } - - -// ----------------------------------------------------------------------------- -// Set Observer interface for the client. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::SetObserver( MMusAvaObserver& aObserver ) - { - iObserver = &aObserver; - } - -// ----------------------------------------------------------------------------- -// Set MMusAvaSettingsObserver interface for the client. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::SetSettingsObserver( MMusAvaSettingsObserver& aObserver ) - { - iSettings->SetObserver( aObserver ); - } -// ----------------------------------------------------------------------------- -// Requests the implementation to start to investigate availabilites. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::StartL() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::StartL" ) - ExecuteAvailablitityModules(); - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::StartL" ) - } - - -// ----------------------------------------------------------------------------- -// Requests the implementation to stop investigating or monitoring availabilites -// for the client. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::Stop() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::Stop" ) - iStopping = ETrue; - for ( TInt i = iAvailabilities.Count() - 1; i >= 0; i-- ) - { - if ( iAvailabilities[i]->State() > MMusAvaObserver::EMusAvaStatusNotExecuted ) - { - iAvailabilities[i]->Stop(); - } - } - CalculateAvailability(); - iStopping = EFalse; - if ( iObserver ) - { - iObserver->AvailabilityChanged( - CurrentAvailability(), - AvailabilityStatus() ); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::Stop" ) - } - - -// ----------------------------------------------------------------------------- -// Availability report. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::AvailabilityChanged( - MMusAvaObserver::TAvailabilityName aName, - MMusAvaObserver::TAvailabilityStatus aStatus ) - { - MUS_LOG2( "mus: [MUSAVA] -> CMusAvaDefaultImp::AvailabilityChanged(%d,%d)", - aName, aStatus ) - - CalculateAvailability(); - if ( iObserver ) - { - iObserver->AvailabilityChanged( aName, aStatus ); - } - - if ( !iStopping && aStatus >= MMusAvaObserver::EMusAvaStatusNotExecuted ) - { - if ( !iExecuteStarted ) - { - ExecuteAvailablitityModules(); - } - } - - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::AvailabilityChanged()" ) - } - - -// ----------------------------------------------------------------------------- -// Availability error. -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::AvailabilityError( - MMusAvaObserver::TAvailabilityName aName, - MMusAvaObserver::TAvailabilityStatus aStatus ) - { - MUS_LOG2( "mus: [MUSAVA] -> CMusAvaDefaultImp::AvailabilityError\ - ( %d, %d)", aName, aStatus ) - - CalculateAvailability(); - if ( iObserver ) - { - iObserver->AvailabilityError( aName, aStatus ); - } - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::AvailabilityError()" ) - } - -// ----------------------------------------------------------------------------- -// Checks if the current availability is at least the same as given as -// parameter -// ----------------------------------------------------------------------------- -// -TBool CMusAvaDefaultImp::Available( - MMusAvaObserver::TAvailabilityName aAvailability ) - { - return iCurrentAvailability > aAvailability - || ( iCurrentAvailability == aAvailability - && MMusAvaObserver::EMusAvaStatusAvailable == iAvailabilityStatus ) - || ( iCurrentAvailability == aAvailability - && ( MMusAvaObserver::EMusAvaStatusOptionsNotSent == iAvailabilityStatus - || MMusAvaObserver::EMusAvaStatusOptionsSent == iAvailabilityStatus) ); - } - -// ----------------------------------------------------------------------------- -// Calculates current availability -// ----------------------------------------------------------------------------- -MMusAvaObserver::TAvailabilityStatus CMusAvaDefaultImp::AvailabilityPluginState() - { - return iAvailabilityStatus; - } -// ----------------------------------------------------------------------------- -// Calculates current availability -// ----------------------------------------------------------------------------- -// -void CMusAvaDefaultImp::CalculateAvailability() - { - MUS_LOG( "mus: [MUSAVA] -> CMusAvaDefaultImp::CalculateAvailability()" ) - iCurrentAvailability = MMusAvaObserver::EMusAvaFullAvailability; - iAvailabilityStatus = MMusAvaObserver::EMusAvaStatusAvailable; - TBool goOn = ETrue; - for ( TInt i = 0; i < iAvailabilities.Count() && goOn; i++ ) - { - if ( !iAvailabilities[i]->Available() ) - { - iCurrentAvailability = iAvailabilities[i]->Name(); - iAvailabilityStatus = iAvailabilities[i]->State(); - goOn = EFalse; - } - } - MUS_LOG2( "mus: [MUSAVA] Avaialability name and status (%d,%d)", - iCurrentAvailability, iAvailabilityStatus ) - MUS_LOG( "mus: [MUSAVA] <- CMusAvaDefaultImp::CalculateAvailability()" ) - } - -// ----------------------------------------------------------------------------- -// Current availability -// ----------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityName CMusAvaDefaultImp::CurrentAvailability() - { - return iCurrentAvailability; - } - - -// ----------------------------------------------------------------------------- -// Current availability status -// ----------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityStatus CMusAvaDefaultImp::AvailabilityStatus() - { - return iAvailabilityStatus; - } - - -// ----------------------------------------------------------------------------- -// Checks if current availability is at least minimum availability -// ----------------------------------------------------------------------------- -// -TBool CMusAvaDefaultImp::MinimumAvailability() - { - return iCurrentAvailability > KMinimumAvailability; - } - - -// ----------------------------------------------------------------------------- -// Checks if current availability is at least mandatory availability -// ----------------------------------------------------------------------------- -// -TBool CMusAvaDefaultImp::MandatoryAvailability() - { - return iCurrentAvailability > KMandatoryAvailability; - } - - -// ----------------------------------------------------------------------------- -// Checks if current availability is extension availability -// ----------------------------------------------------------------------------- -// -TBool CMusAvaDefaultImp::ExtensionAvailability() - { - return iCurrentAvailability > KExtensionAvailability; - } - -// ----------------------------------------------------------------------------- -// Returns the sate of the given availability -// ----------------------------------------------------------------------------- -// -MMusAvaObserver::TAvailabilityStatus CMusAvaDefaultImp::AvailabilityState( - MMusAvaObserver::TAvailabilityName aAvailability ) - { - MUS_LOG1( "mus: [MUSAVA] -> CMusAvaDefaultImp::AvailabilityState(%d)", - aAvailability ) - MMusAvaObserver::TAvailabilityStatus retval = - MMusAvaObserver::EMusAvaStatusNotExecuted; - MMusAvaObserver::TAvailabilityStatus state = - MMusAvaObserver::EMusAvaStatusAvailable; - - for ( TInt i = 0; i < iAvailabilities.Count() - && state > MMusAvaObserver::EMusAvaStatusNotExecuted; i++ ) - { - state = iAvailabilities[i]->State(); - - if ( iAvailabilities[i]->Name() == aAvailability ) - { - retval = iAvailabilities[i]->State(); - } - } - MUS_LOG1( "mus: [MUSAVA] <- CMusAvaDefaultImp::AvailabilityState(%d)", - retval ) - return retval; - }