policymanagement/policyengine/centreptoolserver/inc/RepositorySession.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/policymanagement/policyengine/centreptoolserver/inc/RepositorySession.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implementation of policymanagement components
+*
+*/
+
+
+
+#ifndef REPOSITORY_SESSION_HEADER_
+#define REPOSITORY_SESSION_HEADER_
+
+// INCLUDES
+
+#include <e32base.h>
+#include <f32file.h> 
+#include <s32file.h> 
+#include <s32strm.h> 
+
+#include "constants.h"
+#include "IniFileHelper.h"
+
+// CONSTANTS
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+class CRepositorySession;
+
+// CLASS DECLARATION
+
+class CRepositoryContent : public CBase
+{
+	public:
+		//constructors
+		~CRepositoryContent();
+		
+		static CRepositoryContent * NewL( const TUid& aUid);
+		static CRepositoryContent * NewL( const TUid& aUid, HBufC* aContent);
+	
+		void ReleaseResources();
+	
+		//file streaming
+		void ReadStreamL( RReadStream& aStream, TBool aOnlyHeader );
+		void WriteStreamL( RWriteStream& aStream );
+
+
+		//File reading
+		void ReadHeaderL();
+		void ReadOptionalDataL();
+		void ReadPlatSecL();
+		void ReadMainL();
+
+		//File writing
+		void WriteFileL( RFile& aFile);
+
+		//Search setting
+		CIndividualSetting* FindIndividualSetting( const TUint32 aSettingId);
+		void CreateRangeSettingsL( RPointerArray<CRangeSetting>& aSettings, TUint32 aRangeStart, TUint32 aRangeEnd);
+		void CreateMaskSettingsL( RPointerArray<CRangeSetting>& aSettings, TUint32 aCompareValue, TUint32 aMask);
+		void CreateMaskBackupL( RPointerArray<CRangeMeta>& aSettings, TUint32 aCompareValue, TUint32 aMask);
+		void CreateRangeBackupL( RPointerArray<CRangeMeta>& aSettings, TUint32 aRangeStart, TUint32 aRangeEnd);
+		
+		TBool CheckRangeValidity();
+		
+		TBool CheckAccess( const RMessage2& aMessage, TUint32 aSettingId, TAccessType aAccessType);
+	private:
+		//private constructors
+		CRepositoryContent( const TUid& aUid);
+		CRepositoryContent( const TUid& aUid, HBufC* aContent);
+		void ConstructL();
+		
+		//repository file management
+		void DeleteRepositoryFile();
+		void CREFileCreationOk( TBool aState);				
+		
+		//setting handling methods
+		CIndividualSetting* FindSettingOrCreateL( const TUint32& aSettingId);	
+		void AddIndividualSettingL( CIndividualSetting* aSetting);
+		TInt SingleSecuritySettingsCount();
+	private:
+		CDefaultSetting * iDefaultSetting;
+		TUint32 iDefaultMeta;
+		RPointerArray<CRangeSetting> iRangeSettings;
+		RPointerArray<CRangeMeta> iRangeMetas;
+		RPointerArray<CIndividualSetting> iIndividualSettings;
+		
+		TPtrC iContentPtr;		
+		TPtrC iHeaderPtr;
+		TPtrC iOwnerPtr;
+		TPtrC iDefaultMetaPtr;
+		
+		HBufC* iContent;
+		
+		//repository info
+		TUid iUid;
+		TUid iOwner;
+		TTime iTimeStamp ;
+
+		TInt iSingleSecuritySettingCount;
+		
+		friend class CRepositorySession;	
+};
+
+class CRepositorySession : public CObject
+{
+	public:
+	
+		CRepositorySession( TUid aRepositoryId);
+		~CRepositorySession();
+	
+		static CRepositorySession * NewL( TUid aRepositoryId);
+		
+		//repository management
+		void InitRepositorySessionL();
+		void CommitRepositoryL();
+		
+		void SetSecurityIdForSettingL( const RMessage2& aMessage);
+		void SetSecurityIdForRangeL( const RMessage2& aMessage);
+		void SetSecurityIdForMaskL( const RMessage2& aMessage);
+
+		void RestoreSettingL( const RMessage2& aMessage);
+		void RestoreRangeL( const RMessage2& aMessage);
+
+		void AddSidForDefaultsL( const RMessage2& aMessage);
+		void RestoreDefaultsL( const RMessage2& aMessage);
+		void RestoreMaskL( const RMessage2& aMessage);
+		
+		void RemoveBackupForMaskL( const RMessage2& aMessage);
+		void RestoreMaskBackupL( const RMessage2& aMessage);
+		void RemoveBackupForRangeL( const RMessage2& aMessage);
+		void RestoreRangeBackupL( const RMessage2& aMessage);
+		void RemoveDefaultBackup();
+		void RestoreDefaultBackupL();
+		
+		void CheckAccessL( const RMessage2& aMessage);
+		
+		//Commit functions
+		static void CheckCommitStateL();
+	private:
+		//File reading
+		void ReadFileL();
+		
+		//Utility
+		void ReleaseResources();
+		void CheckRepositoryState( TInt& aFileOpenResult);
+		
+	
+		TInt ReadRAML( TBool aOnlyHeader);
+		void CreateAndReadROML();
+		CRepositoryContent* ReadROMFileL( TBool aReadSettings);	
+		
+		//Backup handling
+		void MakeBackupL( RFile& aFile);
+		static void RestoreBackupL();
+		static void RemoveBackupL();
+		static TInt CreatePath();
+		
+	private:
+		//repository specific data
+		TUid iRepositoryId;
+		RFs iFs;
+		RFile iFile;
+		TBool iStreamed;	//if file repository is opened as a streamed this flag is set TRUE (*.CRE files are streamed)
+		TBool iRepositoryInUse;
+	
+		
+		//file is restored if commit is not called before close!!
+		TBuf<IniConstants::KUidLengthRep> iRepName;
+	
+		CRepositoryContent* iRepContent;
+};
+
+
+#endif 
\ No newline at end of file