Move DMR Access Control to new class.

This commit is contained in:
Simon
2016-07-10 16:46:02 +01:00
parent 66415e004e
commit f313615708
3 changed files with 43 additions and 28 deletions

View File

@@ -23,7 +23,13 @@ std::vector<unsigned int> DMRAccessControl::m_dstBlackListSlot2;
std::vector<unsigned int> DMRAccessControl::m_dstWhiteListSlot1;
std::vector<unsigned int> DMRAccessControl::m_dstWhiteListSlot2;
void DMRAccessControl::init(const std::vector<unsigned int>& DstIdBlacklistSlot1, const std::vector<unsigned int>& DstIdWhitelistSlot1, const std::vector<unsigned int>& DstIdBlacklistSlot2, const std::vector<unsigned int>& DstIdWhitelistSlot2)
std::vector<unsigned int> DMRAccessControl::m_SrcIdBlacklist;
std::vector<unsigned int> DMRAccessControl::m_prefixes;
bool DMRAccessControl::m_selfOnly;
unsigned int DMRAccessControl::m_id;
void DMRAccessControl::init(const std::vector<unsigned int>& DstIdBlacklistSlot1, const std::vector<unsigned int>& DstIdWhitelistSlot1, const std::vector<unsigned int>& DstIdBlacklistSlot2, const std::vector<unsigned int>& DstIdWhitelistSlot2, const std::vector<unsigned int>& SrcIdBlacklist, bool selfOnly, const std::vector<unsigned int>& prefixes,unsigned int id)
{
m_dstBlackListSlot1 = DstIdBlacklistSlot1;
@@ -84,3 +90,22 @@ bool DMRAccessControl::DstIdWhitelist(unsigned int did, unsigned int slot, bool
return false;
}
bool DMRAccessControl::validateSrcId(unsigned int id)
{
if (m_selfOnly) {
return id == m_id;
} else {
if (std::find(m_SrcIdBlacklist.begin(), m_SrcIdBlacklist.end(), id) != m_SrcIdBlacklist.end())
return false;
unsigned int prefix = id / 10000U;
if (prefix == 0U || prefix > 999U)
return false;
if (m_prefixes.size() == 0U)
return true;
return std::find(m_prefixes.begin(), m_prefixes.end(), prefix) != m_prefixes.end();
}
}