testexecmgmt/ucc/Source/HostExecuteSimple/CSvcHostexecute.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/HostExecuteSimple/CSvcHostexecute.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,212 @@
+/*
+* 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.
+* Tue Oct 28 10:15:13 2003
+* System Includes
+*
+*/
+
+
+
+
+#include <stdio.h>
+#include <errno.h>
+
+
+/****************************************************************************************
+ * 
+ * Local Includes
+ * 
+ ***************************************************************************************/
+#include "CSvcHostexecute.h"
+#include "hostexecute.h"
+#include "../ProcessLibrary/proclib.h"
+#include "../include/standard_service_manager.h"
+#include "../include/strncpynt.h"
+
+
+/****************************************************************************************
+ * 
+ * File-scope variables
+ * 
+ ***************************************************************************************/
+static CComponentManager<CSHostexecute> *iComponentManager;
+
+
+/****************************************************************************************
+ * 
+ * Implementation
+ * 
+ ***************************************************************************************/
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: GetInstanceKeyFromArgs
+ * 
+ ***************************************************************************************/
+int CSvcHostexecute::GetInstanceKeyFromArgs( int aMethod, void *aArgs )
+{
+	// this method should never be called
+	assert( !"NOT IMPLEMENTED" );
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: SetError
+ * 
+ ***************************************************************************************/
+int CSvcHostexecute::SetError( int aMethod, void *aArgs, int aError )
+{
+	int rv = ERR_NONE;
+	TExecuteResult *rv_execute_result;
+	TComponentList *rv_component_list;
+
+	switch( aMethod ) {
+
+	// TComponentList
+	case LIST_DEVICES:
+		SET_LIST_ERROR_CODE( TComponentList, rv_component_list );
+		break;
+
+	// TExecuteResult
+	case ST_EXECUTECOMMAND:
+		rv_execute_result = (TExecuteResult*)aArgs;
+		if( (rv_execute_result->iStandardOut).TVarData_val != NULL ) {
+			free( (rv_execute_result->iStandardOut).TVarData_val );
+			(rv_execute_result->iStandardOut).TVarData_val = NULL;
+			(rv_execute_result->iStandardOut).TVarData_len = 0;
+		}
+		if( (rv_execute_result->iStandardError).TVarData_val != NULL ) {
+			free( (rv_execute_result->iStandardError).TVarData_val );
+			(rv_execute_result->iStandardError).TVarData_val = NULL;
+			(rv_execute_result->iStandardError).TVarData_len = 0;
+		}
+		memset( rv_execute_result, 0, sizeof(TExecuteResult) );
+		rv_execute_result->iResult = aError;
+		break;
+
+	// Error
+	default:
+		rv = ERR_INVALID_METHOD;
+		break;
+	}
+	return rv;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: GetError
+ * 
+ ***************************************************************************************/
+int CSvcHostexecute::GetError( int aMethod, void *aArgs )
+{
+	// this method should never be called
+	assert( !"NOT IMPLEMENTED" );
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: StartRPCService
+ * 
+ ***************************************************************************************/
+int CSvcHostexecute::StartRPCService( CComponentManager<CSHostexecute> *aComponentManager, TStartupInfo *aArg )
+{
+	assert( iComponentManager == NULL );
+	iComponentManager = aComponentManager;
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: StopRPCService
+ * 
+ ***************************************************************************************/
+int CSvcHostexecute::StopRPCService()
+{
+	iComponentManager = NULL;
+	return ERR_NONE;
+}
+
+
+/****************************************************************************************
+ * 
+ * PUBLIC: st_executecommand
+ * 
+ ***************************************************************************************/
+TExecuteResult CSvcHostexecute::st_executecommand( TExecuteRequest aArgs )
+{
+	TExecuteResult rv;
+	int errcode;
+	CAProcess process;
+	TCAProcessError perr;
+	TProcessExitReason preason;
+	string *standardout = NULL, *standarderror = NULL;
+
+	// init the rv
+	memset( &rv, 0, sizeof(rv) );
+	rv.iResult = ERR_NONE;
+
+	// get the buffers
+	if( aArgs.iRecordStandardOut != 0 ) {
+		standardout = new string();
+		assert( standardout != NULL );
+	} 
+	if( aArgs.iRecordStandartError != 0 ) {
+		standarderror = new string();
+		assert( standarderror != NULL );
+	}
+
+	// execute the process - return any errors
+	perr = process.Execute( aArgs.iCommandLine, &errcode, aArgs.iTimeout, standardout, standarderror );
+	if( perr != CAE_NONE ) {
+		rv.iResult = ERR_EXECUTE_PROCESS_ERROR;
+		rv.iErrorCode = (int)perr;
+		rv.iErrorDetail = errno;
+	}
+
+	// save any output
+	if( (standardout != NULL) && (standardout->length() > 0) ) {
+		rv.iStandardOut.TVarData_val = (char*)malloc( standardout->length() + 1 );
+		rv.iStandardOut.TVarData_len = standardout->length() + 1;
+		STRNCPY_NULL_TERMINATE( rv.iStandardOut.TVarData_val, standardout->c_str(), standardout->length() + 1 );
+	}
+	if( (standarderror != NULL) && (standarderror->length() > 0) ) {
+		rv.iStandardError.TVarData_val = (char*)malloc( standarderror->length() + 1 );
+		rv.iStandardError.TVarData_len = standarderror->length() + 1;
+		STRNCPY_NULL_TERMINATE( rv.iStandardError.TVarData_val, standarderror->c_str(), standarderror->length() + 1 );
+	}
+
+	// if there was an error then return now
+	if( rv.iResult != ERR_NONE ) {
+		return rv;
+	}
+
+	// save the status, exitreason, etc
+	perr = process.GetExitReason( &preason );
+	assert( perr == CAE_NONE );
+	rv.iProcessExitReason = (int)preason;
+	perr = process.GetExitCode( &errcode );
+	assert( perr == CAE_NONE );
+	rv.iProcessExitDetail = errcode;
+	return rv;
+}