--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dosservices/dosserver/inc/dosserver.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2002 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:
+* This is the definition for CDosServer class.
+*
+*/
+
+
+#ifndef __DOSSERVER_H__
+#define __DOSSERVER_H__
+
+#include <e32base.h>
+#include "dosclientserver.h"
+#include "shareddatafilesystemnotifier.h"
+#include "SaeThread.h"
+
+// ----------------------------------------------------------------------------------------
+// DosServer's policy
+// ----------------------------------------------------------------------------------------
+
+//Total number of ranges
+const TUint KDosServerRangeCount = 4;
+
+//Definition of the ranges of IPC numbers
+const TInt KDosServerRanges[KDosServerRangeCount] =
+ {
+ 0, // 0th range, Subsession opening and closing
+ EGetSimLanguage, // 1st range, all other than request free disk space operations
+ ERequestFreeDiskSpace, // 2nd range, request free disk space operations
+ ERequestFreeDiskSpaceCancel+1 // non implemented function end of range check ; ENotSupported
+ };
+
+//Policy to implement for each of the above ranges
+const TUint8 KDosServerElementsIndex[KDosServerRangeCount] =
+ {
+ 0, //applies to 0th range
+ 1, //applies to 1st range
+ 2, //applies to 2nd range
+ CPolicyServer::ENotSupported //applies to 1st range (out of range IPC)
+ };
+
+//Specific capability checks
+const CPolicyServer::TPolicyElement KDosServerElements[] =
+ {
+ {_INIT_SECURITY_POLICY_C2( ECapabilityReadUserData,
+ ECapabilityWriteUserData ), CPolicyServer::EFailClient}, //policy "0"
+ {_INIT_SECURITY_POLICY_C4( ECapabilityReadUserData,
+ ECapabilityWriteUserData,
+ ECapabilityReadDeviceData,
+ ECapabilityWriteDeviceData ), CPolicyServer::EFailClient}, //policy "1"
+ {_INIT_SECURITY_POLICY_C2( ECapabilityReadUserData,
+ ECapabilityWriteUserData ), CPolicyServer::EFailClient} //policy "2"
+ };
+
+//Package all the above together into a policy
+const CPolicyServer::TPolicy KDosServerPolicy =
+ {
+ CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass
+ KDosServerRangeCount, //number of ranges
+ KDosServerRanges, //ranges array
+ KDosServerElementsIndex, //elements<->ranges index
+ KDosServerElements, //array of elements
+ };
+
+class CDosFactoryBase;
+class CDosEventNotifier;
+class CDosEventManager;
+
+/**
+* Panics the client thread.
+* @param aMessage Client-server message.
+* @param aPanic Panic code.
+*/
+void PanicClient(const RMessage2& aMessage,TDosPanic aPanic);
+
+_LIT(KDosLibName,"DosSrv.dll");
+_LIT(KDosServerExe,"DosServer.exe");
+// Startup semaphore name
+_LIT( KServerStartupSemaphoreName, "DosServerStartupSem" );
+
+#ifdef __WINS__
+const TInt KDosServerStackSize=0x2000; // 8KB
+const TInt KDosServerInitHeapSize=0x1000; // 4KB
+const TInt KDosServerMaxHeapSize=0x1000000; // 16MB
+#endif
+
+/**
+* Server class.
+*/
+class CDosServer : public CPolicyServer
+ {
+public:
+ /**
+ * signal class for waiting while thread/process is being set up.
+ */
+ class TSignal
+ {
+ public:
+ inline TSignal();
+ inline TSignal( TRequestStatus& aStatus );
+
+ inline TInt Set( const TDesC& aData );
+ inline TPtrC Get() const;
+
+ public:
+ TRequestStatus* iStatus;
+ TThreadId iId;
+ };
+
+public:
+
+ /**
+ * Constructor.
+ */
+ CDosServer();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CDosServer();
+
+ /**
+ * NewL function that creates the object.
+ * @return A pointer to the newly created object.
+ */
+ static CDosServer* NewL();
+
+ /**
+ * Function that starts the thread.
+ * @param aSignal The signal for synchronization.
+ */
+ IMPORT_C static TInt ThreadStart( CDosServer::TSignal& aSignal );
+
+ /**
+ * It adds a session to the server.
+ */
+ void AddSession();
+
+ /**
+ * It removes a session from the server.
+ */
+ void DropSession();
+
+ /**
+ * It's called by CActive on error situations.
+ * @param aError Symbian error code.
+ * @return Returns KErrNone if the error was handled or aError otherwise.
+ */
+ TInt RunError(TInt aError);
+
+ /**
+ * Gets the Container Index.
+ * @return The container index.
+ */
+ inline CObjectConIx* ContainerIx() const;
+
+ /**
+ * Gets the event manager.
+ * @return A pointer to the evetn manager.
+ */
+ inline CDosEventManager* EventManager() const;
+
+ /**
+ * Gets the Factory.
+ * @return A pointer to the factory.
+ */
+ inline CDosFactoryBase* DosFactory() const;
+ TInt* CurrentFreeDiskSpaceRequest();
+ void SetCurrentFreeDiskSpaceRequest(TInt* diskSpace);
+
+public:
+ // free disk space notifier
+ CSharedDataFileSystemNotifier* iFileSystemNotifier;
+private:
+ /**
+ * Symbian two-phased constructor.
+ */
+ void ConstructL();
+
+ /**
+ * It creates and sets up a new server side session.
+ * @param aVersion Unused.
+ * @return A pointer to the created session.
+ */
+ CSession2* NewSessionL(const TVersion& aVersion) const;
+
+ /**
+ * It creates and sets up a new server side session.
+ * @param aVersion Unused.
+ * @param aMessage ...
+ * @return A pointer to the created session.
+ */
+ CSession2* NewSessionL(const TVersion& aVersion, const class RMessage2& aMessage) const;
+
+ /**
+ * It reads from z:\system\data\DosServer.ini the Dsy Module and
+ * loads it.
+ */
+ void LoadDsyModuleL();
+
+ /**
+ * It signals client thread via semaphore that we have started.
+ */
+ static void SignalClient();
+
+private:
+ //Container Index.
+ CObjectConIx* iContainerIx;
+
+ //Number of active sessions in the server.
+ TInt iSessionCount;
+
+ //Pointer to the DosServer's event manager.
+ CDosEventManager* iEventManager;
+
+ //Pointer to the Service Factory.
+ CDosFactoryBase* iDosFactory;
+
+ //Contains the Dsy module.
+ RLibrary iLib;
+
+ //Indicates if DSY is Loaded, RLibrary::Close() can not be called if
+ //RLibrary::Load() has not been called.
+ TBool iLibLoaded;
+ // highest outstanding free disk space request
+ TInt* iCurrentFreeDiskSpaceRequest;
+
+ CSaeThread* iSaeThread;
+
+ friend class CSharedDataFileSystemNotifier;
+};
+
+#include "dosserver.inl"
+
+#endif //__DOSSERVER_H__