possible fix for unsafe access in make_status_png

This commit is contained in:
Max 2021-02-14 11:56:45 -05:00
parent ed3334ca6c
commit 18c1cc0a54
2 changed files with 25 additions and 22 deletions

View File

@ -70,8 +70,6 @@ from gr_gnuplot import setup_correlation
from terminal import op25_terminal from terminal import op25_terminal
from sockaudio import audio_thread from sockaudio import audio_thread
from create_image import create_image
#speeds = [300, 600, 900, 1200, 1440, 1800, 1920, 2400, 2880, 3200, 3600, 3840, 4000, 4800, 6000, 6400, 7200, 8000, 9600, 14400, 19200] #speeds = [300, 600, 900, 1200, 1440, 1800, 1920, 2400, 2880, 3200, 3600, 3840, 4000, 4800, 6000, 6400, 7200, 8000, 9600, 14400, 19200]
speeds = [4800, 6000] speeds = [4800, 6000]
@ -679,23 +677,6 @@ class p25_rx_block (gr.top_block):
msg = gr.message().make_from_string(json.dumps(d), -4, 0, 0) msg = gr.message().make_from_string(json.dumps(d), -4, 0, 0)
self.input_q.insert_tail(msg) self.input_q.insert_tail(msg)
def make_status_png(self):
PNG_UPDATE_INTERVAL = 1.0
output_file = '../www/images/status.png'
tmp_output_file = '../www/images/tmp-status.png'
if time.time() < self.next_status_png:
return
self.next_status_png = time.time() + PNG_UPDATE_INTERVAL
if self.trunk_rx is None:
return ## possible race cond - just ignore
status_str = 'OP25-hls hacks (c) Copyright 2020, KA1RBI\n'
status_str += 'F %f TG %s %s at %s\n' % ( self.last_freq_params['freq'] / 1000000.0, self.last_freq_params['tgid'], self.last_freq_params['tag'], time.asctime())
status_str += self.trunk_rx.to_string()
status = status_str.split('\n')
status = [s for s in status if not s.startswith('tbl-id')]
create_image(status, imgfile=tmp_output_file, bgcolor="#c0c0c0", windowsize=(640,480))
os.rename(tmp_output_file, output_file)
def process_qmsg(self, msg): def process_qmsg(self, msg):
# return true = end top block # return true = end top block
RX_COMMANDS = 'skip lockout hold'.split() RX_COMMANDS = 'skip lockout hold'.split()
@ -716,7 +697,6 @@ class p25_rx_block (gr.top_block):
msg = gr.message().make_from_string(js, -4, 0, 0) msg = gr.message().make_from_string(js, -4, 0, 0)
self.input_q.insert_tail(msg) self.input_q.insert_tail(msg)
self.process_ajax() self.process_ajax()
self.make_status_png()
elif s == 'set_freq': elif s == 'set_freq':
freq = msg.arg1() freq = msg.arg1()
self.last_freq_params['freq'] = freq self.last_freq_params['freq'] = freq

View File

@ -21,12 +21,14 @@
# #
import sys import sys
import os
import time import time
import collections import collections
import json import json
sys.path.append('tdma') sys.path.append('tdma')
import lfsr import lfsr
from tsvfile import make_config, load_tsv from tsvfile import make_config, load_tsv
from create_image import create_image
def crc16(dat,len): # slow version def crc16(dat,len): # slow version
poly = (1<<12) + (1<<5) + (1<<0) poly = (1<<12) + (1<<5) + (1<<0)
@ -610,6 +612,8 @@ class rx_ctl (object):
if self.logfile_workers: if self.logfile_workers:
self.input_rate = self.logfile_workers[0]['demod'].input_rate self.input_rate = self.logfile_workers[0]['demod'].input_rate
self.enabled_nacs = None self.enabled_nacs = None
self.next_status_png = time.time()
self.last_freq_params = {'freq' : 0.0, 'tgid' : None, 'tag' : "", 'tdma' : None}
if conf_file: if conf_file:
if conf_file.endswith('.tsv'): if conf_file.endswith('.tsv'):
@ -753,6 +757,21 @@ class rx_ctl (object):
'hold_mode': self.hold_mode} 'hold_mode': self.hold_mode}
return json.dumps(d) return json.dumps(d)
def make_status_png(self):
PNG_UPDATE_INTERVAL = 1.0
output_file = '../www/images/status.png'
tmp_output_file = '../www/images/tmp-status.png'
if time.time() < self.next_status_png:
return
self.next_status_png = time.time() + PNG_UPDATE_INTERVAL
status_str = 'OP25-hls hacks (c) Copyright 2020, 2021, KA1RBI\n'
status_str += 'F %f TG %s %s at %s\n' % ( self.last_freq_params['freq'] / 1000000.0, self.last_freq_params['tgid'], self.last_freq_params['tag'], time.asctime())
status_str += self.to_string()
status = status_str.split('\n')
status = [s for s in status if not s.startswith('tbl-id')]
create_image(status, imgfile=tmp_output_file, bgcolor="#c0c0c0", windowsize=(640,480))
os.rename(tmp_output_file, output_file)
def dump_tgids(self): def dump_tgids(self):
for nac in self.trunked_systems.keys(): for nac in self.trunked_systems.keys():
self.trunked_systems[nac].dump_tgids() self.trunked_systems[nac].dump_tgids()
@ -843,6 +862,8 @@ class rx_ctl (object):
sys.stderr.write('type %d at %f state %d len %d/%d opcode %x [%x/%x]\n' %(mtype, time.time(), self.current_state, len(s1), len(s2), opcode, header,mbt_data)) sys.stderr.write('type %d at %f state %d len %d/%d opcode %x [%x/%x]\n' %(mtype, time.time(), self.current_state, len(s1), len(s2), opcode, header,mbt_data))
updated += self.trunked_systems[nac].decode_mbt_data(opcode, src, header << 16, mbt_data << 32) updated += self.trunked_systems[nac].decode_mbt_data(opcode, src, header << 16, mbt_data << 32)
self.make_status_png()
if nac != self.current_nac: if nac != self.current_nac:
if self.debug > 10: # this is occasionally expected if cycling between different tsys if self.debug > 10: # this is occasionally expected if cycling between different tsys
cnac = self.current_nac cnac = self.current_nac
@ -1151,7 +1172,7 @@ class rx_ctl (object):
self.current_tgid = None self.current_tgid = None
if new_frequency is not None: if new_frequency is not None:
self.set_frequency({ params = {
'freq': new_frequency, 'freq': new_frequency,
'tgid': self.current_tgid, 'tgid': self.current_tgid,
'offset': tsys.offset, 'offset': tsys.offset,
@ -1166,7 +1187,9 @@ class rx_ctl (object):
'grpaddr': tsys.current_grpaddr, 'grpaddr': tsys.current_grpaddr,
'alg': tsys.current_alg, 'alg': tsys.current_alg,
'algid': tsys.current_algid, 'algid': tsys.current_algid,
'keyid': tsys.current_keyid }) 'keyid': tsys.current_keyid }
self.last_freq_params = params
self.set_frequency(params)
if new_state is not None: if new_state is not None:
self.current_state = new_state self.current_state = new_state