--- /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 <stdio.h>
+#include <assert.h>
+#ifdef WIN32
+#include <winsock2.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#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);
+}