Proyecto

General

Perfil

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