From 45c0661723383477a5b3902bf9829733285729c4 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 19 Jun 2026 18:46:31 -0400 Subject: [PATCH] for control channel dvmhost peers, report the known peerId of voice channels via the TRANSFER_SUBFUNC_STATUS; update sysview to properly expire peers from the peer status list after 10 seconds of no updates from the FNE about that peer; --- src/host/Host.cpp | 3 +++ src/sysview/SysViewMain.cpp | 14 ++++++++++---- src/sysview/network/PeerNetwork.cpp | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/host/Host.cpp b/src/host/Host.cpp index 63136818..f262b47e 100644 --- a/src/host/Host.cpp +++ b/src/host/Host.cpp @@ -1368,6 +1368,9 @@ json::object Host::getStatus() uint8_t chId = entry.second.chId(); chData["channelId"].set(chId); + uint32_t peerId = m_voiceChPeerId[chNo]; + chData["peerId"].set(peerId); + uint32_t dstId = 0U, srcId = 0U; // fetch affiliations from DMR if we're a DMR CC diff --git a/src/sysview/SysViewMain.cpp b/src/sysview/SysViewMain.cpp index 355b2985..add3b900 100644 --- a/src/sysview/SysViewMain.cpp +++ b/src/sysview/SysViewMain.cpp @@ -312,18 +312,24 @@ void* threadNetworkPump(void* arg) // clock peer status timers and remove expired entries from the peer status map g_network->lockPeerStatus(); + std::vector expiredPeerIds; for (auto it = g_network->peerStatusTimers.begin(); it != g_network->peerStatusTimers.end();) { + it->second.clock(ms); if (it->second.isRunning() && it->second.hasExpired()) { uint32_t peerId = it->first; - it = g_network->peerStatusTimers.erase(it); - g_network->peerStatus.erase(peerId); - g_network->peerStatusTimers[peerId].stop(); - LogInfoEx(LOG_HOST, "peer status expired, peerId = %u", peerId); + it->second.stop(); + expiredPeerIds.push_back(peerId); } else { ++it; } } + + // remove expired entries from the peer status map + for (uint32_t peerId : expiredPeerIds) { + g_network->peerStatus.erase(peerId); + g_network->peerStatusTimers.erase(peerId); + } g_network->unlockPeerStatus(); hrc::hrc_t pktTime = hrc::now(); diff --git a/src/sysview/network/PeerNetwork.cpp b/src/sysview/network/PeerNetwork.cpp index c2e6ac87..60738faf 100644 --- a/src/sysview/network/PeerNetwork.cpp +++ b/src/sysview/network/PeerNetwork.cpp @@ -26,7 +26,7 @@ using namespace network; // Constants // --------------------------------------------------------------------------- -const uint32_t PEER_STATUS_EXPIRY = 60000U; // 60 seconds +const uint32_t PEER_STATUS_EXPIRY = 10U; // 10 seconds // --------------------------------------------------------------------------- // Static Class Members