attempt to prevent traffic duplication by performing peer ID validation for an active call;

pull/12/head
Bryan Biedenkapp 10 months ago
parent bd6f435991
commit 2973a60db5

@ -315,6 +315,16 @@ namespace dvmconsole.Controls
/// </summary>
public uint TxStreamId { get; internal set; }
/// <summary>
///
/// </summary>
public uint PeerId { get; set; }
/// <summary>
///
/// </summary>
public uint RxStreamId { get; set; }
/*
** Methods
*/

@ -263,10 +263,20 @@ namespace dvmconsole
channel.LastPktTime = pktTime;
// is this duplicate traffic?
if ((channel.PeerId > 0 && channel.RxStreamId > 0) && (e.PeerId != channel.PeerId && e.StreamId == channel.RxStreamId))
{
Log.WriteLine($"({system.Name}) DMRD: Traffic *IGNORE DUP TRAF* PEER {e.PeerId} CALL_START PEER ID {channel.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} ALGID {channel.algId} KID {channel.kId} [STREAM ID {e.StreamId}]");
continue;
}
// is this a new call stream?
if (e.StreamId != systemStatuses[cpgChannel.Name + e.Slot].RxStreamId)
{
channel.IsReceiving = true;
channel.PeerId = e.PeerId;
channel.RxStreamId = e.StreamId;
systemStatuses[cpgChannel.Name + e.Slot].RxStart = pktTime;
Log.WriteLine($"({system.Name}) DMRD: Traffic *CALL START * PEER {e.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} TS {e.Slot} [STREAM ID {e.StreamId}]");
@ -312,6 +322,9 @@ namespace dvmconsole
if ((e.FrameType == FrameType.DATA_SYNC) && (e.DataType == DMRDataType.TERMINATOR_WITH_LC) && (systemStatuses[cpgChannel.Name + e.Slot].RxType != FrameType.TERMINATOR))
{
channel.IsReceiving = false;
channel.PeerId = 0;
channel.RxStreamId = 0;
TimeSpan callDuration = pktTime - systemStatuses[cpgChannel.Name + e.Slot].RxStart;
Log.WriteLine($"({system.Name}) DMRD: Traffic *CALL END * PEER {e.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} TS {e.Slot} DUR {callDuration} [STREAM ID {e.StreamId}]");
channel.Background = ChannelBox.BLUE_GRADIENT;

@ -479,10 +479,20 @@ namespace dvmconsole
}
}
// is this duplicate traffic?
if ((channel.PeerId > 0 && channel.RxStreamId > 0) && (e.PeerId != channel.PeerId && e.StreamId == channel.RxStreamId))
{
Log.WriteLine($"({system.Name}) P25D: Traffic *IGNORE DUP TRAF* PEER {e.PeerId} CALL_START PEER ID {channel.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} ALGID {channel.algId} KID {channel.kId} [STREAM ID {e.StreamId}]");
continue;
}
// is this a new call stream?
if (e.StreamId != slot.RxStreamId && ((e.DUID != P25DUID.TDU) && (e.DUID != P25DUID.TDULC)))
{
channel.IsReceiving = true;
channel.PeerId = e.PeerId;
channel.RxStreamId = e.StreamId;
slot.RxStart = pktTime;
Log.WriteLine($"({system.Name}) P25D: Traffic *CALL START * PEER {e.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} ALGID {channel.algId} KID {channel.kId} [STREAM ID {e.StreamId}]");
@ -511,6 +521,9 @@ namespace dvmconsole
if (((e.DUID == P25DUID.TDU) || (e.DUID == P25DUID.TDULC)) && (slot.RxType != fnecore.FrameType.TERMINATOR))
{
channel.IsReceiving = false;
channel.PeerId = 0;
channel.RxStreamId = 0;
TimeSpan callDuration = pktTime - slot.RxStart;
Log.WriteLine($"({system.Name}) P25D: Traffic *CALL END * PEER {e.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} DUR {callDuration} [STREAM ID {e.StreamId}]");
channel.Background = ChannelBox.BLUE_GRADIENT;

@ -436,6 +436,9 @@ namespace dvmconsole
if (channel.IsReceiving || channel.IsReceivingEncrypted)
{
channel.IsReceiving = false;
channel.PeerId = 0;
channel.RxStreamId = 0;
channel.IsReceivingEncrypted = false;
channel.Background = ChannelBox.BLUE_GRADIENT;
channel.VolumeMeterLevel = 0;
@ -995,6 +998,9 @@ namespace dvmconsole
Dispatcher.Invoke(() =>
{
channel.IsReceiving = false;
channel.PeerId = 0;
channel.RxStreamId = 0;
channel.Background = ChannelBox.BLUE_GRADIENT;
channel.VolumeMeterLevel = 0;
});

Loading…
Cancel
Save

Powered by TurnKey Linux.