Default reflectors now working

This commit is contained in:
Simon 2020-10-04 15:19:46 +01:00
parent 8cad240efc
commit 92dab73400
1 changed files with 65 additions and 21 deletions

View File

@ -174,6 +174,36 @@ def make_single_bridge(_tgid,_sourcesystem,_slot):
if _system == 'OBP-BM':
BRIDGES[_tgid_s].append({'SYSTEM': _system, 'TS': 1, 'TGID': _tgid,'ACTIVE': True,'TIMEOUT': '','TO_TYPE': 'NONE','OFF': [],'ON': [],'RESET': [], 'TIMER': time()})
def make_default_reflector(reflector,system):
bridge = '#'+str(reflector)
_tmout = CONFIG['SYSTEMS'][system]['DEFAULT_UA_TIMER']
if bridge not in BRIDGES:
BRIDGES[bridge] = []
make_single_reflector(bytes_3(reflector), system)
bridgetemp = []
for bridgesystem in BRIDGES[bridge]:
if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == 2:
bridgetemp.append({'SYSTEM': system, 'TS': 2, 'TGID': bytes_3(9),'ACTIVE': True,'TIMEOUT': _tmout * 60,'TO_TYPE': 'OFF','OFF': [],'ON': [bytes_3(reflector),],'RESET': [], 'TIMER': time() + (_tmout * 60)})
else:
bridgetemp.append(bridgesystem)
BRIDGES[bridge] = bridgetemp
def reset_default_reflector(reflector,system):
bridge = '#'+str(reflector)
_tmout = CONFIG['SYSTEMS'][system]['DEFAULT_UA_TIMER']
if bridge not in BRIDGES:
BRIDGES[bridge] = []
make_single_reflector(bytes_3(reflector), system)
bridgetemp = []
for bridgesystem in BRIDGES[bridge]:
if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == 2:
bridgetemp.append({'SYSTEM': system, 'TS': 2, 'TGID': bytes_3(9),'ACTIVE': False,'TIMEOUT': _tmout * 60,'TO_TYPE': 'ON','OFF': [],'ON': [bytes_3(reflector),],'RESET': [], 'TIMER': time() + (_tmout * 60)})
else:
bridgetemp.append(bridgesystem)
BRIDGES[bridge] = bridgetemp
def make_single_reflector(_tgid,_sourcesystem):
_tgid_s = str(int_id(_tgid))
@ -202,7 +232,7 @@ def rule_timer_loop():
_system['ACTIVE'] = False
logger.info('(ROUTER) Conference Bridge TIMEOUT: DEACTIVATE System: %s, Bridge: %s, TS: %s, TGID: %s', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']))
if _bridge[0:1] == '#':
callInThread(disconnectedVoice,_system['SYSTEM'])
reactor.callInThread(disconnectedVoice,_system['SYSTEM'])
else:
timeout_in = _system['TIMER'] - _now
logger.info('(ROUTER) Conference Bridge ACTIVE (ON timer running): System: %s Bridge: %s, TS: %s, TGID: %s, Timeout in: %.2fs,', _system['SYSTEM'], _bridge, _system['TS'], int_id(_system['TGID']), timeout_in)
@ -271,17 +301,31 @@ def stream_trimmer_loop():
else:
logger.error('(%s) Attemped to remove OpenBridge Stream ID %s not in the Stream ID list: %s', system, int_id(stream_id), [id for id in systems[system].STATUS])
def sendSpeech(self,speech):
sleep(1)
while True:
try:
pkt = next(speech)
except StopIteration:
break
#Packet every 60ms
sleep(0.058)
#Call the actual packet send in the reactor thread
#as it's not thread safe
reactor.callFromThread(self.send_system,pkt)
#print(len(pkt), pkt[4], pkt)
def disconnectedVoice(system):
logger.info('(%s) Sending disconnected voice',system)
_say = [words['silence']]
if CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'] > 0:
for number in CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR']:
_say.append[number]
_say.append['silence']
_say.append(words[number])
_say.append(words['silence'])
else:
_say.append = words['notlinked']
_say.append(words['notlinked'])
speech = pkt_gen(bytes_3(tg), bytes_3(tg), bytes_4(tg), 1, _say)
speech = pkt_gen(bytes_3(9), bytes_3(9), bytes_4(9), 1, _say)
sleep(1)
while True:
@ -421,6 +465,15 @@ def mysql_config_check():
elif SQLCONFIG[system]['PASSPHRASE'] != CONFIG['SYSTEMS'][system]['PASSPHRASE'] and CONFIG['SYSTEMS'][system]['ENABLED'] == True:
logger.debug('(MYSQL) %s Passphrase changed on enabled system. Kicking peers',system)
systems[system].master_dereg()
elif SQLCONFIG[system]['DEFAULT_REFLECTOR'] != CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'] and CONFIG['SYSTEMS'][system]['ENABLED'] == True:
if SQLCONFIG[system]['DEFAULT_REFLECTOR'] > 0:
logger.debug('(MYSQL) %s default reflector changed, updating',system)
reset_default_reflector(CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'],system)
make_default_reflector(SQLCONFIG[system]['DEFAULT_REFLECTOR'],system)
else:
logger.debug('(MYSQL) %s default reflector disabled, updating',system)
reset_default_reflector(CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'],system)
#Add MySQL config data to config dict
CONFIG['SYSTEMS'].update(SQLCONFIG)
@ -814,21 +867,6 @@ class routerHBP(HBSYSTEM):
speech = pkt_gen(bytes_3(9), bytes_3(9), bytes_4(9), 1, _say)
#Nested function - see below
def sendSpeech(self,speech):
sleep(1)
while True:
try:
pkt = next(speech)
except StopIteration:
break
#Packet every 60ms
sleep(0.058)
#Call the actual packet send in the reactor thread
#as it's not thread safe
reactor.callFromThread(self.send_system,pkt)
#print(len(pkt), pkt[4], pkt)
#call speech in a thread as it contains sleep() and hence could block the reactor
reactor.callInThread(sendSpeech,self,speech)
@ -1193,7 +1231,7 @@ if __name__ == '__main__':
logger.debug('(MYSQL) problem with SQL query, aborting')
sql.close()
logger.debug('(MYSQL) building ACLs')
# Registration ACLs
# Build ACLs
for system in SQLCONFIG:
SQLCONFIG[system]['REG_ACL'] = acl_build(SQLCONFIG[system]['REG_ACL'], PEER_MAX)
for acl in ['SUB_ACL', 'TG1_ACL', 'TG2_ACL']:
@ -1229,6 +1267,12 @@ if __name__ == '__main__':
# Build the routing rules file
BRIDGES = make_bridges(rules_module.BRIDGES)
# Default reflector
logger.debug('(ROUTER) Setting default reflectors')
for system in CONFIG['SYSTEMS']:
if CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'] > 0:
make_default_reflector(CONFIG['SYSTEMS'][system]['DEFAULT_REFLECTOR'],system)
# INITIALIZE THE REPORTING LOOP
if CONFIG['REPORTS']['REPORT']: