--- /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__