--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/ssm/inc/ssmswppolicysrv.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,124 @@
+// Copyright (c) 2008-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 SSMSWPPOLICYSRV_H
+#define SSMSWPPOLICYSRV_H
+
+#include <e32base.h>
+#include <s32mem.h>
+#include <ssm/ssmswp.h>
+#include <ssm/ssmswppolicy.h>
+
+_LIT(KSsmSwpPolicySrvName, "!SsmSwpPolicySrv");
+
+class CSsmSwpPolicyStepCompletion;
+
+/**
+ The SsmSwpPolicy server
+
+@internalComponent
+@released
+*/
+NONSHARABLE_CLASS(CSsmSwpPolicyServer) : public CPolicyServer
+ {
+public:
+ static CSsmSwpPolicyServer* NewLC(const TDesC& aServerName);
+ IMPORT_C static TInt StartSsmSwpPolicySrv(const TDesC& aServerName);
+ ~CSsmSwpPolicyServer();
+
+ void RegisterSessionL( TInt& aSessionIndex);
+ void DeregisterSession( const TInt& aSessionIndex );
+
+ void CallSetDllHandleAndInitializeL(const RMessage2& aMessage, TInt aSessionIndex);
+ void CallInitializeCancel(TInt aSessionIndex);
+ void CallPrepareCommandListL(const RMessage2& aMessage, TInt aSessionIndex);
+ void CallPrepareCommandListCancel(TInt aSessionIndex);
+ void CallCommandListL(const RMessage2& aMessage, TInt aSessionIndex);
+ void CallHandleCleReturnValueL(const RMessage2& aMessage, TInt aSessionIndex );
+ void CallHandleCleReturnValueCancel(TInt aSessionIndex );
+
+ // From CServer2
+ IMPORT_C CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+
+ void DeleteSSwpPolicySessionInfo(TInt aSessionIndex);
+
+// This active object is used to call different steps involved in swp transition (viz Initialize/Prepare.. command list)
+// Since this server is used by CSsmSwpPolicyFrame, all the relevent checking like whether initalize is called before
+// prepare command list/ preparecommandlist is called before CallCommandList is checked, so no additional
+// checking is done while calling the swppolicy methods in this class
+NONSHARABLE_CLASS(CSsmSwpPolicyStepCompletion) : public CActive
+ {
+public:
+ enum TStep
+ {
+ EIdle = 0,
+ EInitialize,
+ EPrepareCommandList,
+ ECallCommandList,
+ EHandleCleReturnValue,
+ };
+public:
+ static CSsmSwpPolicyStepCompletion* NewL(MSsmSwpPolicy* aSwpPolicy, CSsmSwpPolicyServer& aServer, const TInt aSessionIndex);
+ ~CSsmSwpPolicyStepCompletion();
+
+ void StartInitialize(const RMessagePtr2& aMessagePtr2);
+ void StartPrepareCommandList(const TSsmSwp& aSwp, const RMessagePtr2& aMessagePtr2);
+ void StartHandleCleReturnValue(const TSsmSwp& aSwp, TInt aError, TInt aSeverity, const RMessagePtr2& aMessagePtr2);
+
+ TStep CurrentStep() const;
+ void SetCurrentStep(TStep aStep);
+
+protected:
+ void RunL();
+ void DoCancel();
+ TInt RunError();
+
+private:
+ CSsmSwpPolicyStepCompletion(MSsmSwpPolicy* aSwpPolicy, CSsmSwpPolicyServer& aServer, const TInt aSessionIndex);
+private:
+ TStep iStep;
+ RMessagePtr2 iMessagePtr; // doesn't own
+ MSsmSwpPolicy* iSwpPolicy; // doesn't own
+ TInt iSessionIndex; // doesn't own, storing it to delete the session info once the swp request is completed
+ CSsmSwpPolicyServer& iServer; // doesn't own
+ }; //CSsmSwpPolicyStepCompletion
+
+struct SSwpPolicySessionInfo
+ {
+ TBool iInUse;
+ MSsmSwpPolicy* iSwpPolicy;
+ CSsmSwpPolicyStepCompletion* iSsmSwpPolicyStepCompletion;
+ }; // SSwpPolicySessionInfo
+
+private:
+ void ConstructL(const TDesC& aServerName);
+ CSsmSwpPolicyServer();
+ static TInt SsmSwpPolicySrvThreadFn(TAny* aAny);
+
+private:
+ RArray<SSwpPolicySessionInfo> iSessionInfoArray;
+ };
+
+inline CSsmSwpPolicyServer::CSsmSwpPolicyStepCompletion::TStep CSsmSwpPolicyServer::CSsmSwpPolicyStepCompletion::CurrentStep() const
+ {
+ return iStep;
+ }
+
+inline void CSsmSwpPolicyServer::CSsmSwpPolicyStepCompletion::SetCurrentStep(CSsmSwpPolicyServer::CSsmSwpPolicyStepCompletion::TStep aStep)
+ {
+ iStep = aStep;
+ }
+
+#endif //SSMSWPPOLICYSRV_H