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