@@ -401,49 +401,17 @@ void SessionManager::SecureUnicastMessageDispatch(const PacketHeader & packetHea
401
401
VerifyOrExit (CHIP_NO_ERROR == SecureMessageCodec::Decrypt (session, payloadHeader, packetHeader, msg),
402
402
ChipLogError (Inet, " Secure transport received message, but failed to decode/authenticate it, discarding" ));
403
403
404
- // Verify message counter
405
- if (packetHeader. IsSecureSessionControlMsg () )
404
+ err = session-> GetSessionMessageCounter (). GetPeerMessageCounter (). Verify (packetHeader. GetMessageCounter ());
405
+ if (err == CHIP_ERROR_DUPLICATE_MESSAGE_RECEIVED )
406
406
{
407
- // TODO: control message counter is not implemented yet
407
+ isDuplicate = SessionManagerDelegate::DuplicateMessage::Yes;
408
+ err = CHIP_NO_ERROR;
408
409
}
409
- else
410
+ if (err != CHIP_NO_ERROR)
410
411
{
411
- if (!session->GetSessionMessageCounter ().GetPeerMessageCounter ().IsSynchronized ())
412
- {
413
- // Queue and start message sync procedure
414
- err = mMessageCounterManager ->QueueReceivedMessageAndStartSync (
415
- packetHeader,
416
- SessionHandle (session->GetPeerNodeId (), session->GetLocalSessionId (), session->GetPeerSessionId (),
417
- session->GetFabricIndex ()),
418
- session, peerAddress, std::move (msg));
419
-
420
- if (err != CHIP_NO_ERROR)
421
- {
422
- ChipLogError (Inet,
423
- " Message counter synchronization for received message, failed to "
424
- " QueueReceivedMessageAndStartSync, err = %" CHIP_ERROR_FORMAT,
425
- err.Format ());
426
- }
427
- else
428
- {
429
- ChipLogDetail (Inet, " Received message have been queued due to peer counter is not synced" );
430
- }
431
-
432
- return ;
433
- }
434
-
435
- err = session->GetSessionMessageCounter ().GetPeerMessageCounter ().Verify (packetHeader.GetMessageCounter ());
436
- if (err == CHIP_ERROR_DUPLICATE_MESSAGE_RECEIVED)
437
- {
438
- isDuplicate = SessionManagerDelegate::DuplicateMessage::Yes;
439
- err = CHIP_NO_ERROR;
440
- }
441
- if (err != CHIP_NO_ERROR)
442
- {
443
- ChipLogError (Inet, " Message counter verify failed, err = %" CHIP_ERROR_FORMAT, err.Format ());
444
- }
445
- SuccessOrExit (err);
412
+ ChipLogError (Inet, " Message counter verify failed, err = %" CHIP_ERROR_FORMAT, err.Format ());
446
413
}
414
+ SuccessOrExit (err);
447
415
448
416
mSecureSessions .MarkSessionActive (session);
449
417
@@ -461,14 +429,7 @@ void SessionManager::SecureUnicastMessageDispatch(const PacketHeader & packetHea
461
429
}
462
430
}
463
431
464
- if (packetHeader.IsSecureSessionControlMsg ())
465
- {
466
- // TODO: control message counter is not implemented yet
467
- }
468
- else
469
- {
470
- session->GetSessionMessageCounter ().GetPeerMessageCounter ().Commit (packetHeader.GetMessageCounter ());
471
- }
432
+ session->GetSessionMessageCounter ().GetPeerMessageCounter ().Commit (packetHeader.GetMessageCounter ());
472
433
473
434
// TODO: once mDNS address resolution is available reconsider if this is required
474
435
// This updates the peer address once a packet is received from a new address
@@ -502,6 +463,24 @@ void SessionManager::SecureGroupMessageDispatch(const PacketHeader & packetHeade
502
463
503
464
VerifyOrExit (!msg.IsNull (), ChipLogError (Inet, " Secure transport received NULL packet, discarding" ));
504
465
466
+ // MCSP check
467
+ if (packetHeader.IsSecureSessionControlMsg ())
468
+ {
469
+ if (packetHeader.GetDestinationNodeId ().HasValue () && packetHeader.HasPrivacyFlag ())
470
+ {
471
+ // TODO
472
+ // if (packetHeader.GetDestinationNodeId().Value() == ThisDeviceNodeID)
473
+ // {
474
+ // MCSP processing..
475
+ // }
476
+ }
477
+ else
478
+ {
479
+ ChipLogError (Inet, " Invalid condition found in packet header" );
480
+ ExitNow (err = CHIP_ERROR_INCORRECT_STATE);
481
+ }
482
+ }
483
+
505
484
// TODO: Handle Group message counter here spec 4.7.3
506
485
// spec 4.5.1.2 for msg counter
507
486
@@ -523,21 +502,14 @@ void SessionManager::SecureGroupMessageDispatch(const PacketHeader & packetHeade
523
502
}
524
503
}
525
504
526
- if (packetHeader.IsSecureSessionControlMsg ())
527
- {
528
- // TODO: control message counter is not implemented yet
529
- }
530
- else
531
- {
532
- // TODO: Commit Group Message Counter
533
- }
505
+ // TODO: Commit Group Message Counter
534
506
535
507
if (mCB != nullptr )
536
508
{
537
509
// TODO: Update Session Handle for Group messages.
538
510
// SessionHandle session(session->GetPeerNodeId(), session->GetLocalSessionId(), session->GetPeerSessionId(),
539
511
// session->GetFabricIndex());
540
- // mCB->OnMessageReceived(packetHeader, payloadHeader, nullptr , peerAddress, isDuplicate, std::move(msg));
512
+ // mCB->OnMessageReceived(packetHeader, payloadHeader, session , peerAddress, isDuplicate, std::move(msg));
541
513
}
542
514
543
515
exit :
0 commit comments