Newer
Older
Import / projects / LGN-IP3870 / t / orig / manual.py


#
# 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