persistentstorage/centralrepository/cenrepsrv/srvrepos_noc.cpp
branchRCL_3
changeset 24 cc28652e0254
parent 23 26645d81f48d
equal deleted inserted replaced
23:26645d81f48d 24:cc28652e0254
    30 
    30 
    31 void CServerRepository::OpenL(TUid aUid, MObserver& aObserver, TBool aFailIfNotFound)
    31 void CServerRepository::OpenL(TUid aUid, MObserver& aObserver, TBool aFailIfNotFound)
    32 	{
    32 	{
    33 	iNotifier = &aObserver;
    33 	iNotifier = &aObserver;
    34 	
    34 	
    35 	TServerResources::iObserver->iObservers.ReserveL(1);
    35 	iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound);
    36 	
    36 	//store uid
       
    37 	iUid = aUid;	
       
    38 
       
    39 	TServerResources::iObserver->AddObserverL(aUid, this);
    37 	TServerResources::iObserver->AddSharedRepositoryInfoL(aUid);
    40 	TServerResources::iObserver->AddSharedRepositoryInfoL(aUid);
    38 	
       
    39 	TRAPD( err, iRepository = TServerResources::iObserver->AccessL(aUid, aFailIfNotFound) );
       
    40 	
       
    41 	//store uid
       
    42 	iUid = aUid;
       
    43 	
       
    44 	if (err == KErrNone)
       
    45 	    {
       
    46         TRAP( err, TServerResources::iObserver->AddObserverL(aUid, this) );
       
    47 	    }
       
    48 	    
       
    49 	if (err != KErrNone)
       
    50         {
       
    51         TServerResources::iObserver->RemoveSharedRepositoryInfo(aUid);
       
    52         User::Leave(err);
       
    53         }
       
    54 	}
    41 	}
    55 
    42 
    56 void CServerRepository::Close()
    43 void CServerRepository::Close()
    57 	{
    44 	{
    58 	iRepository = NULL;
    45 	iRepository = NULL;
   409 						}
   396 						}
   410 					if(err != KErrNone)
   397 					if(err != KErrNone)
   411 					  {
   398 					  {
   412 					  if(err == KErrNoMemory)
   399 					  if(err == KErrNoMemory)
   413 					    {
   400 					    {
   414                         repository->Close();
       
   415 					    User::LeaveNoMemory();
   401 					    User::LeaveNoMemory();
   416 					    }
   402 					    }
   417 				      else
   403 				      else
   418 					    {//Dont stop processing the rest of the persisted repositories becos one has a problem.
   404 					    {//Dont stop processing the rest of the persisted repositories becos one has a problem.
   419 					     __CENTREP_TRACE1("CENTREP: CServerRepository::ProcessPersistsRepositoriesL - Error = %d", err);
   405 					     __CENTREP_TRACE1("CENTREP: CServerRepository::ProcessPersistsRepositoriesL - Error = %d", err);
   664 			iRepository->FailAllTransactions(NULL);
   650 			iRepository->FailAllTransactions(NULL);
   665 			}
   651 			}
   666 			
   652 			
   667 		// Create install rep for merging
   653 		// Create install rep for merging
   668  		CSharedRepository *installRep = 0;
   654  		CSharedRepository *installRep = 0;
   669  		TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly); CleanupStack::Pop(installRep) );
   655  		TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, installRep, CIniFileIn::EInstallOnly);
   670 	
   656 	
   671 		if (err == KErrNone)
   657 		// Perform merge
   672             {
   658 		iRepository->HandleUpdateMergeL(aModified, *installRep);
   673             // Perform merge
   659 						
   674             TRAP( err, iRepository->HandleUpdateMergeL(aModified, *installRep) );
   660 		CleanupStack::PopAndDestroy(installRep);
   675             }
   661 		Close();
   676         if (installRep!=NULL)
       
   677             {
       
   678             delete installRep;
       
   679             }
       
   680         Close();
       
   681         User::LeaveIfError(err);
       
   682 		}
   662 		}
   683 	else	// No ROM or persists
   663 	else	// No ROM or persists
   684 		{
   664 		{
   685 		// Create install rep for persisting
   665 		// Create install rep for persisting
   686 		OpenL(aUid, aNotifier);
   666 		OpenL(aUid, aNotifier);
   687 		TRAPD(err, iRepository->CommitChangesL());
   667 	
   688 	    Close();
   668 		iRepository->CommitChangesL();
   689 	    User::LeaveIfError(err);
   669 		Close();
   690 		}
   670 		}
   691 	}
   671 	}
   692 
   672 
   693 
   673 
   694 // Handle install directory file delete 
   674 // Handle install directory file delete 
   716 			iRepository->FailAllTransactions(NULL);
   696 			iRepository->FailAllTransactions(NULL);
   717 			}
   697 			}
   718 		
   698 		
   719 		// Create ROM rep for merging
   699 		// Create ROM rep for merging
   720 	 	CSharedRepository *romRep = 0;
   700 	 	CSharedRepository *romRep = 0;
   721 		TRAPD( err, TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly); CleanupStack::Pop(romRep) );
   701 		TServerResources::iObserver->LoadRepositoryLC(aUid, ETrue, romRep, CIniFileIn::ERomOnly);
   722 
   702 
   723 		if (err == KErrNone)
   703 		// Perform merge
   724 		    {
   704 		iRepository->HandleDeleteMergeL(*romRep);
   725             // Perform merge
   705 		
   726             TRAP( err, iRepository->HandleDeleteMergeL(*romRep) );
   706 		CleanupStack::PopAndDestroy(romRep);
   727 		    }
       
   728 		if (romRep!=NULL)
       
   729 		    {
       
   730             delete romRep;
       
   731 		    }
       
   732 		Close();
   707 		Close();
   733 		User::LeaveIfError(err);
       
   734 		}
   708 		}
   735 	else											// No ROM file, this is a complete uninstall
   709 	else											// No ROM file, this is a complete uninstall
   736 		{		
   710 		{		
   737 		if(TServerResources::PersistsFileExistsL(aUid))
   711 		if(TServerResources::PersistsFileExistsL(aUid))
   738 			{
   712 			{
  1012 	StoreRepositorySettingValuesL(aStore, aSettingStreamId);	
   986 	StoreRepositorySettingValuesL(aStore, aSettingStreamId);	
  1013 	CleanupStack::PopAndDestroy(iRepository);
   987 	CleanupStack::PopAndDestroy(iRepository);
  1014 	iRepository = NULL;
   988 	iRepository = NULL;
  1015 	}
   989 	}
  1016 
   990 
  1017 TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting* aSourceSetting, 
   991 TInt CServerRepository::CheckAccessPolicyBeforeMoving(const TClientRequest& aMessage, const TServerSetting& aSourceSetting, 
  1018 				TUint32 aSourceKey, const TServerSetting* aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey)
   992 				TUint32 aSourceKey, const TServerSetting& aTargetSetting, TUint32 aTargetKey, TUint32& aErrorKey)
  1019 	{
   993 	{
  1020 	TInt error = KErrNone;
   994 	TInt error = KErrNone;
  1021 	
   995 	
  1022 	if (aTargetSetting && !aTargetSetting->IsDeleted())
   996 	if (&aTargetSetting && !aTargetSetting.IsDeleted())
  1023 		{
   997 		{
  1024 		error=KErrAlreadyExists;
   998 		error=KErrAlreadyExists;
  1025 		aErrorKey=aTargetKey;
   999 		aErrorKey=aTargetKey;
  1026 		}
  1000 		}
  1027 
  1001 
  1028 	if (!aMessage.CheckPolicy(GetReadAccessPolicy(*aSourceSetting),
  1002 	if (!aMessage.CheckPolicy(GetReadAccessPolicy(aSourceSetting),
  1029 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to read a setting")))
  1003 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to read a setting")))
  1030 		{
  1004 		{
  1031 		error = KErrPermissionDenied;
  1005 		error = KErrPermissionDenied;
  1032 		aErrorKey = aSourceKey;
  1006 		aErrorKey = aSourceKey;
  1033 		}
  1007 		}
  1034 	else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aSourceSetting),
  1008 	else if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aSourceSetting),
  1035 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to delete a setting")))
  1009 		__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to delete a setting")))
  1036 		{
  1010 		{
  1037 		error = KErrPermissionDenied;
  1011 		error = KErrPermissionDenied;
  1038 		aErrorKey = aSourceKey;
  1012 		aErrorKey = aSourceKey;
  1039 		}
  1013 		}
  1040 	else if (error == KErrAlreadyExists)
  1014 	else if (error == KErrAlreadyExists)
  1041 		{
  1015 		{
  1042 		// set error to KErrPermissionDenied in preference to KErrAlreadyExists
  1016 		// set error to KErrPermissionDenied in preference to KErrAlreadyExists
  1043 		if (!aMessage.CheckPolicy(GetWriteAccessPolicy(*aTargetSetting),
  1017 		if (!aMessage.CheckPolicy(GetWriteAccessPolicy(aTargetSetting),
  1044 			__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to create a setting")))
  1018 			__PLATSEC_DIAGNOSTIC_STRING("CenRep: CServerRepository::MoveL - Attempt made to create a setting")))
  1045 			{
  1019 			{
  1046 			error = KErrPermissionDenied;
  1020 			error = KErrPermissionDenied;
  1047 			aErrorKey = aTargetKey;
  1021 			aErrorKey = aTargetKey;
  1048 			}
  1022 			}