Source code for Configuration

"""
Bundle of methods to read the configuration Files.
"""

import xml.etree.ElementTree as ET

from src import SomeIPPacket

[docs]def getDeviceConfig(name, deviceFile, verbose): """ Extracts the device information from the configuration file, this includes MAC, IP and Ports for all devices (server and client) """ tree = ET.parse(deviceFile) root = tree.getroot() config = {} for dev in root.iter('device'): if (dev.get('name') == name): config['mac'] = dev.get('mac') config['ip'] = dev.get('ip') config['sendPort'] = int(dev.get('sendPort')) config['recPort'] = int(dev.get('recPort')) if verbose: print ('Device Config (',name,') :',config) return config
def str2bool(s): if s == 'True' or s == 'true': return True else: return False
[docs]def getClientConfig(name, serviceFile, deviceFile, verbose): """ Extracts the meta information from the configuration file for clients, this includes clientID, services and methods allowed to request, servers providing those services and methods, information about time sentitiveness of notifications and resend intervals """ tree = ET.parse(serviceFile) root = tree.getroot() config = {} config['clientID'] = int(getOwnID(name, deviceFile)) services = [] for serv in root.iter('service'): # client is capable of service if (serv.find("./method/client[@id='"+str(name)+"']") != None) : # service description service = {} service['id'] = int(serv.get('id'),0) # servers providing service servers = [] for server in serv.iter('server'): servers.append(server.get('id')) service['server'] = servers # find methods suitable for client methods = [] for method in serv.iter('method'): if (method.find("./client[@id='"+str(name)+"']") != None) : methodSpec = {} methodSpec['id'] = int(method.get('id'),0) methodSpec['type'] = SomeIPPacket.messageTypes[method.get('type')] minValue = 1 maxValue = 10 resendMin = 1 resendMax = 5 timesensitive = False # go through all clients specifying this method for curClient in method.iter('client'): # only one match here if curClient.get('id') == name: if curClient.get('min') != None: minValue = float(curClient.get('min')) if curClient.get('max') != None: maxValue = float(curClient.get('max')) interval = (minValue, maxValue) if curClient.get('timesensitive') != None: timesensitive = str2bool(curClient.get('timesensitive')) if curClient.get('resendMin') != None: resendMin = float(curClient.get('resendMin')) if curClient.get('resendMax') != None: resendMax = float(curClient.get('resendMax')) methodSpec['resendMin'] = resendMin methodSpec['resendMax'] = resendMax methodSpec['interval'] = interval methodSpec['timesensitive'] = timesensitive methods.append(methodSpec) service['method'] = methods services.append(service) config['service'] = services if verbose: print ('Client Config (',name,') :',config) return config
[docs]def getServerConfig(name, serviceFile, verbose): """ Extracts the meta information from the configuration file for servers, this includes provided services and methods, error rates and response intervals """ tree = ET.parse(serviceFile) root = tree.getroot() config = {} for serv in root.iter('service'): if (serv.find("./servers/server[@id='"+str(name)+"']") != None) : methods = [] for method in serv.iter('method'): methodSpec = {} methodSpec['id'] = int(method.get('id'),0) methodSpec['type'] = SomeIPPacket.messageTypes[method.get('type')] methods.append(methodSpec) config[int(serv.get('id'),0)] = {} config[int(serv.get('id'),0)]['methods'] = methods for curServer in serv.iter('server'): if curServer.get('id') == name: config[int(serv.get('id'),0)]['errorRate'] = float(curServer.get('errorRate')) config[int(serv.get('id'),0)]['min'] = int(curServer.get('min')) config[int(serv.get('id'),0)]['max'] = int(curServer.get('max')) if verbose: print ('Server Config (',name,') :',config) return config
def getOwnID(name, configFile): tree = ET.parse(configFile) root = tree.getroot() for dev in root.iter('device'): if (dev.get('name') == name): return dev.get("clientID")