save progress, attempt fix of tg page, still WIP, mark code for rule download, add mechanism to track rule download
This commit is contained in:
parent
3c461363a4
commit
b7b29a4402
23
bridge.py
23
bridge.py
@ -297,7 +297,8 @@ def hotspot_proxy(listen_port, port_start, port_stop):
|
||||
statsa = stats_task.start(30)
|
||||
statsa.addErrback(loopingErrHandle)
|
||||
|
||||
# Module gobal varaibles
|
||||
# Used to track if we have downloaded user custon rules
|
||||
user_rules = {}
|
||||
|
||||
# Dictionary for dynamically mapping unit (subscriber) to a system.
|
||||
# This is for pruning unit-to-uint calls to not broadcast once the
|
||||
@ -824,7 +825,6 @@ class routerOBP(OPENBRIDGE):
|
||||
|
||||
|
||||
class routerHBP(HBSYSTEM):
|
||||
|
||||
def __init__(self, _name, _config, _report):
|
||||
HBSYSTEM.__init__(self, _name, _config, _report)
|
||||
## print(_config)
|
||||
@ -890,15 +890,12 @@ class routerHBP(HBSYSTEM):
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def group_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data):
|
||||
global UNIT_MAP
|
||||
pkt_time = time()
|
||||
dmrpkt = _data[20:53]
|
||||
_bits = _data[15]
|
||||
|
||||
|
||||
# Make/update an entry in the UNIT_MAP for this subscriber
|
||||
UNIT_MAP[_rf_src] = (self.name, pkt_time)
|
||||
|
||||
@ -924,11 +921,22 @@ class routerHBP(HBSYSTEM):
|
||||
# just make a new one from the HBP header. This is good enough, and it saves lots of time
|
||||
else:
|
||||
self.STATUS[_slot]['RX_LC'] = LC_OPT + _dst_id + _rf_src
|
||||
|
||||
# Download rules
|
||||
if _rf_src not in user_rules:
|
||||
user_rules[_rf_src] = self.name
|
||||
if _rf_src in user_rules:
|
||||
print('in')
|
||||
if user_rules[_rf_src] != self.name:
|
||||
user_rules[_rf_src] = self.name
|
||||
print('updated')
|
||||
print(user_rules)
|
||||
for _bridge in BRIDGES:
|
||||
## print(BRIDGES)
|
||||
print(_bridge)
|
||||
# Match bridge name here
|
||||
for _system in BRIDGES[_bridge]:
|
||||
|
||||
print(_system)
|
||||
# Modify rule here for indiv system
|
||||
if (_system['SYSTEM'] == self._system and _system['TGID'] == _dst_id and _system['TS'] == _slot and _system['ACTIVE'] == True):
|
||||
|
||||
for _target in BRIDGES[_bridge]:
|
||||
@ -1299,7 +1307,6 @@ class routerHBP(HBSYSTEM):
|
||||
self.STATUS[_slot]['RX_TIME'] = pkt_time
|
||||
self.STATUS[_slot]['RX_STREAM_ID'] = _stream_id
|
||||
|
||||
|
||||
def dmrd_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data):
|
||||
if _call_type == 'group':
|
||||
self.group_received(_peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data)
|
||||
|
14
hblink.py
14
hblink.py
@ -595,17 +595,17 @@ class HBSYSTEM(DatagramProtocol):
|
||||
if self._config['USE_USER_MAN'] == False:
|
||||
_calc_hash = bhex(sha256(_salt_str+self._config['PASSPHRASE']).hexdigest())
|
||||
# Uncomment below to only accept calculated passphrase
|
||||
# if _sent_hash == _calc_hash:
|
||||
if _sent_hash == _calc_hash:
|
||||
# Condition below accepts either calculated passphrase or config passphrase
|
||||
if _sent_hash == _calc_hash or _sent_hash == _ocalc_hash:
|
||||
## if _sent_hash == _calc_hash or _sent_hash == _ocalc_hash:
|
||||
_this_peer['CONNECTION'] = 'WAITING_CONFIG'
|
||||
self.send_peer(_peer_id, b''.join([RPTACK, _peer_id]))
|
||||
logger.info('(%s) Peer %s has completed the login exchange successfully', self._system, _this_peer['RADIO_ID'])
|
||||
#self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False)
|
||||
if _sent_hash == _ocalc_hash:
|
||||
self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], True)
|
||||
else:
|
||||
self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False)
|
||||
self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False)
|
||||
## if _sent_hash == _ocalc_hash:
|
||||
## self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], True)
|
||||
## else:
|
||||
## self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False)
|
||||
else:
|
||||
logger.info('(%s) Peer %s has FAILED the login exchange successfully', self._system, _this_peer['RADIO_ID'])
|
||||
self.transport.write(b''.join([MSTNAK, _peer_id]), _sockaddr)
|
||||
|
@ -385,6 +385,52 @@ def create_app():
|
||||
description = db.Column(db.String(100), nullable=False, server_default='')
|
||||
public_list = db.Column(db.Boolean(), nullable=False, server_default='0')
|
||||
tg = db.Column(db.Integer(), primary_key=False)
|
||||
|
||||
class GPS_LocLog(db.Model):
|
||||
__tablename__ = 'gps_locations'
|
||||
id = db.Column(db.Integer(), primary_key=True)
|
||||
callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
comment = db.Column(db.String(100), nullable=False, server_default='')
|
||||
lat = db.Column(db.String(100), nullable=False, server_default='')
|
||||
lon = db.Column(db.String(100), nullable=False, server_default='')
|
||||
time = db.Column(db.DateTime())
|
||||
server = db.Column(db.String(100), nullable=False, server_default='')
|
||||
system_name = db.Column(db.String(100), nullable=False, server_default='')
|
||||
dmr_id = db.Column(db.Integer(), primary_key=False)
|
||||
|
||||
class BulletinBoard(db.Model):
|
||||
__tablename__ = 'sms_bb'
|
||||
id = db.Column(db.Integer(), primary_key=True)
|
||||
callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
bulletin = db.Column(db.String(100), nullable=False, server_default='')
|
||||
time = db.Column(db.DateTime())
|
||||
server = db.Column(db.String(100), nullable=False, server_default='')
|
||||
system_name = db.Column(db.String(100), nullable=False, server_default='')
|
||||
dmr_id = db.Column(db.Integer(), primary_key=False)
|
||||
|
||||
class SMSLog(db.Model):
|
||||
__tablename__ = 'sms_log'
|
||||
id = db.Column(db.Integer(), primary_key=True)
|
||||
snd_callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
rcv_callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
message = db.Column(db.String(100), nullable=False, server_default='')
|
||||
time = db.Column(db.DateTime())
|
||||
server = db.Column(db.String(100), nullable=False, server_default='')
|
||||
system_name = db.Column(db.String(100), nullable=False, server_default='')
|
||||
snd_id = db.Column(db.Integer(), primary_key=False)
|
||||
rcv_id = db.Column(db.Integer(), primary_key=False)
|
||||
|
||||
class MailBox(db.Model):
|
||||
__tablename__ = 'sms_aprs_mailbox'
|
||||
id = db.Column(db.Integer(), primary_key=True)
|
||||
snd_callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
rcv_callsign = db.Column(db.String(100), nullable=False, server_default='')
|
||||
message = db.Column(db.String(100), nullable=False, server_default='')
|
||||
time = db.Column(db.DateTime())
|
||||
server = db.Column(db.String(100), nullable=False, server_default='')
|
||||
system_name = db.Column(db.String(100), nullable=False, server_default='')
|
||||
snd_id = db.Column(db.Integer(), primary_key=False)
|
||||
rcv_id = db.Column(db.Integer(), primary_key=False)
|
||||
|
||||
|
||||
|
||||
@ -1489,21 +1535,37 @@ def create_app():
|
||||
sl = ServerList.query.all()
|
||||
user_ids = ast.literal_eval(u.dmr_ids)
|
||||
content = '<p style="text-align: center;">Currently active talkgroups. Updated every 2 minutes.</p>'
|
||||
## print(active_tgs)
|
||||
for s in sl:
|
||||
for i in user_ids.items():
|
||||
for ts in active_tgs.items():
|
||||
for x in ts[1]:
|
||||
print(x)
|
||||
print(s.name)
|
||||
## print(active_tgs[s.name])
|
||||
## print(str(active_tgs[ts[1]]))
|
||||
# Remove 0 from TG list
|
||||
for ts in active_tgs[s.name].items():
|
||||
## print(ts)
|
||||
## print(ts[1][3]['peer_id'])
|
||||
if i[0] == ts[1][3]['peer_id']:
|
||||
## print(i[0])
|
||||
print(ts)
|
||||
## if i[0] in active_tgs[s.name]:
|
||||
## for x in ts[1]:
|
||||
## print(x)
|
||||
## ## if i[0] != ts[1][x][3]['peer_id']:
|
||||
## ## print('nope')
|
||||
## ## pass
|
||||
## ## elif i[0] == ts[1][x][3]['peer_id']:
|
||||
## ## print(x)
|
||||
## ## print(s.name)
|
||||
## ## print('-----ts-----')
|
||||
## ## print(ts[1][x][3]['peer_id']) #[s.name][3]['peer_id'])
|
||||
## ## print(active_tgs)
|
||||
##
|
||||
## ## print(active_tgs[s.name])
|
||||
## ## print(str(active_tgs[ts[1]]))
|
||||
## # Remove 0 from TG list
|
||||
try:
|
||||
active_tgs[s.name][x][0]['1'].remove(0)
|
||||
active_tgs[s.name][x][1]['2'].remove(0)
|
||||
active_tgs[s.name][ts[0]][0]['1'].remove(0)
|
||||
active_tgs[s.name][ts[0]][1]['2'].remove(0)
|
||||
except:
|
||||
pass
|
||||
## try:
|
||||
#### try:
|
||||
content = content + ''' <table style="width: 500px; margin-left: auto; margin-right: auto;" border="1">
|
||||
<tbody>
|
||||
<tr>
|
||||
@ -1518,11 +1580,11 @@ def create_app():
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 85.7px;"><strong>Timeslot 1</strong></td>
|
||||
<td style="width: 377.3px;"> ''' + str(active_tgs[s.name][x][0]['1'])[1:-1] + '''</td>
|
||||
<td style="width: 377.3px;"> ''' + str(active_tgs[s.name][ts[0]][0]['1'])[1:-1] + '''</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 85.7px;"><strong>Timeslot 2</strong></td>
|
||||
<td style="width: 377.3px;"> ''' + str(active_tgs[s.name][x][1]['2'])[1:-1] + '''</td>
|
||||
<td style="width: 377.3px;"> ''' + str(active_tgs[s.name][ts[0]][1]['2'])[1:-1] + '''</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -1539,7 +1601,7 @@ def create_app():
|
||||
## content = content + '''<td style="width: 377.3px;"> ''' + str(tg) + '''</td>
|
||||
##'''
|
||||
## print(active_tgs[s.name][i[0]])
|
||||
#### content = active_tgs[s.name][i[0]][1]['2']
|
||||
## content = active_tgs[s.name][i[0]][1]['2']
|
||||
## content = 'hji'
|
||||
|
||||
return render_template('flask_user_layout.html', markup_content = Markup(content))
|
||||
@ -2634,14 +2696,7 @@ def create_app():
|
||||
<td style="width: 16.0381%;"><strong> Unit Call Timeout (minutes):</strong></td>
|
||||
<td style="width: 78.7895%;"> <input name="unit_time" type="text" value="''' + str(s.unit_time) + '''"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public list:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option selected="selected" value="''' + str(s.public_list) + '''">Current: ''' + str(s.public_list) + '''</option>
|
||||
<option value="False">False</option>
|
||||
<option value="True">True</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><strong> Notes:</strong></td>
|
||||
<td> <textarea id="notes" cols="50" name="notes" rows="4">''' + str(s.notes) + '''</textarea></td>
|
||||
@ -2837,13 +2892,7 @@ def create_app():
|
||||
<td style="width: 16.0381%;"><strong> Unit Call Timeout (minutes):</strong></td>
|
||||
<td style="width: 78.7895%;"> <input name="unit_time" type="text" value="10080"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public list:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option selected="selected" value="True">True</option>
|
||||
<option value="False">False</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><strong> Notes:</strong></td>
|
||||
<td> <textarea id="notes" cols="50" name="notes" rows="4"></textarea></td>
|
||||
@ -3853,6 +3902,14 @@ def create_app():
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public List:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option selected="selected" value="''' + str(p.public_list) + '''">Current - ''' + str(p.public_list) + '''</option>
|
||||
<option value="True">True</option>
|
||||
<option value="False">False</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 189.383px;"><strong> Notes:</strong></td>
|
||||
<td style="width: 392.617px;"> <textarea id="notes" cols="50" name="notes" rows="4">''' + str(p.notes) + '''</textarea></td>
|
||||
</tr>
|
||||
@ -3975,6 +4032,13 @@ def create_app():
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public List:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option value="True">True</option>
|
||||
<option value="False">False</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 189.383px;"><strong> Notes:</strong></td>
|
||||
<td style="width: 392.617px;"> <textarea id="notes" cols="50" name="notes" rows="4"></textarea></td>
|
||||
</tr>
|
||||
@ -4086,6 +4150,13 @@ def create_app():
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public List:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option value="True">True</option>
|
||||
<option value="False">False</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Notes:</strong></td>
|
||||
<td> <textarea id="notes" cols="50" name="notes" rows="4"></textarea></td>
|
||||
</tr>
|
||||
@ -4289,6 +4360,14 @@ def create_app():
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Public List:</strong></td>
|
||||
<td> <select name="public_list">
|
||||
<option selected="selected" value="''' + str(m.public_list) + '''">Current - ''' + str(m.public_list) + '''</option>
|
||||
<option value="True">True</option>
|
||||
<option value="False">False</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong> Notes:</strong></td>
|
||||
<td> <textarea id="notes" cols="50" name="notes" rows="4">''' + str(m.notes) + '''</textarea></td>
|
||||
</tr>
|
||||
@ -4803,20 +4882,24 @@ def create_app():
|
||||
if 'login_id' in hblink_req and 'login_confirmed' not in hblink_req:
|
||||
if type(hblink_req['login_id']) == int:
|
||||
if authorized_peer(hblink_req['login_id'])[0]:
|
||||
print(active_tgs)
|
||||
if isinstance(authorized_peer(hblink_req['login_id'])[1], int) == True:
|
||||
authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], gen_passphrase(hblink_req['login_id']), 'Attempt')
|
||||
## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}]
|
||||
response = jsonify(
|
||||
allow=True,
|
||||
mode='normal',
|
||||
)
|
||||
elif authorized_peer(hblink_req['login_id'])[1] == '':
|
||||
authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], 'Config Passphrase: ' + legacy_passphrase, 'Attempt')
|
||||
## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}]
|
||||
response = jsonify(
|
||||
allow=True,
|
||||
mode='legacy',
|
||||
)
|
||||
elif authorized_peer(hblink_req['login_id'])[1] != '' or isinstance(authorized_peer(hblink_req['login_id'])[1], int) == False:
|
||||
authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], 'Attempt')
|
||||
## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}]
|
||||
# print(authorized_peer(hblink_req['login_id']))
|
||||
response = jsonify(
|
||||
allow=True,
|
||||
@ -4827,7 +4910,7 @@ def create_app():
|
||||
active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}]
|
||||
## print('Restart ' + hblink_req['login_server'] + ' please.')
|
||||
except:
|
||||
active_tgs[hblink_req['login_server']] = {}
|
||||
## active_tgs[hblink_req['login_server']] = {}
|
||||
pass
|
||||
elif authorized_peer(hblink_req['login_id'])[0] == False:
|
||||
## print('log fail')
|
||||
@ -4929,16 +5012,21 @@ def create_app():
|
||||
else:
|
||||
active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2'].append(hblink_req['data'][2]['tg'])
|
||||
else:
|
||||
try:
|
||||
print('---------on------------')
|
||||
print(hblink_req['data'])
|
||||
print(active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2'])
|
||||
print(active_tgs[hblink_req['update_tg']])
|
||||
print(hblink_req['data'][2]['ts2'])
|
||||
print('-----------------------')
|
||||
## active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM']
|
||||
#### active_tgs[hblink_req['update_tg']][hblink_req['dmr_id']].update({hblink_req['data'][0]['SYSTEM']: [{1:[hblink_req['data'][1]['ts1']]}, {2:[hblink_req['data'][2]['ts2']]}]}) #.update({[hblink_req['dmr_id']]:hblink_req['data']})
|
||||
if hblink_req['data'][1]['ts1'] not in active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][0]['1']:
|
||||
active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][0]['1'].append(hblink_req['data'][1]['ts1'])
|
||||
active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM']
|
||||
if hblink_req['data'][2]['ts2'] not in active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2']:
|
||||
print('---0---')
|
||||
print(hblink_req['data'][0]['SYSTEM'])
|
||||
active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM']
|
||||
active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2'].append(hblink_req['data'][2]['ts2'])
|
||||
## print('append')
|
||||
#### active_tgs[hblink_req['update_tg']][system[0]][1]['2'].append(0)
|
||||
@ -4948,6 +5036,9 @@ def create_app():
|
||||
## print(active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['2'])
|
||||
## print(hblink_req['data'][1]['ts2'])
|
||||
## print(active_tgs[hblink_req['update_tg']])
|
||||
except:
|
||||
## active_tgs[hblink_req['update_tg']] = {}
|
||||
pass
|
||||
|
||||
## except:
|
||||
## pass
|
||||
|
Loading…
Reference in New Issue
Block a user