diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/RemoteInterface/src/CRemoteInterface.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/RemoteInterface/src/CRemoteInterface.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,203 @@ +/* +* 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: +* +*/ + + + +#include + +#include "CRemoteInterface.h" +#include "CTCPTransport.h" + +// Constant values +const char KSpace[] = { " " }; +const char KQuote[] = { "\"" }; +const char KEquals[] = { "=" }; +const char KRunCmd[] = { "runcmd" }; +const char KServiceName[] = { "svcname" }; +const char KCall[] = { "call" }; +const char KMethodID[] = { "methodid" }; +const char KStartServiceID[] = { "1" }; +const char KStopServiceID[] = { "2" }; +const char KDefaultMethodID[] = { "10" }; + +CRemoteInterface::CRemoteInterface( const string &aDestination ) + : iTransport(NULL), iIsSetup(false), iDestination(aDestination), iConnected(false) + { + iRandomSeed = rand(); + } + +CRemoteInterface::~CRemoteInterface() + { + if( iTransport ) + { + iTransport->Disconnect(); + delete iTransport; + iTransport = NULL; + iConnected = false; + } + } + +void CRemoteInterface::SetupStartService( const string &aServiceName ) + { + // Setup the default start to the command line + DefaultSetupCall( aServiceName, KStartServiceID ); + + // The command line is now setup + iIsSetup = true; + } + +void CRemoteInterface::SetupStopService( const string &aServiceName ) + { + // Setup the default start to the command line + DefaultSetupCall( aServiceName, KStopServiceID ); + + // The command line is now setup + iIsSetup = true; + } + +void CRemoteInterface::SetupCall( const string &aServiceName, const string &aCall ) + { + // Setup the default start to the command line + DefaultSetupCall( aServiceName, KDefaultMethodID ); + + // Add the call + iCommandLine += KCall; + iCommandLine += KEquals; + iCommandLine += KQuote; + iCommandLine += aCall; + iCommandLine += KQuote; + iCommandLine += KSpace; + + // The command line is now setup + iIsSetup = true; + } + +void CRemoteInterface::AddParam( const string &aName, const string &aValue ) + { + // If the command line is setup append the next parameter + if( iIsSetup ) + { + iCommandLine += aName; + iCommandLine += KEquals; + iCommandLine += KQuote; + iCommandLine += aValue; + iCommandLine += KQuote; + iCommandLine += KSpace; + } + } + +int CRemoteInterface::Send() + { + int ret = 0; + + if( !iTransport ) + { + iTransport = new CTCPTransport(); + } + + // If the command line is setup then continue with the send + if( iIsSetup && iTransport) + { + if( !iConnected ) + { + // Connect to the UCC + ret = iTransport->Connect( iDestination ); + iConnected = true; + } + if( !ret ) + { + if ( iCommandLine.size() > MAXCOMMANDLINELEN ) + { + ret = TRI_COMMANDLINETOOLONG; + } + else + { + TRunCommandRequest* run_req = new TRunCommandRequest(); + if( run_req != NULL ) + { + memset( run_req->iCommandLine, 0x00, sizeof(run_req->iCommandLine) ); + memcpy( run_req->iCommandLine, iCommandLine.c_str(), iCommandLine.size()); + + TPHeader header; + header.iCmdID = CMD_REQ_RUNCOMMAND; + header.iDataLen = sizeof(*run_req); + header.iUid = (int)iRand_UID; + + // Send the header first + ret = iTransport->RequestSend( (char*)&header, sizeof(header) ); + ret?ret=TRI_ERRSENDING:ret=0; + if( !ret ) + { + // Now send the rest of the data + ret = iTransport->RequestSend( (char*)run_req, sizeof(*run_req) ); + ret?ret=TRI_ERRSENDING:ret=0; + } + + // Cleanup + delete run_req; + } + else + { + ret = TRI_ERRINTIALISING; + } + } + } + if( !ret ) + { + // Retrieve the header + TPHeader header; + ret = iTransport->RequestReceive( (char*)&header, sizeof(header) ); + + if( !ret ) + { + TRunCommandReply run_rep; + // Retrieve the result + ret = iTransport->RequestReceive( (char*)&run_rep, sizeof(run_rep) ); + ret?ret=TRI_ERRRECV:ret=run_rep.iResult; + } + } + } + + return ret; + } + +void CRemoteInterface::DefaultSetupCall( const string &aServiceName, const string &aMethodID ) + { + // New call started so clear out the command line buffer + iCommandLine.erase(); + + // Add the runcmd + iCommandLine += KRunCmd; + iCommandLine += KSpace; + + // Add the service name + iCommandLine += KServiceName; + iCommandLine += KEquals; + iCommandLine += KQuote; + iCommandLine += aServiceName; + iCommandLine += KQuote; + iCommandLine += KSpace; + + // Append the methodid to the command line + iCommandLine += KSpace; + iCommandLine += KMethodID; + iCommandLine += KEquals; + iCommandLine += KQuote; + iCommandLine += aMethodID; + iCommandLine += KQuote; + iCommandLine += KSpace; + }