You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.3 KiB

import csv
import ConfigParser
import apparatinterface
import phoneinterface
import statemachine
class ConfigurationReader(object):
DEFAULTS = {
'gpio_numbering': 'BOARD',
'pin_nsa': '11',
'pin_nsi': '13',
'pin_gabelschalter': '15',
'pin_schauzeichen': '12',
'pin_wecker_enable': '16',
'pin_wecker_a': '18',
'pin_wecker_b': '19',
'invert_gs' : 'false',
'default_proxy': ''
}
def __init__(self):
self.__cp = ConfigParser.ConfigParser(defaults=ConfigurationReader.DEFAULTS)
self.__pinconfig = None
self.__dialconfig = None
self.__proxyconfigs = None
self.__phoneconfig = None
def __get_global_val(self, option):
return self.__cp.get('fetapd', option)
def __get_global_val_int(self, option):
return int(self.__cp.get('fetapd', option))
def __get_global_val_bool(self, option):
return self.__cp.get('fetapd', option).lower() in ['true', 'yes', '1']
def __get_proxy_val(self, proxyname, option):
return self.__cp.get('proxy_'+proxyname, option)
def __get_proxy_val_int(self, proxyname, option):
return self.__cp.getint('proxy_'+proxyname, option)
def __read_shortcuts(self):
fname = self.__get_global_val('shortcuts_file')
shortcuts = {}
with open(fname, 'r') as csvfile:
for row in csv.DictReader(csvfile):
print 'row', row
shortcuts[row['shortcut']] = row['number']
print 'shortcuts:', shortcuts
return shortcuts
def __read_blacklist(self):
fname = self.__get_global_val('blacklist_file')
blacklist = []
with open(fname, 'r') as csvfile:
for row in csv.DictReader(csvfile):
blacklist.append(row['number'])
return blacklist
def read(self, f):
self.__cp.read(f)
print 'pin_nsa:', self.__get_global_val_int('pin_nsa'),
self.__pinconfig = apparatinterface.FeApPinConfiguration(
gpio_numbering = self.__get_global_val('gpio_numbering'),
pin_nsa = self.__get_global_val_int('pin_nsa'),
pin_nsi = self.__get_global_val_int('pin_nsi'),
pin_gabelschalter = self.__get_global_val_int('pin_gabelschalter'),
pin_schauzeichen = self.__get_global_val_int('pin_schauzeichen'),
pin_wecker_enable = self.__get_global_val_int('pin_wecker_enable'),
pin_wecker_a = self.__get_global_val_int('pin_wecker_a'),
pin_wecker_b = self.__get_global_val_int('pin_wecker_b'),
invert_gs = self.__get_global_val_bool('invert_gs'),
)
self.__dialconfig = statemachine.DialConfiguration(
self.__get_global_val_int('dial_timeout'),
self.__read_shortcuts(),
self.__read_blacklist(),
)
proxyconfigs = []
for secname in self.__cp.sections():
if secname.startswith('proxy_'):
proxyname = secname[6:]
proxyconfig = phoneinterface.PhoneProxyConfiguration(
name = proxyname,
proxy = self.__get_proxy_val(proxyname, 'proxy'),
identity = self.__get_proxy_val(proxyname, 'identity'),
username = self.__get_proxy_val(proxyname, 'username'),
password = self.__get_proxy_val(proxyname, 'password'),
realm = self.__get_proxy_val(proxyname, 'realm'),
prefix = self.__get_proxy_val(proxyname, 'prefix')
)
proxyconfigs.append(proxyconfig)
self.__phoneconfig = phoneinterface.PhoneConfiguration(
sound_device = self.__get_global_val('sound_device'),
incoming_timeout = self.__get_global_val_int('incoming_timeout'),
linphone_config = self.__get_global_val('linphone_config'),
default_proxy = self.__get_global_val('default_proxy'),
stun_server = self.__get_global_val('stun_server'),
proxies = proxyconfigs
)
@property
def pinconfig(self):
return self.__pinconfig
@property
def dialconfig(self):
return self.__dialconfig
@property
def phoneconfig(self):
return self.__phoneconfig