diff --git a/bridge.py b/bridge.py index 91ae299..4569c16 100755 --- a/bridge.py +++ b/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) diff --git a/hblink.py b/hblink.py index 50fb44d..e751712 100755 --- a/hblink.py +++ b/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) diff --git a/user_managment/app.py b/user_managment/app.py index 5cabd09..d4664da 100644 --- a/user_managment/app.py +++ b/user_managment/app.py @@ -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 = '
Currently active talkgroups. Updated every 2 minutes.
' +## 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 + '''Timeslot 1 | -''' + str(active_tgs[s.name][x][0]['1'])[1:-1] + ''' | +''' + str(active_tgs[s.name][ts[0]][0]['1'])[1:-1] + ''' |
Timeslot 2 | -''' + str(active_tgs[s.name][x][1]['2'])[1:-1] + ''' | +''' + str(active_tgs[s.name][ts[0]][1]['2'])[1:-1] + ''' |