diff --git a/src/module/decode/p25/P25DecoderState.java b/src/module/decode/p25/P25DecoderState.java index b07d0197..a0fb8510 100644 --- a/src/module/decode/p25/P25DecoderState.java +++ b/src/module/decode/p25/P25DecoderState.java @@ -42,6 +42,7 @@ import module.decode.p25.message.ldu.lc.TelephoneInterconnectVoiceChannelUser; import module.decode.p25.message.ldu.lc.UnitToUnitVoiceChannelUser; import module.decode.p25.message.pdu.PDUMessage; import module.decode.p25.message.pdu.confirmed.PDUConfirmedMessage; +import module.decode.p25.message.pdu.confirmed.PacketData; import module.decode.p25.message.pdu.confirmed.SNDCPActivateTDSContextAccept; import module.decode.p25.message.pdu.confirmed.SNDCPActivateTDSContextReject; import module.decode.p25.message.pdu.confirmed.SNDCPActivateTDSContextRequest; @@ -1629,7 +1630,11 @@ public class P25DecoderState extends DecoderState */ private void processPDU( PDUMessage pdu ) { - if( pdu instanceof PDUConfirmedMessage ) + if( pdu instanceof PacketData ) + { + broadcast( new DecoderStateEvent( this, Event.CONTINUATION, State.DATA ) ); + } + else if( pdu instanceof PDUConfirmedMessage ) { broadcast( new DecoderStateEvent( this, Event.CONTINUATION, State.DATA ) ); diff --git a/src/module/decode/p25/message/pdu/PDUMessageFactory.java b/src/module/decode/p25/message/pdu/PDUMessageFactory.java index 26b25b1c..1e11796d 100644 --- a/src/module/decode/p25/message/pdu/PDUMessageFactory.java +++ b/src/module/decode/p25/message/pdu/PDUMessageFactory.java @@ -1,5 +1,6 @@ package module.decode.p25.message.pdu; +import module.decode.p25.message.pdu.confirmed.PacketData; import module.decode.p25.message.pdu.osp.control.AdjacentStatusBroadcastExtended; import module.decode.p25.message.pdu.osp.control.CallAlertExtended; import module.decode.p25.message.pdu.osp.control.GroupAffiliationQueryExtended; @@ -121,7 +122,8 @@ public class PDUMessageFactory } return new PDUMessage( message, duid, aliasList ); - + case PACKET_DATA: + return new PacketData( message, aliasList ); case UNCONFIRMED_MULTI_BLOCK_TRUNKING_CONTROL: return new PDUMessage( message, duid, aliasList ); default: diff --git a/src/module/decode/p25/message/pdu/confirmed/PacketData.java b/src/module/decode/p25/message/pdu/confirmed/PacketData.java new file mode 100644 index 00000000..e1b0af6d --- /dev/null +++ b/src/module/decode/p25/message/pdu/confirmed/PacketData.java @@ -0,0 +1,66 @@ +package module.decode.p25.message.pdu.confirmed; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import alias.AliasList; +import bits.BinaryMessage; + +public class PacketData extends PDUConfirmedMessage +{ + public final static Logger mLog = + LoggerFactory.getLogger( PacketData.class ); + + public static final int DATA_BLOCK_START = 176; + + public PacketData( BinaryMessage message, AliasList aliasList ) + { + super( message, aliasList ); + } + + @Override + public String getMessage() + { + StringBuilder sb = new StringBuilder(); + + sb.append( "NAC:" ); + sb.append( getNAC() ); + sb.append( " PDUC LLID:" ); + sb.append( getLogicalLinkID() ); + + + sb.append( " PACKET DATA" ); + sb.append( " CRC[" ); + sb.append( getErrorStatus() ); + sb.append( "]" ); + + if( !mMessage.get( FINAL_FRAGMENT_FLAG ) ) + { + sb.append( " RESENDING" ); + } + + sb.append( " PACKET #" ); + sb.append( getPacketSequenceNumber() ); + + if( isFinalFragment() && getFragmentSequenceNumber() == 0 ) + { + sb.append( ".C" ); + } + else + { + sb.append( "." ); + sb.append( getFragmentSequenceNumber() ); + + if( isFinalFragment() ) + { + sb.append( "C" ); + } + } + + sb.append( " " ); + + sb.append( mMessage.toString() ); + + return sb.toString(); + } +}