save of incremental work
This commit is contained in:
		
							parent
							
								
									4e3a13daaf
								
							
						
					
					
						commit
						21c6bf9281
					
				
							
								
								
									
										50
									
								
								bridge.py
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								bridge.py
									
									
									
									
									
								
							| @ -206,6 +206,7 @@ def stream_trimmer_loop(): | |||||||
|                 if stream_id in systems[system].STATUS: |                 if stream_id in systems[system].STATUS: | ||||||
|                     _stream = systems[system].STATUS[stream_id] |                     _stream = systems[system].STATUS[stream_id] | ||||||
|                     _sysconfig = CONFIG['SYSTEMS'][system] |                     _sysconfig = CONFIG['SYSTEMS'][system] | ||||||
|  |                     if systems[system].STATUS[stream_id]['ACTIVE']: | ||||||
|                     logger.info('(%s) *TIME OUT*   STREAM ID: %s SUB: %s PEER: %s TYPE: %s DST ID: %s TS 1 Duration: %.2f', \ |                     logger.info('(%s) *TIME OUT*   STREAM ID: %s SUB: %s PEER: %s TYPE: %s DST ID: %s TS 1 Duration: %.2f', \ | ||||||
|                         system, int_id(stream_id), get_alias(int_id(_stream['RFS']), subscriber_ids), get_alias(int_id(_sysconfig['NETWORK_ID']), peer_ids), _stream['TYPE'], get_alias(int_id(_stream['DST']), talkgroup_ids), _stream['LAST'] - _stream['START']) |                         system, int_id(stream_id), get_alias(int_id(_stream['RFS']), subscriber_ids), get_alias(int_id(_sysconfig['NETWORK_ID']), peer_ids), _stream['TYPE'], get_alias(int_id(_stream['DST']), talkgroup_ids), _stream['LAST'] - _stream['START']) | ||||||
|                     if CONFIG['REPORTS']['REPORT']: |                     if CONFIG['REPORTS']['REPORT']: | ||||||
| @ -240,7 +241,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                 'CONTENTION':False, |                 'CONTENTION':False, | ||||||
|                 'RFS':       _rf_src, |                 'RFS':       _rf_src, | ||||||
|                 'TYPE':      'GROUP', |                 'TYPE':      'GROUP', | ||||||
|                 'DST':       _dst_id |                 'DST':       _dst_id, | ||||||
|  |                 'ACTIVE':    True | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             # If we can, use the LC from the voice header as to keep all options intact |             # If we can, use the LC from the voice header as to keep all options intact | ||||||
| @ -280,7 +282,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                                         'CONTENTION':False, |                                         'CONTENTION':False, | ||||||
|                                         'RFS':       _rf_src, |                                         'RFS':       _rf_src, | ||||||
|                                         'TYPE':      'GROUP', |                                         'TYPE':      'GROUP', | ||||||
|                                         'DST':       _dst_id |                                         'DST':       _dst_id, | ||||||
|  |                                         'ACTIVE':    True | ||||||
|                                     } |                                     } | ||||||
|                                     # Generate LCs (full and EMB) for the TX stream |                                     # Generate LCs (full and EMB) for the TX stream | ||||||
|                                     dst_lc = b''.join([self.STATUS[_stream_id]['LC'][0:3], _target['TGID'], _rf_src]) |                                     dst_lc = b''.join([self.STATUS[_stream_id]['LC'][0:3], _target['TGID'], _rf_src]) | ||||||
| @ -313,7 +316,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                                     dmrbits = _target_status[_stream_id]['T_LC'][0:98] + dmrbits[98:166] + _target_status[_stream_id]['T_LC'][98:197] |                                     dmrbits = _target_status[_stream_id]['T_LC'][0:98] + dmrbits[98:166] + _target_status[_stream_id]['T_LC'][98:197] | ||||||
|                                     if CONFIG['REPORTS']['REPORT']: |                                     if CONFIG['REPORTS']['REPORT']: | ||||||
|                                         call_duration = pkt_time - _target_status[_stream_id]['START'] |                                         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).encode(encoding='utf-8', errors='ignore')) |                                         _target_status[_stream_id]['ACTIVE']: False | ||||||
|  |                                         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) |                                 # Create a Burst B-E packet (Embedded LC) | ||||||
|                                 elif _dtype_vseq in [1,2,3,4]: |                                 elif _dtype_vseq in [1,2,3,4]: | ||||||
|                                     dmrbits = dmrbits[0:116] + _target_status[_stream_id]['EMB_LC'][_dtype_vseq] + dmrbits[148:264] |                                     dmrbits = dmrbits[0:116] + _target_status[_stream_id]['EMB_LC'][_dtype_vseq] + dmrbits[148:264] | ||||||
| @ -407,7 +411,6 @@ class routerOBP(OPENBRIDGE): | |||||||
|                             #logger.debug('(%s) Packet routed by bridge: %s to system: %s TS: %s, TGID: %s', self._system, _bridge, _target['SYSTEM'], _target['TS'], int_id(_target['TGID'])) |                             #logger.debug('(%s) Packet routed by bridge: %s to system: %s TS: %s, TGID: %s', self._system, _bridge, _target['SYSTEM'], _target['TS'], int_id(_target['TGID'])) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|         # Final actions - Is this a voice terminator? |         # Final actions - Is this a voice terminator? | ||||||
|         if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM): |         if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM): | ||||||
|             call_duration = pkt_time - self.STATUS[_stream_id]['START'] |             call_duration = pkt_time - self.STATUS[_stream_id]['START'] | ||||||
| @ -415,10 +418,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                     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) |                     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) | ||||||
|             if CONFIG['REPORTS']['REPORT']: |             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).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')) | ||||||
|             removed = self.STATUS.pop(_stream_id) |             _target_status[_stream_id]['ACTIVE']: False | ||||||
|             logger.debug('(%s) OpenBridge sourced call stream end, remove terminated Stream ID: %s', self._system, int_id(_stream_id)) |             logger.debug('(%s) OpenBridge sourced call stream end, remove terminated Stream ID: %s', self._system, int_id(_stream_id)) | ||||||
|             if not removed: |  | ||||||
|                 selflogger.error('(%s) *GROUP CALL END*   STREAM ID: %s NOT IN LIST -- THIS IS A REAL PROBLEM', self._system, int_id(_stream_id)) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     def unit_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data): |     def unit_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data): | ||||||
| @ -439,7 +440,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                 'CONTENTION':False, |                 'CONTENTION':False, | ||||||
|                 'RFS':       _rf_src, |                 'RFS':       _rf_src, | ||||||
|                 'TYPE':      'UNIT', |                 'TYPE':      'UNIT', | ||||||
|                 'DST':       _dst_id |                 'DST':       _dst_id, | ||||||
|  |                 'ACTIVE':    True | ||||||
|             } |             } | ||||||
|                  |                  | ||||||
|             # Create a destination list for the call: |             # Create a destination list for the call: | ||||||
| @ -474,7 +476,8 @@ class routerOBP(OPENBRIDGE): | |||||||
|                         'CONTENTION':False, |                         'CONTENTION':False, | ||||||
|                         'RFS':       _rf_src, |                         'RFS':       _rf_src, | ||||||
|                         'TYPE':      'UNIT', |                         'TYPE':      'UNIT', | ||||||
|                         'DST':      _dst_id |                         'DST':      _dst_id, | ||||||
|  |                         'ACTIVE':   True | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     logger.info('(%s) Unit call bridged to OBP System: %s TS: %s, TGID: %s', self._system, _target, _slot, int_id(_dst_id)) |                     logger.info('(%s) Unit call bridged to OBP System: %s TS: %s, TGID: %s', self._system, _target, _slot, int_id(_dst_id)) | ||||||
| @ -489,6 +492,9 @@ class routerOBP(OPENBRIDGE): | |||||||
|                 # Assemble transmit HBP packet |                 # Assemble transmit HBP packet | ||||||
|                 _tmp_data = b''.join([_data[:15], _tmp_bits.to_bytes(1, 'big'), _data[16:20]]) |                 _tmp_data = b''.join([_data[:15], _tmp_bits.to_bytes(1, 'big'), _data[16:20]]) | ||||||
|                 _data = b''.join([_tmp_data, dmrpkt]) |                 _data = b''.join([_tmp_data, dmrpkt]) | ||||||
|  |                  | ||||||
|  |                 if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM): | ||||||
|  |                     _target_status[_stream_id]['ACTIVE']: False | ||||||
| 
 | 
 | ||||||
|             else: |             else: | ||||||
|                 # BEGIN STANDARD CONTENTION HANDLING |                 # BEGIN STANDARD CONTENTION HANDLING | ||||||
| @ -542,6 +548,11 @@ class routerOBP(OPENBRIDGE): | |||||||
| 
 | 
 | ||||||
|             #send the call: |             #send the call: | ||||||
|             systems[_target].send_system(_data) |             systems[_target].send_system(_data) | ||||||
|  |              | ||||||
|  |             if _target_system['MODE'] == 'OPENBRIDGE': | ||||||
|  |                 if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM): | ||||||
|  |                     if (_stream_id in _target_status): | ||||||
|  |                         _target_status.pop(_stream_id) | ||||||
| 
 | 
 | ||||||
|          |          | ||||||
|         # Final actions - Is this a voice terminator? |         # Final actions - Is this a voice terminator? | ||||||
| @ -686,7 +697,8 @@ class routerHBP(HBSYSTEM): | |||||||
|                                             'CONTENTION':False, |                                             'CONTENTION':False, | ||||||
|                                             'RFS':       _rf_src, |                                             'RFS':       _rf_src, | ||||||
|                                             'TYPE':     'GROUP', |                                             'TYPE':     'GROUP', | ||||||
|                                             'DST':      _dst_id |                                             'DST':      _dst_id, | ||||||
|  |                                             'ACTIVE':   True, | ||||||
|                                         } |                                         } | ||||||
|                                         # Generate LCs (full and EMB) for the TX stream |                                         # Generate LCs (full and EMB) for the TX stream | ||||||
|                                         dst_lc = b''.join([self.STATUS[_slot]['RX_LC'][0:3], _target['TGID'], _rf_src]) |                                         dst_lc = b''.join([self.STATUS[_slot]['RX_LC'][0:3], _target['TGID'], _rf_src]) | ||||||
| @ -719,6 +731,7 @@ class routerHBP(HBSYSTEM): | |||||||
|                                         dmrbits = _target_status[_stream_id]['T_LC'][0:98] + dmrbits[98:166] + _target_status[_stream_id]['T_LC'][98:197] |                                         dmrbits = _target_status[_stream_id]['T_LC'][0:98] + dmrbits[98:166] + _target_status[_stream_id]['T_LC'][98:197] | ||||||
|                                         if CONFIG['REPORTS']['REPORT']: |                                         if CONFIG['REPORTS']['REPORT']: | ||||||
|                                             call_duration = pkt_time - _target_status[_stream_id]['START'] |                                             call_duration = pkt_time - _target_status[_stream_id]['START'] | ||||||
|  |                                             _target_status[_stream_id]['ACTIVE']: False | ||||||
|                                             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')) |                                             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) |                                     # Create a Burst B-E packet (Embedded LC) | ||||||
|                                     elif _dtype_vseq in [1,2,3,4]: |                                     elif _dtype_vseq in [1,2,3,4]: | ||||||
| @ -804,7 +817,11 @@ class routerHBP(HBSYSTEM): | |||||||
|                                 # Transmit the packet to the destination system |                                 # Transmit the packet to the destination system | ||||||
|                                 systems[_target['SYSTEM']].send_system(_tmp_data) |                                 systems[_target['SYSTEM']].send_system(_tmp_data) | ||||||
|                                 #logger.debug('(%s) Packet routed by bridge: %s to system: %s TS: %s, TGID: %s', self._system, _bridge, _target['SYSTEM'], _target['TS'], int_id(_target['TGID'])) |                                 #logger.debug('(%s) Packet routed by bridge: %s to system: %s TS: %s, TGID: %s', self._system, _bridge, _target['SYSTEM'], _target['TS'], int_id(_target['TGID'])) | ||||||
| 
 |                                  | ||||||
|  |                                 if _target_system['MODE'] == 'OPENBRIDGE': | ||||||
|  |                                     if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM) and (self.STATUS[_slot]['RX_TYPE'] != HBPF_SLT_VTERM): | ||||||
|  |                                         if (_stream_id in _target_status): | ||||||
|  |                                             _target_status.pop(_stream_id) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         # Final actions - Is this a voice terminator? |         # Final actions - Is this a voice terminator? | ||||||
| @ -929,7 +946,8 @@ class routerHBP(HBSYSTEM): | |||||||
|                         'CONTENTION':False, |                         'CONTENTION':False, | ||||||
|                         'RFS':       _rf_src, |                         'RFS':       _rf_src, | ||||||
|                         'TYPE':      'UNIT', |                         'TYPE':      'UNIT', | ||||||
|                         'DST':      _dst_id |                         'DST':      _dst_id, | ||||||
|  |                         'ACTIVE':   True | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     logger.info('(%s) Unit call bridged to OBP System: %s TS: %s, UNIT: %s', self._system, _target, _slot, int_id(_dst_id)) |                     logger.info('(%s) Unit call bridged to OBP System: %s TS: %s, UNIT: %s', self._system, _target, _slot, int_id(_dst_id)) | ||||||
| @ -944,6 +962,9 @@ class routerHBP(HBSYSTEM): | |||||||
|                 # Assemble transmit HBP packet |                 # Assemble transmit HBP packet | ||||||
|                 _tmp_data = b''.join([_data[:15], _tmp_bits.to_bytes(1, 'big'), _data[16:20]]) |                 _tmp_data = b''.join([_data[:15], _tmp_bits.to_bytes(1, 'big'), _data[16:20]]) | ||||||
|                 _data = b''.join([_tmp_data, dmrpkt]) |                 _data = b''.join([_tmp_data, dmrpkt]) | ||||||
|  |                  | ||||||
|  |                 if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM): | ||||||
|  |                     _target_status[_stream_id]['ACTIVE']: False | ||||||
| 
 | 
 | ||||||
|             else: |             else: | ||||||
|                 # BEGIN STANDARD CONTENTION HANDLING |                 # BEGIN STANDARD CONTENTION HANDLING | ||||||
| @ -993,11 +1014,6 @@ class routerHBP(HBSYSTEM): | |||||||
| 
 | 
 | ||||||
|             #send the call: |             #send the call: | ||||||
|             systems[_target].send_system(_data) |             systems[_target].send_system(_data) | ||||||
|              |  | ||||||
|             if self._CONFIG['SYSTEMS'][_target]['MODE'] == 'OPENBRIDGE': |  | ||||||
|                 if (_frame_type == HBPF_DATA_SYNC) and (_dtype_vseq == HBPF_SLT_VTERM) and (self.STATUS[_slot]['RX_TYPE'] != HBPF_SLT_VTERM): |  | ||||||
|                     if (_stream_id in _target_status): |  | ||||||
|                         _target_status.pop(_stream_id) |  | ||||||
|                          |                          | ||||||
|          |          | ||||||
|         # Final actions - Is this a voice terminator? |         # Final actions - Is this a voice terminator? | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user