@@ -414,6 +414,8 @@ CHIP_ERROR WriteClient::SendWriteRequest()
414
414
CHIP_ERROR WriteClient::OnMessageReceived (Messaging::ExchangeContext * apExchangeContext, const PayloadHeader & aPayloadHeader,
415
415
System::PacketBufferHandle && aPayload)
416
416
{
417
+ using namespace Protocols ::InteractionModel;
418
+
417
419
if (mState == State::AwaitingResponse &&
418
420
// We had sent the last chunk of data, and received all responses
419
421
mChunks .IsNull ())
@@ -431,13 +433,18 @@ CHIP_ERROR WriteClient::OnMessageReceived(Messaging::ExchangeContext * apExchang
431
433
432
434
if (mState == State::AwaitingTimedStatus)
433
435
{
434
- err = HandleTimedStatus (aPayloadHeader, std::move (aPayload));
436
+ VerifyOrExit (aPayloadHeader.HasMessageType (MsgType::StatusResponse), err = CHIP_ERROR_INVALID_MESSAGE_TYPE);
437
+ CHIP_ERROR statusError = CHIP_NO_ERROR;
438
+ SuccessOrExit (err = StatusResponse::ProcessStatusResponse (std::move (aPayload), statusError));
439
+ SuccessOrExit (err = statusError);
440
+ err = SendWriteRequest ();
441
+
435
442
// Skip all other processing here (which is for the response to the
436
443
// write request), no matter whether err is success or not.
437
444
goto exit ;
438
445
}
439
446
440
- if (aPayloadHeader.HasMessageType (Protocols::InteractionModel:: MsgType::WriteResponse))
447
+ if (aPayloadHeader.HasMessageType (MsgType::WriteResponse))
441
448
{
442
449
err = ProcessWriteResponseMessage (std::move (aPayload));
443
450
SuccessOrExit (err);
@@ -447,10 +454,12 @@ CHIP_ERROR WriteClient::OnMessageReceived(Messaging::ExchangeContext * apExchang
447
454
SuccessOrExit (SendWriteRequest ());
448
455
}
449
456
}
450
- else if (aPayloadHeader.HasMessageType (Protocols::InteractionModel:: MsgType::StatusResponse))
457
+ else if (aPayloadHeader.HasMessageType (MsgType::StatusResponse))
451
458
{
452
- err = StatusResponse::ProcessStatusResponse (std::move (aPayload));
453
- SuccessOrExit (err);
459
+ CHIP_ERROR statusError = CHIP_NO_ERROR;
460
+ SuccessOrExit (err = StatusResponse::ProcessStatusResponse (std::move (aPayload), statusError));
461
+ SuccessOrExit (err = statusError);
462
+ err = CHIP_ERROR_INVALID_MESSAGE_TYPE;
454
463
}
455
464
else
456
465
{
@@ -522,12 +531,5 @@ CHIP_ERROR WriteClient::ProcessAttributeStatusIB(AttributeStatusIB::Parser & aAt
522
531
return err;
523
532
}
524
533
525
- CHIP_ERROR WriteClient::HandleTimedStatus (const PayloadHeader & aPayloadHeader, System::PacketBufferHandle && aPayload)
526
- {
527
- ReturnErrorOnFailure (TimedRequest::HandleResponse (aPayloadHeader, std::move (aPayload)));
528
-
529
- return SendWriteRequest ();
530
- }
531
-
532
534
} // namespace app
533
535
} // namespace chip
0 commit comments