X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FSystemPlugins%2FWirelessLanSetup%2Fplugin.py;h=fdd1d53ac0d0f189e1d67dd6787cc3d85ff7dad0;hp=f9b470bde81cc2bf068feb2b7a7c64410ce2c1bb;hb=bd1476c4800f2d3d9025db14fcb8fc168d87006a;hpb=b262e4f55d10fa6c805a03a436dde5a074b45e86 diff --git a/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py index f9b470b..fdd1d53 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py @@ -27,26 +27,25 @@ from os import path as os_path, system as os_system, unlink,listdir from re import compile as re_compile, search as re_search from Tools.Directories import fileExists import time +from pythonwifi.iwlibs import Wireless +import pythonwifi.flags class WlanSelection(Screen,HelpableScreen): - skin = """ - - - - - - - Format:%H:%M - - - - - - - - - """ - + skin = """ + + + + + + + + + + + + + + """ def __init__(self, session): Screen.__init__(self,session) HelpableScreen.__init__(self) @@ -67,68 +66,96 @@ class WlanSelection(Screen,HelpableScreen): "green": (self.ok, _("select interface")), "red": (self.close, _("exit network interface list")), }) + self.updateInterfaces() + self.onClose.append(self.cleanup) + + def updateInterfaces(self): + iNetwork.config_ready = False + iNetwork.msgPlugins() + iNetwork.getInterfaces() + + def checkIfaceMode(self, iface = None): + try: + obj = Wireless(iface) + if obj.getMode() == 'Master': + return -1 + else: + return 0 + except: + return -2 def ok(self): # print len(self["menulist"].list) if len(self["menulist"].list) == 0: self.session.open(MessageBox, (_("Can not find any WirelessLan Module\n")),MessageBox.TYPE_ERROR,5 ) return - ifaces=self["menulist"].getCurrent()[1] - if ifaces == None: - pass - else: - self.session.open(WlanSetup,ifaces) + iface=self["menulist"].getCurrent()[1] + if iface == None: + return + elif iNetwork.getAdapterAttribute(iface, "up") == True: + ret = self.checkIfaceMode(iface) + if ret == -2: + self.session.open(MessageBox, (_("Invalid WirelessLan Module.\n")),MessageBox.TYPE_ERROR,5 ) + return + elif ret == -1: + self.session.open(MessageBox, (_("Can not setup WirelessLan Module in 'AP Mode'\n")),MessageBox.TYPE_ERROR,5 ) + return + self.session.open(WlanSetup, iface) def getWlandevice(self): list = [] - for x in iNetwork.getAdapterList(): - if x.startswith('eth'): + for x in iNetwork.getInstalledAdapters(): + if x.startswith('eth') or x.startswith('br') or x.startswith('mon'): continue - list.append((self.getAdapterDescription(x) + " (%s)"%x,x)) + description=self.getAdapterDescription(x) + if description == "Unknown network adapter": + list.append((description,x)) + else: + list.append((description + " (%s)"%x,x)) return list def getAdapterDescription(self, iface): - if iface == 'eth0': - return _("Internal LAN adapter.") - else: - classdir = "/sys/class/net/" + iface + "/device/" - driverdir = "/sys/class/net/" + iface + "/device/driver/" - if os_path.exists(classdir): - files = listdir(classdir) - if 'driver' in files: - if os_path.realpath(driverdir).endswith('rtw_usb_drv'): - return _("Realtak")+ " " + _("WLAN adapter.") - elif os_path.realpath(driverdir).endswith('ath_pci'): - return _("Atheros")+ " " + _("WLAN adapter.") - elif os_path.realpath(driverdir).endswith('zd1211b'): - return _("Zydas")+ " " + _("WLAN adapter.") - elif os_path.realpath(driverdir).endswith('rt73'): - return _("Ralink")+ " " + _("WLAN adapter.") - elif os_path.realpath(driverdir).endswith('rt73usb'): - return _("Ralink")+ " " + _("WLAN adapter.") - else: - return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter") + classdir = "/sys/class/net/" + iface + "/device/" + driverdir = "/sys/class/net/" + iface + "/device/driver/" + if os_path.exists(classdir): + files = listdir(classdir) + if 'driver' in files: + if os_path.realpath(driverdir).endswith('rtw_usb_drv'): + return _("Realtek")+ " " + _("WLAN adapter.") + elif os_path.realpath(driverdir).endswith('ath_pci'): + return _("Atheros")+ " " + _("WLAN adapter.") + elif os_path.realpath(driverdir).endswith('zd1211b'): + return _("Zydas")+ " " + _("WLAN adapter.") + elif os_path.realpath(driverdir).endswith('rt73'): + return _("Ralink")+ " " + _("WLAN adapter.") + elif os_path.realpath(driverdir).endswith('rt73usb'): + return _("Ralink")+ " " + _("WLAN adapter.") else: - return _("Unknown network adapter.") + return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter") + else: + return _("Unknown network adapter") + else: + return _("Unknown network adapter") + + def cleanup(self): + iNetwork.stopGetInterfacesConsole() class WlanSetup(Screen,HelpableScreen): - skin = """ - - - - - - - Format:%H:%M - - - - - - - - - """ + skin = """ + + + + + + + + + + + + + + """ def __init__(self, session, ifaces): Screen.__init__(self, session) HelpableScreen.__init__(self) @@ -180,6 +207,7 @@ class WlanSetup(Screen,HelpableScreen): "left": self.left, "right": self.right, }, -2) + self.onClose.append(self.cleanup) def loadDescription(self): if self["menulist"].getCurrent()[1] == 'setting': @@ -212,10 +240,11 @@ class WlanSetup(Screen,HelpableScreen): self.loadDescription() def ok(self): + self.cleanup() if self["menulist"].getCurrent()[1] == 'setting': self.session.openWithCallback(self.checklist, WlanConfig, self.iface) elif self["menulist"].getCurrent()[1] == 'scanap': - self.session.open(WlanScanAp, self.iface) + self.session.openWithCallback(self.WlanScanApCallback, WlanScanAp, self.iface) elif self["menulist"].getCurrent()[1] == 'dns': self.session.open(NameserverSetup) elif self["menulist"].getCurrent()[1] == 'status': @@ -232,7 +261,7 @@ class WlanSetup(Screen,HelpableScreen): menu = [] menu.append((_("Adapter settings"), "setting")) menu.append((_("Scan Wireless AP"), "scanap")) - menu.append((_("Nameserver settings"), "dns")) +# menu.append((_("Nameserver settings"), "dns")) if iNetwork.getAdapterAttribute(self.iface, "up"): menu.append((_("Show WLAN Status"), "status")) menu.append((_("Network test"), "test")) @@ -240,6 +269,10 @@ class WlanSetup(Screen,HelpableScreen): return menu + def WlanScanApCallback(self, essid = None): + if essid is not None: + self.session.openWithCallback(self.checklist, WlanConfig, self.iface, essid) + def restartLan(self, ret = False): if (ret == True): iNetwork.restartNetwork(self.restartLanDataAvail) @@ -257,6 +290,10 @@ class WlanSetup(Screen,HelpableScreen): if data is True: self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 5, default = False) + def cleanup(self): + iNetwork.stopRestartConsole() + iNetwork.stopGetInterfacesConsole() + wlanconfig = ConfigSubsection() wlanconfig.usedevice = ConfigSelection(default = "off", choices = [ ("off", _("off")), ("on", _("on"))]) @@ -269,7 +306,7 @@ wlanconfig.method = ConfigSelection(default = "wep", choices = [ ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))]) wlanconfig.keytype = ConfigSelection(default = "ascii", choices = [ ("ascii", _("ASCII")), ("hex", _("HEX"))]) -wlanconfig.key = ConfigText(default = "XXXXXXXX", visible_width = 50, fixed_size = False) +wlanconfig.key = ConfigPassword(default = "XXXXXXXX", visible_width = 50, fixed_size = False) wlanconfig.usegateway = ConfigSelection(default = "off", choices = [ ("off", _("no")), ("on", _("yes"))]) wlanconfig.ip = ConfigIP([0,0,0,0]) @@ -278,37 +315,45 @@ wlanconfig.gateway = ConfigIP([0,0,0,0]) selectap = None class WlanConfig(Screen, ConfigListScreen, HelpableScreen): - skin = """ - - - - - - - Format:%H:%M - - - - - - - - - - - - - - """ - - def __init__(self, session, iface): + skin = """ + + + + + + + + + + + + + + + + + + + + + + + """ + def __init__(self, session, iface, essidSelected = None): Screen.__init__(self,session) self.session = session self["key_red"] = StaticText(_("Close")) - self["key_grean"] = StaticText(_("Ok")) + self["key_green"] = StaticText(_("Ok")) + self["ipaddresstext"] = StaticText(_("IP Address")) self["ipaddress"] = StaticText(_("[ N/A ]")) - self["netmask"] = StaticText(_("[ N/A ]")) + self["netmasktext"] = StaticText(_("NetMask")) + self["netmask"] = StaticText(_("[ N/A ]")) + self["gatewaytext"] = StaticText(_("Gateway")) self["gateway"] = StaticText(_("[ N/A ]")) + self["DNS1text"] = StaticText(_("Primary DNS")) + self["DNS1"] = StaticText(_("[ N/A ]")) + self["DNS2text"] = StaticText(_("Secondary DNS")) + self["DNS2"] = StaticText(_("[ N/A ]")) self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ], { "ok": self.saveWlanConfig, @@ -316,7 +361,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): "cancel": self.keyCancel, "red": self.keyCancel, }, -2) + self["HelpWindow"] = Pixmap() + self["HelpWindow"].hide() + self["VKeyIcon"] = Pixmap() + self["VKeyIcon"].hide() self.iface = iface + self.essidSelected = essidSelected self.ssid = None self.ap_scan = None self.scan_ssid = None @@ -325,19 +375,27 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.key_type = None self.encryption_key = None self.wlanscanap = None - self.scanAPcount =5 + self.wpaphraseconsole = None self.list = [] ConfigListScreen.__init__(self, self.list,session = self.session) self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") self.readWpaSupplicantConf() -# iNetwork.getInterfaces() - self.readWlanSettings() self.scanAplistTimer = eTimer() self.scanAplistTimer.callback.append(self.scanApList) - self.scanAplistTimer.start(100,True) + self.emptyListMsgTimer = eTimer() + self.emptyListMsgTimer.callback.append(self.emptyListMsg) self.Console = Console() + self.updateInterfaces(self.readWlanSettings) + self.onClose.append(self.cleanup) + + def updateInterfaces(self,callback = None): + iNetwork.config_ready = False + iNetwork.msgPlugins() + iNetwork.getInterfaces(callback) - def readWlanSettings(self): + def readWlanSettings(self,ret=None): + if ret is not True: + print "getInterfaces Fail... " if iNetwork.getAdapterAttribute(self.iface, "up") == True: default_tmp = "on" else: @@ -350,6 +408,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): default_tmp = "off" wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))]) + if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"): + self.dnsconfigdefault="on" + else: + self.dnsconfigdefault="off" + wlanconfig.hasdnsconfigentry = ConfigSelection(default=self.dnsconfigdefault, choices = [("off", _("no")), ("on", _("yes"))]) + wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0] wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]) @@ -361,9 +425,15 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): wlanconfig.gateway = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]) - self["ipaddress"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "ip")))) - self["netmask"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask")))) - self["gateway"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway")))) + self["ipaddress"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "ip")))) + self["netmask"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask")))) + self["gateway"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway")))) + + nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] + self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) + self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) + self["DNS1"].setText(self.primaryDNS.getText()) + self["DNS2"].setText(self.secondaryDNS.getText()) if self.encryption_key is not None: default_tmp = "on" @@ -395,7 +465,8 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): wlanconfig.keytype = ConfigSelection(default = default_tmp, choices = [ ("ascii", _("ASCII")), ("hex", _("HEX"))]) default_tmp = self.encryption_key or "XXXXXXXX" - wlanconfig.key = ConfigText(default = default_tmp, visible_width = 50, fixed_size = False) + wlanconfig.key = ConfigPassword(default = default_tmp, visible_width = 50, fixed_size = False) + self.getApList() def readWpaSupplicantConf(self): try: @@ -429,11 +500,14 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): elif data.startswith('psk="') and len(data) > 6: self.key_type = 1 # ascii self.encryption_key = data[5:-2] - elif data.startswith('psk=') and len(data) > 4: + elif data.startswith('#psk="') and len(data) > 6: + self.key_type = 0 # hex + self.encryption_key = data[6:-2] + elif not self.encryption_key and data.startswith('psk=') and len(data) > 4: self.key_type = 0 # hex self.encryption_key = data[4:-1] data = wpafd.readline() - print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.wep_key +# print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key wpafd.close() else: print 'read error' @@ -459,6 +533,16 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway) self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway) + manualNameservers = (iNetwork.getInterfacesNameserverList(self.iface) + [[0,0,0,0]] * 2)[0:2] + self.manualPrimaryDNS = NoSave(ConfigIP(default=manualNameservers[0])) + self.manualSecondaryDNS = NoSave(ConfigIP(default=manualNameservers[1])) + nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] + self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) + self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) + self.DNSConfigEntry = getConfigListEntry(_("Use Manual dns-nameserver"), wlanconfig.hasdnsconfigentry) + self.primaryDNSConfigEntry = getConfigListEntry(_('Primary DNS'), self.manualPrimaryDNS) + self.secondaryDNSConfigEntry = getConfigListEntry(_('Secondary DNS'), self.manualSecondaryDNS) + self.configList.append( self.usedeviceEntry ) if wlanconfig.usedevice.value is "on": self.configList.append( self.usedhcpEntry ) @@ -468,85 +552,93 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.configList.append(self.usegatewayEntry) if wlanconfig.usegateway.value is "on": self.configList.append(self.gatewayEntry) + if wlanconfig.usedhcp.value is "on": + self.configList.append(self.DNSConfigEntry) + if wlanconfig.hasdnsconfigentry.value is "on" or wlanconfig.usedhcp.value is "off": + self.configList.append(self.primaryDNSConfigEntry) + self.configList.append(self.secondaryDNSConfigEntry) + self.configList.append( self.essidEntry ) - print "#### wlanconfig.essid.value : ",wlanconfig.essid.value if wlanconfig.essid.value == 'Input hidden ESSID': self.configList.append( self.hiddenessidEntry ) self.configList.append( self.encryptEntry ) if wlanconfig.encrypt.value is "on" : self.configList.append( self.methodEntry ) - self.configList.append( self.keytypeEntry ) + if wlanconfig.method.value =="wep": + self.configList.append( self.keytypeEntry ) self.configList.append( self.keyEntry ) self["config"].list = self.configList self["config"].l.setList(self.configList) -# if not self.selectionChanged in self["config"].onSelectionChanged: -# self["config"].onSelectionChanged.append(self.selectionChanged) - - def scanApList(self): - self.apList = [] - self.scanAPcount -=1 - self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False) - os_system('ifconfig '+self.iface+" up") - self.wlanscanap = Console() - cmd = "iwlist "+self.iface+" scan" - print 'cmd',cmd - self.wlanscanap.ePopen(cmd, self.apListFinnished,self.apListParse) - - def apListFinnished(self, result, retval,extra_args): - (callback) = extra_args - if self.wlanscanap is not None: - if retval == 0: - self.wlanscanap = None - content = result.splitlines() - first = content[0].split() - completed = False - for x in first: - if x == 'completed': - completed = True - if completed == True: - callback(result) - else: - callback(0) - else: - callback(0) + if not self.showTextIcon in self["config"].onSelectionChanged: + self["config"].onSelectionChanged.append(self.showTextIcon) - def apListParse(self,data): - global selectap - if data == 0: - if self.scanAPcount >0: - self.configurationmsg.close(True) - self.scanAplistTimer.start(100,True) - return - else: - self.configurationmsg.close(True) - self.session.open(MessageBox, _("Scan AP Failed"), MessageBox.TYPE_INFO,2) - return + def showTextIcon(self): + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + self["VKeyIcon"].show() else: + self["VKeyIcon"].hide() + + def getApList(self): + if self.essidSelected is None: self.apList = [] - self.scanAPcount =5 - list = data.splitlines() - for x in list: - xx = x.lstrip() - if xx.startswith('ESSID:') and len(xx)>8: - self.apList.append(xx[7:-1]) - self.apList.append('Input hidden ESSID') - print "###### selectap : ",selectap - if selectap is not None and selectap in self.apList: - wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList) - elif self.ap_scan is not None and self.ap_scan.strip() == '2': - wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList) - elif self.ssid is not None and self.ssid in self.apList: - wlanconfig.essid = ConfigSelection(default=self.ssid,choices = self.apList) - else: - wlanconfig.essid = ConfigSelection(choices = self.apList) + self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False) + self.scanAplistTimer.start(100,True) + else: + self.apList = [self.essidSelected] + wlanconfig.essid = ConfigSelection(choices = self.apList) if self.ssid is not None: wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False) else: wlanconfig.hiddenessid = ConfigText(default = "", visible_width = 50, fixed_size = False) + self.createConfig() + + def getScanResult(self, wirelessObj): + Iwscanresult = None + try: + Iwscanresult = wirelessObj.scan() + except IOError: + print "%s Interface doesn't support scanning.."%self.iface + return Iwscanresult + + def scanApList(self): + if self.oldInterfaceState is not True: + os_system("ifconfig "+self.iface+" up") + iNetwork.setAdapterAttribute(self.iface, "up", True) + wirelessObj = Wireless(self.iface) + Iwscanresult=self.getScanResult(wirelessObj) + if Iwscanresult is None or len(Iwscanresult.aplist) == 0 : + import time + time.sleep(1.5) + Iwscanresult=self.getScanResult(wirelessObj) self.configurationmsg.close(True) + if Iwscanresult is None or len( Iwscanresult.aplist) == 0: + self.emptyListMsgTimer.start(100,True) + else: + for ap in Iwscanresult: + if ap.essid is not None and ap.essid not in self.apList and len(ap.essid) > 0: + self.apList.append(ap.essid) + self.apList.append('Input hidden ESSID') + if selectap is not None and selectap in self.apList: + wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList) + elif self.scan_ssid is not None and self.scan_ssid.strip() == '1': + wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList) + elif self.ssid is not None and self.ssid in self.apList: + wlanconfig.essid = ConfigSelection(default=self.ssid, choices = self.apList) + else: + try: + wlanconfig.essid = ConfigSelection(defalut = self.apList[0], choices = self.apList) + except: + wlanconfig.essid = ConfigSelection(choices = self.apList) + if self.ssid is not None: + wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False) + else: + wlanconfig.hiddenessid = ConfigText(default = "", visible_width = 50, fixed_size = False) self.createConfig() + def emptyListMsg(self): + self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10) + def keyLeft(self): ConfigListScreen.keyLeft(self) self.newConfig() @@ -558,17 +650,36 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): def newConfig(self): if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \ or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \ - or self["config"].getCurrent() == self.essidEntry: + or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry \ + or self["config"].getCurrent() == self.DNSConfigEntry: self.createConfig() def saveWlanConfig(self): - if self["config"].isChanged(): - self.session.openWithCallback(self.checkNetworkShares, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) ) + try: + if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry : + self["config"].getCurrent()[1].onDeselect(self.session) + if self["config"].isChanged(): + self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) ) + else: + self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) ) + except: + pass - def checkNetworkShares(self,ret = False): + def checkNetworkConfig(self, ret = False): if ret == False: + if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry : + self["config"].getCurrent()[1].onSelect(self.session) return - print "########## checkNetworkShares : " + if wlanconfig.essid.value == 'Input hidden ESSID': + if len(wlanconfig.hiddenessid.value) == 0: + self.session.open(MessageBox, ("PLEASE INPUT HIDDEN ESSID"), type = MessageBox.TYPE_ERROR, timeout = 10) + return + if len(wlanconfig.key.value) == 0: + self.session.open(MessageBox, ("PLEASE INPUT NETWORK KEY"), type = MessageBox.TYPE_ERROR, timeout = 10) + return + self.checkNetworkShares() + + def checkNetworkShares(self): if not self.Console: self.Console = Console() cmd = "cat /proc/mounts" @@ -576,13 +687,15 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): def checkSharesFinished(self, result, retval, extra_args): callback = extra_args - print "checkMountsFinished : result : \n",result +# print "checkMountsFinished : result : \n",result networks = ['nfs','smbfs','ncp','coda'] for line in result.splitlines(): split = line.strip().split(' ',3) if split[2] in networks: self.session.open(MessageBox, ("NOT deconfiguring network interfaces :\n network shares still mounted\n"), type = MessageBox.TYPE_ERROR, timeout = 10) callback(False) + if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry : + self["config"].getCurrent()[1].onSelect(self.session) return callback(True) @@ -593,13 +706,13 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 1: if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters(): - self.writeWlanConfig(False) + self.getWpaPhrase(False) else: - self.session.openWithCallback(self.writeWlanConfig, MessageBox, (_("Are you sure you want to deactive another network interfaces?\n") ) ) + self.session.openWithCallback(self.getWpaPhrase, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) else: - self.writeWlanConfig(False) + self.getWpaPhrase(False) - def writeWlanConfig(self,ret = False): + def getWpaPhrase(self,ret): if ret == True: configuredInterfaces = iNetwork.getConfiguredAdapters() for interface in configuredInterfaces: @@ -607,134 +720,132 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): continue iNetwork.setAdapterAttribute(interface, "up", False) iNetwork.deactivateInterface(interface) - ret=self.writeWpasupplicantConf() - if ret == -1: - self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10) - return - elif ret == -2: - self.session.open(MessageBox, _("hidden ESSID empty"), type = MessageBox.TYPE_ERROR, timeout = 10) - return - iffd = open("/etc/network/interfaces","r") - if iffd > 0: - prev_content = "" - next_content = "" - data = iffd.readline() - status = 0 - while len(data) >0 : - if data.startswith('iface '+self.iface) or data.startswith('auto '+self.iface): - status = 1 - data = iffd.readline() - continue - elif not data.startswith('auto lo') and data.startswith('auto '): - if ret == True or data[5:] not in iNetwork.getConfiguredAdapters(): - data = iffd.readline() - continue - if status == 1 and data.startswith('iface ') or data.startswith('auto '): - status = 2 - if status == 0: - prev_content += data - elif status == 2: - next_content += data - data = iffd.readline() - iffd.close() - iffd = open("/etc/network/interfaces","w") - if iffd > 0 : - if prev_content == "": - prev_content = "# automatically generated by STB\n" - prev_content += "# do Not change manually!\n\n" - prev_content += "auto lo\n" - prev_content += "iface lo inet loopback\n\n" - iffd.write(prev_content) - if wlanconfig.usedevice.value=="on": - iNetwork.setAdapterAttribute(self.iface, "up", True) - contents = "auto "+self.iface+"\n" - contents += "iface "+self.iface+" inet " - if wlanconfig.usedhcp.value =="on": - iNetwork.setAdapterAttribute(self.iface, "dhcp", True) - contents +="dhcp\n" + if wlanconfig.method.value =="wep": + self.writeWpasupplicantConf("wep") # passphrasekey is not None + else: + if wlanconfig.essid.value == 'Input hidden ESSID': + cmd = "wpa_passphrase '%s' %s" % (wlanconfig.hiddenessid.value,wlanconfig.key.value) + else : + cmd = "wpa_passphrase '%s' %s" % (wlanconfig.essid.value,wlanconfig.key.value) + print cmd + self.wpaphraseconsole = Console() + self.wpaphraseconsole.ePopen(cmd, self.parseWpaPhrase, self.writeWpasupplicantConf) + + def parseWpaPhrase(self, result, retval, extra_args): + (writewlanconfig) = extra_args + if self.wpaphraseconsole is not None: + if retval == 0: + self.wpaphraseconsole.killAll() + self.wpaphraseconsole = None +# print "parseWpaPhrase result : " +# print result + psk = None + for line in result.splitlines(): + if line.find('ssid') == -1 and line.find('#psk=') != -1: + plainpwd = line + elif line.find('psk=') != -1: + psk = line + if psk: + writewlanconfig(psk,plainpwd) + else: + writewlanconfig(None) + else: + writewlanconfig(None) + + def writeWpasupplicantConf(self, passphrasekey=None,plainpwd=None): + if passphrasekey: + wpafd = open("/etc/wpa_supplicant.conf","w") + if wpafd > 0: + contents = "#WPA Supplicant Configuration by STB\n" + contents += "ctrl_interface=/var/run/wpa_supplicant\n" + contents += "eapol_version=1\n" + contents += "fast_reauth=1\n" + contents += "ap_scan=1\n" + contents += "network={\n" + if wlanconfig.essid.value == 'Input hidden ESSID': + contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n" + contents += "\tscan_ssid=1\n" + else : + contents += "\tssid=\""+wlanconfig.essid.value+"\"\n" + contents += "\tscan_ssid=0\n" + if wlanconfig.encrypt.value == "on": + if wlanconfig.method.value =="wep": + contents += "\tkey_mgmt=NONE\n" + contents += "\twep_key0=" + if wlanconfig.keytype.value == "ascii": + contents += "\""+wlanconfig.key.value+"\"\n" + else: + contents += wlanconfig.key.value+"\n" else: - iNetwork.setAdapterAttribute(self.iface, "dhcp", False) - contents +="static\n" - print wlanconfig.ip.value - iNetwork.setAdapterAttribute(self.iface, "ip", wlanconfig.ip.value) - iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value) - contents +="\taddress "+ self.formatip(wlanconfig.ip.value)+"\n" - contents +="\tnetmask "+ self.formatip(wlanconfig.netmask.value)+"\n" - if wlanconfig.usegateway.value == "on": - iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value) - contents +="\tgateway "+ self.formatip(wlanconfig.gateway.value)+"\n" - contents += "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n" - contents += "\tpost-down wpa_cli terminate\n\n" - iffd.write(contents) +# print "plainpwd : ",plainpwd +# print "passphrasekey : ",passphrasekey + if wlanconfig.method.value == "wpa": + contents += "\tkey_mgmt=WPA-PSK\n" + contents += "\tproto=WPA\n" + contents += "\tpairwise=CCMP TKIP\n" + contents += "\tgroup=CCMP TKIP\n" + elif wlanconfig.method.value == "wpa2": + contents += "\tkey_mgmt=WPA-PSK\n" + contents += "\tproto=RSN\n" + contents += "\tpairwise=CCMP TKIP\n" + contents += "\tgroup=CCMP TKIP\n" + else: + contents += "\tkey_mgmt=WPA-PSK\n" + contents += "\tproto=WPA RSN\n" + contents += "\tpairwise=CCMP TKIP\n" + contents += "\tgroup=CCMP TKIP\n" + contents += plainpwd+"\n" + contents += passphrasekey+"\n" else: - iNetwork.setAdapterAttribute(self.iface, "up", False) - iNetwork.deactivateInterface(self.iface) - iffd.write(next_content) - iffd.close() - else : - self.session.open(MessageBox, _("/etc/network/interfaces open error."), type = MessageBox.TYPE_ERROR, timeout = 10) + contents += "\tkey_mgmt=NONE\n" + contents += "}\n" + print "content = \n"+contents + wpafd.write(contents) + wpafd.close() + self.writeNetConfig() + else : + self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10) + return + else: + self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10) return + + def writeNetConfig(self): + if wlanconfig.usedevice.value=="on": + iNetwork.setAdapterAttribute(self.iface, "up", True) + if wlanconfig.usedhcp.value =="on": + iNetwork.setAdapterAttribute(self.iface, "dhcp", True) + else: + iNetwork.setAdapterAttribute(self.iface, "dhcp", False) + iNetwork.setAdapterAttribute(self.iface, "ip", wlanconfig.ip.value) + iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value) + if wlanconfig.usegateway.value == "on": + iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value) + if wlanconfig.hasdnsconfigentry.value == "on" or wlanconfig.usedhcp.value == "off": + interfacesDnsLines = self.makeLineDnsNameservers([self.manualPrimaryDNS.value, self.manualSecondaryDNS.value]) + if interfacesDnsLines == "" : + interfacesDnsLines = False + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", interfacesDnsLines) + else: + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False) + else: + iNetwork.setAdapterAttribute(self.iface, "up", False) + iNetwork.deactivateInterface(self.iface) + contents = "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n" + contents += "\tpost-down wpa_cli terminate\n" + iNetwork.setAdapterAttribute(self.iface, "configStrings", contents) + iNetwork.writeNetworkConfig() iNetwork.restartNetwork(self.updateCurrentInterfaces) self.configurationmsg = None self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) - def writeWpasupplicantConf(self): - wpafd = open("/etc/wpa_supplicant.conf","w") - if wpafd > 0: - contents = "#WPA Supplicant Configuration by STB\n" - contents += "ctrl_interface=/var/run/wpa_supplicant\n" - contents += "eapol_version=1\n" - contents += "fast_reauth=1\n" + def makeLineDnsNameservers(self, nameservers = []): + line = "" + entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ]) + if len(entry): + line+="\tdns-nameservers %s\n" % entry + return line - if wlanconfig.essid.value == 'Input hidden ESSID': - contents += "ap_scan=2\n" - else : - contents += "ap_scan=1\n" - contents += "network={\n" - if wlanconfig.essid.value == 'Input hidden ESSID': - if len(wlanconfig.hiddenessid.value) == 0: - wpafd.close() - return -2 - contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n" - else : - contents += "\tssid=\""+wlanconfig.essid.value+"\"\n" - contents += "\tscan_ssid=0\n" - if wlanconfig.encrypt.value == "on": - if wlanconfig.method.value =="wep": - contents += "\tkey_mgmt=NONE\n" - contents += "\twep_key0=" - elif wlanconfig.method.value == "wpa": - contents += "\tkey_mgmt=WPA-PSK\n" - contents += "\tproto=WPA\n" - contents += "\tpairwise=CCMP TKIP\n" - contents += "\tgroup=CCMP TKIP\n" - contents += "\tpsk=" - elif wlanconfig.method.value == "wpa2": - contents += "\tkey_mgmt=WPA-PSK\n" - contents += "\tproto=RSN\n" - contents += "\tpairwise=CCMP TKIP\n" - contents += "\tgroup=CCMP TKIP\n" - contents += "\tpsk=" - else: - contents += "\tkey_mgmt=WPA-PSK\n" - contents += "\tproto=WPA RSN\n" - contents += "\tpairwise=CCMP TKIP\n" - contents += "\tgroup=CCMP TKIP\n" - contents += "\tpsk=" - if wlanconfig.keytype.value == "ascii": - contents += "\""+wlanconfig.key.value+"\"\n" - else: - contents += wlanconfig.key.value+"\n" - else: - contents += "\tkey_mgmt=NONE\n" - contents += "}\n" - print "content = \n"+contents - wpafd.write(contents) - wpafd.close() - return 0 - else : - self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10) - return -1 def updateCurrentInterfaces(self,ret): if ret is True: iNetwork.getInterfaces(self.configurationMsgClose) @@ -757,11 +868,13 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): def formatip(self, iplist): list = [] list = iplist +# print "iplist : ",iplist try: if len(iplist) == 4: result = str(iplist[0])+"."+str(iplist[1])+"."+str(iplist[2])+"."+str(iplist[3]) else: result ="0.0.0.0" +# print "result : ",result return result except: return "[N/A]" @@ -770,60 +883,80 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): if not result: return if self.oldInterfaceState is False: + iNetwork.setAdapterAttribute(self.iface, "up", False) iNetwork.deactivateInterface(self.iface,self.keyCancelCB) else: self.close() - def keyCancel(self): + def keyCancel(self,yesno = True): if self["config"].isChanged(): self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?")) else: - self.close() + self.keyCancelConfirm(True) def keyCancelCB(self,data): if data is not None: if data is True: self.close() -# def selectionChanged(self): -# current = self["config"].getCurrent() -# print current + def cleanup(self): + iNetwork.stopRestartConsole() + iNetwork.stopGetInterfacesConsole() + iNetwork.stopDeactivateInterfaceConsole() + self.stopwlanscanapConsole() + self.stopCheckNetworkSharesConsole() + self.stopWpaPhraseConsole() + + def stopwlanscanapConsole(self): + if self.wlanscanap is not None: + if len(self.wlanscanap.appContainers): + for name in self.wlanscanap.appContainers.keys(): + self.wlanscanap.kill(name) + + def stopCheckNetworkSharesConsole(self): + if self.Console is not None: + if len(self.Console.appContainers): + for name in self.Console.appContainers.keys(): + self.Console.kill(name) + + def stopWpaPhraseConsole(self): + if self.wpaphraseconsole is not None: + if len(self.wpaphraseconsole.appContainers): + for name in self.wpaphraseconsole.appContainers.keys(): + self.wpaphraseconsole.kill(name) class WlanScanAp(Screen,HelpableScreen): - skin = """ - - - - - - - Format:%H:%M - - - - - - - - - - - - - - - - """ - + skin = """ + + + + + + + + + + + + + + + + + + + + + + """ def __init__(self, session, iface): Screen.__init__(self,session) HelpableScreen.__init__(self) self.session = session self.iface = iface self.wlanscanap = None - self.scanAPcount = 5 self.apList = {} - self.SetApList = [] + self.setApList = [] self["WizardActions"] = HelpableActionMap(self, "WizardActions", { @@ -831,7 +964,7 @@ class WlanScanAp(Screen,HelpableScreen): "down": (self.down, _("move down to next entry")), "left": (self.left, _("move up to first entry")), "right": (self.right, _("move down to last entry")), - }) + }, -2) self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { @@ -843,21 +976,11 @@ class WlanScanAp(Screen,HelpableScreen): { "red": (self.close, _("exit")), "green": (self.ok, "select AP"), + "yellow": (self.restartScanAP, "restart scan AP"), "blue": (self.startWlanConfig, "Edit Wireless settings"), }) - self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"], - { - "ok": self.ok, - "back": self.close, - "up": self.up, - "down": self.down, - "red": self.close, - "left": self.left, - "right": self.right, - }, -2) - - self["menulist"] = MenuList(self.SetApList) + self["menulist"] = MenuList(self.setApList) self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Select")) self["key_blue"] = StaticText(_("EditSetting")) @@ -867,11 +990,17 @@ class WlanScanAp(Screen,HelpableScreen): self["Frequency"] = StaticText(" ") self["Encryption key"] = StaticText(" ") self["BitRate"] = StaticText(" ") + self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") + self.getAplistTimer = eTimer() + self.getAplistTimer.callback.append(self.getApList) self.scanAplistTimer = eTimer() self.scanAplistTimer.callback.append(self.scanApList) - self.scanAplistTimer.start(100,True) + self.emptyListMsgTimer = eTimer() + self.emptyListMsgTimer.callback.append(self.emptyListMsg) + self.apList = {} + self.onClose.append(self.__onClose) + self.getAplistTimer.start(100,True) - def left(self): self["menulist"].pageUp() self.displayApInfo() @@ -890,100 +1019,105 @@ class WlanScanAp(Screen,HelpableScreen): def ok(self): global selectap - selectAp=self["menulist"].getCurrent()[0] - selectap = selectAp + if self["menulist"].getCurrent() is not None: + selectAp=self["menulist"].getCurrent()[0] + selectap = selectAp self.close() def startWlanConfig(self): - global selectap - selectAp=self["menulist"].getCurrent()[0] - selectap = selectAp - self.session.open(WlanConfig,self.iface) -# self.close() + if self["menulist"].getCurrent() is not None: + selectAp=self["menulist"].getCurrent()[0] + self.close(selectAp) - def scanApList(self): - print "self.scanAPcount : ",self.scanAPcount + def getApList(self): self.apList = {} - self.SetApList = [] + self.setApList = [] self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False) - self.scanAPcount -=1 - os_system('ifconfig '+self.iface+" up") - self.wlanscanap = Console() - cmd = "iwlist "+self.iface+" scan" - print cmd - self.wlanscanap.ePopen(cmd, self.iwlistfinnished,self.APListParse) - - def iwlistfinnished(self, result, retval,extra_args): -# print "iwlistfinnished" - (statecallback) = extra_args - if self.wlanscanap is not None: -# print "retval = ",retval - if retval == 0: - self.wlanscanap = None - content = result.splitlines() - first = content[0].split() - completed = False - for x in first: - if x == 'completed': - completed = True - if completed == True: - statecallback(result) - else: - statecallback(0) - else: - statecallback(0) + self.scanAplistTimer.start(100,True) - def APListParse(self,data): - if data == 0: - if self.scanAPcount >0: - self.configurationmsg.close(True) - self.scanAplistTimer.start(100,True) - return - else: - self.session.open(MessageBox, _("Scan AP Failed"), MessageBox.TYPE_INFO,5) - return - else: -# print data - self.apList = {} - self.scanAPcount =5 - list = data.splitlines() - for line in list: -# print "line : ",line - if line.strip().startswith("Cell"): # Cell 01 - Address: 00:26:66:5C:EF:24 - parts = line.strip().split(" ") - current_ap_id = int(parts[1]) - self.apList[current_ap_id]={} - self.apList[current_ap_id]["Address"]=parts[4] - elif line.strip().startswith("ESSID"): - self.apList[current_ap_id]["ESSID"]=line.strip()[6:].strip('"') - self.SetApList.append( (self.apList[current_ap_id]["ESSID"],current_ap_id) ) - elif line.strip().startswith("Protocol"): - self.apList[current_ap_id]["Protocol"]=line.strip()[9:] - elif line.strip().startswith("Frequency"): - self.apList[current_ap_id]["Frequency"]=line.strip()[10:] - elif line.strip().startswith("Encryption key"): - self.apList[current_ap_id]["Encryption key"]=line.strip()[15:] - elif line.strip().startswith("Bit Rates"): - self.apList[current_ap_id]["BitRate"]=line.strip()[10:] - print self.apList - print len(self.apList) + def getScanResult(self, wirelessObj): + Iwscanresult = None + try: + Iwscanresult = wirelessObj.scan() + except IOError: + print "%s Interface doesn't support scanning.."%self.iface + return Iwscanresult + + def scanApList(self): + if self.oldInterfaceState is not True: + os_system("ifconfig "+self.iface+" up") + iNetwork.setAdapterAttribute(self.iface, "up", True) + wirelessObj = Wireless(self.iface) + Iwscanresult=self.getScanResult(wirelessObj) + if Iwscanresult is None or len(Iwscanresult.aplist) == 0 : + import time + time.sleep(1.5) + Iwscanresult=self.getScanResult(wirelessObj) self.configurationmsg.close(True) + if Iwscanresult is not None and len(Iwscanresult.aplist) != 0: + (num_channels, frequencies) = wirelessObj.getChannelInfo() + index = 1 + for ap in Iwscanresult: + self.apList[index] = {} + self.apList[index]["Address"] = ap.bssid + if len(ap.essid) == 0: + self.apList[index]["ESSID"] = "" + else: + self.apList[index]["ESSID"] = ap.essid + self.setApList.append( (self.apList[index]["ESSID"], index) ) + self.apList[index]["Protocol"] = ap.protocol + self.apList[index]["Frequency"] = wirelessObj._formatFrequency(ap.frequency.getFrequency()) + try: + self.apList[index]["Channel"] = frequencies.index(self.apList[index]["Frequency"] + 1) + except: + self.apList[index]["Channel"] = "Unknown" + + self.apList[index]["Quality"] = "%s/%s" % \ + ( ap.quality.quality, wirelessObj.getQualityMax().quality ) + self.apList[index]["Signal Level"] = "%s/%s" % \ + ( ap.quality.getSignallevel(), "100" ) + self.apList[index]["Noise Level"] = "%s/%s" % \ + ( ap.quality.getNoiselevel(), "100" ) + +# get encryption key on/off + key_status = "Unknown" + if (ap.encode.flags & pythonwifi.flags.IW_ENCODE_DISABLED): + key_status = "off" + elif (ap.encode.flags & pythonwifi.flags.IW_ENCODE_NOKEY): + if (ap.encode.length <= 0): + key_status = "on" + self.apList[index]["Encryption key"] = key_status + self.apList[index]["BitRate"] = wirelessObj._formatBitrate(ap.rate[-1][-1]) + index += 1 +# print self.apList +# print self.setApList self.displayApInfo() + if len(self.apList) == 0: + self.emptyListMsgTimer.start(100,True) def displayApInfo(self): if len(self.apList) >0: - self["menulist"].setList(self.SetApList) - index = self["menulist"].getCurrent()[1] - for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]: - if self.apList[index].has_key(key): - self[key].setText((key+": "+self.apList[index][key])) - else: - self[key].setText(("None")) - else: - self.session.openWithCallback(self.ScanAPclose, MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10) + self["menulist"].setList(self.setApList) + if self["menulist"].getCurrent() is not None: + index = self["menulist"].getCurrent()[1] + for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]: + if self.apList[index].has_key(key) and self.apList[index][key] is not None: + self[key].setText((key+": "+self.apList[index][key])) + else: + self[key].setText((key+": None")) - def ScanAPclose(self,data): - self.close() + def emptyListMsg(self): + self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10) + self["Address"].setText(_("No AP detected.")) + self["ESSID"].setText(_("")) + + def restartScanAP(self): + self.getAplistTimer.start(100,True) + + def __onClose(self): + if self.oldInterfaceState is False: + iNetwork.setAdapterAttribute(self.iface, "up", False) + iNetwork.deactivateInterface(self.iface) class NetworkAdapterTest(Screen): def __init__(self, session,iface): @@ -1242,6 +1376,7 @@ class NetworkAdapterTest(Screen): self["InfoText"].show() self["key_red"].setText(_("Back")) if self.activebutton == 6: # Edit Settings + self.cleanup() self.session.open(WlanConfig,self.iface) self["shortcuts"].setEnabled(True) self["infoshortcuts"].setEnabled(False) @@ -1367,6 +1502,7 @@ class NetworkAdapterTest(Screen): def cleanup(self): iNetwork.stopLinkStateConsole() + iNetwork.stopPingConsole() iNetwork.stopDNSConsole() def AccessPointInfo(self,iface): @@ -1376,7 +1512,7 @@ class NetworkAdapterTest(Screen): def readAP(self,result,retval,extra_args): (callback) = extra_args - self.apState = False + self.apState = None if self.iwconfigConsole is not None: if retval == 0: self.iwconfigConsole = None @@ -1388,19 +1524,14 @@ class NetworkAdapterTest(Screen): callback(self.apState) class Wlanstatus(Screen): - skin = """ - - - - - - - Format:%H:%M - - - - - """ + skin = """ + + + + + + + """ def __init__(self, session,iface): Screen.__init__(self,session) self.session = session @@ -1414,6 +1545,7 @@ class Wlanstatus(Screen): "red": self.close, }, -2) self.readstatus() + self.onClose.append(self.cleanup) def readstatus(self): self.wlanstatus = Console() @@ -1441,6 +1573,15 @@ class Wlanstatus(Screen): def ok(self): pass + def cleanup(self): + self.stopWlanStatusConsole() + + def stopWlanStatusConsole(self): + if self.wlanstatus is not None: + if len(self.wlanstatus.appContainers): + for name in self.wlanstatus.appContainers.keys(): + self.wlanstatus.kill(name) + def openconfig(session, **kwargs): session.open(WlanSelection) @@ -1449,7 +1590,7 @@ def selSetup(menuid, **kwargs): if menuid != "system": return [ ] else: - for x in iNetwork.getAdapterList(): + for x in iNetwork.getInstalledAdapters(): if x.startswith('eth'): continue list.append(x)