diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatemgr/cmd/src/ssmcommandutilprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatemgr/cmd/src/ssmcommandutilprovider.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,122 @@ +// 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 "ssmcommandutilprovider.h" +#include "ssmdebug.h" + +_LIT( KSysMonProxyDLL, "loadsysmon.dll" ); +typedef MSsmLoadSysMon* (*TFuncCreateL)( void ); + +/** +Factory method that returns pointer to the object of CSsmCommandUtilProvider. +*/ +EXPORT_C CSsmCommandUtilProvider* CSsmCommandUtilProvider::NewL() + { + CSsmCommandUtilProvider* self = new(ELeave) CSsmCommandUtilProvider(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Returns CStartSafe object +*/ +CSsmStartSafe& CSsmCommandUtilProvider::StartSafe() + { + return *iStartSafe; + } + +/** +DTOR +*/ +EXPORT_C CSsmCommandUtilProvider::~CSsmCommandUtilProvider() + { + delete iSysMonSession; + delete iStartSafe; + iSysMonProxyLib.Close(); + iFs.Close(); + } + +/** +Default CTOR +*/ +CSsmCommandUtilProvider::CSsmCommandUtilProvider() + { + } + +/** +Returns SysMonSession. +@return System monitor session. +@leave KErrNotSupported If NULL is assigned to iSysMonSession. +@leave One of the system wide error code. +@see MSsmLoadSysMon +*/ +MSsmLoadSysMon& CSsmCommandUtilProvider::SysMonSessionL() + { + if(!iSysMonSession) + { + // if iSysMonSession is NULL, then sysmon lib is not installed. + User::Leave(KErrNotSupported); + } + if(iSysMonSession) + { + //close the existing session and send the new one to avoid the memory leak. + iSysMonSession->Close(); + iSysMonSession->OpenL(); + } + + return *iSysMonSession; + } + +/** +This function connects to the RFs if Handle is NULL, and returns the connected RFs. +@return Connected RFs +@ +*/ +RFs& CSsmCommandUtilProvider::RfsL() + { + if (iFs.Handle() == NULL) + { + SSMLOGLEAVEIFERROR(iFs.Connect()); // if not already connected then connect + } + return iFs; + } + +/** + Load the dll interfacing between us and the System Monitor component, if installed. +*/ +void CSsmCommandUtilProvider::LoadMonitorProxyLibL() + { + if( KErrNone != iSysMonProxyLib.Load(KSysMonProxyDLL) ) + { + return; + } + + TFuncCreateL sysMonProxyCreateL = reinterpret_cast(iSysMonProxyLib.Lookup(1)); + + iSysMonSession = sysMonProxyCreateL(); + } + + /** +Constructs the object, Creates the startsafe object and SysMonSession. +*/ +void CSsmCommandUtilProvider::ConstructL() + { + iStartSafe = CSsmStartSafe::NewL(); // Creates CStartSafe object. + LoadMonitorProxyLibL(); + } + +