diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/HostExecuteSimple/CSvcHostexecute.cpp --- /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 +#include + + +/**************************************************************************************** + * + * 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 *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 *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; +}