DMRAccessControl: add per-slot dstid, src id and time

This commit is contained in:
Simon 2016-10-17 13:59:52 +01:00
parent 9f65e2f4ef
commit 715369e06e
3 changed files with 21 additions and 17 deletions

View file

@ -39,12 +39,12 @@ bool DMRAccessControl::m_selfOnly = false;
unsigned int DMRAccessControl::m_id = 0U;
unsigned int DMRAccessControl::m_dstRewriteID = 0U;
unsigned int DMRAccessControl::m_srcID = 0U;
unsigned int DMRAccessControl::m_dstRewriteID[2];
unsigned int DMRAccessControl::m_srcID[2];
CDMRLC* DMRAccessControl::m_lastdmrLC;
time_t DMRAccessControl::m_time;
time_t DMRAccessControl::m_time[2];
int DMRAccessControl::m_callHang;
@ -213,8 +213,9 @@ unsigned int DMRAccessControl::dstIdRewrite(unsigned int did, unsigned int sid,
time_t currenttime = ::time(NULL);
if (network) {
m_dstRewriteID = did;
m_srcID = sid;
m_dstRewriteID[slot] = did;
m_srcID[slot] = sid;
//not needed at present - for direct dial, which requires change at master end.
//memcpy(&m_lastdmrLC, &dmrLC, sizeof(dmrLC));
@ -229,22 +230,22 @@ unsigned int DMRAccessControl::dstIdRewrite(unsigned int did, unsigned int sid,
} else {
return 0U;
}
} else if (m_bmAutoRewrite && did == 9U && m_dstRewriteID != 9U && m_dstRewriteID != 0U && (m_time + m_callHang) > currenttime && dmrLC->getFLCO() == FLCO_GROUP ) {
} else if (m_bmAutoRewrite && did == 9U && m_dstRewriteID[slot] != 9U && m_dstRewriteID[slot] != 0U && (m_time[slot] + 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;
return m_dstRewriteID[slot];
} else if (m_bmAutoRewrite && (did < 4000U || did > 5000U) && did > 0U && did !=9U && did < 99999U && dmrLC->getFLCO() == FLCO_USER_USER) {
m_dstRewriteID = did;
m_dstRewriteID[slot] = did;
dmrLC->setFLCO(FLCO_GROUP);
LogMessage("DMR Slot %u, Rewrite outbound private call to %u Group Call (Connect talkgroup by private call)",slot,did);
return did;
} else if (m_bmAutoRewrite && (did < 4000U || did > 5000U) && did > 0U && did !=9U && did > 99999U) {
m_dstRewriteID = did;
m_dstRewriteID[slot] = did;
}
return 0U;
}
void DMRAccessControl::setOverEndTime()
void DMRAccessControl::setOverEndTime(unsigned int slot)
{
m_time = ::time(NULL);
m_time[slot] = ::time(NULL);
}

View file

@ -28,7 +28,7 @@ public:
static unsigned int dstIdRewrite(unsigned int id, unsigned int sid, unsigned int slot, bool network, CDMRLC* dmrLC);
static void setOverEndTime();
static void setOverEndTime(unsigned int slot);
private:
static std::vector<unsigned int> m_dstBlackListSlot1RF;
@ -55,10 +55,13 @@ private:
static bool validateSrcId(unsigned int id);
static time_t m_time;
static time_t m_time[2];
static unsigned int m_dstRewriteIDslot1;
static unsigned int m_srcIDslot1;
static unsigned int m_dstRewriteID[2];
static unsigned int m_srcID[2];
static unsigned int m_dstRewriteID;
static unsigned int m_srcID;
static bool m_tgRewriteSlot1;
static bool m_tgRewriteSlot2;

View file

@ -261,7 +261,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();
DMRAccessControl::setOverEndTime(m_slotNo);
} else if (dataType == DT_DATA_HEADER) {
if (m_rfState == RS_RF_DATA)
return;
@ -915,7 +915,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();
DMRAccessControl::setOverEndTime(m_slotNo);
} else if (dataType == DT_DATA_HEADER) {
if (m_netState == RS_NET_DATA)
return;