sl@0: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // DBMS Client/Server architecture sl@0: // sl@0: // sl@0: sl@0: sl@0: #include "U32STD.H" sl@0: #include "D32SRV.H" sl@0: #include "D32DRVR.H" sl@0: #include sl@0: #include sl@0: #include "D32VER.H" sl@0: #include "D32Map.h" sl@0: #include "Sd_DbProps.h" sl@0: #include "Sd_PolicyProxy.h" sl@0: #include "Sd_DriveSpace.h" sl@0: sl@0: // other classes referenced sl@0: class HDbsColumns; sl@0: struct TDbProps; sl@0: sl@0: // classes defined sl@0: class TDbsParam; sl@0: class RDbsObject; sl@0: class CDbsDatabase; sl@0: class CDbsIncremental; sl@0: class CDbsCursor; sl@0: class CDbsConstraint; sl@0: class CDbsNotifier; sl@0: class CDbsSource; sl@0: class RDbsSources; sl@0: class CDbsServer; sl@0: class CDbsSession; sl@0: class HDbsStream; sl@0: sl@0: #if defined(_DEBUG) sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: #define _SMALL_BUFFER sl@0: #endif sl@0: sl@0: using namespace DBSC; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: enum TDbsPanic sl@0: { sl@0: EDbsUnimplemented, //0 sl@0: EDbsInvalidColumn, sl@0: EDbsWrongType, sl@0: EDbsNoRowData, sl@0: EDbsNotInUpdate, sl@0: EDbsBadDescriptor, sl@0: EDbsBadHandle, sl@0: EDbsStreamMarkInvalid, sl@0: EDbsStreamLocationInvalid, sl@0: EDbsObserverRequestPending, sl@0: EDbsInvalidDrive //10 sl@0: }; sl@0: sl@0: /** sl@0: used by proxy classes sl@0: @internalComponent sl@0: */ sl@0: GLREF_C void Panic(TDbsPanic aPanic); sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: GLREF_C void ExternalizeL(const TDbCol& aCol,RWriteStream& aStream); sl@0: GLREF_C void ExternalizeL(const CDbColSet& aColSet,RWriteStream& aStream); sl@0: GLREF_C void InternalizeL(CDbColSet& aColSet,RReadStream& aStream); sl@0: GLREF_C void ExternalizeL(const CDbKey& aKey,RWriteStream& aStream); sl@0: GLREF_C void InternalizeL(CDbKey& aKey,RReadStream& aStream); sl@0: GLREF_C void ExternalizeL(const CDbNames& aNames,RWriteStream& aStream); sl@0: GLREF_C void InternalizeL(CDbNames& aNames,RReadStream& aStream); sl@0: GLREF_C void ExternalizeL(const CDbStrings& aNames,RWriteStream& aStream); sl@0: GLREF_C void InternalizeL(CDbStrings& aNames,RReadStream& aStream); sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: _LIT(KDbsServerName,"!DBMS server"); sl@0: _LIT(KDbsServerImg,"EDBSRV"); // DLL/EXE name sl@0: const TUid KDbsServerUid3={0x100012a5}; sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: const TInt KDbsExitDelay=4*0x100000; // ~4 seconds sl@0: const TInt KDbsLeavePanic=~(1<<20); sl@0: const TInt KTablePolicyMaskBit = 1024; //Used in RDbs::GetPolicy() methods sl@0: sl@0: /** sl@0: shared classes sl@0: @internalComponent sl@0: */ sl@0: enum TDbsType {EDbsFree,EDbsDatabase,EDbsIncremental,EDbsCursor,EDbsConstraint,EDbsStream,EDbsObserver,EDbsMaxType=EDbsObserver,EDbsSession=EDbsFree}; sl@0: sl@0: /** sl@0: Make sure that KDbsFunc2SecurityPolicyMask array in SD_PolicyProxy.cpp gets updated if sl@0: new enum items are going to be added to TDbsFunction. sl@0: @internalComponent sl@0: */ sl@0: enum TDbsFunction sl@0: { sl@0: // Session functions sl@0: EDbsResourceMark, //0 sl@0: EDbsResourceCheck, sl@0: EDbsResourceCount, sl@0: EDbsSetHeapFailure, sl@0: EDbsOpenDatabase, sl@0: // common functions sl@0: EDbsClose, sl@0: // Database functions sl@0: EDbsDatabaseAuthenticate, //Not used in SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION version sl@0: EDbsDatabaseDestroy, sl@0: EDbsDatabaseBegin, sl@0: EDbsDatabaseCommit, sl@0: EDbsDatabaseRollback, //10 sl@0: EDbsDatabaseProperty, sl@0: EDbsDatabaseCreateTable, sl@0: EDbsDatabaseTables, sl@0: EDbsDatabaseColumns, sl@0: EDbsDatabaseIndexes, sl@0: EDbsDatabaseKeys, sl@0: EDbsDatabaseOpenObserver, sl@0: EDbsDatabaseOpenUtility, sl@0: EDbsDatabaseOpenDropTable, sl@0: EDbsDatabaseOpenAlterTable, //20 sl@0: EDbsDatabaseOpenCreateIndex, sl@0: EDbsDatabaseOpenDropIndex, sl@0: EDbsDatabaseExecute, sl@0: EDbsDatabasePrepareView, sl@0: EDbsDatabaseOpenTable, sl@0: // Observer functions sl@0: EDbsObserverNotify, sl@0: EDbsObserverCancel, sl@0: // Incremental functions sl@0: EDbsIncrementalNext, sl@0: // Cursor functions sl@0: EDbsCursorColumnTypes, sl@0: EDbsCursorReset, //30 sl@0: EDbsCursorEvaluate, sl@0: EDbsCursorUnevaluated, sl@0: EDbsCursorSetIndex, sl@0: EDbsCursorSeek, sl@0: EDbsCursorAtBeginning, sl@0: EDbsCursorAtEnd, sl@0: EDbsCursorAtRow, sl@0: EDbsCursorCount, sl@0: EDbsCursorGotoPos, sl@0: EDbsCursorBookmark, //40 sl@0: EDbsCursorGotoBookmark, sl@0: EDbsCursorGet, sl@0: EDbsCursorInsert, sl@0: EDbsCursorUpdate, sl@0: EDbsCursorRetrieveRow, sl@0: EDbsCursorCancel, sl@0: EDbsCursorPut, sl@0: EDbsCursorDelete, sl@0: EDbsCursorColumns, sl@0: EDbsCursorColumnDef, //50 sl@0: EDbsCursorSetNull, sl@0: EDbsCursorColumnSize, sl@0: EDbsCursorColumnSource, sl@0: EDbsCursorColumnSink, sl@0: EDbsCursorOpenConstraint, sl@0: EDbsCursorMatch, sl@0: EDbsCursorFind, sl@0: // stream functions sl@0: EDbsStreamRead, sl@0: EDbsStreamWrite, sl@0: EDbsStreamSize, //60 sl@0: EDbsStreamSynch, sl@0: // Session functions sl@0: EDbsCreateDatabase, sl@0: EDbsDatabaseList, sl@0: EDbsCopyDatabase, sl@0: EDbsDeleteDatabase, sl@0: EDbsGetSecurityPolicy, sl@0: // reserved disk space handling functions sl@0: EDbsReserveDriveSpace, sl@0: EDbsFreeReservedSpace, sl@0: EDbsReserveGetAccess, sl@0: EDbsReserveReleaseAccess, //70 sl@0: // sl@0: EDbsGetBackupPath, sl@0: EDbsGetBackupPaths, sl@0: //Insert new functuions here sl@0: EDbsLast sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: const TInt KDbsTypeBits=4; sl@0: const TInt KDbsMagicBits=4; sl@0: const TInt KDbsIndexBits=14; sl@0: const TInt KDbsFunctionBits=9; sl@0: const TInt KDbsHandleBits=KDbsTypeBits+KDbsMagicBits+KDbsIndexBits; sl@0: const TInt KDbsTypeMask=(1<& aStep,TRequestStatus& aStatus); sl@0: private: sl@0: RDbsObject iObject; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsCursor) : public CDbCursor sl@0: { sl@0: public: sl@0: static CDbsCursor* NewL(const RDbsObject& aDbs,TDbsFunction aFunction,TIpcArgs& aArgs); sl@0: ~CDbsCursor(); sl@0: private: sl@0: CDbsCursor(); sl@0: void ConstructL(const RDbsObject& aDbs,TDbsFunction aFunction,TIpcArgs& aArgs); sl@0: // sl@0: TDbColType Type(TDbColNo aCol) const; sl@0: void ReplaceBlobL(TDbColumn& aCol); sl@0: TBool RetrieveL(TDbsFunction aFunction,TInt aArg0=0); sl@0: // from CDbCursor sl@0: void Reset(); sl@0: TBool EvaluateL(); sl@0: void Evaluate(TRequestStatus& aStatus); sl@0: TBool Unevaluated(); sl@0: void SetIndexL(const TDesC* anIndex); sl@0: TBool SeekL(const TDbLookupKey& aKey,RDbTable::TComparison aComparison); sl@0: TBool AtBeginning(); sl@0: TBool AtEnd(); sl@0: TBool AtRow(); sl@0: TInt CountL(RDbRowSet::TAccuracy aAccuracy); sl@0: TBool GotoL(RDbRowSet::TPosition aPosition); sl@0: void Bookmark(TDbBookmark::TMark& aMark); sl@0: void GotoL(const TDbBookmark::TMark& aMark); sl@0: void GetL(); sl@0: void InsertL(TInsert aClearRow); sl@0: void UpdateL(); sl@0: void Cancel(); sl@0: void PutL(); sl@0: void DeleteL(); sl@0: TInt ColumnCount(); sl@0: void ColumnsL(CDbColSet& aColSet); sl@0: void ColumnDef(TDbCol& aCol,TDbColNo aColNo); sl@0: TDbColType ColumnType(TDbColNo aCol); sl@0: RDbRow* RowBuffer(); sl@0: TDbColumnC ColumnC(TDbColNo aCol); // non-writeable column sl@0: TDbColumn Column(TDbColNo aCol); // writeable column sl@0: void SetNullL(TDbColNo aCol); sl@0: TInt ColumnSize(TDbColNo aCol); sl@0: MStreamBuf* ColumnSourceL(TDbColNo aCol); sl@0: MStreamBuf* ColumnSinkL(TDbColNo aCol); sl@0: CDbRowConstraint* OpenConstraintL(const TDbQuery& aCriteria); sl@0: TBool MatchL(CDbRowConstraint& aCursor); sl@0: TInt FindL(RDbRowSet::TDirection aDirection,const TDbQuery& aCriteria); sl@0: private: sl@0: enum TState {EUnknown,EAtBeginning,EAtEnd,EAtRow,ERetrieve,ERead,EWrite}; sl@0: private: sl@0: RDbsObject iObject; sl@0: TState iState; sl@0: TBool iChangedBlob; sl@0: HDbsColumns* iColumns; sl@0: RDbRow iRow; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsConstraint) : public CDbRowConstraint sl@0: { sl@0: friend class CDbsCursor; sl@0: private: sl@0: inline CDbsConstraint(); sl@0: ~CDbsConstraint(); sl@0: private: sl@0: RDbsObject iObject; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(HDbsBuf) : public TStreamBuf sl@0: { sl@0: public: sl@0: static HDbsBuf* NewL(const RDbsObject& aObject,TDbsFunction aFunction,TIpcArgs& aArgs); sl@0: static HDbsBuf* NewLC(const RDbsObject& aObject,TDbsFunction aFunction,TIpcArgs& aArgs); sl@0: static HDbsBuf* NewLC(const RDbs& aDbSession, TDbsFunction aFunction, TIpcArgs& aArgs); sl@0: virtual inline ~HDbsBuf(); sl@0: private: sl@0: inline HDbsBuf(); sl@0: void ConstructL(const RDbsObject& aObject,TDbsFunction aFunction,TIpcArgs& aArgs); sl@0: void ConstructL(const RDbs& aDbSession, TDbsFunction aFunction, TIpcArgs& aArgs); sl@0: // from TStreamBuf sl@0: TInt UnderflowL(TInt aMaxLength); sl@0: void OverflowL(); sl@0: void DoRelease(); sl@0: void DoSynchL(); sl@0: TInt DoReadL(TAny* aPtr,TInt aMaxLength); sl@0: void DoWriteL(const TAny* aPtr,TInt aLength); sl@0: TStreamPos DoSeekL(TMark aMark,TStreamLocation aLocation,TInt anOffset); sl@0: private: sl@0: inline void SetPos(TRead,TInt aPos); sl@0: inline void SetPos(TWrite,TInt aPos); sl@0: inline TInt Pos(TRead) const; sl@0: inline TInt Pos(TWrite) const; sl@0: inline TInt MovePos(TRead,TInt anOffset); sl@0: inline TInt MovePos(TWrite,TInt anOffset); sl@0: TInt IpcReadL(TAny* aPtr,TInt aMaxLength); sl@0: void IpcWriteL(const TAny* aPtr,TInt aLength); sl@0: TInt EndL(); sl@0: // sl@0: inline TInt Lag(TRead) const; sl@0: inline TInt Lag(TWrite) const; sl@0: inline TInt Mark(TRead) const; sl@0: inline TInt Mark(TWrite) const; sl@0: private: sl@0: RDbsObject iIpc; sl@0: TInt iRPos; sl@0: TInt iWPos; sl@0: TDbsStreamBuf iBuf; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(HDbsReadBuf) : public TMemBuf sl@0: { sl@0: public: sl@0: static HDbsReadBuf* NewL(const TDesC8& aDes); sl@0: protected: sl@0: inline HDbsReadBuf(const TDesC8& aDes); sl@0: void DoRelease(); sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsObserver) : public CActive sl@0: { sl@0: public: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: class HObserver sl@0: { sl@0: friend class CDbsObserver; sl@0: public: sl@0: ~HObserver(); sl@0: void Notify(const RMessage2& aMessage); sl@0: void Cancel(); sl@0: private: sl@0: inline HObserver(); sl@0: void Complete(TInt aStatus); sl@0: void Event(TInt aEvent); sl@0: private: sl@0: TDblQueLink iLink; sl@0: TInt iPending; sl@0: RMessagePtr2 iMessage; sl@0: }; sl@0: friend class HObserver; sl@0: public: sl@0: static CDbsObserver* NewL(CDbsSource& aSource); sl@0: static CDbsObserver* Collect(CDbsObserver* aNotifier); sl@0: HObserver* ObserverL(); sl@0: private: sl@0: inline CDbsObserver(CDbsSource& aSource); sl@0: ~CDbsObserver(); sl@0: // sl@0: void Queue(); sl@0: // from CActive sl@0: void RunL(); sl@0: void DoCancel(); sl@0: private: sl@0: CDbsSource& iSource; sl@0: CDbNotifier* iNotifier; sl@0: TDblQue iQueue; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsConnection) : public CDbContext sl@0: { sl@0: friend class RDbsSources; sl@0: public: sl@0: inline CDbsSource& Source() const; sl@0: static inline const CDbsConnection& Connection(const CDbObject& aObject); sl@0: static inline CDbsSource& Source(const CDbObject& aObject); sl@0: private: sl@0: inline CDbsConnection() {} sl@0: ~CDbsConnection(); sl@0: inline void Set(CDbsSource& aSource); sl@0: private: sl@0: CDbsSource* iSource; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: class CDbsDatabaseStub : public CDbObject sl@0: { sl@0: public: sl@0: static CDbsDatabaseStub* NewL(); sl@0: CDbDatabase* AuthenticateL(); sl@0: private: sl@0: inline CDbsDatabaseStub(); sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsSource) : public CBase sl@0: { sl@0: friend class CDbsConnection; sl@0: friend class CDbsObserver; sl@0: public: sl@0: static CDbsSource* NewL(RFs& aFs,const TDesC& aSource); sl@0: // sl@0: static inline TInt LinkOffset(); sl@0: TBool Is(const TDesC& aSource) const; sl@0: // sl@0: inline CDbSource& Source(); sl@0: CDbsObserver::HObserver* ObserverL(); sl@0: private: sl@0: inline CDbsSource(const TDbFormat& aFormat); sl@0: ~CDbsSource(); sl@0: void Closed(); sl@0: // sl@0: inline void Open(); sl@0: void Close(); sl@0: private: sl@0: TDblQueLink iLink; sl@0: HBufC* iName; sl@0: const TDbFormat& iFormat; sl@0: TInt iConnections; sl@0: CDbSource* iSource; sl@0: CDbsObserver* iObserver; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: class RDbsSources sl@0: { sl@0: private: sl@0: typedef TDblQueIter TIter; sl@0: public: sl@0: inline RDbsSources(RDbCache& aCache); sl@0: inline void Close(); sl@0: // sl@0: CDbsConnection* OpenLC(RFs& aFs,const TDesC& aSource,const TDesC& aFormat); sl@0: private: sl@0: TDblQue iSources; sl@0: RDbCache iDrivers; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsServer) : public CServer2 sl@0: { sl@0: public: sl@0: static CDbsServer* NewL(); sl@0: // sl@0: inline TDes& Name0(); sl@0: inline TDes& Name1(); sl@0: inline TDes& FileName(); sl@0: inline RDbsSources& Sources(); sl@0: inline RFs& Fs(); sl@0: inline RDriveSpaceCol& DriveSpaceCol(); sl@0: void RemoveSession(); sl@0: // sl@0: static CDbsServer* Instance(); sl@0: void Panic(const TDesC& aCategory,TInt aCode); // .. panic client! sl@0: sl@0: inline CPolicyProxy& PolicyProxy() const; sl@0: inline RDbPropsFactory& DbPropsFactory(); sl@0: sl@0: private: sl@0: inline CDbsServer(); sl@0: ~CDbsServer(); sl@0: void ConstructL(); sl@0: // from CServer sl@0: CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const; sl@0: private: sl@0: enum {ECacheSize=8}; sl@0: enum {EServerPriority=0}; sl@0: private: sl@0: RDbCache iCache; sl@0: RDbsSources iSources; sl@0: TDbName iName0; // used for message servicing sl@0: TDbName iName1; sl@0: TFileName iFileName; sl@0: RFs iFs; sl@0: CPolicyProxy* iPolicyProxy; sl@0: RDbPropsFactory iDbPropsFactory; sl@0: RDriveSpaceCol iDriveSpaceCol; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(CDbsSession) : public CSession2 sl@0: { sl@0: private: sl@0: #if !defined(_SMALL_BUFFER) sl@0: enum {EIndexGranularity=8}; sl@0: #else sl@0: enum {EIndexGranularity=1}; sl@0: #endif sl@0: struct TEntry sl@0: { sl@0: union sl@0: { sl@0: TAny* iObject; sl@0: TInt iNext; sl@0: }; sl@0: TUint8 iType; sl@0: const MPolicy* iPolicy; sl@0: TUint8 iMagic; sl@0: public: sl@0: void Release(); sl@0: DECLARE_DB_DUMP3(aFile) sl@0: // sl@0: inline TDbsType Type() const; sl@0: inline CDbsDatabaseStub& DatabaseStub(); sl@0: inline CDbDatabase& Database(); sl@0: inline CDbIncremental& Incremental(); sl@0: inline CDbCursor& Cursor(); sl@0: inline CDbRowConstraint& Constraint(); sl@0: inline HDbsStream& Stream(); sl@0: inline CDbsObserver::HObserver& Observer(); sl@0: }; sl@0: public: sl@0: CDbsSession(); sl@0: virtual ~CDbsSession(); sl@0: private: sl@0: //From CSession2 sl@0: virtual void CreateL(); sl@0: // from CSession sl@0: void ServiceL(const RMessage2& aMessage); sl@0: TInt ExtServiceL(const RMessage2& aMessage, TDbsFunction aDbsFunction); sl@0: void ServiceError(const RMessage2& aMessage,TInt aError); sl@0: TInt CountResources(); sl@0: // sl@0: inline CDbsServer& Server() const; sl@0: inline RDbsSources& Sources(); sl@0: // sl@0: const TDesC& ReadName0L(TInt aIndex,const RMessage2& aMessage); sl@0: const TDesC& ReadName1L(TInt aIndex,const RMessage2& aMessage); sl@0: const TDesC& ReadFileNameL(TInt aIndex, const RMessage2& aMessage); sl@0: HBufC* ReadHBufLC(TInt aIndex,const RMessage2& aMessage); sl@0: HBufC8* ReadHBuf8LC(TInt aIndex,const RMessage2& aMessage); sl@0: CDbColSet* ColSetLC(TInt aIndex,const RMessage2& aMessage); sl@0: CDbKey* KeyLC(TInt aIndex,const RMessage2& aMessage); sl@0: TDbLookupKey* LookupKeyLC(TInt aIndex,TInt aSize,const RMessage2& aMessage); sl@0: CDbObject* DoAuthenticateL(CDbsConnection* aDbsConnection, const RMessage2& aMessage); sl@0: TInt DoOpenDatabaseL(const RMessage2& aMessage, const TDbProps& aDbProps); sl@0: sl@0: TDbProps* ExtractDbPropsLC(const RMessage2& aMessage); sl@0: TInt OpenDatabaseL(const RMessage2& aMessage); sl@0: TInt CreateDatabaseL(const RMessage2& aMessage); sl@0: TInt DoCreateDatabaseL(const RMessage2& aMessage, const TDbProps& aDbProps); sl@0: void CopyDatabaseL(const RMessage2& aMessage); sl@0: void DeleteDatabaseL(const RMessage2& aMessage); sl@0: TInt GetDatabaseListL(const RMessage2& aMessage); sl@0: void GetSecurityPolicyL(const RMessage2& aMessage); sl@0: void ReadRowL(RDbRow& aRow,TInt aSize,const RMessage2& aMessage); sl@0: void PutRowL(CDbCursor& aCursor,const RMessage2& aMessage); sl@0: TInt WriteRowL(const RDbRow& aRow,const RMessage2& aMessage); sl@0: TInt RetrieveRowL(CDbCursor& aCursor,const RMessage2& aMessage); sl@0: TInt NewCursorL(CDbCursor* aCursor,const RMessage2& aMessage,const MPolicy* aTblSecurityPolicy); sl@0: TInt NewIncrementalL(CDbIncremental* aCursor,TInt& aInit,const RMessage2& aMessage,const MPolicy* aPolicy); sl@0: TInt NewStreamL(MStreamBuf* aHost,const RMessage2& aMessage,const MPolicy* aPolicy,TInt aExtent=-1); sl@0: TInt NewStreamL(TAny* aPtr,TExternalizeFunction aExter,const RMessage2& aMessage,const MPolicy* aPolicy); sl@0: void NewDbEntryL(CDbObject* aDbObject, const TDbPolicyRequest& aDbPolicyRequest, TInt& aDbHandle); sl@0: sl@0: #ifdef __DBDUMP__ sl@0: void Dump(); sl@0: #endif sl@0: sl@0: void ReserveDriveSpaceL(TDriveNumber aDrive); sl@0: void FreeReservedSpace(TDriveNumber aDrive); sl@0: void GetReserveAccessL(TDriveNumber aDrive); sl@0: void ReleaseReserveAccess(TDriveNumber aDrive); sl@0: sl@0: void GetBackupPathL(const RMessage2& aMessage); sl@0: TInt GetBackupPathsL(const RMessage2& aMessage); sl@0: sl@0: inline TInt Add(CDbIncremental* aIncremental, const MPolicy* aPolicy); sl@0: inline TInt Add(CDbCursor* aCursor, const MPolicy* aPolicy); sl@0: inline TInt Add(CDbRowConstraint* aConstraint, const MPolicy* aPolicy); sl@0: inline TInt Add(HDbsStream* aStream, const MPolicy* aPolicy); sl@0: inline TInt Add(CDbsObserver::HObserver* aObserver, const MPolicy* aPolicy); sl@0: sl@0: TEntry& Object(TInt aHandle); sl@0: void AllocL(); sl@0: TInt DoAdd(TAny* aObject,TDbsType aType, const MPolicy* aPolicy); sl@0: void Free(TEntry& aEntry); sl@0: sl@0: private: sl@0: TEntry* iIx; sl@0: TInt iSize; sl@0: TInt iFree; sl@0: RMap iDbPolicyRqColl; sl@0: CDbsSessDriveSpace* iSessDriveSpace; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: class HDbsStream sl@0: { sl@0: public: sl@0: inline HDbsStream(MStreamBuf* aHost,TInt aReadPos); sl@0: inline ~HDbsStream(); sl@0: // sl@0: TInt ReadL(const RMessage2& aMessage); sl@0: void WriteL(const RMessage2& aMessage); sl@0: inline TInt SizeL(); sl@0: inline void SynchL(); sl@0: private: sl@0: MStreamBuf& iHost; sl@0: TInt iRPos; sl@0: TInt iWPos; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: NONSHARABLE_CLASS(HBufBuf) : public TBufBuf sl@0: { sl@0: enum {EGranularity=512}; sl@0: public: sl@0: static HBufBuf* NewLC(); sl@0: private: sl@0: inline HBufBuf(); sl@0: virtual inline ~HBufBuf(); sl@0: void DoRelease(); sl@0: private: sl@0: CBufBase* iBuf; sl@0: }; sl@0: sl@0: #include "SD_STD.INL" sl@0: sl@0: sl@0: