From f3d2bf319be67399a02bb77810d3fb1b5bc91789 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sat, 15 Oct 2022 15:36:24 -0400 Subject: [PATCH] change C++ standard from C++0x to standard C++11; begin swapping C nomenclature for NULL to nullptr where applicable; start removing instances of raw pointers were acceptable in favor of memory safe std::unique_ptr, std::shared_ptr; --- CMakeLists.txt | 8 +- Defines.h | 10 +- host/calibrate/HostCal.cpp | 13 +- host/setup/HostSetup.cpp | 2 +- p25/Audio.cpp | 10 +- p25/Control.cpp | 58 +++---- p25/Control.h | 4 +- p25/NID.cpp | 16 +- p25/P25Utils.cpp | 16 +- p25/Sync.cpp | 2 +- p25/dfsi/LC.cpp | 47 ++--- p25/lc/AMBT.cpp | 2 +- p25/lc/AMBT.h | 2 +- p25/lc/TSBK.cpp | 12 +- p25/lc/TSBK.h | 4 +- p25/lc/tsbk/IOSP_ACK_RSP.cpp | 7 +- p25/lc/tsbk/IOSP_CALL_ALRT.cpp | 7 +- p25/lc/tsbk/IOSP_EXT_FNCT.cpp | 7 +- p25/lc/tsbk/IOSP_GRP_AFF.cpp | 7 +- p25/lc/tsbk/IOSP_GRP_VCH.cpp | 7 +- p25/lc/tsbk/IOSP_MSG_UPDT.cpp | 7 +- p25/lc/tsbk/IOSP_RAD_MON.cpp | 7 +- p25/lc/tsbk/IOSP_STS_UPDT.cpp | 7 +- p25/lc/tsbk/IOSP_UU_ANS.cpp | 7 +- p25/lc/tsbk/IOSP_UU_VCH.cpp | 7 +- p25/lc/tsbk/IOSP_U_REG.cpp | 7 +- p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp | 2 +- p25/lc/tsbk/ISP_AUTH_RESP.cpp | 2 +- p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp | 2 +- p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp | 2 +- p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp | 2 +- p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp | 2 +- p25/lc/tsbk/ISP_LOC_REG_REQ.cpp | 2 +- p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp | 2 +- p25/lc/tsbk/ISP_U_DEREG_REQ.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_ACK_RSP.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_CALL_ALRT.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_EXT_FNCT.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_GRP_AFF.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_MSG_UPDT.cpp | 2 +- p25/lc/tsbk/MBT_IOSP_STS_UPDT.cpp | 2 +- p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp | 2 +- p25/lc/tsbk/MBT_ISP_AUTH_SU_DMD.cpp | 2 +- p25/lc/tsbk/MBT_ISP_CAN_SRV_REQ.cpp | 2 +- p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp | 7 +- p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp | 5 +- p25/lc/tsbk/OSP_DENY_RSP.cpp | 7 +- p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp | 5 +- p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp | 7 +- p25/lc/tsbk/OSP_GRP_AFF_Q.cpp | 5 +- p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp | 5 +- p25/lc/tsbk/OSP_IDEN_UP.cpp | 5 +- p25/lc/tsbk/OSP_IDEN_UP_VU.cpp | 5 +- p25/lc/tsbk/OSP_LOC_REG_RSP.cpp | 5 +- p25/lc/tsbk/OSP_MOT_CC_BSI.cpp | 5 +- p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp | 5 +- p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp | 5 +- p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp | 5 +- p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp | 5 +- p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp | 5 +- p25/lc/tsbk/OSP_NET_STS_BCAST.cpp | 5 +- p25/lc/tsbk/OSP_QUE_RSP.cpp | 7 +- p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp | 5 +- p25/lc/tsbk/OSP_SCCB.cpp | 5 +- p25/lc/tsbk/OSP_SCCB_EXP.cpp | 5 +- p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp | 5 +- p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp | 5 +- p25/lc/tsbk/OSP_SYNC_BCAST.cpp | 5 +- p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp | 5 +- p25/lc/tsbk/OSP_U_DEREG_ACK.cpp | 7 +- p25/lc/tsbk/OSP_U_REG_CMD.cpp | 5 +- p25/lc/tsbk/TSBKFactory.cpp | 12 +- p25/lc/tsbk/TSBKFactory.h | 8 +- p25/packet/Trunk.cpp | 237 +++++++++++--------------- p25/packet/Trunk.h | 2 +- 75 files changed, 328 insertions(+), 395 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dfb7e8a2..cf7ba747 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,10 +238,10 @@ endif (CROSS_COMPILE_RPI_ARM) set(THREADS_PREFER_PTHREAD_FLAG ON) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY .) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall -std=c++0x") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -std=c++0x") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -std=c++11") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g -O3 -Wall -std=c++11 -s") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3 -Wall -std=c++11 -s") set(GIT_VER "") set(GIT_VER_HASH "") diff --git a/Defines.h b/Defines.h index 0db4a276..9b2da5cc 100644 --- a/Defines.h +++ b/Defines.h @@ -33,9 +33,10 @@ #include -#include +#include #include #include +#include #if !defined(ENABLE_DMR) && !defined(ENABLE_P25) && !defined(ENABLE_NXDN) #error "No protocol support compiled in? Must enable at least one: ENABLE_DMR, ENABLE_P25 and/or ENABLE_NXDN." @@ -227,6 +228,13 @@ inline std::string __IP_FROM_ULONG(const ulong64_t& value) { (buffer[offset + 1U] << 8) | \ (buffer[offset + 2U] << 0); +#define new_unique(type) std::unique_ptr(new type()) + +/// Creates a named unique buffer. +#define __UNIQUE_BUFFER(name, type, length) \ + std::unique_ptr name = std::unique_ptr(new type[length]); \ + ::memset(name.get(), 0x00U, length); + /** * Class Copy Code Pattern */ diff --git a/host/calibrate/HostCal.cpp b/host/calibrate/HostCal.cpp index 9837c8f0..256fcc98 100644 --- a/host/calibrate/HostCal.cpp +++ b/host/calibrate/HostCal.cpp @@ -133,7 +133,7 @@ const uint8_t LDU2_1K[] = { HostCal::HostCal(const std::string& confFile) : m_confFile(confFile), m_conf(), - m_modem(NULL), + m_modem(nullptr), m_console(), m_fec(), m_transmit(false), @@ -153,7 +153,7 @@ HostCal::HostCal(const std::string& confFile) : m_txAdjustedFreq(0U), m_channelId(0U), m_channelNo(0U), - m_idenTable(NULL), + m_idenTable(nullptr), m_berFrames(0U), m_berBits(0U), m_berErrs(0U), @@ -332,7 +332,7 @@ int HostCal::run() std::string uartPort = uartProtocol["port"].as(); uint32_t uartSpeed = uartProtocol["speed"].as(115200); - port::IModemPort* modemPort = NULL; + port::IModemPort* modemPort = nullptr; std::transform(portType.begin(), portType.end(), portType.begin(), ::tolower); if (portType == NULL_PORT) { ::LogError(LOG_HOST, "Calibration mode is unsupported with the null modem!"); @@ -407,7 +407,7 @@ int HostCal::run() return 2; } - if (modemPort == NULL) { + if (modemPort == nullptr) { ::LogError(LOG_HOST, "Invalid modem port type, %s!", portType.c_str()); return 2; } @@ -2105,18 +2105,17 @@ void HostCal::processP25BER(const uint8_t* buffer) else if (duid == P25_DUID_TSDU) { timerStop(); - lc::TSBK *tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer + 1U); + std::unique_ptr tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer + 1U); Utils::dump(1U, "Raw TSBK Dump", buffer + 1U, P25_TSDU_FRAME_LENGTH_BYTES); - if (tsbk == NULL) { + if (tsbk == nullptr) { LogWarning(LOG_CAL, P25_TSDU_STR ", undecodable LC"); m_berUndecodableLC++; } else { LogMessage(LOG_CAL, P25_TSDU_STR ", mfId = $%02X, lco = $%02X, srcId = %u, dstId = %u, service = %u, netId = %u, sysId = %u", tsbk->getMFId(), tsbk->getLCO(), tsbk->getSrcId(), tsbk->getDstId(), tsbk->getService(), tsbk->getNetId(), tsbk->getSysId()); - delete tsbk; } } } diff --git a/host/setup/HostSetup.cpp b/host/setup/HostSetup.cpp index 21987218..31eda930 100644 --- a/host/setup/HostSetup.cpp +++ b/host/setup/HostSetup.cpp @@ -56,7 +56,7 @@ HostSetup::HostSetup(const std::string& confFile) : m_txFrequency(0U), m_channelId(0U), m_channelNo(0U), - m_idenTable(NULL) + m_idenTable(nullptr) { /* stub */ } diff --git a/p25/Audio.cpp b/p25/Audio.cpp index 66e8f967..be04b69c 100644 --- a/p25/Audio.cpp +++ b/p25/Audio.cpp @@ -66,7 +66,7 @@ Audio::~Audio() /// Number of errors corrected. uint32_t Audio::process(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); uint32_t errs = 0U; @@ -119,8 +119,8 @@ uint32_t Audio::process(uint8_t* data) /// void Audio::decode(const uint8_t* data, uint8_t* imbe, uint32_t n) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); uint8_t temp[18U]; @@ -236,8 +236,8 @@ void Audio::decode(const uint8_t* data, uint8_t* imbe, uint32_t n) /// void Audio::encode(uint8_t* data, const uint8_t* imbe, uint32_t n) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); bool bTemp[144U]; bool* bit = bTemp; diff --git a/p25/Control.cpp b/p25/Control.cpp index 1d7c8cae..7b60bcba 100644 --- a/p25/Control.cpp +++ b/p25/Control.cpp @@ -85,9 +85,9 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod uint32_t timeout, uint32_t tgHang, bool duplex, ::lookups::RadioIdLookup* ridLookup, ::lookups::TalkgroupIdLookup* tidLookup, ::lookups::IdenTableLookup* idenTable, ::lookups::RSSIInterpolator* rssiMapper, bool dumpPDUData, bool repeatPDU, bool dumpTSBKData, bool debug, bool verbose) : - m_voice(NULL), - m_data(NULL), - m_trunk(NULL), + m_voice(nullptr), + m_data(nullptr), + m_trunk(nullptr), m_nac(nac), m_txNAC(nac), m_timeout(timeout), @@ -138,10 +138,10 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod m_verbose(verbose), m_debug(debug) { - assert(ridLookup != NULL); - assert(tidLookup != NULL); - assert(idenTable != NULL); - assert(rssiMapper != NULL); + assert(ridLookup != nullptr); + assert(tidLookup != nullptr); + assert(idenTable != nullptr); + assert(rssiMapper != nullptr); acl::AccessControl::init(m_ridLookup, m_tidLookup); @@ -170,15 +170,15 @@ Control::Control(uint32_t nac, uint32_t callHang, uint32_t queueSize, modem::Mod /// Control::~Control() { - if (m_voice != NULL) { + if (m_voice != nullptr) { delete m_voice; } - if (m_trunk != NULL) { + if (m_trunk != nullptr) { delete m_trunk; } - if (m_data != NULL) { + if (m_data != nullptr) { delete m_data; } } @@ -191,11 +191,11 @@ void Control::reset() m_rfState = RS_RF_LISTENING; m_ccHalted = false; - if (m_voice != NULL) { + if (m_voice != nullptr) { m_voice->resetRF(); } - if (m_data != NULL) { + if (m_data != nullptr) { m_data->resetRF(); } @@ -349,12 +349,12 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s m_nid.setTxNAC(m_txNAC); } - if (m_voice != NULL) { + if (m_voice != nullptr) { m_voice->resetRF(); m_voice->resetNet(); } - if (m_data != NULL) { + if (m_data != nullptr) { m_data->resetRF(); } } @@ -367,7 +367,7 @@ void Control::setOptions(yaml::Node& conf, const std::string cwCallsign, const s /// bool Control::processFrame(uint8_t* data, uint32_t len) { - assert(data != NULL); + assert(data != nullptr); #if ENABLE_DFSI_SUPPORT if (m_modem->isP25DFSI()) { @@ -407,7 +407,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len) m_rfTimeout.stop(); m_queue.clear(); - if (m_network != NULL) + if (m_network != nullptr) m_network->resetP25(); return false; @@ -556,7 +556,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len) /// Length of frame data retreived. uint32_t Control::getFrame(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); if (m_queue.isEmpty()) return 0U; @@ -595,7 +595,7 @@ bool Control::writeRF_VoiceEnd() } m_tailOnIdle = false; - if (m_network != NULL) + if (m_network != nullptr) m_network->resetP25(); ret = true; @@ -618,7 +618,7 @@ bool Control::writeRF_VoiceEnd() /// void Control::clock(uint32_t ms) { - if (m_network != NULL) { + if (m_network != nullptr) { processNetwork(); if (m_network->getStatus() == network::NET_STAT_RUNNING) { @@ -697,7 +697,7 @@ void Control::clock(uint32_t ms) } if (m_dedicatedControl) { - if (m_network != NULL) + if (m_network != nullptr) m_network->resetP25(); } @@ -719,18 +719,18 @@ void Control::clock(uint32_t ms) m_data->resetRF(); - if (m_network != NULL) + if (m_network != nullptr) m_network->resetP25(); m_rfState = RS_RF_LISTENING; } // clock data and trunking - if (m_data != NULL) { + if (m_data != nullptr) { m_data->clock(ms); } - if (m_trunk != NULL) { + if (m_trunk != nullptr) { m_trunk->clock(ms); } } @@ -767,7 +767,7 @@ void Control::setDebugVerbose(bool debug, bool verbose) /// void Control::addFrame(const uint8_t* data, uint32_t length, bool net) { - assert(data != NULL); + assert(data != nullptr); if (!net) { if (m_rfTimeout.isRunning() && m_rfTimeout.hasExpired()) @@ -815,7 +815,7 @@ void Control::addFrame(const uint8_t* data, uint32_t length, bool net) /// bool Control::processDFSI(uint8_t* data, uint32_t len) { - assert(data != NULL); + assert(data != nullptr); dfsi::LC dfsiLC = dfsi::LC(); @@ -849,7 +849,7 @@ bool Control::processDFSI(uint8_t* data, uint32_t len) m_rfTimeout.stop(); m_queue.clear(); - if (m_network != NULL) + if (m_network != nullptr) m_network->resetP25(); return false; @@ -979,7 +979,7 @@ void Control::processNetwork() return; if (length == 0U) return; - if (data == NULL) { + if (data == nullptr) { m_network->resetP25(); return; } @@ -1188,7 +1188,7 @@ void Control::writeRF_TDU(bool noNetwork) /// void Control::setBusyBits(uint8_t* data, uint32_t ssOffset, bool b1, bool b2) { - assert(data != NULL); + assert(data != nullptr); WRITE_BIT(data, ssOffset, b1); WRITE_BIT(data, ssOffset + 1U, b2); @@ -1203,7 +1203,7 @@ void Control::setBusyBits(uint8_t* data, uint32_t ssOffset, bool b1, bool b2) /// void Control::addBusyBits(uint8_t* data, uint32_t length, bool b1, bool b2) { - assert(data != NULL); + assert(data != nullptr); // insert the "10" (Unknown, use for inbound or outbound) status bits for (uint32_t ss0Pos = P25_SS0_START; ss0Pos < length; ss0Pos += P25_SS_INCREMENT) { diff --git a/p25/Control.h b/p25/Control.h index a5d4f8b3..4e53dc83 100644 --- a/p25/Control.h +++ b/p25/Control.h @@ -142,8 +142,8 @@ namespace p25 uint32_t m_txNAC; uint32_t m_timeout; - modem::Modem* m_modem; - network::BaseNetwork* m_network; + std::unique_ptr m_modem; + std::unique_ptr m_network; bool m_inhibitIllegal; bool m_legacyGroupGrnt; diff --git a/p25/NID.cpp b/p25/NID.cpp index 45c001f5..76eb50d9 100644 --- a/p25/NID.cpp +++ b/p25/NID.cpp @@ -56,17 +56,17 @@ const uint32_t MAX_NID_ERRS = 7U;//5U; NID::NID(uint32_t nac) : m_duid(0U), m_nac(nac), - m_rxTx(NULL), - m_tx(NULL), + m_rxTx(nullptr), + m_tx(nullptr), m_splitNac(false) { m_rxTx = new uint8_t*[16U]; for (uint8_t i = 0; i < 16U; i++) - m_rxTx[i] = NULL; + m_rxTx[i] = nullptr; m_tx = new uint8_t*[16U]; for (uint8_t i = 0; i < 16U; i++) - m_tx[i] = NULL; + m_tx[i] = nullptr; createRxTxNID(nac); } @@ -78,11 +78,11 @@ NID::~NID() { for (uint8_t i = 0; i < 16U; i++) { - if (m_rxTx[i] != NULL) { + if (m_rxTx[i] != nullptr) { delete[] m_rxTx[i]; } - if (m_tx[i] != NULL) { + if (m_tx[i] != nullptr) { delete[] m_tx[i]; } } @@ -98,7 +98,7 @@ NID::~NID() /// bool NID::decode(const uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); uint8_t nid[P25_NID_LENGTH_BYTES]; P25Utils::decode(data, nid, 48U, 114U); @@ -155,7 +155,7 @@ bool NID::decode(const uint8_t* data) /// void NID::encode(uint8_t* data, uint8_t duid) const { - assert(data != NULL); + assert(data != nullptr); if (m_splitNac) { switch (duid) { diff --git a/p25/P25Utils.cpp b/p25/P25Utils.cpp index 4bc26eab..e7467763 100644 --- a/p25/P25Utils.cpp +++ b/p25/P25Utils.cpp @@ -50,8 +50,8 @@ using namespace p25; /// uint32_t P25Utils::decode(const uint8_t* in, uint8_t* out, uint32_t start, uint32_t stop) { - assert(in != NULL); - assert(out != NULL); + assert(in != nullptr); + assert(out != nullptr); // Move the SSx positions to the range needed uint32_t ss0Pos = P25_SS0_START; @@ -90,8 +90,8 @@ uint32_t P25Utils::decode(const uint8_t* in, uint8_t* out, uint32_t start, uint3 /// uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t start, uint32_t stop) { - assert(in != NULL); - assert(out != NULL); + assert(in != nullptr); + assert(out != nullptr); // Move the SSx positions to the range needed uint32_t ss0Pos = P25_SS0_START; @@ -129,8 +129,8 @@ uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t start, uint3 /// uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t length) { - assert(in != NULL); - assert(out != NULL); + assert(in != nullptr); + assert(out != nullptr); // Move the SSx positions to the range needed uint32_t ss0Pos = P25_SS0_START; @@ -169,8 +169,8 @@ uint32_t P25Utils::encode(const uint8_t* in, uint8_t* out, uint32_t length) /// uint32_t P25Utils::compare(const uint8_t* data1, const uint8_t* data2, uint32_t length) { - assert(data1 != NULL); - assert(data2 != NULL); + assert(data1 != nullptr); + assert(data2 != nullptr); uint32_t errs = 0U; for (uint32_t i = 0U; i < length; i++) { diff --git a/p25/Sync.cpp b/p25/Sync.cpp index aa1440a0..9ebd24dd 100644 --- a/p25/Sync.cpp +++ b/p25/Sync.cpp @@ -47,7 +47,7 @@ using namespace p25; /// void Sync::addP25Sync(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); ::memcpy(data, P25_SYNC_BYTES, P25_SYNC_LENGTH_BYTES); } diff --git a/p25/dfsi/LC.cpp b/p25/dfsi/LC.cpp index 3b603b23..5319dac0 100644 --- a/p25/dfsi/LC.cpp +++ b/p25/dfsi/LC.cpp @@ -54,9 +54,9 @@ LC::LC() : m_rssi(0U), m_source(P25_DFSI_DEF_SOURCE), m_control(), - m_tsbk(NULL), + m_tsbk(nullptr), m_lsd(), - m_mi(NULL) + m_mi(nullptr) { m_mi = new uint8_t[P25_MI_LENGTH_BYTES]; ::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES); @@ -109,7 +109,7 @@ LC& LC::operator=(const LC& data) /// True, if decoded, otherwise false. bool LC::decodeNID(const uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); m_frameType = data[0U]; // Frame Type @@ -122,7 +122,7 @@ bool LC::decodeNID(const uint8_t* data) /// void LC::encodeNID(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); uint8_t dfsiFrame[P25_DFSI_SS_FRAME_LENGTH_BYTES]; ::memset(dfsiFrame, 0x00U, P25_DFSI_SS_FRAME_LENGTH_BYTES); @@ -146,7 +146,7 @@ void LC::encodeNID(uint8_t* data) /// True, if decoded, otherwise false. bool LC::decodeVHDR1(const uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); m_frameType = data[0U]; // Frame Type if (m_frameType != P25_DFSI_VHDR1) { @@ -171,7 +171,7 @@ bool LC::decodeVHDR1(const uint8_t* data) /// void LC::encodeVHDR1(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); uint8_t dfsiFrame[P25_DFSI_VHDR1_FRAME_LENGTH_BYTES]; ::memset(dfsiFrame, 0x00U, P25_DFSI_VHDR1_FRAME_LENGTH_BYTES); @@ -198,7 +198,7 @@ void LC::encodeVHDR1(uint8_t* data) /// True, if decoded, otherwise false. bool LC::decodeVHDR2(const uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); m_control = lc::LC(); m_frameType = data[0U]; // Frame Type @@ -219,7 +219,7 @@ bool LC::decodeVHDR2(const uint8_t* data) /// void LC::encodeVHDR2(uint8_t* data) { - assert(data != NULL); + assert(data != nullptr); uint8_t dfsiFrame[P25_DFSI_VHDR2_FRAME_LENGTH_BYTES]; ::memset(dfsiFrame, 0x00U, P25_DFSI_VHDR2_FRAME_LENGTH_BYTES); @@ -246,8 +246,8 @@ void LC::encodeVHDR2(uint8_t* data) /// True, if decoded, otherwise false. bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); m_frameType = data[0U]; // Frame Type @@ -337,8 +337,8 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe) /// void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); uint8_t serviceOptions = (m_control.getEmergency() ? 0x80U : 0x00U) + @@ -480,8 +480,8 @@ void LC::encodeLDU1(uint8_t* data, const uint8_t* imbe) /// True, if decoded, otherwise false. bool LC::decodeLDU2(const uint8_t* data, uint8_t* imbe) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); m_frameType = data[0U]; // Frame Type @@ -573,8 +573,8 @@ bool LC::decodeLDU2(const uint8_t* data, uint8_t* imbe) /// void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe) { - assert(data != NULL); - assert(imbe != NULL); + assert(data != nullptr); + assert(imbe != nullptr); // generate MI data uint8_t mi[P25_MI_LENGTH_BYTES]; @@ -717,10 +717,10 @@ void LC::encodeLDU2(uint8_t* data, const uint8_t* imbe) /// True, if decoded, otherwise false. bool LC::decodeTSBK(const uint8_t* data) { - assert(data != NULL); - if (m_tsbk != NULL) { + assert(data != nullptr); + if (m_tsbk != nullptr) { delete m_tsbk; - m_tsbk = NULL; + m_tsbk = nullptr; } m_frameType = data[0U]; // Frame Type @@ -731,11 +731,12 @@ bool LC::decodeTSBK(const uint8_t* data) decodeStart(data + 1U); // Start Record - uint8_t tsbk[P25_TSBK_LENGTH_BYTES]; - ::memcpy(tsbk, data + 9U, P25_TSBK_LENGTH_BYTES); // Raw TSBK + CRC + uint8_t buffer[P25_TSBK_LENGTH_BYTES]; + ::memcpy(buffer, data + 9U, P25_TSBK_LENGTH_BYTES); // Raw TSBK + CRC - m_tsbk = lc::tsbk::TSBKFactory::createTSBK(tsbk, true); - if (m_tsbk != NULL) { + std::unique_ptr tsbk = lc::tsbk::TSBKFactory::createTSBK(buffer, true); + m_tsbk = tsbk.release(); + if (m_tsbk != nullptr) { return true; } else { return false; diff --git a/p25/lc/AMBT.cpp b/p25/lc/AMBT.cpp index da9b6453..5a23a06c 100644 --- a/p25/lc/AMBT.cpp +++ b/p25/lc/AMBT.cpp @@ -85,7 +85,7 @@ void AMBT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) /// /// /// -ulong64_t AMBT::tsbkValue(const data::DataHeader dataHeader, const uint8_t* pduUserData) +ulong64_t AMBT::toValue(const data::DataHeader dataHeader, const uint8_t* pduUserData) { ulong64_t tsbkValue = 0U; diff --git a/p25/lc/AMBT.h b/p25/lc/AMBT.h index bc6dc82d..c537b87d 100644 --- a/p25/lc/AMBT.h +++ b/p25/lc/AMBT.h @@ -57,7 +57,7 @@ namespace p25 protected: /// Internal helper to convert TSBK bytes to a 64-bit long value. - static ulong64_t tsbkValue(const data::DataHeader dataHeader, const uint8_t* pduUserData); + static ulong64_t toValue(const data::DataHeader dataHeader, const uint8_t* pduUserData); /// Internal helper to decode a trunking signalling block. bool decode(const data::DataHeader dataHeader, const data::DataBlock* blocks, uint8_t* pduUserData); diff --git a/p25/lc/TSBK.cpp b/p25/lc/TSBK.cpp index bd33e23a..b3a4ff04 100644 --- a/p25/lc/TSBK.cpp +++ b/p25/lc/TSBK.cpp @@ -131,6 +131,11 @@ TSBK::~TSBK() /// Callsign. void TSBK::setCallsign(std::string callsign) { + if (m_siteCallsign == NULL) { + m_siteCallsign = new uint8_t[P25_MOT_CALLSIGN_LENGTH_BYTES]; + ::memset(m_siteCallsign, 0x00U, P25_MOT_CALLSIGN_LENGTH_BYTES); + } + uint32_t idLength = callsign.length(); if (idLength > 0) { ::memset(m_siteCallsign, 0x20U, P25_MOT_CALLSIGN_LENGTH_BYTES); @@ -151,7 +156,7 @@ void TSBK::setCallsign(std::string callsign) /// /// /// -ulong64_t TSBK::tsbkValue(const uint8_t* tsbk) +ulong64_t TSBK::toValue(const uint8_t* tsbk) { ulong64_t tsbkValue = 0U; @@ -173,10 +178,9 @@ ulong64_t TSBK::tsbkValue(const uint8_t* tsbk) /// /// /// -uint8_t* TSBK::tsbkValue(const ulong64_t tsbkValue) +std::unique_ptr TSBK::fromValue(const ulong64_t tsbkValue) { - uint8_t* tsbk = new uint8_t[P25_TSBK_LENGTH_BYTES]; - ::memset(tsbk, 0x00U, P25_TSBK_LENGTH_BYTES); + __UNIQUE_BUFFER(tsbk, uint8_t, P25_TSBK_LENGTH_BYTES); // split ulong64_t (8 byte) value into bytes tsbk[2U] = (uint8_t)((tsbkValue >> 56) & 0xFFU); diff --git a/p25/lc/TSBK.h b/p25/lc/TSBK.h index 74153ffb..b8b1c3ed 100644 --- a/p25/lc/TSBK.h +++ b/p25/lc/TSBK.h @@ -156,9 +156,9 @@ namespace p25 static SiteData m_siteData; /// Internal helper to convert TSBK bytes to a 64-bit long value. - static ulong64_t tsbkValue(const uint8_t* tsbk); + static ulong64_t toValue(const uint8_t* tsbk); /// Internal helper to convert a 64-bit long value to TSBK bytes. - static uint8_t* tsbkValue(const ulong64_t tsbkValue); + static std::unique_ptr fromValue(const ulong64_t tsbkValue); /// Internal helper to decode a trunking signalling block. bool decode(const uint8_t* data, uint8_t* tsbk, bool rawTSBK = false); diff --git a/p25/lc/tsbk/IOSP_ACK_RSP.cpp b/p25/lc/tsbk/IOSP_ACK_RSP.cpp index bfc8c201..27aa4042 100644 --- a/p25/lc/tsbk/IOSP_ACK_RSP.cpp +++ b/p25/lc/tsbk/IOSP_ACK_RSP.cpp @@ -64,7 +64,7 @@ bool IOSP_ACK_RSP::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type @@ -98,7 +98,6 @@ void IOSP_ACK_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) } tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/IOSP_CALL_ALRT.cpp b/p25/lc/tsbk/IOSP_CALL_ALRT.cpp index 0ca46009..db27dc04 100644 --- a/p25/lc/tsbk/IOSP_CALL_ALRT.cpp +++ b/p25/lc/tsbk/IOSP_CALL_ALRT.cpp @@ -64,7 +64,7 @@ bool IOSP_CALL_ALRT::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address m_srcId = (uint32_t)(tsbkValue & 0xFFFFFFU); // Source Radio Address @@ -87,7 +87,6 @@ void IOSP_CALL_ALRT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 40) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/IOSP_EXT_FNCT.cpp b/p25/lc/tsbk/IOSP_EXT_FNCT.cpp index c94fe438..cc765db7 100644 --- a/p25/lc/tsbk/IOSP_EXT_FNCT.cpp +++ b/p25/lc/tsbk/IOSP_EXT_FNCT.cpp @@ -65,7 +65,7 @@ bool IOSP_EXT_FNCT::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_extendedFunction = (uint32_t)((tsbkValue >> 48) & 0xFFFFU); // Extended Function m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Argument @@ -90,9 +90,8 @@ void IOSP_EXT_FNCT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_srcId; // Argument tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/IOSP_GRP_AFF.cpp b/p25/lc/tsbk/IOSP_GRP_AFF.cpp index 45ba92f1..e4571d65 100644 --- a/p25/lc/tsbk/IOSP_GRP_AFF.cpp +++ b/p25/lc/tsbk/IOSP_GRP_AFF.cpp @@ -65,7 +65,7 @@ bool IOSP_GRP_AFF::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_sysId = (uint32_t)((tsbkValue >> 40) & 0xFFFU); // System ID m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address @@ -92,9 +92,8 @@ void IOSP_GRP_AFF::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 16) + (m_dstId & 0xFFFFU); // Talkgroup Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/IOSP_GRP_VCH.cpp b/p25/lc/tsbk/IOSP_GRP_VCH.cpp index 02be0ef0..449451f4 100644 --- a/p25/lc/tsbk/IOSP_GRP_VCH.cpp +++ b/p25/lc/tsbk/IOSP_GRP_VCH.cpp @@ -64,7 +64,7 @@ bool IOSP_GRP_VCH::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag @@ -98,7 +98,6 @@ void IOSP_GRP_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/IOSP_MSG_UPDT.cpp b/p25/lc/tsbk/IOSP_MSG_UPDT.cpp index b534e280..90d52ce5 100644 --- a/p25/lc/tsbk/IOSP_MSG_UPDT.cpp +++ b/p25/lc/tsbk/IOSP_MSG_UPDT.cpp @@ -65,7 +65,7 @@ bool IOSP_MSG_UPDT::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_messageValue = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Message Value m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address @@ -90,9 +90,8 @@ void IOSP_MSG_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/IOSP_RAD_MON.cpp b/p25/lc/tsbk/IOSP_RAD_MON.cpp index c8782889..00b93154 100644 --- a/p25/lc/tsbk/IOSP_RAD_MON.cpp +++ b/p25/lc/tsbk/IOSP_RAD_MON.cpp @@ -66,7 +66,7 @@ bool IOSP_RAD_MON::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_txMult = (uint8_t)((tsbkValue >> 48) & 0x3U); // TX Multiplier m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address @@ -91,9 +91,8 @@ void IOSP_RAD_MON::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + (m_srcId & 0xFFFFFFU); // Source Radio Address tsbkValue = tsbkValue + (m_dstId & 0xFFFFFFU); // Target Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/IOSP_STS_UPDT.cpp b/p25/lc/tsbk/IOSP_STS_UPDT.cpp index 1e3d3682..d79a61ef 100644 --- a/p25/lc/tsbk/IOSP_STS_UPDT.cpp +++ b/p25/lc/tsbk/IOSP_STS_UPDT.cpp @@ -65,7 +65,7 @@ bool IOSP_STS_UPDT::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_statusValue = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Status Value m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFFFU); // Target Radio Address @@ -90,9 +90,8 @@ void IOSP_STS_UPDT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/IOSP_UU_ANS.cpp b/p25/lc/tsbk/IOSP_UU_ANS.cpp index ccc4666a..006781c4 100644 --- a/p25/lc/tsbk/IOSP_UU_ANS.cpp +++ b/p25/lc/tsbk/IOSP_UU_ANS.cpp @@ -64,7 +64,7 @@ bool IOSP_UU_ANS::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag @@ -95,7 +95,6 @@ void IOSP_UU_ANS::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 32) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/IOSP_UU_VCH.cpp b/p25/lc/tsbk/IOSP_UU_VCH.cpp index c8c34ce7..1a39ee9d 100644 --- a/p25/lc/tsbk/IOSP_UU_VCH.cpp +++ b/p25/lc/tsbk/IOSP_UU_VCH.cpp @@ -64,7 +64,7 @@ bool IOSP_UU_VCH::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_emergency = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Emergency Flag m_encrypted = (((tsbkValue >> 56) & 0xFFU) & 0x40U) == 0x40U; // Encryption Flag @@ -98,7 +98,6 @@ void IOSP_UU_VCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/IOSP_U_REG.cpp b/p25/lc/tsbk/IOSP_U_REG.cpp index bb7496d2..30887fe1 100644 --- a/p25/lc/tsbk/IOSP_U_REG.cpp +++ b/p25/lc/tsbk/IOSP_U_REG.cpp @@ -64,7 +64,7 @@ bool IOSP_U_REG::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID @@ -90,7 +90,6 @@ void IOSP_U_REG::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Source ID tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp b/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp index 7faef8a1..4f5078d9 100644 --- a/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp +++ b/p25/lc/tsbk/ISP_AUTH_FNE_RST.cpp @@ -66,7 +66,7 @@ bool ISP_AUTH_FNE_RST::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_authSuccess = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Authentication Success Flag m_authStandalone = (((tsbkValue >> 56) & 0xFFU) & 0x01U) == 0x01U; // Authentication Standalone Flag diff --git a/p25/lc/tsbk/ISP_AUTH_RESP.cpp b/p25/lc/tsbk/ISP_AUTH_RESP.cpp index 965fab7a..704af97b 100644 --- a/p25/lc/tsbk/ISP_AUTH_RESP.cpp +++ b/p25/lc/tsbk/ISP_AUTH_RESP.cpp @@ -80,7 +80,7 @@ bool ISP_AUTH_RESP::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type diff --git a/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp b/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp index 4d5dc7eb..0dc3881e 100644 --- a/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp +++ b/p25/lc/tsbk/ISP_AUTH_SU_DMD.cpp @@ -64,7 +64,7 @@ bool ISP_AUTH_SU_DMD::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_srcId = (uint32_t)(tsbkValue & 0xFFFFFFU); // Source Radio Address diff --git a/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp b/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp index 8c44df94..e488e898 100644 --- a/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp +++ b/p25/lc/tsbk/ISP_CAN_SRV_REQ.cpp @@ -64,7 +64,7 @@ bool ISP_CAN_SRV_REQ::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type diff --git a/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp b/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp index 18412775..f7ff4e55 100644 --- a/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp +++ b/p25/lc/tsbk/ISP_EMERG_ALRM_REQ.cpp @@ -64,7 +64,7 @@ bool ISP_EMERG_ALRM_REQ::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); /* ** bryanb: this is a bit of a hack -- because the EMERG ALRM and DENY have the same diff --git a/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp b/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp index a13fb0c3..bb696479 100644 --- a/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp +++ b/p25/lc/tsbk/ISP_GRP_AFF_Q_RSP.cpp @@ -65,7 +65,7 @@ bool ISP_GRP_AFF_Q_RSP::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_announceGroup = (uint32_t)((tsbkValue >> 40) & 0xFFFFU); // Announcement Group Address m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address diff --git a/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp b/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp index ff7a6e2b..a3757545 100644 --- a/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp +++ b/p25/lc/tsbk/ISP_LOC_REG_REQ.cpp @@ -65,7 +65,7 @@ bool ISP_LOC_REG_REQ::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_lra = (uint8_t)((tsbkValue >> 40) & 0xFFU); // LRA m_dstId = (uint32_t)((tsbkValue >> 24) & 0xFFFFU); // Talkgroup Address diff --git a/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp b/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp index abfa11e0..4b91d5ef 100644 --- a/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp +++ b/p25/lc/tsbk/ISP_SNDCP_CH_REQ.cpp @@ -66,7 +66,7 @@ bool ISP_SNDCP_CH_REQ::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_dataServiceOptions = (uint8_t)((tsbkValue >> 56) & 0xFFU); // Data Service Options m_dataAccessControl = (uint32_t)((tsbkValue >> 40) & 0xFFFFFFFFU); // Data Access Control diff --git a/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp b/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp index 0ef5beda..b24b5fe7 100644 --- a/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp +++ b/p25/lc/tsbk/ISP_U_DEREG_REQ.cpp @@ -64,7 +64,7 @@ bool ISP_U_DEREG_REQ::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID diff --git a/p25/lc/tsbk/MBT_IOSP_ACK_RSP.cpp b/p25/lc/tsbk/MBT_IOSP_ACK_RSP.cpp index 7db23d5f..e1a48a4a 100644 --- a/p25/lc/tsbk/MBT_IOSP_ACK_RSP.cpp +++ b/p25/lc/tsbk/MBT_IOSP_ACK_RSP.cpp @@ -64,7 +64,7 @@ bool MBT_IOSP_ACK_RSP::decodeMBT(const data::DataHeader dataHeader, const data:: if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_aivFlag = false; m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type diff --git a/p25/lc/tsbk/MBT_IOSP_CALL_ALRT.cpp b/p25/lc/tsbk/MBT_IOSP_CALL_ALRT.cpp index 82eb89bb..eea65435 100644 --- a/p25/lc/tsbk/MBT_IOSP_CALL_ALRT.cpp +++ b/p25/lc/tsbk/MBT_IOSP_CALL_ALRT.cpp @@ -64,7 +64,7 @@ bool MBT_IOSP_CALL_ALRT::decodeMBT(const data::DataHeader dataHeader, const data if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID diff --git a/p25/lc/tsbk/MBT_IOSP_EXT_FNCT.cpp b/p25/lc/tsbk/MBT_IOSP_EXT_FNCT.cpp index 37cfc0b1..10d770ac 100644 --- a/p25/lc/tsbk/MBT_IOSP_EXT_FNCT.cpp +++ b/p25/lc/tsbk/MBT_IOSP_EXT_FNCT.cpp @@ -65,7 +65,7 @@ bool MBT_IOSP_EXT_FNCT::decodeMBT(const data::DataHeader dataHeader, const data: if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID diff --git a/p25/lc/tsbk/MBT_IOSP_GRP_AFF.cpp b/p25/lc/tsbk/MBT_IOSP_GRP_AFF.cpp index 6ff33a5e..deda3da8 100644 --- a/p25/lc/tsbk/MBT_IOSP_GRP_AFF.cpp +++ b/p25/lc/tsbk/MBT_IOSP_GRP_AFF.cpp @@ -64,7 +64,7 @@ bool MBT_IOSP_GRP_AFF::decodeMBT(const data::DataHeader dataHeader, const data:: if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID diff --git a/p25/lc/tsbk/MBT_IOSP_MSG_UPDT.cpp b/p25/lc/tsbk/MBT_IOSP_MSG_UPDT.cpp index 28a42262..69cc425a 100644 --- a/p25/lc/tsbk/MBT_IOSP_MSG_UPDT.cpp +++ b/p25/lc/tsbk/MBT_IOSP_MSG_UPDT.cpp @@ -65,7 +65,7 @@ bool MBT_IOSP_MSG_UPDT::decodeMBT(const data::DataHeader dataHeader, const data: if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_messageValue = (uint8_t)((tsbkValue >> 48) & 0xFFFFU); // Message Value m_netId = (uint32_t)((tsbkValue >> 28) & 0xFFFFFU); // Network ID diff --git a/p25/lc/tsbk/MBT_IOSP_STS_UPDT.cpp b/p25/lc/tsbk/MBT_IOSP_STS_UPDT.cpp index fcb41214..ea430e43 100644 --- a/p25/lc/tsbk/MBT_IOSP_STS_UPDT.cpp +++ b/p25/lc/tsbk/MBT_IOSP_STS_UPDT.cpp @@ -65,7 +65,7 @@ bool MBT_IOSP_STS_UPDT::decodeMBT(const data::DataHeader dataHeader, const data: if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_statusValue = (uint8_t)((tsbkValue >> 48) & 0xFFFFU); // Message Value m_netId = (uint32_t)((tsbkValue >> 28) & 0xFFFFFU); // Network ID diff --git a/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp b/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp index 8751a080..f1de2c54 100644 --- a/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp +++ b/p25/lc/tsbk/MBT_ISP_AUTH_RESP_M.cpp @@ -85,7 +85,7 @@ bool MBT_ISP_AUTH_RESP_M::decodeMBT(const data::DataHeader dataHeader, const dat if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); if (dataHeader.getBlocksToFollow() != 2) { LogError(LOG_P25, "TSBK::decodeMBT(), PDU does not contain the appropriate amount of data blocks"); diff --git a/p25/lc/tsbk/MBT_ISP_AUTH_SU_DMD.cpp b/p25/lc/tsbk/MBT_ISP_AUTH_SU_DMD.cpp index b62da96d..705137d8 100644 --- a/p25/lc/tsbk/MBT_ISP_AUTH_SU_DMD.cpp +++ b/p25/lc/tsbk/MBT_ISP_AUTH_SU_DMD.cpp @@ -64,7 +64,7 @@ bool MBT_ISP_AUTH_SU_DMD::decodeMBT(const data::DataHeader dataHeader, const dat if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_netId = (uint32_t)((tsbkValue >> 44) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 32) & 0xFFFU); // System ID diff --git a/p25/lc/tsbk/MBT_ISP_CAN_SRV_REQ.cpp b/p25/lc/tsbk/MBT_ISP_CAN_SRV_REQ.cpp index 7971655a..4b6bb7fb 100644 --- a/p25/lc/tsbk/MBT_ISP_CAN_SRV_REQ.cpp +++ b/p25/lc/tsbk/MBT_ISP_CAN_SRV_REQ.cpp @@ -64,7 +64,7 @@ bool MBT_ISP_CAN_SRV_REQ::decodeMBT(const data::DataHeader dataHeader, const dat if (!ret) return false; - ulong64_t tsbkValue = AMBT::tsbkValue(dataHeader, pduUserData); + ulong64_t tsbkValue = AMBT::toValue(dataHeader, pduUserData); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type diff --git a/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp b/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp index bdbbf17d..c16e4415 100644 --- a/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp +++ b/p25/lc/tsbk/OSP_ADJ_STS_BCAST.cpp @@ -70,7 +70,7 @@ bool OSP_ADJ_STS_BCAST::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_adjSysId = (uint32_t)((tsbkValue >> 40) & 0xFFFU); // Site System ID m_adjRfssId = (uint8_t)((tsbkValue >> 32) & 0xFFU); // Site RFSS ID @@ -104,9 +104,8 @@ void OSP_ADJ_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp b/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp index 7d1f1346..3d07ac6e 100644 --- a/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp +++ b/p25/lc/tsbk/OSP_AUTH_FNE_RESP.cpp @@ -95,9 +95,8 @@ void OSP_AUTH_FNE_RESP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 8) + m_authRes[0U]; // Result b0 tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } /// Sets the authentication result. diff --git a/p25/lc/tsbk/OSP_DENY_RSP.cpp b/p25/lc/tsbk/OSP_DENY_RSP.cpp index 25ac86e4..2822d51a 100644 --- a/p25/lc/tsbk/OSP_DENY_RSP.cpp +++ b/p25/lc/tsbk/OSP_DENY_RSP.cpp @@ -64,7 +64,7 @@ bool OSP_DENY_RSP::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type @@ -108,7 +108,6 @@ void OSP_DENY_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp b/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp index 3afa4c06..28bbc41a 100644 --- a/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp +++ b/p25/lc/tsbk/OSP_DVM_GIT_HASH.cpp @@ -84,7 +84,6 @@ void OSP_DVM_GIT_HASH::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp b/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp index 8c6dbaa6..13b7ebe3 100644 --- a/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp +++ b/p25/lc/tsbk/OSP_DVM_LC_CALL_TERM.cpp @@ -65,7 +65,7 @@ bool OSP_DVM_LC_CALL_TERM::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_grpVchId = ((tsbkValue >> 52) & 0x0FU); // Channel ID m_grpVchNo = ((tsbkValue >> 40) & 0xFFFU); // Channel Number @@ -92,7 +92,6 @@ void OSP_DVM_LC_CALL_TERM::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp b/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp index 21dd8771..5e81b781 100644 --- a/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp +++ b/p25/lc/tsbk/OSP_GRP_AFF_Q.cpp @@ -77,7 +77,6 @@ void OSP_GRP_AFF_Q::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp b/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp index 186200b7..ae9509f9 100644 --- a/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp +++ b/p25/lc/tsbk/OSP_GRP_VCH_GRANT_UPD.cpp @@ -79,7 +79,6 @@ void OSP_GRP_VCH_GRANT_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 16) + m_dstId; // Talkgroup Address tsbkValue = (tsbkValue << 32) + 0; - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_IDEN_UP.cpp b/p25/lc/tsbk/OSP_IDEN_UP.cpp index 98748f2d..0d0d07fe 100644 --- a/p25/lc/tsbk/OSP_IDEN_UP.cpp +++ b/p25/lc/tsbk/OSP_IDEN_UP.cpp @@ -105,7 +105,6 @@ void OSP_IDEN_UP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) return; // blatently ignore creating this TSBK } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp b/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp index 8c42fc98..88a2e0bc 100644 --- a/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp +++ b/p25/lc/tsbk/OSP_IDEN_UP_VU.cpp @@ -99,7 +99,6 @@ void OSP_IDEN_UP_VU::encode(uint8_t* data, bool rawTSBK, bool noTrellis) return; // blatently ignore creating this TSBK } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp b/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp index aae31f4c..46bd7e35 100644 --- a/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp +++ b/p25/lc/tsbk/OSP_LOC_REG_RSP.cpp @@ -80,7 +80,6 @@ void OSP_LOC_REG_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 8) + m_siteData.sysId(); // Site ID tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp b/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp index 41f6d021..9b17adf1 100644 --- a/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp +++ b/p25/lc/tsbk/OSP_MOT_CC_BSI.cpp @@ -82,7 +82,6 @@ void OSP_MOT_CC_BSI::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel ID tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp b/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp index 54d0e883..4f5782c5 100644 --- a/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp +++ b/p25/lc/tsbk/OSP_MOT_GRG_ADD.cpp @@ -95,9 +95,8 @@ void OSP_MOT_GRG_ADD::encode(uint8_t* data, bool rawTSBK, bool noTrellis) } } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp b/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp index 911e93eb..818f6ddd 100644 --- a/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp +++ b/p25/lc/tsbk/OSP_MOT_GRG_DEL.cpp @@ -100,9 +100,8 @@ void OSP_MOT_GRG_DEL::encode(uint8_t* data, bool rawTSBK, bool noTrellis) return; // blatently ignore creating this TSBK } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp b/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp index 7e86267c..806def87 100644 --- a/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp +++ b/p25/lc/tsbk/OSP_MOT_GRG_VCH_GRANT.cpp @@ -88,9 +88,8 @@ void OSP_MOT_GRG_VCH_GRANT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) return; // blatently ignore creating this TSBK } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp b/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp index d328470b..35ffeebd 100644 --- a/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp +++ b/p25/lc/tsbk/OSP_MOT_GRG_VCH_UPD.cpp @@ -83,9 +83,8 @@ void OSP_MOT_GRG_VCH_UPD::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 4) + m_siteData.channelNo(); // Channel Number tsbkValue = (tsbkValue << 12) + m_patchGroup2Id; // Patch Group 2 - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp b/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp index 1510ad3f..a763e344 100644 --- a/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp +++ b/p25/lc/tsbk/OSP_MOT_PSH_CCH.cpp @@ -75,7 +75,6 @@ void OSP_MOT_PSH_CCH::encode(uint8_t* data, bool rawTSBK, bool noTrellis) ulong64_t tsbkValue = 0U; - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp b/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp index 6fd8e41f..f75aeae4 100644 --- a/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp +++ b/p25/lc/tsbk/OSP_NET_STS_BCAST.cpp @@ -81,7 +81,6 @@ void OSP_NET_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_QUE_RSP.cpp b/p25/lc/tsbk/OSP_QUE_RSP.cpp index 898c7ce8..57ea4d18 100644 --- a/p25/lc/tsbk/OSP_QUE_RSP.cpp +++ b/p25/lc/tsbk/OSP_QUE_RSP.cpp @@ -64,7 +64,7 @@ bool OSP_QUE_RSP::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_aivFlag = (((tsbkValue >> 56) & 0xFFU) & 0x80U) == 0x80U; // Additional Info. Flag m_service = (uint8_t)((tsbkValue >> 56) & 0x3FU); // Service Type @@ -108,7 +108,6 @@ void OSP_QUE_RSP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp b/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp index 59d2b7a1..ef65eedd 100644 --- a/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp +++ b/p25/lc/tsbk/OSP_RFSS_STS_BCAST.cpp @@ -84,7 +84,6 @@ void OSP_RFSS_STS_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel Number tsbkValue = (tsbkValue << 8) + m_siteData.serviceClass(); // System Service Class - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_SCCB.cpp b/p25/lc/tsbk/OSP_SCCB.cpp index 4a0bc461..60935e15 100644 --- a/p25/lc/tsbk/OSP_SCCB.cpp +++ b/p25/lc/tsbk/OSP_SCCB.cpp @@ -93,9 +93,8 @@ void OSP_SCCB::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_SCCB_EXP.cpp b/p25/lc/tsbk/OSP_SCCB_EXP.cpp index 83f10b41..695f927b 100644 --- a/p25/lc/tsbk/OSP_SCCB_EXP.cpp +++ b/p25/lc/tsbk/OSP_SCCB_EXP.cpp @@ -91,9 +91,8 @@ void OSP_SCCB_EXP::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 8) + (P25_SVC_CLS_INVALID); // System Service Class } - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp b/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp index 47aab8f5..e62e72a0 100644 --- a/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp +++ b/p25/lc/tsbk/OSP_SNDCP_CH_ANN.cpp @@ -97,9 +97,8 @@ void OSP_SNDCP_CH_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number tsbkValue = (tsbkValue << 16) + m_sndcpDAC; // Data Access Control - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp b/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp index 7f5dd161..8fc3aa2e 100644 --- a/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp +++ b/p25/lc/tsbk/OSP_SNDCP_CH_GNT.cpp @@ -93,9 +93,8 @@ void OSP_SNDCP_CH_GNT::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_SYNC_BCAST.cpp b/p25/lc/tsbk/OSP_SYNC_BCAST.cpp index b5cbde08..10335478 100644 --- a/p25/lc/tsbk/OSP_SYNC_BCAST.cpp +++ b/p25/lc/tsbk/OSP_SYNC_BCAST.cpp @@ -124,9 +124,8 @@ void OSP_SYNC_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 13) + (m_microslotCount & 0x1FFFU); // Microslot Count - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } // --------------------------------------------------------------------------- diff --git a/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp b/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp index 420a459c..e6ef4326 100644 --- a/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp +++ b/p25/lc/tsbk/OSP_SYS_SRV_BCAST.cpp @@ -79,7 +79,6 @@ void OSP_SYS_SRV_BCAST::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 16) + services; // System Services Available tsbkValue = (tsbkValue << 24) + services; // System Services Supported - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp b/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp index f93b71a6..7fa61c1c 100644 --- a/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp +++ b/p25/lc/tsbk/OSP_U_DEREG_ACK.cpp @@ -64,7 +64,7 @@ bool OSP_U_DEREG_ACK::decode(const uint8_t* data, bool rawTSBK) if (!ret) return false; - ulong64_t tsbkValue = TSBK::tsbkValue(tsbk); + ulong64_t tsbkValue = TSBK::toValue(tsbk); m_netId = (uint32_t)((tsbkValue >> 36) & 0xFFFFFU); // Network ID m_sysId = (uint32_t)((tsbkValue >> 24) & 0xFFFU); // System ID @@ -89,7 +89,6 @@ void OSP_U_DEREG_ACK::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 12) + m_siteData.sysId(); // System ID tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/OSP_U_REG_CMD.cpp b/p25/lc/tsbk/OSP_U_REG_CMD.cpp index 9354974a..a2a8d339 100644 --- a/p25/lc/tsbk/OSP_U_REG_CMD.cpp +++ b/p25/lc/tsbk/OSP_U_REG_CMD.cpp @@ -77,7 +77,6 @@ void OSP_U_REG_CMD::encode(uint8_t* data, bool rawTSBK, bool noTrellis) tsbkValue = (tsbkValue << 24) + m_dstId; // Target Radio Address tsbkValue = (tsbkValue << 24) + m_srcId; // Source Radio Address - uint8_t* tsbk = TSBK::tsbkValue(tsbkValue); - TSBK::encode(data, tsbk, rawTSBK, noTrellis); - delete[] tsbk; + std::unique_ptr tsbk = TSBK::fromValue(tsbkValue); + TSBK::encode(data, tsbk.get(), rawTSBK, noTrellis); } diff --git a/p25/lc/tsbk/TSBKFactory.cpp b/p25/lc/tsbk/TSBKFactory.cpp index 610124ac..dc257bdf 100644 --- a/p25/lc/tsbk/TSBKFactory.cpp +++ b/p25/lc/tsbk/TSBKFactory.cpp @@ -71,7 +71,7 @@ TSBKFactory::~TSBKFactory() /// /// /// True, if TSBK was decoded, otherwise false. -TSBK* TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK) +std::unique_ptr TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK) { assert(data != NULL); @@ -247,7 +247,7 @@ TSBK* TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK) /// /// /// -AMBT* TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks) +std::unique_ptr TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks) { assert(blocks != NULL); @@ -339,7 +339,7 @@ AMBT* TSBKFactory::createAMBT(const data::DataHeader dataHeader, const data::Dat /// /// /// -TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK) +std::unique_ptr TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK) { assert(tsbk != NULL); assert(data != NULL); @@ -348,7 +348,7 @@ TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK) return NULL; } - return tsbk; + return std::unique_ptr(tsbk); } /// @@ -358,7 +358,7 @@ TSBK* TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK) /// /// /// -AMBT* TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks) +std::unique_ptr TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks) { assert(ambt != NULL); assert(blocks != NULL); @@ -367,5 +367,5 @@ AMBT* TSBKFactory::decode(AMBT* ambt, const data::DataHeader dataHeader, const d return NULL; } - return ambt; + return std::unique_ptr(ambt); } diff --git a/p25/lc/tsbk/TSBKFactory.h b/p25/lc/tsbk/TSBKFactory.h index 04a4693e..7c704a94 100644 --- a/p25/lc/tsbk/TSBKFactory.h +++ b/p25/lc/tsbk/TSBKFactory.h @@ -112,9 +112,9 @@ namespace p25 ~TSBKFactory(); /// Create an instance of a TSBK. - static TSBK* createTSBK(const uint8_t* data, bool rawTSBK = false); + static std::unique_ptr createTSBK(const uint8_t* data, bool rawTSBK = false); /// Create an instance of a AMBT. - static AMBT* createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks); + static std::unique_ptr createAMBT(const data::DataHeader dataHeader, const data::DataBlock* blocks); /// Sets the flag indicating CRC-errors should be warnings and not errors. static void setWarnCRC(bool warnCRC) { m_warnCRC = warnCRC; } @@ -123,9 +123,9 @@ namespace p25 static bool m_warnCRC; /// - static TSBK* decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK = false); + static std::unique_ptr decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK = false); /// - static AMBT* decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks); + static std::unique_ptr decode(AMBT* ambt, const data::DataHeader dataHeader, const data::DataBlock* blocks); }; } // namespace tsbk } // namespace lc diff --git a/p25/packet/Trunk.cpp b/p25/packet/Trunk.cpp index bb5d963a..24673bd7 100644 --- a/p25/packet/Trunk.cpp +++ b/p25/packet/Trunk.cpp @@ -39,6 +39,7 @@ using namespace p25; using namespace p25::data; +using namespace p25::lc::tsbk; using namespace p25::packet; #include @@ -158,7 +159,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) return false; uint8_t duid = 0U; - if (preDecodedTSBK == NULL) { + if (preDecodedTSBK == nullptr) { // Decode the NID bool valid = m_p25->m_nid.decode(data + 2U); @@ -171,7 +172,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) } RPT_RF_STATE prevRfState = m_p25->m_rfState; - lc::TSBK *tsbk = NULL; + std::unique_ptr tsbk; // handle individual DUIDs if (duid == P25_DUID_TSDU) { @@ -181,15 +182,15 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) m_p25->m_queue.clear(); - if (preDecodedTSBK == NULL) { - tsbk = lc::tsbk::TSBKFactory::createTSBK(data + 2U); - if (tsbk == NULL) { + if (preDecodedTSBK == nullptr) { + tsbk = TSBKFactory::createTSBK(data + 2U); + if (tsbk == nullptr) { LogWarning(LOG_RF, P25_TSDU_STR ", undecodable LC"); m_p25->m_rfState = prevRfState; return false; } } else { - tsbk = preDecodedTSBK; + tsbk = std::unique_ptr(preDecodedTSBK); } uint32_t srcId = tsbk->getSrcId(); @@ -263,7 +264,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the target RID VALID_DSTID("TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response)", TSBK_IOSP_UU_ANS, srcId, dstId); - lc::tsbk::IOSP_UU_ANS* iosp = (lc::tsbk::IOSP_UU_ANS*)tsbk; + IOSP_UU_ANS* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response), response = $%02X, srcId = %u, dstId = %u", iosp->getResponse(), srcId, dstId); @@ -307,7 +308,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the source RID VALID_SRCID("TSBK_ISP_SNDCP_CH_REQ (SNDCP Channel Request)", TSBK_ISP_SNDCP_CH_REQ, srcId); - lc::tsbk::ISP_SNDCP_CH_REQ* isp = (lc::tsbk::ISP_SNDCP_CH_REQ*)data; + ISP_SNDCP_CH_REQ* isp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_SNDCP_CH_REQ (SNDCP Channel Request), dataServiceOptions = $%02X, dataAccessControl = %u, srcId = %u", isp->getDataServiceOptions(), isp->getDataAccessControl(), srcId); @@ -326,7 +327,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the source RID VALID_SRCID("TSBK_IOSP_STS_UPDT (Status Update)", TSBK_IOSP_STS_UPDT, srcId); - lc::tsbk::IOSP_STS_UPDT* iosp = (lc::tsbk::IOSP_STS_UPDT*)data; + IOSP_STS_UPDT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_STS_UPDT (Status Update), status = $%02X, srcId = %u", iosp->getStatus(), srcId); } @@ -345,7 +346,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the source RID VALID_SRCID("TSBK_IOSP_MSG_UPDT (Message Update)", TSBK_IOSP_MSG_UPDT, srcId); - lc::tsbk::IOSP_MSG_UPDT* iosp = (lc::tsbk::IOSP_MSG_UPDT*)data; + IOSP_MSG_UPDT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_MSG_UPDT (Message Update), message = $%02X, srcId = %u, dstId = %u", iosp->getMessage(), srcId, dstId); @@ -368,7 +369,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the target RID VALID_DSTID("TSBK_IOSP_RAD_MON (Radio Monitor)", TSBK_IOSP_RAD_MON, srcId, dstId); - lc::tsbk::IOSP_RAD_MON* iosp = (lc::tsbk::IOSP_RAD_MON*)tsbk; + IOSP_RAD_MON* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_RAD_MON_REQ (Radio Monitor), srcId = %u, dstId = %u", srcId, dstId); } @@ -403,7 +404,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // validate the target RID VALID_DSTID("TSBK_IOSP_ACK_RSP (Acknowledge Response)", TSBK_IOSP_ACK_RSP, srcId, dstId); - lc::tsbk::IOSP_ACK_RSP* iosp = (lc::tsbk::IOSP_ACK_RSP*)tsbk; + IOSP_ACK_RSP* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_ACK_RSP (Acknowledge Response), AIV = %u, serviceType = $%02X, srcId = %u, dstId = %u", iosp->getAIV(), iosp->getService(), srcId, dstId); @@ -424,7 +425,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) break; case TSBK_ISP_CAN_SRV_REQ: { - lc::tsbk::ISP_CAN_SRV_REQ* isp = (lc::tsbk::ISP_CAN_SRV_REQ*)tsbk; + ISP_CAN_SRV_REQ* isp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_CAN_SRV_REQ (Cancel Service Request), AIV = %u, serviceType = $%02X, reason = $%02X, srcId = %u, dstId = %u", isp->getAIV(), isp->getService(), isp->getResponse(), srcId, dstId); @@ -437,7 +438,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) break; case TSBK_IOSP_EXT_FNCT: { - lc::tsbk::IOSP_EXT_FNCT* iosp = (lc::tsbk::IOSP_EXT_FNCT*)tsbk; + IOSP_EXT_FNCT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_EXT_FNCT (Extended Function), op = $%02X, arg = %u, tgt = %u", iosp->getExtendedFunction(), dstId, srcId); @@ -460,7 +461,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) case TSBK_ISP_EMERG_ALRM_REQ: { if (!m_p25->m_emergDisabled) { - lc::tsbk::ISP_EMERG_ALRM_REQ* isp = (lc::tsbk::ISP_EMERG_ALRM_REQ*)tsbk; + ISP_EMERG_ALRM_REQ* isp = static_cast(tsbk.get()); if (isp->getEmergency()) { if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_ISP_EMERG_ALRM_REQ (Emergency Alarm Request), srcId = %u, dstId = %u", @@ -500,7 +501,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) // make sure control data is supported IS_SUPPORT_CONTROL_CHECK("TSBK_IOSP_GRP_AFF (Group Affiliation Query Response)", TSBK_ISP_GRP_AFF_Q_RSP, srcId); - lc::tsbk::ISP_GRP_AFF_Q_RSP* isp = (lc::tsbk::ISP_GRP_AFF_Q_RSP*)tsbk; + ISP_GRP_AFF_Q_RSP* isp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_AFF (Group Affiliation Query Response), srcId = %u, dstId = %u, anncId = %u", srcId, dstId, isp->getAnnounceGroup()); @@ -569,7 +570,6 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK) } m_p25->m_rfState = prevRfState; - delete tsbk; return true; } else { @@ -598,19 +598,18 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L switch (duid) { case P25_DUID_TSDU: if (m_p25->m_netState == RS_NET_IDLE) { - lc::TSBK *tsbk = lc::tsbk::TSBKFactory::createTSBK(data); - if (tsbk == NULL) { + std::unique_ptr tsbk = TSBKFactory::createTSBK(data); + if (tsbk == nullptr) { return false; } // handle updating internal adjacent site information if (tsbk->getLCO() == TSBK_OSP_ADJ_STS_BCAST) { if (!m_p25->m_control) { - delete tsbk; return false; } - lc::tsbk::OSP_ADJ_STS_BCAST* osp = (lc::tsbk::OSP_ADJ_STS_BCAST*)tsbk; + OSP_ADJ_STS_BCAST* osp = static_cast(tsbk.get()); if (osp->getAdjSiteId() != m_p25->m_siteData.siteId()) { // update site table data SiteData site; @@ -653,7 +652,6 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L m_sccbUpdateCnt[site.rfssId()] = ADJ_SITE_UPDATE_CNT; } - delete tsbk; return true; } @@ -681,13 +679,10 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L break; default: LogError(LOG_NET, P25_TSDU_STR ", unhandled LCO, mfId = $%02X, lco = $%02X", tsbk->getMFId(), tsbk->getLCO()); - delete tsbk; return false; } - writeNet_TSDU(tsbk); - - delete tsbk; + writeNet_TSDU(tsbk.get()); return true; } @@ -708,8 +703,6 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl && m_p25->m_affiliations.getRFChCnt() == 1U) { writeRF_TSDU_Grant(srcId, dstId, serviceOptions, true); } - - delete tsbk; } return true; // don't allow this to write to the air case TSBK_IOSP_UU_VCH: @@ -727,13 +720,11 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L if (m_p25->m_dedicatedControl && !m_p25->m_voiceOnControl && m_p25->m_affiliations.getRFChCnt() == 1U) { writeRF_TSDU_Grant(srcId, dstId, serviceOptions, false); } - - delete tsbk; } return true; // don't allow this to write to the air case TSBK_IOSP_UU_ANS: { - lc::tsbk::IOSP_UU_ANS* iosp = (lc::tsbk::IOSP_UU_ANS*)tsbk; + IOSP_UU_ANS* iosp = static_cast(tsbk.get()); if (iosp->getResponse() > 0U) { if (m_verbose) { LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Response), response = $%02X, srcId = %u, dstId = %u", @@ -752,7 +743,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L // validate the source RID VALID_SRCID_NET("TSBK_IOSP_STS_UPDT (Status Update)", srcId); - lc::tsbk::IOSP_STS_UPDT* iosp = (lc::tsbk::IOSP_STS_UPDT*)tsbk; + IOSP_STS_UPDT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_STS_UPDT (Status Update), status = $%02X, srcId = %u", iosp->getStatus(), srcId); @@ -766,7 +757,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L // validate the source RID VALID_SRCID_NET("TSBK_IOSP_MSG_UPDT (Message Update)", srcId); - lc::tsbk::IOSP_MSG_UPDT* iosp = (lc::tsbk::IOSP_MSG_UPDT*)tsbk; + IOSP_MSG_UPDT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_MSG_UPDT (Message Update), message = $%02X, srcId = %u, dstId = %u", iosp->getMessage(), srcId, dstId); @@ -783,7 +774,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L // validate the target RID VALID_DSTID("TSBK_ISP_RAD_MON_REQ (Radio monitor)", TSBK_IOSP_RAD_MON, srcId, dstId); - lc::tsbk::IOSP_RAD_MON* iosp = (lc::tsbk::IOSP_RAD_MON*)tsbk; + IOSP_RAD_MON* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_RF , P25_TSDU_STR ", TSBK_ISP_RAD_MON_REQ (Radio Monitor), srcId = %u, dstId = %u" , srcId , dstId); } @@ -822,7 +813,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L // validate the target RID VALID_DSTID_NET("TSBK_IOSP_ACK_RSP (Acknowledge Response)", dstId); - lc::tsbk::IOSP_ACK_RSP* iosp = (lc::tsbk::IOSP_ACK_RSP*)tsbk; + IOSP_ACK_RSP* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_ACK_RSP (Acknowledge Response), AIV = %u, serviceType = $%02X, srcId = %u, dstId = %u", iosp->getAIV(), iosp->getService(), dstId, srcId); @@ -836,7 +827,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L // validate the target RID VALID_DSTID_NET("TSBK_IOSP_EXT_FNCT (Extended Function)", dstId); - lc::tsbk::IOSP_EXT_FNCT* iosp = (lc::tsbk::IOSP_EXT_FNCT*)tsbk; + IOSP_EXT_FNCT* iosp = static_cast(tsbk.get()); if (m_verbose) { LogMessage(LOG_NET, P25_TSDU_STR ", TSBK_IOSP_EXT_FNCT (Extended Function), serviceType = $%02X, arg = %u, tgt = %u", iosp->getService(), srcId, dstId); @@ -845,7 +836,7 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L break; case TSBK_ISP_EMERG_ALRM_REQ: { - lc::tsbk::ISP_EMERG_ALRM_REQ* isp = (lc::tsbk::ISP_EMERG_ALRM_REQ*)tsbk; + ISP_EMERG_ALRM_REQ* isp = static_cast(tsbk.get()); // non-emergency mode is a TSBK_OSP_DENY_RSP if (!isp->getEmergency()) { @@ -866,28 +857,22 @@ bool Trunk::processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::L break; case TSBK_IOSP_GRP_AFF: // ignore a network group affiliation command - delete tsbk; return true; // don't allow this to write to the air case TSBK_OSP_U_DEREG_ACK: // ignore a network user deregistration command - delete tsbk; return true; // don't allow this to write to the air case TSBK_OSP_LOC_REG_RSP: // ignore a network location registration command - delete tsbk; return true; // don't allow this to write to the air case TSBK_OSP_QUE_RSP: // ignore a network queue command - delete tsbk; return true; // don't allow this to write to the air default: LogError(LOG_NET, P25_TSDU_STR ", unhandled LCO, mfId = $%02X, lco = $%02X", tsbk->getMFId(), tsbk->getLCO()); - delete tsbk; return false; } // switch (tsbk->getLCO()) - writeNet_TSDU(tsbk); - delete tsbk; + writeNet_TSDU(tsbk.get()); } break; default: @@ -907,9 +892,9 @@ bool Trunk::processMBT(DataHeader dataHeader, DataBlock* blocks) uint8_t data[1U]; ::memset(data, 0x00U, 1U); - lc::AMBT* ambt = lc::tsbk::TSBKFactory::createAMBT(dataHeader, blocks); - if (ambt != NULL) { - return process(data, 1U, ambt); + std::unique_ptr ambt = TSBKFactory::createAMBT(dataHeader, blocks); + if (ambt != nullptr) { + return process(data, 1U, ambt.get()); } else { return false; } @@ -936,7 +921,7 @@ void Trunk::writeAdjSSNetwork() } // transmit adjacent site broadcast - lc::tsbk::OSP_ADJ_STS_BCAST *osp = new lc::tsbk::OSP_ADJ_STS_BCAST(); + std::unique_ptr osp = new_unique(OSP_ADJ_STS_BCAST); osp->setSrcId(P25_WUID_FNE); osp->setAdjSiteCFVA(cfva); osp->setAdjSiteSysId(m_p25->m_siteData.sysId()); @@ -946,8 +931,7 @@ void Trunk::writeAdjSSNetwork() osp->setAdjSiteChnNo(m_p25->m_siteData.channelNo()); osp->setAdjSiteSvcClass(m_p25->m_siteData.serviceClass()); - RF_TO_WRITE_NET(osp); - delete osp; + RF_TO_WRITE_NET(osp.get()); } } @@ -1033,12 +1017,11 @@ void Trunk::writeRF_TSDU_Call_Alrt(uint32_t srcId, uint32_t dstId) ::ActivityLog("P25", true, "call alert request from %u to %u", srcId, dstId); - lc::tsbk::IOSP_CALL_ALRT *iosp = new lc::tsbk::IOSP_CALL_ALRT(); + std::unique_ptr iosp = new_unique(IOSP_CALL_ALRT); iosp->setSrcId(srcId); iosp->setDstId(dstId); - writeRF_TSDU_SBF(iosp, false); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false); } /// @@ -1055,13 +1038,12 @@ void Trunk::writeRF_TSDU_Radio_Mon(uint32_t srcId, uint32_t dstId, uint8_t txMul ::ActivityLog("P25" , true , "Radio Unit Monitor request from %u to %u" , srcId , dstId); - lc::tsbk::IOSP_RAD_MON *iosp = new lc::tsbk::IOSP_RAD_MON(); + std::unique_ptr iosp = new_unique(IOSP_RAD_MON); iosp->setSrcId(srcId); iosp->setDstId(dstId); iosp->setTxMult(txMult); - writeRF_TSDU_SBF(iosp, false); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false); } /// @@ -1072,7 +1054,7 @@ void Trunk::writeRF_TSDU_Radio_Mon(uint32_t srcId, uint32_t dstId, uint8_t txMul /// void Trunk::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32_t dstId) { - lc::tsbk::IOSP_EXT_FNCT *iosp = new lc::tsbk::IOSP_EXT_FNCT(); + std::unique_ptr iosp = new_unique(IOSP_EXT_FNCT); iosp->setExtendedFunction(func); iosp->setSrcId(arg); iosp->setDstId(dstId); @@ -1093,8 +1075,7 @@ void Trunk::writeRF_TSDU_Ext_Func(uint32_t func, uint32_t arg, uint32_t dstId) ::ActivityLog("P25", true, "radio uninhibit request from %u to %u", arg, dstId); } - writeRF_TSDU_SBF(iosp, false); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false); } /// @@ -1109,12 +1090,11 @@ void Trunk::writeRF_TSDU_Grp_Aff_Q(uint32_t dstId) ::ActivityLog("P25", true, "group affiliation query command from %u to %u", P25_WUID_FNE, dstId); - lc::tsbk::OSP_GRP_AFF_Q *osp = new lc::tsbk::OSP_GRP_AFF_Q(); + std::unique_ptr osp = new_unique(OSP_GRP_AFF_Q); osp->setSrcId(P25_WUID_FNE); osp->setDstId(dstId); - writeRF_TSDU_SBF(osp, true); - delete osp; + writeRF_TSDU_SBF(osp.get(), true); } /// @@ -1129,12 +1109,11 @@ void Trunk::writeRF_TSDU_U_Reg_Cmd(uint32_t dstId) ::ActivityLog("P25", true, "unit registration command from %u to %u", P25_WUID_FNE, dstId); - lc::tsbk::OSP_U_REG_CMD *osp = new lc::tsbk::OSP_U_REG_CMD(); + std::unique_ptr osp = new_unique(OSP_U_REG_CMD); osp->setSrcId(P25_WUID_FNE); osp->setDstId(dstId); - writeRF_TSDU_SBF(osp, true); - delete osp; + writeRF_TSDU_SBF(osp.get(), true); } /// @@ -1148,7 +1127,7 @@ void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId) return; } - lc::tsbk::ISP_EMERG_ALRM_REQ *isp = new lc::tsbk::ISP_EMERG_ALRM_REQ(); + std::unique_ptr isp = new_unique(ISP_EMERG_ALRM_REQ); isp->setSrcId(srcId); isp->setDstId(dstId); @@ -1157,8 +1136,7 @@ void Trunk::writeRF_TSDU_Emerg_Alrm(uint32_t srcId, uint32_t dstId) srcId, dstId); } - writeRF_TSDU_SBF(isp, true); - delete isp; + writeRF_TSDU_SBF(isp.get(), true); } /// @@ -1171,13 +1149,10 @@ void Trunk::setConvFallback(bool fallback) if (m_convFallback && m_p25->m_control) { m_convFallbackPacketDelay = 0U; - lc::tsbk::OSP_MOT_PSH_CCH *osp = new lc::tsbk::OSP_MOT_PSH_CCH(); - + std::unique_ptr osp = new_unique(OSP_MOT_PSH_CCH); for (uint8_t i = 0U; i < 3U; i++) { - writeRF_TSDU_SBF(osp, true); + writeRF_TSDU_SBF(osp.get(), true); } - - delete osp; } } @@ -1264,7 +1239,7 @@ Trunk::~Trunk() /// void Trunk::writeNetworkRF(lc::TSBK* tsbk, const uint8_t* data, bool autoReset) { - assert(tsbk != NULL); + assert(tsbk != nullptr); assert(data != NULL); if (m_network == NULL) @@ -1603,7 +1578,7 @@ void Trunk::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWri if (!m_p25->m_control) return; - assert(tsbk != NULL); + assert(tsbk != nullptr); uint8_t data[P25_TSDU_FRAME_LENGTH_BYTES + 2U]; ::memset(data + 2U, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES); @@ -1667,7 +1642,7 @@ void Trunk::writeRF_TSDU_SBF(lc::TSBK* tsbk, bool noNetwork, bool clearBeforeWri /// void Trunk::writeNet_TSDU(lc::TSBK* tsbk) { - assert(tsbk != NULL); + assert(tsbk != nullptr); uint8_t buffer[P25_TSDU_FRAME_LENGTH_BYTES + 2U]; ::memset(buffer, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES + 2U); @@ -1710,7 +1685,7 @@ void Trunk::writeRF_TSDU_MBF(lc::TSBK* tsbk, bool clearBeforeWrite) return; } - assert(tsbk != NULL); + assert(tsbk != nullptr); uint8_t frame[P25_TSBK_FEC_LENGTH_BYTES]; ::memset(frame, 0x00U, P25_TSBK_FEC_LENGTH_BYTES); @@ -1828,7 +1803,7 @@ void Trunk::writeRF_TSDU_AMBT(lc::AMBT* ambt, bool clearBeforeWrite) if (!m_p25->m_control) return; - assert(ambt != NULL); + assert(ambt != nullptr); DataHeader header = DataHeader(); uint8_t pduUserData[P25_PDU_UNCONFIRMED_LENGTH_BYTES * P25_MAX_PDU_COUNT]; @@ -1862,7 +1837,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) if (!m_p25->m_control) return; - lc::TSBK* tsbk = NULL; + std::unique_ptr tsbk; switch (lco) { case TSBK_OSP_GRP_VCH_GRANT_UPD: @@ -1875,7 +1850,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_GRP_VCH_GRANT_UPD (Group Voice Channel Grant Update)"); } - lc::tsbk::OSP_GRP_VCH_GRANT_UPD* osp = new lc::tsbk::OSP_GRP_VCH_GRANT_UPD(); + std::unique_ptr osp = new_unique(OSP_GRP_VCH_GRANT_UPD); bool noData = false; uint8_t i = 0U; @@ -1908,10 +1883,9 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } if (noData) { - delete osp; return; // don't create anything } else { - tsbk = osp; + tsbk = std::move(osp); } } else { @@ -1943,18 +1917,18 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) // handle 700/800/900 identities if (entry.baseFrequency() >= 762000000U) { - lc::tsbk::OSP_IDEN_UP* osp = new lc::tsbk::OSP_IDEN_UP(); + std::unique_ptr osp = new_unique(OSP_IDEN_UP); osp->siteIdenEntry(entry); // transmit channel ident broadcast - tsbk = osp; + tsbk = std::move(osp); } else { - lc::tsbk::OSP_IDEN_UP_VU* osp = new lc::tsbk::OSP_IDEN_UP_VU(); + std::unique_ptr osp = new_unique(OSP_IDEN_UP_VU); osp->siteIdenEntry(entry); // transmit channel ident broadcast - tsbk = osp; + tsbk = std::move(osp); } m_mbfIdenCnt++; @@ -1969,7 +1943,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit net status burst - tsbk = new lc::tsbk::OSP_NET_STS_BCAST(); + tsbk = new_unique(OSP_NET_STS_BCAST); break; case TSBK_OSP_RFSS_STS_BCAST: if (m_debug) { @@ -1977,7 +1951,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit rfss status burst - tsbk = new lc::tsbk::OSP_RFSS_STS_BCAST(); + tsbk = new_unique(OSP_RFSS_STS_BCAST); break; case TSBK_OSP_ADJ_STS_BCAST: // write ADJSS @@ -1989,7 +1963,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_ADJ_STS_BCAST (Adjacent Site Broadcast)"); } - lc::tsbk::OSP_ADJ_STS_BCAST* osp = new lc::tsbk::OSP_ADJ_STS_BCAST(); + std::unique_ptr osp = new_unique(OSP_ADJ_STS_BCAST); uint8_t i = 0U; for (auto it = m_adjSiteTable.begin(); it != m_adjSiteTable.end(); ++it) { @@ -2018,7 +1992,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) osp->setAdjSiteChnNo(site.channelNo()); osp->setAdjSiteSvcClass(site.serviceClass()); - tsbk = osp; + tsbk = std::move(osp); m_mbfAdjSSCnt++; break; } @@ -2038,7 +2012,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_OSP_SCCB_EXP (Secondary Control Channel Broadcast)"); } - lc::tsbk::OSP_SCCB_EXP* osp = new lc::tsbk::OSP_SCCB_EXP(); + std::unique_ptr osp = new_unique(OSP_SCCB_EXP); uint8_t i = 0U; for (auto it = m_sccbTable.begin(); it != m_sccbTable.end(); ++it) { @@ -2055,7 +2029,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) osp->setSCCBChnId1(site.channelId()); osp->setSCCBChnNo(site.channelNo()); - tsbk = osp; + tsbk = std::move(osp); m_mbfSCCBCnt++; break; } @@ -2071,7 +2045,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit SNDCP announcement - tsbk = new lc::tsbk::OSP_SNDCP_CH_ANN(); + tsbk = new_unique(OSP_SNDCP_CH_ANN); break; case TSBK_OSP_SYNC_BCAST: { @@ -2080,8 +2054,9 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit sync broadcast - lc::tsbk::OSP_SYNC_BCAST* osp = new lc::tsbk::OSP_SYNC_BCAST(); + std::unique_ptr osp = new_unique(OSP_SYNC_BCAST); osp->setMicroslotCount(m_microslotCount); + tsbk = std::move(osp); } break; @@ -2092,7 +2067,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit motorola PSH CCH burst - tsbk = new lc::tsbk::OSP_MOT_PSH_CCH(); + tsbk = new_unique(OSP_MOT_PSH_CCH); break; case TSBK_OSP_MOT_CC_BSI: @@ -2101,7 +2076,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit motorola CC BSI burst - tsbk = new lc::tsbk::OSP_MOT_CC_BSI(); + tsbk = new_unique(OSP_MOT_CC_BSI); break; /** DVM CC data */ @@ -2111,7 +2086,7 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) } // transmit git hash burst - tsbk = new lc::tsbk::OSP_DVM_GIT_HASH(); + tsbk = new_unique(OSP_DVM_GIT_HASH); break; } @@ -2120,13 +2095,11 @@ void Trunk::queueRF_TSBK_Ctrl(uint8_t lco) // are we transmitting CC as a multi-block? if (m_ctrlTSDUMBF) { - writeRF_TSDU_MBF(tsbk); + writeRF_TSDU_MBF(tsbk.get()); } else { - writeRF_TSDU_SBF(tsbk, true); + writeRF_TSDU_SBF(tsbk.get(), true); } - - delete tsbk; } } @@ -2240,7 +2213,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp ::ActivityLog("P25", true, "group grant request from %u to TG %u", srcId, dstId); } - lc::tsbk::IOSP_GRP_VCH *iosp = new lc::tsbk::IOSP_GRP_VCH(); + std::unique_ptr iosp = new_unique(IOSP_GRP_VCH); iosp->setSrcId(srcId); iosp->setDstId(dstId); iosp->setGrpVchNo(chNo); @@ -2255,15 +2228,14 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp // transmit group grant // m_p25->m_writeImmediate = true; - writeRF_TSDU_SBF(iosp, false, true, net); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false, true, net); } else { if (!net) { ::ActivityLog("P25", true, "unit-to-unit grant request from %u to %u", srcId, dstId); } - lc::tsbk::IOSP_UU_VCH *iosp = new lc::tsbk::IOSP_UU_VCH(); + std::unique_ptr iosp = new_unique(IOSP_UU_VCH); iosp->setSrcId(srcId); iosp->setDstId(dstId); iosp->setGrpVchNo(chNo); @@ -2278,8 +2250,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp // transmit private grant // m_p25->m_writeImmediate = true; - writeRF_TSDU_SBF(iosp, false, true, net); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false, true, net); } } @@ -2296,7 +2267,7 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp /// bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, bool net) { - lc::tsbk::OSP_SNDCP_CH_GNT *osp = new lc::tsbk::OSP_SNDCP_CH_GNT(); + std::unique_ptr osp = new_unique(OSP_SNDCP_CH_GNT); osp->setSrcId(srcId); osp->setDstId(dstId); @@ -2315,7 +2286,6 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, m_p25->m_rfState = RS_RF_REJECTED; } - delete osp; return false; } @@ -2329,7 +2299,6 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, m_p25->m_rfState = RS_RF_REJECTED; } - delete osp; return false; } else { @@ -2360,8 +2329,7 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, } // transmit SNDCP grant - writeRF_TSDU_SBF(osp, false, true, net); - delete osp; + writeRF_TSDU_SBF(osp.get(), false, true, net); return true; } @@ -2372,7 +2340,7 @@ bool Trunk::writeRF_TSDU_SNDCP_Grant(uint32_t srcId, uint32_t dstId, bool skip, /// void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId) { - lc::tsbk::IOSP_UU_ANS *iosp = new lc::tsbk::IOSP_UU_ANS(); + std::unique_ptr iosp = new_unique(IOSP_UU_ANS); iosp->setSrcId(srcId); iosp->setDstId(dstId); @@ -2380,8 +2348,7 @@ void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId) LogMessage(LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_ANS (Unit-to-Unit Answer Request), srcId = %u, dstId = %u", srcId, dstId); } - writeRF_TSDU_SBF(iosp, false); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false); } /// @@ -2392,7 +2359,7 @@ void Trunk::writeRF_TSDU_UU_Ans_Req(uint32_t srcId, uint32_t dstId) /// void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended, bool noNetwork) { - lc::tsbk::IOSP_ACK_RSP *iosp = new lc::tsbk::IOSP_ACK_RSP(); + std::unique_ptr iosp = new_unique(IOSP_ACK_RSP); iosp->setSrcId(srcId); iosp->setService(service); @@ -2406,8 +2373,7 @@ void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended iosp->getAIV(), iosp->getEX(), iosp->getService(), srcId); } - writeRF_TSDU_SBF(iosp, noNetwork); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), noNetwork); } /// @@ -2419,7 +2385,7 @@ void Trunk::writeRF_TSDU_ACK_FNE(uint32_t srcId, uint32_t service, bool extended /// void Trunk::writeRF_TSDU_Deny(uint32_t dstId, uint8_t reason, uint8_t service, bool aiv) { - lc::tsbk::OSP_DENY_RSP* osp = new lc::tsbk::OSP_DENY_RSP(); + std::unique_ptr osp = new_unique(OSP_DENY_RSP); osp->setAIV(aiv); osp->setSrcId(P25_WUID_FNE); osp->setDstId(dstId); @@ -2431,8 +2397,7 @@ void Trunk::writeRF_TSDU_Deny(uint32_t dstId, uint8_t reason, uint8_t service, b osp->getAIV(), reason, osp->getSrcId(), osp->getDstId()); } - writeRF_TSDU_SBF(osp, false); - delete osp; + writeRF_TSDU_SBF(osp.get(), false); } /// @@ -2444,7 +2409,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId) { bool ret = false; - lc::tsbk::IOSP_GRP_AFF *iosp = new lc::tsbk::IOSP_GRP_AFF(); + std::unique_ptr iosp = new_unique(IOSP_GRP_AFF); iosp->setAnnounceGroup(m_patchSuperGroup); // this isn't right... iosp->setSrcId(srcId); iosp->setDstId(dstId); @@ -2489,8 +2454,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId) m_p25->m_affiliations.groupAff(srcId, dstId); } - writeRF_TSDU_SBF(iosp, false); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), false); return ret; } @@ -2501,7 +2465,7 @@ bool Trunk::writeRF_TSDU_Grp_Aff_Rsp(uint32_t srcId, uint32_t dstId) /// void Trunk::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId) { - lc::tsbk::IOSP_U_REG *iosp = new lc::tsbk::IOSP_U_REG(); + std::unique_ptr iosp = new_unique(IOSP_U_REG); iosp->setResponse(P25_RSP_ACCEPT); iosp->setSrcId(srcId); iosp->setDstId(srcId); @@ -2533,8 +2497,7 @@ void Trunk::writeRF_TSDU_U_Reg_Rsp(uint32_t srcId, uint32_t sysId) } } - writeRF_TSDU_SBF(iosp, true); - delete iosp; + writeRF_TSDU_SBF(iosp.get(), true); // validate the source RID if (!acl::AccessControl::validateSrcId(srcId)) { @@ -2560,12 +2523,11 @@ void Trunk::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId) ::ActivityLog("P25", true, "unit deregistration request from %u", srcId); - lc::tsbk::OSP_U_DEREG_ACK *osp = new lc::tsbk::OSP_U_DEREG_ACK(); + std::unique_ptr osp = new_unique(OSP_U_DEREG_ACK); osp->setSrcId(P25_WUID_FNE); osp->setDstId(srcId); - writeRF_TSDU_SBF(osp, false); - delete osp; + writeRF_TSDU_SBF(osp.get(), false); } else { ::ActivityLog("P25", true, "unit deregistration request from %u denied", srcId); @@ -2581,7 +2543,7 @@ void Trunk::writeRF_TSDU_U_Dereg_Ack(uint32_t srcId) /// void Trunk::writeRF_TSDU_Queue(uint32_t dstId, uint8_t reason, uint8_t service, bool aiv) { - lc::tsbk::OSP_QUE_RSP *osp = new lc::tsbk::OSP_QUE_RSP(); + std::unique_ptr osp = new_unique(OSP_QUE_RSP); osp->setAIV(aiv); osp->setSrcId(P25_WUID_FNE); osp->setDstId(dstId); @@ -2593,8 +2555,7 @@ void Trunk::writeRF_TSDU_Queue(uint32_t dstId, uint8_t reason, uint8_t service, osp->getAIV(), reason, osp->getSrcId(), osp->getDstId()); } - writeRF_TSDU_SBF(osp, false); - delete osp; + writeRF_TSDU_SBF(osp.get(), false); } /// @@ -2607,7 +2568,7 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp) { bool ret = false; - lc::tsbk::OSP_LOC_REG_RSP *osp = new lc::tsbk::OSP_LOC_REG_RSP(); + std::unique_ptr osp = new_unique(OSP_LOC_REG_RSP); osp->setResponse(P25_RSP_ACCEPT); osp->setDstId(dstId); osp->setSrcId(srcId); @@ -2650,8 +2611,7 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp) ret = true; } - writeRF_TSDU_SBF(osp, false); - delete osp; + writeRF_TSDU_SBF(osp.get(), false); return ret; } @@ -2662,14 +2622,13 @@ bool Trunk::writeRF_TSDU_Loc_Reg_Rsp(uint32_t srcId, uint32_t dstId, bool grp) /// bool Trunk::writeNet_TSDU_Call_Term(uint32_t srcId, uint32_t dstId) { - lc::tsbk::OSP_DVM_LC_CALL_TERM* osp = new lc::tsbk::OSP_DVM_LC_CALL_TERM(); + std::unique_ptr osp = new_unique(OSP_DVM_LC_CALL_TERM); osp->setGrpVchId(m_p25->m_siteData.channelId()); osp->setGrpVchNo(m_p25->m_siteData.channelNo()); osp->setDstId(dstId); osp->setSrcId(srcId); - writeRF_TSDU_SBF(osp, false); - delete osp; + writeRF_TSDU_SBF(osp.get(), false); return true; } diff --git a/p25/packet/Trunk.h b/p25/packet/Trunk.h index 47a59147..6984ff8e 100644 --- a/p25/packet/Trunk.h +++ b/p25/packet/Trunk.h @@ -64,7 +64,7 @@ namespace p25 class HOST_SW_API Trunk { public: /// Process a data frame from the RF interface. - virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = NULL); + virtual bool process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK = nullptr); /// Process a data frame from the network. virtual bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid);