testexecmgmt/ucc/GenericService/src/CCall.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/GenericService/src/CCall.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2005-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 "CCall.h"
+#include <stdio.h>
+
+/*
+ *	Constructor
+ *
+ *    Takes in a TCall structure passed in via the RPC framework
+ */
+CCall::CCall( const TCall& aCall )
+	: iCall(aCall)
+{
+}
+
+/*
+ *	Destructor
+ */
+CCall::~CCall()
+{
+}
+
+/*
+ *	CallID
+ *
+ *    Retrieve the call id
+ */
+bool CCall::CallID( int& aCallID ) const
+{
+	bool ret = false;
+	if( iCall.iCallID >= 0 )
+	{
+		aCallID = iCall.iCallID;
+		ret = true;
+	}
+	return ret;
+}
+
+/*
+ *	Params
+ *
+ *    Retrieve the number of parameters in the call
+ */
+bool CCall::Params( int& aNumParams) const
+{
+	bool ret = false;
+	if( iCall.iParams.iParams_len >= 0 )
+	{
+		aNumParams = iCall.iParams.iParams_len;
+		ret = true;
+	}
+	return ret;
+}
+
+/*
+ *	Name
+ *
+ *    Retrieve the name of a parameter at a specific index
+ */
+bool CCall::Name( int anIndex, string& aName ) const
+{
+	bool ret = false;
+	if( anIndex >= 0 && anIndex < iCall.iParams.iParams_len )
+	{
+		if( Check(iCall.iParams.iParams_val[anIndex].iName, MAXPARAMNAMELENGTH) )
+		{
+			aName.assign( iCall.iParams.iParams_val[anIndex].iName );
+			ret = true;
+		}
+	}
+	return ret;
+}
+
+/*
+ *	Value
+ *
+ *    Retrieve the value of a parameter at a specific index
+ */
+bool CCall::Value( int anIndex, string& aValue ) const
+{
+	bool ret = false;
+	if( anIndex >= 0 && anIndex < iCall.iParams.iParams_len )
+	{
+		if( Check(iCall.iParams.iParams_val[anIndex].iValue, MAXPARAMVALUELENGTH) )
+		{
+			aValue.assign( iCall.iParams.iParams_val[anIndex].iValue );
+			ret = true;
+		}
+	}
+	return ret;
+}
+
+/*
+ *	Check
+ *
+ *    Check a string value is within the defined boundaries
+ */
+bool CCall::Check( const string& aValue, const unsigned int aMaxLength ) const
+{
+	bool ret = false;
+	if( aValue.size() > 0 && aValue.size() <= aMaxLength )
+	{
+		ret = true;
+	}
+	return ret;
+}
+
+/*
+ *	Get
+ *
+ *    Find the index into the array matching the specified parameter name
+ */
+int	CCall::GetIndex(const string &aName) const
+{
+	// search through each param to find a matching (case insensitive) name & return the index
+	for (unsigned int i =0; i < iCall.iParams.iParams_len; i++)
+	{
+		if (!_stricmp(aName.c_str(), iCall.iParams.iParams_val[i].iName))
+			return i;
+	}
+	return -1;
+}
+
+/*
+ *	Get
+ *
+ *    Retrieve the value of the specified parameter
+ */
+bool CCall::Get(const string &aName, string &aValue) const
+{
+	// find a matching index & copy value
+	int index = GetIndex(aName);
+	if (index < 0)
+		return false;
+
+	aValue.assign(iCall.iParams.iParams_val[index].iValue);
+	return true;
+}
+
+bool CCall::Get(const string &aName, int &aValue) const
+{
+	// get value as string
+	string value;
+	if (!Get(aName, value))
+		return false;
+
+	// convert value to int
+	if (sscanf(value.c_str(), "0x%x", &aValue) != 1 &&
+		sscanf(value.c_str(), "%d", &aValue) != 1)
+	{
+		return false;
+	}
+
+	return true;
+}
+
+bool CCall::Get(const string &aName, bool &aValue) const
+{
+	// get value as string
+	string value;
+	if (!Get(aName, value))
+		return false;
+
+	// convert value to bool
+	if (!_stricmp(value.c_str(), "true"))
+		return true;
+	else if (!_stricmp(value.c_str(), "false"))
+		return false;
+
+	aValue = false;
+	return false;
+}
+
+/*
+ *	Dump
+ *
+ *    Dump the contents to stdout (useful debugging aid)
+ *    - Deliberately uses the public APIs
+ */
+void CCall::Dump() const
+{
+	// call id
+	int callId = 0;
+	if (CallID(callId))
+		printf("callId = %d\n", callId);
+	else
+	{
+		printf("Error! callId is indeterminate\n");
+		return;
+	}
+
+	// num params
+	int numParams = 0;
+	if (Params(numParams))
+		printf("numParams = %d\n", numParams);
+	else
+	{
+		printf("Error! numParams is indeterminate\n");
+		return;
+	}
+
+	// params
+	for (int i=0 ; i < numParams ; i++)
+	{
+		// param name
+		string paramName;
+		if (Name(i, paramName))
+			printf("  arg; \"%s\" = ", paramName.c_str());
+		else
+			printf("Error! paramName is indeterminate\n");
+
+		// param value
+		string paramValue;
+		if (Value(i, paramValue))
+			printf("\"%s\"\n", paramValue.c_str());
+		else
+			printf("\nError! paramValue is indeterminate\n");
+	}
+}
+