commsconfig/cscengine/src/cscengservicepluginhandler.cpp
branchRCL_3
changeset 21 f742655b05bf
parent 20 65a3ef1d5bd0
child 22 d38647835c2e
--- 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 <eikenv.h>
-#include <bautils.h>
-#include <pathinfo.h>
-#include <ecom/ecom.h>
-#include <SWInstApi.h>
-#include <SWInstDefs.h>
-#include <AiwCommon.hrh>
-#include <cscengine.rsg>
-#include <AiwServiceHandler.h>
-#include <mspnotifychangeobserver.h>
-#include <data_caging_path_literals.hrh>
-
-#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<TUint> 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" );
-    }