From 2ea162e0a20f8dc1cfad96ed7463d37625bd4db2 Mon Sep 17 00:00:00 2001 From: Stephan Reichholf Date: Mon, 26 Jul 2010 23:05:24 +0000 Subject: [PATCH] Initial checking of "Bonjour" plugin. It takes care of AVAHI/Zercoconf configuration. Plugins providing network-services can register with this plugin, which will then take care of the proper avahi-configuration. THIS PLUGIN IS VERY BETA! --- Makefile.am | 1 + bonjour/CONTROL/control | 10 ++ bonjour/Makefile.am | 14 +++ bonjour/meta/Makefile.am | 5 + bonjour/meta/bonjour.jpg | Bin 0 -> 22985 bytes bonjour/meta/plugin_bonjour.xml | 24 +++++ bonjour/src/Bonjour.py | 232 ++++++++++++++++++++++++++++++++++++++++ bonjour/src/Makefile.am | 3 + bonjour/src/__init__.py | 0 bonjour/src/plugin.py | 90 ++++++++++++++++ configure.ac | 4 + 11 files changed, 383 insertions(+) create mode 100644 bonjour/CONTROL/control create mode 100644 bonjour/Makefile.am create mode 100644 bonjour/meta/Makefile.am create mode 100644 bonjour/meta/bonjour.jpg create mode 100644 bonjour/meta/plugin_bonjour.xml create mode 100644 bonjour/src/Bonjour.py create mode 100644 bonjour/src/Makefile.am create mode 100644 bonjour/src/__init__.py create mode 100644 bonjour/src/plugin.py diff --git a/Makefile.am b/Makefile.am index 0075c7c..c433c7e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,6 +7,7 @@ SUBDIRS = \ autoresolution \ autotimer \ babelzapper \ + bonjour \ cdinfo \ dreamirc \ dvdbackup \ diff --git a/bonjour/CONTROL/control b/bonjour/CONTROL/control new file mode 100644 index 0000000..acc5e0b --- /dev/null +++ b/bonjour/CONTROL/control @@ -0,0 +1,10 @@ +Package: enigma2-plugin-extensions-bonjour +Version: 0.1 +Description: Bonjour/avahi-daemon management for your Dreambox +Section: extra +Priority: optional +Maintainer: Stephan Reichholf +Architecture: noarch +Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/ +Depends: enigma2,avahi-daemon +Source: http://enigma2-plugins.schwerkraft.elitedvb.net/ \ No newline at end of file diff --git a/bonjour/Makefile.am b/bonjour/Makefile.am new file mode 100644 index 0000000..1e238b4 --- /dev/null +++ b/bonjour/Makefile.am @@ -0,0 +1,14 @@ +SUBDIRS = src meta + +PWD=$(shell pwd) + +ipkg: enigma2-plugin-extensions-bonjour.ipk + +enigma2-plugin-extensions-bonjour.ipk: + make install DESTDIR=${PWD}/ipkg/INSTALL + tar czf ipkg/data.tar.gz -C ipkg/INSTALL/ . + echo 2.0 > ipkg/debian-binary + tar czf ipkg/control.tar.gz -C CONTROL/ ./control + rm -f $@ + ar q $@ ipkg/control.tar.gz ipkg/debian-binary ipkg/data.tar.gz + rm -rf ipkg/ diff --git a/bonjour/meta/Makefile.am b/bonjour/meta/Makefile.am new file mode 100644 index 0000000..0a679fb --- /dev/null +++ b/bonjour/meta/Makefile.am @@ -0,0 +1,5 @@ +installdir = $(datadir)/meta/ + +dist_install_DATA = plugin_bonjour.xml + +EXTRA_DIST = bonjour.jpg \ No newline at end of file diff --git a/bonjour/meta/bonjour.jpg b/bonjour/meta/bonjour.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5113b66c17f4ac14aef5db10fd5b3dd1b4c45840 GIT binary patch literal 22985 zcmeFZ1yo$ix-L4QafjeefZ!0^Jy-|<5+p#71b1!RLV`O42oNM_aBWd&Uo)Oqb6g_p7WQgqUx{j|9)=2-Yx?K4;57u0VE^#Yjy`O3z8p zc#nmRosEKy>pmCjeP&iR)}KO<(9zMcFtF}mVclV+B&B5iFMn=30749;B;+v=(p>0 z5d*I*+8xao=y#oo`Ci3;z+jZC>LhtGe!#^4(j^EJil>R}+uwE$kA57VoSvOu zT>kV62>|`-7UKG=WB=e6A;K?Y6ci8&`cJ=*kUbC$M2LdQz>7vCtBL-?`OaOwR~W={ z@gJ%>F&X)v9FV+p8OI`J5?EnA{OQ^+p8e+>3;N&k>~D_!-7hGB142R!9*7W-1}+OC zShJD;Z~MP}@c+X(fZ~pk|85zp;xxa&=EzImt>RnkCdYgDnDins(xhLJp8}n=vHrQk zq^gf&NS%JE6wVdSK=p$|3GW)mHx~^*eBWM#h&hSu8g&)z^{ zq!)|Fl0(9~K}-#>i?BUx;-ig}Fvr?3sGE#Z;SDtQ`Y!rYe)LotgTXX;qUa6eEkQqX>;FTZbR!aisVaD?h?(6?3E94?EF5w=LPxCGAuBvNq{(kDzpr zH%K8mVx^;t7AYHF{p#W6_-XvEF}JPQz3AL)R%6QTvzfvkY�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

1ajd2lumw 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 literal 0 HcmV?d00001 diff --git a/bonjour/meta/plugin_bonjour.xml b/bonjour/meta/plugin_bonjour.xml new file mode 100644 index 0000000..87a6539 --- /dev/null +++ b/bonjour/meta/plugin_bonjour.xml @@ -0,0 +1,24 @@ + + + + + + Reichi + Bonjour + enigma2-plugin-extensions-bonjour + Bonjour/Avahi control plugin + Bonjour/Avahi control plugin + + + + Reichi + Bonjour + enigma2-plugin-extensions-bonjour + Bonjour/Avahi kontroll plugin + Bonjour/Avahi kontroll plugin + + + + + + diff --git a/bonjour/src/Bonjour.py b/bonjour/src/Bonjour.py new file mode 100644 index 0000000..55f60a5 --- /dev/null +++ b/bonjour/src/Bonjour.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +from enigma import eConsoleAppContainer, eTimer +from xml.etree.cElementTree import parse as cet_parse +from os import path, listdir +from os import remove as os_remove + +class Bonjour: + AVAHI_SERVICES_DIR = '/etc/avahi/services/' + AVAHI_START_SCRIPT = '/etc/init.d/avahi-daemon' + + def __init__(self): + self.services = [] + self.files = {} + + self.container = eConsoleAppContainer() + self.container.appClosed.append(self.cmdFinished) + + self._timer = eTimer() + self._timer.callback.append(self.restartDaemon) + self._timerRunning = False + + self.reloadConfig() + + def __createServiceConfig(self, service): + lines = [ + '\n', + '\n', + '\n', + '\n', + '\t%s\n' %(service['name']), + '\t\n', + '\t\t%s\n' %(service['type']), + '\t\t%s\n' %(service['port']) + ] + + if service['text'] is not None and service['text'] != "": + lines.add('\t\t%s\n' %(service['text']) ) + + lines.extend([ + '\t\n', + '\n' + ]) + + return lines + + def __writeService(self, service): + print "[Bonjour.__writeService] Creating service file '%s'" %(service['file']) + if 'type' in service and 'port' in service and 'file' in service: + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + file = open(filepath, 'w'); + file.writelines(self.__createServiceConfig(service)) + file.close() + return True + + print "[Bonjour.__writeService] Cannot create service file '%s'" %(service['file']) + return False + + def __deleteService(self, protocol): + filepath = "%s%s.service" %(self.AVAHI_SERVICES_DIR, protocol) + if path.exists(filepath): + + os_remove(filepath) + return True + + return False + + def __parse(self, file): + print "[Bonjour.__parse] parsing %s%s" %(self.AVAHI_SERVICES_DIR, file) + config = cet_parse(self.AVAHI_SERVICES_DIR + file).getroot() + + name = config.find('name').text + + service = config.find('service') + type = service.find('type').text + port = service.find('port').text + text = service.get('text-record') + if text is None: + text = "" + else: + text = text.text + + service = self.buildServiceFull(file, name, type, port, text) + self.registerService(service) + + def __removeServiceFromList(self, service): + oldservices = self.services + self.services = [] + + for s in oldservices: + if s['file'] != service['file']: + self.services.append(s) + self.files[s['file']] = len(self.services) - 1 + + self.files[service['file']] = None + + + def reloadConfig(self): + self.services = [] + self.files = {} + if path.exists(self.AVAHI_SERVICES_DIR): + print "[Bonjour.reloadConfig] reloading config" + service_files = filter( lambda x: x.endswith('.service'), listdir(self.AVAHI_SERVICES_DIR) ) + for file in service_files: + self.__parse(file) + + self.registerDefaultServices() + + + def registerService(self, service, replace = False): + print "[Bonjour.registerService] %s" %service + + if 'type' in service and 'port' in service and 'file' in service: + if (service['file'] not in self.files) or replace: + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not self.__writeService(service): + return False + + if replace and service['file'] in self.files: + self.__removeServiceFromList(service) + + + self.services.append(service) + self.files[service['file']] = len(self.services) - 1 + + if self._timerRunning: + self._timer.stop() + + #if no other service is being registered for 15 seconds restart the daemon + self._timer.start(15000) + self._timerRunning = True + + return True + + else: + print "[Bonjour.registerService] Missing port or type definition in %s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + return False + + + def updateService(self, service): + if 'type' in service and 'port' in service and 'file' in service: + + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not path.exists(filepath): + print "[Bonjour.updateService] Cannot update non-existent service file '%s'" %(service['file']) + return False + + else: + if not self.__writeService(service): + print "[Bonjour.updateService] Cannot write service file '%s'" %(service['file']) + return False + + return True + + def unregisterService(self, protocol): + if self.__deleteService(protocol): + self.reloadConfig() + + + def buildService(self, protocol, port, text="", udp = False): + file = "%s.service" %protocol + + type = "_%s._tcp" %protocol + if udp: + type = "_%s._udp" %protocol + + name = "%h " + name += protocol.upper() + + return { + 'file' : file, + 'name' : name, + 'type' : type, + 'port' : port, + 'text' : text + } + + def buildServiceFull(self, file, name, type, port, text="", udp = False): + return { + 'file' : file, + 'name' : name, + 'type' : type, + 'port' : port, + 'text' : text + } + + def registerDefaultServices(self): + print "[Bonjour.registerDefaultServices] called" + service = self.buildService('ftp', '21') + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not path.exists(filepath): + self.registerService(service) + + service = self.buildService('ssh', '22') + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not path.exists(filepath): + self.registerService(service) + + service = self.buildService('sftp-ssh', '22') + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not path.exists(filepath): + self.registerService(service) + + service = self.buildService('smb', '139') + filepath = "%s%s" %(self.AVAHI_SERVICES_DIR, service['file']) + if not path.exists(filepath): + self.registerService(service) + + def stopTimer(self): + if self._timerRunning: + self._timer.stop() + + def startDaemon(self): + print "[Bonjour.startDaemon] called" + cmd = [self.AVAHI_START_SCRIPT, 'start'] + self.container.execute(*cmd) + + def stopDaemon(self): + print "[Bonjour.stopDaemon] called" + cmd = [self.AVAHI_START_SCRIPT, 'stop'] + self.container.execute(*cmd) + + def restartDaemon(self): + print "[Bonjour.restartDaemon] called" + self.stopTimer() + + cmd = [self.AVAHI_START_SCRIPT, 'restart'] + self.container.execute(*cmd) + + def cmdFinished(self, data): + print "[Bonjour.cmdFinished] %s" %(data) + +bonjour = Bonjour() \ No newline at end of file diff --git a/bonjour/src/Makefile.am b/bonjour/src/Makefile.am new file mode 100644 index 0000000..d5f4adb --- /dev/null +++ b/bonjour/src/Makefile.am @@ -0,0 +1,3 @@ +installdir = $(LIBDIR)/enigma2/python/Plugins/Extensions/Bonjour + +install_PYTHON = __init__.py plugin.py Bonjour.py diff --git a/bonjour/src/__init__.py b/bonjour/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bonjour/src/plugin.py b/bonjour/src/plugin.py new file mode 100644 index 0000000..e2fbc3c --- /dev/null +++ b/bonjour/src/plugin.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- + +from enigma import eListboxPythonMultiContent, gFont + +from Plugins.Plugin import PluginDescriptor +from Bonjour import bonjour + +from Screens.Screen import Screen +from Components.MenuList import MenuList +from Components.MultiContent import MultiContentEntryText +from Components.ActionMap import ActionMap + +class BonjourScreen(Screen): + skin = """ + + + """ + + def __init__(self, session, services, files): + Screen.__init__(self, session) + self.session = session + self.services = services + self.files = files + + self["menuList"] = MenuList([], content=eListboxPythonMultiContent) + self["menuList"].l.setItemHeight(75) + self["menuList"].l.setFont(0, gFont("Regular", 20) ) + self["menuList"].l.setFont(1, gFont("Regular", 16) ) + + self["actions"] = ActionMap(["OkCancelActions"], + { + "ok": self._ok, + "cancel": self._exit, + }, -1) + + self.onLayoutFinish.append(self.buildMenu) + self.onLayoutFinish.append(self.layoutFinished) + + def layoutFinished(self): + print "LAYOUT FINISHED!!" + self.setTitle(_("Bonjour: Overview")) + + def _ok(self): + print "OK OK OK OK" + pass + + def _exit(self): + self.close() + + def buildMenu(self): + list = [] + for key in sorted(self.files): + if self.files[key] != None: + list.append( self.__buildMenuEntry(self.services[self.files[key]]) ) + + self["menuList"].l.setList(list) + self["menuList"].setList(list) + + def __buildMenuEntry(self, service): + print "[Bonjour.__buildMenuEntry] service=%s" %service + + file = "%s" %(service['file']) + name = "Name: %s" %(service['name']) + type = "Type: %s" %(service['type'].split('.')[0].replace('_','')) + prot = "Protocol: %s" %(service['type'].split('.')[1].replace('_','')) + port = "Port: %s" %(service['port']) + text = "Text: %s" %(service['text']) + + return [ + service, + MultiContentEntryText(pos=(5, 0), size=(185, 30), font=0, text=file), + MultiContentEntryText(pos=(190, 0), size=(385, 30), font=0, text=name), + MultiContentEntryText(pos=(5, 25), size=(150, 30), font=1, text=type), + MultiContentEntryText(pos=(160, 25), size=(150, 30), font=1, text=prot), + MultiContentEntryText(pos=(315, 25), size=(150, 30), font=1, text=port), + MultiContentEntryText(pos=(5, 45), size=(570, 30), font=1, text=text) + ] + +def opencontrol(session): + bonjour.reloadConfig() + session.open(BonjourScreen, bonjour.services, bonjour.files) + print "[Bonjour.opencontrol] %s" %(bonjour.files) + #TODO GUI-Stuff + + +def Plugins(**kwargs): + return [ PluginDescriptor( + name=_("Bonjour"), description=_("Control Bonjour (avahi-daemon)"), + where=[PluginDescriptor.WHERE_PLUGINMENU], icon="plugin.png", fnc=opencontrol) + ] diff --git a/configure.ac b/configure.ac index 6fbcc96..76dff3d 100644 --- a/configure.ac +++ b/configure.ac @@ -63,6 +63,10 @@ babelzapper/etc/Makefile babelzapper/meta/Makefile babelzapper/src/Makefile +bonjour/Makefile +bonjour/meta/Makefile +bonjour/src/Makefile + cdinfo/Makefile cdinfo/meta/Makefile cdinfo/src/Makefile -- 2.7.4