|
import dbus, gobject, avahi
|
|
from dbus import DBusException
|
|
from dbus.mainloop.glib import DBusGMainLoop
|
|
from string import split
|
|
import logging
|
|
import os, time
|
|
from urlgrabber.grabber import URLGrabber
|
|
|
|
LOG_FILENAME = '/var/log/autoclone.log'
|
|
TYPE = "_autoclone_noclassroomname._tcp"
|
|
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")
|
|
|
|
url = "http://"+source+":"+port+"/"+fileToDownload
|
|
|
|
try:
|
|
local_filename = g.urlgrab(url)
|
|
except:
|
|
logging.debug("No se puede realizar la descarga de "+fileToDownload+" desde "+source+":"+port)
|
|
time.sleep(600)
|
|
|
|
|
|
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:
|
|
downloadFile(i, files[i]['address'], files[i]['port'])
|
|
|
|
|
|
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
|
|
|
|
server.ResolveService(interface, protocol, name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=service_resolved, error_handler=print_error)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
loop = DBusGMainLoop()
|
|
bus = dbus.SystemBus(mainloop=loop)
|
|
|
|
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, '/'), 'org.freedesktop.Avahi.Server')
|
|
|
|
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)
|
|
|
|
gobject.MainLoop().run()
|