diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/MobsterRPCService/CSMobster.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/MobsterRPCService/CSMobster.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,296 @@ +/* +* 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. +* Fri Sep 12 12:11:08 2003 +* System Includes +* +*/ + + + + +#include +#include +#ifdef WIN32 +#include +#else +#include +#include +#include +#endif + + +/**************************************************************************************** + * + * Local Includes + * + ***************************************************************************************/ +#include "CSvcMobster.h" +#include "CSMobster.h" + + +/**************************************************************************************** + * + * Definitions + * + ***************************************************************************************/ +#define MAXLOGNAME 64 +#ifndef WIN32 +#define _snprintf snprintf +#define ADDRESS_INTEGER s_addr +#endif + +/**************************************************************************************** + * + * Implementation + * + ***************************************************************************************/ +CSMobster::CSMobster() +{ +} + +CSMobster::~CSMobster() +{ + stopdevice( 0 ); +} + +int CSMobster::GetKey() +{ + return iKey; +} + +void CSMobster::SetKey( int aKey ) +{ + iKey = aKey; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: cstr_startdevice + * + ***************************************************************************************/ +int CSMobster::cstr_startdevice( TDeviceDesc aDeviceDesc ) +{ + int rv, err, errcode; + + // set the state info for this object + memset( &iDeviceDesc, 0, sizeof(iDeviceDesc) ); + iDeviceDesc.iDatalinkConfig = aDeviceDesc.iDatalinkConfig; + iDeviceDesc.iFilterConfig = aDeviceDesc.iFilterConfig; + iDeviceDesc.iMTID = iKey; + iDeviceDesc.iTEID = INVALID_DEVICE_ID; + iDeviceDesc.iDeviceStatus = CS_INACTIVE; + iDeviceDesc.iDeviceExitReason = DER_INVALID; + + // start a phone in another thread, note that if it fails the call still succeeds, we + // treat this as the phone starting and then ending asynchronously. The main motivation + // for this is that it allows us to get all the debug info out. + err = iPhone.StartPhone( iKey, iDeviceDesc.iDatalinkConfig, iDeviceDesc.iFilterConfig, &errcode ); + if( err != MTL_SUCCESS ) { + iDeviceDesc.iDeviceExitReason = DER_START_PHONE_FAILED; + iDeviceDesc.iDeviceExitSubReason = err; + iDeviceDesc.iDeviceExitDetail = errcode; + iDeviceDesc.iDeviceStatus = CS_CLOSED; + } else { + iDeviceDesc.iDeviceStatus = CS_ACTIVE; + } + + // we now just wait for the other thread to get the channel connection + rv = ERR_NONE; + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: dstr_removedevice + * + ***************************************************************************************/ +int CSMobster::dstr_removedevice( int aArgs, int *aDeleteInstance ) +{ + int rv; + MTStatus mtstatus; + + // if the phone was CS_ACTIVE last time then we have to check that it hasn't + // change on its own accord. + if( iDeviceDesc.iDeviceStatus == CS_ACTIVE ) { + mtstatus = iPhone.GetStatus(); + if( mtstatus == MTS_SHUTDOWN_ALL ) { + iDeviceDesc.iDeviceStatus = CS_CLOSED; + } + } + + // cannot remove the device unless it is in the closed state + if( iDeviceDesc.iDeviceStatus != CS_CLOSED ) { + *aDeleteInstance = 0; + return ERR_INVALIDSTATE; + } + + // otherwise let everything be cleaned up + *aDeleteInstance = 1; + rv = ERR_NONE; + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: getdeviceinfo + * + ***************************************************************************************/ +TDeviceDesc CSMobster::getdeviceinfo( int aArgs ) +{ + struct sockaddr_in sockaddr; + TDeviceDesc rv; + char *addr; + MTStatus mtstatus; + + // if the phone was CS_ACTIVE last time then we have to check that it hasn't + // change on its own accord. + if( iDeviceDesc.iDeviceStatus == CS_ACTIVE ) { + mtstatus = iPhone.GetStatus(); + if( mtstatus == MTS_SHUTDOWN_ALL ) { + iDeviceDesc.iDeviceStatus = CS_CLOSED; + } + } + + // copy the static values from the local version + rv = iDeviceDesc; + + // update the addresses from the MT + iPhone.GetLocalUUAddress( &sockaddr ); + sprintf( rv.iLocalAirInterfacePort, "%d", ntohs(sockaddr.sin_port) ); + iPhone.GetRemoteUUAddress( &sockaddr ); + sprintf( rv.iRemoteAirInterfacePort, "%d", ntohs(sockaddr.sin_port) ); + addr = inet_ntoa( sockaddr.sin_addr ); + _snprintf( rv.iRemoteAirInterfaceAddress, MAXADDRLEN, "%s", addr ); + + // done + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: getdevicelog + * + ***************************************************************************************/ +TVarData CSMobster::getdevicelog( int aArgs ) +{ + TVarData rv; + CLog *log; + int logsize; + + // init the rv + rv.TVarData_len = 0; + rv.TVarData_val = NULL; + + // get the log from the device + log = iPhone.GetLog(); + + // get the size of the log and allocate the space + logsize = log->CalculateLogSize(); + if( logsize == 0 ) { + return rv; + } + rv.TVarData_val = (char*)malloc( logsize ); + rv.TVarData_len = logsize; + + // copy the log into the buffer + log->PrintLogToBuffer( logsize, rv.TVarData_val ); + + // close up the file and return data + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: stopdevice + * + ***************************************************************************************/ +int CSMobster::stopdevice( int aArgs ) +{ + int rv, err; + + // no phone should be in the ps_inactive state (non-atomically) + assert( iDeviceDesc.iDeviceStatus != CS_INACTIVE ); + + // if we are in the closed state already then return invalid state + if( iDeviceDesc.iDeviceStatus == CS_CLOSED ) { + rv = ERR_INVALIDSTATE; + return rv; + } + + // if we are in the active state then stop the phone -- if stop fails then we + // return without changing the state -- this means that the phone should only + // return an error from StopPhone() if it is a transient error. + assert( iDeviceDesc.iDeviceStatus == CS_ACTIVE ); + err = iPhone.StopPhone(); + if( err != 0 ) { + rv = ERR_STOPFAILED; + return rv; + } + iDeviceDesc.iDeviceExitReason = DER_USER_REQUEST; + iDeviceDesc.iDeviceExitSubReason = 0; + iDeviceDesc.iDeviceExitDetail = 0; + iDeviceDesc.iDeviceStatus = CS_CLOSED; + + // return success + rv = ERR_NONE; + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: setremoteuuaddress + * + ***************************************************************************************/ +int CSMobster::setremoteuuaddress( TUUAddress aArgs ) +{ + int rv, err; + struct sockaddr_in sockaddr; + + // call the phone + sockaddr.sin_family = AF_INET; + sockaddr.sin_addr.ADDRESS_INTEGER = aArgs.iRemoteAddress; + sockaddr.sin_port = aArgs.iRemotePort; + err = iPhone.SetRemoteUUAddress( sockaddr ); + + // translate cphone error to mobster + assert( err == MTL_SUCCESS ); + rv = ERR_NONE; + return rv; +} + + +/**************************************************************************************** + * + * PUBLIC FUNCTION: settesocket + * + ***************************************************************************************/ +int CSMobster::settesocket( int aSock ) +{ + MTError merr; + + // pass the socket to the phone + merr = iPhone.SetTeSocket( aSock ); + + // translate the errors + return ((merr == MTL_SUCCESS) ? ERR_NONE : ERR_CHANNEL_SOCKET_ALREADY_SET); +}