#190t P25 Phase 1 encrypted call status (#1906)

Co-authored-by: Dennis Sheirer <dsheirer@github.com>
This commit is contained in:
Denny Sheirer
2024-05-04 13:14:07 -04:00
committed by GitHub
parent 2f0419f796
commit 5f082973eb
2 changed files with 40 additions and 7 deletions

View File

@@ -52,6 +52,7 @@ import io.github.dsheirer.module.decode.ip.ipv4.IPV4Packet;
import io.github.dsheirer.module.decode.ip.mototrbo.ars.ARSPacket;
import io.github.dsheirer.module.decode.ip.mototrbo.lrrp.LRRPPacket;
import io.github.dsheirer.module.decode.ip.udp.UDPPacket;
import io.github.dsheirer.module.decode.p25.IServiceOptionsProvider;
import io.github.dsheirer.module.decode.p25.P25DecodeEvent;
import io.github.dsheirer.module.decode.p25.P25TrafficChannelManager;
import io.github.dsheirer.module.decode.p25.identifier.channel.APCO25Channel;
@@ -382,10 +383,34 @@ public class P25P1DecoderState extends DecoderState implements IChannelEventList
List<Identifier> updated = mPatchGroupManager.update(lcw.getIdentifiers(), timestamp);
getIdentifierCollection().update(updated);
DecodeEventType decodeEventType = getLCDecodeEventType(lcw);
ServiceOptions serviceOptions = lcw.isEncrypted() ? VoiceServiceOptions.createEncrypted() :
VoiceServiceOptions.createUnencrypted();
ServiceOptions serviceOptions = null;
if(lcw instanceof IServiceOptionsProvider sop)
{
serviceOptions = sop.getServiceOptions();
}
else if(lcw.isEncrypted())
{
serviceOptions = VoiceServiceOptions.createEncrypted();
}
else
{
serviceOptions = VoiceServiceOptions.createUnencrypted();
}
mTrafficChannelManager.processP1CurrentUser(getCurrentFrequency(), getCurrentChannel(), decodeEventType,
serviceOptions, getIdentifierCollection(), timestamp, null );
if(serviceOptions.isEncrypted())
{
broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.ENCRYPTED));
}
else
{
broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.CALL));
}
}
/**
@@ -776,9 +801,16 @@ public class P25P1DecoderState extends DecoderState implements IChannelEventList
DecodeEventType type = headerData.isEncryptedAudio() ? DecodeEventType.CALL_ENCRYPTED : DecodeEventType.CALL;
mTrafficChannelManager.processP1CurrentUser(getCurrentFrequency(), getCurrentChannel(), type,
serviceOptions, mic, message.getTimestamp(), details);
}
broadcast(new DecoderStateEvent(this, Event.START, State.CALL));
if(headerData.isEncryptedAudio())
{
broadcast(new DecoderStateEvent(this, Event.START, State.ENCRYPTED));
}
else
{
broadcast(new DecoderStateEvent(this, Event.START, State.CALL));
}
}
}
@@ -810,12 +842,14 @@ public class P25P1DecoderState extends DecoderState implements IChannelEventList
getIdentifierCollection().update(esp.getIdentifiers());
mTrafficChannelManager.processP1CurrentUser(getCurrentFrequency(), esp.getEncryptionKey(),
message.getTimestamp());
broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.ENCRYPTED));
}
else
{
getIdentifierCollection().remove(Form.ENCRYPTION_KEY);
mTrafficChannelManager.processP1CurrentUser(getCurrentFrequency(), null,
message.getTimestamp());
broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.CALL));
}
}
else
@@ -824,7 +858,6 @@ public class P25P1DecoderState extends DecoderState implements IChannelEventList
}
}
broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.CALL));
}
/**

View File

@@ -70,7 +70,7 @@ public class VoiceServiceOptions extends ServiceOptions
*/
public static VoiceServiceOptions createEncrypted()
{
return new VoiceServiceOptions(ENCRYPTION_FLAG);
return new VoiceServiceOptions(ENCRYPTION_FLAG + 4);
}
/**
@@ -78,6 +78,6 @@ public class VoiceServiceOptions extends ServiceOptions
*/
public static VoiceServiceOptions createUnencrypted()
{
return new VoiceServiceOptions(0);
return new VoiceServiceOptions(4);
}
}