From fbe9dd137383cb3bad40fbab08c91ef31aa2829e Mon Sep 17 00:00:00 2001 From: Cort Buffington Date: Thu, 17 Nov 2016 06:24:28 -0600 Subject: [PATCH] Starting to add in-band signaling (UA rules) --- hb_router.py | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/hb_router.py b/hb_router.py index 9ef3316..f6bba34 100755 --- a/hb_router.py +++ b/hb_router.py @@ -50,6 +50,8 @@ for _system in RULES_FILE: _rule['ON'][i] = hex_str_3(_rule['ON'][i]) for i, e in enumerate(_rule['OFF']): _rule['OFF'][i] = hex_str_3(_rule['OFF'][i]) + _rule['TIMEOUT']= _rule['TIMEOUT']*60 + _rule['TIMER'] = time() + _rule['TIMEOUT'] if _system not in CONFIG['SYSTEMS']: sys.exit('ERROR: Routing rules found for system not configured main configuration') for _system in CONFIG['SYSTEMS']: @@ -71,6 +73,32 @@ __email__ = 'n0mjs@me.com' __status__ = 'pre-alpha' +# Run this every minute for rule timer updates +def rule_timer_loop(): + logger.debug('(ALL HBSYSTEMS) Rule timer loop started') + _now = time() + for _system in RULES: + for _rule in RULES[_system]['GROUP_VOICE']: + if _rule['TO_TYPE'] == 'ON': + if _rule['ACTIVE'] == True: + if _rule['TIMER'] < _now: + _rule['ACTIVE'] = False + logger.info('(%s) Rule timout DEACTIVATE: Rule name: %s, Target HBSystem: %s, TS: %s, TGID: %s', _system, _rule['NAME'], _rule['DST_NET'], _rule['DST_TS']+1, int_id(_rule['DST_GROUP'])) + else: + timeout_in = _rule['TIMER'] - _now + logger.info('(%s) Rule ACTIVE with ON timer running: Timeout eligible in: %ds, Rule name: %s, Target HBSystem: %s, TS: %s, TGID: %s', _system, timeout_in, _rule['NAME'], _rule['DST_NET'], _rule['DST_TS']+1, int_id(_rule['DST_GROUP'])) + elif _rule['TO_TYPE'] == 'OFF': + if _rule['ACTIVE'] == False: + if _rule['TIMER'] < _now: + _rule['ACTIVE'] = True + logger.info('(%s) Rule timout ACTIVATE: Rule name: %s, Target HBSystem: %s, TS: %s, TGID: %s', _system, _rule['NAME'], _rule['DST_NET'], _rule['DST_TS']+1, int_id(_rule['DST_GROUP'])) + else: + timeout_in = _rule['TIMER'] - _now + logger.info('(%s) Rule DEACTIVE with OFF timer running: Timeout eligible in: %ds, Rule name: %s, Target HBSystem: %s, TS: %s, TGID: %s', _system, timeout_in, _rule['NAME'], _rule['DST_NET'], _rule['DST_TS']+1, int_id(_rule['DST_GROUP'])) + else: + logger.debug('Rule timer loop made no rule changes') + + class routerSYSTEM(HBSYSTEM): def __init__(self, *args, **kwargs): @@ -143,9 +171,8 @@ class routerSYSTEM(HBSYSTEM): # just make a new one from the HBP header. This is good enough, and it saves lots of time else: self.STATUS[_slot]['RX_LC'] = const.LC_OPT + _dst_id + _rf_src - - - + + for rule in RULES[self._system]['GROUP_VOICE']: _target = rule['DST_NET'] _target_status = systems[_target].STATUS @@ -240,5 +267,9 @@ if __name__ == '__main__': systems[system] = routerSYSTEM(system) reactor.listenUDP(CONFIG['SYSTEMS'][system]['PORT'], systems[system], interface=CONFIG['SYSTEMS'][system]['IP']) logger.debug('%s instance created: %s, %s', CONFIG['SYSTEMS'][system]['MODE'], system, systems[system]) + + # Initialize the rule timer -- this if for user activated stuff + rule_timer = task.LoopingCall(rule_timer_loop) + rule_timer.start(60) reactor.run() \ No newline at end of file