diff --git a/edac/CRC.cpp b/edac/CRC.cpp
index 895b234d..cdca1354 100644
--- a/edac/CRC.cpp
+++ b/edac/CRC.cpp
@@ -253,7 +253,7 @@ bool CRC::checkCCITT162(const uint8_t *in, uint32_t length)
#if DEBUG_CRC
uint16_t inCrc = (in[length - 2U] << 8) | (in[length - 1U] << 0);
- LogDebug(LOG_HOST, "CRC::checkCCITT161(), crc = $%04X, in = $%04X, len = %u", crc16, inCrc, length);
+ LogDebug(LOG_HOST, "CRC::checkCCITT162(), crc = $%04X, in = $%04X, len = %u", crc16, inCrc, length);
#endif
return crc8[0U] == in[length - 1U] && crc8[1U] == in[length - 2U];
diff --git a/p25/data/DataBlock.cpp b/p25/data/DataBlock.cpp
index 3c30d7a9..cf337af8 100644
--- a/p25/data/DataBlock.cpp
+++ b/p25/data/DataBlock.cpp
@@ -124,10 +124,6 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader header)
::memcpy(m_data, buffer + 2U, count); // Payload Data
}
-#if DEBUG_P25_PDU_DATA
- Utils::dump(1U, "P25, DataBlock::decode(), Confirmed PDU Block Data", m_data, count);
-#endif
-
// compute CRC-9 for the packet
uint16_t calculated = edac::CRC::crc9(buffer, 144U);
if (((crc ^ calculated) != 0) && ((crc ^ calculated) != 0x1FFU)) {
@@ -136,6 +132,7 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader header)
#if DEBUG_P25_PDU_DATA
LogDebug(LOG_P25, "P25_DUID_PDU, fmt = $%02X, crc = $%04X, calculated = $%04X", m_fmt, crc, calculated);
+ Utils::dump(1U, "P25, DataBlock::decode(), Confirmed PDU Block Data", m_data, count);
#endif
}
catch (...) {
diff --git a/p25/data/DataHeader.cpp b/p25/data/DataHeader.cpp
index c81853b6..a359f4e7 100644
--- a/p25/data/DataHeader.cpp
+++ b/p25/data/DataHeader.cpp
@@ -101,12 +101,12 @@ bool DataHeader::decode(const uint8_t* data)
}
#if DEBUG_P25_PDU_DATA
- Utils::dump(1U, "P25, DataHeader::decode(), PDU Header Data", data, P25_PDU_HEADER_LENGTH_BYTES);
+ Utils::dump(1U, "P25, DataHeader::decode(), PDU Header Data", header, P25_PDU_HEADER_LENGTH_BYTES);
#endif
m_ackNeeded = (header[0U] & 0x40U) == 0x40U; // Acknowledge Needed
m_outbound = (header[0U] & 0x20U) == 0x20U; // Inbound/Outbound
- m_fmt = header[0U] & 0x1F; // Packet Format
+ m_fmt = header[0U] & 0x1FU; // Packet Format
m_sap = header[1U] & 0x3FU; // Service Access Point
@@ -193,7 +193,7 @@ void DataHeader::encode(uint8_t* data)
(m_fmt & 0x1FU); // Packet Format
header[1U] = m_sap & 0x3FU; // Service Access Point
- header[1U] |= 0xC0;
+ header[1U] |= 0xC0U;
header[2U] = m_mfId; // Mfg Id.
diff --git a/p25/packet/Data.cpp b/p25/packet/Data.cpp
index 65311d84..da79654b 100644
--- a/p25/packet/Data.cpp
+++ b/p25/packet/Data.cpp
@@ -290,7 +290,7 @@ bool Data::process(uint8_t* data, uint32_t len)
LogMessage(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_REQ_CNCT (Registration Request Connect), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
}
- m_connQueueTable[llId] = ipAddr;
+ m_connQueueTable[llId] = std::make_tuple(m_rfDataHeader.getMFId(), ipAddr);
m_connTimerTable[llId] = Timer(1000U, CONN_WAIT_TIMEOUT);
m_connTimerTable[llId].start();
@@ -569,11 +569,12 @@ void Data::clock(uint32_t ms)
// handle PDU connection registration
for (auto it = connToClear.begin(); it != connToClear.end(); ++it) {
uint32_t llId = *it;
- uint64_t ipAddr = m_connQueueTable[llId];
+ uint8_t mfId = std::get<0>(m_connQueueTable[llId]);
+ uint64_t ipAddr = std::get<1>(m_connQueueTable[llId]);
if (!acl::AccessControl::validateSrcId(llId)) {
LogWarning(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_RSP_DENY (Registration Response Deny), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
- writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_DENY, llId, ipAddr);
+ writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_DENY, mfId, llId, ipAddr);
}
else {
if (!hasLLIdFNEReg(llId)) {
@@ -585,7 +586,7 @@ void Data::clock(uint32_t ms)
LogMessage(LOG_RF, P25_PDU_STR ", PDU_REG_TYPE_RSP_ACCPT (Registration Response Accept), llId = %u, ipAddr = %s", llId, __IP_FROM_ULONG(ipAddr).c_str());
}
- writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_ACCPT, llId, ipAddr);
+ writeRF_PDU_Reg_Response(PDU_REG_TYPE_RSP_ACCPT, mfId, llId, ipAddr);
}
m_connQueueTable.erase(llId);
@@ -833,9 +834,10 @@ void Data::writeRF_PDU_Buffered()
/// Helper to write a PDU registration response.
///
///
+///
///
///
-void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint32_t llId, ulong64_t ipAddr)
+void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId, ulong64_t ipAddr)
{
if ((regType != PDU_REG_TYPE_RSP_ACCPT) && (regType != PDU_REG_TYPE_RSP_DENY))
return;
@@ -850,11 +852,11 @@ void Data::writeRF_PDU_Reg_Response(uint8_t regType, uint32_t llId, ulong64_t ip
DataHeader rspHeader = DataHeader();
rspHeader.setFormat(PDU_FMT_CONFIRMED);
- rspHeader.setMFId(m_rfDataHeader.getMFId());
+ rspHeader.setMFId(mfId);
rspHeader.setAckNeeded(true);
rspHeader.setOutbound(true);
rspHeader.setSAP(PDU_SAP_REG);
- rspHeader.setLLId(m_rfDataHeader.getLLId());
+ rspHeader.setLLId(llId);
rspHeader.setBlocksToFollow(1U);
// Generate the PDU header and 1/2 rate Trellis
diff --git a/p25/packet/Data.h b/p25/packet/Data.h
index 4bdfeeb6..6b877316 100644
--- a/p25/packet/Data.h
+++ b/p25/packet/Data.h
@@ -110,7 +110,7 @@ namespace p25
std::unordered_map m_fneRegTable;
- std::unordered_map m_connQueueTable;
+ std::unordered_map> m_connQueueTable;
std::unordered_map m_connTimerTable;
bool m_dumpPDUData;
@@ -134,7 +134,7 @@ namespace p25
/// Helper to re-write a received P25 PDU packet.
void writeRF_PDU_Buffered();
/// Helper to write a PDU registration response.
- void writeRF_PDU_Reg_Response(uint8_t regType, uint32_t llId, ulong64_t ipAddr);
+ void writeRF_PDU_Reg_Response(uint8_t regType, uint8_t mfId, uint32_t llId, ulong64_t ipAddr);
/// Helper to write a PDU acknowledge response.
void writeRF_PDU_Ack_Response(uint8_t ackClass, uint8_t ackType, uint32_t llId, bool noNulls = false);
};