From 9f3f7e65a41b0d4f03f31f5a6f29e1fd02ada11c Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Mon, 9 Sep 2024 09:24:05 -0400 Subject: [PATCH] #1974 P25 Fully Qualified Talkgroup/Radio values shouldn't replace local ID/address, when the value is zero, with the fully qualified ID, which causes incorrect aliasing. (#1975) Co-authored-by: Dennis Sheirer --- .../radio/FullyQualifiedRadioIdentifier.java | 21 ++++++++++++++++++- .../FullyQualifiedTalkgroupIdentifier.java | 21 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/dsheirer/identifier/radio/FullyQualifiedRadioIdentifier.java b/src/main/java/io/github/dsheirer/identifier/radio/FullyQualifiedRadioIdentifier.java index 0d1d3547..9ebab4ae 100644 --- a/src/main/java/io/github/dsheirer/identifier/radio/FullyQualifiedRadioIdentifier.java +++ b/src/main/java/io/github/dsheirer/identifier/radio/FullyQualifiedRadioIdentifier.java @@ -41,7 +41,7 @@ public abstract class FullyQualifiedRadioIdentifier extends RadioIdentifier */ public FullyQualifiedRadioIdentifier(int localAddress, int wacn, int system, int id, Role role) { - super(localAddress > 0 ? localAddress : id, role); + super(localAddress, role); mWacn = wacn; mSystem = system; mRadio = id; @@ -92,4 +92,23 @@ public abstract class FullyQualifiedRadioIdentifier extends RadioIdentifier return getFullyQualifiedRadioAddress(); } } + + @Override + public boolean equals(Object o) + { + //Attempt to match as a fully qualified radio match first + if(o instanceof FullyQualifiedRadioIdentifier fqri) + { + return getWacn() == fqri.getWacn() && + getSystem() == fqri.getSystem() && + getRadio() == fqri.getRadio(); + } + //Attempt to match the local address against a simple radio version + else if(o instanceof RadioIdentifier ri) + { + return getValue() != 0 && ri.getValue() != 0 && getValue().equals(ri.getValue()); + } + + return super.equals(o); + } } diff --git a/src/main/java/io/github/dsheirer/identifier/talkgroup/FullyQualifiedTalkgroupIdentifier.java b/src/main/java/io/github/dsheirer/identifier/talkgroup/FullyQualifiedTalkgroupIdentifier.java index fe5a69a3..cdcfc8de 100644 --- a/src/main/java/io/github/dsheirer/identifier/talkgroup/FullyQualifiedTalkgroupIdentifier.java +++ b/src/main/java/io/github/dsheirer/identifier/talkgroup/FullyQualifiedTalkgroupIdentifier.java @@ -40,7 +40,7 @@ public abstract class FullyQualifiedTalkgroupIdentifier extends TalkgroupIdentif */ public FullyQualifiedTalkgroupIdentifier(int localAddress, int wacn, int system, int id, Role role) { - super(localAddress > 0 ? localAddress : id, role); + super(localAddress, role); mWacn = wacn; mSystem = system; mTalkgroup = id; @@ -91,4 +91,23 @@ public abstract class FullyQualifiedTalkgroupIdentifier extends TalkgroupIdentif return getFullyQualifiedTalkgroupAddress(); } } + + @Override + public boolean equals(Object o) + { + //Attempt to match as a fully qualified talkgroup match first + if(o instanceof FullyQualifiedTalkgroupIdentifier fqti) + { + return getWacn() == fqti.getWacn() && + getSystem() == fqti.getSystem() && + getTalkgroup() == fqti.getTalkgroup(); + } + //Attempt to match the local address against a simple talkgroup version + else if(o instanceof TalkgroupIdentifier ti) + { + return getValue() != 0 && ti.getValue() != 0 && getValue().equals(ti.getValue()); + } + + return super.equals(o); + } }