#
# from DongWook manual download...
#
import os
import re
import dnloader
from roxiadebug import *
'''
MODELFILE='product_model.info'
MODULEINFO='module.info'
VDCICFG='vdci.cfg'
REQUESTRESULT='/tmp/request_response'
DOWNFILE='down_file'
'''
MODELFILE='/usr/local/lgvp/var/product_model.info'
MODULEINFO='/usr/local/lgvp/var/module.info'
VDCICFG='/usr/local/lgvp/vdci.cfg'
CPEIDCFG='/usr/local/lgvp/cpeid.cfg'
REQUESTRESULT='/tmp/request_response'
DOWNFILE='/tmp/down_file'
#SERVERURL = 'http://upgrade.ktsode.com:9080/'
#SERVERURL = 'http://222.114.39.54/'
#SERVERURL = 'http://211.38.63.169:43210/' #for KT test - DaeJun
SERVERURL = 'http://150.150.141.165:80/' #for KT test - DaeJun
class manual_download:
def __init__(self):
self.devId=''
self.devModel=''
self.devIpAddr=''
self.devFwVer=''
self.mgmtProtocol='SNMP'
self.mgmtVer='2'
self.pkgId='Firmware'
self.pkgVersion=''
self.pkgFileSize=''
self.svcSAID=''
self.retCode=0
self.dlSvrUrl=''
self.dlSvrId=''
self.dlSvrPwd=''
self.get_mac()
self.get_dev_model()
self.get_ipaddress()
self.devFwVer = self.get_fw_ver("Firmware")
self.get_svcSAID()
self.retCode = ''
self.retMessage = ''
def get_mac(self):
defaultmac = "00:40:5a:00:00:00"
try:
p = os.popen("/sbin/ifconfig eth0")
t=p.read()
p.close()
self.devId= re.search("HWaddr ([0-9a-fA-F:]+)",t).group(1)
except:
self.devId = defaultmac
def get_dev_model(self):
p = os.popen('cat %s' % MODELFILE)
t= p.read()
p.close()
temp = t.strip().split('#')
self.devModel=temp[1]
def get_ipaddress(self):
defaultip = '0.0.0.0'
try:
p = os.popen("/sbin/ifconfig eth0")
t=p.read()
p.close()
self.IpAddr= re.search("inet addr:([0-9.]+)",t).group(1)
except:
self.IpAddr = defaultip
def get_fw_ver(self, module):
version = '1.0.0'
try:
p = open(MODULEINFO)
for line in p:
if line.startswith(module):
version = line.split()[1]
break
p.close()
return version
except:
return version
def get_svcSAID(self):
defaultsaid=''
try:
p = open(CPEIDCFG)
for line in p:
#if line.startswith("TEL_NUM"):
if line.startswith("CPEID"):
self.svcSAID = line.split('=')[1].strip()
break
p.close()
except:
self.svcSAID=''
def get_update_request(self, server_name, pkg_id, pkg_version, fin_cb=None):
#3870M provision
#def get_update_request(self, server_name, fin_cb=None):
try:
#upgradeServlet
# cmd = 'wget2 -T 5 %supgradeServlet/ --post-data \'devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&svcSAID=%s\' -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, pkg_version,self.svcSAID)
cmd = 'wget2 -T 5 %supgradeServlet/ --post-data devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&svcSAID=%s -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, pkg_version,self.svcSAID)
#cmd = 'wget2 %s -O /tmp/request_response' % (server_name)
print cmd
self.dloader = dnloader.Dnloader(cmd, dofork=True, finish_cb=fin_cb)
except:
debugLogC('EXCEPT: manual.py get_update_request()')
def get_download_request(self, site, localfilename, fin_cb=None):
try :
#down_file = '/tmp/' + self.dlSvrUrl.split('\n')[-1]
down_file = '/tmp/' + localfilename.split('/')[-1]
print 'get down req', down_file
request_site = site
if config.provision_debug :
if request_site.startswith('https://') :
print 'https site'
cmd = 'wget2 -d -T 10 -t 1 --certificate=/usr/etc/tandberg.crt --private-key=/usr/etc/tandberg.key --ca-certificate=/usr/etc/ca-cert.pem --no-check-certificate USERAGENT %s -O %s' % (request_site, down_file)
else :
print 'http site'
cmd = 'wget2 -d -T 10 -t 1 USERAGENT %s -O %s' % (request_site, down_file)
# cmd = 'wget2 -T 5 -t 1 %s -O %s' % (request_site, down_file)
else :
if request_site.startswith('https://') :
print 'https site'
cmd = 'wget2 -q -T 10 -t 1 --certificate=/usr/etc/tandberg.crt --private-key=/usr/etc/tandberg.key --ca-certificate=/usr/etc/ca-cert.pem --no-check-certificate USERAGENT %s -O %s' % (request_site, down_file)
else :
print 'http site'
cmd = 'wget2 -q -T 10 -t 1 USERAGENT %s -O %s' % (request_site, down_file)
# auth error case expecting 401
#cmd = 'wget2 %s -T 5 --limit-rate=500k --http-user=%s --http-password=111%s -O %s' % (self.dlSvrUrl, self.dlSvrId, self.dlSvrPwd, down_file)
print cmd
#self.dloader = dnloader.Dnloader(cmd, finish_cb=fin_cb)
self.dloader = dnloader.Dnloader(cmd, localfilename, 0, finish_cb=fin_cb)
#ret=os.system(cmd)
#return ret
except:
print 'error'
#return 1
def get_progress_poll(self):
return self.dloader.get_progress()
def parser(self):
p = open(REQUESTRESULT)
t=p.read()
p.close()
temp=t.split('&')
for item in temp:
if item.startswith('retCode'):
self.retCode=item[len("retCode="):].strip()
if item.startswith('retMessage'):
self.retMessage=item[len("retMessage="):].strip()
if item.startswith('dlSvrUrl'):
self.dlSvrUrl=item[len("dlSvrUrl="):].strip()
# shchun : remove duplicated quot
if self.dlSvrUrl[0] == '\'':
self.dlSvrUrl = self.dlSvrUrl[1:-1]
if item.startswith('dlSvrId'):
self.dlSvrId=item[len("dlSvrId="):].strip()
if item.startswith('dlSvrPwd'):
self.dlSvrPwd=item[len("dlSvrPwd="):].strip()
if item.startswith('pkgFileVersion'):
self.pkgVersion=item[len("pkgFileVersion="):].strip()
if item.startswith('pkgFileSize'):
self.pkgFileSize=item[len("pkgFileSize="):].strip()
#os.unlink(REQUESTRESULT)
return self.retCode, self.retMessage
'''
def get_download_request(self, localfilename, filesize, fin_cb=None):
try :
#down_file = '/tmp/' + self.dlSvrUrl.split('\n')[-1]
down_file = '/tmp/' + localfilename.split('/')[-1]
print 'get down req', down_file
#cmd = 'wget2 %s -T 5 --http-user=%s --http-password=%s -O %s' % (self.dlSvrUrl, self.dlSvrId, self.dlSvrPwd, down_file)
# limit down rate... by 500 kbps
cmd = 'wget2 %s -T 5 --limit-rate=500k --http-user=%s --http-password=%s -O %s' % (self.dlSvrUrl, self.dlSvrId, self.dlSvrPwd, down_file)
#cmd = 'wget2 %s -T 5 --limit-rate=500k --http-user=%s --http-password=%s -O %s' % (self.dlSvrUrl, self.dlSvrId, self.dlSvrPwd, down_file)
# auth error case expecting 401
#cmd = 'wget2 %s -T 5 --limit-rate=500k --http-user=%s --http-password=111%s -O %s' % (self.dlSvrUrl, self.dlSvrId, self.dlSvrPwd, down_file)
print cmd
#self.dloader = dnloader.Dnloader(cmd, finish_cb=fin_cb)
self.dloader = dnloader.Dnloader(cmd, localfilename, filesize, finish_cb=fin_cb)
#ret=os.system(cmd)
return ret
except:
return 1
'''
def send_response(self, server_name, pkg_id, pkg_version, ret_code):
try :
#cmd = 'wget2 -T 5 %sresultServlet/ --post-data \'devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&resultCode=%d&svcSAID=%s\' -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, pkg_version, ret_code,self.svcSAID)
if ret_code == 100:
#if len(self.svcSAID.strip()) == 0:
# cmd = 'wget2 -T 5 %sresultServlet/ --post-data "devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&resultCode=%d&svcSAID=Not-Registred\n" -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, self.pkgVersion, ret_code)
#else:
# cmd = 'wget2 -T 5 %sresultServlet/ --post-data "devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&resultCode=%d&svcSAID=%s\n" -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, self.pkgVersion, ret_code,self.svcSAID)
# save to file.
#cmd = 'echo %s > /usr/local/update/run.sh'%cmd
#software_type = setting.download_type
# Jul 8 - daejun work...
import runtime
version = runtime.down.get_fw_ver('Firmware')
fw = file('/usr/local/update/run.sh', 'w')
fw.write('SERVER=' + server_name + '\nPACKAGE=' + pkg_id+ '\nVERSION=' + version + '\n')
fw.close()
cmd = 'cat /usr/local/update/run.sh >> /tmp/mmi.log'
else:
if len(self.svcSAID.strip()) == 0:
cmd = 'wget2 -T 5 %sresultServlet/ --post-data "devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&resultCode=%d&svcSAID=Not-Registered\n" -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, pkg_version, ret_code)
else:
cmd = 'wget2 -T 5 %sresultServlet/ --post-data "devId=%s&devModel=%s&devIpAddr=%s&devFwVer=%s&mgmtProtocol=SNMP&mgmtVer=2&pkgId=%s&pkgVersion=%s&resultCode=%d&svcSAID=%s\n" -O /tmp/request_response' % (server_name,self.devId, self.devModel, self.devIpAddr, self.devFwVer,pkg_id, pkg_version, ret_code,self.svcSAID)
print cmd
ret = os.system(cmd)
return ret
except:
debugLogC('EXCEPT: manual.py send_response()')
return 1
if __name__ == '__main__':
fin_flag1 = True # in order to exit get_update_request awaiting loop.
fin_flag2 = True # in order to exit get_download_request awaiting loop.
fin_ret1 = 0
fin_ret2 = 0
down = manual_download()
version = ''
software_type = ''
software_type = "Firmware"
version = down.get_fw_ver("Firmware")
def fin_cb1(ret):
global fin_flag1, fin_ret1
print 'fin_cb1 called ret = ', ret
fin_flag1 = False
fin_ret1 = ret
#ret = down.get_update_request(SERVERURL, software_type, version)
down.get_update_request(SERVERURL, software_type, version, fin_cb1)
while fin_flag1:
ret = down.get_progress_poll()
print '### down.get_progress_poll', ret
import time
time.sleep(0.5)
if (fin_ret1 == 0):
print 'down.parser exec'
ret, message = down.parser()
if (ret == '200'):
#ret = down.get_download_request()
def fin_cb2(ret):
global fin_flag2, fin_ret2
print 'fin_cb2 called ret = ', ret
fin_flag2 = False
fin_ret2 = ret
fsize = int(down.pkgFileSize)
down.get_download_request(localfilename=DOWNFILE, filesize=fsize, fin_cb=fin_cb2)
while fin_flag2:
ret = down.get_progress_poll()
print '### down.get_progress_poll', ret
import time
time.sleep(0.5)
if (fin_ret2 == 0 ):
print "run update-helper copy DOWNFILE"
os.system("update-helper copy %s" % DOWNFILE)
# report downloading file finished.
down.send_response(SERVERURL, software_type, version, 10)
print "remove DOWNFILE"
os.remove(DOWNFILE)
print "run os.system(\"update-helper install\")"
os.system("update-helper install")
print "after install ret return code and send"
# report installation finished
down.send_response(SERVERURL, software_type, version, 100)
else:
print "download fail"
elif (ret == "201"):
print ret, message
elif (ret == "202"):
print ret, message
elif (ret == "203"):
print ret, message
else:
print ret, message
else:
print "download fail", ret