diff --git a/src/host/nxdn/Control.cpp b/src/host/nxdn/Control.cpp index 4813d0eb..92c90a1b 100644 --- a/src/host/nxdn/Control.cpp +++ b/src/host/nxdn/Control.cpp @@ -995,8 +995,6 @@ void Control::processNetwork() ::memcpy(data.get(), buffer.get() + 24U, frameLength); } - m_networkWatchdog.start(); - if (m_debug) { Utils::dump(2U, "* !!! NXDN Network Frame", data.get(), frameLength); } diff --git a/src/host/nxdn/packet/Data.cpp b/src/host/nxdn/packet/Data.cpp index 97b0ed98..240fe842 100644 --- a/src/host/nxdn/packet/Data.cpp +++ b/src/host/nxdn/packet/Data.cpp @@ -221,6 +221,9 @@ bool Data::processNetwork(ChOption::E option, lc::RTCH& netLC, uint8_t* data, ui resetNet(); } + if (m_nxdn->m_netState == RS_NET_DATA) + m_nxdn->m_networkWatchdog.start(); + channel::UDCH udch; bool validUDCH = udch.decode(data + 2U); if (m_nxdn->m_netState == RS_NET_IDLE && !validUDCH) @@ -368,6 +371,7 @@ bool Data::processNetwork(ChOption::E option, lc::RTCH& netLC, uint8_t* data, ui m_nxdn->m_voice->m_netFrames); m_nxdn->writeEndNet(); + m_nxdn->m_networkWatchdog.stop(); } return true; diff --git a/src/host/nxdn/packet/Voice.cpp b/src/host/nxdn/packet/Voice.cpp index 4fc28df3..817e4228 100644 --- a/src/host/nxdn/packet/Voice.cpp +++ b/src/host/nxdn/packet/Voice.cpp @@ -611,6 +611,9 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& resetNet(); } + if (m_nxdn->m_netState == RS_NET_AUDIO) + m_nxdn->m_networkWatchdog.start(); + channel::SACCH sacch; sacch.decode(data + 2U); @@ -649,6 +652,7 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& m_nxdn->m_netState = RS_NET_IDLE; m_nxdn->m_netMask = 0x00U; m_nxdn->m_netLC.reset(); + m_nxdn->m_networkWatchdog.stop(); return false; } } @@ -661,6 +665,7 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& m_nxdn->m_netLC.reset(); m_nxdn->m_netLastDstId = 0U; m_nxdn->m_netLastSrcId = 0U; + m_nxdn->m_networkWatchdog.stop(); return false; } } else if (type == MessageType::RTCH_VCALL) { @@ -891,6 +896,7 @@ bool Voice::processNetwork(FuncChannelType::E fct, ChOption::E option, lc::RTCH& m_rfBits = 1U; m_nxdn->m_netTimeout.start(); m_nxdn->m_netState = RS_NET_AUDIO; + m_nxdn->m_networkWatchdog.start(); if (m_verbose) { LogInfoEx(LOG_NET, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL ", srcId = %u, dstId = %u, group = %u, emerg = %u, encrypt = %u, prio = %u, algo = $%02X, kid = $%04X", diff --git a/src/host/p25/Control.cpp b/src/host/p25/Control.cpp index 8d9563d0..9972b0e8 100644 --- a/src/host/p25/Control.cpp +++ b/src/host/p25/Control.cpp @@ -1681,15 +1681,14 @@ void Control::processNetwork() return; } - // perform grant response logic - m_control->writeRF_TSDU_Grant(srcId, dstId, serviceOptions, !unitToUnit, true); -/* - if (!m_control->writeRF_TSDU_Grant(srcId, dstId, serviceOptions, !unitToUnit, true)) - { - LogError(LOG_NET, P25_TSDU_STR " call rejected, network call not granted, dstId = %u", dstId); - return; + if (!m_affiliations->isGranted(dstId)) { + // perform grant response logic + if (m_control->writeRF_TSDU_Grant(srcId, dstId, serviceOptions, !unitToUnit, true)) { + m_netLastSrcId = srcId; + m_netLastDstId = dstId; + } } -*/ + return; }