dcmofw/dcmoserver/src/dcmoserver.cpp
branchRCL_3
changeset 24 13d7c31c74e0
parent 0 b497e44ab2fc
child 25 b183ec05bd8c
equal deleted inserted replaced
23:4af31167ea77 24:13d7c31c74e0
    30 #include "dcmointerface.h"
    30 #include "dcmointerface.h"
    31 #include "dcmoserver.h"
    31 #include "dcmoserver.h"
    32 #include "dcmosession.h"
    32 #include "dcmosession.h"
    33 #include "dcmogenericcontrol.h"
    33 #include "dcmogenericcontrol.h"
    34 #include "dcmodebug.h"
    34 #include "dcmodebug.h"
    35 
    35 #include "lawmodebug.h"
       
    36 #include "amsmlhelper.h"
       
    37 #include <lawmoadaptercrkeys.h>
       
    38 #include <DevManInternalCRKeys.h>
       
    39 
       
    40 #include    <e32property.h>
       
    41 #include    <PSVariables.h>   // Property values
       
    42 #include    <lawmointerface.h>
    36 _LIT( KdcmoResourceFileName, "z:dcmo.rsc" );	
    43 _LIT( KdcmoResourceFileName, "z:dcmo.rsc" );	
    37 const TInt KBufferSize = 256;
    44 const TInt KBufferSize = 256;
       
    45 const TInt KWipeSuccess = 1201;
       
    46 const TInt KWipeFailure = 1405;
    38 
    47 
    39 TInt CDCMOServer::iSessionCount = 0;
    48 TInt CDCMOServer::iSessionCount = 0;
    40 // Standard server startup code
    49 // Standard server startup code
    41 // 
    50 // 
    42 static void StartServerL()
    51 static void StartServerL()
   101 // CDCMOServer::ConstructL
   110 // CDCMOServer::ConstructL
   102 // ----------------------------------------------------------------------------------------
   111 // ----------------------------------------------------------------------------------------
   103 void CDCMOServer::ConstructL()
   112 void CDCMOServer::ConstructL()
   104 	{
   113 	{
   105 	RDEBUG("CDCMOServer::ConstructL- begin");
   114 	RDEBUG("CDCMOServer::ConstructL- begin");
       
   115 	iwipeStatus = 0;
       
   116 	iSessionIap = KErrNotFound;
       
   117 	iCount = -1;
   106 	StartL(KDCMOServerName);	
   118 	StartL(KDCMOServerName);	
   107 	RDEBUG("CDCMOServer::ConstructL- end");
   119 	RDEBUG("CDCMOServer::ConstructL- end");
   108 	}
   120 	}
   109 
   121 
   110 // ----------------------------------------------------------------------------------------
   122 // ----------------------------------------------------------------------------------------
   122 // ----------------------------------------------------------------------------------------
   134 // ----------------------------------------------------------------------------------------
   123 CDCMOServer::~CDCMOServer()
   135 CDCMOServer::~CDCMOServer()
   124 {	
   136 {	
   125 	RDEBUG("CDCMOServer::~CDCMOServer- begin");
   137 	RDEBUG("CDCMOServer::~CDCMOServer- begin");
   126   TInt count = idcmoArray.Count();  
   138   TInt count = idcmoArray.Count();  
   127   RDEBUG_2("CDCMOServer::~CDCMOServer; %d", count );
   139 	RDEBUG_2("~~CDCMOServer::~CDCMOServer; %d", count );
   128 	if(count)
   140 	if(count)
   129 	{	
   141 	{	
   130 		for(TInt i=0; i< count; i++)
   142 		for(TInt i=0; i< count; i++)
   131 				delete idcmoArray[i].iCategoryName;
   143 				delete idcmoArray[i].iCategoryName;
   132 		idcmoArray.Reset();
   144 		idcmoArray.Reset();
   133 		delete iNotifier;
   145 		delete iNotifier;
   134 		iNotifier = NULL;	
   146 		iNotifier = NULL;	
   135 	}
   147 	}
   136 	else
       
   137 	{
       
   138 		//Kill the server
       
   139 		if( iSessionCount == 0)
       
   140 			CActiveScheduler::Stop();	
       
   141 	}
       
   142 	
   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");	
   143 	REComSession::FinalClose();
   165 	REComSession::FinalClose();
   144 	RDEBUG("CDCMOServer::~CDCMOServer- end");
   166 	RDEBUG("~~~CDCMOServer::~CDCMOServer- end");
   145 }
   167 }
   146 
   168 
   147 // -----------------------------------------------------------------------------
   169 // -----------------------------------------------------------------------------
   148 // CDCMOServer::DropSession()
   170 // CDCMOServer::DropSession()
   149 // -----------------------------------------------------------------------------
   171 // -----------------------------------------------------------------------------
   159   		return;                 
   181   		return;                 
   160   	}   
   182   	}   
   161 		if( idcmoArray.Count() && ( iSessionCount == 0 ))
   183 		if( idcmoArray.Count() && ( iSessionCount == 0 ))
   162 		{
   184 		{
   163 			// A session is being destroyed		
   185 			// A session is being destroyed		
       
   186             RDEBUG("CDCMOServer::DropSession- dofinalise ?");
   164 			TRAPD( err, DoFinalizeL());		
   187 			TRAPD( err, DoFinalizeL());		
       
   188 			iCount = 0;
   165 			if ( !err )
   189 			if ( !err )
   166 			{
   190 			{
   167 				RDEBUG_2("CDCMOServer::DropSession err =  %d", err );
   191 				RDEBUG_2("CDCMOServer::DropSession err =  %d", err );
   168 			}						
   192 			}						
   169 		}		
   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 		}		
   170 		RDEBUG("CDCMOServer::DropSession- end");
   200 		RDEBUG("CDCMOServer::DropSession- end");
   171 	}
   201 	}
   172 
   202 
   173 // ----------------------------------------------------------------------------------------
   203 // ----------------------------------------------------------------------------------------
   174 // CDCMOServer::NewSessionL
   204 // CDCMOServer::NewSessionL
   205 	}
   235 	}
   206 // ----------------------------------------------------------------------------------------
   236 // ----------------------------------------------------------------------------------------
   207 // CDCMOServer::GetAdapterUidL
   237 // CDCMOServer::GetAdapterUidL
   208 // Gets the plug-in adapter implementation uid if it present.
   238 // Gets the plug-in adapter implementation uid if it present.
   209 // ----------------------------------------------------------------------------------------
   239 // ----------------------------------------------------------------------------------------
   210 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory)
   240 TUid CDCMOServer::GetAdapterUidL(const TDesC& aCategory, TBool aIsLawmo)
   211 {
   241 {
   212 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin");
   242 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): begin");
   213 	
   243     RLDEBUG("CDCMOServer::GetAdapterUidL(): begin");
   214 	TUid retUid = {0x0};
   244 	TUid retUid = {0x0};
   215 	
   245 	TEComResolverParams resolverParams;
   216 	RImplInfoPtrArray infoArray;
   246 	RImplInfoPtrArray infoArray;
   217 	// 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
   218 	// all items in the array, and then close it.
   248 	// all items in the array, and then close it.
   219 	TCleanupItem cleanup(CleanupEComArray, &infoArray);
   249 	TCleanupItem cleanup(CleanupEComArray, &infoArray);
   220 	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
   221 	REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray);
   257 	REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray);
   222 
   258 
   223 	// Loop through each info for each implementation			
   259 	// Loop through each info for each implementation			
   224 	TBuf8<KBufferSize> buf;            
   260 	TBuf8<KBufferSize> buf;            
       
   261     RLDEBUG("CDCMOServer::GetAdapterUidL(): for loop");
   225 	for (TInt i=0; i< infoArray.Count(); i++)
   262 	for (TInt i=0; i< infoArray.Count(); i++)
   226 	{
   263 	{
   227 		buf = infoArray[i]->OpaqueData();
   264 		buf = infoArray[i]->OpaqueData();
   228 		TBuf8<KBufferSize> category;
   265 		TBuf8<KBufferSize> category;
   229 		category.Copy(aCategory);
   266 		category.Copy(aCategory);
   230 		if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound)
   267 		if(category.Find(infoArray[i]->OpaqueData())!= KErrNotFound)
   231 		{
   268 		{
   232 			retUid = infoArray[i]->ImplementationUid();
   269 			retUid = infoArray[i]->ImplementationUid();
       
   270                     RLDEBUG("CDCMOServer::GetAdapterUidL(): matched");
   233 			break;
   271 			break;
   234 		}
   272 		}
   235 		buf.Zero();
   273 		buf.Zero();
   236 	}
   274 	}
   237 	CleanupStack::PopAndDestroy(); //cleanup
   275 	CleanupStack::PopAndDestroy(); //cleanup
   238 	
   276     RLDEBUG("CDCMOServer::GetAdapterUidL():end");
   239 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end");
   277 	RDEBUG("CDCMOServer::GetDCMOAdapterUidL(): end");
   240 	return retUid;
   278 	return retUid;
   241 }
   279 }
   242 // ----------------------------------------------------------------------------------------
   280 // ----------------------------------------------------------------------------------------
   243 // CDCMOServer::GetLocalCategoryL
   281 // CDCMOServer::GetLocalCategoryL
   607 	
   645 	
   608 	RDEBUG("CDCMOServer::SearchAdaptersL(): end");	
   646 	RDEBUG("CDCMOServer::SearchAdaptersL(): end");	
   609 }
   647 }
   610 
   648 
   611 // ----------------------------------------------------------------------------------------
   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 // ----------------------------------------------------------------------------------------
   612 // CDCMOServer::SetStarter
   814 // CDCMOServer::SetStarter
   613 // Sets the iStarter value
   815 // Sets the iStarter value
   614 // ----------------------------------------------------------------------------------------
   816 // ----------------------------------------------------------------------------------------
   615 void CDCMOServer::SetStarter(TBool aValue)
   817 void CDCMOServer::SetStarter(TBool aValue)
   616 {
   818 {
   617 	RDEBUG("CDCMOServer::SetStarter(): begin");
   819 	RDEBUG("CDCMOServer::SetStarter(): begin");
   618 	iStarter = aValue;
   820 	iStarter = aValue;
   619 	RDEBUG("CDCMOServer::SetStarter(): end");
   821 	RDEBUG("CDCMOServer::SetStarter(): end");
   620 }
   822 }
       
   823 
       
   824 void CDCMOServer::HandleWipeCompleted(TInt status)
       
   825 {
       
   826     RLDEBUG("CDCMOServer::HandleWipeCompleted(): begin");
       
   827     // whether wipe is performed or failed
       
   828     iwipeStatus = (iwipeStatus && status);
       
   829     RLDEBUG_2("CDCMOServer::HandleWipeCompleted wipestate: %d",iwipeStatus);
       
   830     iCount++;
       
   831     if(ilawmoPluginUidToBeWiped.Count()>iCount)
       
   832         {
       
   833         RLDEBUG("CDCMOServer::HandleWipeCompleted(): create obj");
       
   834         CLAWMOPluginInterface* obj;
       
   835         TRAPD(err, obj = CLAWMOPluginInterface::NewL(ilawmoPluginUidToBeWiped[iCount], this));
       
   836         if(err == KErrNone)
       
   837              {
       
   838              RLDEBUG("CDCMOServer::HandleWipeCompleted(): obj created");
       
   839              RLDEBUG_2("CDCMOServer::HandleWipeCompleted plugin count: %d",ilawmoPlugins.Count());
       
   840             TRAP(err,obj->WipeL());
       
   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