/* ================ 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; }
/* ================ 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; }