diff --git a/bridge.py b/bridge.py index 70bb8b6..8920f8c 100755 --- a/bridge.py +++ b/bridge.py @@ -89,30 +89,30 @@ __email__ = 'kf7eel@qsl.net' ##import os, ast -# Function to download rules -def update_tg(CONFIG, mode, dmr_id, data): - user_man_url = CONFIG['WEB_SERVICE']['URL'] - shared_secret = str(sha256(CONFIG['WEB_SERVICE']['SHARED_SECRET'].encode()).hexdigest()) - update_srv = { - 'update_tg':CONFIG['WEB_SERVICE']['THIS_SERVER_NAME'], - 'secret':shared_secret, - 'dmr_id': dmr_id, -## 'ts1': data['ts1'], -## 'ts2': data['ts2'], - 'mode': mode, - 'data': data - } -## print(rules_check) - json_object = json.dumps(update_srv, indent = 4) - - try: - req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) -## resp = json.loads(req.text) -## print(resp) -## return resp['rules'] - except requests.ConnectionError: - logger.error('Config server unreachable, defaulting to local config') -## return config.build_config(cli_file) +### Function to download rules +##def update_tg(CONFIG, mode, dmr_id, data): +## user_man_url = CONFIG['WEB_SERVICE']['URL'] +## shared_secret = str(sha256(CONFIG['WEB_SERVICE']['SHARED_SECRET'].encode()).hexdigest()) +## update_srv = { +## 'update_tg':CONFIG['WEB_SERVICE']['THIS_SERVER_NAME'], +## 'secret':shared_secret, +## 'dmr_id': dmr_id, +#### 'ts1': data['ts1'], +#### 'ts2': data['ts2'], +## 'mode': mode, +## 'data': data +## } +#### print(rules_check) +## json_object = json.dumps(update_srv, indent = 4) +## +## try: +## req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) +#### resp = json.loads(req.text) +#### print(resp) +#### return resp['rules'] +## except requests.ConnectionError: +## logger.error('Config server unreachable, defaulting to local config') +#### return config.build_config(cli_file) def send_unit_table(CONFIG, _data): @@ -377,7 +377,7 @@ def hotspot_proxy(listen_port, port_start, port_stop): reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,BlackList,Timeout,Debug,ClientInfo,DestportStart,DestPortEnd),interface=ListenIP) def loopingErrHandle(failure): - print('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure)) + logger.info('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure)) reactor.stop() def stats(): @@ -390,7 +390,7 @@ def hotspot_proxy(listen_port, port_start, port_stop): totalPorts = DestPortEnd - DestportStart freePorts = totalPorts - count - print("{} ports out of {} in use ({} free)".format(count,totalPorts,freePorts)) + logger.info("{} ports out of {} in use ({} free)".format(count,totalPorts,freePorts)) @@ -585,7 +585,6 @@ def rule_timer_loop(unit_flood_time): # run this every 10 seconds to trim orphaned stream ids def stream_trimmer_loop(): - print(UNIT_MAP) ping(CONFIG) logger.debug('(ROUTER) Trimming inactive stream IDs from system lists') _now = time() @@ -851,8 +850,8 @@ class routerOBP(OPENBRIDGE): dmrpkt = _data[20:53] _bits = _data[15] - print('Src: ' + str(int_id(_rf_src))) - print('Dst: ' + str(int_id(_dst_id))) + logger.debug('Src: ' + str(int_id(_rf_src))) + logger.debug('Dst: ' + str(int_id(_dst_id))) # Make/update this unit in the UNIT_MAP cache UNIT_MAP[_rf_src] = (self.name, pkt_time) diff --git a/data_gateway.py b/data_gateway.py index b428e86..fe2d799 100644 --- a/data_gateway.py +++ b/data_gateway.py @@ -991,9 +991,9 @@ def create_sms_seq(dst_id, src_id, peer_id, _slot, _call_type, dmr_string): mmdvm_send_seq.append(the_mmdvm_pkt) cap_in = cap_in + 1 - if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == False: - with open('/tmp/.hblink_data_que_' + str(CONFIG['DATA_CONFIG']['APRS_LOGIN_CALL']).upper() + '/' + str(random.randint(1000, 9999)) + '.mmdvm_seq', "w") as packet_write_file: - packet_write_file.write(str(mmdvm_send_seq)) +## if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == False: +## with open('/tmp/.hblink_data_que_' + str(CONFIG['DATA_CONFIG']['APRS_LOGIN_CALL']).upper() + '/' + str(random.randint(1000, 9999)) + '.mmdvm_seq', "w") as packet_write_file: +## packet_write_file.write(str(mmdvm_send_seq)) return mmdvm_send_seq ## return the_mmdvm_pkt @@ -1539,8 +1539,8 @@ def data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _fr float(loc.lon) ## if int_id(_dst_id) == data_id: if int_id(_dst_id) in data_id: - aprs_send(aprs_loc_packet) dashboard_loc_write(str(get_alias(int_id(_rf_src), subscriber_ids)) + '-' + ssid, str(loc.lat[0:7]) + str(loc.lat_dir), str(loc.lon[0:8]) + str(loc.lon_dir), time(), comment, int_id(_rf_src)) + aprs_send(aprs_loc_packet) except Exception as error_exception: logger.error('Failed to parse packet. Packet may be deformed. Not uploaded.') logger.error(error_exception) @@ -1665,46 +1665,46 @@ class OBP(OPENBRIDGE): logger.debug('SVRD RCV') if _mode == b'UNIT': UNIT_MAP[_data] = (self._system, time()) -## if _mode == b'DATA' or _mode == b'MDAT': -#### print(ahex(_data)) -## # DMR Data packet, sent via SVRD -## _peer_id = _data[11:15] -## _seq = _data[4] -## _rf_src = _data[5:8] -## _dst_id = _data[8:11] -## _bits = _data[15] -## _slot = 2 if (_bits & 0x80) else 1 -## #_call_type = 'unit' if (_bits & 0x40) else 'group' -## if _bits & 0x40: -## _call_type = 'unit' -## elif (_bits & 0x23) == 0x23: -## _call_type = 'vcsbk' -## else: -## _call_type = 'group' -## _frame_type = (_bits & 0x30) >> 4 -## _dtype_vseq = (_bits & 0xF) # data, 1=voice header, 2=voice terminator; voice, 0=burst A ... 5=burst F -## _stream_id = _data[16:20] -## -#### print(int_id(_peer_id)) -#### print(int_id(_rf_src)) -#### print(int_id(_dst_id)) -#### print((_dtype_vseq)) -#### print(ahex(bptc_decode(_data))) -## -## if _mode == b'MDAT' or _mode == b'DATA': -## print('MDAT') -## if _rf_src not in PACKET_MATCH: -## PACKET_MATCH[_rf_src] = [_seq, time()] -## if _seq == PACKET_MATCH[_rf_src][0] and time() - 1 < PACKET_MATCH[_rf_src][1]: -## print('matched, dropping') -## pass -## -## else: -## print('no match') -## if _mode == b'MDAT': -## data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data, True) -## if _mode == b'DATA': -## data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data) + if _mode == b'DATA' or _mode == b'MDAT': +## print(ahex(_data)) + # DMR Data packet, sent via SVRD + _peer_id = _data[11:15] + _seq = _data[4] + _rf_src = _data[5:8] + _dst_id = _data[8:11] + _bits = _data[15] + _slot = 2 if (_bits & 0x80) else 1 + #_call_type = 'unit' if (_bits & 0x40) else 'group' + if _bits & 0x40: + _call_type = 'unit' + elif (_bits & 0x23) == 0x23: + _call_type = 'vcsbk' + else: + _call_type = 'group' + _frame_type = (_bits & 0x30) >> 4 + _dtype_vseq = (_bits & 0xF) # data, 1=voice header, 2=voice terminator; voice, 0=burst A ... 5=burst F + _stream_id = _data[16:20] + +## print(int_id(_peer_id)) +## print(int_id(_rf_src)) +## print(int_id(_dst_id)) +## print((_dtype_vseq)) +## print(ahex(bptc_decode(_data))) + + if _mode == b'MDAT' or _mode == b'DATA': + print('MDAT') + if _rf_src not in PACKET_MATCH: + PACKET_MATCH[_rf_src] = [_seq, time()] + if _seq == PACKET_MATCH[_rf_src][0] and time() - 1 < PACKET_MATCH[_rf_src][1]: + print('matched, dropping') + pass + + else: + print('no match') + if _mode == b'MDAT': + data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data, True) + if _mode == b'DATA': + data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data) @@ -1791,7 +1791,6 @@ if __name__ == '__main__': #### use_api = CONFIG['DATA_CONFIG']['USE_API'] if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == True: -#### if 'DUAL_DASH' in CONFIG['WEB_SERVICE'][''] pass if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == False: # Check if user_settings (for APRS settings of users) exists. Creat it if not. @@ -1858,7 +1857,7 @@ if __name__ == '__main__': ten_loop.addErrback(loopingErrHandle) if 'N0CALL' in aprs_callsign: - logger.info('APRS callsighn set to N0CALL, packet not sent.') + logger.info('APRS callsign set to N0CALL, packet not sent.') pass else: aprs_thread = threading.Thread(target=aprs_rx, args=(aprs_callsign, aprs_passcode, aprs_server, aprs_port, aprs_filter, user_ssid,)) diff --git a/hblink.py b/hblink.py index 4888145..1f68804 100755 --- a/hblink.py +++ b/hblink.py @@ -325,7 +325,7 @@ class HBSYSTEM(DatagramProtocol): try: req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) resp = json.loads(req.text) - print(resp) + logger.debug(resp) return resp except requests.ConnectionError: return {'allow':True} @@ -369,11 +369,9 @@ class HBSYSTEM(DatagramProtocol): 'software': re.sub("b'|'|\s\s+", '', str(soft)) } json_object = json.dumps(peer_loc_conf, indent = 4) - print() - print() - print(json_object) - print() - print() + + logger.debug(json_object) + try: req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) # resp = json.loads(req.text) @@ -625,13 +623,12 @@ class HBSYSTEM(DatagramProtocol): else: user_auth = False elif self._config['USE_USER_MAN'] == False: - print('False') + logger.debug('False, not using user manager') b_acl = self._config['REG_ACL'] if self._CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == True: # If UMS is False, and Rmote Confir True if acl_check(_peer_id, self._CONFIG['GLOBAL']['REG_ACL']) and acl_check(_peer_id, self._config['REG_ACL']): user_auth = True - print(self._CONFIG['GLOBAL']['REG_ACL']) else: user_auth = False #If UMS and Remot Config False diff --git a/web/app.py b/web/app.py index 025db16..7fe8e71 100644 --- a/web/app.py +++ b/web/app.py @@ -7007,7 +7007,7 @@ Name: ''' + p.name + '''  -  Port: ''' + str( ''' b_list = b_list + '''

View/Edit Rules (Bridges)

-/ + ''' r_list = '' for i in s: