debugsrv/runmodedebug/securityserver/inc/c_security_svr_server.h
changeset 42 0ff24a8f6ca2
child 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debugsrv/runmodedebug/securityserver/inc/c_security_svr_server.h	Fri Aug 27 11:37:29 2010 +0300
@@ -0,0 +1,80 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Definitions for the security server server.
+// 
+//
+
+#ifndef C_SECURITY_SVR_SERVER_H
+#define C_SECURITY_SVR_SERVER_H
+
+/**
+@file
+@internalTechnology
+@released
+*/
+
+#include <rm_debug_api.h>
+#include "c_process_pair.h"
+#include "c_shutdown_timer.h"
+#include "rm_debug_kerneldriver.h"
+
+_LIT(KDebugDriverFileName,"rm_debug.ldd");
+class CSecuritySvrSession;
+
+/**
+Definition of a Debug Security Server. Responsible for managing all debug agent clients,
+including attachment/detachment from target executables. Keeps track of which executables
+are being debugged.
+*/
+class CSecuritySvrServer : public CServer2
+	{
+	public:
+		CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+		TInt AttachProcessL(const TDesC& aTargetProcessName, const TProcessId aDebugAgentProcessId, const TBool aPassive);
+		TInt DetachProcess(const TDesC& aTargetProcessName, const TProcessId aDebugAgentProcessId);
+		void DetachAllProcesses(const TProcessId aDebugAgentProcessId);
+		TBool CheckAttached(const TThreadId aTargetThreadId, const RMessage2& aMessage, const TBool aPassive);
+		TBool CheckAttached(const TProcessId aTargetProcessId, const RMessage2& aMessage, const TBool aPassive);
+		TBool CheckAttachedProcess(const TDesC& aTargetProcessName, const RMessage2& aMessage, const TBool aPassive) const;
+		TBool IsDebugged(const TDesC& aTargetProcessName, const TBool aPassive) const;
+		void SessionClosed();
+		void SessionOpened();
+		static CSecuritySvrServer* NewLC();
+
+		TBool OEMTokenPermitsDebugL(const TCapabilitySet aTokenCaps, const TCapabilitySet aTargetCaps);
+		TBool OEMTokenPermitsFlashAccessL(const TCapabilitySet aTokenCaps);
+
+	protected:
+		CSecuritySvrServer(CActive::TPriority aActiveObjectPriority);
+		void ConstructL();
+		
+	private:
+		~CSecuritySvrServer();
+		TBool IsActiveDebugger(const TDesC& aTargetProcessName, const TProcessId aDebugAgentProcessId) const;
+		TBool IsDebugger(const TDesC& aTargetProcessName, const TProcessId aDebugAgentProcessId) const;
+		TInt GetProcessIdFromMessage(TProcessId& aProcessId, const RMessage2& aMessage) const;
+
+	private:
+		RPointerArray<CProcessPair> iActiveDebugMap;
+		RPointerArray<CProcessPair> iPassiveDebugMap;
+		TInt iSessionCount;
+		CShutdownTimer iShutdown;
+		RRM_DebugDriver iKernelDriver;
+
+	// Declare the CSecuritySvrAsync as a friend so it can use the iKernelDriver too
+	friend class CSecuritySvrAsync;
+	friend class CSecuritySvrSession;
+	};
+
+#endif // C_SECURITY_SVR_SERVER_H