diff --git a/p25/dfsi/LC.cpp b/p25/dfsi/LC.cpp
index 76a886bd..5e49e7c8 100644
--- a/p25/dfsi/LC.cpp
+++ b/p25/dfsi/LC.cpp
@@ -280,6 +280,8 @@ bool LC::decodeLDU1(const uint8_t* data, uint8_t* imbe)
m_control.setEmergency((serviceOptions & 0x80U) == 0x80U);
m_control.setEncrypted((serviceOptions & 0x40U) == 0x40U);
m_control.setPriority((serviceOptions & 0x07U));
+ LogMessage(LOG_NET, "dfsi::LC::decodeLDU1, raw control service, options = %02X, emerg = %u, encrypt = %u, prio = %u",
+ serviceOptions, m_control.getEmergency(), m_control.getEncrypted(), m_control.getPriority());
::memcpy(imbe, data + 5U, P25_RAW_IMBE_LENGTH_BYTES); // IMBE
}
break;
diff --git a/p25/dfsi/packet/DFSITrunk.cpp b/p25/dfsi/packet/DFSITrunk.cpp
index a0a3b555..0f7ccc6b 100644
--- a/p25/dfsi/packet/DFSITrunk.cpp
+++ b/p25/dfsi/packet/DFSITrunk.cpp
@@ -48,7 +48,7 @@ using namespace p25::dfsi::packet;
/// Length of data frame.
/// Pre-decoded TSBK.
///
-bool DFSITrunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
+bool DFSITrunk::process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK)
{
assert(data != nullptr);
@@ -59,11 +59,11 @@ bool DFSITrunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
return false;
if (preDecodedTSBK != nullptr) {
- return Trunk::process(data + 2U, len, preDecodedTSBK);
+ return Trunk::process(data + 2U, len, std::move(preDecodedTSBK));
}
else {
if (m_rfDFSILC.decodeTSBK(data + 2U)) {
- return Trunk::process(tsbk, P25_TSBK_LENGTH_BYTES, m_rfDFSILC.tsbk());
+ return Trunk::process(tsbk, P25_TSBK_LENGTH_BYTES, std::unique_ptr(m_rfDFSILC.tsbk()));
}
}
diff --git a/p25/dfsi/packet/DFSITrunk.h b/p25/dfsi/packet/DFSITrunk.h
index 075ecb34..696472ef 100644
--- a/p25/dfsi/packet/DFSITrunk.h
+++ b/p25/dfsi/packet/DFSITrunk.h
@@ -53,7 +53,7 @@ namespace p25
class HOST_SW_API DFSITrunk : public p25::packet::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, std::unique_ptr preDecodedTSBK = nullptr);
protected:
LC m_rfDFSILC;
diff --git a/p25/packet/Trunk.cpp b/p25/packet/Trunk.cpp
index 7df44fb8..b284f46e 100644
--- a/p25/packet/Trunk.cpp
+++ b/p25/packet/Trunk.cpp
@@ -152,7 +152,7 @@ const uint8_t CONV_FALLBACK_PACKET_DELAY = 8U;
/// Length of data frame.
/// Pre-decoded TSBK.
///
-bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
+bool Trunk::process(uint8_t* data, uint32_t len, std::unique_ptr preDecodedTSBK)
{
assert(data != nullptr);
@@ -191,7 +191,7 @@ bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
return false;
}
} else {
- tsbk = std::unique_ptr(preDecodedTSBK);
+ tsbk = std::move(preDecodedTSBK);
}
uint32_t srcId = tsbk->getSrcId();
@@ -907,12 +907,14 @@ bool Trunk::processMBT(DataHeader dataHeader, DataBlock* blocks)
uint8_t data[1U];
::memset(data, 0x00U, 1U);
+ bool ret = false;
+
std::unique_ptr ambt = TSBKFactory::createAMBT(dataHeader, blocks);
if (ambt != nullptr) {
- return process(data, 1U, ambt.get());
- } else {
- return false;
+ ret = process(data, 1U, std::move(ambt));
}
+
+ return ret;
}
///
diff --git a/p25/packet/Trunk.h b/p25/packet/Trunk.h
index c7bb9ec3..af7d3d29 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 = nullptr);
+ virtual bool process(uint8_t* data, uint32_t len, std::unique_ptr 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);
diff --git a/p25/packet/Voice.cpp b/p25/packet/Voice.cpp
index 4a9c3c57..5ddd51e9 100644
--- a/p25/packet/Voice.cpp
+++ b/p25/packet/Voice.cpp
@@ -1120,6 +1120,9 @@ void Voice::writeNet_LDU1()
m_p25->m_affiliations.touchGrant(m_rfLC.getDstId());
}
+ LogMessage(LOG_NET, P25_LDU1_STR " raw control service, emerg = %u, encrypt = %u, prio = %u",
+ control.getEmergency(), control.getEncrypted(), control.getPriority());
+
// set network and RF link control states
m_netLC = lc::LC();
m_netLC.setLCO(control.getLCO());