rewrite PROXY master instance

This commit is contained in:
KF7EEL 2021-06-05 16:25:08 -07:00
parent 60c790f5cb
commit ff25a032c6
5 changed files with 93 additions and 264 deletions

View File

@ -302,41 +302,30 @@ TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL TGID_TS2_ACL: PERMIT:ALL
# Utilizing the hotspot proxy from FreeDMR # Utilizing the hotspot proxy modified and used from FreeDMR
[PROXY_TEMPLATE] [HOTSPOT]
ENABLED: True MODE: PROXY
# Name that generated systems begin with ENABLED: False
NAME: HOTSPOT # Configure as you would for a normal MASTER. These options will apply to all connected peers.
# Port that clients will connect on.
EXTERNAL_PORT: 62032
# Internal ports used for generated master instances.
INTERNAL_PORT_START: 54000
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 EXPORT_AMBE: False
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5 GROUP_HANGTIME: 5
USE_ACL: True USE_ACL: True
REG_ACL: DENY:1 REG_ACL: DENY:1
SUB_ACL: DENY:1 SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL TG1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL TG2_ACL: PERMIT:ALL
# Use the provided proxy script as opposed to starting a new thread at start.
# Set to False if you are not worried about performance issues.
EXTERNAL_PROXY_SCRIPT: False
# Port that peers will connect on. This port should be opened in your firewall.
EXTERNAL_PORT: 62028
# Internal ports used for generated master instances. Peers shouldn't connect directly to these ports.
# There is no need to open these ports in your server's firewall. A MASTER instance will be generated for each port in the range below.
INTERNAL_PORT_START: 58000
INTERNAL_PORT_STOP: 58005
# PEER INSTANCES - DUPLICATE SECTION FOR MULTIPLE PEERS # PEER INSTANCES - DUPLICATE SECTION FOR MULTIPLE PEERS

View File

@ -3,6 +3,7 @@
############################################################################### ###############################################################################
# Copyright (C) 2016-2019 Cortney T. Buffington, N0MJS <n0mjs@me.com> # Copyright (C) 2016-2019 Cortney T. Buffington, N0MJS <n0mjs@me.com>
# GPS/Data - Copyright (C) 2021 Eric Craw, KF7EEL <kf7eel@qsl.net> # GPS/Data - Copyright (C) 2021 Eric Craw, KF7EEL <kf7eel@qsl.net>
# hotspot_proxy() - Copyright (C) 2020 Simon Adlem, G7RZU <g7rzu@gb7fr.org.uk>
# Annotated modifications Copyright (C) 2021 Xavier FRS2013 # Annotated modifications Copyright (C) 2021 Xavier FRS2013
# Static position by IU7IGU # Static position by IU7IGU
# #
@ -981,7 +982,7 @@ def hotspot_proxy(listen_port, port_start, port_stop):
reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,BlackList,Timeout,Debug,DestportStart,DestPortEnd)) reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,BlackList,Timeout,Debug,DestportStart,DestPortEnd))
def loopingErrHandle(failure): def loopingErrHandle(failure):
print('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure)) logger.error('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure))
reactor.stop() reactor.stop()
def stats(): def stats():
@ -2874,110 +2875,51 @@ if __name__ == '__main__':
logger.info('(REPORT) TCP Socket reporting not configured') logger.info('(REPORT) TCP Socket reporting not configured')
# HBlink instance creation # HBlink instance creation
logger.info('(GLOBAL) HBlink \'bridge.py\' -- SYSTEM STARTING...') logger.info('(GLOBAL) HBlink3 Extended \'full_bridge.py\' -- SYSTEM STARTING...')
proxy_a_masters = [] # Generate list of Enabled MODE:PROXY masters
proxy_b_masters = [] proxy_master_list = []
proxy_c_masters = [] for i in CONFIG['SYSTEMS']:
if CONFIG['PROXY_A']['ENABLED']: if CONFIG['SYSTEMS'][i]['ENABLED'] == True:
#generate_proxy_masters() if CONFIG['SYSTEMS'][i]['MODE'] == 'PROXY':
n_systems = CONFIG['PROXY_A']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_A']['INTERNAL_PORT_START'] proxy_master_list.append(i)
# Start proxy as a thread (if enabled in config) for each set of MASTERs
for m in proxy_master_list:
if CONFIG['SYSTEMS'][m]['EXTERNAL_PROXY_SCRIPT'] == True:
proxy_thread = threading.Thread(target=hotspot_proxy, args=(CONFIG['SYSTEMS'][m]['EXTERNAL_PORT'],CONFIG['SYSTEMS'][m]['INTERNAL_PORT_START'],CONFIG['SYSTEMS'][m]['INTERNAL_PORT_STOP'],))
proxy_thread.daemon = True
proxy_thread.start()
logger.info('Started thread for PROXY for MASTER set: ' + m)
#Build Master configs from list
for i in proxy_master_list:
n_systems = CONFIG['SYSTEMS'][i]['INTERNAL_PORT_STOP'] - CONFIG['SYSTEMS'][i]['INTERNAL_PORT_START']
n_count = 0 n_count = 0
while n_count < n_systems: while n_count < n_systems:
CONFIG['SYSTEMS'].update({i + '-' + str(n_count): {
CONFIG['SYSTEMS'].update({CONFIG['PROXY_A']['NAME'] + '-' + str(n_count): {
'MODE': 'MASTER', 'MODE': 'MASTER',
'ENABLED': True, 'ENABLED': True,
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_A']['STATIC_APRS_POSITION_ENABLED'], 'STATIC_APRS_POSITION_ENABLED': CONFIG['SYSTEMS'][i]['STATIC_APRS_POSITION_ENABLED'],
'REPEAT': CONFIG['PROXY_A']['REPEAT'], 'REPEAT': CONFIG['SYSTEMS'][i]['REPEAT'],
'MAX_PEERS': 1, 'MAX_PEERS': 1,
'IP': '127.0.0.1', 'IP': '127.0.0.1',
'PORT': CONFIG['PROXY_A']['INTERNAL_PORT_START'] + n_count, 'PORT': CONFIG['SYSTEMS'][i]['INTERNAL_PORT_START'] + n_count,
'PASSPHRASE': CONFIG['PROXY_A']['PASSPHRASE'], 'PASSPHRASE': CONFIG['SYSTEMS'][i]['PASSPHRASE'],
'GROUP_HANGTIME': CONFIG['PROXY_A']['GROUP_HANGTIME'], 'GROUP_HANGTIME': CONFIG['SYSTEMS'][i]['GROUP_HANGTIME'],
'USE_ACL': CONFIG['PROXY_A']['USE_ACL'], 'USE_ACL': CONFIG['SYSTEMS'][i]['USE_ACL'],
'REG_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_A']['REG_ACL'], 4294967295), 'REG_ACL': CONFIG['SYSTEMS'][i]['REG_ACL'],
'SUB_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_A']['SUB_ACL'], 4294967295), 'SUB_ACL': CONFIG['SYSTEMS'][i]['SUB_ACL'],
'TGID_TS1_ACL': CONFIG['PROXY_A']['TGID_TS1_ACL'], 'TGID_TS1_ACL': CONFIG['SYSTEMS'][i]['TG1_ACL'],
'TGID_TS2_ACL': CONFIG['PROXY_A']['TGID_TS2_ACL'] 'TGID_TS2_ACL': CONFIG['SYSTEMS'][i]['TG2_ACL']
}}) }})
CONFIG['SYSTEMS'][CONFIG['PROXY_A']['NAME'] + '-' + str(n_count)].update({'PEERS': {}}) CONFIG['SYSTEMS'][i + '-' + str(n_count)].update({'PEERS': {}})
systems[CONFIG['PROXY_A']['NAME'] + '-' + str(n_count)] = routerHBP(CONFIG['PROXY_A']['NAME'] + '-' + str(n_count), CONFIG, report_server) systems[i + '-' + str(n_count)] = routerHBP(i + '-' + str(n_count), CONFIG, report_server)
n_count = n_count + 1 n_count = n_count + 1
# Remove original MASTER stanza to prevent errors
if CONFIG['PROXY_B']['ENABLED']: CONFIG['SYSTEMS'].pop(i)
#generate_proxy_masters() logger.info('Generated MASTER instances for proxy set: ' + i)
n_systems = CONFIG['PROXY_B']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_B']['INTERNAL_PORT_START']
n_count = 0
while n_count < n_systems:
CONFIG['SYSTEMS'].update({CONFIG['PROXY_B']['NAME'] + '-' + str(n_count): {
'MODE': 'MASTER',
'ENABLED': True,
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_B']['STATIC_APRS_POSITION_ENABLED'],
'REPEAT': CONFIG['PROXY_B']['REPEAT'],
'MAX_PEERS': 1,
'IP': '127.0.0.1',
'PORT': CONFIG['PROXY_B']['INTERNAL_PORT_START'] + n_count,
'PASSPHRASE': CONFIG['PROXY_B']['PASSPHRASE'],
'GROUP_HANGTIME': CONFIG['PROXY_B']['GROUP_HANGTIME'],
'USE_ACL': CONFIG['PROXY_B']['USE_ACL'],
'REG_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_B']['REG_ACL'], 4294967295),
'SUB_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_B']['SUB_ACL'], 4294967295),
'TGID_TS1_ACL': CONFIG['PROXY_B']['TGID_TS1_ACL'],
'TGID_TS2_ACL': CONFIG['PROXY_B']['TGID_TS2_ACL']
}})
CONFIG['SYSTEMS'][CONFIG['PROXY_B']['NAME'] + '-' + str(n_count)].update({'PEERS': {}})
systems[CONFIG['PROXY_B']['NAME'] + '-' + str(n_count)] = routerHBP(CONFIG['PROXY_B']['NAME'] + '-' + str(n_count), CONFIG, report_server)
n_count = n_count + 1
if CONFIG['PROXY_C']['ENABLED']:
#generate_proxy_masters()
n_systems = CONFIG['PROXY_C']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_C']['INTERNAL_PORT_START']
n_count = 0
while n_count < n_systems:
CONFIG['SYSTEMS'].update({CONFIG['PROXY_C']['NAME'] + '-' + str(n_count): {
'MODE': 'MASTER',
'ENABLED': True,
'STATIC_APRS_POSITION_ENABLED': CONFIG['PROXY_C']['STATIC_APRS_POSITION_ENABLED'],
'REPEAT': CONFIG['PROXY_C']['REPEAT'],
'MAX_PEERS': 1,
'IP': '127.0.0.1',
'PORT': CONFIG['PROXY_C']['INTERNAL_PORT_START'] + n_count,
'PASSPHRASE': CONFIG['PROXY_C']['PASSPHRASE'],
'GROUP_HANGTIME': CONFIG['PROXY_C']['GROUP_HANGTIME'],
'USE_ACL': CONFIG['PROXY_C']['USE_ACL'],
'REG_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_C']['REG_ACL'], 4294967295),
'SUB_ACL': sms_aprs_config.acl_build(CONFIG['PROXY_C']['SUB_ACL'], 4294967295),
'TGID_TS1_ACL': CONFIG['PROXY_C']['TGID_TS1_ACL'],
'TGID_TS2_ACL': CONFIG['PROXY_C']['TGID_TS2_ACL']
}})
CONFIG['SYSTEMS'][CONFIG['PROXY_C']['NAME'] + '-' + str(n_count)].update({'PEERS': {}})
systems[CONFIG['PROXY_C']['NAME'] + '-' + str(n_count)] = routerHBP(CONFIG['PROXY_C']['NAME'] + '-' + str(n_count), CONFIG, report_server)
n_count = n_count + 1
# Build the routing rules file
## rule_bridge = rules_module.BRIDGES_TEMPLATE
## bridge_dict = rule_bridge.copy()
## for b in bridge_dict:
## for s in bridge_dict[b]:
#### print(s)
## if s['SYSTEM'] == 'PROXY_A':
## for m in proxy_a_masters:
## print(m)
## bridge_dict[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': s['ON'], 'OFF': s['OFF'], 'RESET': s['RESET']})
## bridge_dict[b].remove(s)
#### print(bridge_dict)
## if s['SYSTEM'] == 'PROXY_B':
## for m in proxy_b_masters:
## bridge_dict[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': [1], 'OFF': s['OFF'], 'RESET': s['RESET']})
## # bridge_dict[b].remove(s)
## if s['SYSTEM'] == 'PROXY_C':
## for m in proxy_c_masters:
## bridge_dict[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': [1], 'OFF': s['OFF'], 'RESET': s['RESET']})
#### print(bridge_dict)
##
#### print(rule_bridge)
BRIDGES = make_bridges(rules_module.BRIDGES) BRIDGES = make_bridges(rules_module.BRIDGES)
exclude = rules_module.EXCLUDE_FROM_UNIT exclude = rules_module.EXCLUDE_FROM_UNIT
@ -3021,25 +2963,6 @@ if __name__ == '__main__':
aprs_thread = threading.Thread(target=aprs_rx, args=(aprs_callsign, aprs_passcode, aprs_server, aprs_port, aprs_filter, user_ssid,)) aprs_thread = threading.Thread(target=aprs_rx, args=(aprs_callsign, aprs_passcode, aprs_server, aprs_port, aprs_filter, user_ssid,))
aprs_thread.daemon = True aprs_thread.daemon = True
aprs_thread.start() aprs_thread.start()
# Create file for static positions - by IU7IGU
## open("nom_aprs","w").close
if CONFIG['PROXY_A']['ENABLED']:
if not CONFIG['PROXY_A']['USE_EXTERNAL_PROXY']:
proxy_thread = threading.Thread(target=hotspot_proxy, args=(CONFIG['PROXY_A']['EXTERNAL_PORT'],CONFIG['PROXY_A']['INTERNAL_PORT_START'],CONFIG['PROXY_A']['INTERNAL_PORT_STOP'],))
proxy_thread.daemon = True
proxy_thread.start()
if CONFIG['PROXY_B']['ENABLED']:
if not CONFIG['PROXY_B']['USE_EXTERNAL_PROXY']:
proxy_thread = threading.Thread(target=hotspot_proxy, args=(CONFIG['PROXY_B']['EXTERNAL_PORT'],CONFIG['PROXY_B']['INTERNAL_PORT_START'],CONFIG['PROXY_B']['INTERNAL_PORT_STOP'],))
proxy_thread.daemon = True
proxy_thread.start()
if CONFIG['PROXY_C']['ENABLED']:
if not CONFIG['PROXY_C']['USE_EXTERNAL_PROXY']:
proxy_thread = threading.Thread(target=hotspot_proxy, args=(CONFIG['PROXY_C']['EXTERNAL_PORT'],CONFIG['PROXY_C']['INTERNAL_PORT_START'],CONFIG['PROXY_C']['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))
print(BRIDGES)
reactor.run() reactor.run()

View File

@ -94,11 +94,7 @@ 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]

View File

@ -31,6 +31,8 @@ configuration file.
timer to be reset. This is useful if you are using different TGIDs for voice traffic than timer to be reset. This is useful if you are using different TGIDs for voice traffic than
triggering. If you are not, there is NO NEED to use this feature. triggering. If you are not, there is NO NEED to use this feature.
''' '''
# REQUIRED! - Path to your full_bridge.cfg
config_file = './full_bridge.cfg'
BRIDGES_TEMPLATE = { BRIDGES_TEMPLATE = {
'STATEWIDE': [ 'STATEWIDE': [
@ -40,7 +42,8 @@ BRIDGES_TEMPLATE = {
'ECHO': [ 'ECHO': [
{'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 9999, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [9999,], 'OFF': [9,10], 'RESET': []}, {'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 9999, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [9999,], 'OFF': [9,10], 'RESET': []},
{'SYSTEM': 'PEER-1', 'TS': 2, 'TGID': 9999, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [9999,], 'OFF': [9,10], 'RESET': []}, {'SYSTEM': 'PEER-1', 'TS': 2, 'TGID': 9999, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [9999,], 'OFF': [9,10], 'RESET': []},
{'SYSTEM': 'PROXY_A', 'TS': 2, 'TGID': 9, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4], 'OFF': [7,10], 'RESET': []}, # For proxy MASTERs, just put in the name of the stanza, and rules will be generated automatically
{'SYSTEM': 'HOTSPOT', 'TS': 2, 'TGID': 9, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4], 'OFF': [7,10], 'RESET': []},
] ]
} }
@ -125,34 +128,26 @@ local_systems = {
#################### Function used to build bridges for PROXY stanzas, leave alone #################### #################### Function used to build bridges for PROXY stanzas, leave alone ####################
def build_bridges(): def build_bridges():
import sms_aprs_config import sms_aprs_config, random
config_file = './gps_data.cfg' config_file = './gps_data.cfg'
CONFIG = sms_aprs_config.build_config(config_file) CONFIG = sms_aprs_config.build_config(config_file)
## print(CONFIG)
built_bridge = BRIDGES_TEMPLATE.copy() built_bridge = BRIDGES_TEMPLATE.copy()
if CONFIG['PROXY_A']['ENABLED']: proxy_list = []
proxy_a_masters = [] unique = str('_' + str(random.randint(100, 999)))
n_systems = CONFIG['PROXY_A']['INTERNAL_PORT_STOP'] - CONFIG['PROXY_A']['INTERNAL_PORT_START'] for i in CONFIG['SYSTEMS']:
n_count = 0 if CONFIG['SYSTEMS'][i]['ENABLED'] == True:
while n_count < n_systems: if CONFIG['SYSTEMS'][i]['MODE'] == 'PROXY':
proxy_a_masters.append(CONFIG['PROXY_A']['NAME'] + '-' + str(n_count)) proxy_list.append(i + unique)
n_count = n_count + 1
for b in BRIDGES_TEMPLATE: for b in BRIDGES_TEMPLATE:
for s in BRIDGES_TEMPLATE[b]: for s in BRIDGES_TEMPLATE[b]:
if s['SYSTEM'] == 'PROXY_A': if s['SYSTEM'] + unique in proxy_list:
for m in proxy_a_masters: n_systems = CONFIG['SYSTEMS'][i]['INTERNAL_PORT_STOP'] - CONFIG['SYSTEMS'][i]['INTERNAL_PORT_START']
built_bridge[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': s['ON'], 'OFF': s['OFF'], 'RESET': s['RESET']}) n_count = 0
built_bridge[b].remove(s) while n_count < n_systems:
if s['SYSTEM'] == 'PROXY_B': built_bridge[b].append({'SYSTEM': s['SYSTEM'] + '-' + str(n_count), 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': s['ON'], 'OFF': s['OFF'], 'RESET': s['RESET']})
for m in proxy_b_masters: n_count = n_count + 1
built_bridge[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': s['ON'], 'OFF': s['OFF'], 'RESET': s['RESET']}) built_bridge[b].remove(s)
built_bridge[b].remove(s)
if s['SYSTEM'] == 'PROXY_C':
for m in proxy_c_masters:
built_bridge[b].append({'SYSTEM': m, 'TS': s['TS'], 'TGID': s['TGID'], 'ACTIVE': s['ACTIVE'], 'TIMEOUT': s['TIMEOUT'], 'TO_TYPE': s['TO_TYPE'], 'ON': s['ON'], 'OFF': s['OFF'], 'RESET': s['RESET']})
built_bridge[b].remove(s)
return built_bridge return built_bridge
BRIDGES = build_bridges() BRIDGES = build_bridges()

View File

@ -110,9 +110,6 @@ def build_config(_config_file):
CONFIG['GPS_DATA'] = {} CONFIG['GPS_DATA'] = {}
CONFIG['ALIASES'] = {} CONFIG['ALIASES'] = {}
CONFIG['SYSTEMS'] = {} CONFIG['SYSTEMS'] = {}
CONFIG['PROXY_A'] = {}
CONFIG['PROXY_B'] = {}
CONFIG['PROXY_C'] = {}
try: try:
for section in config.sections(): for section in config.sections():
@ -201,78 +198,6 @@ def build_config(_config_file):
'STALE_TIME': config.getint(section, 'STALE_DAYS') * 86400, 'STALE_TIME': config.getint(section, 'STALE_DAYS') * 86400,
}) })
elif section == 'PROXY_A':
CONFIG['PROXY_A'].update({
'ENABLED': config.getboolean(section, 'ENABLED'),
'USE_EXTERNAL_PROXY': config.getboolean(section, 'USE_EXTERNAL_PROXY'),
'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'),
'TGID_TS1_ACL': config.get(section, 'TGID_TS1_ACL'),
'TGID_TS2_ACL': config.get(section, 'TGID_TS2_ACL')
})
elif section == 'PROXY_B':
CONFIG['PROXY_B'].update({
'ENABLED': config.getboolean(section, 'ENABLED'),
'USE_EXTERNAL_PROXY': config.getboolean(section, 'USE_EXTERNAL_PROXY'),
'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'),
'TGID_TS1_ACL': config.get(section, 'TGID_TS1_ACL'),
'TGID_TS2_ACL': config.get(section, 'TGID_TS2_ACL')
})
elif section == 'PROXY_C':
CONFIG['PROXY_C'].update({
'ENABLED': config.getboolean(section, 'ENABLED'),
'USE_EXTERNAL_PROXY': config.getboolean(section, 'USE_EXTERNAL_PROXY'),
'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'),
'TGID_TS1_ACL': config.get(section, 'TGID_TS1_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':
CONFIG['SYSTEMS'].update({section: { CONFIG['SYSTEMS'].update({section: {
@ -384,24 +309,25 @@ def build_config(_config_file):
}}) }})
CONFIG['SYSTEMS'][section].update({'PEERS': {}}) CONFIG['SYSTEMS'][section].update({'PEERS': {}})
## elif config.get(section, 'MODE') == 'PROXY': elif config.get(section, 'MODE') == 'PROXY':
## CONFIG['SYSTEMS'].update({section: { CONFIG['SYSTEMS'].update({section: {
## 'MODE': config.get(section, 'MODE'), 'MODE': config.get(section, 'MODE'),
## 'ENABLED': config.getboolean(section, 'ENABLED'), 'ENABLED': config.getboolean(section, 'ENABLED'),
## 'STATIC_APRS_POSITION_ENABLED': config.getboolean(section, 'STATIC_APRS_POSITION_ENABLED'), 'EXTERNAL_PROXY_SCRIPT': config.getboolean(section, 'EXTERNAL_PROXY_SCRIPT'),
## 'REPEAT': config.getboolean(section, 'REPEAT'), 'STATIC_APRS_POSITION_ENABLED': config.getboolean(section, 'STATIC_APRS_POSITION_ENABLED'),
## 'PASSPHRASE': bytes(config.get(section, 'PASSPHRASE'), 'utf-8'), 'REPEAT': config.getboolean(section, 'REPEAT'),
## 'EXTERNAL_PORT': config.getint(section, 'EXTERNAL_PORT'), 'PASSPHRASE': bytes(config.get(section, 'PASSPHRASE'), 'utf-8'),
## 'INTERNAL_PORT_START': config.getint(section, 'INTERNAL_PORT_START'), 'EXTERNAL_PORT': config.getint(section, 'EXTERNAL_PORT'),
## 'INTERNAL_PORT_STOP': config.getint(section, 'INTERNAL_PORT_STOP'), 'INTERNAL_PORT_START': config.getint(section, 'INTERNAL_PORT_START'),
## 'GROUP_HANGTIME': config.getint(section, 'GROUP_HANGTIME'), 'INTERNAL_PORT_STOP': config.getint(section, 'INTERNAL_PORT_STOP'),
## 'USE_ACL': config.getboolean(section, 'USE_ACL'), 'GROUP_HANGTIME': config.getint(section, 'GROUP_HANGTIME'),
## 'REG_ACL': config.get(section, 'REG_ACL'), 'USE_ACL': config.getboolean(section, 'USE_ACL'),
## 'SUB_ACL': config.get(section, 'SUB_ACL'), 'REG_ACL': config.get(section, 'REG_ACL'),
## 'TG1_ACL': config.get(section, 'TG1_ACL'), 'SUB_ACL': config.get(section, 'SUB_ACL'),
## 'TG2_ACL': config.get(section, 'TG2_ACL') 'TG1_ACL': config.get(section, 'TG1_ACL'),
## }}) 'TG2_ACL': config.get(section, 'TG2_ACL')
## CONFIG['SYSTEMS'][section].update({'PEERS': {}}) }})
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: {