mmlibs/mmfw/SecureDRM/src/Server/MmfDrmPluginServer.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/SecureDRM/src/Server/MmfDrmPluginServer.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,114 @@
+// Copyright (c) 2007-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 MMFDRMPLUGINSERVER_H
+#define MMFDRMPLUGINSERVER_H
+
+#include <e32base.h>
+#include <e32std.h>
+#include <mmf/common/mmfipc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mmf/common/mmfipcserver.h>
+#endif
+class CStartAndMonitorControllerThread;
+class RMMFControllerServerProxy;
+
+class CMMFDRMPluginServer : public CMmfIpcServer
+/**
+*@internalTechnology
+*/
+	{
+public:
+	static CMMFDRMPluginServer* NewL();
+	~CMMFDRMPluginServer();
+	CMmfIpcSession* NewSessionL(const TVersion &aVersion) const;
+
+	void IncrementSessionId();
+	void DecrementSessionId();
+	
+	void IncrementControllerCount();
+	void DecrementControllerCount();
+
+	TInt StartControllerServer(const RThread& aClientThread, TUint aMaxHeapSize, TBool aUseSharedHeap,
+							RMMFControllerServerProxy& aDevSoundSessionHandle, TThreadId& aControllerTID, TUint aStackSize) const;
+							
+	void PanicControllerThread(TThreadId aTid, const TDesC& aCategory,TInt aReason);
+	void KillControllerThread(TThreadId aTid, TInt aReason);
+	TInt SetThreadPriority(TThreadId aTid, TThreadPriority aPriority);
+	void SetTimeout(TInt aTimeout) { iServerTimeout = aTimeout; };
+	
+private:
+
+	class CDelayServerShutDown : public CActive
+        {
+    public:
+        // Construct/destruct
+        static CDelayServerShutDown* NewL();
+        ~CDelayServerShutDown(); 
+        // Request
+        void SetDelay(TTimeIntervalMicroSeconds32 aDelay);   
+        
+    private:
+        // Construct/destruct
+        CDelayServerShutDown();
+        void ConstructL();
+    
+        // From CActive
+        void RunL();
+        void DoCancel();   
+    private:
+        RTimer iShutDownTimer;      // Has
+        };
+
+private:
+	CMMFDRMPluginServer();
+	void ConstructL();
+
+private:
+	TInt iSessionCount;
+	TInt iControllerCount;
+	TInt iServerTimeout;
+	CDelayServerShutDown* iDelayServerShutDown;
+	mutable RPointerArray<CStartAndMonitorControllerThread> iControllerServList;
+	};
+
+class CStartAndMonitorControllerThread: public CActive
+	{
+public:
+	static CStartAndMonitorControllerThread* NewL(CMMFDRMPluginServer* aPluginServer);
+	~CStartAndMonitorControllerThread();
+	TInt StartControllerServer(const RThread& aClientThread, TUint aMaxHeapSize, TBool aUseSharedHeap,
+							RMMFControllerServerProxy& aControllerSessionHandle, TThreadId& aControllerTID, TUint aStackSize);
+	RThread& Thread() { return iServerThread; };
+private:
+	// Construct
+	CStartAndMonitorControllerThread(CMMFDRMPluginServer* aPluginServer);
+	void ConstructL();
+   
+	// From CActive
+	void RunL();
+	void DoCancel();
+private:
+	CMMFDRMPluginServer* iDrmPluginServer;
+	RThread iServerThread;
+    };
+        
+class RMMFControllerServerProxy : public RMmfSessionBase
+	{
+public:
+	TInt Open(RServer2& aControllerServerHandle);
+	};
+
+#endif