diff --git a/hb_bridge_all.py b/hb_bridge_all.py index 94d95cb..a5ed430 100755 --- a/hb_bridge_all.py +++ b/hb_bridge_all.py @@ -40,12 +40,12 @@ from importlib import import_module from types import ModuleType # Twisted is pretty important, so I keep it separate -from twisted.internet.protocol import DatagramProtocol -from twisted.internet import reactor -from twisted.internet import task +from twisted.internet.protocol import Factory, Protocol +from twisted.protocols.basic import NetstringReceiver +from twisted.internet import reactor, task # Things we import from the main hblink module -from hblink import HBSYSTEM, systems, int_id, hblink_handler +from hblink import HBSYSTEM, systems, hblink_handler, reportFactory, REPORT_OPCODES, config_reports from dmr_utils.utils import hex_str_3, int_id, get_alias from dmr_utils import decode, bptc, const from acl import acl_check, acl_build @@ -80,8 +80,8 @@ def import_rules(_rules): class bridgeallSYSTEM(HBSYSTEM): - def __init__(self, _name, _config, _logger): - HBSYSTEM.__init__(self, _name, _config, _logger) + def __init__(self, _name, _config, _logger, _report): + HBSYSTEM.__init__(self, _name, _config, _logger, _report) # Status information for the system, TS1 & TS2 # 1 & 2 are "timeslot" @@ -318,12 +318,14 @@ if __name__ == '__main__': logger.warning('No %s ACL for system %s - initializing \'PERMIT:ALL\'', acl_type, system) ACL[acl_type].update({system: {1: acl_build('PERMIT:ALL'), 2: acl_build('PERMIT:ALL')}}) + # INITIALIZE THE REPORTING LOOP + report_server = config_reports(CONFIG, logger, reportFactory) # HBlink instance creation logger.info('HBlink \'hb_bridge_all.py\' (c) 2016 N0MJS & the K0USY Group - SYSTEM STARTING...') for system in CONFIG['SYSTEMS']: if CONFIG['SYSTEMS'][system]['ENABLED']: - systems[system] = bridgeallSYSTEM(system, CONFIG, logger) + systems[system] = bridgeallSYSTEM(system, CONFIG, logger, report_server) 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]) diff --git a/hb_confbridge.py b/hb_confbridge.py index 623f376..2173695 100755 --- a/hb_confbridge.py +++ b/hb_confbridge.py @@ -45,7 +45,7 @@ from twisted.protocols.basic import NetstringReceiver from twisted.internet import reactor, task # Things we import from the main hblink module -from hblink import HBSYSTEM, systems, hblink_handler, reportFactory, REPORT_OPCODES +from hblink import HBSYSTEM, systems, hblink_handler, reportFactory, REPORT_OPCODES, config_reports from dmr_utils.utils import hex_str_3, int_id, get_alias from dmr_utils import decode, bptc, const import hb_config @@ -66,28 +66,6 @@ __status__ = 'pre-alpha' # Module gobal varaibles - -# Timed loop used for reporting HBP status -# -# REPORT BASED ON THE TYPE SELECTED IN THE MAIN CONFIG FILE -def config_reports(_config, _logger, _factory): - if _config['REPORTS']['REPORT']: - def reporting_loop(_logger, _server): - _logger.debug('Periodic reporting loop started') - _server.send_config() - _server.send_bridge() - - _logger.info('HBlink TCP reporting server configured') - - report_server = _factory(_config, _logger) - report_server.clients = [] - reactor.listenTCP(_config['REPORTS']['REPORT_PORT'], report_server) - - reporting = task.LoopingCall(reporting_loop, _logger, report_server) - reporting.start(_config['REPORTS']['REPORT_INTERVAL']) - - return report_server - # Import Bridging rules # Note: A stanza *must* exist for any MASTER or CLIENT configured in the main # configuration file and listed as "active". It can be empty, diff --git a/hb_parrot.py b/hb_parrot.py index 92219ee..8bf370a 100755 --- a/hb_parrot.py +++ b/hb_parrot.py @@ -30,12 +30,12 @@ from time import time, sleep from importlib import import_module # Twisted is pretty important, so I keep it separate -from twisted.internet.protocol import DatagramProtocol -from twisted.internet import reactor -from twisted.internet import task +from twisted.internet.protocol import Factory, Protocol +from twisted.protocols.basic import NetstringReceiver +from twisted.internet import reactor, task # Things we import from the main hblink module -from hblink import HBSYSTEM, systems, int_id, hblink_handler +from hblink import HBSYSTEM, systems, hblink_handler, reportFactory, REPORT_OPCODES, config_reports from dmr_utils.utils import hex_str_3, int_id, get_alias from dmr_utils import decode, bptc, const import hb_config @@ -55,8 +55,8 @@ __status__ = 'pre-alpha' class parrot(HBSYSTEM): - def __init__(self, _name, _config, _logger): - HBSYSTEM.__init__(self, _name, _config, _logger) + def __init__(self, _name, _config, _logger, _report): + HBSYSTEM.__init__(self, _name, _config, _logger, _report) # Status information for the system, TS1 & TS2 # 1 & 2 are "timeslot" @@ -218,12 +218,14 @@ if __name__ == '__main__': if talkgroup_ids: logger.info('ID ALIAS MAPPER: talkgroup_ids dictionary is available') + # INITIALIZE THE REPORTING LOOP + report_server = config_reports(CONFIG, logger, reportFactory) # HBlink instance creation logger.info('HBlink \'hb_parrot.py\' (c) 2016 N0MJS & the K0USY Group - SYSTEM STARTING...') for system in CONFIG['SYSTEMS']: if CONFIG['SYSTEMS'][system]['ENABLED']: - systems[system] = parrot(system, CONFIG, logger) + systems[system] = parrot(system, CONFIG, logger, report_server) 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]) diff --git a/hb_router.py b/hb_router.py index 8a8873b..719454f 100755 --- a/hb_router.py +++ b/hb_router.py @@ -38,12 +38,12 @@ from time import time from importlib import import_module # Twisted is pretty important, so I keep it separate -from twisted.internet.protocol import DatagramProtocol -from twisted.internet import reactor -from twisted.internet import task +from twisted.internet.protocol import Factory, Protocol +from twisted.protocols.basic import NetstringReceiver +from twisted.internet import reactor, task # Things we import from the main hblink module -from hblink import HBSYSTEM, systems, int_id, hblink_handler +from hblink import HBSYSTEM, systems, hblink_handler, reportFactory, REPORT_OPCODES, config_reports from dmr_utils.utils import hex_str_3, int_id, get_alias from dmr_utils import decode, bptc, const import hb_config @@ -174,8 +174,8 @@ def rule_timer_loop(): class routerSYSTEM(HBSYSTEM): - def __init__(self, _name, _config, _logger): - HBSYSTEM.__init__(self, _name, _config, _logger) + def __init__(self, _name, _config, _logger, _report): + HBSYSTEM.__init__(self, _name, _config, _logger, _report) # Status information for the system, TS1 & TS2 # 1 & 2 are "timeslot" @@ -480,11 +480,14 @@ if __name__ == '__main__': # Build the Access Control List ACL = build_acl('sub_acl') + # INITIALIZE THE REPORTING LOOP + report_server = config_reports(CONFIG, logger, reportFactory) + # HBlink instance creation logger.info('HBlink \'hb_router.py\' (c) 2016 N0MJS & the K0USY Group - SYSTEM STARTING...') for system in CONFIG['SYSTEMS']: if CONFIG['SYSTEMS'][system]['ENABLED']: - systems[system] = routerSYSTEM(system, CONFIG, logger) + systems[system] = routerSYSTEM(system, CONFIG, logger, report_server) 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]) diff --git a/hblink-SAMPLE.cfg b/hblink-SAMPLE.cfg index 8541968..c7c60b3 100644 --- a/hblink-SAMPLE.cfg +++ b/hblink-SAMPLE.cfg @@ -22,8 +22,9 @@ MAX_MISSED: 3 # REPORT_CLIENTS - comma separated list of IPs you will allow clients # to connect on. Entering a * will allow all. # +# ****FOR NOW MUST BE TRUE - USE THE LOOPBACK IF YOU DON'T USE THIS!!!**** [REPORTS] -REPORT: False +REPORT: True REPORT_INTERVAL: 60 REPORT_PORT: 4321 REPORT_CLIENTS: 127.0.0.1 diff --git a/hblink.py b/hblink.py index 4f5a09e..e33eb4b 100755 --- a/hblink.py +++ b/hblink.py @@ -68,7 +68,7 @@ systems = {} # # REPORT BASED ON THE TYPE SELECTED IN THE MAIN CONFIG FILE def config_reports(_config, _logger, _factory): - if _config['REPORTS']['REPORT']: + if True: #_config['REPORTS']['REPORT']: def reporting_loop(_logger, _server): _logger.debug('Periodic reporting loop started') _server.send_config()