diff --git a/bridge_master.py b/bridge_master.py index 63f984f..b7f886e 100644 --- a/bridge_master.py +++ b/bridge_master.py @@ -2637,7 +2637,7 @@ class routerHBP(HBSYSTEM): self.STATUS[_slot]['LOOPLOG'] = True self.STATUS[_slot]['LAST'] = pkt_time - if CONFIG['SYSTEMS'][self._system]['ENHANCED_OBP'] and '_bcsq' not in self.STATUS[_slot]: + if 'ENHANCED_OBP' in CONFIG['SYSTEMS'][self._system] and CONFIG['SYSTEMS'][self._system]['ENHANCED_OBP'] and '_bcsq' not in self.STATUS[_slot]: systems[self._system].send_bcsq(_dst_id,_stream_id) self.STATUS[_slot]['_bcsq'] = True return diff --git a/docker-configs/docker-compose.yml b/docker-configs/docker-compose.yml index 528d3b6..c4c3738 100644 --- a/docker-configs/docker-compose.yml +++ b/docker-configs/docker-compose.yml @@ -24,13 +24,11 @@ services: mem_reservation: 600m volumes: - '/etc/freedmr/freedmr.cfg:/opt/freedmr/freedmr.cfg' - - '/var/log/freedmr/freedmr.log:/opt/freedmr/freedmr.log' + - '/var/log/freedmr/:/opt/freedmr/log/' - '/etc/freedmr/rules.py:/opt/freedmr/rules.py' #Write JSON files outside of container - - '/etc/freedmr/json/talkgroup_ids.json:/opt/freedmr/talkgroup_ids.json' - - '/etc/freedmr/json/subscriber_ids.json:/opt/freedmr/subscriber_ids.json' - - '/etc/freedmr/json/peer_ids.json:/opt/freedmr/peer_ids.json' - - '/etc/freedmr/json/sub_map.pkl:/opt/freedmr/sub_map.pkl' + - '/etc/freedmr/json/:/opt/freedmr/json/' + ports: - '62031:62031/udp' #Change the below to inlude ports used for your OBP(s) @@ -62,12 +60,9 @@ services: volumes: #This should be kept to a manageable size from #cron or logrotate outisde of the container. - - '/var/log/FreeDMRmonitor/lastheard.log:/opt/FreeDMRmonitor/log/lastheard.log' - - '/var/log/FreeDMRmonitor/hbmon.log:/opt/FreeDMRmonitor/log/hbmon.log' + - '/var/log/FreeDMRmonitor/:/opt/FreeDMRmonitor/log/' #Write JSON files outside of container - - '/etc/freedmr/json/talkgroup_ids.json:/opt/FreeDMRmonitor/talkgroup_ids.json' - - '/etc/freedmr/json/subscriber_ids.json:/opt/FreeDMRmonitor/subscriber_ids.json' - - '/etc/freedmr/json/peer_ids.json:/opt/FreeDMRmonitor/peer_ids.json' + - '/etc/freedmr/json/:/opt/FreeDMRmonitor/json/' #Override config file # - '/etc/freedmr/config.py:/opt/FreeDMRmonitor/config.py' diff --git a/docker-configs/docker-compose_install.sh b/docker-configs/docker-compose_install.sh index 6613396..f1a2bc1 100644 --- a/docker-configs/docker-compose_install.sh +++ b/docker-configs/docker-compose_install.sh @@ -37,14 +37,7 @@ chmod 755 /etc/freedmr && echo make json directory... mkdir -p /etc/freedmr/json && - -echo get json files... -cd /etc/freedmr/json && -curl http://downloads.freedmr.uk/downloads/local_subscriber_ids.json -o subscriber_ids.json && -curl http://downloads.freedmr.uk/downloads/talkgroup_ids.json -o talkgroup_ids.json && -curl https://www.radioid.net/static/rptrs.json -o peer_ids.json && -touch /etc/freedmr/json/sub_map.pkl && -chmod -R 777 /etc/freedmr/json && +chown 54000:54000 /etc/freedmr/json && echo Install /etc/freedmr/freedmr.cfg ... cat << EOF > /etc/freedmr/freedmr.cfg @@ -70,21 +63,21 @@ REPORT_PORT: 4321 REPORT_CLIENTS: * [LOGGER] -LOG_FILE: freedmr.log +LOG_FILE: log/freedmr.log LOG_HANDLERS: file-timed LOG_LEVEL: INFO LOG_NAME: FreeDMR [ALIASES] -TRY_DOWNLOAD: False -PATH: ./ +TRY_DOWNLOAD: True +PATH: ./json/ PEER_FILE: peer_ids.json SUBSCRIBER_FILE: subscriber_ids.json TGID_FILE: talkgroup_ids.json PEER_URL: https://www.radioid.net/static/rptrs.json SUBSCRIBER_URL: http://downloads.freedmr.uk/downloads/local_subscriber_ids.json -TGID_URL: TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json -STALE_DAYS: 7 +TGID_URL: TGID_URL: https://freedmr.cymru/talkgroups/talkgroup_ids_json.php +STALE_DAYS: 1 LOCAL_SUBSCRIBER_FILE: local_subcriber_ids.json SUB_MAP_FILE: sub_map.pkl diff --git a/hblink.py b/hblink.py index 2fed0cc..d2a4a52 100755 --- a/hblink.py +++ b/hblink.py @@ -769,6 +769,8 @@ class HBSYSTEM(DatagramProtocol): remove_list.append(peer) for peer in remove_list: logger.info('(%s) Peer %s (%s) has timed out and is being removed', self._system, self._peers[peer]['CALLSIGN'], self._peers[peer]['RADIO_ID']) + #First, MSTCL the peer + self.transport.write(b''.join([MSTCL, peer]),self._CONFIG['SYSTEMS'][self._system]['PEERS'][peer]['SOCKADDR']) # Remove any timed out peers from the configuration del self._CONFIG['SYSTEMS'][self._system]['PEERS'][peer] if 'PEERS' not in self._CONFIG['SYSTEMS'][self._system] and 'OPTIONS' in self._CONFIG['SYSTEMS'][self._system]: @@ -1385,12 +1387,13 @@ def try_download(_path, _file, _url, _stale,): result = 'ID ALIAS MAPPER: \'{}\' successfully downloaded'.format(_file) except IOError: result = 'ID ALIAS MAPPER: \'{}\' could not be downloaded due to an IOError'.format(_file) - try: - with open(_path+_file, 'wb') as outfile: - outfile.write(data) - outfile.close() - except IOError: - result = 'ID ALIAS mapper \'{}\' file could not be written due to an IOError'.format(_file) + else: + try: + with open(_path+_file, 'wb') as outfile: + outfile.write(data) + outfile.close() + except IOError: + result = 'ID ALIAS mapper \'{}\' file could not be written due to an IOError'.format(_file) else: result = 'ID ALIAS MAPPER: \'{}\' is current, not downloaded'.format(_file) diff --git a/hotspot_proxy_v2.py b/hotspot_proxy_v2.py index 6a8aa4e..d1e1efb 100644 --- a/hotspot_proxy_v2.py +++ b/hotspot_proxy_v2.py @@ -71,6 +71,10 @@ class Proxy(DatagramProtocol): if self.clientinfo and _peer_id != b'\xff\xff\xff\xff': print(f"{datetime.now().replace(microsecond=0)} Client: ID:{str(int_id(_peer_id)).rjust(9)} IP:{self.peerTrack[_peer_id]['shost'].rjust(15)} Port:{self.peerTrack[_peer_id]['sport']} Removed.") self.transport.write(b'RPTCL'+_peer_id, (self.master,self.peerTrack[_peer_id]['dport'])) + #Tell client we have closed the session - 3 times, in case they are on a lossy network + self.transport.write(b'MSTCL',(self.peerTrack[_peer_id]['shost'],self.peerTrack[_peer_id]['sport'])) + self.transport.write(b'MSTCL',(self.peerTrack[_peer_id]['shost'],self.peerTrack[_peer_id]['sport'])) + self.transport.write(b'MSTCL',(self.peerTrack[_peer_id]['shost'],self.peerTrack[_peer_id]['sport'])) self.connTrack[self.peerTrack[_peer_id]['dport']] = False del self.peerTrack[_peer_id]