dcmofw/dcmoserver/src/dcmoserver.cpp
branchRCL_3
changeset 26 19bba8228ff0
parent 25 b183ec05bd8c
equal deleted inserted replaced
25:b183ec05bd8c 26:19bba8228ff0
    19 #include <implementationproxy.h>
    19 #include <implementationproxy.h>
    20 #include <ecom.h>
    20 #include <ecom.h>
    21 #include <e32base.h>
    21 #include <e32base.h>
    22 #include <centralrepository.h>
    22 #include <centralrepository.h>
    23 #include <stringresourcereader.h> 
    23 #include <stringresourcereader.h> 
       
    24 #include <dcmo.rsg> // Resource to be read header
       
    25 #include <AknGlobalMsgQuery.h>
    24 #include <data_caging_path_literals.hrh>
    26 #include <data_caging_path_literals.hrh>
    25 #include <f32file.h> 
    27 #include <f32file.h> 
    26 #include <hbtextresolversymbian.h>
       
    27 #include "dcmoclientserver.h"
    28 #include "dcmoclientserver.h"
    28 #include "dcmoconst.h"
    29 #include "dcmoconst.h"
    29 #include "dcmointerface.h"
    30 #include "dcmointerface.h"
    30 #include "dcmoserver.h"
    31 #include "dcmoserver.h"
    31 #include "dcmosession.h"
    32 #include "dcmosession.h"
    32 #include "dcmogenericcontrol.h"
    33 #include "dcmogenericcontrol.h"
    33 #include "dcmodebug.h"
    34 #include "dcmodebug.h"
    34 
    35 #include "lawmodebug.h"
    35 
    36 #include "amsmlhelper.h"
    36 _LIT( KdcmoResourceFileName, "deviceupdates_" );	
    37 #include <lawmoadaptercrkeys.h>
    37 _LIT( KdcmoResourceFilePath, "z:/resource/qt/translations/" );	
    38 #include <DevManInternalCRKeys.h>
       
    39 
       
    40 #include    <e32property.h>
       
    41 #include    <PSVariables.h>   // Property values
       
    42 #include    <lawmointerface.h>
       
    43 _LIT( KdcmoResourceFileName, "z:dcmo.rsc" );	
    38 const TInt KBufferSize = 256;
    44 const TInt KBufferSize = 256;
       
    45 const TInt KWipeSuccess = 1201;
       
    46 const TInt KWipeFailure = 1405;
    39 
    47 
    40 TInt CDCMOServer::iSessionCount = 0;
    48 TInt CDCMOServer::iSessionCount = 0;
    41 // Standard server startup code
    49 // Standard server startup code
    42 // 
    50 // 
    43 static void StartServerL()
    51 static void StartServerL()
   102 // CDCMOServer::ConstructL
   110 // CDCMOServer::ConstructL
   103 // ----------------------------------------------------------------------------------------
   111 // ----------------------------------------------------------------------------------------
   104 void CDCMOServer::ConstructL()
   112 void CDCMOServer::ConstructL()
   105 	{
   113 	{
   106 	RDEBUG("CDCMOServer::ConstructL- begin");
   114 	RDEBUG("CDCMOServer::ConstructL- begin");
       
   115 	iwipeStatus = 0;
       
   116 	iSessionIap = KErrNotFound;
       
   117 	iCount = -1;
   107 	StartL(KDCMOServerName);	
   118 	StartL(KDCMOServerName);	
   108 	RDEBUG("CDCMOServer::ConstructL- end");
   119 	RDEBUG("CDCMOServer::ConstructL- end");
   109 	}
   120 	}
   110 
   121 
   111 // ----------------------------------------------------------------------------------------
   122 // ----------------------------------------------------------------------------------------
   113 // ----------------------------------------------------------------------------------------
   124 // ----------------------------------------------------------------------------------------
   114 
   125 
   115 CDCMOServer::CDCMOServer() : CServer2(EPriorityStandard, EUnsharableSessions) /*CServer2(0)*/
   126 CDCMOServer::CDCMOServer() : CServer2(EPriorityStandard, EUnsharableSessions) /*CServer2(0)*/
   116 	{	
   127 	{	
   117 		iStarter = EFalse;
   128 		iStarter = EFalse;
   118 		iMessageBox = NULL;
   129 		iNotifier = NULL;
   119 	}
   130 	}
   120 
   131 
   121 // ----------------------------------------------------------------------------------------
   132 // ----------------------------------------------------------------------------------------
   122 // CDCMOServer::~CDCMOServer() 
   133 // CDCMOServer::~CDCMOServer() 
   123 // ----------------------------------------------------------------------------------------
   134 // ----------------------------------------------------------------------------------------
   124 CDCMOServer::~CDCMOServer()
   135 CDCMOServer::~CDCMOServer()
   125 {	
   136 {	
   126 	RDEBUG("CDCMOServer::~CDCMOServer- begin");
   137 	RDEBUG("CDCMOServer::~CDCMOServer- begin");
   127   TInt count = idcmoArray.Count();  
   138   TInt count = idcmoArray.Count();  
   128   RDEBUG_2("CDCMOServer::~CDCMOServer; %d", count );
   139 	RDEBUG_2("~~CDCMOServer::~CDCMOServer; %d", count );
   129 	if(count)
   140 	if(count)
   130 	{	
   141 	{	
   131 		for(TInt i=0; i< count; i++)
   142 		for(TInt i=0; i< count; i++)
   132 				delete idcmoArray[i].iCategoryName;
   143 				delete idcmoArray[i].iCategoryName;
   133 		idcmoArray.Reset();
   144 		idcmoArray.Reset();
   134 		delete iMessageBox;
   145 		delete iNotifier;
   135 		iMessageBox = NULL;	
   146 		iNotifier = NULL;	
   136 	}
       
   137 	else
       
   138 	{
       
   139 		//Kill the server
       
   140 		if( iSessionCount == 0)
       
   141 			CActiveScheduler::Stop();	
       
   142 	}
   147 	}
   143 	
   148 	
       
   149     RLDEBUG("CDCMOServer::wipe done delete pluginuid()");
       
   150     TInt pluginObjectCount = ilawmoPlugins.Count();           
       
   151     while(pluginObjectCount>0)
       
   152 	{
       
   153         RLDEBUG("plugin to be deleted");
       
   154         delete ilawmoPlugins[pluginObjectCount-1];
       
   155         RLDEBUG("plugin deleted");
       
   156         pluginObjectCount--;
       
   157 	}
       
   158     RLDEBUG("CDCMOServer::close all RArrays()");
       
   159     ilawmoPluginUidToBeWiped.Close();
       
   160 	
       
   161     RLDEBUG("CDCMOServer::closeD all RArrays()");
       
   162     ilawmoPlugins.Close();
       
   163 		
       
   164     RDEBUG("CDCMOServer::call FinalClose");	
   144 	REComSession::FinalClose();
   165 	REComSession::FinalClose();
   145 	RDEBUG("CDCMOServer::~CDCMOServer- end");
   166 	RDEBUG("~~~CDCMOServer::~CDCMOServer- end");
   146 }
   167 }
   147 
   168 
   148 // -----------------------------------------------------------------------------
   169 // -----------------------------------------------------------------------------
   149 // CDCMOServer::DropSession()
   170 // CDCMOServer::DropSession()
   150 // -----------------------------------------------------------------------------
   171 // -----------------------------------------------------------------------------
   156 		if ( iStarter ) 
   177 		if ( iStarter ) 
   157   	{
   178   	{
   158   		RDEBUG("CDCMOServer::DropSession(): Starter");
   179   		RDEBUG("CDCMOServer::DropSession(): Starter");
   159   		SetStarter( EFalse );
   180   		SetStarter( EFalse );
   160   		return;                 
   181   		return;                 
   161   	} 
   182   	}   
   162   	if(CDCMOMessageBox::IsMsgBoxClosed())
       
   163   	{
       
   164   		CleanDcmoArray();
       
   165   	}  
       
   166 		if( idcmoArray.Count() && ( iSessionCount == 0 ))
   183 		if( idcmoArray.Count() && ( iSessionCount == 0 ))
   167 		{
   184 		{
   168 			// A session is being destroyed		
   185 			// A session is being destroyed		
       
   186             RDEBUG("CDCMOServer::DropSession- dofinalise ?");
   169 			TRAPD( err, DoFinalizeL());		
   187 			TRAPD( err, DoFinalizeL());		
       
   188 			iCount = 0;
   170 			if ( !err )
   189 			if ( !err )
   171 			{
   190 			{
   172 				RDEBUG_2("CDCMOServer::DropSession err =  %d", err );
   191 				RDEBUG_2("CDCMOServer::DropSession err =  %d", err );
   173 			}						
   192 			}						
   174 		}		
   193 		}		
       
   194 		if((iSessionCount == 0)&&(iCount== -1))
       
   195 		    {
       
   196             RDEBUG("DropSession kill server, only when no session and no wipe pending");
       
   197             CActiveScheduler::Stop();
       
   198             RDEBUG("DropSession kill server");
       
   199 		}		
   175 		RDEBUG("CDCMOServer::DropSession- end");
   200 		RDEBUG("CDCMOServer::DropSession- end");
   176 	}
   201 	}
   177 
   202 
   178 // ----------------------------------------------------------------------------------------
   203 // ----------------------------------------------------------------------------------------
   179 // CDCMOServer::NewSessionL
   204 // CDCMOServer::NewSessionL
   210 	}
   235 	}
   211 // ----------------------------------------------------------------------------------------
   236 // ----------------------------------------------------------------------------------------
   212 // CDCMOServer::GetAdapterUidL
   237 // CDCMOServer::GetAdapterUidL
   213 // Gets the plug-in adapter implementation uid if it present.
   238 // Gets the plug-in adapter implementation uid if it present.
   214 // ----------------------------------------------------------------------------------------
   239 // ----------------------------------------------------------------------------------------
   215 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory)
   240 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory, TBool aIsLawmo)
   216 {
   241 {
   217 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin");
   242 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin");
   218 	
   243     RLDEBUG("CDCMOServer::GetAdapterUidL(): begin");
   219 	TUid retUid = {0x0};
   244 	TUid retUid = {0x0};
   220 	
   245 	TEComResolverParams resolverParams;
   221 	RImplInfoPtrArray infoArray;
   246 	RImplInfoPtrArray infoArray;
   222 	// Note that a special cleanup function is required to reset and destroy
   247 	// Note that a special cleanup function is required to reset and destroy
   223 	// all items in the array, and then close it.
   248 	// all items in the array, and then close it.
   224 	TCleanupItem cleanup(CleanupEComArray, &infoArray);
   249 	TCleanupItem cleanup(CleanupEComArray, &infoArray);
   225 	CleanupStack::PushL(cleanup);
   250 	CleanupStack::PushL(cleanup);
       
   251 	if(aIsLawmo)
       
   252 	    {
       
   253 	    REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray);
       
   254 	    RLDEBUG("CDCMOServer::GetAdapterUidL(): listImpl");
       
   255 	    }
       
   256 	else
   226 	REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray);
   257 	REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray);
   227 
   258 
   228 	// Loop through each info for each implementation			
   259 	// Loop through each info for each implementation			
   229 	TBuf8<KBufferSize> buf;            
   260 	TBuf8<KBufferSize> buf;            
       
   261     RLDEBUG("CDCMOServer::GetAdapterUidL(): for loop");
   230 	for (TInt i=0; i< infoArray.Count(); i++)
   262 	for (TInt i=0; i< infoArray.Count(); i++)
   231 	{
   263 	{
   232 		buf = infoArray[i]->OpaqueData();
   264 		buf = infoArray[i]->OpaqueData();
   233 		TBuf8<KBufferSize> category;
   265 		TBuf8<KBufferSize> category;
   234 		category.Copy(aCategory);
   266 		category.Copy(aCategory);
   235 		if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound)
   267 		if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound)
   236 		{
   268 		{
   237 			retUid = infoArray[i]->ImplementationUid();
   269 			retUid = infoArray[i]->ImplementationUid();
       
   270                     RLDEBUG("CDCMOServer::GetAdapterUidL(): matched");
   238 			break;
   271 			break;
   239 		}
   272 		}
   240 		buf.Zero();
   273 		buf.Zero();
   241 	}
   274 	}
   242 	CleanupStack::PopAndDestroy(); //cleanup
   275 	CleanupStack::PopAndDestroy(); //cleanup
   243 	
   276     RLDEBUG("CDCMOServer::GetAdapterUidL():end");
   244 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end");
   277 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end");
   245 	return retUid;
   278 	return retUid;
   246 }
   279 }
   247 // ----------------------------------------------------------------------------------------
   280 // ----------------------------------------------------------------------------------------
   248 // CDCMOServer::GetLocalCategoryL
   281 // CDCMOServer::GetLocalCategoryL
   372 	if(categotyNumber != -1)
   405 	if(categotyNumber != -1)
   373 	{
   406 	{
   374 			RDEBUG("CDCMOServer::SetIntAttributeL(): LocalCategory");
   407 			RDEBUG("CDCMOServer::SetIntAttributeL(): LocalCategory");
   375 			CDCMOGenericControl* iGenericControl = new(ELeave) CDCMOGenericControl;
   408 			CDCMOGenericControl* iGenericControl = new(ELeave) CDCMOGenericControl;
   376 			err = iGenericControl->SetIntAttributeL(categotyNumber, id, value);	
   409 			err = iGenericControl->SetIntAttributeL(categotyNumber, id, value);	
   377 			
   410 			TFileName myFileName;
   378 			TBool result = HbTextResolverSymbian::Init(KdcmoResourceFileName, KdcmoResourceFilePath );					
   411   		TParse parseObj;
   379 
   412   		parseObj.Set( KdcmoResourceFileName(), &KDC_RESOURCE_FILES_DIR,NULL );
       
   413  			myFileName = parseObj.FullName();
       
   414  			CStringResourceReader* test = CStringResourceReader::NewL( myFileName );
   380 			TPtrC buf;
   415 			TPtrC buf;
   381 			dcmoList.iUid = categotyNumber;
   416 			dcmoList.iUid = categotyNumber;
   382 			if(categotyNumber == 0)
   417 			if(categotyNumber == 0)
   383 			    {
   418 			    {			    
   384 					_LIT(KTextCamera, "txt_device_update_info_camera");
   419 			    buf.Set(test->ReadResourceString(R_DM_RUN_TIME_VAR_CAMERA));
   385 					stringHolder = HbTextResolverSymbian::LoadL(KTextCamera);
   420 			    stringHolder = buf.AllocL() ; 
   386 			    } 
   421 			    } 
   387 			else
   422 			else
   388 			    {	
   423 			    {			   
   389 					_LIT(KTextFOTA, "txt_device_update_info_firmware_update");
   424 			    buf.Set(test->ReadResourceString(R_DM_RUN_TIME_VAR_FIRMWARE_UPDATE));
   390 					stringHolder = HbTextResolverSymbian::LoadL(KTextFOTA);
   425 			    stringHolder = buf.AllocL() ; 
   391 			    }		
   426 			    }			
       
   427      delete test;
       
   428      test = NULL;
   392   	 delete iGenericControl;
   429   	 delete iGenericControl;
   393 		 iGenericControl = NULL;
   430 		 iGenericControl = NULL;
   394 	}
   431 	}
   395 	else
   432 	else
   396 	{
   433 	{
   415 	if ( iStarter )   			
   452 	if ( iStarter )   			
   416    {
   453    {
   417   		RDEBUG("CDCMOServer::SetIntAttributeL(): Starter");
   454   		RDEBUG("CDCMOServer::SetIntAttributeL(): Starter");
   418   		SetStarter ( EFalse );
   455   		SetStarter ( EFalse );
   419   		delete stringHolder;
   456   		delete stringHolder;
   420 			stringHolder = NULL;
   457 		stringHolder = NULL;
   421   		return err;                
   458   		return err;                
   422    }   
   459    }   
   423 	if((err == EDcmoSuccess) && (id == EEnable) ) 
   460 	if((err == EDcmoSuccess) && (id == EEnable) ) 
   424 	{
   461 	{
   425 		TInt arrayCount = idcmoArray.Count();
   462 		TInt arrayCount = idcmoArray.Count();
   476 void CDCMOServer::DoFinalizeL()
   513 void CDCMOServer::DoFinalizeL()
   477 {
   514 {
   478 	RDEBUG("CDCMOServer::DoFinalizeL(): begin");	   
   515 	RDEBUG("CDCMOServer::DoFinalizeL(): begin");	   
   479 
   516 
   480 	HBufC* content  = HBufC::NewLC(KDCMOMaxStringSize);
   517 	HBufC* content  = HBufC::NewLC(KDCMOMaxStringSize);
   481   TPtr   contentptr  = content->Des(); 
   518   	TPtr   contentptr  = content->Des(); 
   482 	HBufC* enableContent  = HBufC::NewLC(KDCMOMaxStringSize);
   519 	HBufC* enableContent  = HBufC::NewLC(KDCMOMaxStringSize);
   483 	TPtr   enableContentptr  = enableContent->Des(); 
   520 	TPtr   enableContentptr  = enableContent->Des(); 
   484 	HBufC* disableContent  = HBufC::NewLC(KDCMOMaxStringSize);
   521 	HBufC* disableContent  = HBufC::NewLC(KDCMOMaxStringSize);
   485 	TPtr   disableContentptr  = disableContent->Des(); 
   522 	TPtr   disableContentptr  = disableContent->Des(); 
   486 
   523 
   487 	TBool enable ( EFalse );
   524 	TBool enable ( EFalse );
   488 	TBool disable ( EFalse );
   525 	TBool disable ( EFalse );
       
   526 	TFileName myFileName;
       
   527   TParse parseObj;
       
   528   parseObj.Set( KdcmoResourceFileName(), &KDC_RESOURCE_FILES_DIR,NULL );
       
   529   myFileName = parseObj.FullName();
   489 	TInt arrayCount = idcmoArray.Count(); 
   530 	TInt arrayCount = idcmoArray.Count(); 
   490 	_LIT(KNewLine, "\n");
   531 	_LIT(KNewLine, "\n");
   491 		
   532 		
   492 	if( arrayCount > 0)
   533 	if( arrayCount > 0)
   493 	{
   534 	{
   504       	{
   545       	{
   505       		disableContentptr.Append(KNewLine());
   546       		disableContentptr.Append(KNewLine());
   506       		disableContentptr.Append( idcmoArray[i].iCategoryName->Des() );
   547       		disableContentptr.Append( idcmoArray[i].iCategoryName->Des() );
   507       		disable = ETrue;
   548       		disable = ETrue;
   508       	}	
   549       	}	
   509 		}	  
   550 		}
   510   
   551 	  
   511 		TBool result = HbTextResolverSymbian::Init(KdcmoResourceFileName, KdcmoResourceFilePath );
   552   	CStringResourceReader* test = CStringResourceReader::NewL( myFileName );	  
   512 		if ( enable )
   553 		if ( enable )
   513 		{
   554 		{
   514 			_LIT(KTextEnabled, "txt_device_update_title_enabled_by_the_system_admi");
   555 			TPtrC buf;
   515 			HBufC* buf = HbTextResolverSymbian::LoadL(KTextEnabled);
   556 			buf.Set(test->ReadResourceString(R_DM_RUN_TIME_VAR_ENABLE)); 	    	
   516 			contentptr.Append(buf->Des());
   557 			contentptr.Append(buf);
   517 	 		contentptr.Append(enableContentptr);
   558 	 		contentptr.Append(enableContentptr);
   518 	 		delete buf;
       
   519 		}
   559 		}
   520 		if ( disable )
   560 		if ( disable )
   521 		{
   561 		{
   522 	 		_LIT(KTextDisabled, "txt_device_update_title_disabled_by_the_system_adm");
   562 	 		TPtrC buf;
   523 			HBufC* buf = HbTextResolverSymbian::LoadL(KTextDisabled);
   563 	 		buf.Set(test->ReadResourceString(R_DM_RUN_TIME_VAR_DISABLE));
   524 	 		if( enable )
   564 	 		if( enable )
   525 	 			contentptr.Append(KNewLine());	 		
   565 	 			contentptr.Append(KNewLine());
   526 			contentptr.Append(buf->Des());
   566 	 		contentptr.Append(buf);
   527 	 		contentptr.Append(disableContentptr);
   567 	 		contentptr.Append(disableContentptr);
   528 	 		delete buf;
   568 		}
   529 		}
   569 		delete test;
   530 	
   570 		test = NULL;
   531 		if( !iMessageBox )
   571 		
   532 		{		
   572 		if( iNotifier )
   533 			iMessageBox = CDCMOMessageBox::NewL();					
   573 		{
   534 		}
   574 			iNotifier->Cancel();
   535 		iMessageBox->ShowMessageL(contentptr);
   575 		}
   536 
   576 		else
       
   577 		{			
       
   578 			iNotifier = CDCMONotifierAob::NewL( );			
       
   579 		}
       
   580 		
       
   581 	  iNotifier->ShowNotifierL(contentptr);    
   537 	  CleanupStack::PopAndDestroy(3); //disableContent, enableContent, content
   582 	  CleanupStack::PopAndDestroy(3); //disableContent, enableContent, content
   538 	}	
   583 	}	
   539 	RDEBUG("CDCMOServer::DoFinalizeL(): end");
   584 	RDEBUG("CDCMOServer::DoFinalizeL(): end");
   540 }
   585 }
   541 // ----------------------------------------------------------------------------------------
   586 // ----------------------------------------------------------------------------------------
   600 	
   645 	
   601 	RDEBUG("CDCMOServer::SearchAdaptersL(): end");	
   646 	RDEBUG("CDCMOServer::SearchAdaptersL(): end");	
   602 }
   647 }
   603 
   648 
   604 // ----------------------------------------------------------------------------------------
   649 // ----------------------------------------------------------------------------------------
       
   650 // CDCMOServer::GetPluginUids
       
   651 // Gets the plug-in adapter implementation uid if it present.
       
   652 // ----------------------------------------------------------------------------------------
       
   653 void CDCMOServer::GetLawmoPluginUidsL()
       
   654 {
       
   655     RDEBUG("CDCMOServer::GetPluginUids(): begin");
       
   656     ilawmoPluginUidToBeWiped.Reset();
       
   657     RImplInfoPtrArray infoArray;
       
   658     TEComResolverParams resolverParams;
       
   659     // Note that a special cleanup function is required to reset and destroy
       
   660     // all items in the array, and then close it.
       
   661     TCleanupItem cleanup(CleanupEComArray, &infoArray);
       
   662     CleanupStack::PushL(cleanup);
       
   663     REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray);
       
   664     RLDEBUG("CDCMOServer::GetPluginUids(): listImpl");
       
   665     // Loop through each info for each implementation           
       
   666     for (TInt i=0; i< infoArray.Count(); i++)
       
   667     {
       
   668     ilawmoPluginUidToBeWiped.Append(infoArray[i]->ImplementationUid());
       
   669     RLDEBUG("CDCMOServer::GetPluginUids(): for loop");
       
   670     }
       
   671     CleanupStack::PopAndDestroy(); //cleanup
       
   672     RLDEBUG("CDCMOServer::GetPluginUids():end");
       
   673     return;
       
   674 }
       
   675 
       
   676 TLawMoStatus CDCMOServer::WipeAllItem()
       
   677     {
       
   678     //Update ilawmopluginUid, so that all Node items are wiped.
       
   679     //WipeItem doesn only on Uid's in the RArray.
       
   680     TRAPD(error,GetLawmoPluginUidsL());
       
   681     if(error == KErrNone)
       
   682     return WipeItem();
       
   683     else
       
   684         return ELawMoWipeNotPerformed;
       
   685     }
       
   686 
       
   687 TLawMoStatus CDCMOServer::WipeItem(TInt aValue)
       
   688     {
       
   689     RLDEBUG("CDCMOServer::WipeItem(): begin");
       
   690     TLawMoStatus lawmostat(ELawMoAccepted);
       
   691     iCount = 0;
       
   692     if(ilawmoPluginUidToBeWiped.Count() > 0)
       
   693         {
       
   694 		RLDEBUG_2("CDCMOServer::WipeItem got uid(): %d",ilawmoPluginUidToBeWiped[iCount]);
       
   695         CLAWMOPluginInterface* obj;
       
   696 		RLDEBUG("CDCMOServer::WipeItem(): NewL");
       
   697         TRAPD(err,obj = CLAWMOPluginInterface::NewL(ilawmoPluginUidToBeWiped[iCount], this));
       
   698         if(err == KErrNone)
       
   699             {
       
   700             RLDEBUG("CDCMOServer::WipeItem(): obj created");
       
   701             RLDEBUG_2("CDCMOServer::WipeItem plugin count: %d",ilawmoPlugins.Count());
       
   702             TRAP(err,obj->WipeL());
       
   703         RLDEBUG_2("CDCMOServer::WipeItem(): wipe called %d",err);
       
   704         ilawmoPlugins.Append(obj);
       
   705         // Get the IAP being used in the current session
       
   706         TRAP( err, SmlHelper::GetDefaultIAPFromDMProfileL( iSessionIap ) );
       
   707         RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): get iap %d",iSessionIap);
       
   708             }
       
   709         if(err!=KErrNone)
       
   710         HandleWipeCompleted(KErrGeneral);
       
   711         }
       
   712     else
       
   713         {
       
   714         lawmostat = ELawMoWipeNotPerformed;
       
   715         }
       
   716     
       
   717     RLDEBUG("CDCMOServer::WipeItem(): End");
       
   718     return lawmostat;
       
   719     }
       
   720 
       
   721 TLawMoStatus CDCMOServer::GetListItemL(TDesC& item, TDes& strValue)
       
   722 {
       
   723     RLDEBUG("CDCMOServer::GetListItem(): begin");
       
   724     TEComResolverParams resolverParams;
       
   725 	TLawMoStatus lawmostat(ELawMoSuccess);
       
   726     TBuf<KBufferSize> itemName;
       
   727     RImplInfoPtrArray infoArray;
       
   728     TCleanupItem cleanup(CleanupEComArray, &infoArray);
       
   729     CleanupStack::PushL(cleanup);
       
   730     REComSession::ListImplementationsL(KLAWMOPluginInterfaceUid, resolverParams, KRomOnlyResolverUid, infoArray);
       
   731     RLDEBUG("CDCMOServer::GetListItem(): listImpl");
       
   732 
       
   733     for (TInt i=0; i< infoArray.Count(); i++)
       
   734         {   
       
   735         RLDEBUG("CDCMOServer::GetListItem(): for loop");
       
   736         TBuf<KBufferSize> temp;
       
   737         temp.Copy(infoArray[i]->OpaqueData());
       
   738         RLDEBUG_2("CDCMOServer::GetListItem opaque data to compare is %s", temp.PtrZ());
       
   739         if(item == temp)
       
   740             {
       
   741                 itemName.Copy(infoArray[i]->DisplayName());
       
   742                 RLDEBUG("CDCMOServer::GetListItem(): matched");
       
   743                 break;
       
   744             }
       
   745         }
       
   746     CleanupStack::PopAndDestroy(); //cleanup
       
   747     RLDEBUG_2("CDCMOServer::GetListItem display name is %s", itemName.PtrZ());
       
   748     strValue.Zero();
       
   749     strValue.Append(itemName);
       
   750     RLDEBUG("CDCMOServer::GetListItem(): End");
       
   751     return lawmostat;
       
   752 }
       
   753 
       
   754 
       
   755 TLawMoStatus CDCMOServer::GetToBeWipedL(TDesC& item, TDes& wipeValue)
       
   756 {
       
   757     RLDEBUG("CDCMOServer::GetToBeWiped(): begin");
       
   758     TLawMoStatus lawmostat(ELawMoSuccess);
       
   759     TInt wipeVal(0);
       
   760     TUid impluid = GetAdapterUidL(item, ETrue);
       
   761     RLDEBUG_2("CDCMOServer::GetToBeWiped for uid(): %d", impluid);
       
   762     TInt afind = ilawmoPluginUidToBeWiped.Find(impluid);
       
   763     if(afind!=KErrNotFound)
       
   764         {
       
   765         wipeVal = 1;
       
   766         RLDEBUG("CDCMOServer::GetToBeWiped(): uid in Rarray");
       
   767         }
       
   768     wipeValue.Zero();
       
   769     wipeValue.Num(wipeVal);
       
   770     RLDEBUG("CDCMOServer::GetToBeWiped(): End");
       
   771     return lawmostat;
       
   772 }
       
   773 
       
   774 TLawMoStatus CDCMOServer::SetToBeWipedL(TDesC& item, TInt wipeValue)
       
   775 {
       
   776     RLDEBUG("CDCMOServer::SetToBeWiped(): begin");
       
   777     TLawMoStatus lawmostat(ELawMoSuccess);
       
   778     TUid impluid = GetAdapterUidL(item, ETrue);
       
   779     RLDEBUG_2("CDCMOServer::SetToBeWiped for uid(): %d", impluid);
       
   780     TInt afind = ilawmoPluginUidToBeWiped.Find(impluid);
       
   781     // Add Node's corresponding plugin uid to list so that it can be wiped
       
   782     if(impluid.iUid)
       
   783         {
       
   784         if(wipeValue)
       
   785             {
       
   786             RLDEBUG("CDCMOServer::SetToBeWiped(): wipeVal true");
       
   787             if(afind==KErrNotFound)
       
   788                 ilawmoPluginUidToBeWiped.Append(impluid);
       
   789             else
       
   790                 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped already set");               
       
   791             }
       
   792         else
       
   793             {
       
   794             RLDEBUG("CDCMOServer::SetToBeWiped(): wipeVal false");        
       
   795             if(afind!=KErrNotFound)
       
   796                 {
       
   797                 ilawmoPluginUidToBeWiped.Remove(afind);
       
   798                 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped unset");
       
   799                 }
       
   800             else
       
   801                 RLDEBUG("CDCMOServer::SetToBeWiped() tobewiped notset atall");                
       
   802             }
       
   803         }
       
   804     else
       
   805         {
       
   806         RLDEBUG("CDCMOServer::SetToBeWiped(): no such plugin found");
       
   807         lawmostat = ELawMoFail;
       
   808         }
       
   809     RLDEBUG("CDCMOServer::SetToBeWiped(): End");
       
   810     return lawmostat;
       
   811 }
       
   812 
       
   813 // ----------------------------------------------------------------------------------------
   605 // CDCMOServer::SetStarter
   814 // CDCMOServer::SetStarter
   606 // Sets the iStarter value
   815 // Sets the iStarter value
   607 // ----------------------------------------------------------------------------------------
   816 // ----------------------------------------------------------------------------------------
   608 void CDCMOServer::SetStarter(TBool aValue)
   817 void CDCMOServer::SetStarter(TBool aValue)
   609 {
   818 {
   610 	RDEBUG("CDCMOServer::SetStarter(): begin");
   819 	RDEBUG("CDCMOServer::SetStarter(): begin");
   611 	iStarter = aValue;
   820 	iStarter = aValue;
   612 	RDEBUG("CDCMOServer::SetStarter(): end");
   821 	RDEBUG("CDCMOServer::SetStarter(): end");
   613 }
   822 }
   614 
   823 
   615 // ----------------------------------------------------------------------------------------
   824 void CDCMOServer::HandleWipeCompleted(TInt status)
   616 // CDCMOServer::CleanDcmoArray
   825 {
   617 // Sets the iStarter value
   826     RLDEBUG("CDCMOServer::HandleWipeCompleted(): begin");
   618 // ----------------------------------------------------------------------------------------
   827     // whether wipe is performed or failed
   619 void CDCMOServer::CleanDcmoArray()
   828     iwipeStatus = (iwipeStatus && status);
   620 {
   829     RLDEBUG_2("CDCMOServer::HandleWipeCompleted wipestate: %d",iwipeStatus);
   621 	RDEBUG("CDCMOServer::CleanDcmoArray(): begin");
   830     iCount++;
   622 	TInt count = idcmoArray.Count();  
   831     if(ilawmoPluginUidToBeWiped.Count()>iCount)
   623   RDEBUG_2("CDCMOServer::CleanDcmoArray; %d", count );
   832         {
   624 	if(count)
   833         RLDEBUG("CDCMOServer::HandleWipeCompleted(): create obj");
   625 	{	
   834         CLAWMOPluginInterface* obj;
   626 		for(TInt i=0; i< count; i++)
   835         TRAPD(err, obj = CLAWMOPluginInterface::NewL(ilawmoPluginUidToBeWiped[iCount], this));
   627 				delete idcmoArray[i].iCategoryName;
   836         if(err == KErrNone)
   628 		idcmoArray.Reset();
   837              {
   629 	}
   838              RLDEBUG("CDCMOServer::HandleWipeCompleted(): obj created");
   630 	CDCMOMessageBox::SetMsgBoxStatus(EFalse);
   839              RLDEBUG_2("CDCMOServer::HandleWipeCompleted plugin count: %d",ilawmoPlugins.Count());
   631 	RDEBUG("CDCMOServer::CleanDcmoArray(): end");
   840             TRAP(err,obj->WipeL());
   632 }
   841         RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): wipe called %d",err);
       
   842         ilawmoPlugins.Append(obj);
       
   843             }
       
   844         if(err!=KErrNone)
       
   845             HandleWipeCompleted(KErrGeneral);
       
   846         }
       
   847     else
       
   848         {
       
   849         // start DM session using the Monitor for generic alert
       
   850         RLDEBUG("CDCMOServer::HandleWipeCompleted(): done");
       
   851         TInt err;
       
   852         TBuf<KBufferSize> srvrid; 
       
   853         CRepository* crep;
       
   854         TRAP(err, crep = CRepository::NewLC( KCRUidDeviceManagementInternalKeys );
       
   855                          CleanupStack::Pop(crep));
       
   856         RLDEBUG("CDCMOServer::HandleWipeCompleted(): get srvrid");
       
   857         if(err == KErrNone)
       
   858             err = crep->Get( KLAWMOfactoryDmServerID, srvrid );
       
   859         RDEBUG_2("CDCMOServer::GetCurrentServerId() %d",err);
       
   860         RLDEBUG_2("CDCMOServer::HandleWipeCompleted(): srvrid %s",srvrid.PtrZ());
       
   861         if (err == KErrNone)
       
   862             {
       
   863             RLDEBUG("CDCMOServer::startNwMonitor()");
       
   864             TRAP(err,StartDMNetworkMonitorL(srvrid, iSessionIap));
       
   865             }
       
   866         
       
   867         if(crep)
       
   868 			{
       
   869             delete crep; //crep
       
   870 			crep = NULL;
       
   871 			}
       
   872         
       
   873         // Only when session is started successfully, Set wipestatus
       
   874         if(err==KErrNone)
       
   875             {
       
   876             RLDEBUG("CDCMOServer::HandleWipeCompleted(): writing wipestatus to cenrep");
       
   877             CRepository* repository;
       
   878             TRAP(err, repository = CRepository::NewLC ( KCRUidLawmoAdapter );
       
   879                       CleanupStack::Pop(crep));
       
   880             
       
   881             if(iwipeStatus==KErrNone)
       
   882             iwipeStatus = KWipeSuccess;
       
   883             else
       
   884             iwipeStatus = KWipeFailure;
       
   885             
       
   886             repository->Set(KLawmoWipeStatus,iwipeStatus);
       
   887             RLDEBUG_2("CDCMOServer::HandleWipeCompleted wipestate: %d",iwipeStatus);
       
   888             if (repository)
       
   889 				{
       
   890 	            delete repository;
       
   891 				repository = NULL;
       
   892 				}
       
   893             }
       
   894         
       
   895         RLDEBUG_2("printing ilawmoPluginUidToBeWiped %d", ilawmoPluginUidToBeWiped.Count());
       
   896         RLDEBUG_2("printing ilawmoPlugins %d", ilawmoPlugins.Count());
       
   897         RLDEBUG_2("printing ilawmoPlugins %d", iCount);
       
   898         iCount = -1; // To indicate all wipe is done
       
   899         if( iSessionCount == 0)
       
   900            {
       
   901             CActiveScheduler::Stop();
       
   902             RLDEBUG("CDCMOServer::HandleWipeCompleted(): kill server");
       
   903             }        
       
   904         }    
       
   905     
       
   906     RLDEBUG("CDCMOServer::HandleWipeCompleted(): end");
       
   907 }
       
   908 
       
   909 // ------------------------------------------------------------------------------------------------
       
   910 // CDCMOServer::StartDMNetworkMonitorL()
       
   911 // ------------------------------------------------------------------------------------------------
       
   912 void CDCMOServer::StartDMNetworkMonitorL(TDesC& aServerId, TInt iapid)
       
   913 {
       
   914     TInt retryenabled = 1;
       
   915     _LIT( KNetMon,"\\dmnetworkmon.exe" );
       
   916     RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): start");
       
   917     TBuf8<KBufferSize> serverid;
       
   918     serverid.Copy(aServerId);
       
   919     // Enable DM Network Monitoring for retry of Generic alert in case of N/W loss
       
   920     
       
   921     CRepository *repository= CRepository::NewLC ( KCRUidDeviceManagementInternalKeys );
       
   922     repository->Set(KDevManEnableDMNetworkMon, retryenabled);
       
   923     repository->Set(KDevManServerIdKey, serverid);
       
   924     repository->Set(KDevManIapIdKey, iapid);
       
   925     RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): set rep keys");
       
   926     CleanupStack::PopAndDestroy();
       
   927     
       
   928     // create NetMon EXE
       
   929     RProcess rp;
       
   930     TInt err = rp.Create(KNetMon,KNullDesC);
       
   931     RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():create rprocess");
       
   932     User::LeaveIfError(err);
       
   933     TRequestStatus stat;
       
   934     rp.Rendezvous(stat);
       
   935     RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():rendezvous");
       
   936         
       
   937     if (stat!=KRequestPending)
       
   938         {
       
   939         RLDEBUG("CDCMOServer::StartDMNetworkMonitorL():abort srvr");
       
   940         rp.Kill(0);     // abort startup
       
   941         }
       
   942     else
       
   943         {
       
   944         RLDEBUG("CDCMOServer::StartDMNetworkMonitorL(): start server");
       
   945         rp.Resume();    // logon OK - start the server
       
   946         }
       
   947     User::WaitForRequest(stat);     // wait for start or death
       
   948     TInt r= rp.ExitType();
       
   949     TInt reqstat  = stat.Int();
       
   950     //TExitType a;
       
   951     RLDEBUG_2("CDCMOServer::StartDMNetworkMonitorL() exittype %d",r);
       
   952     RLDEBUG_2("CDCMOServer::StartDMNetworkMonitorL() reqstatus %d",reqstat);
       
   953 
       
   954     rp.Close();
       
   955 }
       
   956 
       
   957