Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 32

Primera carga de código

Ver diferencias:

autoclone/trunk/Client/main.py
import urlgrabber
import logging
import time
LOG_FILENAME = 'shareLinex.log'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
fileISO = "my_file.iso"
teacherServer = "192.168.0.254"
port = "8999"
endDownload = false
def md5_for_file(f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
def verifyFile:
if not os.path.exists("verify.hash"):
try
g = URLGrabber()
local_filename = g.urlgrab("http://"+teacherServer+":"+port+"/verify.hash")
except
logging.debug("No se puede descargar el fichero de verificación")
return false
verifyHash = so.read("verify.hash")
if verifyHash != md5_for_file("fileISO"):
return false
if __name__ == "__main__":
while not endDownload:
if not os.path.exists(release):
try
g = URLGrabber()
local_filename = g.urlgrab("http://"+teacherServer+":"+port+"/"+fileISO)
except
logging.debug("No se puede realizar la descarga desde: "+teacherServer)
time.sleep(600)
else
try
g = URLGrabber(reget="simple")
local_filename = g.urlgrab("http://"+teacherServer+":"+port+"/"+fileISO)
except
logging.debug("No se puede reanudar la descarga desde: "+teacherServer)
time.sleep(600)
autoclone/trunk/Client/avahiClient.py
import dbus, gobject, avahi
from dbus import DBusException
from dbus.mainloop.glib import DBusGMainLoop
from string import split
import logging
LOG_FILENAME = 'replicant.log'
TYPE = "_replicant25._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")
try:
local_filename = g.urlgrab("http://"+source+":"+port+"/"+fileToDownload)
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:
print i['address']
#downloadFile(i.keys(), i['address'], i['port'])
#print 'name:', args[2]
#print 'address:', args[7]
#print 'port:', args[8]
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)
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()
print "hola"
autoclone/trunk/Server/WebServer.py
from BaseHTTPServer import BaseHTTPRequestHandler
import os
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
try:
if self.path.endswith(".iso") or self.path.endswith(".md5"):
file = "/home/manu/Descargas/" + self.path
f = open(file)
s = os.path.getsize(file)
self.send_response(200)
self.send_header('Content-type', 'multipart/octet-stream')
self.send_header('Content-Length', s)
self.end_headers()
f.close()
return
except IOError:
pass
autoclone/trunk/Server/main.py
import ZeroconfService
from BaseHTTPServer import HTTPServer
import os
import WebServer
import MyUtils
pathDownloads = "/home/manu/Descargas/"
portWebServer = 8000
classroom = "25"
if __name__ == '__main__':
if not os.path.exists(pathDownloads):
os.mkdir(pathDownloads)
while True:
listFiles = os.listdir(pathDownloads)
if len(listFiles) == 0:
time.sleep(300) #in seconds
else:
# publish files (Avahi)
for i in listFiles:
if os.path.isfile(pathDownloads + i) and i.endswith('.iso'):
fileName = MyUtils.getFileName(os.path.basename(i))
md5File = pathDownloads + fileName + '.md5'
if not os.path.isfile(md5File):
md5Hash = MyUtils.getMD5Hash(pathDownloads + i)
f = open(md5File,'wt')
f.write(md5Hash)
f.close()
service = ZeroconfService.ZeroconfService(name = str(portWebServer)+"@"+i, port=3000, stype = "_replicant"+classroom+"._tcp") #, domain="replicant", host="localhost", text="Esto es una prueba")
service.publish()
# Start web server
server = HTTPServer(('', portWebServer), WebServer.MyHandler)
server.serve_forever()
#server.socket.close()
#service.unpublish()
autoclone/trunk/Server/MyUtils.py
import hashlib
import os
def getMD5Hash(file, block_size=2**20):
f = open(file)
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
md5Hash = md5.hexdigest()
return md5Hash
def getFileName(file):
basename = os.path.basename(file)
filename = os.path.splitext(basename)
return filename[0]
autoclone/trunk/Server/ZeroconfService.py
import avahi
import dbus
__all__ = ["ZeroconfService"]
class ZeroconfService:
def __init__(self, name, port, stype="_http._tcp", domain="", host="", text=""):
self.name = name
self.stype = stype
self.domain = domain
self.host = host
self.port = port
self.text = text
def publish(self):
bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
g = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
g.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,dbus.UInt32(0), self.name, self.stype, self.domain, self.host, dbus.UInt16(self.port), self.text)
g.Commit()
self.group = g
def unpublish(self):
self.group.Reset()

Exportar a: Unified diff