diff --git a/boswatch/router/__init__.py b/boswatch/router/__init__.py new file mode 100644 index 0000000..836e3e8 --- /dev/null +++ b/boswatch/router/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- diff --git a/boswatch/router/route.py b/boswatch/router/route.py new file mode 100644 index 0000000..2180750 --- /dev/null +++ b/boswatch/router/route.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""! + ____ ____ ______ __ __ __ _____ + / __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ / + / __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ < + / /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ / +/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/ + German BOS Information Script + by Bastian Schroll + +@file: route.py +@date: 04.03.2019 +@author: Bastian Schroll +@description: Class for a single BOSWatch packet router route point +""" + + +class Route: + def __init__(self, name, callback): + self._name = name + self._callback = callback + + @property + def name(self): + return self._name + + @property + def callback(self): + return self._callback diff --git a/boswatch/router/router.py b/boswatch/router/router.py new file mode 100644 index 0000000..b818f2c --- /dev/null +++ b/boswatch/router/router.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""! + ____ ____ ______ __ __ __ _____ + / __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ / + / __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ < + / /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ / +/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/ + German BOS Information Script + by Bastian Schroll + +@file: router.py +@date: 01.03.2019 +@author: Bastian Schroll +@description: Class for the BOSWatch packet router +""" +# todo think about implement threading for routers and the plugin calls (THREAD SAFETY!!!) +import logging +import copy + +logging.debug("- %s loaded", __name__) + + +class Router: + def __init__(self, name): + self._name = name + self._routeList = [] + logging.debug("[%s] new router", self._name) + + def addRoute(self, route): + logging.debug("[%s] add route: %s", self._name, route.name) + self._routeList.append(route) + + def runRouter(self, bwPacket): + logging.debug("[%s] started", self._name) + for routeObject in self._routeList: + logging.debug("[%s] -> run route: %s", self._name, routeObject) + bwPacket_tmp = routeObject.callback(copy.deepcopy(bwPacket)) # copy bwPacket to prevent edit the original + + if bwPacket_tmp is None: # returning None doesnt change the bwPacket + continue + + if bwPacket_tmp is False: # returning False stops the router immediately + logging.debug("[%s] stopped", self._name) + break + + bwPacket = bwPacket_tmp + logging.debug("[%s] <- bwPacket returned: %s", self._name, bwPacket) + logging.debug("[%s] ended", self._name) + return bwPacket + + @property + def name(self): + return self._name + + @property + def routeList(self): + return self._routeList diff --git a/boswatch/router.py b/boswatch/router/routerManager.py similarity index 65% rename from boswatch/router.py rename to boswatch/router/routerManager.py index 13d4714..dd1436d 100644 --- a/boswatch/router.py +++ b/boswatch/router/routerManager.py @@ -9,71 +9,23 @@ German BOS Information Script by Bastian Schroll -@file: router.py -@date: 01.03.2019 +@file: routerManager.py +@date: 04.03.2019 @author: Bastian Schroll -@description: Class for the BOSWatch packet router +@description: Class for the BOSWatch packet router manager class """ + + # todo think about implement threading for routers and the plugin calls (THREAD SAFETY!!!) import logging -import copy import importlib from boswatch.configYaml import ConfigYAML +from boswatch.router.router import Router +from boswatch.router.route import Route logging.debug("- %s loaded", __name__) -class _Route: - def __init__(self, name, callback): - self._name = name - self._callback = callback - - @property - def name(self): - return self._name - - @property - def callback(self): - return self._callback - - -class _Router: - def __init__(self, name): - self._name = name - self._routeList = [] - logging.debug("[%s] new router", self._name) - - def addRoute(self, route): - logging.debug("[%s] add route: %s", self._name, route.name) - self._routeList.append(route) - - def runRouter(self, bwPacket): - logging.debug("[%s] started", self._name) - for routeObject in self._routeList: - logging.debug("[%s] -> run route: %s", self._name, routeObject) - bwPacket_tmp = routeObject.callback(copy.deepcopy(bwPacket)) # copy bwPacket to prevent edit the original - - if bwPacket_tmp is None: # returning None doesnt change the bwPacket - continue - - if bwPacket_tmp is False: # returning False stops the router immediately - logging.debug("[%s] stopped", self._name) - break - - bwPacket = bwPacket_tmp - logging.debug("[%s] <- bwPacket returned: %s", self._name, bwPacket) - logging.debug("[%s] ended", self._name) - return bwPacket - - @property - def name(self): - return self._name - - @property - def routeList(self): - return self._routeList - - class RouterManager: def __init__(self): self._routerDict = {} @@ -97,7 +49,7 @@ class RouterManager: if router.get("name") in self._routerDict: logging.error("duplicated router name: %s", router.get("name")) return False - routerDict_tmp[router.get("name")] = _Router(router.get("name")) + routerDict_tmp[router.get("name")] = Router(router.get("name")) for router in config.get("router"): routerName = router.get("name") @@ -115,15 +67,15 @@ class RouterManager: if routeType == "plugin": importedFile = importlib.import_module(routeType + "." + routeName) loadedClass = importedFile.BoswatchPlugin(routeConfig) - routerDict_tmp[routerName].addRoute(_Route(routeName, loadedClass._run)) + routerDict_tmp[routerName].addRoute(Route(routeName, loadedClass._run)) elif routeType == "module": importedFile = importlib.import_module(routeType + "." + routeName) loadedClass = importedFile.BoswatchModule(routeConfig) - routerDict_tmp[routerName].addRoute(_Route(routeName, loadedClass._run)) + routerDict_tmp[routerName].addRoute(Route(routeName, loadedClass._run)) elif routeType == "router": - routerDict_tmp[routerName].addRoute(_Route(routeName, routerDict_tmp[routeName].runRouter)) + routerDict_tmp[routerName].addRoute(Route(routeName, routerDict_tmp[routeName].runRouter)) else: logging.error("unknown type '%s' in %s", routeType, route) diff --git a/bw_server.py b/bw_server.py index 57f4db1..4b286b3 100644 --- a/bw_server.py +++ b/bw_server.py @@ -43,7 +43,7 @@ from boswatch.network.server import TCPServer from boswatch.packet import Packet from boswatch.utils import header from boswatch.network.broadcast import BroadcastServer -from boswatch.router import RouterManager +from boswatch.router.routerManager import RouterManager header.logoToLog()