diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index ff6dd7c..26baf3d 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -19,6 +19,7 @@ #include #include #include +#include std::vector DMRAccessControl::m_dstBlackListSlot1RF; @@ -42,6 +43,8 @@ unsigned int DMRAccessControl::m_id = 0U; unsigned int DMRAccessControl::m_dstRewriteID = 0U; unsigned int DMRAccessControl::m_SrcID = 0U; +CDMRLC* DMRAccessControl::m_lastdmrLC; + std::time_t DMRAccessControl::m_time; unsigned int DMRAccessControl::m_callHang; @@ -211,23 +214,32 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (network) { m_dstRewriteID = did; m_SrcID = sid; + memcpy(&dmrLC, &m_lastdmrLC, sizeof(dmrLC)); if ( (did < 4000 || did > 5000) && did > 0 && did != 9 && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of of inbound network traffic from %u to 9",slot,did); return 9; // rewrite incoming BM voice prompts to TG 9 } else if ((sid >= 4000 && sid <= 5000) && dmrLC->getFLCO() == FLCO_USER_USER) { dmrLC->setFLCO(FLCO_GROUP); - LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG9",slot,did); + LogMessage("DMR Slot %u, Rewrite inbound private call to %u to Group Call on TG 9 (BM reflector voice prompt)",slot,did); return 9; + // rewrite direct dial inbound + } else if (did == 235135 && dmrLC->getFLCO() == FLCO_USER_USER) { + dmrLC->setFLCO(FLCO_GROUP); + LogMessage("DMR Slot %u, Rewrite inbound private call to repeater ID to Group Call on TG9 (direct dial)",slot,did); + return(9); } else { return 0; } - } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime) { + } else if (did == 9 && m_dstRewriteID != 9 && m_dstRewriteID != 0 && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) { LogMessage("DMR Slot %u, Rewrite DST ID (TG) of outbound network traffic from %u to %u (return traffic during CallHang)",slot,did,m_dstRewriteID); return(m_dstRewriteID); } else if ((did < 4000 || did > 5000) && did > 0 && did !=9) { m_dstRewriteID = did; - } + } else if (m_dstRewriteID == 235135 && m_lastdmrLC->getFLCO() == FLCO_USER_USER) { + LogMessage("DMR Slot %u, Rewrite DST ID of outbound network group call on TG %u to private call %u (direct dial response)",slot,did,m_SrcID); + return(m_SrcID); + } return 0; } diff --git a/DMRAccessControl.h b/DMRAccessControl.h index 1b520cd..95b2df9 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -61,6 +61,8 @@ private: static bool m_TGRewriteSlot1; static bool m_TGRewriteSlot2; + static CDMRLC* m_lastdmrLC; + };