diff --git a/src/network/FNENetwork.cpp b/src/network/FNENetwork.cpp
index 21c904b0..7f6172fb 100644
--- a/src/network/FNENetwork.cpp
+++ b/src/network/FNENetwork.cpp
@@ -919,12 +919,16 @@ void FNENetwork::writeDeactiveTGIDs()
/// Buffer to write to the network.
/// Length of buffer to write.
///
+///
///
-bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq, bool queueOnly)
+bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq, uint32_t streamId, bool queueOnly)
{
auto it = std::find_if(m_peers.begin(), m_peers.end(), [&](PeerMapPair x) { return x.first == peerId; });
if (it != m_peers.end()) {
- uint32_t streamId = m_peers[peerId].currStreamId();
+ uint32_t peerStreamId = m_peers[peerId].currStreamId();
+ if (streamId == 0U) {
+ streamId = peerStreamId;
+ }
sockaddr_storage addr = m_peers[peerId].socketStorage();
uint32_t addrLen = m_peers[peerId].sockStorageLen();
@@ -944,9 +948,10 @@ bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const
/// Opcode.
/// Buffer to write to the network.
/// Length of buffer to write.
+///
///
///
-bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, bool queueOnly, bool incPktSeq)
+bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint32_t streamId, bool queueOnly, bool incPktSeq)
{
auto it = std::find_if(m_peers.begin(), m_peers.end(), [&](PeerMapPair x) { return x.first == peerId; });
if (it != m_peers.end()) {
@@ -955,7 +960,7 @@ bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const
}
uint16_t pktSeq = m_peers[peerId].pktLastSeq();
- return writePeer(peerId, opcode, data, length, pktSeq, queueOnly);
+ return writePeer(peerId, opcode, data, length, pktSeq, streamId, queueOnly);
}
return false;
diff --git a/src/network/FNENetwork.h b/src/network/FNENetwork.h
index 0a3a1a76..a47fcdcf 100644
--- a/src/network/FNENetwork.h
+++ b/src/network/FNENetwork.h
@@ -258,10 +258,10 @@ 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,
- uint16_t pktSeq, bool queueOnly = false);
+ uint16_t pktSeq, uint32_t streamId, bool queueOnly = false);
/// 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,
- bool queueOnly = false, bool incPktSeq = false);
+ 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);
diff --git a/src/network/fne/TagDMRData.cpp b/src/network/fne/TagDMRData.cpp
index 08900d1a..c96f9eed 100644
--- a/src/network/fne/TagDMRData.cpp
+++ b/src/network/fne/TagDMRData.cpp
@@ -212,7 +212,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
continue;
}
- m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_DMR }, data, len, pktSeq, true);
+ m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_DMR }, data, len, pktSeq, streamId, true);
if (m_network->m_debug) {
LogDebug(LOG_NET, "DMR, srcPeer = %u, dstPeer = %u, seqNo = %u, srcId = %u, dstId = %u, flco = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u",
peerId, peer.first, seqNo, srcId, dstId, flco, slotNo, len, pktSeq, streamId);
diff --git a/src/network/fne/TagNXDNData.cpp b/src/network/fne/TagNXDNData.cpp
index c34fcbaf..e360cacb 100644
--- a/src/network/fne/TagNXDNData.cpp
+++ b/src/network/fne/TagNXDNData.cpp
@@ -184,7 +184,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
continue;
}
- m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_NXDN }, data, len, pktSeq, true);
+ m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_NXDN }, data, len, pktSeq, streamId, true);
if (m_network->m_debug) {
LogDebug(LOG_NET, "NXDN, srcPeer = %u, dstPeer = %u, messageType = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u",
peerId, peer.first, messageType, srcId, dstId, len, pktSeq, streamId);
diff --git a/src/network/fne/TagP25Data.cpp b/src/network/fne/TagP25Data.cpp
index 36ede8cd..585c12fd 100644
--- a/src/network/fne/TagP25Data.cpp
+++ b/src/network/fne/TagP25Data.cpp
@@ -223,7 +223,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
continue;
}
- m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_P25 }, data, len, pktSeq, true);
+ m_network->writePeer(peer.first, { NET_FUNC_PROTOCOL, NET_PROTOCOL_SUBFUNC_P25 }, data, len, pktSeq, streamId, true);
if (m_network->m_debug) {
LogDebug(LOG_NET, "P25, srcPeer = %u, dstPeer = %u, duid = $%02X, lco = $%02X, MFId = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u",
peerId, peer.first, duid, lco, MFId, srcId, dstId, len, pktSeq, streamId);