Skip to content

Commit ea8c4b9

Browse files
authored
Add processing for bad WP packets (#2162)
***NO_CI***
1 parent 59c0cdb commit ea8c4b9

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

src/CLR/WireProtocol/WireProtocol_Message.c

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,18 @@ uint8_t WP_Message_VerifyPayload(WP_Message *message)
221221
return true;
222222
}
223223

224+
void WP_ReportBadPacket(uint32_t flag)
225+
{
226+
WP_Message msg;
227+
uint32_t flags = flag | WP_Flags_c_NonCritical | WP_Flags_c_NACK;
228+
229+
WP_Message_Initialize(&msg);
230+
231+
WP_Message_PrepareRequest(&msg, 0, flags, 0, NULL);
232+
233+
WP_TransmitMessage(&msg);
234+
}
235+
224236
void WP_Message_Process()
225237
{
226238
uint32_t len;
@@ -336,20 +348,20 @@ void WP_Message_Process()
336348
{
337349
if (_inboundMessage.m_header.m_size != 0)
338350
{
339-
if (_inboundMessage.m_payload == NULL)
351+
if (_inboundMessage.m_payload != NULL)
340352
{
341-
// Bad, no buffer...
342-
_rxState = ReceiveState_Initialize;
343-
break;
344-
}
345-
346-
_receiveExpiryTicks = HAL_Time_CurrentSysTicks() + c_PayloadTimeout;
347-
_pos = _inboundMessage.m_payload;
348-
_size = _inboundMessage.m_header.m_size;
353+
_receiveExpiryTicks = HAL_Time_CurrentSysTicks() + c_PayloadTimeout;
354+
_pos = _inboundMessage.m_payload;
355+
_size = _inboundMessage.m_header.m_size;
349356

350-
_rxState = ReceiveState_ReadingPayload;
357+
_rxState = ReceiveState_ReadingPayload;
351358

352-
break;
359+
break;
360+
}
361+
else
362+
{
363+
// Bad, no buffer...
364+
}
353365
}
354366
else
355367
{
@@ -360,7 +372,10 @@ void WP_Message_Process()
360372
}
361373
}
362374

363-
// one the verifications above failed, return
375+
// one the verifications above failed, report...
376+
WP_ReportBadPacket(WP_Flags_c_BadHeader);
377+
378+
//... and restart state machine
364379
_rxState = ReceiveState_Initialize;
365380
return;
366381

@@ -402,11 +417,12 @@ void WP_Message_Process()
402417
else
403418
{
404419
TRACE_WP_HEADER(WP_RXMSG_NAK, &_inboundMessage);
420+
WP_ReportBadPacket(WP_Flags_c_BadPayload);
405421
}
406422

407423
_rxState = ReceiveState_Initialize;
408424

409-
break;
425+
return;
410426

411427
default:
412428
// unknown state

0 commit comments

Comments
 (0)