homescreenpluginsrv/hspsmanager/src/hspsthemeserversession.cpp
branchRCL_3
changeset 30 a5a39a295112
child 31 8baec10861af
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenpluginsrv/hspsmanager/src/hspsthemeserversession.cpp	Wed Sep 01 12:22:09 2010 +0100
@@ -0,0 +1,987 @@
+/*
+* Copyright (c) 2008 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:  HSPS Theme Server Session. For more information, see the header.
+*
+*/
+
+
+// INCLUDE FILES
+#include <f32file.h>
+
+#include "hsps_builds_cfg.hrh"
+#ifdef _hsps_PERFORMANCE_TEST_
+#include "hspstimemon.h"
+#endif //_hsps_PERFORMANCE_TEST_
+#include "hspsthemeserversession.h"
+#include "hspsthemeserver.h"
+#include "hspsinstallationhandler.h"
+#include "hspsmaintenancehandler.h"
+#include "hspsclientrequesthandler.h"
+#include "hspsserverutil.h"
+#include "hspsrominstaller.h"
+#ifdef HSPS_LOG_ACTIVE
+#include <hspsodtdump.h>
+#include <hspslogbusfile.h>
+#endif
+
+// CONSTANTS
+
+//
+//
+// Class ChspsThemeServerSession
+//
+//
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ChspsThemeServerSession
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+ChspsThemeServerSession::ChspsThemeServerSession(
+    const TInt aAppUid ) : 
+    iAppUid( aAppUid ),
+    iIconFileCopyRequired( ETrue ),
+    iResourceFileCopyRequired( ETrue )
+    {
+    }
+  
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ChspsThemeServerSession
+// 2nd phase construct for sessions - called by the CServer framework
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CreateL()
+    {
+#ifdef HSPS_LOG_ACTIVE    
+    iLogBus = ChspsLogBusFile::NewL( ChspsLogBusFile::CreateLogFilename( _L("themeserver_session") ) );
+    iLogBus->LogText( _L( "ChspsThemeServerSession::CreateL" ) );
+    iLogBus->LogText( _L( "--------------------------------------------------------" ) );
+#endif
+    
+    Server().AddSession( this );
+    iHoldingResources = EFalse;
+    User::LeaveIfError( iFs.Connect() );
+    Server().CheckConfigurationL( iAppUid );
+    }
+
+// Destructor
+ChspsThemeServerSession::~ChspsThemeServerSession()
+    {
+    iFs.Close();
+    
+    if ( iInstallationHandler )
+        {
+        delete iInstallationHandler;
+        Server().DefinitionRepository().Unlock();
+        }
+  
+    delete iMaintenanceHandler;
+    // decrease number of resource holders if this sessions did hold one
+    if ( iHoldingResources )
+        {
+        Server().DecreaseRequestClientCount();      
+        }
+    delete iClientRequestHandler;
+   
+    Server().DropSession( this );
+
+#ifdef HSPS_LOG_ACTIVE
+    if( iLogBus )
+        {
+        iLogBus->LogText( _L( "ChspsThemeServerSession::~ChspsThemeServerSession" ) );
+        iLogBus->LogText( _L( "--------------------------------------------------------" ) );
+        }
+    // Delete as last if another components use this log bus instance.
+    delete iLogBus;
+    iLogBus = NULL;
+#endif    
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::Server
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+inline ChspsThemeServer& ChspsThemeServerSession::Server()
+    {
+    return *static_cast<ChspsThemeServer*>(const_cast<CServer2*>(CSession2::Server()));
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ServiceL
+// Handle a client request.
+// Leaving is handled by ChspsThemeServerSession::ServiceError() which reports
+// the error code to the client
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::ServiceL( const RMessage2& aMessage )
+    {
+    TRAPD( errorCode, DoServiceL( aMessage ) );
+    if ( errorCode && !aMessage.IsNull() )        
+        {
+        aMessage.Complete( EhspsServiceRequestError );    
+#ifdef HSPS_LOG_ACTIVE        
+        iLogBus->LogText( _L( "ServiceL: - error in calling function %d." ), aMessage.Function() );
+#endif
+        }
+
+#ifdef HSPS_LOG_ACTIVE    
+    iLogBus->LogText( _L( "ServiceL completed with code: %d" ), errorCode );
+    iLogBus->LogText( _L( "--------------------------------------------------------" ) );
+#endif        
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::DoServiceL
+// -----------------------------------------------------------------------------
+void ChspsThemeServerSession::DoServiceL( const RMessage2& aMessage )    
+    {    
+    switch ( aMessage.Function() )
+        {
+        // installation:
+        case EhspsInstallTheme:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsInstallTheme" ) );
+#endif            
+            InstallThemeL( aMessage );
+            break;
+            } 
+          
+        case EhspsInstallNextPhase:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsInstallNextPhase" ) );
+#endif                   
+            InstallNextPhaseL( aMessage );
+            break;
+            }   
+          
+        case EhspsCancelInstallTheme:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsCancelInstallTheme" ) );
+#endif                    
+            CancelInstallThemeL( aMessage );
+            break;
+            }
+    
+        case EhspsReinstallConf:
+            {
+#ifdef HSPS_LOG_ACTIVE
+            iLogBus->LogText( _L( "DoServiceL: EhspsReinstallConf" ) );
+#endif            
+            ReinstallConfL( aMessage );
+            break;
+            }
+    
+            // maintenance
+        case EhspsGetListHeaders:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsGetListHeaders" ) );
+#endif            
+            GetListHeadersL( aMessage );
+            break;
+            }
+          
+        case EhspsGetNextHeader:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsGetNextHeader" ) );
+#endif                    
+            GetNextHeaderL( aMessage );
+            break;
+            }
+          
+        case EhspsCancelGetListHeaders:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsCancelGetListHeaders" ) );
+#endif                    
+            CancelGetListHeadersL( aMessage );
+            break;
+            }
+        
+        case EhspsSetActiveTheme:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsSetActiveTheme" ) );
+#endif            
+            SetActiveThemeL( aMessage );
+            break;
+            }
+    
+        case EhspsRestoreDefault:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsRestoreDefault" ) );
+#endif                    
+            RestoreDefaultL( aMessage );
+            break;
+            }
+          
+        case EhspsRemoveTheme:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsRemoveTheme" ) );
+#endif                    
+            RemoveThemeL( aMessage );
+            break;
+            }
+      
+        // client request
+        case EhspsGetODT:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsGetODT" ) );
+#endif            
+            GetOdtL( aMessage );
+            break;
+            }
+        	
+        case EhspsGetODTUpdate:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsGetODTUpdate" ) );
+#endif            
+            GetOdtUpdateL( aMessage );
+            break;
+            }
+          
+        case EhspsCancelGetODTUpdate:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsCancelGetODTUpdate" ) );
+#endif                    
+            CancelGetOdtUpdateL( aMessage );
+            break;
+            }
+                   
+        case EhspsAccessResourceFile:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsAccessResourceFile" ) );
+#endif                    
+            AccessResourceFileL( aMessage );
+            break;
+            } 
+            
+        case EhspsCopyResources:
+        	{
+#ifdef HSPS_LOG_ACTIVE    	
+        	iLogBus->LogText( _L( "DoServiceL: EhspsCopyResources" ) );
+#endif    	        	
+        	if( iResourceFileCopyRequired )
+        	    {
+                CopyResourceFilesL( aMessage );
+                iResourceFileCopyRequired = EFalse;
+        	    }
+        	else
+        	    {
+                aMessage.Complete( EhspsResourceCopySuccess );        	
+        	    }
+        	break;
+        	}
+        case EhspsAddPlugin:
+        	{
+#ifdef HSPS_LOG_ACTIVE    	
+        	iLogBus->LogText( _L( "DoServiceL: EhspsAddPlugin" ) );
+#endif    	        	
+        	AddPluginL( aMessage );
+        	break;
+        	}
+        case EhspsRemovePlugin:
+        	{
+#ifdef HSPS_LOG_ACTIVE    	
+        	iLogBus->LogText( _L( "DoServiceL: EhspsRemovePlugin" ) );
+#endif    	        	
+        	RemovePluginL( aMessage );
+        	break;
+        	}
+        case EhspsSetActivePlugin:
+            {
+#ifdef HSPS_LOG_ACTIVE      
+            iLogBus->LogText( _L( "DoServiceL: EhspsSetActivePlugin" ) );
+#endif                  
+            SetActivePluginL( aMessage );
+            break;
+            }        	
+        case EhspsReplacePlugin:
+            {
+#ifdef HSPS_LOG_ACTIVE      
+            iLogBus->LogText( _L( "DoServiceL: EhspsReplacePlugin" ) );
+#endif                  
+            ReplacePluginL( aMessage );
+            break;
+            }        	
+        case EhspsSetPluginSettings:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: EhspsSetPluginSettings" ) );
+#endif                    
+            SetPluginSettingsL( aMessage );
+            break;
+            } 	
+        case EhspsGetPluginOdt:
+        	{
+#ifdef HSPS_LOG_ACTIVE    	
+            iLogBus->LogText( _L( "DoServiceL: EhspsGetPluginOdt" ) );
+#endif            
+         	GetPluginOdtL( aMessage );
+        	break;
+        	}
+        case EhspsMovePlugins:
+        	{
+#ifdef HSPS_LOG_ACTIVE    	
+        	iLogBus->LogText( _L( "DoServiceL: EhspsMovePlugins" ) );
+#endif    	        	
+        	MovePluginsL( aMessage );
+        	break;
+        	}
+        case EhspsSetConfState:
+            {
+#ifdef HSPS_LOG_ACTIVE    	        
+            iLogBus->LogText( _L( "DoServiceL: EhspsSetConfState" ) );
+#endif    
+            SetConfStateL( aMessage );
+            break;
+            }
+	    case EhspsRestoreActiveAppConf:
+	        {
+#ifdef HSPS_LOG_ACTIVE              
+	        iLogBus->LogText( _L( "DoServiceL: EhspsRestoreActiveAppConf" ) );
+#endif
+	        RestoreActiveAppConfL( aMessage );
+	        break;
+	        }
+	    case EhspsRestoreConfigurations:
+	        {
+#ifdef HSPS_LOG_ACTIVE              
+            iLogBus->LogText( _L( "DoServiceL: EhspsRestoreConfigurations" ) );
+#endif
+            RestoreConfigurationsL( aMessage );
+            break;	        
+	        }
+        default:
+            {
+#ifdef HSPS_LOG_ACTIVE        
+            iLogBus->LogText( _L( "DoServiceL: - unrecognized function %d called." ), aMessage.Function() );
+#endif                                    
+            User::Leave( KErrNotSupported ); 
+            break;
+            }
+            
+        } // switch   
+    }
+  
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ServiceError
+// Handle an error from ChspsThemeServerSession::ServiceL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::ServiceError(const RMessage2& aMessage,TInt aError)
+    {
+#ifdef HSPS_LOG_ACTIVE    
+    iLogBus->LogText( _L( "hspsThemeServer: ChspsThemeServerSession::ServiceError(): %d" ), aError ); 
+#endif
+            
+    CSession2::ServiceError(aMessage,aError);
+    }
+
+// Installation 
+// ************
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::InstallThemeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::InstallThemeL(const RMessage2& aMessage)
+    {
+    // delete previous handler and create new one for this installation
+    if ( iInstallationHandler )
+        {
+        delete iInstallationHandler;
+        iInstallationHandler = NULL;
+        }
+    iInstallationHandler = ChspsInstallationHandler::NewL( Server() );
+    
+#ifdef HSPS_LOG_ACTIVE    
+    // set logging bus.
+    iInstallationHandler->SetLogBus( iLogBus );
+#endif    
+    
+    // call the service
+    iInstallationHandler->ServiceInstallThemeL(aMessage);
+    } 
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::InstallNextPhaseL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::InstallNextPhaseL(const RMessage2& aMessage)
+    {
+    // make an asynchronous request
+    if (!iInstallationHandler)
+        {
+        User::Leave( KErrNotReady );
+        }
+    else
+        {
+        // call the service
+        iInstallationHandler->ServiceInstallNextPhaseL( aMessage );
+        }
+    }
+  
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CancelInstallTheme
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CancelInstallThemeL(const RMessage2& aMessage)
+    {
+    if ( iInstallationHandler )
+        {
+        // wait until service has finalised itself
+        ThspsServiceCompletedMessage ret = iInstallationHandler->hspsCancelInstallTheme();
+        // clean up the service
+        delete iInstallationHandler;
+        iInstallationHandler = NULL;
+        if ( !aMessage.IsNull() )
+    	    {
+       	    aMessage.Complete( ret );	
+    	    }
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    } 
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ReinstallConf
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::ReinstallConfL( const RMessage2& aMessage )
+    {
+
+    ThspsParamReinstallConf params;        
+    TPckg<ThspsParamReinstallConf> packagedStruct( params );    
+    aMessage.ReadL( 1, packagedStruct );                      
+
+    Server().ReinstallConfL( params.appUid, params.confUId );
+        
+    aMessage.Complete( EhspsReinstallConfSuccess );
+    
+    } 
+
+
+// Maintenance 
+// ***********
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::GetListHeadersL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::GetListHeadersL(const RMessage2& aMessage)
+    {
+    // Exception: should be reset since previous instance might be pending
+    if ( iMaintenanceHandler )
+        {
+        delete iMaintenanceHandler;
+        iMaintenanceHandler = NULL;
+        }
+    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceGetListHeadersL( aMessage );
+    }
+  
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::GetNextHeaderL
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::GetNextHeaderL(const RMessage2& aMessage)
+    {
+    if ( !iMaintenanceHandler )
+        {
+        User::Leave( KErrNotReady );
+        }
+    else
+        {
+        iMaintenanceHandler->ServiceGetNextHeaderL(aMessage); 
+        }
+    } 
+  
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CancelGetListHeaders
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CancelGetListHeadersL(const RMessage2& aMessage)
+    {
+    if ( iMaintenanceHandler )
+        {
+        ThspsServiceCompletedMessage ret = iMaintenanceHandler->hspsCancelGetListHeaders();
+        delete iMaintenanceHandler;
+        iMaintenanceHandler = NULL;  
+        if ( !aMessage.IsNull() )
+    	    {
+       	    aMessage.Complete( EhspsServiceRequestCanceled );	
+    	    }	       
+        }
+    else
+        {
+        User::Leave( KErrNotReady );  
+        }
+    } 
+  
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetActiveThemeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetActiveThemeL(const RMessage2& aMessage)
+    {
+    // make a synchronous request    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceSetActiveThemeL(aMessage);
+    }
+  
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::RestoreDefaultL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::RestoreDefaultL(const RMessage2& aMessage)
+    {
+    // make a synchronous request    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );    
+    iMaintenanceHandler->ServiceRestoreDefaultL(aMessage);
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::RemoveThemeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::RemoveThemeL(const RMessage2& aMessage)
+    {
+    // make a synchronous request    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );    
+    iMaintenanceHandler->ServiceRemoveThemeL(aMessage);
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::AddPluginL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::AddPluginL(const RMessage2& aMessage)
+    {
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceAddPluginL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::RemovePluginL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::RemovePluginL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceRemovePluginL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetActivePluginL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetActivePluginL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceSetActivePluginL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ReplacePluginL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::ReplacePluginL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceReplacePluginL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetPluginSettingsL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetPluginSettingsL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceSetPluginSettingsL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::GetPluginOdtL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::GetPluginOdtL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceGetPluginOdtL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::MovePluginsL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::MovePluginsL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceMovePluginsL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetConfStateL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetConfStateL(const RMessage2& aMessage)
+    {    
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceSetConfStateL( aMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::RestoreActiveAppConfL
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::RestoreActiveAppConfL(const RMessage2& aMessage)
+    {
+	CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceRestoreActiveAppConfL( aMessage );
+    }
+
+// Client Request 
+// **************
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::GetOdtL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::GetOdtL(const RMessage2& aMessage)
+    {
+    //Make an asynchronous request    
+    CreateClientRequestHandlerL();    
+    iClientRequestHandler->ServiceGetOdtL( aMessage );
+    }
+  
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::GetOdtUpdateL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::GetOdtUpdateL(const RMessage2& aMessage)
+    {
+    // make an asynchronous request 
+    if (!iClientRequestHandler)
+        {
+        User::Leave( KErrNotReady );
+        }
+    else
+        {
+        iClientRequestHandler->ServiceGetOdtUpdateL(aMessage);  
+        }
+    } 
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::RestoreConfigurationsL
+// -----------------------------------------------------------------------------
+void ChspsThemeServerSession::RestoreConfigurationsL( const RMessage2& aMessage )
+    {
+    CreateMaintenanceHandlerL( aMessage.SecureId().iId );
+    iMaintenanceHandler->ServiceRestoreConfigurationsL( aMessage );        
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CancelGetOdtUpdate
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CancelGetOdtUpdateL(const RMessage2& aMessage)
+    {
+    if ( iClientRequestHandler )
+        {
+        ThspsServiceCompletedMessage ret = iClientRequestHandler->hspsCancelGetODTUpdate();
+        if ( !aMessage.IsNull() )
+    	    {
+       	    aMessage.Complete( EhspsServiceRequestCanceled );	
+    	    }
+        }
+    else
+        {
+        User::Leave( KErrNotReady );
+        }
+    } 
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::AccessResourceFileL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::AccessResourceFileL(const RMessage2& aMessage)
+    {
+    //Make a synchronous request    
+    CreateClientRequestHandlerL();        
+        
+#ifdef _hsps_PERFORMANCE_TEST_
+        ChspsTimeMon::PrintUserMem( _L("hspsThemeServer::AccessResourceFileL(): - accessing..") );
+#endif //_hsps_PERFORMANCE_TEST_        
+
+    // call the service with TRAP
+    iClientRequestHandler->ServiceAccessResourceFileL( aMessage );
+    if ( !iHoldingResources )
+        {
+        iHoldingResources = ETrue;  
+        // add number of resource holders
+        Server().IncreaseRequestClientCount();
+        }
+
+#ifdef _hsps_PERFORMANCE_TEST_
+        ChspsTimeMon::PrintUserMem( _L("hspsThemeServer::AccessResourceFileL(): - file accessed.") );
+#endif //_hsps_PERFORMANCE_TEST_    
+
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::FindWidgetUids
+// -----------------------------------------------------------------------------
+void ChspsThemeServerSession::FindWidgetUidsL(
+        ChspsODT& aAppODT,
+        RArray<TInt>& aUidArray ) 
+    {    
+    aUidArray.Reset();       
+    const TInt resourceCount = aAppODT.ResourceCount();
+    for( TInt resourceIndex = 0; resourceIndex < resourceCount; resourceIndex++ )
+        {      
+        ChspsResource& r = aAppODT.ResourceL( resourceIndex );
+        const TInt uid = r.ConfigurationUid();        
+        if ( uid > 0 &&
+             aUidArray.Find( uid ) == KErrNotFound )
+            {
+            aUidArray.Append( uid );
+            }
+        }                       
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CopyResourceFilesL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CopyResourceFilesL(const RMessage2& aMessage)
+	{	 
+	// read paths from the buffer
+	TFileName odtPath;
+    TPath destinationPath;  // Private root folder of the client application
+	aMessage.ReadL( 1, odtPath, 0 );
+	aMessage.ReadL( 2, destinationPath, 0 );
+	    	
+	ChspsODT* odt = ChspsODT::NewL();
+    CleanupStack::PushL( odt );
+	
+    // phase counter for cleaning and debug prints
+    TInt phaseCounter = 1;
+    
+	RFile odtfile;
+	CleanupClosePushL( odtfile );	    
+    TInt error = odtfile.Open( iFs, odtPath, EFileRead );            	
+    if( error == KErrNone )
+    	{
+    	phaseCounter++;
+    	
+	    // set stream on file
+    	CFileStore* store = CDirectFileStore::FromLC( odtfile );
+	    RStoreReadStream instream;
+	    CleanupClosePushL( instream );
+		instream.OpenLC( *store, store->Root() );
+		
+	    // stream in the ODT
+		instream >> *odt;
+		
+		// the file is no longer needed
+		odtfile.Close();
+		
+		// destroy the stream object and close the instream
+	    CleanupStack::PopAndDestroy(3); // instream,store 
+    	}
+    
+    CleanupStack::PopAndDestroy(1, &odtfile); // odtfile
+    
+    if( error == KErrNone )
+ 		{
+ 		phaseCounter++;
+ 		 		
+        RArray<TInt> uidArray;
+        CleanupClosePushL( uidArray );
+        
+        // Find unique configuration UIDs from the resource array
+        FindWidgetUidsL( *odt, uidArray );
+ 		        
+        CFileMan* fileManager = NULL;
+ 		fileManager = CFileMan::NewL( iFs );
+ 		CleanupStack::PushL( fileManager );
+ 		                        
+        // Loop widgets belonging to the root configuration
+        const TInt uidCount = uidArray.Count();        
+	    for( TInt i = 0; i < uidCount && !error; i++ )
+	    	{	    		    	
+	    	// Copy widget's resources to client's private folder	    	
+	    	error = hspsServerUtil::CopyResourceFilesL(
+                    *odt,
+                    iFs,
+                    *fileManager,
+                    Server().DeviceLanguage(),                     
+                    uidArray[i],
+                    destinationPath );	    
+    		}
+	    
+	    uidArray.Reset();
+	    
+	    CleanupStack::PopAndDestroy( 2, &uidArray ); // fileManager, uidArray    	           
+ 		} // KErrNone
+ 	
+ 	//Tidy-up
+    if ( odt )
+        {
+        CleanupStack::PopAndDestroy( odt );
+        }    
+ 	 	 	       
+    if( error )
+    	{
+#ifdef HSPS_LOG_ACTIVE    	
+        iLogBus->LogText( _L( "ChspsThemeServerSession::CopyResourceFilesL(): - creating target directory failed! ( error : %d in phase: %d)." ),
+                error,
+                phaseCounter );
+#endif    	                
+    	                
+    	aMessage.Complete( EhspsResourceCopyFailed );
+    	}
+    else
+    	{
+    	aMessage.Complete( EhspsResourceCopySuccess );
+    	}
+	}
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CreateMaintenanceHandlerL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CreateMaintenanceHandlerL(
+        const TUint aSecureId )
+    {
+    if( !iMaintenanceHandler )
+        {        
+        iMaintenanceHandler = ChspsMaintenanceHandler::NewL( Server(), aSecureId );
+        iMaintenanceHandler->SetServerSession( this );
+#ifdef HSPS_LOG_ACTIVE    
+        iMaintenanceHandler->SetLogBus( iLogBus );
+#endif
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::CreateClientRequestHandlerL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::CreateClientRequestHandlerL()
+    {
+    if( !iClientRequestHandler )
+        {        
+        iClientRequestHandler = ChspsClientRequestHandler::NewL( Server() );
+
+#ifdef HSPS_LOG_ACTIVE  
+        iClientRequestHandler->SetLogBus( iLogBus );        
+#endif  
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::FileSystem
+// -----------------------------------------------------------------------------
+//
+RFs& ChspsThemeServerSession::FileSystem()
+    {
+    return iFs;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::IconFileCopyRequired
+// -----------------------------------------------------------------------------
+//
+TBool ChspsThemeServerSession::IconFileCopyRequired() const
+    {
+    return iIconFileCopyRequired;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetIconFileCopyRequired
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetIconFileCopyRequired( const TBool aCopyRequired )
+    {
+    iIconFileCopyRequired = aCopyRequired;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::ResourceFileCopyRequired
+// -----------------------------------------------------------------------------
+//
+TBool ChspsThemeServerSession::ResourceFileCopyRequired() const
+    {
+    return iResourceFileCopyRequired;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::SetResourceFileCopyRequired
+// -----------------------------------------------------------------------------
+//
+void ChspsThemeServerSession::SetResourceFileCopyRequired( const TBool aCopyRequired )
+    {
+    iResourceFileCopyRequired = aCopyRequired;
+    }
+
+// -----------------------------------------------------------------------------
+// ChspsThemeServerSession::AppUid
+// -----------------------------------------------------------------------------
+//
+TBool ChspsThemeServerSession::AppUid() const
+    {
+    return iAppUid;
+    }
+
+// end of file
+