blob: 36005d5dec5d803c6137dac21c63e5387cd6d245 [file] [log] [blame]
#!/usr/bin/python -u
import sys
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
import subprocess
import Openbmc
if (len(sys.argv) < 2):
print "Usage: download_manager.py [system name]"
exit(1)
System = __import__(sys.argv[1])
DBUS_NAME = 'org.openbmc.managers.Download'
OBJ_NAME = '/org/openbmc/managers/Download'
TFTP_PORT = 69
class DownloadManagerObject(dbus.service.Object):
def __init__(self,bus,name):
dbus.service.Object.__init__(self,bus,name)
bus.add_signal_receiver(self.DownloadHandler,
dbus_interface = "org.openbmc.Flash",
signal_name = "Download", path_keyword = "path")
bus.add_signal_receiver(self.TftpDownloadHandler,
signal_name = "TftpDownload", path_keyword = "path")
@dbus.service.signal(DBUS_NAME,signature='ss')
def DownloadComplete(self,outfile,filename):
print "Download Complete: "+outfile
return outfile
@dbus.service.signal(DBUS_NAME,signature='s')
def DownloadError(self,filename):
pass
def TftpDownloadHandler(self,ip,filename,path = None):
try:
filename = str(filename)
print "Downloading: "+filename+" from "+ip
outfile = System.FLASH_DOWNLOAD_PATH+"/"+filename
rc = subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",ip])
if (rc == 0):
self.DownloadComplete(outfile,filename)
else:
self.DownloadError(filename)
except Exception as e:
print "ERROR DownloadManager: "+str(e)
self.DownloadError(filename)
## TODO: this needs to be deprecated. Shouldn't call flash interface from here
def DownloadHandler(self,url,filename,path = None):
try:
filename = str(filename)
print "Downloading: "+filename+" from "+url
outfile = System.FLASH_DOWNLOAD_PATH+"/"+filename
subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",url])
obj = bus.get_object("org.openbmc.control.Flash",path)
intf = dbus.Interface(obj,"org.openbmc.Flash")
intf.update(outfile)
except Exception as e:
print "ERROR DownloadManager: "+str(e)
obj = bus.get_object("org.openbmc.control.Flash",path)
intf = dbus.Interface(obj,"org.openbmc.Flash")
intf.error("Download Error: "+filename)
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = Openbmc.getDBus()
name = dbus.service.BusName(DBUS_NAME, bus)
obj = DownloadManagerObject(bus, OBJ_NAME)
mainloop = gobject.MainLoop()
print "Running Download Manager"
mainloop.run()