From 054a9a5da83f6c28f939eb10543efa3e67b99093 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Wed, 12 Jul 2023 13:22:39 -0400 Subject: [PATCH] refactor conference bridge FNE slightly; remove mostly unused functions; --- src/network/FNENetwork.cpp | 76 +++------------------------------ src/network/FNENetwork.h | 10 ++--- src/network/fne/TagDMRData.cpp | 14 ++++-- src/network/fne/TagDMRData.h | 2 +- src/network/fne/TagNXDNData.cpp | 14 ++++-- src/network/fne/TagNXDNData.h | 2 +- src/network/fne/TagP25Data.cpp | 14 ++++-- src/network/fne/TagP25Data.h | 2 +- 8 files changed, 46 insertions(+), 88 deletions(-) diff --git a/src/network/FNENetwork.cpp b/src/network/FNENetwork.cpp index 7f6172fb..5af0f7a0 100644 --- a/src/network/FNENetwork.cpp +++ b/src/network/FNENetwork.cpp @@ -644,7 +644,10 @@ void FNENetwork::close() if (m_status == NET_STAT_MST_RUNNING) { uint8_t buffer[9U]; ::memcpy(buffer + 0U, TAG_MASTER_CLOSING, 5U); - writePeers({ NET_FUNC_MST_CLOSING, NET_SUBFUNC_NOP }, buffer, 9U); + + for (auto peer : m_peers) { + writePeer(peer.first, { NET_FUNC_MST_CLOSING, NET_SUBFUNC_NOP }, buffer, 9U, (ushort)0U, 0U); + } } m_socket->close(); @@ -997,7 +1000,7 @@ bool FNENetwork::writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode, } uint32_t len = length + (strlen(tag) + 4U); - return writePeer(peerId, opcode, buffer, len, queueOnly, incPktSeq); + return writePeer(peerId, opcode, buffer, len, 0U, queueOnly, incPktSeq); } /// @@ -1018,7 +1021,7 @@ bool FNENetwork::writePeerACK(uint32_t peerId, const uint8_t* data, uint32_t len ::memcpy(buffer + 6U, data, length); } - return writePeer(peerId, { NET_FUNC_ACK, NET_SUBFUNC_NOP }, buffer, 10U + length, false, true); + return writePeer(peerId, { NET_FUNC_ACK, NET_SUBFUNC_NOP }, buffer, 10U + length, 0U, false, true); } /// @@ -1038,7 +1041,7 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag) __SET_UINT32(peerId, buffer, 6U); // Peer ID LogWarning(LOG_NET, "%s from unauth PEER %u", tag, peerId); - return writePeer(peerId, { NET_FUNC_NAK, NET_SUBFUNC_NOP }, buffer, 10U, false, true); + return writePeer(peerId, { NET_FUNC_NAK, NET_SUBFUNC_NOP }, buffer, 10U, 0U, false, true); } /// @@ -1065,68 +1068,3 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage { NET_FUNC_NAK, NET_SUBFUNC_NOP }, 0U, addr, addrLen); return m_frameQueue->flushQueue(); } - -/// -/// Helper to send a raw message to the connected peers. -/// -/// Buffer to write to the network. -/// Length of buffer to write. -void FNENetwork::writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length) -{ - for (auto peer : m_peers) { - uint32_t peerId = peer.first; - uint32_t streamId = peer.second.currStreamId(); - sockaddr_storage addr = peer.second.socketStorage(); - uint32_t addrLen = peer.second.sockStorageLen(); - uint16_t pktSeq = peer.second.pktLastSeq(); - - m_frameQueue->enqueueMessage(data, length, streamId, peerId, m_peerId, opcode, pktSeq, addr, addrLen); - } - - m_frameQueue->flushQueue(); -} - -/// -/// Helper to send a raw message to the connected peers. -/// -/// Buffer to write to the network. -/// Length of buffer to write. -/// -void FNENetwork::writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq) -{ - for (auto peer : m_peers) { - uint32_t peerId = peer.first; - uint32_t streamId = peer.second.currStreamId(); - sockaddr_storage addr = peer.second.socketStorage(); - uint32_t addrLen = peer.second.sockStorageLen(); - - m_frameQueue->enqueueMessage(data, length, streamId, peerId, m_peerId, opcode, pktSeq, addr, addrLen); - } - - m_frameQueue->flushQueue(); -} - -/// -/// Helper to send a tagged message to the connected peers. -/// -/// -/// Buffer to write to the network. -/// Length of buffer to write. -void FNENetwork::writePeersTagged(FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data, uint32_t length) -{ - assert(tag != nullptr); - - if (strlen(tag) + length > DATA_PACKET_LENGTH) { - return; - } - - uint8_t buffer[DATA_PACKET_LENGTH]; - ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - - ::memcpy(buffer + 0U, tag, strlen(tag)); - - ::memcpy(buffer + strlen(tag), data, length); - - uint32_t len = length + strlen(tag); - writePeers(opcode, buffer, len); -} diff --git a/src/network/FNENetwork.h b/src/network/FNENetwork.h index a47fcdcf..8dbbf94d 100644 --- a/src/network/FNENetwork.h +++ b/src/network/FNENetwork.h @@ -262,22 +262,18 @@ namespace network /// Helper to send a raw message to the specified peer. bool writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint32_t streamId, bool queueOnly = false, bool incPktSeq = false); + /// Helper to send a tagged message to the specified peer. bool writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data = nullptr, uint32_t length = 0U, bool queueOnly = false, bool incPktSeq = false); + /// Helper to send a ACK response to the specified peer. bool writePeerACK(uint32_t peerId, const uint8_t* data = nullptr, uint32_t length = 0U); + /// Helper to send a NAK response to the specified peer. bool writePeerNAK(uint32_t peerId, const char* tag); /// Helper to send a NAK response to the specified peer. bool writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage& addr, uint32_t addrLen); - - /// Helper to send a raw message to the connected peers. - void writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length); - /// Helper to send a raw message to the connected peers. - void writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq); - /// Helper to send a tagged message to the connected peers. - void writePeersTagged(FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data, uint32_t length); }; } // namespace network diff --git a/src/network/fne/TagDMRData.cpp b/src/network/fne/TagDMRData.cpp index c96f9eed..ce8f04df 100644 --- a/src/network/fne/TagDMRData.cpp +++ b/src/network/fne/TagDMRData.cpp @@ -201,7 +201,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId if (tg.config().parrot()) { uint8_t* copy = new uint8_t[len]; ::memcpy(copy, data, len); - m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq)); + m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq, streamId)); } // repeat traffic to the connected peers @@ -239,10 +239,18 @@ void TagDMRData::playbackParrot() auto& pkt = m_parrotFrames[0]; if (std::get<0>(pkt) != nullptr) { - m_network->writePeers({ NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_DMR }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt)); + // repeat traffic to the connected peers + for (auto peer : m_network->m_peers) { + m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_DMR }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt), false); + if (m_network->m_debug) { + LogDebug(LOG_NET, "DMR, parrot, dstPeer = %u, len = %u, pktSeq = %u, streamId = %u", + peer.first, std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt)); + } + } + delete std::get<0>(pkt); - Thread::sleep(60); } + Thread::sleep(60); m_parrotFrames.pop_front(); } diff --git a/src/network/fne/TagDMRData.h b/src/network/fne/TagDMRData.h index b2898f00..69fe4602 100644 --- a/src/network/fne/TagDMRData.h +++ b/src/network/fne/TagDMRData.h @@ -61,7 +61,7 @@ namespace network private: FNENetwork* m_network; - std::deque> m_parrotFrames; + std::deque> m_parrotFrames; bool m_parrotFramesReady; class RxStatus { diff --git a/src/network/fne/TagNXDNData.cpp b/src/network/fne/TagNXDNData.cpp index e360cacb..fa24d9b3 100644 --- a/src/network/fne/TagNXDNData.cpp +++ b/src/network/fne/TagNXDNData.cpp @@ -173,7 +173,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI if (tg.config().parrot()) { uint8_t *copy = new uint8_t[len]; ::memcpy(copy, data, len); - m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq)); + m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq, streamId)); } // repeat traffic to the connected peers @@ -211,10 +211,18 @@ void TagNXDNData::playbackParrot() auto& pkt = m_parrotFrames[0]; if (std::get<0>(pkt) != nullptr) { - m_network->writePeers({ NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_NXDN }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt)); + // repeat traffic to the connected peers + for (auto peer : m_network->m_peers) { + m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_NXDN }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt), false); + if (m_network->m_debug) { + LogDebug(LOG_NET, "NXDN, parrot, dstPeer = %u, len = %u, pktSeq = %u, streamId = %u", + peer.first, std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt)); + } + } + delete std::get<0>(pkt); - Thread::sleep(60); } + Thread::sleep(60); m_parrotFrames.pop_front(); } diff --git a/src/network/fne/TagNXDNData.h b/src/network/fne/TagNXDNData.h index a07f5341..b6afaef4 100644 --- a/src/network/fne/TagNXDNData.h +++ b/src/network/fne/TagNXDNData.h @@ -61,7 +61,7 @@ namespace network private: FNENetwork* m_network; - std::deque> m_parrotFrames; + std::deque> m_parrotFrames; bool m_parrotFramesReady; class RxStatus { diff --git a/src/network/fne/TagP25Data.cpp b/src/network/fne/TagP25Data.cpp index 585c12fd..3fd3e895 100644 --- a/src/network/fne/TagP25Data.cpp +++ b/src/network/fne/TagP25Data.cpp @@ -212,7 +212,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId if (tg.config().parrot()) { uint8_t *copy = new uint8_t[len]; ::memcpy(copy, data, len); - m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq)); + m_parrotFrames.push_back(std::make_tuple(copy, len, pktSeq, streamId)); } // repeat traffic to the connected peers @@ -250,10 +250,18 @@ void TagP25Data::playbackParrot() auto& pkt = m_parrotFrames[0]; if (std::get<0>(pkt) != nullptr) { - m_network->writePeers({ NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_P25 }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt)); + // repeat traffic to the connected peers + for (auto peer : m_network->m_peers) { + m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_P25 }, std::get<0>(pkt), std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt), false); + if (m_network->m_debug) { + LogDebug(LOG_NET, "P25, parrot, dstPeer = %u, len = %u, pktSeq = %u, streamId = %u", + peer.first, std::get<1>(pkt), std::get<2>(pkt), std::get<3>(pkt)); + } + } + delete std::get<0>(pkt); - Thread::sleep(120); } + Thread::sleep(180); m_parrotFrames.pop_front(); } diff --git a/src/network/fne/TagP25Data.h b/src/network/fne/TagP25Data.h index 14f5fc8b..901d5039 100644 --- a/src/network/fne/TagP25Data.h +++ b/src/network/fne/TagP25Data.h @@ -67,7 +67,7 @@ namespace network private: FNENetwork* m_network; - std::deque> m_parrotFrames; + std::deque> m_parrotFrames; bool m_parrotFramesReady; class RxStatus {