refactor conference bridge FNE slightly; remove mostly unused functions;

pull/39/head
Bryan Biedenkapp 3 years ago
parent f2de006954
commit 054a9a5da8

@ -644,7 +644,10 @@ void FNENetwork::close()
if (m_status == NET_STAT_MST_RUNNING) { if (m_status == NET_STAT_MST_RUNNING) {
uint8_t buffer[9U]; uint8_t buffer[9U];
::memcpy(buffer + 0U, TAG_MASTER_CLOSING, 5U); ::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(); m_socket->close();
@ -997,7 +1000,7 @@ bool FNENetwork::writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode,
} }
uint32_t len = length + (strlen(tag) + 4U); uint32_t len = length + (strlen(tag) + 4U);
return writePeer(peerId, opcode, buffer, len, queueOnly, incPktSeq); return writePeer(peerId, opcode, buffer, len, 0U, queueOnly, incPktSeq);
} }
/// <summary> /// <summary>
@ -1018,7 +1021,7 @@ bool FNENetwork::writePeerACK(uint32_t peerId, const uint8_t* data, uint32_t len
::memcpy(buffer + 6U, data, length); ::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);
} }
/// <summary> /// <summary>
@ -1038,7 +1041,7 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag)
__SET_UINT32(peerId, buffer, 6U); // Peer ID __SET_UINT32(peerId, buffer, 6U); // Peer ID
LogWarning(LOG_NET, "%s from unauth PEER %u", tag, peerId); 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);
} }
/// <summary> /// <summary>
@ -1065,68 +1068,3 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage
{ NET_FUNC_NAK, NET_SUBFUNC_NOP }, 0U, addr, addrLen); { NET_FUNC_NAK, NET_SUBFUNC_NOP }, 0U, addr, addrLen);
return m_frameQueue->flushQueue(); return m_frameQueue->flushQueue();
} }
/// <summary>
/// Helper to send a raw message to the connected peers.
/// </summary>
/// <param name="data">Buffer to write to the network.</param>
/// <param name="length">Length of buffer to write.</param>
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();
}
/// <summary>
/// Helper to send a raw message to the connected peers.
/// </summary>
/// <param name="data">Buffer to write to the network.</param>
/// <param name="length">Length of buffer to write.</param>
/// <param name="pktSeq"></param>
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();
}
/// <summary>
/// Helper to send a tagged message to the connected peers.
/// </summary>
/// <param name="tag"></param>
/// <param name="data">Buffer to write to the network.</param>
/// <param name="length">Length of buffer to write.</param>
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);
}

@ -262,22 +262,18 @@ namespace network
/// <summary>Helper to send a raw message to the specified peer.</summary> /// <summary>Helper to send a raw message to the specified peer.</summary>
bool writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, bool writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length,
uint32_t streamId, bool queueOnly = false, bool incPktSeq = false); uint32_t streamId, bool queueOnly = false, bool incPktSeq = false);
/// <summary>Helper to send a tagged message to the specified peer.</summary> /// <summary>Helper to send a tagged message to the specified peer.</summary>
bool writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data = nullptr, uint32_t length = 0U, 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); bool queueOnly = false, bool incPktSeq = false);
/// <summary>Helper to send a ACK response to the specified peer.</summary> /// <summary>Helper to send a ACK response to the specified peer.</summary>
bool writePeerACK(uint32_t peerId, const uint8_t* data = nullptr, uint32_t length = 0U); bool writePeerACK(uint32_t peerId, const uint8_t* data = nullptr, uint32_t length = 0U);
/// <summary>Helper to send a NAK response to the specified peer.</summary> /// <summary>Helper to send a NAK response to the specified peer.</summary>
bool writePeerNAK(uint32_t peerId, const char* tag); bool writePeerNAK(uint32_t peerId, const char* tag);
/// <summary>Helper to send a NAK response to the specified peer.</summary> /// <summary>Helper to send a NAK response to the specified peer.</summary>
bool writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage& addr, uint32_t addrLen); bool writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage& addr, uint32_t addrLen);
/// <summary>Helper to send a raw message to the connected peers.</summary>
void writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length);
/// <summary>Helper to send a raw message to the connected peers.</summary>
void writePeers(FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq);
/// <summary>Helper to send a tagged message to the connected peers.</summary>
void writePeersTagged(FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data, uint32_t length);
}; };
} // namespace network } // namespace network

@ -201,7 +201,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
if (tg.config().parrot()) { if (tg.config().parrot()) {
uint8_t* copy = new uint8_t[len]; uint8_t* copy = new uint8_t[len];
::memcpy(copy, data, 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 // repeat traffic to the connected peers
@ -239,10 +239,18 @@ void TagDMRData::playbackParrot()
auto& pkt = m_parrotFrames[0]; auto& pkt = m_parrotFrames[0];
if (std::get<0>(pkt) != nullptr) { 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); delete std::get<0>(pkt);
Thread::sleep(60);
} }
Thread::sleep(60);
m_parrotFrames.pop_front(); m_parrotFrames.pop_front();
} }

@ -61,7 +61,7 @@ namespace network
private: private:
FNENetwork* m_network; FNENetwork* m_network;
std::deque<std::tuple<uint8_t*, uint32_t, uint16_t>> m_parrotFrames; std::deque<std::tuple<uint8_t*, uint32_t, uint16_t, uint32_t>> m_parrotFrames;
bool m_parrotFramesReady; bool m_parrotFramesReady;
class RxStatus { class RxStatus {

@ -173,7 +173,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
if (tg.config().parrot()) { if (tg.config().parrot()) {
uint8_t *copy = new uint8_t[len]; uint8_t *copy = new uint8_t[len];
::memcpy(copy, data, 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 // repeat traffic to the connected peers
@ -211,10 +211,18 @@ void TagNXDNData::playbackParrot()
auto& pkt = m_parrotFrames[0]; auto& pkt = m_parrotFrames[0];
if (std::get<0>(pkt) != nullptr) { 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); delete std::get<0>(pkt);
Thread::sleep(60);
} }
Thread::sleep(60);
m_parrotFrames.pop_front(); m_parrotFrames.pop_front();
} }

@ -61,7 +61,7 @@ namespace network
private: private:
FNENetwork* m_network; FNENetwork* m_network;
std::deque<std::tuple<uint8_t*, uint32_t, uint16_t>> m_parrotFrames; std::deque<std::tuple<uint8_t*, uint32_t, uint16_t, uint32_t>> m_parrotFrames;
bool m_parrotFramesReady; bool m_parrotFramesReady;
class RxStatus { class RxStatus {

@ -212,7 +212,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
if (tg.config().parrot()) { if (tg.config().parrot()) {
uint8_t *copy = new uint8_t[len]; uint8_t *copy = new uint8_t[len];
::memcpy(copy, data, 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 // repeat traffic to the connected peers
@ -250,10 +250,18 @@ void TagP25Data::playbackParrot()
auto& pkt = m_parrotFrames[0]; auto& pkt = m_parrotFrames[0];
if (std::get<0>(pkt) != nullptr) { 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); delete std::get<0>(pkt);
Thread::sleep(120);
} }
Thread::sleep(180);
m_parrotFrames.pop_front(); m_parrotFrames.pop_front();
} }

@ -67,7 +67,7 @@ namespace network
private: private:
FNENetwork* m_network; FNENetwork* m_network;
std::deque<std::tuple<uint8_t*, uint32_t, uint16_t>> m_parrotFrames; std::deque<std::tuple<uint8_t*, uint32_t, uint16_t, uint32_t>> m_parrotFrames;
bool m_parrotFramesReady; bool m_parrotFramesReady;
class RxStatus { class RxStatus {

Loading…
Cancel
Save

Powered by TurnKey Linux.