@ -441,9 +441,7 @@ def stream_trimmer_loop():
logger . info ( ' ( %s ) *TIME OUT* RX STREAM ID: %s SUB: %s TGID %s , TS %s , Duration: %.2f ' , \
system , int_id ( _slot [ ' RX_STREAM_ID ' ] ) , int_id ( _slot [ ' RX_RFS ' ] ) , int_id ( _slot [ ' RX_TGID ' ] ) , slot , _slot [ ' RX_TIME ' ] - _slot [ ' RX_START ' ] )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} , {} , {} ' . format ( system , int_id ( _slot [ ' RX_STREAM_ID ' ] ) , int_id ( _slot [ ' RX_PEER ' ] ) , int_id ( _slot [ ' RX_RFS ' ] ) , slot , int_id ( _slot [ ' RX_TGID ' ] ) , _slot [ ' RX_TIME ' ] - _slot [ ' RX_START ' ] , int_id ( _slot [ ' source_server ' ] ) , int_id ( _slot [ ' source_rptr ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} ' . format ( system , int_id ( _slot [ ' RX_STREAM_ID ' ] ) , int_id ( _slot [ ' RX_PEER ' ] ) , int_id ( _slot [ ' RX_RFS ' ] ) , slot , int_id ( _slot [ ' RX_TGID ' ] ) , _slot [ ' RX_TIME ' ] - _slot [ ' RX_START ' ] ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
#Null stream_id - for loop control
if _slot [ ' RX_TIME ' ] < _now - 60 :
_slot [ ' RX_STREAM_ID ' ] = b ' \x00 '
@ -454,8 +452,7 @@ def stream_trimmer_loop():
logger . debug ( ' ( %s ) *TIME OUT* TX STREAM ID: %s SUB: %s TGID %s , TS %s , Duration: %.2f ' , \
system , int_id ( _slot [ ' TX_STREAM_ID ' ] ) , int_id ( _slot [ ' TX_RFS ' ] ) , int_id ( _slot [ ' TX_TGID ' ] ) , slot , _slot [ ' TX_TIME ' ] - _slot [ ' TX_START ' ] )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} , {} , {} ' . format ( system , int_id ( _slot [ ' TX_STREAM_ID ' ] ) , int_id ( _slot [ ' TX_PEER ' ] ) , int_id ( _slot [ ' TX_RFS ' ] ) , slot , int_id ( _slot [ ' TX_TGID ' ] ) , _slot [ ' TX_TIME ' ] - _slot [ ' TX_START ' ] , int_id ( _slot [ ' source_serv er ' ] ) , int_id ( _slot [ ' source_rptr ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} ' . format ( system , int_id ( _slot [ ' TX_STREAM_ID ' ] ) , int_id ( _slot [ ' TX_PEER ' ] ) , int_id ( _slot [ ' TX_RFS ' ] ) , slot , int_id ( _slot [ ' TX_TGID ' ] ) , _slot [ ' TX_TIME ' ] - _slot [ ' TX_START ' ] ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# OBP systems
# We can't delete items from a dicationry that's being iterated, so we have to make a temporarly list of entrys to remove later
@ -494,8 +491,7 @@ def stream_trimmer_loop():
system , int_id ( stream_id ) , get_alias ( int_id ( _stream [ ' RFS ' ] ) , subscriber_ids ) , get_alias ( int_id ( _stream [ ' RX_PEER ' ] ) , peer_ids ) , get_alias ( int_id ( _stream [ ' TGID ' ] ) , talkgroup_ids ) , _stream [ ' LAST ' ] - _stream [ ' START ' ] )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} , {} , {} ' . format ( system , int_id ( stream_id ) , int_id ( _stream [ ' RX_PEER ' ] ) , int_id ( _stream [ ' RFS ' ] ) , 1 , int_id ( _stream [ ' TGID ' ] ) , _stream [ ' LAST ' ] - _stream [ ' START ' ] , int_id ( _stream [ ' source_server ' ] ) , int_id ( _stream [ ' source_rptr ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ system ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} ' . format ( system , int_id ( stream_id ) , int_id ( _stream [ ' RX_PEER ' ] ) , int_id ( _stream [ ' RFS ' ] ) , 1 , int_id ( _stream [ ' TGID ' ] ) , _stream [ ' LAST ' ] - _stream [ ' START ' ] ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ system ] . STATUS [ stream_id ] [ ' _to ' ] = True
continue
except Exception as e :
@ -544,9 +540,7 @@ def sendVoicePacket(self,pkt,_source_id,_dest_id,_slot):
' CONTENTION ' : False ,
' RFS ' : _source_id ,
' TGID ' : _dest_id ,
' LAST ' : _pkt_time ,
' source_server ' : self . _CONFIG [ ' GLOBAL ' ] [ ' SERVER_ID ' ] ,
' source_rptr ' : int_id ( 5000 )
' LAST ' : _pkt_time
}
_slot [ ' TX_TGID ' ] = _dest_id
else :
@ -1024,8 +1018,6 @@ class routerOBP(OPENBRIDGE):
' RFS ' : _rf_src ,
' TGID ' : _dst_id ,
' RX_PEER ' : _peer_id ,
' source_server ' : _source_server ,
' source_rptr ' : _source_rptr
}
# Generate LCs (full and EMB) for the TX stream
@ -1041,7 +1033,7 @@ class routerOBP(OPENBRIDGE):
logger . debug ( ' ( %s ) Conference Bridge: %s , Call Bridged to OBP System: %s TS: %s , TGID: %s ' , self . _system , _bridge , _target [ ' SYSTEM ' ] , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , {} ,{} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _ slot, int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , {} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _ target[ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Record the time of this packet so we can later identify a stale stream
_target_status [ _stream_id ] [ ' LAST ' ] = pkt_time
@ -1118,7 +1110,7 @@ class routerOBP(OPENBRIDGE):
logger . debug ( ' ( %s ) Generating TX FULL and EMB LCs for HomeBrew destination: System: %s , TS: %s , TGID: %s ' , self . _system , _target [ ' SYSTEM ' ] , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) )
logger . debug ( ' ( %s ) Conference Bridge: %s , Call Bridged to HBP System: %s TS: %s , TGID: %s ' , self . _system , _bridge , _target [ ' SYSTEM ' ] , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , {} ,{} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _ slot, int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , {} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _ target[ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Set other values for the contention handler to test next time there is a frame to forward
_target_status [ _target [ ' TS ' ] ] [ ' TX_TIME ' ] = pkt_time
@ -1146,7 +1138,7 @@ class routerOBP(OPENBRIDGE):
dmrbits = _target_status [ _target [ ' TS ' ] ] [ ' TX_T_LC ' ] [ 0 : 98 ] + dmrbits [ 98 : 166 ] + _target_status [ _target [ ' TS ' ] ] [ ' TX_T_LC ' ] [ 98 : 197 ]
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
call_duration = pkt_time - _target_status [ _target [ ' TS ' ] ] [ ' TX_START ' ]
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} ,{} , {} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Create a Burst B-E packet (Embedded LC)
elif _dtype_vseq in [ 1 , 2 , 3 , 4 ] :
dmrbits = dmrbits [ 0 : 116 ] + _target_status [ _target [ ' TS ' ] ] [ ' TX_EMB_LC ' ] [ _dtype_vseq ] + dmrbits [ 148 : 264 ]
@ -1168,7 +1160,7 @@ class routerOBP(OPENBRIDGE):
systems [ _d_system ] . send_system ( _tmp_data )
logger . debug ( ' ( %s ) UNIT Data Bridged to HBP on slot 1: %s DST_ID: %s ' , self . _system , _d_system , _int_dst_id )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _d_system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {{ }, {} , {} , {} , {} , {} , {} , {} ' . format ( self . _system, int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _d_system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {} , {} , {} , {} , {} , {} ' . format ( _d _system, int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
def sendDataToOBP ( self , _target , _data , dmrpkt , pkt_time , _stream_id , _dst_id , _peer_id , _rf_src , _bits , _slot , _hops = b ' ' , _source_server = b ' \x00 \x00 \x00 \x00 ' , _ber = b ' \x00 ' , _rssi = b ' \x00 ' , _source_rptr = b ' \x00 \x00 \x00 \x00 ' ) :
@ -1189,9 +1181,7 @@ class routerOBP(OPENBRIDGE):
' RFS ' : _rf_src ,
' TGID ' : _dst_id ,
' RX_PEER ' : _peer_id ,
' packets ' : 0 ,
' _source_server ' : _source_server ,
' _source_rptr ' : _source_rptr
' packets ' : 0
}
# Record the time of this packet so we can later identify a stale stream
@ -1209,7 +1199,8 @@ class routerOBP(OPENBRIDGE):
systems [ _target ] . send_system ( _tmp_data , _hops , _ber , _rssi , _source_server , _source_rptr )
logger . debug ( ' ( %s ) UNIT Data Bridged to OBP System: %s DST_ID: %s ' , self . _system , _target , _int_dst_id )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _target ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {} , {} , {} , {} , {} , {} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {} , {} , {} , {} , {} , {} ' . format ( _target , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
def dmrd_received ( self , _peer_id , _rf_src , _dst_id , _seq , _slot , _call_type , _frame_type , _dtype_vseq , _stream_id , _data , _hash , _hops = b ' ' , _source_server = b ' \x00 \x00 \x00 \x00 ' , _ber = b ' \x00 ' , _rssi = b ' \x00 ' , _source_rptr = b ' \x00 \x00 \x00 \x00 ' ) :
@ -1249,9 +1240,7 @@ class routerOBP(OPENBRIDGE):
' lastData ' : False ,
' RX_PEER ' : _peer_id ,
' packets ' : 0 ,
' crcs ' : set ( ) ,
' source_server ' : _source_server ,
' source_rptr ' : _source_rptr
' crcs ' : set ( )
}
@ -1300,22 +1289,22 @@ class routerOBP(OPENBRIDGE):
logger . info ( ' ( %s ) *UNIT CSBK* STREAM ID: %s , RPTR: %s SUB: %s ( %s ) PEER: %s ( %s ) DST_ID %s ( %s ), TS %s , SRC: %s , RPTR: %s ' , \
self . _system , int_id ( _stream_id ) , self . get_rptr ( _source_rptr ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , int_id ( _source_rptr ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' UNIT CSBK,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' UNIT CSBK,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
elif _dtype_vseq == 6 :
logger . info ( ' ( %s ) *UNIT DATA HEADER* STREAM ID: %s , RPTR: %s SUB: %s ( %s ) PEER: %s ( %s ) DST_ID %s ( %s ), TS %s , SRC: %s , RPTR: %s ' , \
self . _system , int_id ( _stream_id ) , self . get_rptr ( _source_rptr ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , int_id ( _source_rptr ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' UNIT DATA HEADER,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' UNIT DATA HEADER,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
elif _dtype_vseq == 7 :
logger . info ( ' ( %s ) *UNIT VCSBK 1/2 DATA BLOCK * STREAM ID: %s , RPTR: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s , SRC: %s , RPTR: %s ' , \
self . _system , int_id ( _stream_id ) , self . get_rptr ( _source_rptr ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , int_id ( _source_rptr ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' UNIT VCSBK 1/2 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' UNIT VCSBK 1/2 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
elif _dtype_vseq == 8 :
logger . info ( ' ( %s ) *UNIT VCSBK 3/4 DATA BLOCK * STREAM ID: %s , RPTR: %s , SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s , SRC: %s , RPTR: %s ' , \
self . _system , int_id ( _stream_id ) , self . get_rptr ( _source_rptr ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , int_id ( _source_rptr ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' UNIT VCSBK 3/4 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' UNIT VCSBK 3/4 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
else :
logger . info ( ' ( %s ) *UNKNOWN DATA TYPE* STREAM ID: %s , RPTR: %s , SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s , SRC: %s , RPTR: %s ' , \
self . _system , int_id ( _stream_id ) , self . get_rptr ( _source_rptr ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , int_id ( _source_rptr ) )
@ -1398,9 +1387,7 @@ class routerOBP(OPENBRIDGE):
' RX_PEER ' : _peer_id ,
' packets ' : 0 ,
' loss ' : 0 ,
' crcs ' : set ( ) ,
' source_server ' : _source_server ,
' source_rptr ' : _source_rptr
' crcs ' : set ( )
}
@ -1420,8 +1407,7 @@ class routerOBP(OPENBRIDGE):
logger . info ( ' ( %s ) *CALL START* STREAM ID: %s , SUB: %s ( %s ), RPTR: %s ( %s ), PEER: %s ( %s ) TGID %s ( %s ), TS %s , SRC: %s , HOPS %s ' ,
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , self . get_rptr ( _source_rptr ) , int_id ( _source_rptr ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , int_id ( _source_server ) , _inthops )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' GROUP VOICE,START,RX, {} , {} , {} , {} , {} , {} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' GROUP VOICE,START,RX, {} , {} , {} , {} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
else :
@ -1556,8 +1542,7 @@ class routerOBP(OPENBRIDGE):
logger . info ( ' ( %s ) *CALL END* STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s , Duration: %.2f , Packet rate: %.2f /s, Loss: %.2f %% ' , \
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , call_duration , packet_rate , loss )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , call_duration , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , call_duration ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . STATUS [ _stream_id ] [ ' _fin ' ] = True
self . STATUS [ _stream_id ] [ ' lastSeq ' ] = False
@ -1630,9 +1615,7 @@ class routerHBP(HBSYSTEM):
' lastData ' : False ,
' packets ' : 0 ,
' crcs ' : set ( ) ,
' _allStarMode ' : False ,
' source_server ' : False ,
' source_rptr ' : False
' _allStarMode ' : False
}
}
@ -1680,9 +1663,7 @@ class routerHBP(HBSYSTEM):
' CONTENTION ' : False ,
' RFS ' : _rf_src ,
' TGID ' : _dst_id ,
' RX_PEER ' : _peer_id ,
' source_server ' : _source_server ,
' source_rptr ' : _source_rptr
' RX_PEER ' : _peer_id
}
# Generate LCs (full and EMB) for the TX stream
dst_lc = b ' ' . join ( [ self . STATUS [ _slot ] [ ' RX_LC ' ] [ 0 : 3 ] , _target [ ' TGID ' ] , _rf_src ] )
@ -1715,7 +1696,7 @@ class routerHBP(HBSYSTEM):
dmrbits = _target_status [ _stream_id ] [ ' T_LC ' ] [ 0 : 98 ] + dmrbits [ 98 : 166 ] + _target_status [ _stream_id ] [ ' T_LC ' ] [ 98 : 197 ]
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
call_duration = pkt_time - _target_status [ _stream_id ] [ ' START ' ]
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} ,{} , {} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Create a Burst B-E packet (Embedded LC)
elif _dtype_vseq in [ 1 , 2 , 3 , 4 ] :
dmrbits = dmrbits [ 0 : 116 ] + _target_status [ _stream_id ] [ ' EMB_LC ' ] [ _dtype_vseq ] + dmrbits [ 148 : 264 ]
@ -1757,8 +1738,6 @@ class routerHBP(HBSYSTEM):
_target_status [ _target [ ' TS ' ] ] [ ' TX_STREAM_ID ' ] = _stream_id
_target_status [ _target [ ' TS ' ] ] [ ' TX_RFS ' ] = _rf_src
_target_status [ _target [ ' TS ' ] ] [ ' TX_PEER ' ] = _peer_id
_target_status [ _target [ ' TS ' ] ] [ ' source_server ' ] = _source_server
_target_status [ _target [ ' TS ' ] ] [ ' source_rptr ' ] = _source_rptr
# Generate LCs (full and EMB) for the TX stream
dst_lc = b ' ' . join ( [ self . STATUS [ _slot ] [ ' RX_LC ' ] [ 0 : 3 ] , _target [ ' TGID ' ] , _rf_src ] )
_target_status [ _target [ ' TS ' ] ] [ ' TX_H_LC ' ] = bptc . encode_header_lc ( dst_lc )
@ -1767,7 +1746,7 @@ class routerHBP(HBSYSTEM):
logger . debug ( ' ( %s ) Generating TX FULL and EMB LCs for HomeBrew destination: System: %s , TS: %s , TGID: %s ' , self . _system , _target [ ' SYSTEM ' ] , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) )
logger . debug ( ' ( %s ) Conference Bridge: %s , Call Bridged to HBP System: %s TS: %s , TGID: %s ' , self . _system , _bridge , _target [ ' SYSTEM ' ] , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , { :.2f}, {} , { }' . format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,START,TX, {} , {} , {} , {} , {} , { }' . format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Set other values for the contention handler to test next time there is a frame to forward
_target_status [ _target [ ' TS ' ] ] [ ' TX_TIME ' ] = pkt_time
@ -1795,7 +1774,7 @@ class routerHBP(HBSYSTEM):
dmrbits = _target_status [ _target [ ' TS ' ] ] [ ' TX_T_LC ' ] [ 0 : 98 ] + dmrbits [ 98 : 166 ] + _target_status [ _target [ ' TS ' ] ] [ ' TX_T_LC ' ] [ 98 : 197 ]
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
call_duration = pkt_time - _target_status [ _target [ ' TS ' ] ] [ ' TX_START ' ]
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} ,{} , {} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _target [ ' SYSTEM ' ] ] . _report . send_bridgeEvent ( ' GROUP VOICE,END,TX, {} , {} , {} , {} , {} , {} , {:.2f} '. format ( _target [ ' SYSTEM ' ] , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _target [ ' TS ' ] , int_id ( _target [ ' TGID ' ] ) , call_duration ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# Create a Burst B-E packet (Embedded LC)
elif _dtype_vseq in [ 1 , 2 , 3 , 4 ] :
dmrbits = dmrbits [ 0 : 116 ] + _target_status [ _target [ ' TS ' ] ] [ ' TX_EMB_LC ' ] [ _dtype_vseq ] + dmrbits [ 148 : 264 ]
@ -1813,16 +1792,13 @@ class routerHBP(HBSYSTEM):
def sendDataToHBP ( self , _d_system , _d_slot , _dst_id , _tmp_bits , _data , dmrpkt , _rf_src , _stream_id , _peer_id ) :
#Assemble transmit HBP packet header
_source_server = self . _CONFIG [ ' GLOBAL ' ] [ ' SERVER_ID ' ]
_source_rptr = _peer_id
_int_dst_id = int_id ( _dst_id )
_tmp_data = b ' ' . join ( [ _data [ : 15 ] , _tmp_bits . to_bytes ( 1 , ' big ' ) , _data [ 16 : 20 ] ] )
_tmp_data = b ' ' . join ( [ _tmp_data , dmrpkt ] )
systems [ _d_system ] . send_system ( _tmp_data , None )
logger . debug ( ' ( %s ) UNIT Data Bridged to HBP on slot 1: %s DST_ID: %s ' , self . _system , _d_system , _int_dst_id )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ _d_system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {} , {} , {} , {} , {} , {} , {} , {} ' . format ( _d_system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ _d_system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX, {} , {} , {} , {} , {} , {} ' . format ( _d_system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
def sendDataToOBP ( self , _target , _data , dmrpkt , pkt_time , _stream_id , _dst_id , _peer_id , _rf_src , _bits , _slot , _hops = b ' ' , _ber = b ' \x00 ' , _rssi = b ' \x00 ' , _source_server = b ' \x00 \x00 \x00 \x00 ' , _source_rptr = b ' \x00 \x00 \x00 \x00 ' ) :
# _sysIgnore = sysIgnore
@ -1846,9 +1822,7 @@ class routerHBP(HBSYSTEM):
' CONTENTION ' : False ,
' RFS ' : _rf_src ,
' TGID ' : _dst_id ,
' RX_PEER ' : _peer_id ,
' source_server ' : _source_server ,
' source_rptr ' : _source_rptr
' RX_PEER ' : _peer_id
}
# Record the time of this packet so we can later identify a stale stream
@ -1866,7 +1840,7 @@ class routerHBP(HBSYSTEM):
systems [ _target ] . send_system ( _tmp_data , b ' ' , _ber , _rssi , _source_server , _source_rptr )
logger . debug ( ' ( %s ) UNIT Data Bridged to OBP System: %s DST_ID: %s ' , self . _system , _target , _int_dst_id )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
systems [ system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX ,{} , {} ,{} , {} , {} , {} , {} , {} ' . format ( _target , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
systems [ system ] . _report . send_bridgeEvent ( ' UNIT DATA,DATA,TX ,{} , {} , {} , {} , {} , {} ' . format ( _target , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , 1 , _int_dst_id ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
def dmrd_received ( self , _peer_id , _rf_src , _dst_id , _seq , _slot , _call_type , _frame_type , _dtype_vseq , _stream_id , _data ) :
@ -1879,10 +1853,8 @@ class routerHBP(HBSYSTEM):
_bits = _data [ 15 ]
_source_server = self . _CONFIG [ ' GLOBAL ' ] [ ' SERVER_ID ' ]
self . STATUS [ _slot ] [ ' source_server ' ] = _source_server
_source_rptr = _peer_id
self . STATUS [ _slot ] [ ' source_rptr ' ] = _source_rptr
#_pkt_crc = Crc32.calc(_data[4:53])
#_pkt_crc = hash(_data).digest()
@ -2232,8 +2204,6 @@ class routerHBP(HBSYSTEM):
self . STATUS [ _slot ] [ ' packets ' ] = 0
self . STATUS [ _slot ] [ ' loss ' ] = 0
self . STATUS [ _slot ] [ ' crcs ' ] = set ( )
self . STATUS [ _slot ] [ ' _source_server ' ] = _source_server
self . STATUS [ _slot ] [ ' _source_rptr ' ] = _source_rptr
if ( self . STATUS [ _slot ] [ ' RX_TYPE ' ] != HBPF_SLT_VTERM ) and ( pkt_time < ( self . STATUS [ _slot ] [ ' RX_TIME ' ] + STREAM_TO ) ) and ( _rf_src != self . STATUS [ _slot ] [ ' RX_RFS ' ] ) :
logger . warning ( ' ( %s ) Packet received with STREAM ID: %s <FROM> SUB: %s PEER: %s <TO> TGID %s , SLOT %s collided with existing call ' , self . _system , int_id ( _stream_id ) , int_id ( _rf_src ) , int_id ( _peer_id ) , int_id ( _dst_id ) , _slot )
@ -2253,13 +2223,12 @@ class routerHBP(HBSYSTEM):
logger . info ( ' ( %s ) *CALL START* STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s ' , \
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' GROUP VOICE,START,RX, {} , {} , {} , {} , {} , {} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' GROUP VOICE,START,RX, {} , {} , {} , {} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
else :
logger . info ( ' ( %s ) *VCSBK* STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s _dtype_vseq: %s ' ,
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , _dtype_vseq )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' OTHER DATA,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' OTHER DATA,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
# If we can, use the LC from the voice header as to keep all options intact
if _frame_type == HBPF_DATA_SYNC and _dtype_vseq == HBPF_SLT_VHEAD :
@ -2283,12 +2252,12 @@ class routerHBP(HBSYSTEM):
logger . info ( ' ( %s ) *VCSBK 1/2 DATA BLOCK * STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s ' , \
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' VCSBK 1/2 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' VCSBK 1/2 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
elif _dtype_vseq == 8 :
logger . info ( ' ( %s ) *VCSBK 3/4 DATA BLOCK * STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s ' , \
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' VCSBK 3/4 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} ,{} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' VCSBK 3/4 DATA BLOCK,DATA,RX, {} , {} , {} , {} , {} , {} '. format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
#Packet rate limit
#Rate drop
@ -2387,9 +2356,7 @@ class routerHBP(HBSYSTEM):
logger . info ( ' ( %s ) *CALL END* STREAM ID: %s SUB: %s ( %s ) PEER: %s ( %s ) TGID %s ( %s ), TS %s , Duration: %.2f , Packet rate: %.2f /s, LOSS: %.2f %% ' , \
self . _system , int_id ( _stream_id ) , get_alias ( _rf_src , subscriber_ids ) , int_id ( _rf_src ) , get_alias ( _peer_id , peer_ids ) , int_id ( _peer_id ) , get_alias ( _dst_id , talkgroup_ids ) , int_id ( _dst_id ) , _slot , call_duration , packet_rate , loss )
if CONFIG [ ' REPORTS ' ] [ ' REPORT ' ] :
self . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} , {} , {} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , call_duration , int_id ( _source_server ) , int_id ( _source_rptr ) ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
self . _report . send_bridgeEvent ( ' GROUP VOICE,END,RX, {} , {} , {} , {} , {} , {} , {:.2f} ' . format ( self . _system , int_id ( _stream_id ) , int_id ( _peer_id ) , int_id ( _rf_src ) , _slot , int_id ( _dst_id ) , call_duration ) . encode ( encoding = ' utf-8 ' , errors = ' ignore ' ) )
#Reset back to False
self . STATUS [ _slot ] [ ' lastSeq ' ] = False