sysstatemgmt/systemstatemgr/cmd/src/ssmcustomcommandinfo.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/cmd/src/ssmcustomcommandinfo.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,184 @@
+// 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 <e32base.h>
+#include <s32strm.h>
+#include <ssm/ssmcustomcommandinfo.h>
+
+#include "ssmdebug.h"
+
+/** 
+Constructor
+*/
+EXPORT_C CSsmCustomCommandInfo::CSsmCustomCommandInfo()
+	: iOrdinal(1)
+	{
+	}
+
+/** 
+Destructor
+*/
+EXPORT_C CSsmCustomCommandInfo::~CSsmCustomCommandInfo()
+	{
+	delete iParams;
+	}
+
+
+/** 
+Set command info contents
+
+@param aFileName	A Custom Command DLL file name
+@param aOrdinal		The ordinal to call to return a MSsmCustomCommand object
+@param aUnloading	Whether to unload the Custom Command DLL immediately when finished or not
+@param aRetries		The number of times to try calling the Custom Command if unsuccessful
+@param aParams		Optional user data to be passed to the Custom Command
+@leave				One of the system-wide error codes.
+*/
+EXPORT_C void CSsmCustomCommandInfo::SetL(const TDesC& aFileName, TInt32 aOrdinal, TCmdCustomCommandLibUnloading aUnloading, TInt16 aRetries, const TDesC8& aParams)
+	{
+	iFileName = aFileName;
+	iOrdinal = aOrdinal;
+	iUnloading = aUnloading;
+	iRetries = aRetries;
+
+	delete iParams;
+	iParams = NULL;
+	if (aParams.Length())
+		{
+		iParams = aParams.AllocL();
+		}
+	}
+
+/** 
+Clear command info contents and reset to default values
+*/
+EXPORT_C void CSsmCustomCommandInfo::Clear()
+	{
+	iFileName = KNullDesC;
+	iOrdinal = 1;
+	iUnloading = EUnloadOnCommandCompletion;
+	iRetries = 0;
+
+	delete iParams;
+	iParams = NULL;
+	}
+
+/** 
+@return The DLL name, or KNullDesC if empty
+*/
+EXPORT_C const TFileName& CSsmCustomCommandInfo::FileName() const
+	{
+	return iFileName;
+	}
+
+/** 
+@return The ordinal called to obtain the MSsmCustomCommand object
+*/
+EXPORT_C TInt32 CSsmCustomCommandInfo::Ordinal() const
+	{
+	return iOrdinal;
+	}
+
+/** 
+@return DLL unloading rule whether to unload the custom command dll after the command has completed or not at all
+@see TCmdCustomCommandLibUnloading
+*/
+EXPORT_C TCmdCustomCommandLibUnloading CSsmCustomCommandInfo::Unloading() const
+	{
+	return iUnloading;
+	}
+
+/** 
+@return Number of retries on failure
+*/
+EXPORT_C TInt16 CSsmCustomCommandInfo::Retries() const
+	{
+	return iRetries;
+	}
+
+/** 
+@return Params or KNullDesC8 if empty
+*/
+EXPORT_C const TPtrC8 CSsmCustomCommandInfo::Params() const
+	{
+	TPtrC8 params;
+	if (iParams)
+		{
+		params.Set(*iParams);
+		}
+	else
+		{
+		params.Set(KNullDesC8);
+		}
+	return params;
+	}
+
+/** 
+Overloaded = operator
+@return A Custom Command object containing the new values
+*/
+EXPORT_C CSsmCustomCommandInfo& CSsmCustomCommandInfo::operator=(const CSsmCustomCommandInfo& aInfo)
+	{
+	// protect against self assignment
+	if( &aInfo != this)
+		{
+		// can't do anything with this if it leaves
+		TRAP_IGNORE(SetL(aInfo.FileName(), aInfo.Ordinal(), aInfo.Unloading(), aInfo.Retries(), aInfo.Params()));
+		}
+
+	return (*this);
+	}
+
+/**
+Configures the CSsmCustomCommandInfo object using data contained in a ReadStream
+@param aReadStream 	A read stream containing BIC data
+@leave				One of the system-wide error codes.
+*/
+EXPORT_C void CSsmCustomCommandInfo::InternalizeL(RReadStream& aReadStream)
+	{
+	aReadStream >> iFileName;
+	iOrdinal = aReadStream.ReadInt32L();
+	iUnloading = static_cast<TCmdCustomCommandLibUnloading>(aReadStream.ReadUint8L());
+	iRetries = aReadStream.ReadInt16L();
+
+	HBufC8* paramptr = HBufC8::NewLC(aReadStream, KMaxDLLParams);
+	delete iParams;
+	iParams = NULL;
+	if (paramptr->Length())
+		{
+		paramptr->ReAllocL(paramptr->Length());
+		iParams = paramptr;
+		CleanupStack::Pop();
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy();
+		}
+	}
+
+/**
+Externalises the CSsmCustomCommandInfo object
+@param aWriteStream A write stream to write the object data to
+@leave				One of the system-wide error codes.
+*/
+EXPORT_C void CSsmCustomCommandInfo::ExternalizeL(RWriteStream& aWriteStream) const
+	{
+	aWriteStream << iFileName;
+  	aWriteStream.WriteInt32L(Ordinal());
+  	aWriteStream.WriteUint8L(Unloading());
+  	aWriteStream.WriteInt16L(Retries());
+	aWriteStream << Params();
+	}
+