/*
================
rvDebuggerServer::ProcessMessages

Process all incoming network messages from the debugger client
================
*/
bool rvDebuggerServer::ProcessMessages ( void )
{
	netadr_t adrFrom;
	msg_t	 msg;
	byte	 buffer[MAX_MSGLEN];

	MSG_Init( &msg, buffer, sizeof( buffer ) );

	// Check for pending udp packets on the debugger port
	while ( mPort.GetPacket ( adrFrom, msg.data, msg.cursize, msg.maxsize ) )
	{
		unsigned short command;

		// Only accept packets from the debugger server for security reasons
		if ( !Sys_CompareNetAdrBase ( adrFrom, mClientAdr ) )
		{
			continue;
		}
			
		command = (unsigned short) MSG_ReadShort ( &msg );
		
		switch ( command )
		{
			case DBMSG_CONNECT:
				mConnected = true;
				SendMessage ( DBMSG_CONNECTED );
				break;
				
			case DBMSG_CONNECTED:
				mConnected = true;
				break;
				
			case DBMSG_DISCONNECT:
				ClearBreakpoints ( );
				Resume ( );				
				mConnected = false;
				break;
				
			case DBMSG_ADDBREAKPOINT:
				HandleAddBreakpoint ( &msg );
				break;
				
			case DBMSG_REMOVEBREAKPOINT:
				HandleRemoveBreakpoint ( &msg );
				break;
				
			case DBMSG_RESUME:
				Resume ( );
				break;
				
			case DBMSG_BREAK:
				mBreakNext = true;
				break;
				
			case DBMSG_STEPOVER:
				mBreakStepOver = true;
				mBreakStepOverDepth = mBreakInterpreter->GetCallstackDepth ( );
				mBreakStepOverFunc1 = mBreakInterpreter->GetCallstack()[mBreakInterpreter->GetCallstackDepth()].f;
				if ( mBreakInterpreter->GetCallstackDepth() > 0 )
				{
					mBreakStepOverFunc2 = mBreakInterpreter->GetCallstack()[mBreakInterpreter->GetCallstackDepth()-1].f;
				}
				else
				{
					mBreakStepOverFunc2 = NULL;
				}
				Resume ( );
				break;

			case DBMSG_STEPINTO:
				mBreakStepInto = true;
				Resume ( );
				break;
				
			case DBMSG_INSPECTVARIABLE:
				HandleInspectVariable ( &msg );
				break;
				
			case DBMSG_INSPECTCALLSTACK:
				HandleInspectCallstack ( &msg );
				break;
				
			case DBMSG_INSPECTTHREADS:
				HandleInspectThreads ( &msg );
				break;
		}		
	}

	return true;
}
Example #2
0
/*
================
rvDebuggerClient::ProcessMessages

Process all incomding messages from the debugger server
================
*/
bool rvDebuggerClient::ProcessMessages ( void )
{
	netadr_t adrFrom;
	msg_t	 msg;
	byte	 buffer[MAX_MSGLEN];

	MSG_Init( &msg, buffer, sizeof( buffer ) );

	// Check for pending udp packets on the debugger port
	while ( mPort.GetPacket ( adrFrom, msg.data, msg.cursize, msg.maxsize ) )
	{
		unsigned short command;

		// Only accept packets from the debugger server for security reasons
		if ( !Sys_CompareNetAdrBase ( adrFrom, mServerAdr ) )
		{
			continue;
		}

		command = (unsigned short) MSG_ReadShort ( &msg );
		
		// Is this what we are waiting for?
		if ( command == mWaitFor )
		{
			mWaitFor = DBMSG_UNKNOWN;
		}
		
		switch ( command )
		{
			case DBMSG_CONNECT:
				mConnected = true;
				SendMessage ( DBMSG_CONNECTED );
				SendBreakpoints ( );
				break;
				
			case DBMSG_CONNECTED:
				mConnected = true;
				SendBreakpoints ( );
				break;
				
			case DBMSG_DISCONNECT:
				mConnected = false;
				break;
				
			case DBMSG_BREAK:
				HandleBreak ( &msg );				
				break;
				
			// Callstack being send to the client
			case DBMSG_INSPECTCALLSTACK:
				HandleInspectCallstack ( &msg );
				break;
				
			// Thread list is being sent to the client
			case DBMSG_INSPECTTHREADS:
				HandleInspectThreads ( &msg );
				break;
				
			case DBMSG_INSPECTVARIABLE:
				HandleInspectVariable ( &msg );
				break;			
		}			
		
		// Give the window a chance to process the message
		msg.readcount = 0;		
		msg.bit = 0;
		gDebuggerApp.GetWindow().ProcessNetMessage ( &msg );
	}

	return true;
}