diff -r 000000000000 -r 08ec8eefde2f persistentstorage/centralrepository/common/inc/inifile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/centralrepository/common/inc/inifile.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,182 @@ +// Copyright (c) 2004-2009 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: +// + +#ifndef __CENREP_INIFILE_H__ +#define __CENREP_INIFILE_H__ + +#include +#include "centralrepository.h" +#include "log.h" +#include "srvdefs.h" + +using namespace NCentralRepositoryConstants; +using namespace NCentralRepositoryResources; + +//Forward declarations +class RRangePolicyArray; +class RDefaultMetaArray; +class TServerSetting; +class TSettingsAccessPolicy; +class CSharedRepository; + +//Max length of one setting statement +const TInt KMaxLengthWithPolicyInfo = KMaxBinaryLength * 2 + 64; + +//////////////////////////////////////////////////////////////////////////////////////////////// +// CIniFileIn class +/** +@internalTechnology +*/ +class CIniFileIn : public CBase + { + enum {KReadPolicy,KWritePolicy}; + +public: + enum TIniFileOpenMode {ERomOnly,EInstallOnly,EAuto}; + +public: + static TInt NewLC(RFs& aFs,CIniFileIn*& aIniFile,const TDesC& aFullFileName); + ~CIniFileIn(); + + TInt ReadSettingL(TServerSetting& aSetting,TSecurityPolicy& aSingleReadPolicy,TSecurityPolicy& aSingleWritePolicy, TBool& aSingleReadPolicyFound, TBool& aSingleWritePolicyFound, TBool& aSingleMetaFound); + + TInt ReadPlatSecSectionL(TSecurityPolicy& aDefaultReadPolicy, TBool& aGotDefaultReadPolicy, + TSecurityPolicy& aDefaultWritePolicy, TBool& aGotDefaultWritePolicy, + RRangePolicyArray& aRangePolicies); + TInt ReadRdPolicyL(TSecurityPolicy& aReadPolicy); + TInt ReadWrPolicyL(TSecurityPolicy& aWritePolicy); + TInt ReadOwnerSectionL(TUint32 &aOwnerUID) ; + TInt ReadTimeStampSectionL(TTime &aTimeStamp) ; + TInt ReadDefaultMetaSecSectionL(TUint32& aDefaultMeta, + RDefaultMetaArray& aDefaultMetaRanges) ; + TInt SkipPlatSecSectionL(); + TInt SkipOwnerSectionL() ; + TInt SkipDefaultMetaSectionL() ; + TInt SkipTimeStampSectionL() ; + + TInt FindMainSectionL(void) ; + +#ifdef CENTREP_TRACE + HBufC* FullName(); +#endif +private: + TInt ReadHeaderL(); + TInt ReadSettingOnlyL(TServerSetting& aSetting, TBool& aSingleMetaFound); + TInt ReadStringL(HBufC8*& aString); + TInt ReadString16To8L(HBufC8*& aString); + TInt ReadBinaryL(HBufC8*& aString); + void SkipComments(); + void SkipEqualSign(); + + TInt ReadNumber(TUint32& aVal); + TInt ReadCapabilityL(TCapability& aCapability); + void CheckForAlwaysPassOrFailL(TBool& aAlwaysPass,TBool& aAlwaysFail); + TInt ReadPolicyL(TSecurityPolicy& aPolicy,TInt aPolicyType); + TInt ReadCapabilitiesL(TSecurityPolicy& aPolicy); + TInt ReadSidAndCapabilitiesL(TSecurityPolicy& aPolicy,const TDesC& aPolicyType, + TSecureId& aSid); + TInt ReadRangePoliciesL(const TSecurityPolicy& aDefaultReadPolicy,const TSecurityPolicy& aDefaultWritePolicy, + RRangePolicyArray& aRangePolicies); + TInt ReadRangeMetaDefaultsL(RDefaultMetaArray& aDefaultMetaRanges); + + + TInt GetPlatSecSectionLC(HBufC*& aSection); + TInt GetTimeStampSectionLC(HBufC*& aSection); + TInt GetOwnerSectionLC(HBufC*& aSection) ; + TInt GetDefaultMetaSectionLC(HBufC*& aSection) ; + TInt GetSectionLC(const TDesC16& aSectionId, HBufC*& aSection) ; + CIniFileIn(RFs& aFs):iFs(aFs){} +private: + HBufC* iBuf; +#ifdef CENTREP_TRACE + HBufC* iFullName; +#endif + TLex iLex; + TLexMark iMainSectionMark; + RFs iFs; + // + }; + +//////////////////////////////////////////////////////////////////////////////////////////////// +//The txt persistence is not needed inside the server but rather for the tool +#ifdef CENTREP_CONV_TOOL + +// CIniFileOut class +enum TCapAccessMode + { + ECapReadAccess, + ECapWriteAccess + }; +/** +@internalTechnology +*/ +class CIniFileOut : public CBase + { +public: + static CIniFileOut* NewLC(RFs& aFs,const TDesC& aOutFileName); + ~CIniFileOut(); + void CommitL(); + + void WriteHeaderL(); + void WriteOwnerSectionL(TUid aOwner); + void WriteTimeStampL(const TTime& aTime); + void WriteMetaDataL(TUint32 aDefaultMeta, + const RDefaultMetaArray& aDefaultMetaRanges); + +#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS + void WritePlatSecL(const TSettingsAccessPolicy& aDefaultAccessPolicy, + const RRangePolicyArray& aRangePolicies,TUint32 aCreVersion); +#else + void WritePlatSecL(const TSecurityPolicy& aDefaultReadPolicy, + const TSecurityPolicy& aDefaultWritePolicy, + const RRangePolicyArray& aRangePolicies); +#endif + + void WriteMainSectionHeaderL(); + void WriteSettingL(const TServerSetting& aSetting +#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS + ,TUint32 aCreVersion +#endif + ); + void WriteSettingL(const TServerSetting& aSetting, + const TSettingsAccessPolicy& aAccessPolicy +#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS + ,TUint32 aCreVersion +#endif + ); +private: + CIniFileOut(RFs& aFs); + void ConstructL(const TDesC& aOutFileName); + void WriteLineL(const TDesC& aData); + void AppendSecurityPolicyL(const TSecurityPolicy& aPolicy, + TCapAccessMode aRdWrMode); + void DoSettingL(const TServerSetting& aSetting +#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS + ,TUint32 aCreVersion +#endif + ); + +private: + TBool iCommited; + RFile iTransFile; //Transaction file + RFileBuf iTransFileBuf; //Transaction file buffer + TParse iTransFilePath; //Transaction file name. + TBuf iBuf;//General purpose buffer, used internally + HBufC* iOutFileName; + RFs iFs; + }; +#endif //CENTREP_CONV_TOOL + +#endif // __CENREP_INIFILE_H__