--- /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");
+ }
+}
+