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