commsprocess/commsrootserverconfig/configurator/src/c32startses.cpp
changeset 0 dfb7c4ff071f
equal deleted inserted replaced
-1:000000000000 0:dfb7c4ff071f
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Implementation of the Configurator server Session for on demand loading of CPMs.
       
    15 // 
       
    16 //
       
    17 
       
    18 #include "c32startshared.h"
       
    19 #include "c32startserv.h"
       
    20 
       
    21 /**
       
    22 @file 
       
    23 Implements Configurator server session implementation.
       
    24 
       
    25 @publishedPartner
       
    26 */
       
    27 
       
    28 CRsConfiguratorServerSession::CRsConfiguratorServerSession(const CRsConfiguratorServer* aConfiguratorServer)
       
    29 :CSession2(),
       
    30 iConfiguratorServer((CRsConfiguratorServer*) aConfiguratorServer)
       
    31 	/** C'tor
       
    32 	*/
       
    33 	{
       
    34 	}
       
    35 
       
    36 
       
    37 TInt CRsConfiguratorServerSession::LoadCpm(const RMessage2& aMessage)
       
    38 	/** Loads comms provider module which is marked as on demand in CMI file.
       
    39 	*/
       
    40 	{
       
    41 	TCFModuleNameF moduleName;
       
    42 	TInt result = aMessage.Read(0, moduleName);
       
    43 
       
    44 	if(KErrNone == result)
       
    45 		{
       
    46 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::LoadCpm (%S)"), &moduleName);
       
    47 		result = iConfiguratorServer->LoadCpm(moduleName, aMessage);
       
    48 		}
       
    49 	else
       
    50 		{
       
    51 		__FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::LoadCpm error reading module name %d"), result);
       
    52 		}
       
    53 			
       
    54 	return result;	
       
    55 	}
       
    56 	
       
    57 TInt CRsConfiguratorServerSession::EnumerateModules(const RMessage2& aMessage)
       
    58 	/** Returns a module name from list of modules which matches the group name. 
       
    59 	*/
       
    60 	{
       
    61 	__FLOG_STATIC0(KSubsys,KComponent,_L("CRsConfiguratorServerSession::EnumerateModules"));
       
    62 	TPckgBuf<TRSIter> ipcPosition;
       
    63 	TInt result = aMessage.Read(0, ipcPosition);
       
    64 	if(KErrNone == result)
       
    65 		{
       
    66 		TInt& position = ipcPosition()();
       
    67 		TCFGroupNameF groupName;
       
    68 		result = aMessage.Read(1, groupName);
       
    69 		TCFModuleNameF moduleName;
       
    70 		result = iConfiguratorServer->EnumerateModules(groupName,position, moduleName);
       
    71 		if(KErrNone == result)
       
    72        		{
       
    73 			result = aMessage.Write(2, moduleName);
       
    74 			if(KErrNone == result)
       
    75        			{
       
    76 				++position;
       
    77 				result = aMessage.Write(0, ipcPosition);
       
    78 				}
       
    79 			}
       
    80 		}
       
    81     return result;
       
    82 	}
       
    83 
       
    84 
       
    85 TInt CRsConfiguratorServerSession::GetModuleIniData(const RMessage2& aMessage)
       
    86 	/** Fetches data contained by [inidata] section of CMI file for Comms Provider Module.
       
    87 	*/
       
    88 	{
       
    89 	TCFModuleNameF moduleName;
       
    90 	TInt result = aMessage.Read(0, moduleName);
       
    91  
       
    92 	if(KErrNone == result)
       
    93 		{
       
    94 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::GetModuleIniData (%S)"), &moduleName);
       
    95     	result = iConfiguratorServer->GetModuleIniData(moduleName, aMessage);
       
    96 		}
       
    97 	else
       
    98 		{
       
    99 		__FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::GetModuleIniData error reading module name %d"), result);
       
   100 		}
       
   101 
       
   102     return result;	
       
   103 	}
       
   104 
       
   105 
       
   106 void CRsConfiguratorServerSession::ServiceL(const RMessage2& aMessage)
       
   107 	{	
       
   108 	TInt result;
       
   109 	switch(aMessage.Function())
       
   110 		{
       
   111 		case CSLoadCpm:
       
   112 			// if load request is successful KErrNone is returned
       
   113 			// message is completed once the root server completes loading.
       
   114 			// if any other error before load request, message is completed here.
       
   115 			result = LoadCpm(aMessage); 
       
   116 			if(result!=KErrNone)
       
   117 				{
       
   118 				aMessage.Complete(result);
       
   119 				}
       
   120 			break;
       
   121 		
       
   122 		case CSUnloadCpm:
       
   123 			result = UnloadCpm(aMessage);
       
   124 			if(result!=KErrNone)
       
   125 				{
       
   126 				aMessage.Complete(result);
       
   127 				}
       
   128 			break;
       
   129 		
       
   130 		case CSCancelLoadCpm:
       
   131 			result = CancelLoadCpm(aMessage);
       
   132 			aMessage.Complete(result);
       
   133 			break;
       
   134 		
       
   135 		case CSCancelUnloadCpm:
       
   136 			result = CancelUnloadCpm(aMessage);
       
   137 			aMessage.Complete(result);
       
   138 			break;
       
   139 			
       
   140 		case CSEnumerateModules: 
       
   141 			result=EnumerateModules(aMessage);
       
   142 			aMessage.Complete(result);
       
   143 			break;
       
   144 		
       
   145 		case CSGetModuleIniData:
       
   146 			result=GetModuleIniData(aMessage);
       
   147 			aMessage.Complete(result);
       
   148 			break;
       
   149 		
       
   150 		default:
       
   151 			aMessage.Complete(KErrNotSupported);
       
   152 			break;	
       
   153 		}
       
   154 		
       
   155 	
       
   156 	}
       
   157 
       
   158 
       
   159 
       
   160 TInt CRsConfiguratorServerSession::UnloadCpm(const RMessage2& aMessage)
       
   161 	/**Unloads comms Provider Module loaded by the configurator
       
   162 	*/
       
   163 	{
       
   164 	TCFModuleNameF moduleName;
       
   165 	TInt result = aMessage.Read(0, moduleName);
       
   166 
       
   167 	if(KErrNone == result)
       
   168 		{
       
   169 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::UnloadCpm (%S)"), &moduleName);
       
   170 		result = iConfiguratorServer->UnLoadCpm(moduleName, aMessage);
       
   171 		}
       
   172 	else
       
   173 		{
       
   174 		__FLOG_STATIC1(KSubsys,KComponent,_L("CRsConfiguratorServerSession::UnloadCpm error reading module name %d"), result);
       
   175 		}
       
   176 
       
   177 	return result;	
       
   178 	}
       
   179 
       
   180 TInt CRsConfiguratorServerSession::CancelLoadCpm(const RMessage2& aMessage)
       
   181 	/**Cancel asynchronous loading of a comms Provider Module. 
       
   182 	There is no guarantee the module unloading is canceled. 
       
   183 	A best effort is made and the asynchronous request waiting for the module 
       
   184 	to load returns KErrCanceled on success.
       
   185 	*/
       
   186 	{
       
   187 	TCFModuleNameF moduleName;
       
   188 	TInt result = aMessage.Read(0, moduleName);
       
   189 
       
   190 	if(KErrNone == result)
       
   191 		{
       
   192 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelLoadCpm (%S)"), &moduleName);
       
   193 		result = iConfiguratorServer->CancelLoadCpm(moduleName);
       
   194 		}
       
   195 	else
       
   196 		{
       
   197 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelLoadCpm error %d reading module name"), result);
       
   198 		}
       
   199 
       
   200 	return result;	
       
   201 	}
       
   202 
       
   203 TInt CRsConfiguratorServerSession::CancelUnloadCpm(const RMessage2& aMessage)
       
   204 	/**Cancel asynchronous unloading of a comms Provider Module. 
       
   205 	There is no guarantee the module unloading is canceled. 
       
   206 	A best effort is made and the asynchronous request waiting for the module 
       
   207 	to load returns KErrCanceled on success.
       
   208 	*/
       
   209 	{
       
   210 	TCFModuleNameF moduleName;
       
   211 	TInt result = aMessage.Read(0, moduleName);
       
   212 
       
   213 	if(KErrNone == result)
       
   214 		{
       
   215 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelUnloadCpm (%S)"), &moduleName);
       
   216 		result = iConfiguratorServer->CancelUnLoadCpm(moduleName);
       
   217 		}
       
   218 	else
       
   219 		{
       
   220 		__FLOG_STATIC1(KSubsys,KComponent,_L8("CRsConfiguratorServerSession::CancelUnloadCpm error %d reading module name"), result);
       
   221 		}
       
   222 
       
   223 	return result;	
       
   224 	}	
       
   225 
       
   226