From eacc5886365e91863779c210a29bc8a6ff0c55f0 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 10 Nov 2016 18:43:54 +0000 Subject: [PATCH] Validate the wake up CSBK correctly. --- DMRAccessControl.cpp | 62 ++++++++++++++++++++++---------------------- DMRAccessControl.h | 8 +++--- DMRControl.cpp | 39 ++++++++-------------------- DMRControl.h | 19 ++++++-------- DMRSlot.cpp | 46 ++++++++++++-------------------- DMRSlot.h | 6 +---- MMDVMHost.cpp | 21 +++++++-------- 7 files changed, 81 insertions(+), 120 deletions(-) diff --git a/DMRAccessControl.cpp b/DMRAccessControl.cpp index 38db7a6..f0ecf53 100644 --- a/DMRAccessControl.cpp +++ b/DMRAccessControl.cpp @@ -21,39 +21,39 @@ #include -std::vector DMRAccessControl::m_dstBlackListSlot1RF; -std::vector DMRAccessControl::m_dstBlackListSlot2RF; -std::vector DMRAccessControl::m_dstWhiteListSlot1RF; -std::vector DMRAccessControl::m_dstWhiteListSlot2RF; +std::vector CDMRAccessControl::m_dstBlackListSlot1RF; +std::vector CDMRAccessControl::m_dstBlackListSlot2RF; +std::vector CDMRAccessControl::m_dstWhiteListSlot1RF; +std::vector CDMRAccessControl::m_dstWhiteListSlot2RF; -std::vector DMRAccessControl::m_dstBlackListSlot1NET; -std::vector DMRAccessControl::m_dstBlackListSlot2NET; -std::vector DMRAccessControl::m_dstWhiteListSlot1NET; -std::vector DMRAccessControl::m_dstWhiteListSlot2NET; +std::vector CDMRAccessControl::m_dstBlackListSlot1NET; +std::vector CDMRAccessControl::m_dstBlackListSlot2NET; +std::vector CDMRAccessControl::m_dstWhiteListSlot1NET; +std::vector CDMRAccessControl::m_dstWhiteListSlot2NET; -std::vector DMRAccessControl::m_srcIdBlacklist; +std::vector CDMRAccessControl::m_srcIdBlacklist; -std::vector DMRAccessControl::m_prefixes; +std::vector CDMRAccessControl::m_prefixes; -bool DMRAccessControl::m_selfOnly = false; +bool CDMRAccessControl::m_selfOnly = false; -unsigned int DMRAccessControl::m_id = 0U; +unsigned int CDMRAccessControl::m_id = 0U; -unsigned int DMRAccessControl::m_dstRewriteID[2]; -unsigned int DMRAccessControl::m_srcID[2]; +unsigned int CDMRAccessControl::m_dstRewriteID[2]; +unsigned int CDMRAccessControl::m_srcID[2]; -CDMRLC* DMRAccessControl::m_lastdmrLC; +CDMRLC* CDMRAccessControl::m_lastdmrLC; -time_t DMRAccessControl::m_time[2]; +time_t CDMRAccessControl::m_time[2]; -int DMRAccessControl::m_callHang; +int CDMRAccessControl::m_callHang; -bool DMRAccessControl::m_tgRewriteSlot1; -bool DMRAccessControl::m_tgRewriteSlot2; -bool DMRAccessControl::m_bmAutoRewrite; -bool DMRAccessControl::m_bmRewriteReflectorVoicePrompts; +bool CDMRAccessControl::m_tgRewriteSlot1; +bool CDMRAccessControl::m_tgRewriteSlot2; +bool CDMRAccessControl::m_bmAutoRewrite; +bool CDMRAccessControl::m_bmRewriteReflectorVoicePrompts; -void DMRAccessControl::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 tgRewriteSlot1, bool tgRewriteSlot2, bool bmAutoRewrite, bool bmRewriteReflectorVoicePrompts) +void CDMRAccessControl::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 tgRewriteSlot1, bool tgRewriteSlot2, bool bmAutoRewrite, bool bmRewriteReflectorVoicePrompts) { m_dstBlackListSlot1RF = dstIdBlacklistSlot1RF; m_dstWhiteListSlot1RF = dstIdWhitelistSlot1RF; @@ -70,7 +70,7 @@ void DMRAccessControl::init(const std::vector& dstIdBlacklistSlot1 m_bmRewriteReflectorVoicePrompts = bmRewriteReflectorVoicePrompts; } -bool DMRAccessControl::dstIdBlacklist(unsigned int did, unsigned int slot, bool network) +bool CDMRAccessControl::dstIdBlacklist(unsigned int did, unsigned int slot, bool network) { static std::vector blacklist; @@ -89,7 +89,7 @@ bool DMRAccessControl::dstIdBlacklist(unsigned int did, unsigned int slot, bool return std::find(blacklist.begin(), blacklist.end(), did) != blacklist.end(); } -bool DMRAccessControl::dstIdWhitelist(unsigned int did, unsigned int slot, bool gt4k, bool network) +bool CDMRAccessControl::dstIdWhitelist(unsigned int did, unsigned int slot, bool gt4k, bool network) { if (network) { if (slot == 1U) { @@ -166,7 +166,7 @@ bool DMRAccessControl::dstIdWhitelist(unsigned int did, unsigned int slot, bool } } -bool DMRAccessControl::validateSrcId(unsigned int id) +bool CDMRAccessControl::validateSrcId(unsigned int id) { if (m_selfOnly) { return id == m_id; @@ -185,16 +185,16 @@ bool DMRAccessControl::validateSrcId(unsigned int id) } } -bool DMRAccessControl::validateAccess(unsigned int src_id, unsigned int dst_id, unsigned int slot, bool network) +bool CDMRAccessControl::validateAccess(unsigned int src_id, unsigned int dst_id, unsigned int slot, bool network) { // source ID validation is only applied to RF traffic - if (!network && !DMRAccessControl::validateSrcId(src_id)) { + if (!network && !CDMRAccessControl::validateSrcId(src_id)) { LogMessage("DMR Slot %u, invalid access attempt from %u (blacklisted)", slot, src_id); return false; - } else if (DMRAccessControl::dstIdBlacklist(dst_id, slot, network)) { + } else if (CDMRAccessControl::dstIdBlacklist(dst_id, slot, network)) { LogMessage("DMR Slot %u, invalid access attempt to TG%u (TG blacklisted)", slot, dst_id); return false; - } else if (!DMRAccessControl::dstIdWhitelist(dst_id, slot, true, network)) { + } else if (!CDMRAccessControl::dstIdWhitelist(dst_id, slot, true, network)) { LogMessage("DMR Slot %u, invalid access attempt to TG%u (TG not in whitelist)", slot, dst_id); return false; } else { @@ -202,7 +202,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, CDMRLC* dmrLC) +unsigned int CDMRAccessControl::dstIdRewrite(unsigned int did, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC) { if (slot == 1U && !m_tgRewriteSlot1) return 0U; @@ -245,7 +245,7 @@ unsigned int DMRAccessControl::dstIdRewrite(unsigned int did, unsigned int sid, return 0U; } -void DMRAccessControl::setOverEndTime(unsigned int slot) +void CDMRAccessControl::setOverEndTime(unsigned int slot) { m_time[slot - 1U] = ::time(NULL); } diff --git a/DMRAccessControl.h b/DMRAccessControl.h index 52bef69..cd044ee 100644 --- a/DMRAccessControl.h +++ b/DMRAccessControl.h @@ -20,10 +20,12 @@ #include "DMRLC.h" -class DMRAccessControl { +class CDMRAccessControl { public: static bool validateAccess(unsigned int srcId, unsigned int dstId, unsigned int slot, bool network); + static bool validateSrcId(unsigned int id); + 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, bool m_bmAutoRewrite, bool m_bmRewriteReflectorVoicePrompts); static unsigned int dstIdRewrite(unsigned int id, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC); @@ -53,15 +55,11 @@ private: static bool dstIdBlacklist(unsigned int did, unsigned int slot, bool network); static bool dstIdWhitelist(unsigned int did, unsigned int slot, bool gt4k, bool network); - static bool validateSrcId(unsigned int id); - static time_t m_time[2]; - static unsigned int m_dstRewriteID[2]; static unsigned int m_srcID[2]; - static bool m_tgRewriteSlot1; static bool m_tgRewriteSlot2; static bool m_bmAutoRewrite; diff --git a/DMRControl.cpp b/DMRControl.cpp index b1cfc28..13eb89c 100644 --- a/DMRControl.cpp +++ b/DMRControl.cpp @@ -12,6 +12,7 @@ */ #include "DMRControl.h" +#include "DMRAccessControl.h" #include "Defines.h" #include "DMRCSBK.h" #include "Log.h" @@ -20,23 +21,24 @@ #include #include -CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, 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, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) : +CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blacklist, 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, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool tgRewriteSlot1, bool tgRewriteSlot2, bool bmAutoRewrite, bool bmRewriteReflectorVoicePrompts) : m_id(id), m_colorCode(colorCode), -m_selfOnly(selfOnly), -m_prefixes(prefixes), -m_blackList(blackList), m_modem(modem), m_network(network), m_slot1(1U, timeout), m_slot2(2U, timeout), m_lookup(lookup) { + assert(id != 0U); assert(modem != NULL); assert(display != NULL); assert(lookup != NULL); - CDMRSlot::init(id, colorCode, callHang, selfOnly, prefixes, blackList, DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, modem, network, display, duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); + // Load black and white lists to DMRAccessControl + CDMRAccessControl::init(dstIdBlacklistSlot1RF, dstIdWhitelistSlot1RF, dstIdBlacklistSlot2RF, dstIdWhitelistSlot2RF, dstIdBlacklistSlot1NET, dstIdWhitelistSlot1NET, dstIdBlacklistSlot2NET, dstIdWhitelistSlot2NET, blacklist, selfOnly, prefixes, id, callHang, tgRewriteSlot1, tgRewriteSlot2, bmAutoRewrite, bmRewriteReflectorVoicePrompts); + + CDMRSlot::init(colorCode, callHang, modem, network, display, duplex, m_lookup, rssiMultiplier, rssiOffset, jitter); } CDMRControl::~CDMRControl() @@ -65,29 +67,10 @@ bool CDMRControl::processWakeup(const unsigned char* data) std::string src = m_lookup->find(srcId); - if (m_selfOnly) { - if (srcId != m_id) { - LogMessage("Invalid CSBK BS_Dwn_Act received from %s", src.c_str()); - return false; - } - } else { - if (std::find(m_blackList.begin(), m_blackList.end(), srcId) != m_blackList.end()) { - LogMessage("Invalid CSBK BS_Dwn_Act received from %s", src.c_str()); - return false; - } - - unsigned int prefix = srcId / 10000U; - if (prefix == 0U || prefix > 999U) { - LogMessage("Invalid CSBK BS_Dwn_Act received from %s", src.c_str()); - return false; - } - - if (m_prefixes.size() > 0U) { - if (std::find(m_prefixes.begin(), m_prefixes.end(), prefix) == m_prefixes.end()) { - LogMessage("Invalid CSBK BS_Dwn_Act received from %s", src.c_str()); - return false; - } - } + bool ret = CDMRAccessControl::validateSrcId(srcId); + if (!ret) { + LogMessage("Invalid CSBK BS_Dwn_Act received from %s", src.c_str()); + return false; } if (bsId == 0xFFFFFFU) { diff --git a/DMRControl.h b/DMRControl.h index 739d137..bad4850 100644 --- a/DMRControl.h +++ b/DMRControl.h @@ -30,7 +30,7 @@ class CDMRControl { public: - CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blackList, 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, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts); + CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& blacklist, 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, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool tgRewriteSlot1, bool tgRewriteSlot2, bool bmAutoRewrite, bool bmRewriteReflectorVoicePrompts); ~CDMRControl(); bool processWakeup(const unsigned char* data); @@ -44,16 +44,13 @@ public: void clock(); private: - unsigned int m_id; - unsigned int m_colorCode; - bool m_selfOnly; - std::vector m_prefixes; - std::vector m_blackList; - CModem* m_modem; - CDMRNetwork* m_network; - CDMRSlot m_slot1; - CDMRSlot m_slot2; - CDMRLookup* m_lookup; + unsigned int m_id; + unsigned int m_colorCode; + CModem* m_modem; + CDMRNetwork* m_network; + CDMRSlot m_slot1; + CDMRSlot m_slot2; + CDMRLookup* m_lookup; }; #endif diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 7c81714..282de50 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -28,11 +28,7 @@ #include #include -unsigned int CDMRSlot::m_id = 0U; unsigned int CDMRSlot::m_colorCode = 0U; -bool CDMRSlot::m_selfOnly = false; -std::vector CDMRSlot::m_prefixes; -std::vector CDMRSlot::m_blackList; CModem* CDMRSlot::m_modem = NULL; CDMRNetwork* CDMRSlot::m_network = NULL; @@ -155,12 +151,12 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) unsigned int srcId = lc->getSrcId(); unsigned int dstId = lc->getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) { + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) { delete lc; return; } - unsigned int rewriteId = DMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, false, lc); + unsigned int rewriteId = CDMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, false, lc); if (rewriteId != 0U) { lc->setDstId(rewriteId); dstId = rewriteId; @@ -263,7 +259,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); writeEndRF(); - DMRAccessControl::setOverEndTime(m_slotNo); + CDMRAccessControl::setOverEndTime(m_slotNo); } else if (dataType == DT_DATA_HEADER) { if (m_rfState == RS_RF_DATA) return; @@ -277,7 +273,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) unsigned int srcId = dataHeader.getSrcId(); unsigned int dstId = dataHeader.getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) return; m_rfFrames = dataHeader.getBlocks(); @@ -333,7 +329,7 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) unsigned int srcId = csbk.getSrcId(); unsigned int dstId = csbk.getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) return; // Regenerate the CSBK data @@ -491,12 +487,12 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len) unsigned int srcId = lc->getSrcId(); unsigned int dstId = lc->getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) { + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, false)) { delete lc; return; } - unsigned int rewriteId = DMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, false, lc); + unsigned int rewriteId = CDMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, false, lc); if (rewriteId != 0U) { lc->setDstId(rewriteId); dstId = rewriteId; @@ -778,7 +774,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { delete lc; return; } @@ -786,7 +782,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netLC = lc; // Test dst rewrite - unsigned int rewriteId = DMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); + unsigned int rewriteId = CDMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); if (rewriteId != 0U) { m_netLC->setDstId(rewriteId); dstId = rewriteId; @@ -853,7 +849,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { delete lc; return; } @@ -861,7 +857,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netLC = lc; // Test dst rewrite - unsigned int rewriteId = DMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); + unsigned int rewriteId = CDMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); if (rewriteId != 0U) { m_netLC->setDstId(rewriteId); dstId = rewriteId; @@ -979,7 +975,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) LogMessage("DMR Slot %u, received network end of voice transmission, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); writeEndNet(); - DMRAccessControl::setOverEndTime(m_slotNo); + CDMRAccessControl::setOverEndTime(m_slotNo); } else if (dataType == DT_DATA_HEADER) { if (m_netState == RS_NET_DATA) return; @@ -997,7 +993,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int srcId = dataHeader.getSrcId(); unsigned int dstId = dataHeader.getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) return; m_netFrames = dataHeader.getBlocks(); @@ -1043,7 +1039,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) { delete lc; return; } @@ -1051,7 +1047,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netLC = lc; // Test dst rewrite - unsigned int rewriteId = DMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); + unsigned int rewriteId = CDMRAccessControl::dstIdRewrite(dstId, srcId, m_slotNo, true, m_netLC); if (rewriteId != 0U) { m_netLC->setDstId(rewriteId); dstId = rewriteId; @@ -1209,7 +1205,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) unsigned int srcId = csbk.getSrcId(); unsigned int dstId = csbk.getDstId(); - if (!DMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) + if (!CDMRAccessControl::validateAccess(srcId, dstId, m_slotNo, true)) return; // Regenerate the CSBK data @@ -1431,18 +1427,13 @@ void CDMRSlot::writeQueueNet(const unsigned char *data) m_queue.addData(data, len); } -void CDMRSlot::init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlacklist, 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, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts) +void CDMRSlot::init(unsigned int colorCode, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter) { - assert(id != 0U); assert(modem != NULL); assert(display != NULL); assert(lookup != NULL); - m_id = id; m_colorCode = colorCode; - m_selfOnly = selfOnly; - m_prefixes = prefixes; -// m_blackList = blackList; m_modem = modem; m_network = network; m_display = display; @@ -1464,9 +1455,6 @@ void CDMRSlot::init(unsigned int id, unsigned int colorCode, unsigned int callHa slotType.setColorCode(colorCode); slotType.setDataType(DT_IDLE); slotType.getData(m_idle + 2U); - - //Load black and white lists to DMRAccessControl - DMRAccessControl::init(DstIdBlacklistSlot1RF, DstIdWhitelistSlot1RF, DstIdBlacklistSlot2RF, DstIdWhitelistSlot2RF, DstIdBlacklistSlot1NET, DstIdWhitelistSlot1NET, DstIdBlacklistSlot2NET, DstIdWhitelistSlot2NET, SrcIdBlacklist, m_selfOnly, m_prefixes, m_id,callHang, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); } diff --git a/DMRSlot.h b/DMRSlot.h index cdb6157..1675c3a 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -50,7 +50,7 @@ public: void clock(); - static void init(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, const std::vector& prefixes, const std::vector& SrcIdBlackList, 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, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter, bool TGRewriteSlot1, bool TGRewriteSlot2, bool BMAutoRewrite, bool BMRewriteReflectorVoicePrompts); + static void init(unsigned int colorCode, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, int rssiMultiplier, int rssiOffset, unsigned int jitter); private: unsigned int m_slotNo; @@ -87,11 +87,7 @@ private: unsigned char m_rssi; FILE* m_fp; - static unsigned int m_id; static unsigned int m_colorCode; - static bool m_selfOnly; - static std::vector m_prefixes; - static std::vector m_blackList; static CModem* m_modem; static CDMRNetwork* m_network; diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 16915de..b253299 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -334,11 +334,11 @@ int CMMDVMHost::run() unsigned int id = m_conf.getDMRId(); unsigned int colorCode = m_conf.getDMRColorCode(); bool selfOnly = m_conf.getDMRSelfOnly(); - bool TGRewriteSlot1 = m_conf.getDMRTGRewriteSlot1(); - bool TGRewriteSlot2 = m_conf.getDMRTGRewriteSlot2(); - bool BMAutoRewrite = m_conf.getDMRBMAutoRewrite(); - bool BMRewriteReflectorVoicePrompts = m_conf.getDMRBMRewriteReflectorVoicePrompts(); - std::vector prefixes = m_conf.getDMRPrefixes(); + bool tgRewriteSlot1 = m_conf.getDMRTGRewriteSlot1(); + bool tgRewriteSlot2 = m_conf.getDMRTGRewriteSlot2(); + bool bmAutoRewrite = m_conf.getDMRBMAutoRewrite(); + bool bmRewriteReflectorVoicePrompts = m_conf.getDMRBMRewriteReflectorVoicePrompts(); + std::vector prefixes = m_conf.getDMRPrefixes(); std::vector blackList = m_conf.getDMRBlackList(); std::vector dstIDBlackListSlot1RF = m_conf.getDMRDstIdBlacklistSlot1RF(); std::vector dstIDBlackListSlot2RF = m_conf.getDMRDstIdBlacklistSlot2RF(); @@ -395,17 +395,16 @@ int CMMDVMHost::run() LogInfo(" RSSI Offset: %d", rssiOffset); } - if (TGRewriteSlot1) + if (tgRewriteSlot1) LogInfo(" TG Rewrite Slot 1 enabled"); - - if (TGRewriteSlot2) + if (tgRewriteSlot2) LogInfo(" TG Rewrite Slot 2 enabled"); - if (BMAutoRewrite) + if (bmAutoRewrite) LogInfo(" BrandMeister Auto Rewrite enabled"); - if (BMRewriteReflectorVoicePrompts) + if (bmRewriteReflectorVoicePrompts) LogInfo(" BrandMeister Rewrite Reflector Voice Prompts enabled"); - dmr = new CDMRControl(id, colorCode, callHang, selfOnly, prefixes, blackList,dstIDBlackListSlot1RF,dstIDWhiteListSlot1RF, dstIDBlackListSlot2RF, dstIDWhiteListSlot2RF, dstIDBlackListSlot1NET,dstIDWhiteListSlot1NET, dstIDBlackListSlot2NET, dstIDWhiteListSlot2NET, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, TGRewriteSlot1, TGRewriteSlot2, BMAutoRewrite, BMRewriteReflectorVoicePrompts); + dmr = new CDMRControl(id, colorCode, callHang, selfOnly, prefixes, blackList, dstIDBlackListSlot1RF, dstIDWhiteListSlot1RF, dstIDBlackListSlot2RF, dstIDWhiteListSlot2RF, dstIDBlackListSlot1NET,dstIDWhiteListSlot1NET, dstIDBlackListSlot2NET, dstIDWhiteListSlot2NET, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_lookup, rssiMultiplier, rssiOffset, jitter, tgRewriteSlot1, tgRewriteSlot2, bmAutoRewrite, bmRewriteReflectorVoicePrompts); m_dmrTXTimer.setTimeout(txHang); }