From: Lennart Poettering Date: Sat, 6 Aug 2005 01:22:35 +0000 (+0000) Subject: * rename avahi-dump-all to avahi-browse X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=d8c0d081ea456eeb570b760dc3d747c148691ea8;p=catta * rename avahi-dump-all to avahi-browse git-svn-id: file:///home/lennart/svn/public/avahi/trunk@244 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- diff --git a/avahi-utils/Makefile.am b/avahi-utils/Makefile.am index 144ee12..256023c 100644 --- a/avahi-utils/Makefile.am +++ b/avahi-utils/Makefile.am @@ -22,7 +22,7 @@ SUBDIRS=avahi pythonscripts = \ avahi-publish-address \ avahi-publish-service \ - avahi-dump-all \ + avahi-browse \ avahi-discover \ avahi-bookmarks \ avahi-resolve-host-name \ @@ -49,7 +49,7 @@ avahi-publish-service: avahi-publish-service.in sed -e 's,@PYTHON\@,$(PYTHON),g' $< > $@ chmod +x $@ -avahi-dump-all: avahi-dump-all.in +avahi-browse: avahi-browse.in sed -e 's,@PYTHON\@,$(PYTHON),g' $< > $@ chmod +x $@ diff --git a/avahi-utils/avahi-browse.in b/avahi-utils/avahi-browse.in new file mode 100755 index 0000000..69a8bfd --- /dev/null +++ b/avahi-utils/avahi-browse.in @@ -0,0 +1,156 @@ +#!@PYTHON@ +# -*-python-*- +# $Id$ + +# This file is part of avahi. +# +# avahi is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# avahi is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +# License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with avahi; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. + +import sys, getopt + +try: + import avahi, gobject, dbus +except ImportError: + print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus." + sys.exit(1) + +try: + import dbus.glib +except ImportError, e: + pass + +def usage(retval = 0): + print "%s [options] \n" % sys.argv[0] + print " -h --help Show this help" + print " -d --domain The domain to browse" + print " -a --all Show all services, regardless of the type" + sys.exit(retval) + +try: + opts, args = getopt.getopt(sys.argv[1:], "hd:a", ["help", "domain=", "all"]) +except getopt.GetoptError: + usage(2) + +domain = None +stype = None +show_all = False + +for o, a in opts: + if o in ("-h", "--help"): + usage() + + if o in ("-d", "--domain"): + domain = a + + if o in ("-a", "--all"): + show_all = True + +if len(args) > 1: + usage(2) + +if len(args) >= 1: + stype = args[0]; + +if stype is None and not show_all: + usage(2) + +service_type_browsers = {} +service_browsers = {} + +def siocgifname(interface): + global server + + if interface <= 0: + return "any" + else: + return server.GetNetworkInterfaceNameByIndex(interface) + +def service_resolved(interface, protocol, name, type, domain, host, aprotocol, address, port, txt): + print "Service data for service '%s' of type '%s' in domain '%s' on %s.%i:" % (name, type, domain, siocgifname(interface), protocol) + print "\tHost %s (%s), port %i, TXT data: %s" % (host, address, port, str(txt)) + +def print_error(err): + print "Error:", str(err) + +def new_service(interface, protocol, name, type, domain): + global server + + print "Found service '%s' of type '%s' in domain '%s' on %s.%i." % (name, type, domain, siocgifname(interface), protocol) + + # Asynchronous resolving + server.ResolveService(interface, protocol, name, type, domain, avahi.PROTO_UNSPEC, reply_handler=service_resolved, error_handler=print_error) + +def remove_service(interface, protocol, name, type, domain): + print "Service '%s' of type '%s' in domain '%s' on %s.%i disappeared." % (name, type, domain, siocgifname(interface), protocol) + +def new_service_type(interface, protocol, type, domain): + global server, service_browsers + + # Are we already browsing this domain for this type? + if service_browsers.has_key((interface, protocol, type, domain)): + return + + print "Browsing for services of type '%s' in domain '%s' on %s.%i ..." % (type, domain, siocgifname(interface), protocol) + + b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceBrowserNew(interface, protocol, type, domain)), avahi.DBUS_INTERFACE_SERVICE_BROWSER) + b.connect_to_signal('ItemNew', new_service) + b.connect_to_signal('ItemRemove', remove_service) + + service_browsers[(interface, protocol, type, domain)] = b + +def browse_domain(interface, protocol, domain): + global server, service_type_browsers, stype + + # Are we already browsing this domain? + if service_type_browsers.has_key((interface, protocol, domain)): + return + + if stype is None: + print "Browsing domain '%s' on %s.%i ..." % (domain, siocgifname(interface), protocol) + + b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceTypeBrowserNew(interface, protocol, domain)), avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER) + b.connect_to_signal('ItemNew', new_service_type) + + service_type_browsers[(interface, protocol, domain)] = b + else: + new_service_type(interface, protocol, stype, domain) + +def new_domain(interface, protocol, domain): + + # We browse for .local anyway... + if domain != "local": + browse_domain(interface, protocol, domain) + + +bus = dbus.SystemBus() +server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER) + +if domain is None: + # Explicitly browse .local + browse_domain(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "local") + + # Browse for other browsable domains + db = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.DomainBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "", avahi.DOMAIN_BROWSER_BROWSE)), avahi.DBUS_INTERFACE_DOMAIN_BROWSER) + db.connect_to_signal('ItemNew', new_domain) + +else: + # Just browse the domain the user wants us to browse + browse_domain(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, domain) + +try: + gobject.MainLoop().run() +except KeyboardInterrupt, k: + pass diff --git a/avahi-utils/avahi-dump-all.in b/avahi-utils/avahi-dump-all.in deleted file mode 100755 index 69a8bfd..0000000 --- a/avahi-utils/avahi-dump-all.in +++ /dev/null @@ -1,156 +0,0 @@ -#!@PYTHON@ -# -*-python-*- -# $Id$ - -# This file is part of avahi. -# -# avahi is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# avahi is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with avahi; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA. - -import sys, getopt - -try: - import avahi, gobject, dbus -except ImportError: - print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus." - sys.exit(1) - -try: - import dbus.glib -except ImportError, e: - pass - -def usage(retval = 0): - print "%s [options] \n" % sys.argv[0] - print " -h --help Show this help" - print " -d --domain The domain to browse" - print " -a --all Show all services, regardless of the type" - sys.exit(retval) - -try: - opts, args = getopt.getopt(sys.argv[1:], "hd:a", ["help", "domain=", "all"]) -except getopt.GetoptError: - usage(2) - -domain = None -stype = None -show_all = False - -for o, a in opts: - if o in ("-h", "--help"): - usage() - - if o in ("-d", "--domain"): - domain = a - - if o in ("-a", "--all"): - show_all = True - -if len(args) > 1: - usage(2) - -if len(args) >= 1: - stype = args[0]; - -if stype is None and not show_all: - usage(2) - -service_type_browsers = {} -service_browsers = {} - -def siocgifname(interface): - global server - - if interface <= 0: - return "any" - else: - return server.GetNetworkInterfaceNameByIndex(interface) - -def service_resolved(interface, protocol, name, type, domain, host, aprotocol, address, port, txt): - print "Service data for service '%s' of type '%s' in domain '%s' on %s.%i:" % (name, type, domain, siocgifname(interface), protocol) - print "\tHost %s (%s), port %i, TXT data: %s" % (host, address, port, str(txt)) - -def print_error(err): - print "Error:", str(err) - -def new_service(interface, protocol, name, type, domain): - global server - - print "Found service '%s' of type '%s' in domain '%s' on %s.%i." % (name, type, domain, siocgifname(interface), protocol) - - # Asynchronous resolving - server.ResolveService(interface, protocol, name, type, domain, avahi.PROTO_UNSPEC, reply_handler=service_resolved, error_handler=print_error) - -def remove_service(interface, protocol, name, type, domain): - print "Service '%s' of type '%s' in domain '%s' on %s.%i disappeared." % (name, type, domain, siocgifname(interface), protocol) - -def new_service_type(interface, protocol, type, domain): - global server, service_browsers - - # Are we already browsing this domain for this type? - if service_browsers.has_key((interface, protocol, type, domain)): - return - - print "Browsing for services of type '%s' in domain '%s' on %s.%i ..." % (type, domain, siocgifname(interface), protocol) - - b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceBrowserNew(interface, protocol, type, domain)), avahi.DBUS_INTERFACE_SERVICE_BROWSER) - b.connect_to_signal('ItemNew', new_service) - b.connect_to_signal('ItemRemove', remove_service) - - service_browsers[(interface, protocol, type, domain)] = b - -def browse_domain(interface, protocol, domain): - global server, service_type_browsers, stype - - # Are we already browsing this domain? - if service_type_browsers.has_key((interface, protocol, domain)): - return - - if stype is None: - print "Browsing domain '%s' on %s.%i ..." % (domain, siocgifname(interface), protocol) - - b = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceTypeBrowserNew(interface, protocol, domain)), avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER) - b.connect_to_signal('ItemNew', new_service_type) - - service_type_browsers[(interface, protocol, domain)] = b - else: - new_service_type(interface, protocol, stype, domain) - -def new_domain(interface, protocol, domain): - - # We browse for .local anyway... - if domain != "local": - browse_domain(interface, protocol, domain) - - -bus = dbus.SystemBus() -server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER) - -if domain is None: - # Explicitly browse .local - browse_domain(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "local") - - # Browse for other browsable domains - db = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.DomainBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "", avahi.DOMAIN_BROWSER_BROWSE)), avahi.DBUS_INTERFACE_DOMAIN_BROWSER) - db.connect_to_signal('ItemNew', new_domain) - -else: - # Just browse the domain the user wants us to browse - browse_domain(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, domain) - -try: - gobject.MainLoop().run() -except KeyboardInterrupt, k: - pass