diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index e2a9808..0b3c7a5 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -20,6 +20,7 @@ #include #include + std::vector DMRAccessControl::m_dstBlackListSlot1RF; std::vector DMRAccessControl::m_dstBlackListSlot2RF; std::vector DMRAccessControl::m_dstWhiteListSlot1RF; @@ -196,7 +197,7 @@ bool DMRAccessControl::validateAccess (unsigned int src_id, unsigned int dst_id, } } -unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network) +unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { if (slot == 1 && m_TGRewriteSlot1 == false) @@ -204,6 +205,9 @@ unsigned int DMRAccessControl::DstIdRewrite (unsigned int did, unsigned int sid, if (slot == 2 && m_TGRewriteSlot2 == false) return 0; + + if (dmrLC->getFLCO() != FLCO_GROUP) + return 0; std::time_t currenttime = std::time(nullptr); diff --git a/DMRAccessControl.h b/DMRAccessControl.h index ec36497..1b520cd 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -17,6 +17,7 @@ #include #include +#include "DMRLC.h" class DMRAccessControl { public: @@ -24,7 +25,7 @@ public: static void init(const std::vector& DstIdBlacklistSlot1RF, const std::vector& DstIdWhitelistSlot1RF, const std::vector& DstIdBlacklistSlot2RF, const std::vector& DstIdWhitelistSlot2RF, const std::vector& DstIdBlacklistSlot1NET, const std::vector& DstIdWhitelistSlot1NET, const std::vector& DstIdBlacklistSlot2NET, const std::vector& DstIdWhitelistSlot2NET, const std::vector& SrcIdBlacklist, bool selfOnly, const std::vector& prefixes,unsigned int id,unsigned int callHang, bool TGRewrteSlot1, bool TGRewrteSlot2); - static unsigned int DstIdRewrite(unsigned int id, unsigned int sid,unsigned int slot, bool network); + static unsigned int DstIdRewrite(unsigned int id, unsigned int sid,unsigned int slot, bool network, CDMRLC* dmrLC); static void setOverEndTime(); private: diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 3cdde6d..30850b8 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -159,7 +159,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) return; } - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false,lc); if (rw_id) { lc->setDstId(rw_id); @@ -492,8 +492,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) delete lc; return; } - // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,false,lc); if (rw_id) { lc->setDstId(rw_id); @@ -778,7 +777,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did, sid,m_slotNo, true); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did, sid,m_slotNo, true,m_netLC); if (rw_id) { m_netLC->setDstId(rw_id); @@ -848,7 +847,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) return; // Test dst rewrite - unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,true); + unsigned int rw_id = DMRAccessControl::DstIdRewrite(did,sid,m_slotNo,true, m_netLC); if (rw_id) { m_netLC->setDstId(rw_id);