コード例 #1
0
/*
================================================
idVoiceChatMgr::AddMachine
================================================
*/
int idVoiceChatMgr::AddMachine( const lobbyAddress_t& address, int lobbyType )
{

	int machineIndex = FindMachine( address, lobbyType );
	
	if( machineIndex != -1 )
	{
		// If we find an existing machine, just increase the ref
		remoteMachines[machineIndex].refCount++;
		return machineIndex;
	}
	
	//
	// We didn't find a machine, we'll need to add one
	//
	
	// First, see if there is a free machine slot to take
	int index = -1;
	
	for( int i = 0; i < remoteMachines.Num(); i++ )
	{
		if( remoteMachines[i].refCount == 0 )
		{
			index = i;
			break;
		}
	}
	
	remoteMachine_t newMachine;
	
	newMachine.lobbyType	= lobbyType;
	newMachine.address		= address;
	newMachine.refCount		= 1;
	newMachine.sendFrame	= -1;
	
	if( index == -1 )
	{
		// If we didn't find a machine slot, then add one
		index = remoteMachines.Append( newMachine );
	}
	else
	{
		// Re-use the machine slot we found
		remoteMachines[index] = newMachine;
	}
	
	return index;
}
コード例 #2
0
ファイル: VirtualBoxBridge.cpp プロジェクト: nanodario/vb-ant
bool MachineBridge::unlockMachine()
{
// 	std::cout << "[" << getName().toStdString() << "] Trying to unlock machine..." << std::endl;

	nsresult rc;
	uint32_t state;
	GET_AND_DEBUG_MACHINE_STATE(session, state, rc);

	NS_CHECK_AND_DEBUG_ERROR(session, UnlockMachine(), rc);
	
// 	if(NS_SUCCEEDED(rc) && state == SessionState::Unlocked)
// 		std::cout << "[" << getName().toStdString() << "] Machine unlocked" << std::endl;
// 	else
// 		std::cout << "[" << getName().toStdString() << "] Failed to unlock machine (rc: 0x" << std::hex << rc << std::dec << ")" << std::endl;
	
	GET_AND_DEBUG_MACHINE_STATE(session, state, rc);
	
	//HACK FIXME Renew machine object because actual object is unlockable
	NS_CHECK_AND_DEBUG_ERROR(vboxbridge->virtualBox, FindMachine(machineUUID, &machine), rc);

	session = nsnull;

	return NS_SUCCEEDED(rc);
}
RTEXITCODE handleDebugVM(HandlerArg *pArgs)
{
    RTEXITCODE rcExit = RTEXITCODE_FAILURE;

    /*
     * The first argument is the VM name or UUID.  Open a session to it.
     */
    if (pArgs->argc < 2)
        return errorNoSubcommand();
    ComPtr<IMachine> ptrMachine;
    CHECK_ERROR2I_RET(pArgs->virtualBox, FindMachine(com::Bstr(pArgs->argv[0]).raw(), ptrMachine.asOutParam()), RTEXITCODE_FAILURE);
    CHECK_ERROR2I_RET(ptrMachine, LockMachine(pArgs->session, LockType_Shared), RTEXITCODE_FAILURE);

    /*
     * Get the associated console and machine debugger.
     */
    HRESULT rc;
    ComPtr<IConsole> ptrConsole;
    CHECK_ERROR(pArgs->session, COMGETTER(Console)(ptrConsole.asOutParam()));
    if (SUCCEEDED(rc))
    {
        if (ptrConsole.isNotNull())
        {
            ComPtr<IMachineDebugger> ptrDebugger;
            CHECK_ERROR(ptrConsole, COMGETTER(Debugger)(ptrDebugger.asOutParam()));
            if (SUCCEEDED(rc))
            {
                /*
                 * String switch on the sub-command.
                 */
                const char *pszSubCmd = pArgs->argv[1];
                if (!strcmp(pszSubCmd, "dumpvmcore"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_DUMPVMCORE);
                    rcExit = handleDebugVM_DumpVMCore(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "getregisters"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_GETREGISTERS);
                    rcExit = handleDebugVM_GetRegisters(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "info"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_INFO);
                    rcExit = handleDebugVM_Info(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "injectnmi"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_INJECTNMI);
                    rcExit = handleDebugVM_InjectNMI(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "log"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_LOG);
                    rcExit = handleDebugVM_LogXXXX(pArgs, ptrDebugger, pszSubCmd);
                }
                else if (!strcmp(pszSubCmd, "logdest"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_LOGDEST);
                    rcExit = handleDebugVM_LogXXXX(pArgs, ptrDebugger, pszSubCmd);
                }
                else if (!strcmp(pszSubCmd, "logflags"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_LOGFLAGS);
                    rcExit = handleDebugVM_LogXXXX(pArgs, ptrDebugger, pszSubCmd);
                }
                else if (!strcmp(pszSubCmd, "osdetect"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_OSDETECT);
                    rcExit = handleDebugVM_OSDetect(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "osinfo"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_OSINFO);
                    rcExit = handleDebugVM_OSInfo(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "osdmesg"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_OSDMESG);
                    rcExit = handleDebugVM_OSDmesg(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "setregisters"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_SETREGISTERS);
                    rcExit = handleDebugVM_SetRegisters(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "show"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_SHOW);
                    rcExit = handleDebugVM_Show(pArgs, ptrDebugger);
                }
                else if (!strcmp(pszSubCmd, "statistics"))
                {
                    setCurrentSubcommand(HELP_SCOPE_DEBUGVM_STATISTICS);
                    rcExit = handleDebugVM_Statistics(pArgs, ptrDebugger);
                }
                else
                    errorUnknownSubcommand(pszSubCmd);
            }
        }
        else
            RTMsgError("Machine '%s' is not currently running.\n", pArgs->argv[0]);
    }

    pArgs->session->UnlockMachine();

    return rcExit;
}
コード例 #4
0
//*----------------------------------------------------------------------------
//*函数: long LPort_DataProcess(TSSmartDocEx *pDocEx,TSSmartTask *pTask,TSCmdBuffer *pBuffer)
//*功能: 处理具体的业务请求
//*参数: 无
//*返回: 见系统返回值说明
//*说明: 
//*----------------------------------------------------------------------------
long CCollectionData::LPort_Process(TSSmartDocEx *pDocEx,TSSmartTask *pTask,TSCmdBuffer *pBuffer)
{
	unsigned char ucRawData[256];
	int nTotalPortNo, nPortNo;
	
	memset(ucRawData, 0, sizeof(ucRawData));

	memcpy(ucRawData, &pBuffer->pBuffer[4], pBuffer->pBuffer[3]);
#ifdef __DEBUG_OUTPUT__
	for(int i=0; i< 256; i++)
	{
		printf("%02X ", pBuffer->pBuffer[i]);
	}
	printf("\n");
#endif

	int nTempLen = pBuffer->nCmdSize ;
	unsigned char sTempData[256];
	memcpy(sTempData, pBuffer->pBuffer, 256);

	//不等于端口总数
	if( ucRawData[2] != pDocEx->pChildDoc[pDocEx->nPortNo]->m_nPortCount )
	{
		CString strString;

		strString.Format("收集LPort数据时, 返回的端口总数与数据库端口总数不相等. 返回的端口数为:%d, 档案表为:%d! 您的LPort参数设置不正确, 请重新校对LPort的参数", 
			ucRawData[2], pDocEx->pChildDoc[0]->m_nPortCount);
		ReportLog(pDocEx, pTask, RET_SYSERROR, "实时收数", strString.GetBuffer(0) );

		if( !ResetDevice(pDocEx->pChildDoc[pDocEx->nPortNo], pBuffer) )
		{
			printf("1---实时收集LPORT数据时,返回的端口总数不等于参数内的端口总数\n");
			ReportLog(pDocEx, pTask, RET_SYSERROR, "实时收数", "收集LPort数据时, 由于返回的端口总数不相等, 复位时出错!");
		}

		return RET_SYSERROR;
	}
/*	LportState(pDocEx,pTask,pBuffer,ucRawData);
	if( !LportState(pDocEx,pTask,pBuffer,ucRawData) )
	{
		InterlockedIncrement((LONG*)&gNotFound);
		//Sleep(50);
		return RET_NG;
	}*/

	nTotalPortNo = ucRawData[2];
	nPortNo = ucRawData[3+nTotalPortNo];

	//端口数不对, 复位
	if( nPortNo > nTotalPortNo )
	{
		printf("1---实时收集LPORT数据时,返回的端口总数不等于参数内的端口总数\n");
		ResetDevice(pDocEx->pChildDoc[pDocEx->nPortNo], pBuffer);
		return RET_SYSERROR;
	}

	nPortNo = GetPos(pDocEx, nPortNo);

	pBuffer->nCmdSize = nTempLen;
	memset(pBuffer->pBuffer, 0, pBuffer->nBufferSize);
	memcpy(pBuffer->pBuffer, sTempData, 256);

	long nRet = RET_NG ;
	switch(GetMacDataType(pBuffer))
	{
		case MACDATA_TYPE_JY://为交易类型数据
		{
			int nType = MACHINE_TYPE_5301 ;
			if( nPortNo < 0 )
			{
				char szDataReg[32];
				sprintf(szDataReg, "%.2X%.2X%.2X%.2X", ucRawData[5+nTotalPortNo],ucRawData[6+nTotalPortNo],ucRawData[7+nTotalPortNo],ucRawData[8+nTotalPortNo]);
				if( nPortNo < 0 )
				{
					//是否在本服务器内
					int iPos = GetPos(pDocEx, szDataReg);
					if( iPos > 0 )
					{
						nPortNo = iPos;
					}
					else
					{
						TSSmartDoc doc;

						//档案表中有数据
						if( FindMachine(szDataReg, &doc) )
							nType = GetMachineType(&doc);
					}
				}
			}
			nType = GetMachineType(pDocEx->pChildDoc[nPortNo]);
			switch( nType) 
			{
				case MACHINE_TYPE_5301://服务器
				case MACHINE_TYPE_0201://增值机
				case MACHINE_TYPE_0226://收费机
				case MACHINE_TYPE_0228://车载机
				case MACHINE_TYPE_0230://管理机
				case MACHINE_TYPE_0232://上机上网机
				case MACHINE_TYPE_0234://淋浴管理机
				case MACHINE_TYPE_0240://售票机
				case MACHINE_TYPE_0130://身份识别机
				case MACHINE_TYPE_0140://检票机
				case MACHINE_TYPE_0248://上海理工转帐机
					nRet = Process_DealTypeData(pDocEx,pTask,pBuffer,&ucRawData[5+nTotalPortNo],nPortNo);
					break;
				case MACHINE_TYPE_0121://计时宝
					nRet = Process_IdentifyData(pDocEx,pTask,pBuffer,&ucRawData[5+nTotalPortNo],nPortNo);
					break;
				case MACHINE_TYPE_0224://挂失机
					nRet = Process_GSJData(pDocEx,pTask,pBuffer,&ucRawData[5+nTotalPortNo],nPortNo);
					break;
				default:
					break;
			}
			}
			break;
		case MACDATA_TYPE_ZZ://为扎帐数据
			nRet = Process_StateData(pDocEx,pTask,pBuffer,&ucRawData[5+nTotalPortNo],pDocEx->nPortNo);
			break;
		case MACDATA_TYPE_BZ://为补助数据
			nRet = Process_AssisData(pDocEx,pTask,pBuffer,&ucRawData[5+nTotalPortNo],nPortNo);
			break;
		default:
			break;
	}
		LportState(pDocEx,pTask,pBuffer,ucRawData);
	/*if( !LportState(pDocEx,pTask,pBuffer,ucRawData) )
	{
		InterlockedIncrement((LONG*)&gNotFound);
		Sleep(50);
		//printf("处理LPORT%.8X状态返回\n",pDocEx->pChildDoc[0]->m_nAuthID);

		return RET_NG;
	}*/
	Sleep(100);
	return nRet;
}
コード例 #5
0
ファイル: VirtualBoxBridge.cpp プロジェクト: nanodario/vb-ant
IMachine *VirtualBoxBridge::cloneVM(QString qName, bool reInitIfaces, IMachine *m)
{
	nsXPIDLString name; name.AssignWithConversion(qName.toStdString().c_str());
	nsXPIDLString osTypeId;
	nsresult rc;

	m->GetOSTypeId(getter_Copies(osTypeId));

	IMachine *new_machine;
	IProgress *progress;

	NS_CHECK_AND_DEBUG_ERROR(virtualBox, FindMachine(name, &new_machine), rc);
	if(rc != VBOX_E_OBJECT_NOT_FOUND)
	{
		std::cout << "machine: " << &new_machine << std::endl;
		return NULL;
	}

	nsXPIDLString settingsFile;
	virtualBox->ComposeMachineFilename(name, NULL, NULL, NULL, getter_Copies(settingsFile));
	std::cout << "Predicted settings file name: " << returnQStringValue(settingsFile).toStdString() << std::endl;

	QFile file(returnQStringValue(settingsFile));
	QFile file_prev(returnQStringValue(settingsFile).append("-prev"));

	if(file.exists())
	{
		if(file.remove())
			std::cerr  << "Deleted old settings file: " << file.fileName().toStdString() << std::endl;
		else
			std::cerr  << "Error while deleting old settings file: " << file.fileName().toStdString() << std::endl;
	}
	if(file_prev.exists())
	{
		if(file_prev.remove())
			std::cerr  << "Deleted old backup settings file: " << file_prev.fileName().toStdString() << std::endl;
		else
			std::cerr  << "Error while deleting old backup settings file: " << file_prev.fileName().toStdString() << std::endl;
	}
	
	QString label = QString::fromUtf8("Creazione macchina \"").append(qName).append("\"...");
	ProgressDialog p(label);
	p.ui->progressBar->setValue(0);
	p.ui->label->setText(label);
	p.open();
	
	NS_CHECK_AND_DEBUG_ERROR(virtualBox, CreateMachine(NULL, name, 0, NULL, osTypeId, NULL, &new_machine), rc);
	if(NS_FAILED(rc))
		return NULL;

	std::cout << "Machine " << qName.toStdString() << " created" << std::endl;

	if(!reInitIfaces)
	{
		uint32_t clone_options[1];
		clone_options[0] = CloneOptions::KeepAllMACs;
		NS_CHECK_AND_DEBUG_ERROR(m, CloneTo(new_machine, CloneMode::MachineState, 1, clone_options, &progress), rc);
	}
	else
		NS_CHECK_AND_DEBUG_ERROR(m, CloneTo(new_machine, CloneMode::MachineState, 0, NULL, &progress), rc);

	if(NS_FAILED(rc))
		return NULL;

	int32_t resultCode;
	PRBool progress_completed;
	do
	{
		uint32_t percent;
		progress->GetCompleted(&progress_completed);
		progress->GetPercent(&percent);
		p.ui->progressBar->setValue(percent);
		p.refresh();
		usleep(750000);
	} while(!progress_completed);

	progress->GetResultCode(&resultCode);

	if (resultCode != 0) // check success
	{
		std::cout << "Error during clone process: " << resultCode << std::endl;
		return NULL;
	}

	std::cout << "Machine " << qName.toStdString() << " cloned" << std::endl;

	p.ui->label->setText(QString::fromUtf8("Registrazione macchina \"").append(qName).append("\"..."));
	NS_CHECK_AND_DEBUG_ERROR(virtualBox, RegisterMachine(new_machine), rc);
	if(NS_FAILED(rc))
		return NULL;
	
	std::cout << "Machine " << qName.toStdString() << " registered" << std::endl;
	return new_machine;
}