Proyecto

General

Perfil

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()