From 702cd67db2abf34a6821fbab70678377710042f6 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Jan 2024 00:38:58 -0500 Subject: [PATCH] fix incorrect assumptions in helper routines; --- FneSystemBase.cs | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/FneSystemBase.cs b/FneSystemBase.cs index 5fcd883..1348341 100644 --- a/FneSystemBase.cs +++ b/FneSystemBase.cs @@ -485,8 +485,6 @@ namespace fnecore throw new InvalidOperationException($"TSBK length must be {P25Defines.P25_TSBK_LENGTH_BYTES}, passed length is {tsbk.Length}"); Trellis trellis = new Trellis(); - FnePeer peer = (FnePeer)fne; - ushort pktSeq = peer.pktSeq(true); byte[] payload = new byte[200]; CreateP25MessageHdr((byte)P25DUID.TSDU, callData, ref payload); @@ -501,7 +499,22 @@ namespace fnecore Buffer.BlockCopy(raw, 0, payload, 24, raw.Length); payload[23U] = (byte)(P25_MSG_HDR_SIZE + raw.Length); - peer.SendMaster(new Tuple(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, pktSeq, callData.TxStreamID); + // what type of FNE are we? + if (FneType == FneType.MASTER) + { + FneMaster master = (FneMaster)fne; + lock (master.Peers) + { + foreach (uint peerId in master.Peers.Keys) + master.SendPeer(peerId, FneBase.CreateOpcode(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, 0, callData.TxStreamID); + } + } + else if (FneType == FneType.PEER) + { + FnePeer peer = (FnePeer)fne; + ushort pktSeq = peer.pktSeq(true); + peer.SendMaster(FneBase.CreateOpcode(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, pktSeq, callData.TxStreamID); + } } /// @@ -511,9 +524,6 @@ namespace fnecore /// public virtual void SendP25TDU(RemoteCallData callData, bool grantDemand = false) { - FnePeer peer = (FnePeer)fne; - ushort pktSeq = peer.pktSeq(true); - byte[] payload = new byte[200]; CreateP25MessageHdr((byte)P25DUID.TDU, callData, ref payload); payload[23U] = P25_MSG_HDR_SIZE; @@ -522,7 +532,22 @@ namespace fnecore if (grantDemand) payload[14U] |= 0x80; - peer.SendMaster(new Tuple(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, pktSeq, callData.TxStreamID); + // what type of FNE are we? + if (FneType == FneType.MASTER) + { + FneMaster master = (FneMaster)fne; + lock (master.Peers) + { + foreach (uint peerId in master.Peers.Keys) + master.SendPeer(peerId, FneBase.CreateOpcode(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, 0, callData.TxStreamID); + } + } + else if (FneType == FneType.PEER) + { + FnePeer peer = (FnePeer)fne; + ushort pktSeq = peer.pktSeq(true); + peer.SendMaster(FneBase.CreateOpcode(Constants.NET_FUNC_PROTOCOL, Constants.NET_PROTOCOL_SUBFUNC_P25), payload, pktSeq, callData.TxStreamID); + } } } // public abstract class FneSystemBase } // namespace fnecore