diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/GenericService/src/GenericStub_svc_stub_impl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/GenericService/src/GenericStub_svc_stub_impl.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,318 @@ +/* +* 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 IS AUTOGENERATED. Do not modify the contents of this file directly +* as changes will be lost +* Tue Nov 16 15:19:57 2004 +* System Includes +* +*/ + + + +#include + + +/**************************************************************************************** + * + * Local Includes + * + ***************************************************************************************/ +#include "CSvcGenericstub.h" +#include "CSGenericstub.h" +#include "CComponentManager.h" + + +/**************************************************************************************** + * + * Static Variables + * + ***************************************************************************************/ +static CComponentManager *iComponentManager; +static CSGenericstub *iGenericStub; + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: ss_startuprpcservice + * + ***************************************************************************************/ +int *ss_startuprpcservice_1( TStartupInfo *aArgs, CLIENT * /*aDutout*/ ) +{ + static int rv; + + // if the service is already started then return an error + if( iComponentManager != NULL ) { + rv = ERR_SERVICE_ALREADY_STARTED; + return &rv; + } + + // create the component manager + iComponentManager = new CComponentManager( INFO_MAXIMUM_OBJECTS ); + if( iComponentManager == NULL ) { + rv = ERR_FAILED_TO_CREATE_COMPONENT_MANAGER; + return &rv; + } + + iGenericStub = new CSGenericstub(); + if( iGenericStub != NULL ) + { + if( !iGenericStub->Setup() ) + { + rv = ERR_FAILED_TO_CONNECT; + return &rv; + } + } + else + { + rv = ERR_FAILED_TO_CONNECT; + return &rv; + } + + // call the custom service manager + rv = CSvcGenericstub::StartRPCService( iComponentManager, aArgs ); + if( rv != ERR_NONE ) { + delete iComponentManager; + iComponentManager = NULL; + return &rv; + } + + // success + rv = ERR_NONE; + return &rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: sc_shutdownrpcservice + * + ***************************************************************************************/ +int *sc_shutdownrpcservice_1( int *aArgs, CLIENT * /*aDutout*/ ) +{ + static int rv; + int instance_count; + int err; + + // check that the service is started + if( iComponentManager == NULL ) { + rv = ERR_SERVICE_NOT_RUNNING; + return &rv; + } + + // if there are active sessions and the force flag isn't set then return an error + instance_count = iComponentManager->GetInstanceCount(); + if( (instance_count > 0) && (*aArgs == 0) ) { + rv = ERR_ACTIVE_USER_SESSIONS; + return &rv; + }; + + // if the force flag IS set then reset all active connections + instance_count = iComponentManager->GetInstanceCount(); + if( instance_count > 0 ) { + err = iComponentManager->DeleteAllInstances(); + if( err != 0 ) { + rv = ERR_FAILED_TO_REMOVE_ACTIVE_SESSIONS; + return &rv; + } + } + + // call the custom service manager + rv = CSvcGenericstub::StopRPCService(); + if( rv != ERR_NONE ) { + return &rv; + } + + // delete the component manager + delete iComponentManager; + iComponentManager = NULL; + + delete iGenericStub; + iGenericStub = NULL; + + // success + rv = ERR_NONE; + return &rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: list_connections + * + ***************************************************************************************/ +TComponentList *list_connections_1( void * /*aArgs*/, CLIENT * /*aDutout*/ ) +{ + static TComponentList rv; + int i, valid_count, component_instance_count; + + //free any allocated memory + if( rv.TComponentList_val != NULL ) { + free( rv.TComponentList_val ); + rv.TComponentList_val = NULL; + rv.TComponentList_len = 0; + } + + // check that the service is started + if( iComponentManager == NULL ) { + CSvcGenericstub::SetError( LIST_CONNECTIONS, (void*)&rv, ERR_SERVICE_NOT_RUNNING ); + return &rv; + } + + // set the return value to generic error + CSvcGenericstub::SetError( LIST_CONNECTIONS, (void*)&rv, ERR_FAILED_TO_RETRIEVE_KEY ); + + // get the number of active component instances + component_instance_count = iComponentManager->GetInstanceCount(); + + // if there are one or more instances then allocate the memory + if( component_instance_count > 0 ) { + rv.TComponentList_val = (int*)malloc( sizeof(int) * component_instance_count ); + assert( rv.TComponentList_val != NULL ); + rv.TComponentList_len = component_instance_count; + } + + // store all the currently active IDs in the list + for( i = 0, valid_count = 0; i < INFO_MAXIMUM_OBJECTS; i++ ) { + if( iComponentManager->IsValidKey(i) != 0 ) { + assert( valid_count < component_instance_count ); + (rv.TComponentList_val)[valid_count++] = i; + } + } + + // ok return everything + return &rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: cstr_startprocess + * + ***************************************************************************************/ +int *cstr_startprocess_1( char **aArgs, CLIENT * /*aDutout*/ ) +{ + static int rv; + int result; + int internal_err; + int instance_key; + CSGenericstub *session; + + // check that the service is started + if( iComponentManager == NULL ) { + rv = ERR_SERVICE_NOT_RUNNING; + return &rv; + } + + // create a new component instance + instance_key = iComponentManager->CreateInstance(); + if( instance_key < 0 ) { + rv = instance_key; + return &rv; + } + + // get the instance + session = iComponentManager->GetInstance( instance_key ); + assert( session != NULL ); + + // call the corresponding method on the instance + rv = session->cstr_startprocess( *aArgs ); + result = rv; + + // if the method fails then we cleanup the instance -- otherwise we set the instance key + // as the return value + if( result != ERR_NONE ) { + internal_err = iComponentManager->DeleteInstance( instance_key ); + assert( internal_err == 0 ); + } else { + rv = instance_key; + } + + // done + return &rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: dstr_removeprocess + * + ***************************************************************************************/ +int *dstr_removeprocess_1( int *aArgs, CLIENT * /*aDutout*/ ) +{ + static int rv; + int result; + int internal_err; + int instance_key; + int should_delete = 1; + CSGenericstub *session; + + // check that the service is started + if( iComponentManager == NULL ) { + rv = ERR_SERVICE_NOT_RUNNING; + return &rv; + } + + // get the key for the instance from the args + instance_key = CSvcGenericstub::GetInstanceKeyFromArgs( DSTR_REMOVEPROCESS, (void*)aArgs ); + if( instance_key < 0 ) { + rv = instance_key; + return &rv; + } + // make sure the key is valid + if( iComponentManager->IsValidKey(instance_key) == 0 ) { + rv = ERR_INSTANCE_DOES_NOT_EXIST; + return &rv; + } + + // get the instance + session = iComponentManager->GetInstance( instance_key ); + assert( session != NULL ); + + // call the corresponding method on the instance + rv = session->dstr_removeprocess( *aArgs, &should_delete ); + + result = rv; + + // it is illegal for the method to succeed but not delete the instance + assert( (result != ERR_NONE) || (should_delete == 1) ); + + // delete the instance if requested + if( should_delete != 0 ) { + internal_err = iComponentManager->DeleteInstance( instance_key ); + assert( internal_err == ERR_NONE ); + } + + // done + return &rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: run_command + * + ***************************************************************************************/ +int *run_command_1( TCall *aArgs, CLIENT *aDutout ) +{ + static int rv; + // check that the service is started + if( iComponentManager == NULL ) { + rv = ERR_SERVICE_NOT_RUNNING; + return &rv; + } + // call the corresponding method on the instance + rv = iGenericStub->run_command(*aArgs); + return &rv; +}