fix issue incorrect passing of the lc::AMBT unique_ptr;

3.0-rcon_maint
Bryan Biedenkapp 3 years ago
parent ad78007cd4
commit 70c7902e92

@ -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;

@ -48,7 +48,7 @@ using namespace p25::dfsi::packet;
/// <param name="len">Length of data frame.</param>
/// <param name="preDecodedTSBK">Pre-decoded TSBK.</param>
/// <returns></returns>
bool DFSITrunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
bool DFSITrunk::process(uint8_t* data, uint32_t len, std::unique_ptr<lc::TSBK> 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<lc::TSBK>(m_rfDFSILC.tsbk()));
}
}

@ -53,7 +53,7 @@ namespace p25
class HOST_SW_API DFSITrunk : public p25::packet::Trunk {
public:
/// <summary>Process a data frame from the RF interface.</summary>
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<lc::TSBK> preDecodedTSBK = nullptr);
protected:
LC m_rfDFSILC;

@ -152,7 +152,7 @@ const uint8_t CONV_FALLBACK_PACKET_DELAY = 8U;
/// <param name="len">Length of data frame.</param>
/// <param name="preDecodedTSBK">Pre-decoded TSBK.</param>
/// <returns></returns>
bool Trunk::process(uint8_t* data, uint32_t len, lc::TSBK* preDecodedTSBK)
bool Trunk::process(uint8_t* data, uint32_t len, std::unique_ptr<lc::TSBK> 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<lc::TSBK>(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<lc::AMBT> 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;
}
/// <summary>

@ -64,7 +64,7 @@ namespace p25
class HOST_SW_API Trunk {
public:
/// <summary>Process a data frame from the RF interface.</summary>
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<lc::TSBK> preDecodedTSBK = nullptr);
/// <summary>Process a data frame from the network.</summary>
virtual bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid);

@ -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());

Loading…
Cancel
Save

Powered by TurnKey Linux.