persistentstorage/sql/SRC/Server/SqlSrvMain.h
changeset 0 08ec8eefde2f
child 31 ba1c4f4a893f
child 42 28839de615b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Server/SqlSrvMain.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,169 @@
+// Copyright (c) 2005-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 __SQLSRVMAIN_H__
+#define __SQLSRVMAIN_H__
+
+#include <f32file.h>
+#include "SqlPanic.h" 			//TSqlPanic
+#include "SqlSrvFileData.h"		//TSqlSrvFileData
+#include "SqlSrvAuthorizer.h"	//MSqlPolicyInspector
+#include "SqlSrvSecurityMap.h"	//
+#include "SqlSrvDriveSpace.h"	//RSqlDriveSpaceCol
+#include "SqlSrvBurInterface.h"	//MSqlSrvBurInterface
+#include "SqlBur.h"
+#include "SqlBufFlat.h"			//RSqlBufFlat
+
+//Forward declarations
+class CSqlCompactor;
+class CSqlServer;
+
+CSqlServer& SqlServer(void);
+
+/**
+CSqlServer class derives from CServer2 and offers methods for:
+  - creating new server side sessions;
+  - accessing the last RMessage2 object;
+  - accessing the TSqlSrvFileData instance (one per server);
+  - accessing the security settings map (one per server);
+  
+CSqlServer class also implements MSqlPolicyInspector and MSqlSrvBurInterface interfaces;
+
+The class owns also the folowing set of data:
+- iFileData    - see TSqlSrvFileData;
+- iSecurityMap - see RSqlSecurityMap and RSqlMap;
+
+@see CServer2
+@see MSqlPolicyInspector
+@see TSqlSrvFileData
+@see RSqlMap
+@see RSqlSecurityMap
+@see CSqlServer::NewLC()
+@see CSqlServer::NewSessionL()
+@see CSqlServer::FileData()
+@see CSqlServer::SecurityMap()
+@see CSqlServer::Check()
+
+@internalComponent
+*/
+NONSHARABLE_CLASS(CSqlServer) : public CServer2, public MSqlPolicyInspector, public MSqlSrvBurInterface
+	{
+public:		
+	static CSqlServer* NewLC();	
+	~CSqlServer();
+	inline TSqlSrvFileData& FileData();
+	inline RSqlSecurityMap& SecurityMap();
+	inline RSqlDriveSpaceCol& DriveSpaceCol();
+	inline const TDesC& CollationDllName() const;
+	inline MSqlPolicyInspector& SecurityInspector();
+	//Server buffers
+	RSqlBufFlat& GetFlatBufL(TInt aMinLen);
+	TDes8& GetBuf8L(TInt aMinLen);
+	TDes16& GetBuf16L(TInt aMinLen);
+	inline TDes& FileNameBuf();
+	void MinimizeBuffers(); 
+	//Compactor
+	inline CSqlCompactor& Compactor();
+	//Overriding CServer2 abstract methods
+	virtual CSession2* NewSessionL(const TVersion &aVersion, const RMessage2& aMessage) const;
+	//Overriding MSqlPolicyInspector abstract methods
+	virtual TBool Check(const TSecurityPolicy& aPolicy) const;
+	//Overriding MSqlSrvBurInterface abstract methods
+	virtual RFs& Fs();
+	virtual void GetBackUpListL(TSecureId aUid, RArray<TParse>& aFileList);
+
+private:
+	CSqlServer();
+	void ConstructL();
+	void GetCollationDllNameL();
+	void CacheDbConfigFileNamesL(RFs& aFs, const TDesC& aServerPrivatePath);
+	TInt ReAllocBuf(TInt aNewBufSize);
+
+private:
+	TSqlSrvFileData		iFileData;		//Used as a temporary storage for file data (file name, drive, path, secure uid)
+	RSqlSecurityMap		iSecurityMap;	//Collection of database security policies
+	RSqlDriveSpaceCol	iDriveSpaceCol;	//Collection of "drive space" objects (reserved drive space management)
+	CSqlBackupClient*	iBackupClient; 	// the backup and restore instance
+	TFileName			iCollationDllName;//Default collation - dll name - uniquely identifies the collation method
+	RSqlBufFlat  		iFlatBuf;		//general purpose flat buffer. do not keep a state in it between calls!
+	TUint8*				iBuf;			//general purpose buffer. do not keep a state in it between calls!
+	TPtr8				iBufPtr8;		//8-bit pointer to iBuf
+	TPtr16				iBufPtr16;		//16-bit pointer to iBuf
+	TFileName 			iFileNameBuf;	//General purpose buffer, can be used for storing file names
+	CDbConfigFiles*	    iDbConfigFiles; //Holds the database config file names, if any exist (will be NULL if no files exist)
+	CSqlCompactor*		iCompactor;		//The background compacting object (container for the db entries to be compacted)
+	};
+
+/**
+@return A reference to the file data object (one per server).
+*/
+inline TSqlSrvFileData& CSqlServer::FileData()
+	{
+	return iFileData;
+	}
+	
+/**
+@return A reference to the security settings map object which maintains a map of 
+        {Database name, security settings container} entries.
+*/
+inline RSqlSecurityMap& CSqlServer::SecurityMap()
+	{
+	return iSecurityMap;
+	}
+
+/**
+@return A reference to the "drive space" collection
+*/
+inline RSqlDriveSpaceCol& CSqlServer::DriveSpaceCol()
+	{
+	return iDriveSpaceCol;
+	}
+
+/**
+@return A reference to the default collation - the dll name.
+*/
+inline const TDesC& CSqlServer::CollationDllName() const
+	{
+	return iCollationDllName;	
+	}
+
+/**
+Returns a reference to the security policy inspector interface.
+@return A reference to the security policy inspector interface.
+*/
+inline MSqlPolicyInspector& CSqlServer::SecurityInspector()
+	{
+	return static_cast <MSqlPolicyInspector&> (*this);
+	}
+
+/**
+@return A reference to the file name buffer.
+*/
+inline TDes& CSqlServer::FileNameBuf()
+	{
+	return iFileNameBuf;		
+	}
+
+/**
+@return A reference to the compactor.
+@panic SqlDb 7 In _DEBUG mode if the compactor is NULL.
+*/
+inline CSqlCompactor& CSqlServer::Compactor()
+	{
+	__SQLASSERT(iCompactor != NULL, ESqlPanicInternalError);			
+	return *iCompactor;
+	}
+
+#endif//__SQLSRVMAIN_H__