add RID and TGID resolution if rule files are available; correct some display bugs;

pull/72/head
Bryan Biedenkapp 1 year ago
parent cd56011f87
commit 6bed22ccce

@ -122,15 +122,19 @@ public:
std::ostringstream peerOss; std::ostringstream peerOss;
peerOss << std::setw(9) << std::setfill('0') << peerId; peerOss << std::setw(9) << std::setfill('0') << peerId;
std::string srcAlias = resolveRID(srcId);
// pad TGs properly // pad TGs properly
std::ostringstream tgidOss; std::ostringstream tgidOss;
tgidOss << std::setw(5) << std::setfill('0') << dstId; tgidOss << std::setw(5) << std::setfill('0') << dstId;
std::string dstAlias = resolveTGID(dstId);
// build list view entry // build list view entry
const std::array<std::string, 3U> columns = { const std::array<std::string, 5U> columns = {
peerOss.str(), peerOss.str(),
std::to_string(srcId), std::to_string(srcId), srcAlias,
tgidOss.str() tgidOss.str(), dstAlias
}; };
const finalcut::FStringList line(columns.cbegin(), columns.cend()); const finalcut::FStringList line(columns.cbegin(), columns.cend());
@ -187,21 +191,23 @@ private:
// configure list view columns // configure list view columns
m_listView.addColumn("Peer ID", 10); m_listView.addColumn("Peer ID", 10);
m_listView.addColumn("RID", 10); m_listView.addColumn("RID", 10);
m_listView.addColumn("RID Alias", 15);
m_listView.addColumn("TGID", 9); m_listView.addColumn("TGID", 9);
m_listView.addColumn("TGID Alias", 15);
// set right alignment for TGID // set right alignment for TGID
m_listView.setColumnAlignment(1, finalcut::Align::Right); m_listView.setColumnAlignment(1, finalcut::Align::Right);
m_listView.setColumnAlignment(2, finalcut::Align::Right); m_listView.setColumnAlignment(2, finalcut::Align::Right);
m_listView.setColumnAlignment(3, finalcut::Align::Right); m_listView.setColumnAlignment(4, finalcut::Align::Right);
// set type of sorting // set type of sorting
m_listView.setColumnSortType(1, finalcut::SortType::Name); m_listView.setColumnSortType(1, finalcut::SortType::Name);
m_listView.setColumnSortType(2, finalcut::SortType::Name); m_listView.setColumnSortType(2, finalcut::SortType::Name);
m_listView.setColumnSortType(3, finalcut::SortType::Name); m_listView.setColumnSortType(4, finalcut::SortType::Name);
// sort by TGID // sort by TGID
m_listView.setColumnSort(1, finalcut::SortOrder::Ascending); m_listView.setColumnSort(1, finalcut::SortOrder::Ascending);
m_listView.setColumnSort(3, finalcut::SortOrder::Ascending); m_listView.setColumnSort(4, finalcut::SortOrder::Ascending);
setFocusWidget(&m_listView); setFocusWidget(&m_listView);
redraw(); redraw();

@ -30,4 +30,7 @@
#undef __EXE_NAME__ #undef __EXE_NAME__
#define __EXE_NAME__ "sysview" #define __EXE_NAME__ "sysview"
#undef __NETVER__
#define __NETVER__ "SYSVIEW_R" VERSION_MAJOR VERSION_REV VERSION_MINOR
#endif // __DEFINES_H__ #endif // __DEFINES_H__

@ -371,14 +371,15 @@ protected:
// is this the end of the call stream? // is this the end of the call stream?
if (dataSync && (dataType == DMRDEF::DataType::TERMINATOR_WITH_LC)) { if (dataSync && (dataType == DMRDEF::DataType::TERMINATOR_WITH_LC)) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "DMR, invalid TERMINATOR, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "DMR, invalid TERMINATOR, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
RxStatus status; RxStatus status;
auto it = std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); }); auto it = std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); });
if (it == m_dmrStatus.end()) { if (it == m_dmrStatus.end()) {
LogError(LOG_NET, "DMR, tried to end call for non-existent call in progress?, srcId = %u, dstId = %u", LogError(LOG_NET, "DMR, tried to end call for non-existent call in progress?, srcId = %u (%s), dstId = %u (%s)",
srcId, dstId); srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
else { else {
status = it->second; status = it->second;
@ -389,15 +390,16 @@ protected:
if (std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); }) != m_dmrStatus.end()) { if (std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); }) != m_dmrStatus.end()) {
m_dmrStatus.erase(dstId); m_dmrStatus.erase(dstId);
LogMessage(LOG_NET, "DMR, Call End, srcId = %u, dstId = %u, duration = %u", LogMessage(LOG_NET, "DMR, Call End, srcId = %u (%s), dstId = %u (%s), duration = %u",
srcId, dstId, duration / 1000); srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str(), duration / 1000);
} }
} }
// is this a new call stream? // is this a new call stream?
if (dataSync && (dataType == DMRDEF::DataType::VOICE_LC_HEADER)) { if (dataSync && (dataType == DMRDEF::DataType::VOICE_LC_HEADER)) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "DMR, invalid call, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "DMR, invalid call, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
auto it = std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); }); auto it = std::find_if(m_dmrStatus.begin(), m_dmrStatus.end(), [&](StatusMapPair x) { return (x.second.dstId == dstId && x.second.slotNo == slotNo); });
@ -410,7 +412,8 @@ protected:
status.slotNo = slotNo; status.slotNo = slotNo;
m_dmrStatus[dstId] = status; // this *could* be an issue if a dstId appears on both slots somehow... m_dmrStatus[dstId] = status; // this *could* be an issue if a dstId appears on both slots somehow...
LogMessage(LOG_NET, "DMR, Call Start, srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_NET, "DMR, Call Start, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
@ -432,7 +435,8 @@ protected:
} }
break; break;
default: default:
LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, srcId = %u, dstId = %u", dmrData.getSlotNo(), csbk->toString().c_str(), srcId, dstId); LogMessage(LOG_NET, "DMR Slot %u, DT_CSBK, %s, srcId = %u (%s), dstId = %u (%s)", dmrData.getSlotNo(), csbk->toString().c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
break; break;
} }
} }
@ -483,7 +487,8 @@ protected:
// is this the end of the call stream? // is this the end of the call stream?
if ((duid == P25DEF::DUID::TDU) || (duid == P25DEF::DUID::TDULC)) { if ((duid == P25DEF::DUID::TDU) || (duid == P25DEF::DUID::TDULC)) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "P25, invalid TDU, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "P25, invalid TDU, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
RxStatus status = m_p25Status[dstId]; RxStatus status = m_p25Status[dstId];
@ -492,15 +497,16 @@ protected:
if (std::find_if(m_p25Status.begin(), m_p25Status.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }) != m_p25Status.end()) { if (std::find_if(m_p25Status.begin(), m_p25Status.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }) != m_p25Status.end()) {
m_p25Status.erase(dstId); m_p25Status.erase(dstId);
LogMessage(LOG_NET, "P25, Call End, srcId = %u, dstId = %u, duration = %u", LogMessage(LOG_NET, "P25, Call End, srcId = %u (%s), dstId = %u (%s), duration = %u",
srcId, dstId, duration / 1000); srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str(), duration / 1000);
} }
} }
// is this a new call stream? // is this a new call stream?
if ((duid != P25DEF::DUID::TDU) && (duid != P25DEF::DUID::TDULC)) { if ((duid != P25DEF::DUID::TDU) && (duid != P25DEF::DUID::TDULC)) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "P25, invalid call, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "P25, invalid call, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
auto it = std::find_if(m_p25Status.begin(), m_p25Status.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }); auto it = std::find_if(m_p25Status.begin(), m_p25Status.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; });
@ -512,7 +518,8 @@ protected:
status.dstId = dstId; status.dstId = dstId;
m_p25Status[dstId] = status; m_p25Status[dstId] = status;
LogMessage(LOG_NET, "P25, Call Start, srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_NET, "P25, Call Start, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
} }
@ -521,7 +528,8 @@ protected:
case P25DEF::DUID::TDU: case P25DEF::DUID::TDU:
case P25DEF::DUID::TDULC: case P25DEF::DUID::TDULC:
if (duid == P25DEF::DUID::TDU) { if (duid == P25DEF::DUID::TDU) {
LogMessage(LOG_NET, P25_TDU_STR ", srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_NET, P25_TDU_STR ", srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
else { else {
std::unique_ptr<lc::TDULC> tdulc = lc::tdulc::TDULCFactory::createTDULC(data.get()); std::unique_ptr<lc::TDULC> tdulc = lc::tdulc::TDULCFactory::createTDULC(data.get());
@ -529,7 +537,8 @@ protected:
LogWarning(LOG_NET, P25_TDULC_STR ", undecodable TDULC"); LogWarning(LOG_NET, P25_TDULC_STR ", undecodable TDULC");
} }
else { else {
LogMessage(LOG_NET, P25_TDULC_STR ", srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_NET, P25_TDULC_STR ", srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
break; break;
@ -544,49 +553,55 @@ protected:
case P25DEF::TSBKO::IOSP_GRP_VCH: case P25DEF::TSBKO::IOSP_GRP_VCH:
case P25DEF::TSBKO::IOSP_UU_VCH: case P25DEF::TSBKO::IOSP_UU_VCH:
{ {
LogMessage(LOG_NET, P25_TSDU_STR ", %s, emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u, dstId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, emerg = %u, encrypt = %u, prio = %u, chNo = %u, srcId = %u (%s), dstId = %u (%s)",
tsbk->toString(true).c_str(), tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(), srcId, dstId); tsbk->toString(true).c_str(), tsbk->getEmergency(), tsbk->getEncrypted(), tsbk->getPriority(), tsbk->getGrpVchNo(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_UU_ANS: case P25DEF::TSBKO::IOSP_UU_ANS:
{ {
lc::tsbk::IOSP_UU_ANS* iosp = static_cast<lc::tsbk::IOSP_UU_ANS*>(tsbk.get()); lc::tsbk::IOSP_UU_ANS* iosp = static_cast<lc::tsbk::IOSP_UU_ANS*>(tsbk.get());
if (iosp->getResponse() > 0U) { if (iosp->getResponse() > 0U) {
LogMessage(LOG_NET, P25_TSDU_STR ", %s, response = $%02X, srcId = %u, dstId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, response = $%02X, srcId = %u (%s), dstId = %u (%s)",
tsbk->toString(true).c_str(), iosp->getResponse(), srcId, dstId); tsbk->toString(true).c_str(), iosp->getResponse(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
break; break;
case P25DEF::TSBKO::IOSP_STS_UPDT: case P25DEF::TSBKO::IOSP_STS_UPDT:
{ {
lc::tsbk::IOSP_STS_UPDT* iosp = static_cast<lc::tsbk::IOSP_STS_UPDT*>(tsbk.get()); lc::tsbk::IOSP_STS_UPDT* iosp = static_cast<lc::tsbk::IOSP_STS_UPDT*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, status = $%02X, srcId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, status = $%02X, srcId = %u (%s)",
tsbk->toString(true).c_str(), iosp->getStatus(), srcId); tsbk->toString(true).c_str(), iosp->getStatus(), srcId, resolveRID(srcId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_MSG_UPDT: case P25DEF::TSBKO::IOSP_MSG_UPDT:
{ {
lc::tsbk::IOSP_MSG_UPDT* iosp = static_cast<lc::tsbk::IOSP_MSG_UPDT*>(tsbk.get()); lc::tsbk::IOSP_MSG_UPDT* iosp = static_cast<lc::tsbk::IOSP_MSG_UPDT*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, message = $%02X, srcId = %u, dstId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, message = $%02X, srcId = %u (%s), dstId = %u (%s)",
tsbk->toString(true).c_str(), iosp->getMessage(), srcId, dstId); tsbk->toString(true).c_str(), iosp->getMessage(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_RAD_MON: case P25DEF::TSBKO::IOSP_RAD_MON:
{ {
lc::tsbk::IOSP_RAD_MON* iosp = static_cast<lc::tsbk::IOSP_RAD_MON*>(tsbk.get()); lc::tsbk::IOSP_RAD_MON* iosp = static_cast<lc::tsbk::IOSP_RAD_MON*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", tsbk->toString(true).c_str(), srcId, dstId); LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s), dstId = %u (%s)", tsbk->toString(true).c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_CALL_ALRT: case P25DEF::TSBKO::IOSP_CALL_ALRT:
{ {
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", tsbk->toString(true).c_str(), srcId, dstId); LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s), dstId = %u (%s)", tsbk->toString(true).c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_ACK_RSP: case P25DEF::TSBKO::IOSP_ACK_RSP:
{ {
lc::tsbk::IOSP_ACK_RSP* iosp = static_cast<lc::tsbk::IOSP_ACK_RSP*>(tsbk.get()); lc::tsbk::IOSP_ACK_RSP* iosp = static_cast<lc::tsbk::IOSP_ACK_RSP*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, AIV = %u, serviceType = $%02X, srcId = %u, dstId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, AIV = %u, serviceType = $%02X, srcId = %u (%s), dstId = %u (%s)",
tsbk->toString(true).c_str(), iosp->getAIV(), iosp->getService(), dstId, srcId); tsbk->toString(true).c_str(), iosp->getAIV(), iosp->getService(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::IOSP_EXT_FNCT: case P25DEF::TSBKO::IOSP_EXT_FNCT:
@ -601,31 +616,34 @@ protected:
// non-emergency mode is a TSBKO::OSP_DENY_RSP // non-emergency mode is a TSBKO::OSP_DENY_RSP
if (!tsbk->getEmergency()) { if (!tsbk->getEmergency()) {
lc::tsbk::OSP_DENY_RSP* osp = static_cast<lc::tsbk::OSP_DENY_RSP*>(tsbk.get()); lc::tsbk::OSP_DENY_RSP* osp = static_cast<lc::tsbk::OSP_DENY_RSP*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, AIV = %u, reason = $%02X, srcId = %u, dstId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, AIV = %u, reason = $%02X, srcId = %u (%s), dstId = %u (%s)",
osp->toString().c_str(), osp->getAIV(), osp->getResponse(), osp->getSrcId(), osp->getDstId()); osp->toString().c_str(), osp->getAIV(), osp->getResponse(),
osp->getSrcId(), resolveRID(osp->getSrcId()).c_str(), osp->getDstId(), resolveTGID(osp->getDstId()).c_str());
} else { } else {
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", tsbk->toString().c_str(), srcId, dstId); LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s), dstId = %u (%s)", tsbk->toString().c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
break; break;
case P25DEF::TSBKO::IOSP_GRP_AFF: case P25DEF::TSBKO::IOSP_GRP_AFF:
{ {
lc::tsbk::IOSP_GRP_AFF* iosp = static_cast<lc::tsbk::IOSP_GRP_AFF*>(tsbk.get()); lc::tsbk::IOSP_GRP_AFF* iosp = static_cast<lc::tsbk::IOSP_GRP_AFF*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, sysId = $%03X, srcId = %u, dstId = %u", tsbk->toString().c_str(), LogMessage(LOG_NET, P25_TSDU_STR ", %s, sysId = $%03X, srcId = %u (%s), dstId = %u (%s)", tsbk->toString().c_str(),
iosp->getSysId(), srcId, dstId); iosp->getSysId(), srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::OSP_U_DEREG_ACK: case P25DEF::TSBKO::OSP_U_DEREG_ACK:
{ {
lc::tsbk::OSP_U_DEREG_ACK* iosp = static_cast<lc::tsbk::OSP_U_DEREG_ACK*>(tsbk.get()); lc::tsbk::OSP_U_DEREG_ACK* iosp = static_cast<lc::tsbk::OSP_U_DEREG_ACK*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u", LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s)",
tsbk->toString(true).c_str(), srcId); tsbk->toString(true).c_str(), srcId, resolveRID(srcId).c_str());
} }
break; break;
case P25DEF::TSBKO::OSP_LOC_REG_RSP: case P25DEF::TSBKO::OSP_LOC_REG_RSP:
{ {
lc::tsbk::OSP_LOC_REG_RSP* osp = static_cast<lc::tsbk::OSP_LOC_REG_RSP*>(tsbk.get()); lc::tsbk::OSP_LOC_REG_RSP* osp = static_cast<lc::tsbk::OSP_LOC_REG_RSP*>(tsbk.get());
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", osp->toString().c_str(), srcId, dstId); LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s), dstId = %u (%s)", osp->toString().c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
break; break;
case P25DEF::TSBKO::OSP_ADJ_STS_BCAST: case P25DEF::TSBKO::OSP_ADJ_STS_BCAST:
@ -636,7 +654,8 @@ protected:
} }
break; break;
default: default:
LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u, dstId = %u", tsbk->toString().c_str(), srcId, dstId); LogMessage(LOG_NET, P25_TSDU_STR ", %s, srcId = %u (%s), dstId = %u (%s)", tsbk->toString().c_str(),
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
break; break;
} }
} }
@ -672,7 +691,8 @@ protected:
// is this the end of the call stream? // is this the end of the call stream?
if (messageType == NXDDEF::MessageType::RTCH_TX_REL || messageType == NXDDEF::MessageType::RTCH_TX_REL_EX) { if (messageType == NXDDEF::MessageType::RTCH_TX_REL || messageType == NXDDEF::MessageType::RTCH_TX_REL_EX) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "NXDN, invalid TX_REL, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "NXDN, invalid TX_REL, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
RxStatus status = m_nxdnStatus[dstId]; RxStatus status = m_nxdnStatus[dstId];
@ -681,15 +701,16 @@ protected:
if (std::find_if(m_nxdnStatus.begin(), m_nxdnStatus.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }) != m_nxdnStatus.end()) { if (std::find_if(m_nxdnStatus.begin(), m_nxdnStatus.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }) != m_nxdnStatus.end()) {
m_nxdnStatus.erase(dstId); m_nxdnStatus.erase(dstId);
LogMessage(LOG_NET, "NXDN, Call End, srcId = %u, dstId = %u, duration = %u", LogMessage(LOG_NET, "NXDN, Call End, srcId = %u (%s), dstId = %u (%s), duration = %u",
srcId, dstId, duration / 1000); srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str(), duration / 1000);
} }
} }
// is this a new call stream? // is this a new call stream?
if ((messageType != NXDDEF::MessageType::RTCH_TX_REL && messageType != NXDDEF::MessageType::RTCH_TX_REL_EX)) { if ((messageType != NXDDEF::MessageType::RTCH_TX_REL && messageType != NXDDEF::MessageType::RTCH_TX_REL_EX)) {
if (srcId == 0U && dstId == 0U) { if (srcId == 0U && dstId == 0U) {
LogWarning(LOG_NET, "NXDN, invalid call, srcId = %u, dstId = %u", srcId, dstId); LogWarning(LOG_NET, "NXDN, invalid call, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
auto it = std::find_if(m_nxdnStatus.begin(), m_nxdnStatus.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; }); auto it = std::find_if(m_nxdnStatus.begin(), m_nxdnStatus.end(), [&](StatusMapPair x) { return x.second.dstId == dstId; });
@ -701,7 +722,8 @@ protected:
status.dstId = dstId; status.dstId = dstId;
m_nxdnStatus[dstId] = status; m_nxdnStatus[dstId] = status;
LogMessage(LOG_NET, "NXDN, Call Start, srcId = %u, dstId = %u", srcId, dstId); LogMessage(LOG_NET, "NXDN, Call Start, srcId = %u (%s), dstId = %u (%s)",
srcId, resolveRID(srcId).c_str(), dstId, resolveTGID(dstId).c_str());
} }
} }
} }

@ -66,6 +66,56 @@ void fatal(const char* msg, ...)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
/**
* @brief Helper to resolve a TGID to a textual name.
* @param id Talkgroup ID.
* @return std::string Textual name for TGID.
*/
std::string resolveRID(uint32_t id)
{
switch (id) {
case DMRDEF::WUID_REGI:
return std::string("DMR REG SVCS");
case DMRDEF::WUID_STUNI:
return std::string("DMR MS STUN");
case DMRDEF::WUID_AUTHI:
return std::string("DMR AUTH SVCS");
case DMRDEF::WUID_KILLI:
return std::string("DMR MS KILL");
case DMRDEF::WUID_ALLL:
return std::string("ALL CALL SW");
case P25DEF::WUID_REG:
return std::string("REG SVCS");
case P25DEF::WUID_FNE:
return std::string("SYS/FNE");
case P25DEF::WUID_ALL:
return std::string("ALL CALL");
}
auto entry = g_ridLookup->find(id);
if (!entry.radioDefault()) {
return entry.radioAlias();
}
return std::string("UNK");
}
/**
* @brief Helper to resolve a TGID to a textual name.
* @param id Talkgroup ID.
* @return std::string Textual name for TGID.
*/
std::string resolveTGID(uint32_t id)
{
auto entry = g_tidLookup->find(id);
if (!entry.isInvalid()) {
return entry.name();
}
return std::string("UNK");
}
/** /**
* @brief Initializes peer network connectivity. * @brief Initializes peer network connectivity.
* @returns bool * @returns bool
@ -255,8 +305,8 @@ int main(int argc, char** argv)
g_ridLookup->read(); g_ridLookup->read();
// try to load talkgroup IDs table // try to load talkgroup IDs table
std::string tidLookupFile = g_conf["talkgroup_id"]["file"].as<std::string>(); std::string tidLookupFile = g_conf["talkgroup_rules"]["file"].as<std::string>();
uint32_t tidReloadTime = g_conf["talkgroup_id"]["time"].as<uint32_t>(0U); uint32_t tidReloadTime = g_conf["talkgroup_rules"]["time"].as<uint32_t>(0U);
LogInfo("Talkgroup Rule Lookups"); LogInfo("Talkgroup Rule Lookups");
LogInfo(" File: %s", tidLookupFile.length() > 0U ? tidLookupFile.c_str() : "None"); LogInfo(" File: %s", tidLookupFile.length() > 0U ? tidLookupFile.c_str() : "None");

@ -33,6 +33,9 @@
#undef __EXE_NAME__ #undef __EXE_NAME__
#define __EXE_NAME__ "sysview" #define __EXE_NAME__ "sysview"
#undef __NETVER__
#define __NETVER__ "SYSVIEW_R" VERSION_MAJOR VERSION_REV VERSION_MINOR
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Externs // Externs
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -66,6 +69,20 @@ extern lookups::IdenTableLookup* g_idenTable;
*/ */
extern HOST_SW_API void fatal(const char* msg, ...); extern HOST_SW_API void fatal(const char* msg, ...);
/**
* @brief Helper to resolve a TGID to a textual name.
* @param id Talkgroup ID.
* @return std::string Textual name for TGID.
*/
extern HOST_SW_API std::string resolveRID(uint32_t id);
/**
* @brief Helper to resolve a TGID to a textual name.
* @param id Talkgroup ID.
* @return std::string Textual name for TGID.
*/
extern HOST_SW_API std::string resolveTGID(uint32_t id);
/** /**
* @brief Initializes peer network connectivity. * @brief Initializes peer network connectivity.
* @returns bool * @returns bool

Loading…
Cancel
Save

Powered by TurnKey Linux.