X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-python%2Favahi-discover.in;h=bb02dcd60406f18bc5a19a4b3579e1629b996be6;hb=d6d26305ce18b43a220d17651b081a2d72f84119;hp=00a56023cd1712921648915a7337aa882491ffd1;hpb=ced0d86acf70f435ffdadb794db891be63a5b82a;p=catta diff --git a/avahi-python/avahi-discover.in b/avahi-python/avahi-discover.in index 00a5602..bb02dcd 100755 --- a/avahi-python/avahi-discover.in +++ b/avahi-python/avahi-discover.in @@ -24,11 +24,16 @@ import os, sys try: import avahi, gtk, gobject, dbus, avahi.ServiceTypeDatabase from avahi.SimpleGladeApp import SimpleGladeApp -except ImportError: - print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus." +except ImportError, e: + print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus.\n Error: %s" % e sys.exit(1) + +## !!NOTE!! ## +# It's really important to do this, else you won't see any events +## try: + from dbus.dbus_bindings import DBusException import dbus.glib except ImportError, e: pass @@ -36,6 +41,14 @@ except ImportError, e: service_type_browsers = {} service_browsers = {} +def error_msg(msg): + d = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL, + type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK) + d.set_markup(msg) + d.show_all() + d.run() + d.destroy() + glade_dir = "@interfacesdir@" service_type_db = avahi.ServiceTypeDatabase.ServiceTypeDatabase() @@ -43,6 +56,7 @@ service_type_db = avahi.ServiceTypeDatabase.ServiceTypeDatabase() class Main_window(SimpleGladeApp): def __init__(self, path="avahi-discover.glade", root="main_window", domain=None, **kwargs): path = os.path.join(glade_dir, path) + gtk.window_set_default_icon_name("gnome-networktool") SimpleGladeApp.__init__(self, path, root, domain, **kwargs) def on_tree_view_cursor_changed(self, widget, *args): @@ -54,19 +68,24 @@ class Main_window(SimpleGladeApp): #Asynchronous resolving self.server.ResolveService( int(interface), int(protocol), name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=self.service_resolved, error_handler=self.print_error) - def protoname(self,protocol): if protocol == avahi.PROTO_INET: return "IPv4" if protocol == avahi.PROTO_INET6: return "IPv6" - + return "n/a" def siocgifname(self, interface): if interface <= 0: - return "any" + return "n/a" else: return self.server.GetNetworkInterfaceNameByIndex(interface) + + def get_interface_name(self, interface, protocol): + if interface == avahi.IF_UNSPEC and protocol == avahi.PROTO_UNSPEC: + return "Wide Area" + else: + return str(self.siocgifname(interface)) + " " + str(self.protoname(protocol)) def service_resolved(self, interface, protocol, name, stype, domain, host, aprotocol, address, port, txt, flags): print "Service data for service '%s' of type '%s' in domain '%s' on %i.%i:" % (name, stype, domain, interface, protocol) @@ -91,7 +110,10 @@ class Main_window(SimpleGladeApp): def new_service(self, interface, protocol, name, stype, domain, flags): print "Found service '%s' of type '%s' in domain '%s' on %i.%i." % (name, stype, domain, interface, protocol) if self.zc_ifaces.has_key((interface,protocol)) == False: - self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, str(self.siocgifname(interface))+" "+str(self.protoname(protocol)),None,interface,protocol,None,domain) + + ifn = self.get_interface_name(interface, protocol) + + self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, ifn, None,interface,protocol,None,domain) if self.zc_domains.has_key((interface,protocol,domain)) == False: self.zc_domains[(interface,protocol,domain)] = self.insert_row(self.treemodel, self.zc_ifaces[(interface,protocol)], domain,None,interface,protocol,None,domain) if self.zc_types.has_key((interface,protocol,stype,domain)) == False: @@ -102,7 +124,6 @@ class Main_window(SimpleGladeApp): # expand the tree of this path self.tree_view.expand_to_path(self.treemodel.get_path(treeiter)) - def remove_service(self, interface, protocol, name, stype, domain, flags): print "Service '%s' of type '%s' in domain '%s' on %i.%i disappeared." % (name, stype, domain, interface, protocol) self.info_label.set_markup("") @@ -125,7 +146,6 @@ class Main_window(SimpleGladeApp): parent = self.treemodel.iter_parent(treeiter) self.treemodel.remove(treeiter) del self.zc_ifaces[(interface,protocol)] - def new_service_type(self, interface, protocol, stype, domain, flags): global service_browsers @@ -151,8 +171,14 @@ class Main_window(SimpleGladeApp): if self.stype is None: print "Browsing domain '%s' on %i.%i ..." % (domain, interface, protocol) - - b = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.ServiceTypeBrowserNew(interface, protocol, domain, dbus.UInt32(0))), avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER) + + try: + b = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.ServiceTypeBrowserNew(interface, protocol, domain, dbus.UInt32(0))), avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER) + except DBusException, e: + print e + error_msg("You should check that the avahi daemon is running.\n\nError : %s" % e) + sys.exit(0) + b.connect_to_signal('ItemNew', self.new_service_type) service_type_browsers[(interface, protocol, domain)] = b @@ -161,7 +187,8 @@ class Main_window(SimpleGladeApp): def new_domain(self,interface, protocol, domain, flags): if self.zc_ifaces.has_key((interface,protocol)) == False: - self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, str(self.siocgifname(interface))+" "+str(self.protoname(protocol)),None,interface,protocol,None,domain) + ifn = self.get_interface_name(interface, protocol) + self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, ifn,None,interface,protocol,None,domain) if self.zc_domains.has_key((interface,protocol,domain)) == False: self.zc_domains[(interface,protocol,domain)] = self.insert_row(self.treemodel, self.zc_ifaces[(interface,protocol)], domain,None,interface,protocol,None,domain) if domain != "local":