root/autoclone/trunk/Client/avahiClient.py @ 73
32 | manumora | import dbus, gobject, avahi
|
|
from dbus import DBusException
|
|||
from dbus.mainloop.glib import DBusGMainLoop
|
|||
from string import split
|
|||
import logging
|
|||
40 | manumora | import os, time
|
|
from urlgrabber.grabber import URLGrabber
|
|||
32 | manumora | ||
36 | manumora | LOG_FILENAME = '/var/log/autoclone.log'
|
|
40 | manumora | TYPE = "_autoclone_noclassroomname._tcp"
|
|
32 | manumora | files = {}
|
|
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
|
|||
def downloadFile(fileToDownload, source, port):
|
|||
if not os.path.exists(fileToDownload):
|
|||
g = URLGrabber()
|
|||
else:
|
|||
g = URLGrabber(reget="simple")
|
|||
40 | manumora | url = "http://"+source+":"+port+"/"+fileToDownload
|
|
32 | manumora | try:
|
|
40 | manumora | local_filename = g.urlgrab(url)
|
|
32 | manumora | except:
|
|
logging.debug("No se puede realizar la descarga de "+fileToDownload+" desde "+source+":"+port)
|
|||
40 | manumora | time.sleep(600)
|
|
32 | manumora | ||
def service_resolved(*args):
|
|||
val = str(args[2]).split("@")
|
|||
files[val[1]] = {'address' : str(args[7]), 'port': str(val[0])}
|
|||
if len(files)>0:
|
|||
for i in files:
|
|||
37 | manumora | downloadFile(i, files[i]['address'], files[i]['port'])
|
|
32 | manumora | ||
def print_error(*args):
|
|||
print 'error_handler'
|
|||
print args[0]
|
|||
def myhandler(interface, protocol, name, stype, domain, flags):
|
|||
#print "Found service '%s' type '%s' domain '%s' " % (name, stype, domain)
|
|||
if flags & avahi.LOOKUP_RESULT_LOCAL:
|
|||
# local service, skip
|
|||
pass
|
|||
40 | manumora | server.ResolveService(interface, protocol, name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=service_resolved, error_handler=print_error)
|
|
32 | manumora | ||
37 | manumora | if __name__ == '__main__':
|
|
32 | manumora | ||
37 | manumora | loop = DBusGMainLoop()
|
|
bus = dbus.SystemBus(mainloop=loop)
|
|||
32 | manumora | ||
37 | manumora | server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, '/'), 'org.freedesktop.Avahi.Server')
|
|
32 | manumora | ||
37 | manumora | sbrowser = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, TYPE, 'local', dbus.UInt32(0))), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
|
|
sbrowser.connect_to_signal("ItemNew", myhandler)
|
|||
32 | manumora | ||
37 | manumora | gobject.MainLoop().run()
|