diff --git a/config.example.yml b/config.example.yml index 277c7c82..73a24ab8 100644 --- a/config.example.yml +++ b/config.example.yml @@ -69,6 +69,7 @@ protocols: noStatusAck: false noMessageAck: true unitToUnitAvailCheck: true + sndcpGrant: false silenceThreshold: 124 disableNetworkHDU: false queueSize: 5000 diff --git a/p25/Control.cpp b/p25/Control.cpp index 0e55d1e0..eb7b3988 100644 --- a/p25/Control.cpp +++ b/p25/Control.cpp @@ -231,6 +231,8 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s m_trunk->m_noStatusAck = p25Protocol["noStatusAck"].as(false); m_trunk->m_noMessageAck = p25Protocol["noMessageAck"].as(true); m_trunk->m_unitToUnitAvailCheck = p25Protocol["unitToUnitAvailCheck"].as(true); + + m_trunk->m_sndcpChGrant = p25Protocol["sndcpGrant"].as(false); yaml::Node control = p25Protocol["control"]; m_control = control["enable"].as(false); @@ -310,6 +312,8 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s LogInfo(" Verify Affiliation: %s", m_trunk->m_verifyAff ? "yes" : "no"); LogInfo(" Verify Registration: %s", m_trunk->m_verifyReg ? "yes" : "no"); + LogInfo(" SNDCP Channel Grant: %s", m_trunk->m_sndcpChGrant ? "yes" : "no"); + LogInfo(" No Status ACK: %s", m_trunk->m_noStatusAck ? "yes" : "no"); LogInfo(" No Message ACK: %s", m_trunk->m_noMessageAck ? "yes" : "no"); LogInfo(" Unit-to-Unit Availability Check: %s", m_trunk->m_unitToUnitAvailCheck ? "yes" : "no"); diff --git a/p25/TrunkPacket.cpp b/p25/TrunkPacket.cpp index afaa7a21..fe087372 100644 --- a/p25/TrunkPacket.cpp +++ b/p25/TrunkPacket.cpp @@ -309,7 +309,12 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len, bool preDecoded) m_rfTSBK.getDataServiceOptions(), m_rfTSBK.getDataAccessControl(), srcId); } - writeRF_TSDU_SNDCP_Grant(false, false); + if (m_sndcpChGrant) { + writeRF_TSDU_SNDCP_Grant(false, false); + } + else { + writeRF_TSDU_Deny(P25_DENY_RSN_SYS_UNSUPPORTED_SVC, TSBK_ISP_SNDCP_CH_REQ); + } break; case TSBK_IOSP_STS_UPDT: // validate the source RID @@ -1308,6 +1313,7 @@ TrunkPacket::TrunkPacket(Control* p25, network::BaseNetwork* network, bool dumpT m_adjSiteUpdateTimer(1000U), m_adjSiteUpdateInterval(ADJ_SITE_TIMER_TIMEOUT), m_ctrlTSDUMBF(true), + m_sndcpChGrant(false), m_dumpTSBK(dumpTSBKData), m_verbose(verbose), m_debug(debug) diff --git a/p25/TrunkPacket.h b/p25/TrunkPacket.h index aa41a254..b93233f7 100644 --- a/p25/TrunkPacket.h +++ b/p25/TrunkPacket.h @@ -166,6 +166,8 @@ namespace p25 bool m_ctrlTSDUMBF; + bool m_sndcpChGrant; + bool m_dumpTSBK; bool m_verbose;