--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/cle/src/clesess.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,156 @@
+// 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:
+//
+
+#include <e32capability.h>
+
+#include "clesrv.h"
+#include "clesess.h"
+#include "cleconst.h"
+#include "ssmcommandutilprovider.h"
+
+
+/**
+ In the case of ECleSrvExecuteCmdList, the RMessage is completed by the
+ Executor call into the server's ListExecutionComplete method.
+*/
+void CCleSession::ServiceL( const RMessage2& aMessage )
+ {
+ switch( aMessage.Function() )
+ {
+
+ case ECleSrvExecuteCmdList:
+ {
+ ExecuteCommandListL( aMessage );
+ }
+ break;
+
+ case ECleSrvExecuteCmdListCancel:
+ {
+ aMessage.Complete( KErrNone );
+ ExecuteCommandListCancel();
+ }
+ break;
+
+ case EDebugMarkHeap:
+ {
+ #ifdef _DEBUG
+ __UHEAP_MARK;
+ DEBUGPRINT2(_L("CCleSession - EDebugMarkHeap: Alloc Cells: %d."), User::CountAllocCells());
+ #endif
+ aMessage.Complete(KErrNone);
+ break;
+ }
+
+ case EDebugMarkHeapEnd:
+ {
+ #ifdef _DEBUG
+ DEBUGPRINT2(_L("CCleSession - EDebugMarkHeapEnd: Alloc Cells: %d."), User::CountAllocCells());
+ __UHEAP_MARKEND;
+ #endif
+ aMessage.Complete(KErrNone);
+ break;
+ }
+
+ case EDebugSetHeapFailure:
+ {
+ #ifdef _DEBUG
+ __UHEAP_SETFAIL(RAllocator::EFailNext,aMessage.Int0());
+ DEBUGPRINT2(_L("CCleSession - EDebugSetHeapFailure: Value of Failure Rate: %d."), aMessage.Int0());
+ #endif
+ aMessage.Complete(KErrNone);
+ break;
+ }
+
+ case EDebugHeapReset:
+ {
+ #ifdef _DEBUG
+ __UHEAP_RESET;
+ DEBUGPRINT1(_L("CCleSession - EDebugHeapReset"));
+ #endif
+ aMessage.Complete(KErrNone);
+ break;
+ }
+
+ case EDebugCloseNeverUnloadLibs:
+ {
+ TInt ret = KErrNone;
+ #ifdef _DEBUG
+ ret = iCleSvr.CloseNeverUnloadLibrariesL();
+ DEBUGPRINT2(_L("CCleSession - EDebugReleaseNeverUnloadLibs: # of libraries released: %d."), ret);
+ #endif
+ aMessage.Complete(ret);
+ break;
+ }
+
+ default:
+ aMessage.Complete( KErrUnknown );
+ break;
+ }
+ }
+
+
+
+void CCleSession::ExecuteCommandListL( const RMessage2& aMessage )
+ {
+ const CSsmCommandList* srcCmdList = reinterpret_cast<const CSsmCommandList*>(aMessage.Ptr0());
+ __ASSERT_DEBUG(srcCmdList, User::Panic(KCleCmdListEmpty, KCleSrvBadCmdList));
+
+ CSsmCommandList* cmdList = CSsmCommandList::NewLC(srcCmdList, iCommandUtilProvider);
+ // The CSsmCmdListExecutor takes ownership of cmdList
+ iCleSvr.ExecuteCommandListL( cmdList, aMessage, iSessionIndex );
+ CleanupStack::Pop( cmdList );
+ }
+
+
+
+void CCleSession::ExecuteCommandListCancel()
+ {
+ iCleSvr.ExecuteCommandListCancel( iSessionIndex );
+ }
+
+
+
+CCleSession* CCleSession::NewL( CCleServer& aCleServer )
+ {
+ CCleSession* self = new(ELeave) CCleSession( aCleServer );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+
+CCleSession::CCleSession( CCleServer& aCleServer )
+: iCleSvr( aCleServer )
+ {
+ }
+
+
+
+void CCleSession::ConstructL()
+ {
+ iCleSvr.RegisterSessionL( iSessionIndex );
+ iCommandUtilProvider = CSsmCommandUtilProvider::NewL();
+ }
+
+
+
+CCleSession::~CCleSession()
+ {
+ iCleSvr.DeregisterSession( iSessionIndex );
+ delete iCommandUtilProvider;
+ }
+