--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/PC_Tools/HTIGateway/ServicePlugins/HtiApplication/HtiApplication.cpp Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,818 @@
+/*
+* Copyright (c) 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 "HtiApplicationH.h"
+#include "HtiPlugin.h"
+#include "HtiSoapHandlerInterface.h"
+#include "hticommon.h"
+
+// Application control commands
+// NOTE: Only unicode versions of commands are used.
+//const int CMD_HTI_START_PROCESS = 0x02;
+const int CMD_HTI_START_PROCESS_U = 0x03;
+//const int CMD_HTI_STATUS_PROCESS = 0x04;
+const int CMD_HTI_STATUS_PROCESS_U = 0x05;
+const int CMD_HTI_STATUS_PROCESSID = 0x06;
+const int CMD_HTI_START_PROCESS_RET_VAL_U = 0x07;
+//const int CMD_HTI_STOP_PROCESS = 0x08;
+const int CMD_HTI_STOP_PROCESS_U = 0x09;
+const int CMD_HTI_STOP_PROCESSID = 0x0A;
+const int CMD_HTI_GET_PROCESS_EXIT_CODE = 0x0B;
+//const int CMD_HTI_LIST_PROCESSES = 0x0C;
+const int CMD_HTI_LIST_PROCESSES_U = 0x0D;
+//const int CMD_HTI_START_PROCESS_RET_VAL = 0x0E;
+//const int CMD_HTI_START_APP = 0x10;
+const int CMD_HTI_START_APP_U = 0x11;
+//const int CMD_HTI_START_APP_UID = 0x12;
+const int CMD_HTI_START_APP_UID_U = 0x13;
+//const int CMD_HTI_START_DOC = 0x14;
+const int CMD_HTI_START_DOC_U = 0x15;
+//const int CMD_HTI_STATUS_APP = 0x16;
+const int CMD_HTI_STATUS_APP_U = 0x17;
+//const int CMD_HTI_STATUS_DOC = 0x18;
+const int CMD_HTI_STATUS_DOC_U = 0x19;
+const int CMD_HTI_STATUS_APP_UID = 0x1A;
+//const int CMD_HTI_STOP_APP = 0x1C;
+const int CMD_HTI_STOP_APP_U = 0x1D;
+//const int CMD_HTI_STOP_DOC = 0x1E;
+const int CMD_HTI_STOP_DOC_U = 0x1F;
+const int CMD_HTI_STOP_APP_UID = 0x20;
+//const int CMD_HTI_LIST_APPS = 0x24;
+const int CMD_HTI_LIST_APPS_U = 0x25;
+
+// Application install commands
+//const int CMD_HTI_INSTALL_SOFTWARE = 0x30;
+const int CMD_HTI_INSTALL_SOFTWARE_U = 0x31;
+const int CMD_HTI_UNINSTALL_SOFTWARE = 0x32;
+const int CMD_HTI_UNINSTALL_SOFTWARE_NAME_U = 0x33;
+//const int CMD_HTI_UNINSTALL_SOFTWARE_NAME = 0x34;
+
+// Application control response codes
+const int CMD_RESP_OK = 0xF0;
+const int CMD_RESP_NOT_FOUND = 0xF1;
+const int CMD_RESP_ALREADY_RUNNING = 0xF2;
+const int CMD_RESP_ALREADY_STOPPED = 0xF3;
+const int CMD_RESP_RUNNING = 0xF4;
+const int CMD_RESP_KILLED = 0xF5;
+const int CMD_RESP_PANIC = 0xF6;
+
+//**********************************************************************************
+// HELPER FUNCTIONS
+//
+//**********************************************************************************
+
+//**********************************************************************************
+// ResponseCode2String
+//**********************************************************************************
+char* ResponseCode2String(struct soap* soap, BYTE code)
+{
+ char tmp[50]; // 50 should be more than enough
+
+ switch(code)
+ {
+ case CMD_RESP_OK: sprintf(tmp, "ok"); break;
+ case CMD_RESP_NOT_FOUND: sprintf(tmp, "not found"); break;
+ case CMD_RESP_ALREADY_RUNNING: sprintf(tmp, "already running"); break;
+ case CMD_RESP_ALREADY_STOPPED: sprintf(tmp, "already stopped"); break;
+ case CMD_RESP_RUNNING: sprintf(tmp, "running"); break;
+ case CMD_RESP_KILLED: sprintf(tmp, "killed"); break;
+ case CMD_RESP_PANIC: sprintf(tmp, "panic"); break;
+ default: sprintf(tmp, "unknown response code 0x%02x", code);
+ }
+
+ char* text = (char*) soap_malloc(soap, strlen(tmp)+1); // +1 is for null character
+ memcpy(text, tmp, strlen(tmp)+1);
+ return text;
+}
+
+//**********************************************************************************
+// ExitTypeCode2String
+//**********************************************************************************
+char* ExitTypeCode2String(struct soap* soap, BYTE code)
+{
+ char tmp[50]; // 50 should be more than enough
+
+ switch(code)
+ {
+ case 0: sprintf(tmp, "killed"); break;
+ case 1: sprintf(tmp, "terminated"); break;
+ case 2: sprintf(tmp, "panic"); break;
+ case 3: sprintf(tmp, "running"); break;
+ default: sprintf(tmp, "unknown exit type code 0x%02x", code);
+ }
+
+ char* text = (char*) soap_malloc(soap, strlen(tmp)+1); // +1 is for null character
+ memcpy(text, tmp, strlen(tmp)+1);
+ return text;
+}
+
+//**********************************************************************************
+// SOAP FUNCTIONS
+//
+//**********************************************************************************
+//**********************************************************************************
+// ns1__startProcess()
+//**********************************************************************************
+int ns1__startProcess(struct soap* soap,
+ wchar_t *fileName,
+ wchar_t *args,
+ struct startProcessResponse &r)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, fileName, "fileName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_START_PROCESS_U );
+ msg.AddWCStringWithLengthByte( fileName );
+ msg.AddWCStringWithLengthByte( args );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_30_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ r._returnstartProcessResult.status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ if( msg.GetByte( 0 ) == CMD_RESP_OK )
+ {
+ // pid only returned if found
+ if ( msg.CheckMsgExactLen( 5 ) )
+ return SOAP_FAULT;
+ r._returnstartProcessResult.pid = msg.GetInt(1);
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__stopProcess()
+//**********************************************************************************
+int ns1__stopProcess(struct soap* soap,
+ wchar_t *matchPattern,
+ char *&result)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, matchPattern, "matchPattern" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STOP_PROCESS_U );
+ msg.AddWCStringWithLengthByte( matchPattern );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ result = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__stopProcessById()
+//**********************************************************************************
+int ns1__stopProcessById(struct soap* soap,
+ int pid,
+ char *&result)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STOP_PROCESSID );
+ msg.AddInt( pid );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ result = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getProcessStatus()
+//**********************************************************************************
+int ns1__getProcessStatus(struct soap* soap,
+ wchar_t *matchPattern,
+ char* &status)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, matchPattern, "matchPattern" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STATUS_PROCESS_U );
+ msg.AddWCStringWithLengthByte( matchPattern );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getProcessStatusById()
+//**********************************************************************************
+int ns1__getProcessStatusById(struct soap* soap,
+ int pid,
+ char* &status)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STATUS_PROCESSID );
+ msg.AddInt( pid );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__startApp()
+//**********************************************************************************
+int ns1__startApp(struct soap* soap,
+ wchar_t *appName,
+ wchar_t *docName,
+ struct startAppResponse &r)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, appName, "appName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_START_APP_U );
+ msg.AddWCStringWithLengthByte( appName );
+ msg.AddWCStringWithLengthByte( docName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ r._returnstartAppResult.status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ if( msg.GetByte( 0 ) == CMD_RESP_OK )
+ {
+ // threadId only returned if found
+ if ( msg.CheckMsgExactLen( 5 ) )
+ return SOAP_FAULT;
+ r._returnstartAppResult.threadId = msg.GetInt(1);
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__startAppByUid()
+//**********************************************************************************
+int ns1__startAppByUid(struct soap* soap,
+ int uid,
+ wchar_t *docName,
+ struct startAppByUidResponse &r)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_START_APP_UID_U );
+ msg.AddInt( uid );
+ msg.AddWCStringWithLengthByte( docName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ r._returnstartAppByUidResult.status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ if( msg.GetByte( 0 ) == CMD_RESP_OK )
+ {
+ // threadId only returned if found
+ if ( msg.CheckMsgExactLen( 5 ) )
+ return SOAP_FAULT;
+ r._returnstartAppByUidResult.threadId = msg.GetInt(1);
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__startDoc()
+//**********************************************************************************
+int ns1__startDoc(struct soap* soap,
+ wchar_t *docName,
+ struct startDocResponse &r)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, docName, "docName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_START_DOC_U );
+ msg.AddWCStringWithLengthByte( docName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ r._returnstartDocResult.status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ if( msg.GetByte( 0 ) == CMD_RESP_OK )
+ {
+ // threadId only returned if found
+ if ( msg.CheckMsgExactLen( 5 ) )
+ return SOAP_FAULT;
+ r._returnstartDocResult.threadId = msg.GetInt(1);
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getAppStatus()
+//**********************************************************************************
+int ns1__getAppStatus(struct soap* soap,
+ wchar_t *appName,
+ char* &status)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, appName, "appName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STATUS_APP_U );
+ msg.AddWCStringWithLengthByte( appName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getAppStatusByUid()
+//**********************************************************************************
+int ns1__getAppStatusByUid(struct soap* soap,
+ int uid,
+ char* &status)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STATUS_APP_UID );
+ msg.AddInt( uid );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getAppStatusByDoc()
+//**********************************************************************************
+int ns1__getAppStatusByDoc(struct soap* soap,
+ wchar_t *docName,
+ char* &status)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, docName, "docName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STATUS_DOC_U );
+ msg.AddWCStringWithLengthByte( docName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__stopApp()
+//**********************************************************************************
+int ns1__stopApp(struct soap* soap,
+ wchar_t *appName,
+ char *&result)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, appName, "appName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STOP_APP_U );
+ msg.AddWCStringWithLengthByte( appName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ result = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__stopAppByUid()
+//**********************************************************************************
+int ns1__stopAppByUid(struct soap* soap,
+ int uid,
+ char *&result)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STOP_APP_UID );
+ msg.AddInt( uid );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ result = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__stopAppByDoc()
+//**********************************************************************************
+int ns1__stopAppByDoc(struct soap* soap,
+ wchar_t *docName,
+ char *&result)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, docName, "docName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_STOP_DOC_U );
+ msg.AddWCStringWithLengthByte( docName );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) )
+ return SOAP_FAULT;
+
+ result = ResponseCode2String( soap, msg.GetByte(0) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__listProcesses()
+//**********************************************************************************
+int ns1__listProcesses(struct soap* soap,
+ wchar_t *matchPattern,
+ ArrayOfHtiProcess *HtiProcesses)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_LIST_PROCESSES_U );
+ msg.AddWCStringWithLengthByte( matchPattern );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ if(msg.GetByte(0) != CMD_RESP_OK)
+ {
+ // This sould happen only if message is corrupted somehow...
+ soap->error = soap_receiver_fault_format(soap, "HtiError",
+ "response code error (0x%x)", msg.GetByte(0));
+ return SOAP_FAULT;
+ }
+
+ // Fill & alloc soap stuff
+ HtiProcesses->__size = (int) msg.GetWord(1);
+ HtiProcesses->__ptr = soap_new_ns1__HtiProcess(soap, HtiProcesses->__size);
+
+ // Go through processes
+ int offset = 3;
+ ns1__HtiProcess *process = HtiProcesses->__ptr;
+ for(int i = 0; i < HtiProcesses->__size; i++)
+ {
+ process->processId = msg.GetInt(offset);//pid;
+ process->processStatus = ResponseCode2String(soap, msg.GetByte(offset+4));
+
+ // Get processname
+ char* tmp = (char*) msg.GetMsgBody();
+ tmp += offset+6;
+ int processNameLen = msg.GetByte(offset+5);
+ process->processName = (char*) soap_malloc(soap, processNameLen+1);
+ memcpy(process->processName, tmp, processNameLen);
+ process->processName[processNameLen] = 0x0; // add null
+
+ // for the next iteration
+ offset += 4+1+1+processNameLen;
+ process++;
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__startProcessRetVal()
+//**********************************************************************************
+int ns1__startProcessRetVal(struct soap* soap,
+ wchar_t *fileName,
+ wchar_t *args,
+ struct startProcessResponse &r)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter( soap, fileName, "fileName" ) )
+ return SOAP_FAULT;
+
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_START_PROCESS_RET_VAL_U );
+ msg.AddWCStringWithLengthByte( fileName );
+ msg.AddWCStringWithLengthByte( args );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_30_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 1 ) )
+ return SOAP_FAULT;
+
+ r._returnstartProcessResult.status = ResponseCode2String( soap, msg.GetByte(0) );
+
+ if( msg.GetByte( 0 ) == CMD_RESP_OK )
+ {
+ // pid only returned if found
+ if ( msg.CheckMsgExactLen( 5 ) )
+ return SOAP_FAULT;
+ r._returnstartProcessResult.pid = msg.GetInt(1);
+ }
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__getProcessExitCode()
+//**********************************************************************************
+int ns1__getProcessExitCode(struct soap* soap,
+ int pid,
+ struct getProcessExitCodeResponse &r)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_GET_PROCESS_EXIT_CODE );
+ msg.AddInt( pid );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 7 ) )
+ return SOAP_FAULT;
+ if ( msg.GetByte( 0 ) != CMD_RESP_OK )
+ return SOAP_FAULT;
+
+ r._returngetProcessExitCodeResult.exitType = ExitTypeCode2String( soap, msg.GetByte( 1 ) );
+ r._returngetProcessExitCodeResult.exitReason = msg.GetInt( 2 );
+ r._returngetProcessExitCodeResult.exitCategory = msg.GetSoapString( 7, (int) msg.GetByte( 6 ) );
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__installSoftware()
+//**********************************************************************************
+int ns1__installSoftware(struct soap* soap,
+ wchar_t *installPackagePath,
+ bool upgrade,
+ bool optionalItems,
+ bool ocsp,
+ bool ignoreOCSPWarnings,
+ bool installUntrusted,
+ bool allowPackageInfo,
+ bool grantUserCapabilities,
+ bool killApp,
+ bool overwrite,
+ bool download,
+ wchar_t *username,
+ wchar_t *password,
+ char *drive,
+ unsigned char language,
+ bool usePhoneLanguage,
+ bool upgradeData,
+ struct ns1__installSoftwareResponse *out)
+{
+ // Check parameters
+ if ( check_mandatory_wcstring_parameter(
+ soap, installPackagePath, "installPackagePath" ) )
+ return SOAP_FAULT;
+ if ( check_mandatory_string_parameter( soap, drive, "drive" ) )
+ return SOAP_FAULT;
+
+ // Construct HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_INSTALL_SOFTWARE_U );
+ msg.AddWCStringWithLengthByte( installPackagePath );
+ msg.AddByte( upgrade );
+ msg.AddByte( optionalItems );
+ msg.AddByte( ocsp );
+ msg.AddByte( ignoreOCSPWarnings );
+ msg.AddByte( installUntrusted );
+ msg.AddByte( allowPackageInfo );
+ msg.AddByte( grantUserCapabilities );
+ msg.AddByte( killApp );
+ msg.AddByte( overwrite );
+ msg.AddByte( download );
+ msg.AddWCStringWithLengthByteZero( username );
+ msg.AddWCStringWithLengthByteZero( password );
+ msg.AddString( drive );
+ msg.AddByte( language );
+ msg.AddByte( usePhoneLanguage );
+ msg.AddByte( upgradeData );
+
+ // Send message
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_60_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) != SOAP_OK )
+ return SOAP_FAULT;
+ if ( msg.GetByte( 0 ) != CMD_RESP_OK )
+ return SOAP_FAULT;
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__uninstallSoftware()
+//**********************************************************************************
+int ns1__uninstallSoftware(struct soap* soap,
+ int uid,
+ bool killApp,
+ bool breakDependency,
+ enum ns1__mimeType mimeType,
+ struct ns1__uninstallSoftwareResponse *out)
+{
+ // Construct HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_UNINSTALL_SOFTWARE );
+ msg.AddInt( uid );
+ msg.AddByte( killApp );
+ msg.AddByte( breakDependency );
+ msg.AddByte( mimeType );
+
+ // Send message
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_60_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) != SOAP_OK )
+ return SOAP_FAULT;
+ if ( msg.GetByte( 0 ) != CMD_RESP_OK )
+ return SOAP_FAULT;
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__uninstallSoftwareByName()
+//**********************************************************************************
+int ns1__uninstallSoftwareByName(struct soap* soap,
+ wchar_t *packageName,
+ bool killApp,
+ bool breakDependency,
+ enum ns1__mimeType mimeType,
+ struct ns1__uninstallSoftwareByNameResponse *out)
+{
+ if ( check_mandatory_wcstring_parameter(
+ soap, packageName, "packageName" ) )
+ return SOAP_FAULT;
+
+ // Construct HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_UNINSTALL_SOFTWARE_NAME_U );
+ msg.AddWCStringWithLengthByte( packageName );
+ msg.AddByte( killApp );
+ msg.AddByte( breakDependency );
+ msg.AddByte( mimeType );
+
+ // Send message
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_60_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgExactLen( 1 ) != SOAP_OK )
+ return SOAP_FAULT;
+ if ( msg.GetByte( 0 ) != CMD_RESP_OK )
+ return SOAP_FAULT;
+
+ return SOAP_OK;
+}
+
+//**********************************************************************************
+// ns1__listRunningApps()
+//**********************************************************************************
+int ns1__listRunningApps(struct soap* soap,
+ bool includeHidden,
+ bool includeSystem,
+ ArrayOfHtiRunningApp *htiApps)
+{
+ // Construct & send HTI message
+ HtiMsgHelper msg( soap, HTI_APPLICATION_UID, CMD_HTI_LIST_APPS_U );
+ msg.AddByte( includeHidden );
+ msg.AddByte( includeSystem );
+ if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) )
+ return SOAP_FAULT;
+
+ // Check response
+ if ( msg.CheckMsgMinLen( 3 ) )
+ return SOAP_FAULT;
+
+ if ( msg.GetByte(0) != CMD_RESP_OK )
+ {
+ // This sould happen only if message is corrupted somehow...
+ soap->error = soap_receiver_fault_format(soap, "HtiError",
+ "response code error (0x%x)", msg.GetByte(0));
+ return SOAP_FAULT;
+ }
+
+ // Fill & alloc soap stuff
+ htiApps->__size = (int) msg.GetWord( 1 );
+ htiApps->__ptr = soap_new_ns1__HtiRunningApp( soap, htiApps->__size );
+
+ // Go through apps
+ int offset = 3;
+ ns1__HtiRunningApp *app = htiApps->__ptr;
+ for ( int i = 0; i < htiApps->__size; i++ )
+ {
+ // App UID
+ app->uid = msg.GetInt( offset );
+ offset += 4;
+
+ // Caption
+ int captionLen = msg.GetByte( offset );
+ offset++;
+ app->caption = msg.GetSoapWCString( offset, captionLen );
+ offset += captionLen * 2;
+
+ // Document name
+ int docLen = msg.GetByte( offset );
+ offset++;
+ app->document = msg.GetSoapWCString( offset, docLen );
+ offset += docLen * 2;
+
+ // Flags
+ app->hidden = msg.GetByte( offset );
+ offset++;
+ app->system = msg.GetByte( offset );
+ offset++;
+ app->ready = msg.GetByte( offset );
+ offset++;
+ app->busy = msg.GetByte( offset );
+ offset++;
+ app->closable = msg.GetByte( offset );
+ offset++;
+
+ // Advance the array pointer for the next iteration
+ app++;
+ }
+
+ return SOAP_OK;
+}
\ No newline at end of file