commsprocess/commsrootserverconfig/configurator/src/c32startses.cpp
changeset 0 dfb7c4ff071f
--- /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<TRSIter> 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;	
+	}	
+
+