Merge pull request #12 from hp3icc/develop

Implement deactivate_all_dynamic_bridges function
enable  4000 pc or tg  unlink
pull/16/head
Esteban Mackay Q. 2 months ago committed by GitHub
commit a96cefaaae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -339,6 +339,18 @@ def remove_bridge_system(system):
BRIDGES.update(_bridgestemp)
def deactivate_all_dynamic_bridges(system_name):
"""Desactiva todos los bridges dinámicos (no estáticos, no reflectores) de un sistema."""
for _bridge in BRIDGES:
if _bridge[0:1] == '#': # Saltar reflectores
continue
for _sys_entry in BRIDGES[_bridge]:
if _sys_entry['SYSTEM'] == system_name and _sys_entry['TO_TYPE'] != 'STAT':
if _sys_entry['ACTIVE']:
_sys_entry['ACTIVE'] = False
logger.info('(ROUTER) Deactivated dynamic bridge due to TG/ID 4000: System: %s, Bridge: %s, TS: %s, TGID: %s',
system_name, _bridge, _sys_entry['TS'], int_id(_sys_entry['TGID']))
# Run this every minute for rule timer updates
def rule_timer_loop():
logger.debug('(ROUTER) routerHBP Rule timer loop started')
@ -416,21 +428,6 @@ def rule_timer_loop():
if _bridge_used == False:
_remove_bridges.append(_bridge)
# Desactivar bridges dinámicos adicionales (mantener solo el más reciente por sistema)
for system_name, active_bridges in _active_dynamic_bridges.items():
if len(active_bridges) > 1:
# Ordenar por tiempo de activación (el más reciente primero)
active_bridges.sort(key=lambda x: BRIDGES[x[0]][BRIDGES[x[0]].index(x[1])]['TIMER'], reverse=True)
# Mantener solo el primero (más reciente)
for bridge_name, bridge_system in active_bridges[1:]:
for sys_bridge in BRIDGES[bridge_name]:
if sys_bridge == bridge_system:
sys_bridge['ACTIVE'] = False
logger.info('(ROUTER) Deactivating additional dynamic bridge: System: %s, Bridge: %s, TS: %s, TGID: %s',
sys_bridge['SYSTEM'], bridge_name, sys_bridge['TS'], int_id(sys_bridge['TGID']))
break
for _bridgerem in _remove_bridges:
del BRIDGES[_bridgerem]
@ -2278,6 +2275,13 @@ class routerHBP(HBSYSTEM):
else:
logger.debug('(%s) UNIT Data not bridged to HBP on slot %s - target busy: %s DST_ID: %s',self._system,_d_slot,_d_system,_int_dst_id)
# Handle private call to ID 4000 as global dynamic bridge reset
if _call_type == 'unit' and _int_dst_id == 4000:
logger.info('(%s) Private call to ID 4000 received on TS %s - deactivating all dynamic bridges', self._system, _slot)
deactivate_all_dynamic_bridges(self._system)
# Opcional: no procesar más reglas para este paquete
return
#Handle Private Calls
if _call_type == 'unit' and len(str(_int_dst_id)) == 7:
self.pvt_call_received(_peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data)
@ -2366,6 +2370,10 @@ class routerHBP(HBSYSTEM):
#Handle group calls
if _call_type == 'group' or _call_type == 'vcsbk':
if _int_dst_id == 4000:
logger.info('(%s) Group call to TG 4000 received on TS %s - deactivating all dynamic bridges', self._system, _slot)
deactivate_all_dynamic_bridges(self._system)
return
# Is this a new call stream?
if (_stream_id != self.STATUS[_slot]['RX_STREAM_ID']):
@ -2605,8 +2613,7 @@ class routerHBP(HBSYSTEM):
is_reflector = _bridge[0:1] == '#'
# Desactivar solo si es TG 4000 o un nuevo TG dinámico (no estático ni reflector)
if (_dst_id in _system['OFF'] or _dst_id in _system['RESET'] or _dst_id == bytes_3(4000) or
(_dst_id != _system['TGID'] and not is_static_tg and not is_reflector)) and _slot == _system['TS']:
if (_dst_id == bytes_3(4000)) and _slot == _system['TS']:
# Set the matching rule as ACTIVE
if _dst_id in _system['OFF'] or _dst_id == bytes_3(4000) or (_dst_id != _system['TGID'] and not is_static_tg and not is_reflector):

Loading…
Cancel
Save

Powered by TurnKey Linux.