Check top-level server IDs for validity:

Add this to freedmr.cfg [ALIASES]

SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv
SERVER_ID_FILE: freedmr_hosts.tsv

Also, if you run docker, you may need to map the file outside:

touch /etc/freedmr/json/freedmr_hosts.tsv
chown 54000:54000 /etc/freedmr/json/freedmr_hosts.tsv

then in docker-compose.yml:

- '/etc/freedmr/json/server_ids.tsv:/opt/freedmr/server_ids.tsv'
identtg
Simon 4 years ago
parent 4edfe1cb80
commit 33f7064e66
No known key found for this signature in database
GPG Key ID: 6ACF11630B5D8F82

@ -654,12 +654,12 @@ def threadAlias():
logger.debug('(ALIAS) starting alias thread')
reactor.callInThread(aliasb)
def setAlias(_peer_ids,_subscriber_ids, _talkgroup_ids, _local_subscriber_ids):
peer_ids, subscriber_ids, talkgroup_ids,local_subscriber_ids = _peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids
def setAlias(_peer_ids,_subscriber_ids, _talkgroup_ids, _local_subscriber_ids, _server_ids):
peer_ids, subscriber_ids, talkgroup_ids,local_subscriber_ids,server_ids = _peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids,_server_ids
def aliasb():
_peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids = mk_aliases(CONFIG)
reactor.callFromThread(setAlias,_peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids)
_peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids, _server_ids = mk_aliases(CONFIG)
reactor.callFromThread(setAlias,_peer_ids, _subscriber_ids, _talkgroup_ids, _local_subscriber_ids, _server_ids)
def ident():
for system in systems:
@ -2863,7 +2863,7 @@ if __name__ == '__main__':
signal.signal(sig, sig_handler)
# Create the name-number mapping dictionaries
peer_ids, subscriber_ids, talkgroup_ids, local_subscriber_ids = mk_aliases(CONFIG)
peer_ids, subscriber_ids, talkgroup_ids, local_subscriber_ids, server_ids = mk_aliases(CONFIG)
#Add special IDs to DB
subscriber_ids[900999] = 'D-APRS'
@ -2872,6 +2872,7 @@ if __name__ == '__main__':
CONFIG['_SUB_IDS'] = subscriber_ids
CONFIG['_PEER_IDS'] = peer_ids
CONFIG['_LOCAL_SUBSCRIBER_IDS'] = local_subscriber_ids
CONFIG['_SERVER_IDS'] = server_ids

@ -183,7 +183,10 @@ def build_config(_config_file):
'TGID_URL': config.get(section, 'TGID_URL'),
'STALE_TIME': config.getint(section, 'STALE_DAYS') * 86400,
'SUB_MAP_FILE': config.get(section, 'SUB_MAP_FILE'),
'LOCAL_SUBSCRIBER_FILE': config.get(section, 'LOCAL_SUBSCRIBER_FILE')
'LOCAL_SUBSCRIBER_FILE': config.get(section, 'LOCAL_SUBSCRIBER_FILE'),
'SERVER_ID_URL': config.get(section, 'SERVER_ID_URL'),
'SERVER_ID_FILE': config.get(section, 'SERVER_ID_FILE')
})
elif section == 'MYSQL':

@ -62,6 +62,8 @@ import ssl
from os.path import isfile, getmtime
from urllib.request import urlopen
import csv
logging.TRACE = 5
logging.addLevelName(logging.TRACE, 'TRACE')
@ -455,6 +457,12 @@ class OPENBRIDGE(DatagramProtocol):
self.send_bcsq(_dst_id,_stream_id)
self._laststrid.append(_stream_id)
return
elif (len(str(int.from_bytes(_source_server,'big'))) == 4 or (len(str(int.from_bytes(_source_server,'big'))) == 5)) and ((str(int.from_bytes(_source_server,'big'))[:4]) not in self._CONFIG['_SERVER_IDS'] ):
if _stream_id not in self._laststrid:
logger.warning('(%s) Source Server ID is 4 or 5 digits but not in list: %s', self._system, int.from_bytes(_source_server,'big'))
self.send_bcsq(_dst_id,_stream_id)
self._laststrid.append(_stream_id)
return
elif len(str(int.from_bytes(_source_server,'big'))) > 5 and not self.validate_id(_source_server):
if _stream_id not in self._laststrid:
logger.warning('(%s) Source Server 6 or 7 digits but not a valid DMR ID, discarding Src: %s', self._system, int.from_bytes(_source_server,'big'))
@ -1384,6 +1392,19 @@ def try_download(_path, _file, _url, _stale,):
return result
#Read list of listed servers from CSV (actually TSV) file
def mk_server_dict(path,filename):
server_ids = {}
try:
with open(path+filename,newline='') as csvfile:
reader = csv.DictReader(csvfile,dialect='excel-tab')
for _row in reader:
server_ids[_row['OPB Net ID']] = _row['Country']
return(server_ids)
except IOError as err:
logger.warning('ID ALIAS MAPPER: %s could not be read due to IOError: %s',file,err)
return(False)
# ID ALIAS CREATION
# Download
@ -1398,6 +1419,10 @@ def mk_aliases(_config):
#Try updating tgid aliases file
result = try_download(_config['ALIASES']['PATH'], _config['ALIASES']['TGID_FILE'], _config['ALIASES']['TGID_URL'], _config['ALIASES']['STALE_TIME'])
logger.info('(ALIAS) %s', result)
#Try updating server ids file
result = try_download(_config['ALIASES']['PATH'], _config['ALIASES']['SERVER_ID_FILE'], _config['ALIASES']['SERVER_ID_URL'], _config['ALIASES']['STALE_TIME'])
logger.info('(ALIAS) %s', result)
# Make Dictionaries
@ -1420,10 +1445,13 @@ def mk_aliases(_config):
local_subscriber_ids = mk_id_dict(_config['ALIASES']['PATH'], _config['ALIASES']['LOCAL_SUBSCRIBER_FILE'])
if subscriber_ids:
logger.info('(ALIAS) ID ALIAS MAPPER: local_subscriber_ids dictionary is available')
server_ids = mk_server_dict(_config['ALIASES']['PATH'], _config['ALIASES']['SERVER_ID_FILE'])
if server_ids:
logger.info('(ALIAS) ID ALIAS MAPPER: server_ids dictionary is available')
return peer_ids, subscriber_ids, talkgroup_ids, local_subscriber_ids
return peer_ids, subscriber_ids, talkgroup_ids, local_subscriber_ids, server_ids
#************************************************

Loading…
Cancel
Save

Powered by TurnKey Linux.