Merge branch 'master' into incall_ctrl

pull/86/head
Bryan Biedenkapp 1 year ago
commit 77291533c6

@ -70,6 +70,8 @@ master:
disablePacketData: false
# Flag indicating whether verbose dumping of data packets is enabled.
dumpPacketData: false
# Flag indicating whether verbose logging of data packet operations is enabled.
verbosePacketData: false
# Delay from when a call on a parrot TG ends to when the playback starts (in milliseconds).
parrotDelay: 2000

@ -194,6 +194,12 @@ namespace lookups
*/
bool isPeerAllowed(uint32_t id) const;
/**
* @brief Checks if the peer list is empty.
* @returns bool True, if list is empty, otherwise false.
*/
bool isPeerListEmpty() const { return m_table.size() == 0U; }
/**
* @brief Sets the mode to either WHITELIST or BLACKLIST.
* @param mode The mode to set.

@ -42,7 +42,8 @@ DataBlock::DataBlock() :
DataBlock::~DataBlock()
{
delete[] m_data;
if (m_data != nullptr)
delete[] m_data;
}
/* Decodes P25 PDU data block. */

@ -97,6 +97,7 @@ FNENetwork::FNENetwork(HostFNE* host, const std::string& address, uint16_t port,
m_influxLogRawData(false),
m_disablePacketData(false),
m_dumpPacketData(false),
m_verbosePacketData(false),
m_reportPeerPing(reportPeerPing),
m_verbose(verbose)
{
@ -158,6 +159,7 @@ void FNENetwork::setOptions(yaml::Node& conf, bool printOptions)
m_disablePacketData = conf["disablePacketData"].as<bool>(false);
m_dumpPacketData = conf["dumpPacketData"].as<bool>(false);
m_verbosePacketData = conf["verbosePacketData"].as<bool>(false);
/*
** Drop Unit to Unit Peers
@ -591,7 +593,11 @@ void* FNENetwork::threadedNetworkRx(void* arg)
// check if the peer is in the peer ACL list
if (network->m_peerListLookup->getACL()) {
if (!network->m_peerListLookup->isPeerAllowed(peerId)) {
if (network->m_peerListLookup->isPeerListEmpty()) {
LogWarning(LOG_NET, "Peer List ACL enabled, but we have an empty peer list? Passing all peers.");
}
if (!network->m_peerListLookup->isPeerAllowed(peerId) && !network->m_peerListLookup->isPeerListEmpty()) {
if (network->m_peerListLookup->getMode() == lookups::PeerListLookup::BLACKLIST) {
LogWarning(LOG_NET, "PEER %u RPTL, blacklisted from access", peerId);
} else {
@ -625,7 +631,11 @@ void* FNENetwork::threadedNetworkRx(void* arg)
// check if the peer is in the peer ACL list
if (network->m_peerListLookup->getACL()) {
if (!network->m_peerListLookup->isPeerAllowed(peerId)) {
if (network->m_peerListLookup->isPeerListEmpty()) {
LogWarning(LOG_NET, "Peer List ACL enabled, but we have an empty peer list? Passing all peers.");
}
if (!network->m_peerListLookup->isPeerAllowed(peerId) && !network->m_peerListLookup->isPeerListEmpty()) {
if (network->m_peerListLookup->getMode() == lookups::PeerListLookup::BLACKLIST) {
LogWarning(LOG_NET, "PEER %u RPTL, blacklisted from access", peerId);
} else {
@ -681,7 +691,7 @@ void* FNENetwork::threadedNetworkRx(void* arg)
// check if the peer is in the peer ACL list
bool validAcl = true;
if (network->m_peerListLookup->getACL()) {
if (!network->m_peerListLookup->isPeerAllowed(peerId)) {
if (!network->m_peerListLookup->isPeerAllowed(peerId) && !network->m_peerListLookup->isPeerListEmpty()) {
if (network->m_peerListLookup->getMode() == lookups::PeerListLookup::BLACKLIST) {
LogWarning(LOG_NET, "PEER %u RPTK, blacklisted from access", peerId);
} else {
@ -700,6 +710,11 @@ void* FNENetwork::threadedNetworkRx(void* arg)
}
}
}
if (network->m_peerListLookup->isPeerListEmpty()) {
LogWarning(LOG_NET, "Peer List ACL enabled, but we have an empty peer list? Passing all peers.");
validAcl = true;
}
}
if (validAcl) {

@ -479,6 +479,7 @@ namespace network
bool m_disablePacketData;
bool m_dumpPacketData;
bool m_verbosePacketData;
bool m_reportPeerPing;
bool m_verbose;

@ -683,10 +683,10 @@ void P25PacketData::dispatchToFNE(uint32_t peerId)
}
write_PDU_User(peer.first, nullptr, status->header, status->extendedAddress, status->pduUserData, true);
if (m_network->m_debug) {
// if (m_network->m_debug) {
LogDebug(LOG_NET, "P25, srcPeer = %u, dstPeer = %u, duid = $%02X, srcId = %u, dstId = %u",
peerId, peer.first, DUID::PDU, srcId, dstId);
}
// }
i++;
}
@ -713,16 +713,16 @@ void P25PacketData::dispatchToFNE(uint32_t peerId)
}
write_PDU_User(dstPeerId, peer.second, status->header, status->extendedAddress, status->pduUserData);
if (m_network->m_debug) {
// if (m_network->m_debug) {
LogDebug(LOG_NET, "P25, srcPeer = %u, dstPeer = %u, duid = $%02X, srcId = %u, dstId = %u",
peerId, dstPeerId, DUID::PDU, srcId, dstId);
}
// }
}
}
}
}
/* Helper to dispatch PDU user data back to the FNE network. */
/* Helper to dispatch PDU user data back to the local FNE network. (Will not transmit to external peers.) */
void P25PacketData::dispatchUserFrameToFNE(p25::data::DataHeader& dataHeader, bool extendedAddress, uint8_t* pduUserData)
{
@ -759,19 +759,6 @@ void P25PacketData::dispatchUserFrameToFNE(p25::data::DataHeader& dataHeader, bo
}
m_network->m_frameQueue->flushQueue();
}
// repeat traffic to external peers
if (m_network->m_host->m_peerNetworks.size() > 0U) {
for (auto peer : m_network->m_host->m_peerNetworks) {
uint32_t dstPeerId = peer.second->getPeerId();
write_PDU_User(dstPeerId, peer.second, dataHeader, extendedAddress, pduUserData);
if (m_network->m_debug) {
LogDebug(LOG_NET, "P25, dstPeer = %u, duid = $%02X, srcId = %u, dstId = %u",
dstPeerId, DUID::PDU, srcId, dstId);
}
}
}
}
/* Helper used to process SNDCP control data from PDU data. */
@ -962,10 +949,11 @@ void P25PacketData::write_PDU_User(uint32_t peerId, network::PeerNetwork* peerNe
uint32_t blocksToFollow = dataHeader.getBlocksToFollow();
LogMessage(LOG_NET, P25_PDU_STR ", OSP, peerId = %u, ack = %u, outbound = %u, fmt = $%02X, mfId = $%02X, sap = $%02X, fullMessage = %u, blocksToFollow = %u, padLength = %u, packetLength = %u, S = %u, n = %u, seqNo = %u, lastFragment = %u, hdrOffset = %u, llId = %u",
peerId, dataHeader.getAckNeeded(), dataHeader.getOutbound(), dataHeader.getFormat(), dataHeader.getMFId(), dataHeader.getSAP(), dataHeader.getFullMessage(),
dataHeader.getBlocksToFollow(), dataHeader.getPadLength(), dataHeader.getPacketLength(), dataHeader.getSynchronize(), dataHeader.getNs(), dataHeader.getFSN(), dataHeader.getLastFragment(),
dataHeader.getHeaderOffset(), dataHeader.getLLId());
if (m_network->m_verbosePacketData)
LogMessage(LOG_NET, P25_PDU_STR ", OSP, peerId = %u, ack = %u, outbound = %u, fmt = $%02X, mfId = $%02X, sap = $%02X, fullMessage = %u, blocksToFollow = %u, padLength = %u, packetLength = %u, S = %u, n = %u, seqNo = %u, lastFragment = %u, hdrOffset = %u, llId = %u",
peerId, dataHeader.getAckNeeded(), dataHeader.getOutbound(), dataHeader.getFormat(), dataHeader.getMFId(), dataHeader.getSAP(), dataHeader.getFullMessage(),
dataHeader.getBlocksToFollow(), dataHeader.getPadLength(), dataHeader.getPacketLength(), dataHeader.getSynchronize(), dataHeader.getNs(), dataHeader.getFSN(), dataHeader.getLastFragment(),
dataHeader.getHeaderOffset(), dataHeader.getLLId());
// generate the PDU header and 1/2 rate Trellis
dataHeader.encode(buffer);
@ -995,16 +983,18 @@ void P25PacketData::write_PDU_User(uint32_t peerId, network::PeerNetwork* peerNe
blocksToFollow--;
networkBlock++;
LogMessage(LOG_NET, P25_PDU_STR ", OSP, extended address, sap = $%02X, srcLlId = %u",
dataHeader.getEXSAP(), dataHeader.getSrcLLId());
if (m_network->m_verbosePacketData)
LogMessage(LOG_NET, P25_PDU_STR ", OSP, extended address, sap = $%02X, srcLlId = %u",
dataHeader.getEXSAP(), dataHeader.getSrcLLId());
}
// are we processing extended address data from the first block?
if ((dataHeader.getFormat() == PDUFormatType::CONFIRMED) && (dataHeader.getSAP() == PDUSAP::EXT_ADDR) && extendedAddress) {
dataHeader.encodeExtAddr(pduUserData);
LogMessage(LOG_NET, P25_PDU_STR ", OSP, sap = $%02X, srcLlId = %u",
dataHeader.getEXSAP(), dataHeader.getSrcLLId());
if (m_network->m_verbosePacketData)
LogMessage(LOG_NET, P25_PDU_STR ", OSP, sap = $%02X, srcLlId = %u",
dataHeader.getEXSAP(), dataHeader.getSrcLLId());
}
if (dataHeader.getFormat() != PDUFormatType::AMBT) {
@ -1022,9 +1012,10 @@ void P25PacketData::write_PDU_User(uint32_t peerId, network::PeerNetwork* peerNe
dataBlock.setSerialNo(i);
dataBlock.setData(pduUserData + dataOffset);
LogMessage(LOG_NET, P25_PDU_STR ", OSP, peerId = %u, block %u, fmt = $%02X, lastBlock = %u",
peerId, (dataHeader.getFormat() == PDUFormatType::CONFIRMED) ? dataBlock.getSerialNo() : i, dataBlock.getFormat(),
dataBlock.getLastBlock());
if (m_network->m_verbosePacketData)
LogMessage(LOG_NET, P25_PDU_STR ", OSP, peerId = %u, block %u, fmt = $%02X, lastBlock = %u",
peerId, (dataHeader.getFormat() == PDUFormatType::CONFIRMED) ? dataBlock.getSerialNo() : i, dataBlock.getFormat(),
dataBlock.getLastBlock());
::memset(buffer, 0x00U, P25_PDU_FEC_LENGTH_BYTES);
dataBlock.encode(buffer);

@ -185,7 +185,7 @@ namespace network
*/
void dispatchToFNE(uint32_t peerId);
/**
* @brief Helper to dispatch PDU user data back to the FNE network.
* @brief Helper to dispatch PDU user data back to the local FNE network. (Will not transmit to external peers.)
* @param dataHeader Instance of a PDU data header.
* @param extendedAddress Flag indicating whether or not to extended addressing is in use.
* @param pduUserData Buffer containing user data to transmit.

@ -465,10 +465,8 @@ public:
getNetwork()->unlockPeerStatus();
for (auto entry : peerStatus) {
uint32_t peerId = entry.first;
json::object peerObj = entry.second;
if (peerObj["peerId"].is<uint32_t>())
peerId = peerObj["peerId"].get<uint32_t>();
uint32_t peerId = peerObj["peerId"].getDefault<uint32_t>(entry.first);
auto it = std::find_if(m_nodes.begin(), m_nodes.end(), [&](NodeStatusWidget* wdgt) {
if (wdgt->peerId == peerId && wdgt->uniqueId == (int32_t)peerId)

@ -111,8 +111,9 @@ void PeerNetwork::userPacketHandler(uint32_t peerId, FrameQueue::OpcodePair opco
}
json::object obj = v.get<json::object>();
uint32_t actualPeerId = obj["peerId"].getDefault<uint32_t>(peerId);
std::lock_guard<std::mutex> lock(m_peerStatusMutex);
peerStatus[peerId] = obj;
peerStatus[actualPeerId] = obj;
}
break;

Loading…
Cancel
Save

Powered by TurnKey Linux.