THREE PACKET TYPES FIGURED OUT!

0x61, 0x62 and 0x63 have been mostly decoded. Still don’t know what all
of the pieces do, but know what they’re for finally!

This will mean big things for log.py as I figure out the details.
This commit is contained in:
Cort Buffington 2013-11-23 17:30:12 -06:00
parent 94ef04fbea
commit 8e78d70f0e
5 changed files with 31 additions and 31 deletions

View File

@ -34,9 +34,9 @@ Each peer will send keep-alives to each other peer in the IPSC network at an int
The following sections of this document will include various packet types. This is a list of currently known types and their meanings. Note: The names are arbitrarily chosen with the intention of being descriptive, and each is defined by what they've been "observed" to do in the wild.
CALL_CONFIRMATION = 0x05 Confirmation FROM the recipient of a confirmed call.
CALL_CTL_1 = 0x61 |
CALL_CTL_2 = 0x62 | Call control messages, exact use unknown
CALL_CTL_3 = 0x63 |
CALL_MON_ORIGIN = 0x61 Sent to Repeater Call Monitor Peers from repeater originating a call
CALL_MON_RPT = 0x62 Sent to Repeater Call Monitor Peers from all repeaters repeating a call
CALL_MON_NACK = 0x63 Sent to Repeater Call Monitor Peers from repeaters that cannot transmit a call (ie. ID in progress)
XCMP_XNL = 0x70 Control protocol messages
GROUP_VOICE = 0x80 This is a group voice call
PVT_VOICE = 0x81 This is a private voice call

View File

@ -82,13 +82,13 @@ class bridgeIPSC(IPSC):
def private_data(self, _network, _src_sub, _dst_sub, _ts, _end, _peerid, _data):
pass
def call_ctl_1(self, _network, _data):
def call_mon_origin(self, _network, _data):
pass
def call_ctl_2(self, _network, _data):
def call_mon_rpt(self, _network, _data):
pass
def call_ctl_3(self, _network, _data):
def call_mon_nack(self, _network, _data):
pass
def xcmp_xnl(self, _network, _data):

View File

@ -416,14 +416,14 @@ class IPSC(DatagramProtocol):
# CALLBACK FUNCTIONS FOR USER PACKET TYPES
#************************************************
def call_ctl_1(self, _network, _data):
print('({}) Call Control Type 1 Packet Received: {}' .format(_network, h(_data)))
def call_mon_origin(self, _network, _data):
print('({}) Repeater Call Monitor Origin Packet Received: {}' .format(_network, h(_data)))
def call_ctl_2(self, _network, _data):
print('({}) Call Control Type 2 Packet Received: {}' .format(_network, h(_data)))
def call_mon_rpt(self, _network, _data):
print('({}) Repeater Call Monitor Repeating Packet Received: {}' .format(_network, h(_data)))
def call_ctl_3(self, _network, _data):
print('({}) Call Control Type 3 Packet Received: {}' .format(_network, h(_data)))
def call_mon_nack(self, _network, _data):
print('({}) Repeater Call Monitor NACK Packet Received: {}' .format(_network, h(_data)))
def xcmp_xnl(self, _network, _data):
#print('({}) XCMP/XNL Packet Received' .format(_network))
@ -659,16 +659,16 @@ class IPSC(DatagramProtocol):
self.xcmp_xnl(self._network, data)
return
elif (_packettype == CALL_CTL_1):
self.call_ctl_1(self._network, data)
elif (_packettype == call_mon_origin):
self.call_mon_origin(self._network, data)
return
elif (_packettype == CALL_CTL_2):
self.call_ctl_2(self._network, data)
elif (_packettype == call_mon_rpt):
self.call_mon_rpt(self._network, data)
return
elif (_packettype == CALL_CTL_3):
self.call_ctl_3(self._network, data)
elif (_packettype == call_mon_nack):
self.call_mon_nack(self._network, data)
return
# Connection maintenance packets that fall into this category

View File

@ -8,9 +8,9 @@
# Known IPSC Message Types
CALL_CONFIRMATION = b'\x05' # Confirmation FROM the recipient of a confirmed call.
CALL_CTL_1 = b'\x61' # |
CALL_CTL_2 = b'\x62' # | Exact meaning unknown
CALL_CTL_3 = b'\x63' # |
CALL_MON_ORIGIN = b'\x61' # |
CALL_MON_RPT = b'\x62' # | Exact meaning unknown
CALL_MON_NACK = b'\x63' # |
XCMP_XNL = b'\x70' # XCMP/XNL control message
GROUP_VOICE = b'\x80'
PVT_VOICE = b'\x81'
@ -47,7 +47,7 @@ LINK_TYPE_IPSC = b'\x04'
IPSC_VER = LINK_TYPE_IPSC + IPSC_VER_19 + LINK_TYPE_IPSC + IPSC_VER_17
# Packets that must originate from a peer (or master peer)
ANY_PEER_REQUIRED = [GROUP_VOICE, PVT_VOICE, GROUP_DATA, PVT_DATA, CALL_CTL_1, CALL_CTL_2, CALL_CTL_3, XCMP_XNL, RPT_WAKE_UP, DE_REG_REQ]
ANY_PEER_REQUIRED = [GROUP_VOICE, PVT_VOICE, GROUP_DATA, PVT_DATA, CALL_MON_ORIGIN, CALL_MON_RPT, CALL_MON_NACK, XCMP_XNL, RPT_WAKE_UP, DE_REG_REQ]
# Packets that must originate from a non-master peer
PEER_REQUIRED = [PEER_ALIVE_REQ, PEER_ALIVE_REPLY, PEER_REG_REQ, PEER_REG_REPLY]
@ -71,9 +71,9 @@ REQ_VALID_MASTER = [
]
REQ_MASTER_CONNECTED = [
CALL_CTL_1,
CALL_CTL_2,
CALL_CTL_3,
CALL_MON_ORIGIN,
CALL_MON_RPT,
CALL_MON_NACK,
XCMP_XNL,
GROUP_VOICE,
PVT_VOICE,

12
log.py
View File

@ -28,14 +28,14 @@ class logIPSC(IPSC):
# CALLBACK FUNCTIONS FOR USER PACKET TYPES
#************************************************
def call_ctl_1(self, _network, _data):
print('({}) Call Control Type 1 Packet Received From: {}' .format(_network, _src_sub))
def call_mon_origin(self, _network, _data):
print('({}) Repeater Call Monitor Origin Packet Received From: {}' .format(_network, _src_sub))
def call_ctl_2(self, _network, _data):
print('({}) Call Control Type 2 Packet Received' .format(_network))
def call_mon_rpt(self, _network, _data):
print('({}) Repeater Call Monitor Repeating Packet Received' .format(_network))
def call_ctl_3(self, _network, _data):
print('({}) Call Control Type 3 Packet Received' .format(_network))
def call_mon_nack(self, _network, _data):
print('({}) Repeater Call Monitor NACK Packet Received' .format(_network))
def xcmp_xnl(self, _network, _data):
print('({}) XCMP/XNL Packet Received From: {}' .format(_network, h(_data)))