#
# by shchun : receive from elpis on Mar20.
#
import socket
import runtime
import evas
import os
import os.path
import sys
import status
import config
import utils
from vdcisetting import vdci_setting
from profile import profile, lan_profile, wifi_profile, dns_profile
from baseui import FullBaloonDownloadUI, NotifyUI
from basemodel import Stage, FullNotifyStage, YesNoStage, NotifyStage
from model import IdleStage
import uiconfig
#by elpis
from setting import setting
def killall(name, sig):
for pid in os.listdir('/proc'):
cmdline_path = '/proc/%s/cmdline' % pid
if os.path.exists(cmdline_path):
try:
pid = int(pid)
except ValueError:
continue
if open(cmdline_path).read().startswith(name):
os.kill(pid, sig)
class Snmp:
SOCK_FILE = '/tmp/.snmpvideo.sock'
key_code_table = {
'0' : 0,
'1' : 1,
'2' : 2,
'3' : 3,
'4' : 4,
'5' : 5,
'6' : 6,
'7' : 7,
'8' : 8,
'9' : 9,
'*' : 10,
'#' : 11,
config.ASTERISK_4 : 12,
config.Menu1 : 19,
config.Menu2 : 20,
'Left' : 23,
'Right' : 24,
'Up' : 25,
'Down' : 26,
}
def __init__(self):
try:
os.unlink(self.SOCK_FILE)
except OSError:
pass
#print 'snmp: init'
self.server_s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
self.server_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_s.bind(self.SOCK_FILE)
self.server_s.listen(5)
self.snmp_s = None
self.snmp_tag = None
self.total_files = ''
self.currrent_file = ''
#self.current_ps = ''
self.server_tag = utils.Input(self.server_s.fileno(), self.accept_snmp)
self.pid = os.fork()
if not self.pid:
# cmd = ('snmpd', '-f', '-c', '/usr/etc/snmp.conf')
cmd = ('/usr/local/bin/snmpd', '-Ln', '-f', '-c', '/usr/etc/snmp/snmpd.conf')
os.execlp(cmd[0], *cmd)
print 'Cannot run command: ', args
sys._exit(1)
def set_callinfo_trap_control(self, callinfo_trap_control):
from setting import setting
setting.set_callinfo_trap_control(callinfo_trap_control)
def set_call_statistics_trap_control(self, call_statistics_trap_control):
from setting import setting
setting.set_call_statistics_trap_control(call_statistics_trap_control)
def getCallStatisticsTrapControl(self):
return self.call_statistics_trap_control
def kill_snmp(self):
self.snmp_tag = None
self.snmp_s = None
if self.pid:
try:
import signal
os.kill(self.pid, signal.SIGKILL)
os.waitpid(self.pid, 0)
except:
pass
def destroy(self):
self.snmp_tag = None
self.snmp_s = None
if config.snmp_debug:
print 'snmp: pid:', self.pid
import signal
os.kill(self.pid, signal.SIGKILL)
os.waitpid(self.pid, 0)
self.pid = 0
killall('ftpget', signal.SIGKILL)
os.unlink(self.SOCK_FILE)
def accept_snmp(self, fd, type):
#print 'accept_snmp. fd = %d, type = %d' % (fd, type)
assert type == evas.INPUT_READ
self.snmp_s, addr = self.server_s.accept()
self.snmp_tag = utils.Input(self.snmp_s.fileno(), self.handle_snmp)
return True
def recv_packet(self):
c = self.snmp_s.recv(1)
l = ord(c)
c = self.snmp_s.recv(1)
length = l = ord(c)+l*256
msg = ''
while l > 0:
m = self.snmp_s.recv(l)
l -= len(m)
msg += m
if length > 0:
if config.snmp_debug:
print 'snmp: recv_packet len:', length, ', mesg:', msg
return msg
def send_packet(self, buf):
import struct
length = len(buf)
len1 = length/256
len2 = length - len1 * 256
p = struct.pack('B', len1)
self.snmp_s.send(p)
p = struct.pack('B', len2)
self.snmp_s.send(p)
#print len1, len2, buf
if length > 0:
self.snmp_s.send(buf)
if config.snmp_debug:
print 'snmp: send_packet len:', length, ', mesg:', buf
def handle_snmp(self, fd, type):
#print 'handle_snmp. fd = %d, type = %d' % (fd, type)
if type & evas.INPUT_HUP:
#runtime.manager.handle_snmp_message('connection_closed')
if config.snmp_debug:
print 'snmp: *** CONNECTION_CLOSED ***'
return False
assert type & evas.INPUT_READ
str = self.recv_packet()
#print '##### str = [%s]' % str
cur_profile = profile.get_profile()
#
# SNMP python code - shchun
#
# shchun : batch application for ip addresses
# will use following temp values.
# status.t_ipaddress = ''
# status.t_netmask = ''
# status.t_dhcp = ''
# status.t_gateway = ''
# status.t_dnsserver = ''
if (str == 'set_ipMode'):
str2 = self.recv_packet()
ret = ''
# static == '1', dhcp == '3'
if str2 == '1': # static ip addresss
ret = 0
else: # dhcp
ret = 1
status.t_dhcp = ret
status.dumpTempIpInfo()
#print "set_ipMode :", str
elif (str == 'set_ipAddress'):
str2 = self.recv_packet()
status.t_ipaddress = str2
status.dumpTempIpInfo()
#print "set_ipAddress :", str
elif (str == 'set_subnetMask'):
str2 = self.recv_packet()
status.t_netmask = str2
status.dumpTempIpInfo()
#print "set_subnetMask :", str
elif (str == 'set_gateway'):
str2 = self.recv_packet()
status.t_gateway = str2
status.dumpTempIpInfo()
#print "set_gateway :", str
elif (str == 'set_dnsServer'):
str2 = self.recv_packet()
status.t_dnsserver = str2
status.dumpTempIpInfo()
#print "set_dnsServer :", str
elif (str == 'set_systemApply'):
#print "set_systemApply :", str
if cur_profile == 1: # LAN
if len(status.t_ipaddress) > 0:
lan_profile.set_ipaddress(status.t_ipaddress)
if len(status.t_netmask) > 0:
lan_profile.set_netmask(status.t_netmask)
if status.t_dhcp == 0:
#print 'hyo: set_dhcp_false'
lan_profile.set_dhcp(False)
if status.t_dhcp == 1:
#print 'hyo: set_dhcp_true'
lan_profile.set_dhcp(True)
if len(status.t_gateway) > 0:
lan_profile.set_gateway(status.t_gateway)
if len(status.t_dnsserver) > 0:
dns_profile.set_dns1(status.t_dnsserver)
lan_profile.save()
dns_profile.save()
else: # WIFI
if len(status.t_ipaddress) > 0:
wifi_profile.set_ipaddress(status.t_ipaddress)
if len(status.t_netmask) > 0:
wifi_profile.set_netmask(status.t_netmask)
if status.t_dhcp == 0:
#print 'hyo: set_dhcp_false'
lan_profile.set_dhcp(False)
if status.t_dhcp == 1:
#print 'hyo: set_dhcp_true'
lan_profile.set_dhcp(True)
if len(status.t_gateway) > 0:
wifi_profile.set_gateway(status.t_gateway)
if len(status.t_dnsserver) > 0:
wifi_profile.set_dns1(status.t_dnsserver)
wifi_profile.save()
dns_profile.save()
def reset_cb():
import utils, time
if runtime.vdciapp:
runtime.vdciapp.req_deregister()
time.sleep(1)
utils.releaseDhcp()
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin
utils.vega_reset_together()
#end of MMW
#MMW 2008.07.07 when reboot send disassoc to AP and then unload the driver
os.system('wlstop')
#end of MMW
time.sleep(1)
os.system('reboot')
stage = NotifyStage( _('The phone will be reboot shortly'), uiconfig.baloon_setting_system_reset_icon, reset_cb)
runtime.manager.stack_stage(stage)
#
# SNMP : KT Voip specific - in General.
#
elif (str == 'set_cpeId'):
# DONE : re-register... 4/27
#str2 = self.recv_packet()
#vdci_setting.tel_num = str2
#vdci_setting.save()
import utils
if status.get_register_mode() == status.Registered:
if len(vdci_setting.tel_num) == 0:
status.set_register_mode(status.NotRegistered)
runtime.trapHandler.setRegisterStatus(2)
#os.system('sipunregistered_noti.sh 1 1 &')
else:
if (utils.check_private_range()): #private ip address
if len(vdci_setting.primary_sbc_addr) == 0 \
and len(vdci_setting.secondary_sbc_addr) == 0:
status.set_register_mode(status.NotRegistered)
runtime.trapHandler.setRegisterStatus(2)
#os.system('sipunregistered_noti.sh 1 47 &')
else: #gloval ip address
if len(vdci_setting.proxy_addr) == 0 \
and len(vdci_setting.backup_proxy_addr) == 0:
status.set_register_mode(status.NotRegistered)
runtime.trapHandler.setRegisterStatus(2)
#os.system('sipunregistered_noti.sh 1 47 &')
import menu
stage = menu.RegisteringStage
runtime.manager.stack_stage(stage)
#self.init_vdciapp()
#runtime.vdci_startup()
elif (str == 'get_voipSystemProtocol'):
self.send_packet('2')
#elif (str == 'get_sipUnRegReason'):
elif (str == 'get_sipDomain'):
self.send_packet(vdci_setting.domain)
elif (str == 'set_sipDomain'):
str2 = self.recv_packet()
vdci_setting.domain = str2
vdci_setting.save()
#
# SNMP : KT Voip specific - cscf related.
#
elif (str == 'get_cscfSvrPort'):
index = self.recv_packet()
ret = ''
if index == '1':
ret += vdci_setting.proxy_port
else:
ret += vdci_setting.backup_proxy_port
self.send_packet(ret)
#print "get_cscfSvrPort :", index
elif (str == 'set_cscfSvrPort'):
index = self.recv_packet()
str2 = self.recv_packet()
if index == '1':
vdci_setting.proxy_port = str2
else:
vdci_setting.backup_proxy_port = str2
vdci_setting.save()
#print "set_cscfSvrPort :", index, str
elif (str == 'get_cscfSvrAddr'):
index = self.recv_packet()
ret = ''
if index == '1':
ret += vdci_setting.proxy_addr
else:
ret += vdci_setting.backup_proxy_addr
self.send_packet(ret)
#print "get_cscfSvrAddr :", index
elif (str == 'set_cscfSvrAddr'):
index = self.recv_packet()
str2 = self.recv_packet()
if index == '1':
vdci_setting.proxy_addr = str2
else:
vdci_setting.backup_proxy_addr = str2
vdci_setting.save()
#print "set_cscfSvrAddr :", index, str2
elif (str == 'get_cscfSvrTransType'):
# sip signaling type : should be AUTO
index = self.recv_packet()
self.send_packet("1") # 1: AUTO
#elif (str == 'get_SvrTableStatus'):
#elif (str == 'set_SvrTableStatus'):
#
# SNMP : KT Voip specific - sbc related.
#
elif (str == 'get_sbcSvrPort'):
index = self.recv_packet()
ret = ''
if index == '1':
ret += vdci_setting.primary_sbc_port
else:
ret += vdci_setting.secondary_sbc_port
self.send_packet(ret)
#print "get_sbcSvrPort :", index, ret
elif (str == 'set_sbcSvrPort'):
index = self.recv_packet()
str2 = self.recv_packet()
if index == '1':
vdci_setting.primary_sbc_port = str2
else:
vdci_setting.secondary_sbc_port = str2
vdci_setting.save()
#print "set_sbcSvrPort :", index, str2
elif (str == 'get_sbcSvrAddr'):
index = self.recv_packet()
ret = ''
if index == '1':
ret += vdci_setting.primary_sbc_addr
else:
ret += vdci_setting.secondary_sbc_addr
self.send_packet(ret)
#print "get_sbcSvrAddr :", index
elif (str == 'set_sbcSvrAddr'):
index = self.recv_packet()
str2 = self.recv_packet()
if index == '1':
vdci_setting.primary_sbc_addr = str2
else:
vdci_setting.secondary_sbc_addr = str2
vdci_setting.save()
#print "set_sbcSvrAddr :", index, str2
elif (str == 'get_sbcSvrTransType'):
# sip signaling type : udp only
index = self.recv_packet()
self.send_packet("2")
#print "get_sbcSvrTransType :", index
#
# SNMP: KT Voip specific - Sip Ua table
#
elif (str == 'get_sipUaUrlMode'):
# 1: sip, 2:tel, value used when sip registration.
index = self.recv_packet()
ret = ''
try:
if vdci_setting.reg_url_mode == 0: # sip
ret += '1' # sip: per KT snmp spec.
else: # tel
ret += '2' # tel: per KT snmp spec.
except:
vdci_setting.reg_url_mode = 1
vdci_setting.save()
ret += '1'
self.send_packet(ret)
#print "get_sipUaUrlMode :", index
elif (str == 'set_sipUaUrlMode'):
index = self.recv_packet()
mode = self.recv_packet()
if mode == '1':
vdci_setting.reg_url_mode = 0
else:
vdci_setting.reg_url_mode = 1
vdci_setting.save()
#print "set_sipUaUrlMode :", index, mode
elif (str == 'get_sipUaRegIndex'):
# TODO: put proper value according to CRCF, SBC proxy
# to get CRCR index from core software
# DONE: registered == 1, else == -1
index = self.recv_packet()
if status.get_register_mode()== status.Registered:
if status.register_proxy=='0' or status.register_proxy=='2':
self.send_packet("1")
else:
self.send_packet("2")
else:
self.send_packet("-1")
#print "get_sipUaRegIndex :", index
elif (str == 'get_sipUaReasonCode'):
# TODO: need to implement according to Q.850 table
# need to contect KT appointed person to clarify requirement esp. Q.850
# DOWN: if reg, 200, if unreg. -1 ( to be updated)
index = self.recv_packet()
if status.get_register_mode() == status.Registered:
self.send_packet("200")
else:
try:
if (status.reason_code == "None" or status.reason_code == None):
self.send_packet("0")
else:
self.send_packet(status.reason_code)
except:
self.send_packet("-1")
#print "get_sipUaReasonCode :", index
elif (str == 'get_sipUaExpires'):
# TODO: for now sends '3600', need to reflect real value of VDCIApp
# for now OK.
index = self.recv_packet()
#self.send_packet("3600")
self.send_packet(vdci_setting.subscriber_expires)
#print "get_sipUaExpires :", index
elif (str == 'get_sipUaSIPURI'):
index = self.recv_packet()
# assuming there is only 1 ua, index = 1.
if len(vdci_setting.sip_uri):
self.send_packet(vdci_setting.sip_uri)
else:
uri = 'sip:' + vdci_setting.tel_num + '@' + vdci_setting.domain
self.send_packet(uri)
'''
uri = 'sip:' + vdci_setting.tel_num + '@' + vdci_setting.domain
self.send_packet(uri)
print "get_sipUaSIPURI :", index, uri
'''
elif (str == 'set_sipUaSIPURI'):
index = self.recv_packet()
# assuming there is only 1 ua, index = 1.
uri = self.recv_packet()
try:
'''
uri = uri.replace('sip:', '')
auth_name, domain = uri.split('@')
vdci_setting.auth_name = auth_name
vdci_setting.domain = domain
'''
vdci_setting.sip_uri=uri
vdci_setting.save()
except:
pass
#print "set_sipUaSIPURI :", index, uri
elif (str == 'get_sipUaId'): # == TEL_NUM
index = self.recv_packet()
# assuming there is only 1 ua, index = 1.
# NOTE : if you send null, sipUaTable will not show.
ret = ''
if len(vdci_setting.tel_num):
ret += vdci_setting.tel_num
else:
ret += ''
self.send_packet(ret)
#print "get_sipUaId :", index
elif (str == 'set_sipUaId'):
index = self.recv_packet()
# assuming there is only 1 ua, index = 1.
id = self.recv_packet()
vdci_setting.tel_num = id
vdci_setting.save()
#print "set_sipUaId :", index, id
elif (str == 'get_sipUaPass'):
index = self.recv_packet()
# assuming there is only 1 ua, index = 1.
self.send_packet(vdci_setting.auth_pwd)
#print "get_sipUaId :", index
elif (str == 'set_sipUaPass'):
index = self.recv_packet()
password = self.recv_packet()
# assuming there is only 1 ua, index = 1.
vdci_setting.auth_pwd = password
vdci_setting.save()
#print "set_sipUaId :", index, password
elif (str == 'get_sipUaTelURI'):
# assuming sipUaTelURI == "tel" + sipUaId
index = self.recv_packet()
self.send_packet('tel:' + vdci_setting.tel_num)
#print "get_sipUaTelURI :", index
elif (str == 'set_sipUaTelURI'):
# TODO: need clarification.
# how about raise an exception?
# 4/27 assume not used.
index = self.recv_packet()
uri = self.recv_packet()
#print "set_sipUaTelURI :", index, uri
elif (str == 'get_sipUaPrivateId'):
index = self.recv_packet()
# assuming there is only 1 ua, index = 1
# assuming sipUaPrivateId == sipUaId. ==> X
# 4/27 assumes as auth_name.
self.send_packet(vdci_setting.auth_name)
#print "get_sipUaPrivateId :", index
elif (str == 'set_sipUaPrivateId'):
index = self.recv_packet()
id = self.recv_packet()
vdci_setting.auth_name = id
vdci_setting.save()
#print "set_sipUaPrivateId :", index, id
elif (str == 'del_sipUaTable'):
# Mar27 new
# 4/27 need clarifiction... : will be implemented at daejun...
index = self.recv_packet()
#changed by elpis
#sipuaid = self.recv_packet()
vdci_setting.tel_num = ""
vdci_setting.auth_pwd = ""
vdci_setting.auth_name = ""
vdci_setting.sip_uri=''
vdci_setting.save()
#
# SNMP: KT Voip specific - DECT handy table
#
elif (str == 'get_sipUaIndexNo'):
# assuming there is only 1 ua, index = 1.
index = self.recv_packet()
#ELPIS
if index == '1':
import time
runtime.dectCallManager.getSnmpInfo()
time.sleep(2.5)
if config.snmp_debug:
print setting.dect_information_list
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
if (status.get_register_mode() == status.Registered):
self.send_packet("1")
else:
self.send_packet("-1")
else:
self.send_packet("-1")
else:
self.send_packet("-1")
#elpis end
#print "get_sipUaIndexNo :", index
elif (str == 'get_handyTelNo'):
# assuming handyTelNo == sipUaId.
index = self.recv_packet()
#elpis
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
self.send_packet(vdci_setting.tel_num)
else:
self.send_packet("")
else:
self.send_packet("")
#elpis end
#self.send_packet(vdci_setting.auth_name)
#print "get_handyTelNo :", index
elif (str == 'get_handyModelName'):
# TODO: contect KT appointed person of LGN sales dept, get proper value of this field.
index = self.recv_packet()
#elpis
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
self.send_packet("LN201-805D")
else:
self.send_packet("")
else:
self.send_packet("")
#elpis end
#self.send_packet("IP3870")
#print "get_handyModelName :", index
elif (str == 'get_handyFwVersion'):
# TODO: get info from base station s/w
index = self.recv_packet()
if (int(index) <= len(setting.dect_information_list)):
try:
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
self.send_packet(temp[1]+"."+temp[2]+"."+temp[3])
else:
self.send_packet("0.0.0")
except:
self.send_packet("0.0.0")
else:
self.send_packet("0.0.0")
#self.send_packet("1.1.1")
#print "get_handyFwVersion :", index
elif (str == 'get_handyStatus'):
# TODO: get info from base station s/w
index = self.recv_packet()
#elpis
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
self.send_packet("1")
else:
self.send_packet("0")
else:
self.send_packet("0")
#elpis end
#self.send_packet("1")
#print "get_handyStatus :", index
elif (str == 'get_handySerialNum'):
# TODO: get info from base station s/w.
index = self.recv_packet()
#elpis
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
import struct
try:
intSerial = struct.unpack('L', temp[4])[0]
self.send_packet("%s" % intSerial)
except:
self.send_packet("")
else:
self.send_packet("")
#elpis end
#self.send_packet("2345")
#print "get_handySerialNum :", index
elif (str == 'get_HandyReboot'):
# not used by KT for now
index = self.recv_packet()
self.send_packet("0")
#print "get_HandyReboot :", index
elif (str == 'set_HandyReboot'):
# not used by KT for now
index = self.recv_packet()
reb = self.recv_packet()
#print "set_HandyReboot :", index, reb
elif (str == 'get_smsPw'):
# not used by KT for now
index = self.recv_packet()
self.send_packet("Not Support")
#print "get_smsPw :", index
elif (str == 'set_smsPw'):
# not used by KT for now
index = self.recv_packet()
pa = self.recv_packet()
#print "set_smsPw :", index, pa
elif (str == 'get_handyCallStatus'):
# TODO: get info from base station s/w.
index = self.recv_packet()
#elpis
if (int(index) <= len(setting.dect_information_list)):
temp=setting.dect_information_list[int(index)-1].split(":")
if temp[0] == '1':
dectStatus = runtime.dectCallManager.getDectStatus()
if dectStatus == 0:
self.send_packet("1")
else:
self.send_packet("2")
else:
self.send_packet("0")
else:
self.send_packet("0")
#elpis end
#self.send_packet("")
#print "get_handyCallStatus :", index
#
# SNMP: KT Voip specific - Call statstics
#
elif (str == 'get_callStaticsVoipOrgCall'):
# need planning the structure
index = self.recv_packet()
self.send_packet("%d" % setting.voipOrgCall)
#print "get_callStaticsVoipOrgCall :", index
elif (str == 'get_callStaticsVoipTermCall'):
# need planning the structure
index = self.recv_packet()
self.send_packet("%d" % setting.voipTermCall)
#print "get_callStaticsVoipTermCall :", index
elif (str == 'get_callStaticsVoipOrgCallTime'):
# need planning the structure
index = self.recv_packet()
try:
self.send_packet("%d" % (int(setting.voipOrgCallTime)/60))
except:
self.send_packet("%d" % setting.voipOrgCallTime/60)
#print "get_callStaticsVoipOrgCallTime :", index
elif (str == 'get_callStaticsVoipTermCallTime'):
# need planning the structure
index = self.recv_packet()
try:
self.send_packet("%d" % (int(setting.voipTermCallTime)/60))
except:
self.send_packet("%d" % setting.voipTermCallTime/60)
#print "get_callStaticsVoipTermCallTime :", index
elif (str == 'get_callStaticsCallSucc'):
# need planning the structure
index = self.recv_packet()
self.send_packet("%d" % setting.callSucc)
#print "get_callStaticsCallSucc :", index
elif (str == 'get_callStaticsDropCall'):
# need planning the structure
index = self.recv_packet()
self.send_packet("%d" % setting.dropCall)
#print "get_callStaticsDropCall :", index
elif (str == 'get_callStaticsCallErr'):
# need planning the structure
index = self.recv_packet()
self.send_packet("%d" % setting.callErr)
#print "get_callStaticsDropCall :", index
#
# SNMP : etc
#
elif (str == 'get_manual_download_url'):
# ex) http://150.150.141.1:2020/
#server_url = 'http://%s:%d/'%(setting.download_server_ip, setting.download_server_port)
from dnsetting import down_setting
server_url = down_setting.get_download_server_url()
#print "get_manual_download_url :"
self.send_packet(server_url)
elif (str == 'set_manual_download_url'):
rec = self.recv_packet()
# TODO : http://server:port/
# ex) http://150.150.141.1:2020/
rec= rec.replace('http://', '')
rec=rec.split('/')[0]
#setting.download_server_ip = rec.split(':')[0]
#setting.download_server_port = int(rec.split(':')[1])
#setting._save()
from dnsetting import down_setting
if len(rec) !=0 :
down_setting.set_download_server_ip(rec.split(':')[0])
try:
down_setting.set_download_server_port(int(rec.split(':')[1]))
except:
down_setting.set_download_server_port(0)
else:
down_setting.set_download_server_ip("")
down_setting.set_download_server_port(0)
#print "set_manual_download_url :", rec
elif (str == 'start_again'):
print "kill snmp client and start again"
#
# SNMP : DOT11
#
elif (str == 'get_ssid' ):
self.send_packet(wifi_profile.essid)
elif (str == 'set_ssid' ):
str2 = self.recv_packet()
wifi_profile.essid = str2
wifi_profile.save()
elif (str == 'get_std_mode' ):
self.send_packet("b/g")
elif (str == 'set_std_mode' ):
str2 = self.recv_packet()
if config.snmp_debug:
print 'snmp: set_std_mode - handler undefined.'
self.send_packet("b/g")
elif (str == 'get_config_channel' ):
self.send_packet(wifi_profile.channelid)
elif (str == 'set_config_channel' ):
str2 = self.recv_packet()
if config.snmp_debug:
print 'snmp: set_config_channel - handler undefined.'
self.send_packet("0")
elif (str == 'get_current_channel' ):
if config.snmp_debug:
print 'snmp: get_current_channel - handler undefined.'
self.send_packet(wifi_profile.channelid)
elif (str == 'get_auth_mode' ):
# 1: open, 2: shared, 3: WPA, 4: WPA-PSK
ret = '1'
if wifi_profile.authentication == 'SHARED':
ret = '2'
elif wifi_profile.authentication == 'WPA':
ret = '3'
elif wifi_profile.authentication == 'WPA-PSK':
ret = '4'
self.send_packet(ret)
elif (str == 'set_auth_mode' ):
# 1: open, 2: shared, 3: WPA, 4: WPA-PSK
str2 = self.recv_packet()
ret = 'NONE'
if str2 == '2':
ret = 'SHARED'
elif str2 == '3':
ret = 'WPA'
elif str2 == '4':
ret = 'WPA-PSK'
wifi_profile.authentication = ret
wifi_profile.save()
#self.send_packet(str2)
elif (str == 'get_encryption_method' ):
# 1: none, 2: wep64, 3: wep128, 4: tkip, 5: aes
# shchun : how to handle tkip, aes??
ret = '1'
if wifi_profile.encryption == 'WEP64BIT':
ret = '2'
elif wifi_profile.encryption == 'WEP128BIT':
ret = '3'
self.send_packet(ret)
elif (str == 'set_encryption_method' ):
# 1: none, 2: wep64, 3: wep128, 4: tkip, 5: aes
str2 = self.recv_packet()
ret = 'NONE'
if str2 == '2':
ret = 'WEP64BIT'
elif str2 == '3':
ret = 'WEP128BIT'
wifi_profile.encryption = ret
wifi_profile.save()
#self.send_packet(str2)
elif (str == 'get_encryption_key' ):
auth = wifi_profile.authentication
enc = wifi_profile.encryption
ret = ''
if (auth == 'NONE' or auth == '') and (enc == 'NONE' or enc == ''):
#ret = 'N/A'
ret = ''
elif auth == 'WPA' and (enc == 'NONE' or enc == ''):
# shchun: need to revise
#ret = 'N/A'
ret = ''
elif auth == 'WPA-PSK' and (enc == 'NONE' or enc == ''):
ret = wifi_profile.wpa_psk_tkip
elif (auth == 'NONE' or auth == '') and (enc == 'WEP64BIT'):
kn = wifi_profile.wepkeyno_64
if kn == '1':
ret = wifi_profile.wepkey1_64
elif ke == '2':
ret = wifi_profile.wepkey2_64
elif ke == '3':
ret = wifi_profile.wepkey3_64
elif ke == '4':
ret = wifi_profile.wepkey4_64
else:
if config.snmp_debug:
print 'snmp: error key selection not acceptble...1'
elif (auth == 'NONE' or auth == '') and (enc == 'WEP64BIT'):
kn = wifi_profile.wepkeyno_128
if kn == '1':
ret = wifi_profile.wepkey1_128
elif ke == '2':
ret = wifi_profile.wepkey2_128
elif ke == '3':
ret = wifi_profile.wepkey3_128
elif ke == '4':
ret = wifi_profile.wepkey4_128
else:
if config.snmp_debug:
print 'snmp: error key selection not acceptble...2'
self.send_packet(ret)
elif (str == 'set_encryption_key' ):
str2 = self.recv_packet()
auth = wifi_profile.authentication
enc = wifi_profile.encryption
ret = ''
if (auth == 'NONE' or auth == '') and (enc == 'NONE' or enc == ''):
if config.snmp_debug:
print 'snmp: error key not acceptble...'
elif auth == 'WPA' and (enc == 'NONE' or enc == ''):
# shchun: need to revise
if config.snmp_debug:
print 'snmp: error key not acceptble...- WPA'
elif auth == 'WPA-PSK' and (enc == 'NONE' or enc == ''):
wifi_profile.wpa_psk_tkip = str2
elif (auth == 'NONE' or auth == '') and (enc == 'WEP64BIT'):
kn = wifi_profile.wepkeyno_64
if kn == '1':
wifi_profile.wepkey1_64 = str2
elif ke == '2':
wifi_profile.wepkey2_64 = str2
elif ke == '3':
wifi_profile.wepkey3_64 = str2
elif ke == '4':
wifi_profile.wepkey4_64 = str2
else:
if config.snmp_debug:
print 'snmp: error key selection not acceptble...3'
elif (auth == 'NONE' or auth == '') and (enc == 'WEP64BIT'):
kn = wifi_profile.wepkeyno_128
if kn == '1':
wifi_profile.wepkey1_128 = str2
elif ke == '2':
wifi_profile.wepkey2_128 = str2
elif ke == '3':
wifi_profile.wepkey3_128 = str2
elif ke == '4':
wifi_profile.wepkey4_128 = str2
else:
if config.snmp_debug:
print 'snmp: error key selection not acceptble...4'
wifi_profile.save()
elif (str == 'get_signal_level' ):
# need to revise
try:
pvalue = os.popen('wl rssi')
pstr = pvalue.read()
pstr = pstr[:-1]
def get_siglevel(pwr):
val = abs(int(pwr))
icon_idx='0'
if val == 0:
icon_idx='0'
elif 0 < val and val <= 55:
icon_idx='5'
elif 55 < val and val <= 65:
icon_idx='4'
elif 65 < val and val <= 75:
icon_idx='3'
elif 75 < val and val <= 85:
icon_idx='2'
else:
icon_idx='1'
return icon_idx
#print 'pstr == ', pstr
self.send_packet(get_siglevel(pstr))
except:
#print 'wifi-exception'
self.send_packet('0')
elif (str== 'set_restart_web_server'):
# add Mar31 upon request of Cho
os.system("killall webs")
os.system("webs &")
elif (str == 'test'):
self.send_packet('ok')
# KA: [20080403] snmp UI
elif (str == 'get_linestatus'):
if self.check_download_ready() == True:
# CALL이 오는 경우 BUSY처리를 위해
status.snmp_start = True
self.send_packet('ok')
else:
self.send_packet('busy')
elif (str == 'found_download_module'):
stage = SnmpDownloadStage()
runtime.manager.change_stage(stage)
elif (str.startswith ('total_number_of_files:')):
key, value = str.split(':')
self.total_files = value
elif (str.startswith('current_package:')):
key, value = str.split(':')
self.currrent_file = value
#print '##############', self.total_files, self.currrent_file
#stage = SnmpDownloadingStage(self.total_files, self.currrent_file)
if runtime.manager.stage.get_name() == 'snmpdownload':
stage = SnmpDownloadingStage(self.total_files, self.currrent_file)
runtime.manager.change_stage(stage)
elif runtime.manager.stage.get_name() == 'snmpfail':
stage = SnmpDownloadingStage(self.total_files, self.currrent_file)
runtime.manager.change_stage(stage)
else:
runtime.manager.stage.update_currrent_file(self.currrent_file)
elif (str.startswith('percentage_of_current_file:')):
key, value = str.split(':')
current_ps = value
if runtime.manager.stage.get_name() == 'snmpdownloading':
runtime.manager.stage.update_status(current_ps)
self.send_packet('ok')
elif (str.startswith('install_downloaded_modules')):
stage = SnmpDownloadInstallStage()
runtime.manager.change_stage(stage)
elif (str == 'install_finished'):
stage = FullNotifyStage(_('Install complete.')+ '\n' +('Reboot')+'...', uiconfig.baloon_message_icon)
runtime.manager.change_stage(stage)
import utils, time
if runtime.vdciapp:
runtime.vdciapp.req_deregister()
time.sleep(1)
utils.releaseDhcp()
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin
utils.vega_reset_together()
#end of MMW
#MMW 2008.07.07 when reboot send disassoc to AP and then unload the driver
os.system('wlstop')
#end of MMW
time.sleep(1)
os.system('reboot')
elif (str.startswith('download_error:')):
key, value = str.split(":")
if (value == '20'):
#stage = NotifyStage(_('Download login failed.'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download login failed.'), uiconfig.baloon_message_icon)
elif (value == '21'):
#stage = NotifyStage(_('Download connection failed.'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download connection failed'), uiconfig.baloon_message_icon)
elif (value == '22'):
#stage = NotifyStage(_('Download connection failed.'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download connection failed'), uiconfig.baloon_message_icon)
elif (value == '24'):
#stage = NotifyStage(_('Download server failed.'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download server failed.'), uiconfig.baloon_message_icon)
elif (value == '27'):
#stage = NotifyStage(_('Download checksum failed.'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download checksum failed.'), uiconfig.baloon_message_icon)
else:
#stage = NotifyStage(_('Download server setting is not valid'), uiconfig.baloon_message_icon)
stage = NotifyStage(_('Download failed'), uiconfig.baloon_message_icon)
runtime.manager.change_stage(stage, True)
#print "download error"
#call 허용
status.snmp_start = False
elif (str == 'get_retry'):
if runtime.manager.stage.get_name() == 'snmpfail':
user_input = runtime.manager.stage.user_input()
self.send_packet(user_input)
if user_input == 'no':
runtime.manager.change_stage(IdleStage, True)
elif (str == 'get_upgrade_status'): #send download status to SNMP
strval= '%s'%runtime.manual_down_status
self.send_packet(strval)
elif (str == 'set_callinfo_trap_control'):
lvalue = self.recv_packet()
self.set_callinfo_trap_control(int(lvalue))
elif (str == 'set_call_statistics_trap_control'):
lvalue = self.recv_packet()
self.set_call_statistics_trap_control(int(lvalue))
elif (str == 'reboot'):
# IMPROVEME: noti user...
def reset_cb():
import utils, time
if runtime.vdciapp:
runtime.vdciapp.req_deregister()
time.sleep(1)
utils.releaseDhcp()
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin
utils.vega_reset_together()
#end of MMW
#MMW 2008.07.07 when reboot send disassoc to AP and then unload the driver
os.system('wlstop')
#end of MMW
time.sleep(1)
os.system('reboot')
stage = NotifyStage( _('The phone will be reboot shortly'), uiconfig.baloon_setting_system_reset_icon, reset_cb)
runtime.manager.stack_stage(stage)
elif (str == 'set_configInit'):
cval= self.recv_packet()
def reset_cb():
import utils,time
if runtime.vdciapp:
runtime.vdciapp.req_deregister()
time.sleep(1)
utils.releaseDhcp()
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin
utils.vega_reset_together()
#end of MMW
#MMW 2008.07.07 when reboot send disassoc to AP and then unload the driver
os.system('wlstop')
#end of MMW
time.sleep(1)
os.system('reboot')
def sys_reset():
import utils
utils.system_reset()
stage = NotifyStage( _('The phone will be reboot shortly'), uiconfig.baloon_setting_system_reset_icon, reset_cb)
runtime.manager.stack_stage(stage)
def setting_reset():
#utils.system_reset()
setting.reset()
stage = NotifyStage( _('The phone will be reboot shortly'), uiconfig.baloon_setting_system_reset_icon, reset_cb)
runtime.manager.stack_stage(stage)
if cval == '1':
# factory init
reset_action = sys_reset
message = _('System reset!')
else:
reset_action = setting_reset
message = _('Settings reset!')
reset_duration = 3000
stage = NotifyStage(message, uiconfig.baloon_setting_system_reset_icon, reset_action, duration=reset_duration)
runtime.manager.stack_stage(stage)
# setting init
# KA: [20080403] snmp UI ==
else:
if config.snmp_debug:
print 'snmp: ERROR no handler for', str
return True
def check_download_ready(self):
if runtime.manager.stage.get_name() == 'idle':
return True
else:
return False
# KA: [20080403] snmp UI
class SnmpDownloadStage(Stage):
name = 'snmpdownload'
def __init__(self):
#message = _('New software detacted.') + '\n' +_('Start updating')
message = _('New software detacted.') + '\n' +_('Start updating')
icon = uiconfig.phone_setting_icon
self.ui = NotifyUI(message)
def handle_key(self, key):
return True
# for test
if key in ('1', '2', '3', '4', '5', '6', '7', '8', '9'):
stage = SnmpDownloadingStage(5, 1)
runtime.manager.change_stage(stage)
return False
class SnmpDownloadingStage(Stage):
name = 'snmpdownloading'
def __init__(self, total_files='', currrent_file='', step=1):
#msg = _('Updating S/W.')+'\n'+_('Dont turn off the power.')+'\n'+('Please wait for a monent.')+'\n'+ ('Updating...')
msg = _('Updating S/W.') + '\n' + _('Dont turn off the power.')# + '\n' + _('Updating...')
# UI object add
self.ui = FullBaloonDownloadUI(message = msg)
self.ui.set_state(currrent_file, total_files)
def update_status(self, current_ps):
self.ui.set_value(current_ps)
def update_currrent_file(self, current_file):
self.ui.set_current_file(current_file)
def handle_key(self, key):
return True
# for test
if key in ('1', '2', '3', '4', '5', '6', '7', '8', '9'):
self.update_status(key)
elif key == config.Menu1:
stage = SnmpDownloadInstallStage()
runtime.manager.change_stage(stage)
return True
return False
class SnmpDownloadInstallStage(Stage):
name = 'snmpdownloadinstall'
def __init__(self):
icon = uiconfig.phone_setting_icon
#msg = _('S/W download complete.')+ '\n' + ('Please wait for a monent.')
message = _('Download finished') + _('After reboot, continues to update software')
self.ui = NotifyUI(message, icon)
# UI object add
#self.ui = FullBaloonDownloadUI(message = msg, auto_duration = True)
#self.ui.update_status()
self.reboot_timer = utils.Timer(2*1000, self.rebooting)
def rebooting(self):
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin
utils.vega_reset_together()
#end of MMW
#MMW 2008.07.07 when reboot send disassoc to AP and then unload the driver
os.system('wlstop')
#end of MMW
os.system('reboot')
def destroy(self):
self.ui.progress_timer = None
Stage.destroy(self)
def handle_key(self, key):
return True
# for test
if key in ('1', '2', '3', '4', '5', '6', '7', '8', '9'):
self.update_status(key)
return False
class SnmpFailStage(Stage):
name = 'snmpfail'
def __init__(self):
icon = uiconfig.phone_setting_icon
msg = _('Download server setting is not valid')
self.ui = FullNotifyUI(msg, icon, '', _('OK'), '')
self.choice = 'yet'
def yes_cb(self):
self.choice = 'ok'
def no_cb(self):
self.choice = 'no'
def user_input(self):
return self.choice
def handle_key(self, key):
if key == config.Menu1 or key == config.Red:
runtime.manager.change_stage(IdleStage, True)
return True
'''
name = 'snmpfail'
def __init__(self,left =_('YES'), right=_('NO')):
icon = uiconfig.phone_setting_icon
msg = _('Download faied, Retry?.')
self.ui = FullNotifyUI(msg, icon, '', left, right)
self.choice = 'yet'
def yes_cb(self):
self.choice = 'ok'
def no_cb(self):
self.choice = 'no'
def user_input(self):
return self.choice
def handle_key(self, key):
if key == config.Menu1: self.yes_cb()
elif key == config.Menu2: self.no_cb()
else: return False
return True
'''
# KA: [20080403] snmp UI ==