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; |
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 } |