diff -r 65a3ef1d5bd0 -r f742655b05bf commsconfig/cscengine/src/cscengservicepluginhandler.cpp --- a/commsconfig/cscengine/src/cscengservicepluginhandler.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,681 +0,0 @@ -/* -* Copyright (c) 2007-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: For CSC needed AIW handling for service plug-ins -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cscenglogger.h" -#include "cscengecommonitor.h" -#include "cscengservicehandler.h" -#include "cscengservicepluginhandler.h" -#include "mcscengprovisioningobserver.h" - -// Resource file location. -_LIT( KCSCEngineResourceFile, "cscengine.rsc" ); // file - -const TInt KMandatoryParamCount = 3; - - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCEngServicePluginHandler::CCSCEngServicePluginHandler( - CEikonEnv& aEikEnv, - MCSCEngProvisioningObserver& aObserver, - CCSCEngServiceHandler& aServiceHandler ) : - iEikEnv( aEikEnv ), - iObserver( aObserver ), - iServiceHandler( aServiceHandler ) - { - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::ConstructL() - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::ConstructL - begin" ); - - // Attach to AIW Framework. - iAiwServiceHandler = CAiwServiceHandler::NewL(); - - // Load resource file to the memory. - TFileName resourceFile = TParsePtrC( PathInfo::RomRootPath() ).Drive(); - resourceFile.Append( KDC_RESOURCE_FILES_DIR ); - resourceFile.Append( KCSCEngineResourceFile ); - BaflUtils::NearestLanguageFile( iEikEnv.FsSession(), resourceFile ); - iResourceOffset = iEikEnv.AddResourceFileL( resourceFile ); - - CSCENGDEBUG( "CCSCEngServicePluginHandler::ConstructL - end" ); - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -EXPORT_C CCSCEngServicePluginHandler* CCSCEngServicePluginHandler::NewL( - CEikonEnv& aEikEnv, - MCSCEngProvisioningObserver& aObserver, - CCSCEngServiceHandler& aServiceHandler ) - { - CCSCEngServicePluginHandler* self = - CCSCEngServicePluginHandler::NewLC( - aEikEnv, aObserver, aServiceHandler ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -EXPORT_C CCSCEngServicePluginHandler* CCSCEngServicePluginHandler::NewLC( - CEikonEnv& aEikEnv, - MCSCEngProvisioningObserver& aObserver, - CCSCEngServiceHandler& aServiceHandler ) - { - CCSCEngServicePluginHandler* self = - new ( ELeave ) CCSCEngServicePluginHandler( - aEikEnv, aObserver, aServiceHandler ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCEngServicePluginHandler::~CCSCEngServicePluginHandler() - { - CSCENGDEBUG( - "CCSCEngServicePluginHandler::~CCSCEngServicePluginHandler - begin" ); - - iEikEnv.DeleteResourceFile( iResourceOffset ); - iServicePluginInfoArray.Reset(); - iServicePluginInfoArray.Close(); - delete iEcomMonitor; - delete iAiwServiceHandler; - - CSCENGDEBUG( - "CCSCEngServicePluginHandler::~CCSCEngServicePluginHandler - end" ); - } - - -// --------------------------------------------------------------------------- -// Initializes CSC supported plugins. -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServicePluginHandler::InitializePluginsL() - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::InitializePluginsL - begin" ); - - // Reset service plugin info array. - iServicePluginInfoArray.Reset(); - - // Attach to CSC supported plugins and execute initalization. - iAiwServiceHandler->AttachL( R_CSCENG_INTEREST_SERVICE_PLUGIN ); - iAiwServiceHandler->ExecuteServiceCmdL( - KAiwCmdCSCServicePlugins, - iAiwServiceHandler->InParamListL(), - iAiwServiceHandler->OutParamListL(), - EPluginInitialize, - this ); - - // Start monitoring service setup plugins. - if ( !iEcomMonitor ) - { - iEcomMonitor = CCSCEngEcomMonitor::NewL( *this ); - } - - CSCENGDEBUG( "CCSCEngServicePluginHandler::InitializePluginsL - end" ); - } - -// --------------------------------------------------------------------------- -// Informs plugin of provisioning -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServicePluginHandler::DoProvisioningL( - const TUid& aPluginUid, const TUid& aViewUid ) - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::DoProvisioningL - begin" ); - - // Set plugins Uid to generic param data. - CAiwGenericParamList& paramList = iAiwServiceHandler->OutParamListL(); - TAiwVariant variant( aPluginUid ); - TAiwGenericParam genericParamUid( EGenericParamError, variant ); - paramList.AppendL( genericParamUid ); - - // Set view id to be returned to generic param data. - variant.Reset(); - variant.Set( aViewUid ); - TAiwGenericParam genericParamViewId( EGenericParamError, variant ); - paramList.AppendL( genericParamViewId ); - - // Set bogus iap id to maintain backwards compatibility with older service - // plugins - TUint32 bogusIap( KErrNone ); - - variant.Reset(); - variant.Set( bogusIap ); - TAiwGenericParam genericParamIap( EGenericParamError, variant ); - paramList.AppendL( genericParamIap ); - - // Execute service handler command. - iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdCSCServicePlugins, - iAiwServiceHandler->InParamListL(), - paramList, - EPluginProvisioning, - this ); - - CSCENGDEBUG( "CCSCEngServicePluginHandler::DoProvisioningL - end" ); - } - - -// --------------------------------------------------------------------------- -// Launches plugin provided setting view. -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServicePluginHandler::LaunchPluginViewL( - const TUid& aPluginUid, const TUid& aViewUid ) - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::LaunchPluginViewL - begin" ); - - // Set plugins Uid to generic param data. - CAiwGenericParamList& paramList = iAiwServiceHandler->OutParamListL(); - TAiwVariant variant( aPluginUid ); - TAiwGenericParam genericParamUid( EGenericParamError, variant ); - paramList.AppendL( genericParamUid ); - - // Set view id to be returned to generic param data. - variant.Reset(); - variant.Set( aViewUid ); - TAiwGenericParam genericParamViewId( EGenericParamError, variant ); - paramList.AppendL( genericParamViewId ); - - // Execute service handler command. - iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdCSCServicePlugins, - iAiwServiceHandler->InParamListL(), - paramList, - EPluginModifySettings, - this ); - - CSCENGDEBUG( "CCSCEngServicePluginHandler::LaunchPluginViewL - end" ); - } - - -// --------------------------------------------------------------------------- -// Informs plugin from removation. -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServicePluginHandler::DoRemovationL( - const TUid& aPluginUid, TBool aDeleteSisPckg ) - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::DoRemovationL - begin" ); - - // Set flag for application installer launching. - iRunSwinst = aDeleteSisPckg; - - // Set plugins Uid to generic param data. - CAiwGenericParamList& paramList = iAiwServiceHandler->OutParamListL(); - TAiwVariant variant( aPluginUid ); - TAiwGenericParam genericParamUid( EGenericParamError, variant ); - paramList.AppendL( genericParamUid ); - - // Execute service handler command. - iAiwServiceHandler->ExecuteServiceCmdL( KAiwCmdCSCServicePlugins, - iAiwServiceHandler->InParamListL(), - paramList, - EPluginRemovation, - this ); - - CSCENGDEBUG( "CCSCEngServicePluginHandler::DoRemovationL - end" ); - } - - -// --------------------------------------------------------------------------- -// Returns plugin counts from PluginsInfoArray. -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServicePluginHandler::PluginCount( - const TPluginCount aType ) const - { - TInt count( 0 ); - - for ( TInt i = 0; i < iServicePluginInfoArray.Count(); i++ ) - { - switch ( aType ) - { - // CSC supported and initialized plugin count. - case EInitialized: - count++; - break; - // CSC supported and unprovisioned plugin count. - case EUnprovisioned: - if ( !iServicePluginInfoArray[ i ].iProvisioned ) - { - count++; - } - break; - default: - break; - } - } - - CSCENGDEBUG2( "CCSCEngServicePluginHandler::PluginCount: %d", count ); - - return count; - } - - -// --------------------------------------------------------------------------- -// Return item from serviceplugininfoarray. -// --------------------------------------------------------------------------- -// -EXPORT_C TServicePluginInfo - CCSCEngServicePluginHandler::ItemFromPluginInfoArray( TInt aIndex ) - { - return iServicePluginInfoArray[ aIndex ]; - } - - -// --------------------------------------------------------------------------- -// From class MAiwNotifyCallBack -// Handles received callbacks from AIW plugin. -// --------------------------------------------------------------------------- -// -TInt CCSCEngServicePluginHandler::HandleNotifyL( - TInt /*aCmdId*/, - TInt aEventId, - CAiwGenericParamList& /*aEventParamList*/, - const CAiwGenericParamList& aInParamList ) - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::HandleNotifyL - begin"); - - TInt err( KErrNone ); - - switch ( aEventId ) - { - // =================================================================== - // Every supported CSC plugin sends callback event when it has - // been initialized. Generic parameter include 3 different values. - // Initialization parameters are described in CSC Service Plugin - // interface description document: - // "Example Operator" <- Name shown to user - // "00" <- First value 0 or 1 provides information - // whether Plugin has modifiable UI or not. This - // information is needed when provisioning - // control is given to Plugin. - // <- Second value presents information whether - // Plugin requires Active IAP in order to - // process provisioning. - // =================================================================== - case KAiwEventStarted: - { - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL - KAiwEventStarted" ); - - // Parse initialization data and append data to the infoarray. - SetPluginInitInfoL( aInParamList ); - - TInt index( 0 ); - TUid pluginUid( KNullUid ); - - GetPluginIndexAndUid( aInParamList, index, pluginUid ); - - iObserver.NotifyServicePluginResponse( - EPluginInitialized, index, pluginUid ); - break; - } - - // =================================================================== - // Target plugins sends callback note when provisioning is finished. - // Generic parameter include 1 value. - // Initialization parameters are described in CSC Service Plugin - // interface description document: - // "TUid" <- Plugins uid value [TUid] - // =================================================================== - case KAiwEventCompleted: - { - TInt index( 0 ); - TUid pluginUid( KNullUid ); - - GetPluginIndexAndUid( aInParamList, index, pluginUid ); - - if ( index < iServicePluginInfoArray.Count() ) - { - iServicePluginInfoArray[ index ].iProvisioned = ETrue; - - iObserver.NotifyServicePluginResponse( - EPluginProvisioned, index, pluginUid ); - } - - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL KAiwEventCompleted" ); - break; - } - - // =================================================================== - // Target plugins sends callback note when plugins modified ui is - // ready. Generic parameter include 1 value. - // Initialization parameters are described in CSC Service Plugin - // interface description document: - // "TUid" <- Plugins uid value [TUid] - // =================================================================== - case KAiwEventStopped: - { - TInt index( 0 ); - TUid pluginUid( KNullUid ); - - GetPluginIndexAndUid( aInParamList, index, pluginUid ); - - iObserver.NotifyServicePluginResponse( - EPluginModified, index, pluginUid ); - - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL KAiwEventStopped" ); - break; - } - - // =================================================================== - // Target plugins sends callback note when plugins setting removation - // process is ready. Generic parameter include 1 value. - // Initialization parameters are described in CSC Service Plugin - // interface description document: - // "TUid" <- Plugins uid value [TUid] - // =================================================================== - case KAiwEventQueryExit: - { - TInt index( 0 ); - TUid pluginUid( KNullUid ); - - GetPluginIndexAndUid( aInParamList, index, pluginUid ); - GetPluginViewId( aInParamList ); - - if ( iRunSwinst ) - { - // Try to remove .sis file from the device. - TRAP_IGNORE( RemovePluginSisL( pluginUid ) ); - } - - iObserver.NotifyServicePluginResponse( - EPluginRemoved, index, pluginUid ); - - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL KAiwEventQueryExit" ); - break; - } - - // =================================================================== - // Target plugins sends callback note if plugins provisioning failed. - // Generic parameter include 1 value. - // Initialization parameters are described in CSC Service Plugin - // interface description document: - // "TUid" <- Plugins uid value [TUid] - // =================================================================== - case KAiwEventError: - { - TInt index( 0 ); - TUid pluginUid( KNullUid ); - - GetPluginIndexAndUid( aInParamList, index, pluginUid ); - - iObserver.NotifyServicePluginResponse( - EPluginError, index, pluginUid ); - - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL KAiwEventError" ); - break; - } - default: - CSCENGDEBUG( - "CCSCEngServicePluginHandler::HandleNotifyL: !!DEFAULT!!" ); - break; - } - - CSCENGDEBUG( "CCSCEngServicePluginHandler::HandleNotifyL - end" ); - - return err; - } - - -// --------------------------------------------------------------------------- -// From class MCSCEngEcomObserver -// Observer interface for notifying ecom events. -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::NotifyEcomEvent() - { - // Re-initialize service setup plugins. - TRAP_IGNORE( InitializePluginsL() ); - } - - -// --------------------------------------------------------------------------- -// For Getting plug-ins index in plug-in info array and plug-ins uid. -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::GetPluginIndexAndUid( - const CAiwGenericParamList& aInParamList, - TInt& aIndex, - TUid& aPluginUid ) - { - const TAiwGenericParam* genericParam = NULL; - - genericParam = aInParamList.FindFirst( aIndex, - EGenericParamError, - EVariantTypeTUid ); - - aPluginUid = genericParam->Value().AsTUid(); - - for ( TInt i = 0; i < iServicePluginInfoArray.Count(); i++ ) - { - if ( aPluginUid == iServicePluginInfoArray[ i ].iPluginsUid ) - { - aIndex = i; - break; - } - } - } - -// --------------------------------------------------------------------------- -// For Getting and setting plug-ins view id. -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::GetPluginViewId( - const CAiwGenericParamList& aInParamList ) - { - const TAiwGenericParam* genericParam = NULL; - TUid pluginUid( KNullUid ); - TUid viewId( KNullUid ); - TInt index( 0 ); - - // First is plug-in uid, not needed now - genericParam = aInParamList.FindFirst( index, - EGenericParamError, - EVariantTypeTUid ); - - pluginUid = genericParam->Value().AsTUid(); - - // Find next which is view id - genericParam = aInParamList.FindNext( index, - EGenericParamError, - EVariantTypeTUid ); - - viewId = genericParam->Value().AsTUid(); - - for ( TInt i = 0; i < iServicePluginInfoArray.Count(); i++ ) - { - if ( pluginUid == iServicePluginInfoArray[ i ].iPluginsUid ) - { - iServicePluginInfoArray[ i ].iViewId = viewId; - break; - } - } - } - -// --------------------------------------------------------------------------- -// For parsing and settings plug-in initialization info -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::SetPluginInitInfoL( - const CAiwGenericParamList& aInParamList ) - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::SetPluginInitInfoL - begin" ); - - if ( KMandatoryParamCount <= aInParamList.Count() ) - { - TServicePluginInfo pluginInfo; - TInt index = 0; - - const TAiwGenericParam* genericParam = NULL; - - // First generic value is plugin Uid. - genericParam = aInParamList.FindFirst( index, - EGenericParamError, - EVariantTypeTUid ); - - pluginInfo.iPluginsUid = genericParam->Value().AsTUid(); - - // Second generic value is plugin name. - genericParam = aInParamList.FindNext( index, - EGenericParamError, - EVariantTypeDesC ); - - pluginInfo.iProviderName.Copy( genericParam->Value().AsDes() ); - - CSCENGDEBUG2( - "CCSCEngServicePluginHandler::SetPluginInitInfoL: PROVIDER NAME: %S", - &pluginInfo.iProviderName ); - - // Third generic value is modified Ui and needed Iap. - genericParam = aInParamList.FindNext( index, - EGenericParamError, - EVariantTypeDesC8 ); - - TPtrC8 data = genericParam->Value().AsData(); - - TInt hasUi = 0; - TLex8 lexerUi( data.Left( 1 ) ); - lexerUi.Val( hasUi ); - - pluginInfo.iModifiedUi = hasUi; - - CSCENGDEBUG2( - "CCSCEngServicePluginHandler::SetPluginInitInfoL Ui: %d", hasUi ); - - TInt reqIap = 0; - TLex8 lexerIap( data.Right( 1 ) ); - lexerIap.Val( reqIap ); - - pluginInfo.iRequiredIap = reqIap; - - CSCENGDEBUG2( - "CCSCEngServicePluginHandler::SetPluginInitInfoL Iap: %d", reqIap ); - - - // Check if plug-in is already provisioned - pluginInfo.iProvisioned = EFalse; - RArray serviceIds; - CleanupClosePushL( serviceIds ); - - TRAPD( err, iServiceHandler.GetAllServiceIdsL( serviceIds ) ); - - for ( TInt i( 0 ) ; i < serviceIds.Count() && !err ; i++ ) - { - TInt32 pluginUid( 0 ); - TInt err2( KErrNone ); - - TRAP( err2, pluginUid = - iServiceHandler.ServiceSetupPluginIdL( serviceIds[ i ] ) ); - - - CSCENGDEBUG2( - "CCSCEngServicePluginHandler::SetPluginInitInfoL ERR=%d", err2 ); - - - if ( !err2 && ( pluginInfo.iPluginsUid.iUid == pluginUid ) ) - { - pluginInfo.iProvisioned = ETrue; - } - } - - CleanupStack::PopAndDestroy( &serviceIds ); - - // Check if the plugin is already in array before appending. - TBool found( EFalse ); - for ( TInt counter( 0 ); - counter < iServicePluginInfoArray.Count(); - counter++ ) - { - if ( iServicePluginInfoArray[counter].iPluginsUid == - pluginInfo.iPluginsUid ) - { - found = ETrue; - } - } - if ( !found ) - { - iServicePluginInfoArray.Append( pluginInfo ); - } - } - - CSCENGDEBUG( "CCSCEngServicePluginHandler::SetPluginInitInfoL - end" ); - } - - -// --------------------------------------------------------------------------- -// Invokes application installer to remove .sis from device. -// --------------------------------------------------------------------------- -// -void CCSCEngServicePluginHandler::RemovePluginSisL( - const TUid& aPluginUid ) const - { - CSCENGDEBUG( "CCSCEngServicePluginHandler::RemovePluginSisL - begin" ); - - // Create & connect to the software installation server. - SwiUI::RSWInstSilentLauncher swInstaller; - CleanupClosePushL( swInstaller ); - User::LeaveIfError( swInstaller.Connect() ); - - // Make silent uninstall via sowtware installation server. - SwiUI::TInstallOptionsPckg uninstallOptions; - User::LeaveIfError( - swInstaller.SilentUninstall( - aPluginUid , - uninstallOptions, - SwiUI::KSisxMimeType ) ); - - // Close & destroy server after uninstallation. - CleanupStack::PopAndDestroy( &swInstaller ); - - CSCENGDEBUG( "CCSCEngServicePluginHandler::RemovePluginSisL - end" ); - }