X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-utils%2Favahi-browse.in;h=6ae00ba50e1eacfda0191a6a523f07b917307317;hb=69af4f4f5a3718d8ed4ff597daf68de87bbb39f3;hp=69a8bfdeb5cc285c49bb552546f1fd66ff549209;hpb=d8c0d081ea456eeb570b760dc3d747c148691ea8;p=catta diff --git a/avahi-utils/avahi-browse.in b/avahi-utils/avahi-browse.in index 69a8bfd..6ae00ba 100755 --- a/avahi-utils/avahi-browse.in +++ b/avahi-utils/avahi-browse.in @@ -22,7 +22,7 @@ import sys, getopt try: - import avahi, gobject, dbus + import avahi, gobject, dbus, avahi.ServiceTypeDatabase except ImportError: print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus." sys.exit(1) @@ -70,6 +70,8 @@ if stype is None and not show_all: service_type_browsers = {} service_browsers = {} +service_type_db = avahi.ServiceTypeDatabase.ServiceTypeDatabase() + def siocgifname(interface): global server @@ -78,38 +80,46 @@ def siocgifname(interface): 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 lookup_service_type(stype): + global service_type_db + + try: + return service_type_db[stype] + except KeyError: + return "n/a" + +def service_resolved(interface, protocol, name, stype, domain, host, aprotocol, address, port, txt, flags): + print "Service data for service '%s' of type '%s' (%s) in domain '%s' on %s.%i:" % (name, stype, lookup_service_type(stype), domain, siocgifname(interface), protocol) + print "\tHost %s (%s), port %i, TXT data: %s" % (host, address, port, avahi.txt_array_to_string_array(txt)) def print_error(err): print "Error:", str(err) -def new_service(interface, protocol, name, type, domain): +def new_service(interface, protocol, name, stype, domain, flags): global server - print "Found service '%s' of type '%s' in domain '%s' on %s.%i." % (name, type, domain, siocgifname(interface), protocol) + print "Found service '%s' of type '%s' (%s) in domain '%s' on %s.%i." % (name, stype, lookup_service_type(stype), domain, siocgifname(interface), protocol) # Asynchronous resolving - server.ResolveService(interface, protocol, name, type, domain, avahi.PROTO_UNSPEC, reply_handler=service_resolved, error_handler=print_error) + server.ResolveService(interface, protocol, name, stype, domain, avahi.PROTO_UNSPEC, 0, 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 remove_service(interface, protocol, name, stype, domain, flags): + print "Service '%s' of type '%s' (%s) in domain '%s' on %s.%i disappeared." % (name, stype, lookup_service_type(stype), domain, siocgifname(interface), protocol) -def new_service_type(interface, protocol, type, domain): +def new_service_type(interface, protocol, stype, domain, flags): global server, service_browsers # Are we already browsing this domain for this type? - if service_browsers.has_key((interface, protocol, type, domain)): + if service_browsers.has_key((interface, protocol, stype, domain)): return - print "Browsing for services of type '%s' in domain '%s' on %s.%i ..." % (type, domain, siocgifname(interface), protocol) + print "Browsing for services of type '%s' (%s) in domain '%s' on %s.%i ..." % (stype, lookup_service_type(stype), 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 = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceBrowserNew(interface, protocol, stype, domain, 0)), 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 + service_browsers[(interface, protocol, stype, domain)] = b def browse_domain(interface, protocol, domain): global server, service_type_browsers, stype @@ -121,14 +131,14 @@ def browse_domain(interface, protocol, domain): 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 = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceTypeBrowserNew(interface, protocol, domain, 0)), 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) + new_service_type(interface, protocol, stype, domain, 0) -def new_domain(interface, protocol, domain): +def new_domain(interface, protocol, domain, flags): # We browse for .local anyway... if domain != "local": @@ -143,7 +153,7 @@ if domain is None: 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 = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.DomainBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "", avahi.DOMAIN_BROWSER_BROWSE, 0)), avahi.DBUS_INTERFACE_DOMAIN_BROWSER) db.connect_to_signal('ItemNew', new_domain) else: