|
import dbus, gobject, avahi
|
|
from dbus import DBusException
|
|
from dbus.mainloop.glib import DBusGMainLoop
|
|
import threading
|
|
|
|
class avahiClient(threading.Thread):
|
|
|
|
names = []
|
|
|
|
def __init__(self):
|
|
threading.Thread.__init__(self)
|
|
|
|
def run(self):
|
|
|
|
loop = DBusGMainLoop()
|
|
bus = dbus.SystemBus(mainloop=loop)
|
|
|
|
self.server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, '/'), 'org.freedesktop.Avahi.Server')
|
|
|
|
sbrowser = dbus.Interface(bus.get_object(avahi.DBUS_NAME, self.server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "_workstation._tcp", 'local', dbus.UInt32(0))), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
|
|
sbrowser.connect_to_signal("ItemNew", self.myhandler)
|
|
|
|
self.loop = gobject.MainLoop()
|
|
self.loop.run()
|
|
|
|
|
|
def service_resolved(self,*args):
|
|
#print args
|
|
print 'service resolved'
|
|
print 'name:', args[2]
|
|
print 'address:', args[7]
|
|
print 'port:', args[8]
|
|
#print args
|
|
self.names.append(args[2])
|
|
|
|
#self.loop.quit()
|
|
|
|
|
|
def print_error(self,*args):
|
|
print 'error_handler'
|
|
print args[0]
|
|
|
|
def myhandler(self,interface, protocol, name, stype, domain, flags):
|
|
#print "Found service '%s' type '%s' domain '%s' " % (name, stype, domain)
|
|
|
|
if flags & avahi.LOOKUP_RESULT_LOCAL:
|
|
#print "que es esto"
|
|
pass
|
|
|
|
self.server.ResolveService(interface, protocol, name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=self.service_resolved, error_handler=self.print_error)
|
|
|
|
def getList(self):
|
|
return self.names
|
|
|
|
def kill(self):
|
|
self.loop.quit()
|