ensure network watchdog resets all states; ignore TDU/TDULC when local audio or UDP traffic is running;

pull/114/head
Bryan Biedenkapp 4 weeks ago
parent 4f68f41c47
commit 7c7ba1578d

@ -125,12 +125,12 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length)
lsd.setLSD2(lsd2);
if (control.getLCO() == LCO::GROUP) {
if (srcId == 0) {
m_network->resetP25();
return;
}
if ((duid == DUID::TDU) || (duid == DUID::TDULC)) {
// ignore TDU/TDULC entirely when local audio detect or
// traffic from UDP is running
if (m_audioDetect || m_trafficFromUDP)
return;
// ignore TDU's that are grant demands
if (grantDemand) {
m_network->resetP25();
@ -138,6 +138,11 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length)
}
}
if (srcId == 0) {
m_network->resetP25();
return;
}
// ensure destination ID matches
if (dstId != m_dstId) {
m_network->resetP25();

@ -652,12 +652,34 @@ int HostBridge::run()
m_rxStartTime = 0U;
m_rxStreamId = 0U;
m_srcIdOverride = 0;
m_txStreamId = 0;
m_udpSrcId = 0;
m_udpDstId = 0;
m_trafficFromUDP = false;
m_udpFrameCnt = 0U;
// ensure PTT is dropped at call end
if (m_rtsPttEnable) {
deassertRtsPtt();
}
m_dmrSeqNo = 0U;
m_dmrN = 0U;
m_p25SeqNo = 0U;
m_p25N = 0U;
m_analogN = 0U;
if (!m_udpRTPContinuousSeq) {
m_rtpInitialFrame = false;
m_rtpSeqNo = 0U;
}
m_rtpTimestamp = INVALID_TS;
m_p25Crypto->clearMI();
m_p25Crypto->resetKeystream();
m_network->resetDMR(1U);
m_network->resetDMR(2U);

Loading…
Cancel
Save

Powered by TurnKey Linux.