diff -r 000000000000 -r dfb7c4ff071f commsprocess/commsrootserverconfig/configurator/src/c32startses.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsprocess/commsrootserverconfig/configurator/src/c32startses.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,226 @@ +// Copyright (c) 2005-2009 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: +// Implementation of the Configurator server Session for on demand loading of CPMs. +// +// + +#include "c32startshared.h" +#include "c32startserv.h" + +/** +@file +Implements Configurator server session implementation. + +@publishedPartner +*/ + +CRsConfiguratorServerSession::CRsConfiguratorServerSession(const CRsConfiguratorServer* aConfiguratorServer) +:CSession2(), +iConfiguratorServer((CRsConfiguratorServer*) aConfiguratorServer) + /** C'tor + */ + { + } + + +TInt CRsConfiguratorServerSession::LoadCpm(const RMessage2& aMessage) + /** Loads comms provider module which is marked as on demand in CMI file. + */ + { + TCFModuleNameF moduleName; + TInt result = aMessage.Read(0, moduleName); + + if(KErrNone == result) + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::LoadCpm (%S)"), &moduleName); + result = iConfiguratorServer->LoadCpm(moduleName, aMessage); + } + else + { + __FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::LoadCpm error reading module name %d"), result); + } + + return result; + } + +TInt CRsConfiguratorServerSession::EnumerateModules(const RMessage2& aMessage) + /** Returns a module name from list of modules which matches the group name. + */ + { + __FLOG_STATIC0(KSubsys,KComponent,_L("CRsConfiguratorServerSession::EnumerateModules")); + TPckgBuf ipcPosition; + TInt result = aMessage.Read(0, ipcPosition); + if(KErrNone == result) + { + TInt& position = ipcPosition()(); + TCFGroupNameF groupName; + result = aMessage.Read(1, groupName); + TCFModuleNameF moduleName; + result = iConfiguratorServer->EnumerateModules(groupName,position, moduleName); + if(KErrNone == result) + { + result = aMessage.Write(2, moduleName); + if(KErrNone == result) + { + ++position; + result = aMessage.Write(0, ipcPosition); + } + } + } + return result; + } + + +TInt CRsConfiguratorServerSession::GetModuleIniData(const RMessage2& aMessage) + /** Fetches data contained by [inidata] section of CMI file for Comms Provider Module. + */ + { + TCFModuleNameF moduleName; + TInt result = aMessage.Read(0, moduleName); + + if(KErrNone == result) + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::GetModuleIniData (%S)"), &moduleName); + result = iConfiguratorServer->GetModuleIniData(moduleName, aMessage); + } + else + { + __FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::GetModuleIniData error reading module name %d"), result); + } + + return result; + } + + +void CRsConfiguratorServerSession::ServiceL(const RMessage2& aMessage) + { + TInt result; + switch(aMessage.Function()) + { + case CSLoadCpm: + // if load request is successful KErrNone is returned + // message is completed once the root server completes loading. + // if any other error before load request, message is completed here. + result = LoadCpm(aMessage); + if(result!=KErrNone) + { + aMessage.Complete(result); + } + break; + + case CSUnloadCpm: + result = UnloadCpm(aMessage); + if(result!=KErrNone) + { + aMessage.Complete(result); + } + break; + + case CSCancelLoadCpm: + result = CancelLoadCpm(aMessage); + aMessage.Complete(result); + break; + + case CSCancelUnloadCpm: + result = CancelUnloadCpm(aMessage); + aMessage.Complete(result); + break; + + case CSEnumerateModules: + result=EnumerateModules(aMessage); + aMessage.Complete(result); + break; + + case CSGetModuleIniData: + result=GetModuleIniData(aMessage); + aMessage.Complete(result); + break; + + default: + aMessage.Complete(KErrNotSupported); + break; + } + + + } + + + +TInt CRsConfiguratorServerSession::UnloadCpm(const RMessage2& aMessage) + /**Unloads comms Provider Module loaded by the configurator + */ + { + TCFModuleNameF moduleName; + TInt result = aMessage.Read(0, moduleName); + + if(KErrNone == result) + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::UnloadCpm (%S)"), &moduleName); + result = iConfiguratorServer->UnLoadCpm(moduleName, aMessage); + } + else + { + __FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::UnloadCpm error reading module name %d"), result); + } + + return result; + } + +TInt CRsConfiguratorServerSession::CancelLoadCpm(const RMessage2& aMessage) + /**Cancel asynchronous loading of a comms Provider Module. + There is no guarantee the module unloading is canceled. + A best effort is made and the asynchronous request waiting for the module + to load returns KErrCanceled on success. + */ + { + TCFModuleNameF moduleName; + TInt result = aMessage.Read(0, moduleName); + + if(KErrNone == result) + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelLoadCpm (%S)"), &moduleName); + result = iConfiguratorServer->CancelLoadCpm(moduleName); + } + else + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelLoadCpm error %d reading module name"), result); + } + + return result; + } + +TInt CRsConfiguratorServerSession::CancelUnloadCpm(const RMessage2& aMessage) + /**Cancel asynchronous unloading of a comms Provider Module. + There is no guarantee the module unloading is canceled. + A best effort is made and the asynchronous request waiting for the module + to load returns KErrCanceled on success. + */ + { + TCFModuleNameF moduleName; + TInt result = aMessage.Read(0, moduleName); + + if(KErrNone == result) + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelUnloadCpm (%S)"), &moduleName); + result = iConfiguratorServer->CancelUnLoadCpm(moduleName); + } + else + { + __FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelUnloadCpm error %d reading module name"), result); + } + + return result; + } + +