continue work on hotspot proxy
This commit is contained in:
parent
0698417682
commit
4343677843
@ -305,6 +305,8 @@ TGID_TS2_ACL: PERMIT:ALL
|
|||||||
# Utilizing the hotspot proxy from FreeDMR
|
# Utilizing the hotspot proxy from FreeDMR
|
||||||
[PROXY_TEMPLATE]
|
[PROXY_TEMPLATE]
|
||||||
ENABLED: True
|
ENABLED: True
|
||||||
|
# Name that generated systems begin with
|
||||||
|
NAME: HOTSPOT
|
||||||
# Port that clients will connect on.
|
# Port that clients will connect on.
|
||||||
EXTERNAL_PORT: 62032
|
EXTERNAL_PORT: 62032
|
||||||
|
|
||||||
@ -312,6 +314,18 @@ EXTERNAL_PORT: 62032
|
|||||||
INTERNAL_PORT_START: 54000
|
INTERNAL_PORT_START: 54000
|
||||||
INTERNAL_PORT_STOP: 54010
|
INTERNAL_PORT_STOP: 54010
|
||||||
|
|
||||||
|
### Utilizing the hotspot proxy from FreeDMR
|
||||||
|
##[PROXY_TEMPLATE_2]
|
||||||
|
##ENABLED: True
|
||||||
|
### Name that generated systems begin with
|
||||||
|
##NAME: REPEATER
|
||||||
|
### Port that clients will connect on.
|
||||||
|
##EXTERNAL_PORT: 62032
|
||||||
|
##
|
||||||
|
### Internal ports used for generated master instances.
|
||||||
|
##INTERNAL_PORT_START: 54000
|
||||||
|
##INTERNAL_PORT_STOP: 54010
|
||||||
|
|
||||||
STATIC_APRS_POSITION_ENABLED: False
|
STATIC_APRS_POSITION_ENABLED: False
|
||||||
REPEAT: True
|
REPEAT: True
|
||||||
PASSPHRASE: password
|
PASSPHRASE: password
|
||||||
|
113
full_bridge.py
113
full_bridge.py
@ -106,6 +106,9 @@ import requests
|
|||||||
import json
|
import json
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
|
# Hotspot Proxy stuff
|
||||||
|
from hotspot_proxy_v2 import Proxy
|
||||||
|
|
||||||
# Does anybody read this stuff? There's a PEP somewhere that says I should do this.
|
# Does anybody read this stuff? There's a PEP somewhere that says I should do this.
|
||||||
__author__ = 'Cortney T. Buffington, N0MJS, Eric Craw, KF7EEL'
|
__author__ = 'Cortney T. Buffington, N0MJS, Eric Craw, KF7EEL'
|
||||||
__copyright__ = 'Copyright (c) 2016-2019 Cortney T. Buffington, N0MJS and the K0USY Group'
|
__copyright__ = 'Copyright (c) 2016-2019 Cortney T. Buffington, N0MJS and the K0USY Group'
|
||||||
@ -957,6 +960,51 @@ def aprs_beacon_send():
|
|||||||
beacon_packet = CONFIG['GPS_DATA']['APRS_LOGIN_CALL'] + '>APHBL3,TCPIP*:!' + CONFIG['GPS_DATA']['IGATE_LATITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][0]) + CONFIG['GPS_DATA']['IGATE_LONGITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][1]) + '/' + CONFIG['GPS_DATA']['IGATE_BEACON_COMMENT']
|
beacon_packet = CONFIG['GPS_DATA']['APRS_LOGIN_CALL'] + '>APHBL3,TCPIP*:!' + CONFIG['GPS_DATA']['IGATE_LATITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][0]) + CONFIG['GPS_DATA']['IGATE_LONGITUDE'] + str(CONFIG['GPS_DATA']['IGATE_BEACON_ICON'][1]) + '/' + CONFIG['GPS_DATA']['IGATE_BEACON_COMMENT']
|
||||||
aprs_send(beacon_packet)
|
aprs_send(beacon_packet)
|
||||||
logger.info(beacon_packet)
|
logger.info(beacon_packet)
|
||||||
|
|
||||||
|
def hotspot_proxy(listen_port, port_start, port_stop):
|
||||||
|
Master = "127.0.0.1"
|
||||||
|
ListenPort = listen_port
|
||||||
|
DestportStart = port_start
|
||||||
|
DestPortEnd = port_stop
|
||||||
|
Timeout = 30
|
||||||
|
Stats = True
|
||||||
|
Debug = True
|
||||||
|
BlackList = [1234567]
|
||||||
|
|
||||||
|
|
||||||
|
CONNTRACK = {}
|
||||||
|
|
||||||
|
for port in range(DestportStart,DestPortEnd+1,1):
|
||||||
|
CONNTRACK[port] = False
|
||||||
|
|
||||||
|
|
||||||
|
reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,BlackList,Timeout,Debug,DestportStart,DestPortEnd))
|
||||||
|
|
||||||
|
def loopingErrHandle(failure):
|
||||||
|
print('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure))
|
||||||
|
reactor.stop()
|
||||||
|
|
||||||
|
def stats():
|
||||||
|
count = 0
|
||||||
|
nowtime = time()
|
||||||
|
for port in CONNTRACK:
|
||||||
|
if CONNTRACK[port]:
|
||||||
|
count = count+1
|
||||||
|
|
||||||
|
totalPorts = DestPortEnd - DestportStart
|
||||||
|
freePorts = totalPorts - count
|
||||||
|
|
||||||
|
print("{} ports out of {} in use ({} free)".format(count,totalPorts,freePorts))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if Stats == True:
|
||||||
|
stats_task = task.LoopingCall(stats)
|
||||||
|
statsa = stats_task.start(30)
|
||||||
|
statsa.addErrback(loopingErrHandle)
|
||||||
|
#reactor.run()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### APRS Static positions - by IU7IGU
|
### APRS Static positions - by IU7IGU
|
||||||
##def sendAprs():
|
##def sendAprs():
|
||||||
@ -2824,30 +2872,30 @@ if __name__ == '__main__':
|
|||||||
# HBlink instance creation
|
# HBlink instance creation
|
||||||
logger.info('(GLOBAL) HBlink \'bridge.py\' -- SYSTEM STARTING...')
|
logger.info('(GLOBAL) HBlink \'bridge.py\' -- SYSTEM STARTING...')
|
||||||
# Generates a series of MASTER instances for use with hotspot proxy from FreeDMR
|
# Generates a series of MASTER instances for use with hotspot proxy from FreeDMR
|
||||||
def generate_proxy_masters():
|
## def generate_proxy_masters():
|
||||||
n_systems = CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_START']
|
## n_systems = CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_START']
|
||||||
n_count = 0
|
## n_count = 0
|
||||||
while n_count < n_systems:
|
## while n_count < n_systems:
|
||||||
|
##
|
||||||
CONFIG['SYSTEMS'].update({'MMDVM-' + str(n_count): {
|
## CONFIG['SYSTEMS'].update({'MMDVM-' + str(n_count): {
|
||||||
'MODE': 'MASTER',
|
## 'MODE': 'MASTER',
|
||||||
'ENABLED': True,
|
## 'ENABLED': True,
|
||||||
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_TEMPLATE']['STATIC_APRS_POSITION_ENABLED'],
|
## 'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_TEMPLATE']['STATIC_APRS_POSITION_ENABLED'],
|
||||||
'REPEAT': CONFIG['PROXY_TEMPLATE']['REPEAT'],
|
## 'REPEAT': CONFIG['PROXY_TEMPLATE']['REPEAT'],
|
||||||
'MAX_PEERS': 1,
|
## 'MAX_PEERS': 1,
|
||||||
'IP': '127.0.0.1',
|
## 'IP': '127.0.0.1',
|
||||||
'PORT': CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_START'] + n_count,
|
## 'PORT': CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_START'] + n_count,
|
||||||
'PASSPHRASE': CONFIG['PROXY_TEMPLATE']['PASSPHRASE'],
|
## 'PASSPHRASE': CONFIG['PROXY_TEMPLATE']['PASSPHRASE'],
|
||||||
'GROUP_HANGTIME': CONFIG['PROXY_TEMPLATE']['GROUP_HANGTIME'],
|
## 'GROUP_HANGTIME': CONFIG['PROXY_TEMPLATE']['GROUP_HANGTIME'],
|
||||||
'USE_ACL': CONFIG['PROXY_TEMPLATE']['USE_ACL'],
|
## 'USE_ACL': CONFIG['PROXY_TEMPLATE']['USE_ACL'],
|
||||||
'REG_ACL': CONFIG['PROXY_TEMPLATE']['REG_ACL'],
|
## 'REG_ACL': CONFIG['PROXY_TEMPLATE']['REG_ACL'],
|
||||||
'SUB_ACL': CONFIG['PROXY_TEMPLATE']['SUB_ACL'],
|
## 'SUB_ACL': CONFIG['PROXY_TEMPLATE']['SUB_ACL'],
|
||||||
'TG1_ACL': CONFIG['PROXY_TEMPLATE']['TG1_ACL'],
|
## 'TG1_ACL': CONFIG['PROXY_TEMPLATE']['TG1_ACL'],
|
||||||
'TG2_ACL': CONFIG['PROXY_TEMPLATE']['TG2_ACL']
|
## 'TG2_ACL': CONFIG['PROXY_TEMPLATE']['TG2_ACL']
|
||||||
}})
|
## }})
|
||||||
CONFIG['SYSTEMS']['MMDVM-' + str(n_count)].update({'PEERS': {}})
|
## CONFIG['SYSTEMS']['MMDVM-' + str(n_count)].update({'PEERS': {}})
|
||||||
systems['MMDVM-' + str(n_count)] = routerHBP(system, CONFIG, report_server)
|
## systems['MMDVM-' + str(n_count)] = routerHBP(system, CONFIG, report_server)
|
||||||
n_count = n_count + 1
|
## n_count = n_count + 1
|
||||||
|
|
||||||
if CONFIG['PROXY_TEMPLATE']['ENABLED']:
|
if CONFIG['PROXY_TEMPLATE']['ENABLED']:
|
||||||
#generate_proxy_masters()
|
#generate_proxy_masters()
|
||||||
@ -2855,7 +2903,7 @@ if __name__ == '__main__':
|
|||||||
n_count = 0
|
n_count = 0
|
||||||
while n_count < n_systems:
|
while n_count < n_systems:
|
||||||
|
|
||||||
CONFIG['SYSTEMS'].update({'MMDVM-' + str(n_count): {
|
CONFIG['SYSTEMS'].update({CONFIG['PROXY_TEMPLATE']['NAME'] + '-' + str(n_count): {
|
||||||
'MODE': 'MASTER',
|
'MODE': 'MASTER',
|
||||||
'ENABLED': True,
|
'ENABLED': True,
|
||||||
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_TEMPLATE']['STATIC_APRS_POSITION_ENABLED'],
|
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_TEMPLATE']['STATIC_APRS_POSITION_ENABLED'],
|
||||||
@ -2866,13 +2914,13 @@ if __name__ == '__main__':
|
|||||||
'PASSPHRASE': CONFIG['PROXY_TEMPLATE']['PASSPHRASE'],
|
'PASSPHRASE': CONFIG['PROXY_TEMPLATE']['PASSPHRASE'],
|
||||||
'GROUP_HANGTIME': CONFIG['PROXY_TEMPLATE']['GROUP_HANGTIME'],
|
'GROUP_HANGTIME': CONFIG['PROXY_TEMPLATE']['GROUP_HANGTIME'],
|
||||||
'USE_ACL': CONFIG['PROXY_TEMPLATE']['USE_ACL'],
|
'USE_ACL': CONFIG['PROXY_TEMPLATE']['USE_ACL'],
|
||||||
'REG_ACL': CONFIG['PROXY_TEMPLATE']['REG_ACL'],
|
'REG_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_TEMPLATE']['REG_ACL'], 4294967295),
|
||||||
'SUB_ACL': CONFIG['PROXY_TEMPLATE']['SUB_ACL'],
|
'SUB_ACL': CONFIG['PROXY_TEMPLATE']['SUB_ACL'],
|
||||||
'TG1_ACL': CONFIG['PROXY_TEMPLATE']['TG1_ACL'],
|
'TGID_TS1_ACL': CONFIG['PROXY_TEMPLATE']['TGID_TS1_ACL'],
|
||||||
'TG2_ACL': CONFIG['PROXY_TEMPLATE']['TG2_ACL']
|
'TGID_TS2_ACL': CONFIG['PROXY_TEMPLATE']['TGID_TS2_ACL']
|
||||||
}})
|
}})
|
||||||
CONFIG['SYSTEMS']['MMDVM-' + str(n_count)].update({'PEERS': {}})
|
CONFIG['SYSTEMS'][CONFIG['PROXY_TEMPLATE']['NAME'] + '-' + str(n_count)].update({'PEERS': {}})
|
||||||
systems['MMDVM-' + str(n_count)] = routerHBP('MMDVM-' + str(n_count), CONFIG, report_server)
|
systems[CONFIG['PROXY_TEMPLATE']['NAME'] + '-' + str(n_count)] = routerHBP(CONFIG['PROXY_TEMPLATE']['NAME'] + '-' + str(n_count), CONFIG, report_server)
|
||||||
n_count = n_count + 1
|
n_count = n_count + 1
|
||||||
|
|
||||||
for system in CONFIG['SYSTEMS']:
|
for system in CONFIG['SYSTEMS']:
|
||||||
@ -2918,5 +2966,10 @@ if __name__ == '__main__':
|
|||||||
aprs_thread.start()
|
aprs_thread.start()
|
||||||
# Create file for static positions - by IU7IGU
|
# Create file for static positions - by IU7IGU
|
||||||
## open("nom_aprs","w").close
|
## open("nom_aprs","w").close
|
||||||
|
# if CONFIG['PROXY_TEMPLATE']['ENABLED']:
|
||||||
|
# proxy_thread = threading.Thread(target=hotspot_proxy, args=(CONFIG['PROXY_TEMPLATE']['EXTERNAL_PORT'],CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_START'],CONFIG['PROXY_TEMPLATE']['INTERNAL_PORT_STOP'],))
|
||||||
|
# proxy_thread.daemon = True
|
||||||
|
# proxy_thread.start()
|
||||||
|
|
||||||
logger.info('Unit calls will be bridged to: ' + str(UNIT))
|
logger.info('Unit calls will be bridged to: ' + str(UNIT))
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
@ -94,7 +94,11 @@ def hblink_handler(_signal, _frame):
|
|||||||
# on matching and the action specified.
|
# on matching and the action specified.
|
||||||
def acl_check(_id, _acl):
|
def acl_check(_id, _acl):
|
||||||
id = int_id(_id)
|
id = int_id(_id)
|
||||||
|
print(type(_acl))
|
||||||
for entry in _acl[1]:
|
for entry in _acl[1]:
|
||||||
|
print(id)
|
||||||
|
print(entry)
|
||||||
|
#print(entry[1])
|
||||||
if entry[0] <= id <= entry[1]:
|
if entry[0] <= id <= entry[1]:
|
||||||
return _acl[0]
|
return _acl[0]
|
||||||
return not _acl[0]
|
return not _acl[0]
|
||||||
|
@ -68,6 +68,7 @@ class Proxy(DatagramProtocol):
|
|||||||
#If the packet comes from the master
|
#If the packet comes from the master
|
||||||
if host == self.master:
|
if host == self.master:
|
||||||
_command = data[:4]
|
_command = data[:4]
|
||||||
|
print(data)
|
||||||
|
|
||||||
if _command == DMRD:
|
if _command == DMRD:
|
||||||
_peer_id = data[11:15]
|
_peer_id = data[11:15]
|
||||||
@ -161,8 +162,8 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
Master = "127.0.0.1"
|
Master = "127.0.0.1"
|
||||||
ListenPort = 62031
|
ListenPort = 62031
|
||||||
DestportStart = 54000
|
DestportStart = 54100
|
||||||
DestPortEnd = 54002
|
DestPortEnd = 54102
|
||||||
Timeout = 30
|
Timeout = 30
|
||||||
Stats = True
|
Stats = True
|
||||||
Debug = True
|
Debug = True
|
||||||
|
@ -64,6 +64,7 @@ def process_acls(_config):
|
|||||||
# ORIGINAL: 'DENY:1-5,3120101,3120124'
|
# ORIGINAL: 'DENY:1-5,3120101,3120124'
|
||||||
# PROCESSED: (False, set([(1, 5), (3120124, 3120124), (3120101, 3120101)]))
|
# PROCESSED: (False, set([(1, 5), (3120124, 3120124), (3120101, 3120101)]))
|
||||||
def acl_build(_acl, _max):
|
def acl_build(_acl, _max):
|
||||||
|
#print(_max)
|
||||||
if not _acl:
|
if not _acl:
|
||||||
return(True, set((const.ID_MIN, _max)))
|
return(True, set((const.ID_MIN, _max)))
|
||||||
|
|
||||||
@ -202,6 +203,7 @@ def build_config(_config_file):
|
|||||||
elif section == 'PROXY_TEMPLATE':
|
elif section == 'PROXY_TEMPLATE':
|
||||||
CONFIG['PROXY_TEMPLATE'].update({
|
CONFIG['PROXY_TEMPLATE'].update({
|
||||||
'ENABLED': config.getboolean(section, 'ENABLED'),
|
'ENABLED': config.getboolean(section, 'ENABLED'),
|
||||||
|
'NAME': config.get(section, 'NAME'),
|
||||||
'REPEAT': config.getboolean(section, 'REPEAT'),
|
'REPEAT': config.getboolean(section, 'REPEAT'),
|
||||||
'EXTERNAL_PORT': config.getint(section, 'EXTERNAL_PORT'),
|
'EXTERNAL_PORT': config.getint(section, 'EXTERNAL_PORT'),
|
||||||
'INTERNAL_PORT_START': config.getint(section, 'INTERNAL_PORT_START'),
|
'INTERNAL_PORT_START': config.getint(section, 'INTERNAL_PORT_START'),
|
||||||
@ -212,11 +214,26 @@ def build_config(_config_file):
|
|||||||
'USE_ACL': config.getboolean(section, 'USE_ACL'),
|
'USE_ACL': config.getboolean(section, 'USE_ACL'),
|
||||||
'REG_ACL': config.get(section, 'REG_ACL'),
|
'REG_ACL': config.get(section, 'REG_ACL'),
|
||||||
'SUB_ACL': config.get(section, 'SUB_ACL'),
|
'SUB_ACL': config.get(section, 'SUB_ACL'),
|
||||||
'TG1_ACL': config.get(section, 'TGID_TS1_ACL'),
|
'TGID_TS1_ACL': config.get(section, 'TGID_TS1_ACL'),
|
||||||
'TG2_ACL': config.get(section, 'TGID_TS2_ACL')
|
'TGID_TS2_ACL': config.get(section, 'TGID_TS2_ACL')
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
## elif section == 'PROXY_TEMPLATE_2':
|
||||||
|
## CONFIG['PROXY_TEMPLATE'].update({
|
||||||
|
## 'ENABLED': config.getboolean(section, 'ENABLED'),
|
||||||
|
## 'NAME': config.get(section, 'NAME'),
|
||||||
|
## 'REPEAT': config.getboolean(section, 'REPEAT'),
|
||||||
|
## 'EXTERNAL_PORT': config.getint(section, 'EXTERNAL_PORT'),
|
||||||
|
## 'INTERNAL_PORT_START': config.getint(section, 'INTERNAL_PORT_START'),
|
||||||
|
## 'INTERNAL_PORT_STOP': config.getint(section, 'INTERNAL_PORT_STOP'),
|
||||||
|
## 'STATIC_APRS_POSITION_ENABLED': config.getboolean(section, 'STATIC_APRS_POSITION_ENABLED'),
|
||||||
|
## 'PASSPHRASE': bytes(config.get(section, 'PASSPHRASE'), 'utf-8'),
|
||||||
|
## 'GROUP_HANGTIME': config.getint(section, 'GROUP_HANGTIME'),
|
||||||
|
## 'USE_ACL': config.getboolean(section, 'USE_ACL'),
|
||||||
|
## 'REG_ACL': config.get(section, 'REG_ACL'),
|
||||||
|
## 'SUB_ACL': config.get(section, 'SUB_ACL'),
|
||||||
|
## 'TG1_ACL': config.get(section, 'TGID_TS1_ACL'),
|
||||||
|
## 'TG2_ACL': config.get(section, 'TGID_TS2_ACL')
|
||||||
|
## })
|
||||||
|
|
||||||
elif config.getboolean(section, 'ENABLED'):
|
elif config.getboolean(section, 'ENABLED'):
|
||||||
if config.get(section, 'MODE') == 'PEER':
|
if config.get(section, 'MODE') == 'PEER':
|
||||||
@ -329,6 +346,25 @@ def build_config(_config_file):
|
|||||||
}})
|
}})
|
||||||
CONFIG['SYSTEMS'][section].update({'PEERS': {}})
|
CONFIG['SYSTEMS'][section].update({'PEERS': {}})
|
||||||
|
|
||||||
|
## elif config.get(section, 'MODE') == 'PROXY':
|
||||||
|
## CONFIG['SYSTEMS'].update({section: {
|
||||||
|
## 'MODE': 'MASTER',
|
||||||
|
## 'ENABLED': True,
|
||||||
|
## 'STATIC_APRS_POSITION_ENABLED': config.getboolean(section, 'STATIC_APRS_POSITION_ENABLED'),
|
||||||
|
## 'REPEAT': config.getboolean(section, 'REPEAT'),
|
||||||
|
## 'MAX_PEERS': config.getint(section, 'MAX_PEERS'),
|
||||||
|
## 'IP': gethostbyname(config.get(section, 'IP')),
|
||||||
|
## 'PORT': config.getint(section, 'PORT'),
|
||||||
|
## 'PASSPHRASE': bytes(config.get(section, 'PASSPHRASE'), 'utf-8'),
|
||||||
|
## 'GROUP_HANGTIME': config.getint(section, 'GROUP_HANGTIME'),
|
||||||
|
## 'USE_ACL': config.getboolean(section, 'USE_ACL'),
|
||||||
|
## 'REG_ACL': config.get(section, 'REG_ACL'),
|
||||||
|
## 'SUB_ACL': config.get(section, 'SUB_ACL'),
|
||||||
|
## 'TG1_ACL': config.get(section, 'TGID_TS1_ACL'),
|
||||||
|
## 'TG2_ACL': config.get(section, 'TGID_TS2_ACL')
|
||||||
|
## }})
|
||||||
|
## CONFIG['SYSTEMS'][section].update({'PEERS': {}})
|
||||||
|
|
||||||
elif config.get(section, 'MODE') == 'OPENBRIDGE':
|
elif config.get(section, 'MODE') == 'OPENBRIDGE':
|
||||||
CONFIG['SYSTEMS'].update({section: {
|
CONFIG['SYSTEMS'].update({section: {
|
||||||
'MODE': config.get(section, 'MODE'),
|
'MODE': config.get(section, 'MODE'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user