diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/Uccs.v2/ServiceStubs/MobileAgent/CMobileAgentServiceStub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/Uccs.v2/ServiceStubs/MobileAgent/CMobileAgentServiceStub.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: +* System Includes +* +*/ + + + + +#include + + +/******************************************************************************* + * + * Local Includes + * + ******************************************************************************/ +#include "strncpynt.h" +#include "CMobileAgentServiceStub.h" +#include "CCMncontroller.h" +#include "../../Core/UCCS_ServiceValues.h" +#include "../../Core/UCCS_ErrorCodes.h" + + +/******************************************************************************* + * + * Definitions + * + ******************************************************************************/ +#define MAXBUFFERSIZE 2048 + + +/******************************************************************************* + * + * Macro Functions + * + ******************************************************************************/ + +/******************************************************************************* + * + * Constructor / Destructor + * + ******************************************************************************/ +CMobileAgentServiceStub::CMobileAgentServiceStub() +{ + iClientMobileAgent = new CCMncontroller(); + assert( iClientMobileAgent != NULL ); +} + + +CMobileAgentServiceStub::~CMobileAgentServiceStub() +{ + delete iClientMobileAgent; +} + + +/******************************************************************************* + * + * Startup / Shutdown + * + ******************************************************************************/ +int CMobileAgentServiceStub::StartUccsService( char *aHostName, int *aErrorCode, int *aUnused ) +{ + int client_stub_error; + + // check params + assert( aHostName != NULL ); + assert( aErrorCode != NULL ); + *aErrorCode = 0; + + //copy to class variable so that startRPCservice can use it later on + iHostName = aHostName; + + // connect to the remote service + client_stub_error = iClientMobileAgent->Connect( iHostName ); + + // return the result + return client_stub_error; +} + + +int CMobileAgentServiceStub::StopUccsService( int *aErrorCode, int *aUnused ) +{ + int client_stub_error; + + // check params + assert( aErrorCode != NULL ); + *aErrorCode = 0; + + // shutdown the stub -- force it to close + client_stub_error = iClientMobileAgent->Disconnect(); + + // done + return client_stub_error; +} + + +/******************************************************************************* + * + * IssueCommand + * + ******************************************************************************/ +CDataRecord* CMobileAgentServiceStub::IssueCommand( CDataRecord* aRequest ) +{ + int i, err, client_stub_error, method_id = -1; + char *tmp_string; + CDataRecord *request_reply; + + int rv_integer, sarg_integer; + TComponentList rv_component_list; + TOptionDesc sarg_option; + TResult rv_result; + TTunnelingModeDesc sarg_tunnel_mode; + TPolicyRequest sarg_policy_request; + TMobileNodeStatus rv_mnstatus; + TForeignAgentList rv_foreign_agent_list; + TForeignAgentInfo rv_foreign_agent_info, *tmp_foreign_agent_info; + TTimeoutRequest sarg_timeout; + TForeignAgentInfoRequest sarg_foreign_agent_info; + THomeAddressDesc sarg_home_address; + + // check params + assert( aRequest != NULL ); + + // create a standard reply + request_reply = CreateBaseReply( aRequest ); + assert( request_reply != NULL ); + + // get and check the method_id + err = request_reply->GetFieldAsInt( "METHODID", &method_id ); + if( method_id == -1 ) { + UpdateCompletionCode( request_reply, ERR_INVALID_METHOD ); + return request_reply; + } + + // now dispatch and call the appropriate method + switch( method_id ) { + + // ss_startuprpcservice + case 1: + + // make the call and update the return value + client_stub_error = iClientMobileAgent->ss_startuprpcservice( &rv_integer ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set any return information + request_reply->NewField( "RESULT", rv_integer ); + break; + + // sc_shutdownrpcservice + case 2: + + // extract the parameters + GETINTEGERARGUMENT( "FORCE", &sarg_integer, 1, 1, aRequest, request_reply ); + + // make the call and update the return value + client_stub_error = iClientMobileAgent->sc_shutdownrpcservice( sarg_integer, &rv_integer ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_integer ); + break; + + // list_devices + case 30: + + // make the call and update the return value + client_stub_error = iClientMobileAgent->list_devices( &rv_component_list ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "AGENTCOUNT", rv_component_list.TComponentList_len ); + for( i = 0; i < rv_component_list.TComponentList_len; i++ ) { + AddIteratedIntegerFieldName( "AGENTID", i, (rv_component_list.TComponentList_val)[i], request_reply ); + } + break; + + // cstr_createagent + case 31: + + //make the call and update the return value + client_stub_error = iClientMobileAgent->cstr_createagent( &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + // dstr_removeagent + case 32: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->dstr_removeagent( sarg_integer, &rv_integer ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_integer ); + break; + + // startmobileagent + case 3: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->startmobileagent( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + break; + + // stopmobileagent + case 4: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->stopmobileagent( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + break; + + // getmobileagentstatus + case 5: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + // make the call and update the return value + client_stub_error = iClientMobileAgent->getmobileagentstatus( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "MOBILE_NODE_AGENT_PROCESS_STATUS", rv_result.iData0 ); + break; + + // setsingleoption + case 6: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_option.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "TOKEN", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionToken, tmp_string, X_MAXOPTIONTOKENSIZE ); + GETSTRINGARGUMENT( "VALUE", &tmp_string, 3, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionValue, tmp_string, X_MAXOPTIONTOKENSIZE ); + sarg_option.iOptionBlockStart[0] = sarg_option.iOptionBlockEnd[0] = 0; + + // make the call and update the return value + client_stub_error = iClientMobileAgent->setsingleoption( sarg_option, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + break; + + // removesingleoption + case 33: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_option.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "TOKEN", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionToken, tmp_string, X_MAXOPTIONTOKENSIZE ); + sarg_option.iOptionValue[0] = sarg_option.iOptionBlockStart[0] = sarg_option.iOptionBlockEnd[0] = 0; + + // make the call and update the return value + client_stub_error = iClientMobileAgent->removesingleoption( sarg_option, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + break; + + // addlistoption + case 7: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_option.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "VALUE", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionValue, tmp_string, X_MAXOPTIONTOKENSIZE ); + GETSTRINGARGUMENT( "BLOCKSTART", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionBlockStart, tmp_string, X_MAXOPTIONTOKENSIZE ); + GETSTRINGARGUMENT( "BLOCKEND", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionBlockEnd, tmp_string, X_MAXOPTIONTOKENSIZE ); + sarg_option.iOptionToken[0] = 0; + + // make the call and update the return value + client_stub_error = iClientMobileAgent->addlistoption( sarg_option, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + break; + + // removelistoption + case 8: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_option.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "TOKEN", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionToken, tmp_string, X_MAXOPTIONTOKENSIZE ); + GETSTRINGARGUMENT( "BLOCKSTART", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionBlockStart, tmp_string, X_MAXOPTIONTOKENSIZE ); + GETSTRINGARGUMENT( "BLOCKEND", &tmp_string, 2, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_option.iOptionBlockEnd, tmp_string, X_MAXOPTIONTOKENSIZE ); + sarg_option.iOptionValue[0] = 0; + + // make the call and update the return value + client_stub_error = iClientMobileAgent->removelistoption( sarg_option, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + break; + + + // sethomeaddress + case 23: + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_home_address.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "HOME_ADDRESS", &tmp_string, 2, 0, aRequest, request_reply ); + sarg_home_address.iHomeAddress = inet_addr( tmp_string ); + GETINTEGERARGUMENT( "HOME_ADDRESS_PREFIX", &(sarg_home_address.iHomeAddressPrefix), 3, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "HOME_AGENT_ADDRESS", &tmp_string, 4, 0, aRequest, request_reply ); + sarg_home_address.iHomeAgentAddress = inet_addr( tmp_string ); + GETSTRINGARGUMENT( "INTERFACE", &tmp_string, 5, 0, aRequest, request_reply ); + STRNCPY_NULL_TERMINATE( sarg_home_address.iInterfaceName, tmp_string, X_MAXINTERFACENAMELEN ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->sethomeaddress( sarg_home_address, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + // getcareofaddress + case 9: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->getcareofaddress( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", IntToAddress(rv_result.iData0) ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // getstatus + case 11: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->getstatus( sarg_integer, &rv_mnstatus ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_mnstatus.iCallResult.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_mnstatus.iCallResult.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_mnstatus.iCallResult.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_mnstatus.iCallResult.iData1 ); + request_reply->NewField( "STATUS_CONNECTED", rv_mnstatus.iConnected ); + request_reply->NewField( "STATUS_TUNNEL_UP", rv_mnstatus.iTunnelUp ); + request_reply->NewField( "STATUS_LOCAL_ADDRESS", IntToAddress(rv_mnstatus.iLocalAddress) ); + request_reply->NewField( "STATUS_COLOCATED_ADDRESS", IntToAddress(rv_mnstatus.iColocatedAddress) ); + request_reply->NewField( "STATUS_FOREIGN_AGENT_ADDRESS", IntToAddress(rv_mnstatus.iForeignAgentAddress) ); + request_reply->NewField( "STATUS_HOME_AGENT_ADDRESS", IntToAddress(rv_mnstatus.iHomeAgentAddress) ); + request_reply->NewField( "STATUS_HOME_ADDRESS", IntToAddress(rv_mnstatus.iHomeAddress) ); + request_reply->NewField( "STATUS_LIFETIME_REMAINING", rv_mnstatus.iLifetimeRemaining); + request_reply->NewField( "STATUS_LAST_REGISTRATION_REPLY_CODE", rv_mnstatus.iReplyCode ); + request_reply->NewField( "STATUS_SECONDS_SINCE_LAST_REPLY", rv_mnstatus.iSecondsSinceLastReply ); + request_reply->NewField( "STATUS_SECONDS_SINCE_LAST_REQUEST", rv_mnstatus.iSecondsSinceLastRequest ); + request_reply->NewField( "STATUS_INFO_TEXT", rv_mnstatus.iInfoText ); + request_reply->NewField( "STATUS_LAST_ERROR_STRING", rv_mnstatus.iLastErrorString ); + break; + + + // connect + case 12: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_tunnel_mode.iAgentID), 1, 0, aRequest, request_reply ); + GETINTEGERARGUMENT( "TUNNELMODE", (int*)&(sarg_tunnel_mode.iTunnelMode), 2, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->connect( sarg_tunnel_mode, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // disconnect + case 13: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->disconnect( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // confirm + case 16: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->confirm( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // rescaninterfaces + case 17: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->rescaninterfaces( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // setfapolicy + case 18: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_policy_request.iAgentID), 1, 0, aRequest, request_reply ); + GETINTEGERARGUMENT( "POLICY", &(sarg_policy_request.iPolicy), 2, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->setfapolicy( sarg_policy_request, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // getfapolicy + case 19: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->getfapolicy( sarg_integer, &rv_result ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "RESULT", rv_result.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_result.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_result.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_result.iData1 ); + break; + + + // listforeignagents + case 20: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &sarg_integer, 1, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->listforeignagents( sarg_integer, &rv_foreign_agent_list ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return values + request_reply->NewField( "FOREIGNAGENTCOUNT", rv_foreign_agent_list.TForeignAgentList_len ); + for( i = 0; i < (signed)(rv_foreign_agent_list.TForeignAgentList_len); i++ ) { + tmp_foreign_agent_info = &((rv_foreign_agent_list.TForeignAgentList_val)[i]); + AddIteratedStringFieldName( "FOREIGN_AGENT_ADDRESS", i, IntToAddress(tmp_foreign_agent_info->iForeignAgentAddress), request_reply ); + AddIteratedStringFieldName( "INTERFACE_NAME", i, tmp_foreign_agent_info->iInterfaceName, request_reply ); + AddIteratedIntegerFieldName( "PRIORITY", i, tmp_foreign_agent_info->iPriority, request_reply ); + AddIteratedStringFieldName( "NAI", i, tmp_foreign_agent_info->iNAI, request_reply ); + AddIteratedIntegerFieldName( "INUSE", i, tmp_foreign_agent_info->iInUse, request_reply ); + AddIteratedIntegerFieldName( "INTERFACE_INDEX", i, tmp_foreign_agent_info->iInterfaceIndex, request_reply ); + AddIteratedIntegerFieldName( "LAST_ADVERTISEMENT", i, tmp_foreign_agent_info->iLastAdvertisement, request_reply ); + AddIteratedIntegerFieldName( "ADVERTISEMENT_EXPIRY", i, tmp_foreign_agent_info->iAdvertisementExpiry, request_reply ); + } + + // free the memory (if any was allocated) + if( rv_foreign_agent_list.TForeignAgentList_len > 0 ) { + XdrFree( (char**)&(rv_foreign_agent_list.TForeignAgentList_val), (int*)&(rv_foreign_agent_list.TForeignAgentList_len) ); + } + break; + + + // getforeignagentinfo + case 21: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_foreign_agent_info.iAgentID), 1, 0, aRequest, request_reply ); + GETSTRINGARGUMENT( "FOREIGN_AGENT_ADDRESS", &tmp_string, 2, 0, aRequest, request_reply ); + sarg_foreign_agent_info.iForeignAgentID = AddressToInt( tmp_string ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->getforeignagentinfo( sarg_foreign_agent_info, &rv_foreign_agent_info ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + + // set the return value + request_reply->NewField( "RESULT", rv_foreign_agent_info.iCallResult.iServiceResult ); + request_reply->NewField( "RESULT_SUB_COMPONENT", rv_foreign_agent_info.iCallResult.iSubComponentResult ); + request_reply->NewField( "RESULT_DATA0", rv_foreign_agent_info.iCallResult.iData0 ); + request_reply->NewField( "RESULT_DATA1", rv_foreign_agent_info.iCallResult.iData1 ); + request_reply->NewField( "FOREIGN_AGENT_ADDRESS", IntToAddress(rv_foreign_agent_info.iForeignAgentAddress) ); + request_reply->NewField( "INTERFACE_NAME", rv_foreign_agent_info.iInterfaceName ); + request_reply->NewField( "PRIORITY", rv_foreign_agent_info.iPriority ); + request_reply->NewField( "NAI", rv_foreign_agent_info.iNAI ); + request_reply->NewField( "INUSE", rv_foreign_agent_info.iInUse ); + request_reply->NewField( "INTERFACE_INDEX", rv_foreign_agent_info.iInterfaceIndex ); + request_reply->NewField( "LAST_ADVERTISEMENT", rv_foreign_agent_info.iLastAdvertisement ); + request_reply->NewField( "ADVERTISEMENT_EXPIRY", rv_foreign_agent_info.iAdvertisementExpiry ); + break; + + + // settimeout + case 22: + + // extract the parameters + GETINTEGERARGUMENT( "AGENTID", &(sarg_timeout.iAgentID), 1, 0, aRequest, request_reply ); + GETINTEGERARGUMENT( "TIMEOUT", &(sarg_timeout.iTimeout), 2, 0, aRequest, request_reply ); + + //make the call and update the return value + client_stub_error = iClientMobileAgent->settimeout( sarg_timeout ); + UpdateCompletionCode( request_reply, client_stub_error ); + if( client_stub_error != ERR_NONE ) { + break; + } + break; + + // any other method id will result in an RCC_INVALIDMETHODID result + default: + UpdateCompletionCode( request_reply, ERR_INVALID_METHOD ); + break; + } + + // everything should be handled above + return request_reply; +} + + +/******************************************************************************* + * + * GetLastRPCError() + * + ******************************************************************************/ +char *CMobileAgentServiceStub::GetLastRPCError( int *aIntError ) +{ + return iClientMobileAgent->GetLastRPCError( aIntError ); +} + + +/******************************************************************************* + * + * GetStatus() + * + ******************************************************************************/ +int CMobileAgentServiceStub::GetStatus() +{ + assert( !"GetStatus() - is not implemented" ); + return -1; +}