Cleaned Up Several Items...
Mostly references to my_ipsc_config data structure items that are commonly used. These received shortened names within the IPSC class… also makes it easier to read, and should be self explanatory. Some cruft also removed - object aliases that were no longer used.
This commit is contained in:
parent
8d115875f3
commit
c34357e10d
98
ipsc.py
98
ipsc.py
|
@ -133,21 +133,34 @@ class IPSC(DatagramProtocol):
|
|||
def __init__(self, *args, **kwargs):
|
||||
if len(args) == 1:
|
||||
# Housekeeping: create references to the configuration and status data for this IPSC instance.
|
||||
# Some configuration objects that are used frequently and have lengthy names are shortened
|
||||
# such as (self._master_sock) expands to (self._config['MASTER']['IP'], self._config['MASTER']['PORT'])
|
||||
#
|
||||
self._network_name = args[0]
|
||||
self._config = NETWORK[self._network_name]
|
||||
#
|
||||
self._local = self._config['LOCAL']
|
||||
self._local_stat = self._local['STATUS']
|
||||
self._local_id = self._local['RADIO_ID']
|
||||
#
|
||||
self._master = self._config['MASTER']
|
||||
self._master_stat = self._master['STATUS']
|
||||
self._master_sock = self._master['IP'], self._master['PORT']
|
||||
#
|
||||
self._peers = self._config['PEERS']
|
||||
|
||||
args = ()
|
||||
|
||||
# Packet 'constructors' - builds the necessary control packets for this IPSC instance
|
||||
#
|
||||
self.TS_FLAGS = (self._config['LOCAL']['MODE'] + self._config['LOCAL']['FLAGS'])
|
||||
self.MASTER_REG_REQ_PKT = (MASTER_REG_REQ + self._config['LOCAL']['RADIO_ID'] + self.TS_FLAGS + IPSC_VER)
|
||||
self.MASTER_ALIVE_PKT = (MASTER_ALIVE_REQ + self._config['LOCAL']['RADIO_ID'] + self.TS_FLAGS + IPSC_VER)
|
||||
self.PEER_LIST_REQ_PKT = (PEER_LIST_REQ + self._config['LOCAL']['RADIO_ID'])
|
||||
self.PEER_REG_REQ_PKT = (PEER_REG_REQ + self._config['LOCAL']['RADIO_ID'] + IPSC_VER)
|
||||
self.PEER_REG_REPLY_PKT = (PEER_REG_REPLY + self._config['LOCAL']['RADIO_ID'] + IPSC_VER)
|
||||
self.PEER_ALIVE_REQ_PKT = (PEER_ALIVE_REQ + self._config['LOCAL']['RADIO_ID'] + self.TS_FLAGS)
|
||||
self.PEER_ALIVE_REPLY_PKT = (PEER_ALIVE_REPLY + self._config['LOCAL']['RADIO_ID'] + self.TS_FLAGS)
|
||||
self.TS_FLAGS = (self._local['MODE'] + self._local['FLAGS'])
|
||||
self.MASTER_REG_REQ_PKT = (MASTER_REG_REQ + self._local_id + self.TS_FLAGS + IPSC_VER)
|
||||
self.MASTER_ALIVE_PKT = (MASTER_ALIVE_REQ + self._local_id + self.TS_FLAGS + IPSC_VER)
|
||||
self.PEER_LIST_REQ_PKT = (PEER_LIST_REQ + self._local_id)
|
||||
self.PEER_REG_REQ_PKT = (PEER_REG_REQ + self._local_id + IPSC_VER)
|
||||
self.PEER_REG_REPLY_PKT = (PEER_REG_REPLY + self._local_id + IPSC_VER)
|
||||
self.PEER_ALIVE_REQ_PKT = (PEER_ALIVE_REQ + self._local_id + self.TS_FLAGS)
|
||||
self.PEER_ALIVE_REPLY_PKT = (PEER_ALIVE_REPLY + self._local_id + self.TS_FLAGS)
|
||||
self._peer_list_new = False
|
||||
else:
|
||||
# If we didn't get called correctly, log it!
|
||||
|
@ -163,7 +176,7 @@ class IPSC(DatagramProtocol):
|
|||
# page, etc....
|
||||
#
|
||||
self._call = task.LoopingCall(self.timed_loop)
|
||||
self._loop = self._call.start(self._config['LOCAL']['ALIVE_TIMER'])
|
||||
self._loop = self._call.start(self._local['ALIVE_TIMER'])
|
||||
|
||||
|
||||
#************************************************
|
||||
|
@ -176,15 +189,15 @@ class IPSC(DatagramProtocol):
|
|||
# Populate the peer information from the list
|
||||
#
|
||||
def peer_list_received(self, _data, (_host, _port)):
|
||||
self._config['MASTER']['STATUS']['PEER-LIST'] = True
|
||||
self._master_stat['PEER-LIST'] = True
|
||||
logger.info('<<- (%s) The Peer List has been Received from Master:%s:%s ', self._network_name, _host, _port)
|
||||
_num_peers = int(str(int(binascii.b2a_hex(_data[5:7]), 16))[1:])
|
||||
self._config['LOCAL']['NUM_PEERS'] = _num_peers
|
||||
self._local['NUM_PEERS'] = _num_peers
|
||||
logger.info(' There are %s peers in this IPSC Network', _num_peers)
|
||||
del self._config['PEERS'][:]
|
||||
del self._peers[:]
|
||||
for i in range(7, (_num_peers*11)+7, 11):
|
||||
hex_address = (_data[i+4:i+8])
|
||||
self._config['PEERS'].append({
|
||||
self._peers.append({
|
||||
'RADIO_ID': _data[i:i+4],
|
||||
'IP': socket.inet_ntoa(hex_address),
|
||||
'PORT': int(binascii.b2a_hex(_data[i+8:i+10]), 16),
|
||||
|
@ -203,55 +216,55 @@ class IPSC(DatagramProtocol):
|
|||
|
||||
print_peer_list(self._network_name)
|
||||
|
||||
_master_connected = self._config['MASTER']['STATUS']['CONNECTED']
|
||||
_peer_list_rx = self._config['MASTER']['STATUS']['PEER-LIST']
|
||||
_master_connected = self._master_stat['CONNECTED']
|
||||
_peer_list_rx = self._master_stat['PEER-LIST']
|
||||
|
||||
if (_master_connected == False):
|
||||
reg_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.MASTER_REG_REQ_PKT)
|
||||
self.transport.write(reg_packet, (self._config['MASTER']['IP'], self._config['MASTER']['PORT']))
|
||||
logger.info('->> (%s) Master Registration Request To:%s:%s From:%s', self._network_name, self._config['MASTER']['IP'], self._config['MASTER']['PORT'], binascii.b2a_hex(self._config['LOCAL']['RADIO_ID']))
|
||||
reg_packet = hashed_packet(self._local['AUTH_KEY'], self.MASTER_REG_REQ_PKT)
|
||||
self.transport.write(reg_packet, (self._master_sock))
|
||||
logger.info('->> (%s) Master Registration Request To:%s From:%s', self._network_name, self._master_sock, binascii.b2a_hex(self._local_id))
|
||||
|
||||
elif (_master_connected == True):
|
||||
master_alive_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.MASTER_ALIVE_PKT)
|
||||
self.transport.write(master_alive_packet, (self._config['MASTER']['IP'], self._config['MASTER']['PORT']))
|
||||
logger.debug('->> (%s) Master Keep-alive %s Sent To:%s:%s', self._network_name, self._config['MASTER']['STATUS']['KEEP_ALIVES_SENT'], self._config['MASTER']['IP'], self._config['MASTER']['PORT'])
|
||||
self._config['MASTER']['STATUS']['KEEP_ALIVES_SENT'] += 1
|
||||
master_alive_packet = hashed_packet(self._local['AUTH_KEY'], self.MASTER_ALIVE_PKT)
|
||||
self.transport.write(master_alive_packet, (self._master_sock))
|
||||
logger.debug('->> (%s) Master Keep-alive %s Sent To:%s:%s', self._network_name, self._master_stat['KEEP_ALIVES_SENT'], self._master_sock)
|
||||
self._master_stat['KEEP_ALIVES_SENT'] += 1
|
||||
|
||||
if (self._config['MASTER']['STATUS']['KEEP_ALIVES_OUTSTANDING']) > 0:
|
||||
self._config['MASTER']['STATUS']['KEEP_ALIVES_MISSED'] += 1
|
||||
if (self._master_stat['KEEP_ALIVES_OUTSTANDING']) > 0:
|
||||
self._master_stat['KEEP_ALIVES_MISSED'] += 1
|
||||
|
||||
if self._config['MASTER']['STATUS']['KEEP_ALIVES_OUTSTANDING'] >= self._config['LOCAL']['MAX_MISSED']:
|
||||
self._config['MASTER']['STATUS']['CONNECTED'] = False
|
||||
if self._master_stat['KEEP_ALIVES_OUTSTANDING'] >= self._local['MAX_MISSED']:
|
||||
self._master_stat['CONNECTED'] = False
|
||||
logger.error('Maximum Master Keep-Alives Missed -- De-registering the Master')
|
||||
|
||||
else:
|
||||
logger.error('->> (%s) Master in UNKOWN STATE:%s:%s', self._network_name, self._config['MASTER']['IP'], self._config['MASTER']['PORT'])
|
||||
logger.error('->> (%s) Master in UNKOWN STATE:%s:%s', self._network_name, self._master_sock)
|
||||
|
||||
if ((_master_connected == True) and (_peer_list_rx == False)):
|
||||
peer_list_req_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.PEER_LIST_REQ_PKT)
|
||||
self.transport.write(peer_list_req_packet, (self._config['MASTER']['IP'], self._config['MASTER']['PORT']))
|
||||
logger.debug('->> (%s) List Reqested from Master:%s:%s', self._network_name, self._config['MASTER']['IP'], self._config['MASTER']['PORT'])
|
||||
peer_list_req_packet = hashed_packet(self._local['AUTH_KEY'], self.PEER_LIST_REQ_PKT)
|
||||
self.transport.write(peer_list_req_packet, (self._master_sock))
|
||||
logger.debug('->> (%s) List Reqested from Master:%s:%s', self._network_name, self._master_sock)
|
||||
|
||||
# Logic problems in the next if.... bad ones. Fix them.
|
||||
if (_peer_list_rx == True):
|
||||
for peer in (self._config['PEERS']):
|
||||
if (peer['RADIO_ID'] == self._config['LOCAL']['RADIO_ID']): # We are in the peer-list, but don't need to talk to ourselves
|
||||
for peer in (self._peers):
|
||||
if (peer['RADIO_ID'] == self._local_id): # We are in the peer-list, but don't need to talk to ourselves
|
||||
continue
|
||||
if peer['STATUS']['CONNECTED'] == False:
|
||||
peer_reg_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.PEER_REG_REQ_PKT)
|
||||
peer_reg_packet = hashed_packet(self._local['AUTH_KEY'], self.PEER_REG_REQ_PKT)
|
||||
self.transport.write(peer_reg_packet, (peer['IP'], peer['PORT']))
|
||||
logger.debug('->> (%s) Peer Registration Request To:%s:%s From:%s', self._network_name, peer['IP'], peer['PORT'], binascii.b2a_hex(self._config['LOCAL']['RADIO_ID']))
|
||||
logger.debug('->> (%s) Peer Registration Request To:%s:%s From:%s', self._network_name, peer['IP'], peer['PORT'], binascii.b2a_hex(self._local_id))
|
||||
elif peer['STATUS']['CONNECTED'] == True:
|
||||
peer_alive_req_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.PEER_ALIVE_REQ_PKT)
|
||||
peer_alive_req_packet = hashed_packet(self._local['AUTH_KEY'], self.PEER_ALIVE_REQ_PKT)
|
||||
self.transport.write(peer_alive_req_packet, (peer['IP'], peer['PORT']))
|
||||
logger.debug('->> (%s) Peer Keep-Alive Request To:%s:%s From:%s', self._network_name, peer['IP'], peer['PORT'], binascii.b2a_hex(self._config['LOCAL']['RADIO_ID']))
|
||||
logger.debug('->> (%s) Peer Keep-Alive Request To:%s:%s From:%s', self._network_name, peer['IP'], peer['PORT'], binascii.b2a_hex(self._local_id))
|
||||
|
||||
peer['STATUS']['KEEP_ALIVES_SENT'] += 1
|
||||
|
||||
if peer['STATUS']['KEEP_ALIVES_OUTSTANDING'] > 0:
|
||||
peer['STATUS']['KEEP_ALIVES_MISSED'] += 1
|
||||
|
||||
if peer['STATUS']['KEEP_ALIVES_OUTSTANDING'] >= self._config['LOCAL']['MAX_MISSED']:
|
||||
if peer['STATUS']['KEEP_ALIVES_OUTSTANDING'] >= self._local['MAX_MISSED']:
|
||||
peer['STATUS']['CONNECTED'] = False
|
||||
logger.error('Maximum Peer Keep-Alives Missed -- De-registering the Peer')
|
||||
|
||||
|
@ -268,8 +281,6 @@ class IPSC(DatagramProtocol):
|
|||
#
|
||||
def datagramReceived(self, data, (host, port)):
|
||||
logger.debug('datagram received') # temporary debugging to make sure this part runs
|
||||
dest_ip = self._config['MASTER']['IP']
|
||||
dest_port = self._config['MASTER']['PORT']
|
||||
#logger.debug('received %r from %s:%d', binascii.b2a_hex(data), host, port)
|
||||
|
||||
_packettype = data[0:1]
|
||||
|
@ -277,7 +288,7 @@ class IPSC(DatagramProtocol):
|
|||
|
||||
if (_packettype == PEER_ALIVE_REQ):
|
||||
logger.debug('<<- (%s) Peer Keep-alive Request From Peer ID %s at:%s:%s', self._network_name, int(binascii.b2a_hex(_peerid), 16), host, port)
|
||||
peer_alive_reply_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.PEER_ALIVE_REPLY_PKT)
|
||||
peer_alive_reply_packet = hashed_packet(self._local['AUTH_KEY'], self.PEER_ALIVE_REPLY_PKT)
|
||||
self.transport.write(peer_alive_reply_packet, (host, port))
|
||||
logger.debug('->> (%s) Peer Keep-alive Reply sent To:%s:%s', self._network_name, host, port)
|
||||
|
||||
|
@ -293,13 +304,13 @@ class IPSC(DatagramProtocol):
|
|||
logger.info('<<- (%s) Master Registration Packet Recieved', self._network_name)
|
||||
|
||||
elif (_packettype == MASTER_REG_REPLY):
|
||||
self._config['MASTER']['STATUS']['CONNECTED'] = True
|
||||
self._config['MASTER']['STATUS']['KEEP_ALIVES_OUTSTANDING'] = 0
|
||||
self._master_stat['CONNECTED'] = True
|
||||
self._master_stat['KEEP_ALIVES_OUTSTANDING'] = 0
|
||||
logger.info('<<- (%s) Master Registration Reply From:%s:%s ', self._network_name, host, port)
|
||||
|
||||
elif (_packettype == PEER_REG_REQ):
|
||||
logger.debug('<<- (%s) Peer Registration Request From Peer ID %s at:%s:%s', self._network_name, int(binascii.b2a_hex(_peerid), 16), host, port)
|
||||
peer_reg_reply_packet = hashed_packet(self._config['LOCAL']['AUTH_KEY'], self.PEER_REG_REPLY_PKT)
|
||||
peer_reg_reply_packet = hashed_packet(self._local['AUTH_KEY'], self.PEER_REG_REPLY_PKT)
|
||||
self.transport.write(peer_reg_reply_packet, (host, port))
|
||||
logger.debug('->> (%s) Peer Registration Reply Sent To:%s:%s', self._network_name, host, port)
|
||||
|
||||
|
@ -350,7 +361,6 @@ class IPSC(DatagramProtocol):
|
|||
#************************************************
|
||||
|
||||
if __name__ == '__main__':
|
||||
logger.debug('SYSTEM STARTING UP')
|
||||
for ipsc_network in NETWORK:
|
||||
if (NETWORK[ipsc_network]['LOCAL']['ENABLED']):
|
||||
reactor.listenUDP(NETWORK[ipsc_network]['LOCAL']['PORT'], IPSC(ipsc_network))
|
||||
|
|
Loading…
Reference in New Issue