Formatting & Documentation
This commit is contained in:
parent
1457d34e21
commit
f2148ab05f
45
dmrlink.py
45
dmrlink.py
@ -741,7 +741,8 @@ class IPSC(DatagramProtocol):
|
||||
|
||||
|
||||
# FUNTIONS FOR IPSC MAINTENANCE ACTIVITIES WE RESPOND TO
|
||||
#
|
||||
|
||||
# SOMEONE HAS SENT US A KEEP ALIVE - WE MUST ANSWER IT
|
||||
def peer_alive_req(self, _data, _peerid, _host, _port):
|
||||
_hex_mode = (_data[5])
|
||||
_hex_flags = (_data[6:10])
|
||||
@ -758,34 +759,41 @@ class IPSC(DatagramProtocol):
|
||||
self.reset_keep_alive(_peerid) # Might as well reset our own counter, we know it's out there...
|
||||
logger.debug('(%s) Keep-Alive reply sent to Peer %s', self._network, int_id(_peerid))
|
||||
|
||||
# SOMEONE WANTS TO REGISTER WITH US - WE'RE COOL WITH THAT
|
||||
def peer_reg_req(self, _peerid, _host, _port):
|
||||
peer_reg_reply_packet = self.hashed_packet(self._local['AUTH_KEY'], self.PEER_REG_REPLY_PKT)
|
||||
self.transport.write(peer_reg_reply_packet, (_host, _port))
|
||||
logger.info('(%s) Peer Registration Request From: %s', self._network, int_id(_peerid))
|
||||
|
||||
|
||||
# SOMEONE HAS ANSWERED OUR KEEP-ALIVE REQUEST - KEEP TRACK OF IT
|
||||
def peer_alive_reply(self, _peerid):
|
||||
self.reset_keep_alive(_peerid)
|
||||
self._peers[_peerid]['STATUS']['KEEP_ALIVES_RECEIVED'] += 1
|
||||
self._peers[_peerid]['STATUS']['KEEP_ALIVE_RX_TIME'] = int(time.time())
|
||||
logger.debug('(%s) Keep-Alive Reply (we sent the request) Received from Peer %s', self._network, int_id(_peerid))
|
||||
|
||||
# SOMEONE HAS ANSWERED OUR REQEST TO REGISTER WITH THEM - KEEP TRACK OF IT
|
||||
def peer_reg_reply(self, _peerid):
|
||||
if _peerid in self._peers.keys():
|
||||
self._peers[_peerid]['STATUS']['CONNECTED'] = True
|
||||
logger.info('(%s) Registration Reply From: %s', self._network, int_id(_peerid))
|
||||
|
||||
# OUR MASTER HAS ANSWERED OUR KEEP-ALIVE REQUEST - KEEP TRACK OF IT
|
||||
def master_alive_reply(self, _peerid):
|
||||
self.reset_keep_alive(_peerid)
|
||||
self._master['STATUS']['KEEP_ALIVES_RECEIVED'] += 1
|
||||
self._master['STATUS']['KEEP_ALIVE_RX_TIME'] = int(time.time())
|
||||
logger.debug('(%s) Keep-Alive Reply (we sent the request) Received from the Master %s', self._network, int_id(_peerid))
|
||||
|
||||
# OUR MASTER HAS SENT US A PEER LIST - PROCESS IT
|
||||
def peer_list_reply(self, _data, _peerid):
|
||||
NETWORK[self._network]['MASTER']['STATUS']['PEER_LIST'] = True
|
||||
if len(_data) > 18:
|
||||
process_peer_list(_data, self._network)
|
||||
logger.debug('(%s) Peer List Reply Recieved From Master %s', self._network, int_id(_peerid))
|
||||
|
||||
# OUR MASTER HAS ANSWERED OUR REQUEST TO REGISTER - LOTS OF INFORMATION TO TRACK
|
||||
def master_reg_reply(self, _data, _peerid):
|
||||
_hex_mode = _data[5]
|
||||
_hex_flags = _data[6:10]
|
||||
@ -803,6 +811,7 @@ class IPSC(DatagramProtocol):
|
||||
self._master_stat['KEEP_ALIVES_OUTSTANDING'] = 0
|
||||
logger.warning('(%s) Registration response (we requested reg) from the Master %s (%s peers)', self._network, int_id(_peerid), self._local['NUM_PEERS'])
|
||||
|
||||
# WE ARE MASTER AND SOMEONE HAS REQUESTED REGISTRATION FROM US - ANSWER IT
|
||||
def master_reg_req(self, _data, _peerid, _host, _port):
|
||||
_ip_address = _host
|
||||
_port = _port
|
||||
@ -838,6 +847,7 @@ class IPSC(DatagramProtocol):
|
||||
self._local['NUM_PEERS'] = len(self._peers)
|
||||
logger.debug('(%s) Peer Added To Peer List: %s (IPSC now has %s Peers)', self._network, self._peers[_peerid], self._local['NUM_PEERS'])
|
||||
|
||||
# WE ARE MASTER AND SOEMONE SENT US A KEEP-ALIVE - ANSWER IT, TRACK IT
|
||||
def master_alive_req(self, _peerid, _host, _port):
|
||||
if _peerid in self._peers.keys():
|
||||
self._peers[_peerid]['STATUS']['KEEP_ALIVES_RECEIVED'] += 1
|
||||
@ -850,6 +860,7 @@ class IPSC(DatagramProtocol):
|
||||
else:
|
||||
logger.warning('(%s) Master Keep-Alive Request Received from *UNREGISTERED* peer %s', self._network, int_id(_peerid))
|
||||
|
||||
# WE ARE MASTER AND A PEER HAS REQUESTED A PEER LIST - SEND THEM ONE
|
||||
def peer_list_req(self, _peerid):
|
||||
if _peerid in self._peers.keys():
|
||||
logger.debug('(%s) Peer List Request from peer %s', self._network, int_id(_peerid))
|
||||
@ -870,10 +881,13 @@ class IPSC(DatagramProtocol):
|
||||
if _peerid == self._master['RADIO_ID']:
|
||||
self._master_stat['KEEP_ALIVES_OUTSTANDING'] = 0
|
||||
|
||||
#
|
||||
# NEXT THREE FUNCITONS ARE FOR AUTHENTICATED PACKETS
|
||||
#
|
||||
|
||||
# THE NEXT SECTION DEFINES FUNCTIONS THAT MUST BE DIFFERENT FOR HASHED AND UNHASHED PACKETS
|
||||
# HASHED MEANS AUTHENTICATED IPSC
|
||||
# UNHASHED MEANS UNAUTHENTICATED IPSC
|
||||
|
||||
# NEXT THREE FUNCITONS ARE FOR AUTHENTICATED PACKETS
|
||||
|
||||
# Take a packet to be SENT, calculate auth hash and return the whole thing
|
||||
#
|
||||
def auth_hashed_packet(self, _key, _data):
|
||||
@ -897,9 +911,7 @@ class IPSC(DatagramProtocol):
|
||||
else:
|
||||
return False
|
||||
|
||||
#
|
||||
# NEXT THREE FUNCITONS ARE FOR UN-AUTHENTICATED PACKETS
|
||||
#
|
||||
|
||||
# There isn't a hash to build, so just return the data
|
||||
#
|
||||
@ -928,14 +940,17 @@ class IPSC(DatagramProtocol):
|
||||
# IPSC connection establishment and maintenance
|
||||
# Reporting/Housekeeping
|
||||
#
|
||||
# IF WE'RE NOT THE MASTER...
|
||||
if not self._local['MASTER_PEER']:
|
||||
self._peer_maintenance = task.LoopingCall(self.peer_maintenance_loop)
|
||||
self._peer_maintenance_loop = self._peer_maintenance.start(self._local['ALIVE_TIMER'])
|
||||
#
|
||||
# IF WE ARE THE MASTER...
|
||||
if self._local['MASTER_PEER']:
|
||||
self._master_maintenance = task.LoopingCall(self.master_maintenance_loop)
|
||||
self._master_maintenance_loop = self._master_maintenance.start(self._local['ALIVE_TIMER'])
|
||||
#
|
||||
# WE ALWAYS DO THIS
|
||||
self._reporting = task.LoopingCall(self.reporting_loop)
|
||||
self._reporting_loop = self._reporting.start(REPORTS['REPORT_INTERVAL'])
|
||||
|
||||
@ -1057,20 +1072,6 @@ class IPSC(DatagramProtocol):
|
||||
self._peers[peer]['STATUS']['KEEP_ALIVES_SENT'] += 1
|
||||
self._peers[peer]['STATUS']['KEEP_ALIVES_OUTSTANDING'] += 1
|
||||
|
||||
|
||||
# For public display of information, etc. - anything not part of internal logging/diagnostics
|
||||
#
|
||||
def _notify_event(self, network, event, info):
|
||||
"""
|
||||
Used internally whenever an event happens that may be useful to notify the outside world about.
|
||||
Arguments:
|
||||
network: string, network name to look up in config
|
||||
event: string, basic description
|
||||
info: dict, in the interest of accomplishing as much as possible without code changes.
|
||||
The dict will typically contain the ID of a peer so the origin of the event is known.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
|
||||
#************************************************
|
||||
@ -1131,25 +1132,21 @@ class IPSC(DatagramProtocol):
|
||||
if _packettype == GROUP_VOICE:
|
||||
self.reset_keep_alive(_peerid)
|
||||
self.group_voice(self._network, _src_sub, _dst_sub, _ts, _end, _peerid, data)
|
||||
self._notify_event(self._network, 'group_voice', {'peer': int_id(_peerid)})
|
||||
return
|
||||
|
||||
elif _packettype == PVT_VOICE:
|
||||
self.reset_keep_alive(_peerid)
|
||||
self.private_voice(self._network, _src_sub, _dst_sub, _ts, _end, _peerid, data)
|
||||
self._notify_event(self._network, 'private_voice', {'peer': int_id(_peerid)})
|
||||
return
|
||||
|
||||
elif _packettype == GROUP_DATA:
|
||||
self.reset_keep_alive(_peerid)
|
||||
self.group_data(self._network, _src_sub, _dst_sub, _ts, _end, _peerid, data)
|
||||
self._notify_event(self._network, 'group_data', {'peer': int_id(_peerid)})
|
||||
return
|
||||
|
||||
elif _packettype == PVT_DATA:
|
||||
self.reset_keep_alive(_peerid)
|
||||
self.private_data(self._network, _src_sub, _dst_sub, _ts, _end, _peerid, data)
|
||||
self._notify_event(self._network, 'private_voice', {'peer': int_id(_peerid)})
|
||||
return
|
||||
return
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user