testexecmgmt/ucc/Source/UUInterface/CSvcUuinterface.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/UUInterface/CSvcUuinterface.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,706 @@
+/*
+* 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:   
+* This file was autogenerated by rpcgen, but should be modified by the developer.
+* Make sure you don't use the -component_mod flag in future or this file will be overwritten.
+* Wed Nov 05 16:06:20 2003
+* System Includes
+*
+*/
+
+
+
+
+#include <stdio.h>
+
+
+/****************************************************************************************
+ * 
+ * Local Includes
+ * 
+ ***************************************************************************************/
+#include "CSvcUuinterface.h"
+#include "uuinterface.h"
+#include "../ProcessLibrary/proclib.h"
+#include "../include/standard_unix.h"
+#include "../include/standard_service_manager.h"
+
+/****************************************************************************************
+ * 
+ * File-scope variables
+ * 
+ ***************************************************************************************/
+static CComponentManager<CSUuinterface> *iComponentManager;
+
+
+/****************************************************************************************
+ * 
+ * Implementation
+ * 
+ ***************************************************************************************/
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: GetInstanceKeyFromArgs
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::GetInstanceKeyFromArgs( int aMethod, void *aArgs )
+{
+	// Not implemented as we will never have more that one instance
+	assert( !"NOT IMPLEMENTED" );
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: SetError
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::SetError( int aMethod, void *aArgs, int aError )
+{
+	TResult* result;
+	TComponentList *rv_component_list;
+	int rv = ERR_NONE;
+	
+	// Check params
+	assert ( aArgs != NULL );
+
+	switch( aMethod ) {
+	case LIST_DEVICES:
+		SET_LIST_ERROR_CODE( TComponentList, rv_component_list );
+
+	case ST_SETDELAY:
+	case ST_SETDROPPERCENTAGE:
+	case ST_SETDUPLICATEPERCENTAGE:
+	case ST_SETBANDWIDTH:
+	case ST_SETDRD:
+	case ST_CLEARSETTINGS:
+	case ST_STOPSERVICE:
+	case ST_RESET:
+		SET_ERROR_CODE( TResult, iStandardResult, result );
+		break;
+
+	default:
+		rv = ERR_INVALID_METHOD;
+		break;
+	}
+
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: GetError
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::GetError( int aMethod, void *aArgs )
+{
+	// Not implemented as we will never have more that one instance
+	assert( !"NOT IMPLEMENTED" );
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: StartRPCService
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::StartRPCService( CComponentManager<CSUuinterface> *aComponentManager, TStartupInfo *aArg )
+{
+	assert( iComponentManager == NULL );
+	iComponentManager = aComponentManager;
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: StopRPCService
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::StopRPCService()
+{
+	iComponentManager = NULL;
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_setdelay
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_setdelay( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+
+	char commandLine[MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -u -a %s %s --delay %d.%d %d.%d/%d.%d",
+		finalSrc, 
+		finalDst, 
+		aArgs.iValueIntegerPart, 
+		aArgs.iValueFractionPart, 
+		aArgs.iSigmaIntegerPart,
+		aArgs.iSigmaFractionPart,
+		aArgs.iCorrelationIntegerPart,
+		aArgs.iCorrelationFractionPart );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_setdroppercentage
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_setdroppercentage( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+
+	char commandLine [MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	ret = CheckPercentage( aArgs.iValueIntegerPart );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -u -a  %s %s --drop %d.%d/%d.%d",
+		finalSrc, 
+		finalDst, 
+		aArgs.iValueIntegerPart, 
+		aArgs.iValueFractionPart, 
+		aArgs.iCorrelationIntegerPart,
+		aArgs.iCorrelationFractionPart );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);	
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_setduplicatepercentage
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_setduplicatepercentage( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+
+	char commandLine [MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}
+	
+	ret = CheckPercentage( aArgs.iValueIntegerPart );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -u -a %s %s --dup %d.%d/%d.%d",
+		finalSrc,
+		finalDst, 
+		aArgs.iValueIntegerPart, 
+		aArgs.iValueFractionPart, 
+		aArgs.iCorrelationIntegerPart,
+		aArgs.iCorrelationFractionPart );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);	
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+	
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_setbandwidth
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_setbandwidth( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+	
+	char commandLine [MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -u -a %s %s --bandwidth %d.%d",
+		finalSrc, 
+		finalDst, 
+		aArgs.iValueIntegerPart, 
+		aArgs.iValueFractionPart );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);	
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+
+	return rv;
+}
+
+
+/**************************************************************************************** * 
+ * PUBLIC: st_setdrd
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_setdrd( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+	
+	char commandLine [MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+    ret = CheckDRDs( aArgs.iValueIntegerPart, aArgs.iValueFractionPart,
+					aArgs.iMaximumValueIntegerPart, aArgs.iMaximumValueFractionPart, 
+					aArgs.iCongestionIntegerPart, aArgs.iCongestionFractionPart );
+
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -u -a %s %s --drd %d.%d %d.%d %d.%d",
+		finalSrc, 
+		finalDst, 
+		aArgs.iValueIntegerPart, 
+		aArgs.iValueFractionPart,
+		aArgs.iMaximumValueIntegerPart, 
+		aArgs.iMaximumValueFractionPart,
+		aArgs.iCongestionIntegerPart, 
+		aArgs.iCongestionFractionPart );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+	
+	return rv;
+}
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_clearsettings
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_clearsettings( TConfigValue aArgs )
+{
+	TResult rv;
+	int ret;
+	
+	char commandLine [MAX_COMMANDLINE];
+	char finalSrc[TOTAL_MAX_ADDRESS_LEN]; 
+	char finalDst[TOTAL_MAX_ADDRESS_LEN];
+
+	// check the values in the config values structure
+	ret = CheckConfigValue( aArgs, finalSrc, finalDst );
+	if ( ret == ERR_INVALIDARG )
+	{
+		memset( &rv, 0, sizeof(rv) );
+		rv.iStandardResult = ERR_INVALIDARG;	
+		return rv;
+	}	
+
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -r %s %s",
+		finalSrc, 
+		finalDst );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);	
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_stopservice
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_stopservice( void )
+{
+	TResult rv;
+	int ret;
+	char commandLine [MAX_COMMANDLINE];
+	
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_add.pl -d" );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+	
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_reset
+ * 
+ ***************************************************************************************/
+TResult CSvcUuinterface::st_reset( void )
+{
+	TResult rv;
+	int ret;
+	char commandLine [MAX_COMMANDLINE];
+	
+	// construct the command line
+	snprintf( commandLine, MAX_COMMANDLINE, "./config_nistnet_reset.pl" );
+
+	// execute the command and return the result
+	ret = execute(commandLine, &rv);	
+	assert ( (ret == ERR_FAILEDTOEXECUTECOMMAND) || (ret == ERR_NONE) );
+	
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PRIVATE: Executes the given command line
+ * 
+ ***************************************************************************************/
+int CSvcUuinterface::execute(const char* aCommandLine, TResult* rv)
+{
+	int errcode;
+	CAProcess process;
+	TCAProcessError perr;
+	TProcessExitReason preason;
+
+	// Check params
+	assert ( aCommandLine != NULL );
+	assert ( rv != NULL );
+
+	// init the rv
+	memset( rv, 0, sizeof(*rv) );
+	rv->iStandardResult = ERR_NONE;	
+
+	// execute the process - return any errors
+	perr = process.Execute( aCommandLine, &errcode );  
+	if( perr != CAE_NONE ) {
+		rv->iStandardResult = ERR_PROCESSEXECUTEFAILED;
+		rv->iExtendedCode = (int)perr;
+		rv->iSystemError = errcode;
+	}
+
+	// if there was an error then return now
+	if( rv->iStandardResult != ERR_NONE ) {
+		return ERR_FAILEDTOEXECUTECOMMAND ;
+	}
+
+	// save the status, exitreason, etc
+	perr = process.GetExitReason( &preason );
+	assert( perr == CAE_NONE );
+	rv->iExtendedCode = (int)preason;
+	
+	perr = process.GetExitCode( &errcode );
+	assert( perr == CAE_NONE );
+	rv->iSystemError = errcode;
+	
+	return ERR_NONE;
+}
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckConfigVals
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckConfigValue( TConfigValue aConfigValue, char* afinalSrc, char* afinalDst)
+{
+	int err;
+
+	assert ( afinalSrc != NULL );
+	assert ( afinalDst != NULL );
+
+	// construct valid NISTNET source/destination strings from the passed information
+	err = GetSrcDstStrings( aConfigValue.iSourceAddress, aConfigValue.iDestinationAddress, 
+							aConfigValue.iProtocol,
+							aConfigValue.iSrcPort, aConfigValue.iDstPort,
+							afinalSrc, afinalDst );
+	if( err != ERR_NONE) {
+		return ERR_INVALIDARG;
+	}
+
+	// do semantic checking of the values
+	err = CheckCorrelation( aConfigValue.iCorrelationIntegerPart, aConfigValue.iCorrelationFractionPart );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	err = CheckPositive( aConfigValue.iSigmaIntegerPart, aConfigValue.iSigmaFractionPart );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	err = CheckPositive( aConfigValue.iValueIntegerPart, aConfigValue.iValueFractionPart );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	err = CheckPositive( aConfigValue.iMaximumValueIntegerPart, aConfigValue.iMaximumValueFractionPart );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	err = CheckPositive( aConfigValue.iCongestionIntegerPart, aConfigValue.iCongestionFractionPart );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	return ERR_NONE;
+}		
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckPorts
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckPorts( int aSrcPort, int aDestPort )
+{
+	
+	if( !(( aSrcPort >= MIN_PORT_VAL ) && ( aSrcPort <= MAX_PORT_VAL )) ) {
+		return ERR_INVALIDARG;
+	}
+	
+	if( !(( aDestPort >= MIN_PORT_VAL ) && ( aDestPort <= MAX_PORT_VAL )) ) {
+		return ERR_INVALIDARG;
+	}
+
+	return ERR_NONE;
+}
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckProts
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckProt( int aProtocol )
+{
+	if ( aProtocol == X_UDP ) 
+		return ERR_NONE;
+	
+	if ( aProtocol == X_TCP ) 
+		return ERR_NONE;
+
+	return ERR_INVALIDARG;
+}
+
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckPositive
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckPositive( int aIntegerPart, int aFractionPart )
+{
+	if( aIntegerPart < 0 ) {
+		return ERR_INVALIDARG;
+	}
+	if( aFractionPart < 0 ) {
+		return ERR_INVALIDARG;
+	}
+	return ERR_NONE;
+}
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckCorrelation
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckCorrelation( int aIntegerPart, int aFractionPart )
+{
+	if( (aIntegerPart > -1) && (aIntegerPart < 1) ) {
+		return ERR_NONE;
+	}
+	if( (aIntegerPart == -1) && (aFractionPart == 0) ) {
+		return ERR_NONE;
+	}
+	if( (aIntegerPart == 1) && (aFractionPart == 0) ) {
+		return ERR_NONE;
+	}
+	return ERR_INVALIDARG;
+}
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckDRDs
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckDRDs( const int aDRDMinInt, const int aDRDMinFrac, 
+							    const int aDRDMaxInt, const int aDRDMaxFrac, 
+							    const int aDRDCongestInt, const int aDRDCongestFrac )
+{
+   	//Condition for drd vals is 0<=drdmin (<= drdcongest) <=drdmax
+   	if (!(aDRDMinInt>=0 && aDRDMinFrac>=0 && aDRDMaxInt >=0 && aDRDMaxFrac>=0 )) {
+		return ERR_INVALIDARG;
+   	}   
+   	if ( aDRDMinInt > aDRDMaxInt ) {
+		return ERR_INVALIDARG;
+   	}   
+   	if (aDRDCongestInt >= 0 && aDRDCongestFrac >=0) {
+   		if ( !( (aDRDMinInt < aDRDCongestInt) && (aDRDMaxInt > aDRDCongestInt) ) ) {
+			return ERR_INVALIDARG;
+   		}
+   	} else {
+		return ERR_INVALIDARG;	
+	}
+   	return ERR_NONE;
+}
+
+/*******************************************************************************
+ *
+ * INTERNAL FUNCTION: CheckPercentage
+ *
+ ******************************************************************************/
+int CSvcUuinterface::CheckPercentage( const int aPercentage )
+{
+	if (aPercentage >= 0 && aPercentage < 100)
+		return ERR_NONE;
+	return ERR_INVALIDARG;
+}
+
+/*******************************************************************************
+ *
+ * GetSrcDstStrings
+ *
+ ******************************************************************************/
+int CSvcUuinterface::GetSrcDstStrings(	char* aSrc, char* aDst, 
+						int aProtocol,
+						int aSrcPort, int aDstPort,
+						char* finalSrc, char* finalDst )
+{
+	int err, len;
+
+	// validate params
+	assert(aSrc!=NULL);
+	assert(aDst!=NULL);
+	assert(finalSrc!=NULL);
+	assert(finalDst!=NULL);
+
+	// Validate the ports
+	err = CheckPorts( aSrcPort,aDstPort );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	// Validate the prots
+	err = CheckProt( aProtocol );
+	if( err != ERR_NONE ) {
+		return ERR_INVALIDARG;
+	}
+
+	// Formulate a complete source string <ip-address> + ':' + <port> + '.' + <protocol>
+	len = strlen(aSrc) + 1 + 1 + 1 + 1 + 1;
+	assert( len < TOTAL_MAX_ADDRESS_LEN );
+	snprintf( finalSrc, TOTAL_MAX_ADDRESS_LEN, "%s:%d.%d", aSrc, aSrcPort, aProtocol );
+
+	// Formulate a complete dest string <ip-address> + ':' + <port> + '.' + <protocol>
+	len = strlen(aDst) + 1 + 1 + 1 + 1 + 1;
+	assert( len < TOTAL_MAX_ADDRESS_LEN );
+	snprintf( finalDst, TOTAL_MAX_ADDRESS_LEN, "%s:%d.%d", aDst, aDstPort, aProtocol );
+
+	// done
+	return ERR_NONE;
+}
+
+
+
+
+
+
+
+
+
+