installationservices/swi/source/swis/server/installserver.h
changeset 0 ba25891c3a9e
child 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/swis/server/installserver.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 1997-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: 
+* Install Server
+*
+*/
+
+
+/**
+ @file 
+ @internalTechnology
+*/
+
+#ifndef __INSTALLSERVER_H__
+#define __INSTALLSERVER_H__
+
+#include "securitypolicy.h"
+
+namespace Swi
+{
+
+/**
+ * Timer that shuts down SWIS if no sessions are open
+ * @internalTechnology
+ * @released
+ */
+class CInstallServerShutdown : public CTimer
+	{
+private:
+	/** Server timeout shutdown delay (approximately 2 seconds) */
+	enum {KShutdownDelay=0x200000};
+public:
+	virtual ~CInstallServerShutdown();
+	/** Constructs shutdown timer */
+	inline CInstallServerShutdown();
+	/** Second-phase construction */
+	inline void ConstructL();
+	/** Starts server shutdown when the timer goes off */
+	inline void Start();
+private:
+	void RunL();
+	};
+
+/**
+ * The main Install Server (SWIS) class.
+ * @internalTechnology
+ * @released
+ */
+class CInstallServer : public CPolicyServer
+	{
+public:
+	/**
+	 * This function creates a new CInstallServer object and leaves it on 
+	 * the cleanup stack.
+	 */
+	static CInstallServer* NewLC();
+	/** Increments session count */
+	void AddSession();
+	/** 
+	 * Decrements session count and starts shutdown timer if session count is 0
+	 */
+	void DropSession();
+	virtual ~CInstallServer();
+
+	TBool IsListRemoveInProgress() const;
+	void ListRemoveInProgress(TBool aFlag);
+private:
+	CInstallServer();
+	/**
+	 * The second-phase constructor.
+	 */
+	void ConstructL();
+
+private:
+	/**
+	 * This function creates a new CInstallSession object.
+	 */
+	virtual CSession2* NewSessionL(const TVersion& aVersion, 
+		const RMessage2& aMessage) const;
+		
+	virtual TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, 
+		TInt& aAction, TSecurityInfo& aMissing);
+
+private:
+	// The number of sessions that are connected to the server. When this 
+	// number reaches 0, the server will initialize its shutdown.
+	TInt iSessionCount;
+	CInstallServerShutdown* iShutdown;
+
+	// Server Policies
+  	static const TUint iRangeCount=1;
+  	static const TInt iRanges[iRangeCount];
+  	static const TUint8 iElementsIndex[iRangeCount];
+   	static const CPolicyServer::TPolicy iPolicy;
+
+	// Flag to indicate a list/remove operation is in progress
+	TBool iListRemoveInProgress;
+	};
+
+inline TBool CInstallServer::IsListRemoveInProgress() const
+	{
+	return iListRemoveInProgress;
+	}
+
+inline void CInstallServer::ListRemoveInProgress(TBool aFlag)
+	{
+	iListRemoveInProgress = aFlag;
+	}
+
+class CSwisStateMachine;
+class CRestoreMachine;
+class CPackageRemover;
+/**
+ * Server-side session that handles SWIS tasks. For client-side class see 
+ * RInstallSession.
+ * @released
+ * @internalTechnology
+ */
+class CInstallSession : public CSession2
+	{
+public:
+	CInstallSession();
+	void CreateL();
+
+private:
+	RMessagePtr2 iReceiveMsg;
+	TInt iReceiveLen;
+	CSwisStateMachine* iMachine;
+	CPackageRemover* iRemover;
+	CRestoreMachine* iRestoreMachine;
+	RSecPolHandle iSecPolHandle;
+	
+	virtual ~CInstallSession();
+	/** Returns server reference */
+	CInstallServer& Server();
+	virtual void ServiceL(const RMessage2& aMessage);
+	virtual void ServiceError(const RMessage2& aMessage, TInt aError);
+	TBool ReceivePending() const;
+	};
+
+inline CInstallSession::CInstallSession() : CSession2() {}
+
+inline TBool CInstallSession::ReceivePending() const
+	{
+	return !iReceiveMsg.IsNull();
+	}
+
+} // namespace Swi
+
+#endif // __INSTALLSERVER_H__