diff -r 7259cf1302ad -r 169364e7e4b4 hti/PC_Tools/HTIGateway/ServicePlugins/HtiApplication/HtiApplication.cpp --- a/hti/PC_Tools/HTIGateway/ServicePlugins/HtiApplication/HtiApplication.cpp Tue Jul 06 16:05:13 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,818 +0,0 @@ -/* -* 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