refactor how grant calls are made for DMR, P25 and NXDN (this may break somethings!);

pull/25/head
Bryan Biedenkapp 3 years ago
parent f9afd01277
commit 8faa764cb4

@ -450,7 +450,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
if (m_slot->m_authoritative) {
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false);
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), false, true);
}
}
break;
@ -459,7 +459,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
if (m_slot->m_authoritative) {
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true);
writeRF_CSBK_Grant(srcId, dstId, isp->getServiceOptions(), true, true);
}
}
break;
@ -468,7 +468,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), false, true);
}
break;
case SVC_KIND_GRP_DATA_CALL:
@ -476,7 +476,7 @@ void ControlSignaling::processNetwork(const data::Data & dmrData)
writeRF_CSBK_ACK_RSP(srcId, TS_WAIT_RSN, 0U);
if (!m_slot->m_affiliations->isGranted(dstId)) {
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true);
writeRF_CSBK_Data_Grant(srcId, dstId, isp->getServiceOptions(), true, true);
}
break;
case SVC_KIND_REG_SVC:
@ -776,12 +776,11 @@ void ControlSignaling::writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uin
/// <param name="dstId"></param>
/// <param name="serviceOptions"></param>
/// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param>
/// <param name="chNo"></param>
/// <param name="net"></param>
/// <param name="skipNetCheck"></param>
/// <returns></returns>
bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck)
bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo)
{
Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();
@ -1018,11 +1017,11 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
/// <param name="dstId"></param>
/// <param name="serviceOptions"></param>
/// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param>
/// <param name="chNo"></param>
/// <param name="net"></param>
/// <returns></returns>
bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net)
bool ControlSignaling::writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo)
{
Slot *m_tscc = m_slot->m_dmr->getTSCCSlot();

@ -95,9 +95,9 @@ namespace dmr
/// <summary>Helper to write a NACK RSP packet.</summary>
void writeRF_CSBK_NACK_RSP(uint32_t dstId, uint8_t reason, uint8_t service);
/// <summary>Helper to write a grant packet.</summary>
bool writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false);
bool writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U);
/// <summary>Helper to write a data grant packet.</summary>
bool writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false);
bool writeRF_CSBK_Data_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U);
/// <summary>Helper to write a unit registration response packet.</summary>
void writeRF_CSBK_U_Reg_Rsp(uint32_t srcId, uint8_t serviceOptions);

@ -258,6 +258,8 @@ bool Trunk::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
switch (rcch->getMessageType()) {
case RTCH_MESSAGE_TYPE_VCALL:
{
if (m_nxdn->m_dedicatedControl && !m_nxdn->m_voiceOnControl) {
if (!m_nxdn->m_affiliations.isGranted(dstId)) {
if (m_verbose) {
LogMessage(LOG_NET, NXDN_RCCH_MSG_TYPE_VCALL_CONN_REQ ", emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u",
rcch->getEmergency(), rcch->getEncrypted(), rcch->getPriority(), rcch->getGrpVchNo(), srcId, dstId);
@ -267,9 +269,7 @@ bool Trunk::processNetwork(uint8_t fct, uint8_t option, lc::RTCH& netLC, uint8_t
(rcch->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag
(rcch->getPriority() & 0x07U); // Priority
if (m_nxdn->m_dedicatedControl && !m_nxdn->m_voiceOnControl) {
if (!m_nxdn->m_affiliations.isGranted(dstId)) {
writeRF_Message_Grant(srcId, dstId, serviceOptions, true);
writeRF_Message_Grant(srcId, dstId, serviceOptions, true, true);
}
}
}
@ -456,12 +456,11 @@ void Trunk::writeRF_Message(RCCH* rcch, bool noNetwork, bool clearBeforeWrite)
/// <param name="dstId"></param>
/// <param name="serviceOptions"></param>
/// <param name="grp"></param>
/// <param name="net"></param>
/// <param name="skip"></param>
/// <param name="chNo"></param>
/// <param name="net"></param>
/// <param name="skipNetCheck"></param>
/// <returns></returns>
bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck)
bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo)
{
bool emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
@ -587,7 +586,7 @@ bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t servic
}
// transmit group grant
writeRF_Message(rcch.get(), false, true);
writeRF_Message(rcch.get(), net, true);
return true;
}

@ -102,7 +102,7 @@ namespace nxdn
void writeRF_Message(lc::RCCH* rcch, bool noNetwork, bool clearBeforeWrite = false);
/// <summary>Helper to write a grant packet.</summary>
bool writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false);
bool writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U);
/// <summary>Helper to write a deny packet.</summary>
void writeRF_Message_Deny(uint32_t srcId, uint32_t dstId, uint8_t reason, uint8_t service);
/// <summary>Helper to write a group registration response packet.</summary>

@ -701,6 +701,8 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
switch (tsbk->getLCO()) {
case TSBK_IOSP_GRP_VCH:
{
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) {
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u",
tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId);
@ -710,15 +712,15 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
(tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag
(tsbk->getPriority() & 0x07U); // Priority
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) {
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true);
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true, true);
}
}
}
return true; // don't allow this to write to the air
case TSBK_IOSP_UU_VCH:
{
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) {
if (m_verbose) {
LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant), emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u",
tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId);
@ -728,9 +730,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L
(tsbk->getEncrypted() ? 0x40U : 0x00U) + // Encrypted Flag
(tsbk->getPriority() & 0x07U); // Priority
if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl) {
if (!m_p25->m_affiliations.isGranted(dstId)) {
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false);
writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false, true);
}
}
}
@ -2138,13 +2138,12 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco)
/// </summary>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
/// <param name="chNo"></param>
/// <param name="grp"></param>
/// <param name="skip"></param>
/// <param name="net"></param>
/// <param name="skipNetCheck"></param>
/// <param name="skip"></param>
/// <param name="chNo"></param>
/// <returns></returns>
bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip, uint32_t chNo, bool net, bool skipNetCheck)
bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net, bool skip, uint32_t chNo)
{
bool emergency = ((serviceOptions & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag
bool encryption = ((serviceOptions & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag
@ -2269,7 +2268,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
}
// transmit group grant
writeRF_TSDU_SBF(iosp.get(), false);//, true, net);
writeRF_TSDU_SBF(iosp.get(), net);
}
else {
if (!net) {
@ -2309,7 +2308,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
}
// transmit private grant
writeRF_TSDU_SBF(iosp.get(), false);//, true, net);
writeRF_TSDU_SBF(iosp.get(), net);
}
}

@ -189,7 +189,7 @@ namespace p25
void queueRF_TSBK_Ctrl(uint8_t lco);
/// <summary>Helper to write a grant packet.</summary>
bool writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool skip = false, uint32_t chNo = 0U, bool net = false, bool skipNetCheck = false);
bool writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOptions, bool grp, bool net = false, bool skip = false, uint32_t chNo = 0U);
/// <summary>Helper to write a SNDCP grant packet.</summary>
bool writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip = false, bool net = false);
/// <summary>Helper to write a unit to unit answer request packet.</summary>

Loading…
Cancel
Save

Powered by TurnKey Linux.