1 from Screens.Screen import Screen
2 from Screens.MessageBox import MessageBox
3 from Screens.InputBox import InputBox
4 from Screens.Standby import *
5 from Screens.VirtualKeyBoard import VirtualKeyBoard
6 from Screens.HelpMenu import HelpableScreen
7 from Components.Network import iNetwork
8 from Screens.NetworkSetup import NameserverSetup
9 from Components.Sources.StaticText import StaticText
10 from Components.Sources.Boolean import Boolean
11 from Components.Sources.List import List
12 from Components.Label import Label,MultiColorLabel
13 from Components.Pixmap import Pixmap,MultiPixmap
14 from Components.MenuList import MenuList
15 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing
16 from Components.config import ConfigInteger, ConfigSubsection
17 from Components.ConfigList import ConfigListScreen
18 from Components.PluginComponent import plugins
19 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
20 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
21 from Components.Console import Console
22 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
23 from Tools.LoadPixmap import LoadPixmap
24 from Plugins.Plugin import PluginDescriptor
25 from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
26 from os import path as os_path, system as os_system, unlink,listdir
27 from re import compile as re_compile, search as re_search
28 from Tools.Directories import fileExists
30 from pythonwifi.iwlibs import Wireless
31 import pythonwifi.flags
33 class WlanSelection(Screen,HelpableScreen):
35 <screen position="center,center" size="510,400" title="Wireless Network Adapter Selection..." >
36 <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
37 <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
39 <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
40 <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
42 <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
43 <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
45 <widget name="menulist" position="20,20" size="230,260" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
46 <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
49 def __init__(self, session):
50 Screen.__init__(self,session)
51 HelpableScreen.__init__(self)
52 self.mainmenu = self.getWlandevice()
53 self["menulist"] = MenuList(self.mainmenu)
54 self["key_red"] = StaticText(_("Close"))
55 self["key_green"] = StaticText(_("Select"))
56 self["description"] = StaticText()
57 self["description"].setText(_("Select Wireless Lan module. \n" ))
58 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
60 "ok": (self.ok, _("select interface")),
61 "cancel": (self.close, _("exit network interface list")),
64 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
66 "green": (self.ok, _("select interface")),
67 "red": (self.close, _("exit network interface list")),
69 self.updateInterfaces()
70 self.onClose.append(self.cleanup)
72 def updateInterfaces(self):
73 iNetwork.config_ready = False
75 iNetwork.getInterfaces()
77 def checkIfaceMode(self, iface = None):
80 if obj.getMode() == 'Master':
88 # print len(self["menulist"].list)
89 if len(self["menulist"].list) == 0:
90 self.session.open(MessageBox, (_("Can not find any WirelessLan Module\n")),MessageBox.TYPE_ERROR,5 )
92 iface=self["menulist"].getCurrent()[1]
95 elif iNetwork.getAdapterAttribute(iface, "up") == True:
96 ret = self.checkIfaceMode(iface)
98 self.session.open(MessageBox, (_("Invalid WirelessLan Module.\n")),MessageBox.TYPE_ERROR,5 )
101 self.session.open(MessageBox, (_("Can not setup WirelessLan Module in 'AP Mode'\n")),MessageBox.TYPE_ERROR,5 )
103 self.session.open(WlanSetup, iface)
105 def getWlandevice(self):
107 for x in iNetwork.getInstalledAdapters():
108 if x.startswith('eth') or x.startswith('br') or x.startswith('mon'):
110 description=self.getAdapterDescription(x)
111 if description == "Unknown network adapter":
112 list.append((description,x))
114 list.append((description + " (%s)"%x,x))
117 def getAdapterDescription(self, iface):
118 classdir = "/sys/class/net/" + iface + "/device/"
119 driverdir = "/sys/class/net/" + iface + "/device/driver/"
120 if os_path.exists(classdir):
121 files = listdir(classdir)
122 if 'driver' in files:
123 if os_path.realpath(driverdir).endswith('rtw_usb_drv'):
124 return _("Realtek")+ " " + _("WLAN adapter.")
125 elif os_path.realpath(driverdir).endswith('ath_pci'):
126 return _("Atheros")+ " " + _("WLAN adapter.")
127 elif os_path.realpath(driverdir).endswith('zd1211b'):
128 return _("Zydas")+ " " + _("WLAN adapter.")
129 elif os_path.realpath(driverdir).endswith('rt73'):
130 return _("Ralink")+ " " + _("WLAN adapter.")
131 elif os_path.realpath(driverdir).endswith('rt73usb'):
132 return _("Ralink")+ " " + _("WLAN adapter.")
134 return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter")
136 return _("Unknown network adapter")
138 return _("Unknown network adapter")
141 iNetwork.stopGetInterfacesConsole()
143 class WlanSetup(Screen,HelpableScreen):
145 <screen position="center,center" size="510,400" title="Wireless Network Setup Menu..." >
146 <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
147 <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
149 <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
150 <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
152 <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
153 <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
155 <widget name="menulist" position="20,20" size="230,260" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
156 <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
159 def __init__(self, session, ifaces):
160 Screen.__init__(self, session)
161 HelpableScreen.__init__(self)
162 self.session = session
164 self.restartLanRef = None
165 self.LinkState = None
166 self.mainmenu = self.MakeMenu()
167 self["menulist"] = MenuList(self.mainmenu)
168 self["key_red"] = StaticText(_("Close"))
169 self["key_green"] = StaticText(_("Select"))
170 self["description"] = StaticText()
171 self["IFtext"] = StaticText()
172 self["IF"] = StaticText()
173 self["Statustext"] = StaticText()
174 self["statuspic"] = MultiPixmap()
175 self["statuspic"].hide()
176 self.onLayoutFinish.append(self.loadDescription)
178 self.oktext = _("Press OK on your remote control to continue.")
180 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
182 "up": (self.up, _("move up to previous entry")),
183 "down": (self.down, _("move down to next entry")),
184 "left": (self.left, _("move up to first entry")),
185 "right": (self.right, _("move down to last entry")),
188 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
190 "cancel": (self.close, _("exit networkadapter setup menu")),
191 "ok": (self.ok, _("select menu entry")),
194 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
196 "red": (self.close, _("exit networkadapter setup menu")),
197 "green": (self.ok, _("select menu entry")),
200 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
210 self.onClose.append(self.cleanup)
212 def loadDescription(self):
213 if self["menulist"].getCurrent()[1] == 'setting':
214 self["description"].setText(_("Edit the network configuration of your STB.\n" ) + self.oktext )
215 if self["menulist"].getCurrent()[1] == 'scanap':
216 self["description"].setText(_("Scan your network for wireless access points and connect to them using your selected wireless device.\n" ) + self.oktext )
217 if self["menulist"].getCurrent()[1] == 'dns':
218 self["description"].setText(_("Edit the Nameserver configuration of your STB.\n" ) + self.oktext )
219 if self["menulist"].getCurrent()[1] == 'status':
220 self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
221 if self["menulist"].getCurrent()[1] == 'test':
222 self["description"].setText(_("Test the network configuration of your STB.\n" ) + self.oktext )
223 if self["menulist"].getCurrent()[1] == 'restart':
224 self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
227 self["menulist"].up()
228 self.loadDescription()
231 self["menulist"].down()
232 self.loadDescription()
235 self["menulist"].pageUp()
236 self.loadDescription()
239 self["menulist"].pageDown()
240 self.loadDescription()
244 if self["menulist"].getCurrent()[1] == 'setting':
245 self.session.openWithCallback(self.checklist, WlanConfig, self.iface)
246 elif self["menulist"].getCurrent()[1] == 'scanap':
247 self.session.openWithCallback(self.WlanScanApCallback, WlanScanAp, self.iface)
248 elif self["menulist"].getCurrent()[1] == 'dns':
249 self.session.open(NameserverSetup)
250 elif self["menulist"].getCurrent()[1] == 'status':
251 self.session.open(Wlanstatus, self.iface)
252 elif self["menulist"].getCurrent()[1] == 'test':
253 self.session.openWithCallback(self.checklist,NetworkAdapterTest,self.iface)
254 elif self["menulist"].getCurrent()[1] == 'restart':
255 self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
258 self["menulist"].setList(self.MakeMenu())
262 menu.append((_("Adapter settings"), "setting"))
263 menu.append((_("Scan Wireless AP"), "scanap"))
264 # menu.append((_("Nameserver settings"), "dns"))
265 if iNetwork.getAdapterAttribute(self.iface, "up"):
266 menu.append((_("Show WLAN Status"), "status"))
267 menu.append((_("Network test"), "test"))
268 menu.append((_("Restart network"), "restart"))
272 def WlanScanApCallback(self, essid = None):
273 if essid is not None:
274 self.session.openWithCallback(self.checklist, WlanConfig, self.iface, essid)
276 def restartLan(self, ret = False):
278 iNetwork.restartNetwork(self.restartLanDataAvail)
279 self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False)
281 def restartLanDataAvail(self, data):
283 iNetwork.getInterfaces(self.getInterfacesDataAvail)
285 def getInterfacesDataAvail(self, data):
287 self.restartLanRef.close(True)
289 def restartfinishedCB(self,data):
291 self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 5, default = False)
294 iNetwork.stopRestartConsole()
295 iNetwork.stopGetInterfacesConsole()
297 wlanconfig = ConfigSubsection()
298 wlanconfig.usedevice = ConfigSelection(default = "off", choices = [
299 ("off", _("off")), ("on", _("on"))])
300 wlanconfig.usedhcp = ConfigSelection(default = "off", choices = [
301 ("off", _("no")), ("on", _("yes"))])
302 wlanconfig.essid = ConfigSelection(default = "none", choices = ["none"])
303 wlanconfig.encrypt = ConfigSelection(default = "off", choices = [
304 ("off", _("no")), ("on", _("yes"))])
305 wlanconfig.method = ConfigSelection(default = "wep", choices = [
306 ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
307 wlanconfig.keytype = ConfigSelection(default = "ascii", choices = [
308 ("ascii", _("ASCII")), ("hex", _("HEX"))])
309 wlanconfig.key = ConfigPassword(default = "XXXXXXXX", visible_width = 50, fixed_size = False)
310 wlanconfig.usegateway = ConfigSelection(default = "off", choices = [
311 ("off", _("no")), ("on", _("yes"))])
312 wlanconfig.ip = ConfigIP([0,0,0,0])
313 wlanconfig.netmask = ConfigIP([0,0,0,0])
314 wlanconfig.gateway = ConfigIP([0,0,0,0])
317 class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
319 <screen position="center,center" size="510,400" title="Wireless Network Configuration..." >
320 <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
321 <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
323 <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
324 <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
326 <widget name="config" position="10,10" backgroundColor="#371e1c1a" transparent="1" size="480,195" scrollbarMode="showOnDemand" />
327 <ePixmap pixmap="skin_default/div-h.png" position="0,210" zPosition="1" size="560,2" />
328 <widget source="ipaddresstext" render="Label" position="100,220" zPosition="1" size="190,21" font="Regular;19" halign="Left" valign="center" />
329 <widget source="ipaddress" render="Label" position="300,220" zPosition="1" size="150,26" font="Regular;20" halign="Left" valign="center" />
330 <widget source="netmasktext" render="Label" position="100,245" zPosition="1" size="190,21" font="Regular;19" halign="Left" valign="center" />
331 <widget source="netmask" render="Label" position="300,245" zPosition="1" size="150,26" font="Regular;20" halign="Left" valign="center" />
332 <widget source="gatewaytext" render="Label" position="100,270" zPosition="1" size="190,21" font="Regular;19" halign="Left" valign="center" />
333 <widget source="gateway" render="Label" position="300,270" zPosition="1" size="150,26" font="Regular;20" halign="Left" valign="center" />
334 <widget source="DNS1text" render="Label" position="100,295" zPosition="1" size="190,21" font="Regular;19" halign="Left" valign="center" />
335 <widget source="DNS1" render="Label" position="300,295" zPosition="1" size="150,26" font="Regular;20" halign="Left" valign="center" />
336 <widget source="DNS2text" render="Label" position="100,320" zPosition="1" size="190,21" font="Regular;19" halign="Left" valign="center" />
337 <widget source="DNS2" render="Label" position="300,320" zPosition="1" size="150,26" font="Regular;20" halign="Left" valign="center" />
338 <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="460,230" zPosition="10" size="35,25" transparent="1" alphatest="on" />
339 <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="383,420" zPosition="1" size="1,1" transparent="1" alphatest="on" />
342 def __init__(self, session, iface, essidSelected = None):
343 Screen.__init__(self,session)
344 self.session = session
345 self["key_red"] = StaticText(_("Close"))
346 self["key_green"] = StaticText(_("Ok"))
347 self["ipaddresstext"] = StaticText(_("IP Address"))
348 self["ipaddress"] = StaticText(_("[ N/A ]"))
349 self["netmasktext"] = StaticText(_("NetMask"))
350 self["netmask"] = StaticText(_("[ N/A ]"))
351 self["gatewaytext"] = StaticText(_("Gateway"))
352 self["gateway"] = StaticText(_("[ N/A ]"))
353 self["DNS1text"] = StaticText(_("Primary DNS"))
354 self["DNS1"] = StaticText(_("[ N/A ]"))
355 self["DNS2text"] = StaticText(_("Secondary DNS"))
356 self["DNS2"] = StaticText(_("[ N/A ]"))
357 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
359 "ok": self.saveWlanConfig,
360 "green": self.saveWlanConfig,
361 "cancel": self.keyCancel,
362 "red": self.keyCancel,
364 self["HelpWindow"] = Pixmap()
365 self["HelpWindow"].hide()
366 self["VKeyIcon"] = Pixmap()
367 self["VKeyIcon"].hide()
369 self.essidSelected = essidSelected
372 self.scan_ssid = None
376 self.encryption_key = None
377 self.wlanscanap = None
378 self.wpaphraseconsole = None
380 ConfigListScreen.__init__(self, self.list,session = self.session)
381 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
382 self.readWpaSupplicantConf()
383 self.scanAplistTimer = eTimer()
384 self.scanAplistTimer.callback.append(self.scanApList)
385 self.emptyListMsgTimer = eTimer()
386 self.emptyListMsgTimer.callback.append(self.emptyListMsg)
387 self.Console = Console()
388 self.updateInterfaces(self.readWlanSettings)
389 self.onClose.append(self.cleanup)
391 def updateInterfaces(self,callback = None):
392 iNetwork.config_ready = False
393 iNetwork.msgPlugins()
394 iNetwork.getInterfaces(callback)
396 def readWlanSettings(self,ret=None):
398 print "getInterfaces Fail... "
399 if iNetwork.getAdapterAttribute(self.iface, "up") == True:
403 wlanconfig.usedevice = ConfigSelection(default=default_tmp, choices = [("off", _("off")), ("on", _("on"))])
405 if iNetwork.getAdapterAttribute(self.iface, "dhcp"):
409 wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
411 if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"):
412 self.dnsconfigdefault="on"
414 self.dnsconfigdefault="off"
415 wlanconfig.hasdnsconfigentry = ConfigSelection(default=self.dnsconfigdefault, choices = [("off", _("no")), ("on", _("yes"))])
417 wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0]
419 wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])
420 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
424 wlanconfig.usegateway = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
426 wlanconfig.gateway = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])
428 self["ipaddress"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "ip"))))
429 self["netmask"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask"))))
430 self["gateway"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway"))))
432 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
433 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
434 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
435 self["DNS1"].setText(self.primaryDNS.getText())
436 self["DNS2"].setText(self.secondaryDNS.getText())
438 if self.encryption_key is not None:
442 wlanconfig.encrypt = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
444 if self.key_mgmt=="NONE":
446 elif self.key_mgmt == "WPA-PSK":
447 if self.proto == "WPA":
449 elif self.proto == "RSN":
451 elif self.proto in ( "WPA RSN", "WPA WPA2"):
452 default_tmp = "wpa/wpa2"
458 wlanconfig.method = ConfigSelection(default = default_tmp, choices = [
459 ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
461 if self.key_type == 0:
464 default_tmp = "ascii"
465 wlanconfig.keytype = ConfigSelection(default = default_tmp, choices = [
466 ("ascii", _("ASCII")), ("hex", _("HEX"))])
467 default_tmp = self.encryption_key or "XXXXXXXX"
468 wlanconfig.key = ConfigPassword(default = default_tmp, visible_width = 50, fixed_size = False)
471 def readWpaSupplicantConf(self):
473 if fileExists("/etc/wpa_supplicant.conf"):
474 wpafd = open("/etc/wpa_supplicant.conf","r")
476 data = wpafd.readline()
478 # print "####readWpaSupplicantConf, data : ",data
481 data = wpafd.readline()
483 if data.startswith('ssid=') and len(data) > 6:
484 self.ssid = data[6:-2]
485 elif data.startswith('ap_scan=') :
486 self.ap_scan = data[8:]
487 # print "####readWpaSupplicantConf, ap_scan : ",self.ap_scan
488 elif data.startswith('scan_ssid=') and len(data) > 10:
489 self.scan_ssid = data[10:-1]
490 elif data.startswith('key_mgmt=') and len(data) > 9:
491 self.key_mgmt = data[9:-1]
492 elif data.startswith('proto=') and len(data) > 6:
493 self.proto = data[6:-1]
494 elif data.startswith('wep_key0="') and len(data) > 11:
495 self.key_type = 1 # ascii
496 self.encryption_key = data[10:-2]
497 elif data.startswith('wep_key0=') and len(data) > 9:
498 self.key_type = 0 # hex
499 self.encryption_key = data[9:-1]
500 elif data.startswith('psk="') and len(data) > 6:
501 self.key_type = 1 # ascii
502 self.encryption_key = data[5:-2]
503 elif data.startswith('#psk="') and len(data) > 6:
504 self.key_type = 0 # hex
505 self.encryption_key = data[6:-2]
506 elif not self.encryption_key and data.startswith('psk=') and len(data) > 4:
507 self.key_type = 0 # hex
508 self.encryption_key = data[4:-1]
509 data = wpafd.readline()
510 # print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key
517 print 'failed loading wpasupplicant.conf'
519 def createConfig(self):
521 self.usedeviceEntry = getConfigListEntry(_("Use Device"), wlanconfig.usedevice)
522 self.usedhcpEntry = getConfigListEntry(_("Use DHCP"), wlanconfig.usedhcp)
523 self.essidEntry = getConfigListEntry(_("ESSID"), wlanconfig.essid)
524 self.hiddenessidEntry = getConfigListEntry(_("Input Hidden ESSID"), wlanconfig.hiddenessid)
525 self.encryptEntry = getConfigListEntry(_("Encrypt"), wlanconfig.encrypt)
526 self.methodEntry = getConfigListEntry(_("Method"), wlanconfig.method)
527 self.keytypeEntry = getConfigListEntry(_("Key Type"), wlanconfig.keytype)
528 self.keyEntry = getConfigListEntry(_("KEY"), wlanconfig.key)
530 self.ipEntry = getConfigListEntry(_("IP"), wlanconfig.ip)
531 self.netmaskEntry = getConfigListEntry(_("NetMask"), wlanconfig.netmask)
533 self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway)
534 self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway)
536 manualNameservers = (iNetwork.getInterfacesNameserverList(self.iface) + [[0,0,0,0]] * 2)[0:2]
537 self.manualPrimaryDNS = NoSave(ConfigIP(default=manualNameservers[0]))
538 self.manualSecondaryDNS = NoSave(ConfigIP(default=manualNameservers[1]))
539 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
540 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
541 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
542 self.DNSConfigEntry = getConfigListEntry(_("Use Manual dns-nameserver"), wlanconfig.hasdnsconfigentry)
543 self.primaryDNSConfigEntry = getConfigListEntry(_('Primary DNS'), self.manualPrimaryDNS)
544 self.secondaryDNSConfigEntry = getConfigListEntry(_('Secondary DNS'), self.manualSecondaryDNS)
546 self.configList.append( self.usedeviceEntry )
547 if wlanconfig.usedevice.value is "on":
548 self.configList.append( self.usedhcpEntry )
549 if wlanconfig.usedhcp.value is "off":
550 self.configList.append(self.ipEntry)
551 self.configList.append(self.netmaskEntry)
552 self.configList.append(self.usegatewayEntry)
553 if wlanconfig.usegateway.value is "on":
554 self.configList.append(self.gatewayEntry)
555 if wlanconfig.usedhcp.value is "on":
556 self.configList.append(self.DNSConfigEntry)
557 if wlanconfig.hasdnsconfigentry.value is "on" or wlanconfig.usedhcp.value is "off":
558 self.configList.append(self.primaryDNSConfigEntry)
559 self.configList.append(self.secondaryDNSConfigEntry)
561 self.configList.append( self.essidEntry )
562 if wlanconfig.essid.value == 'Input hidden ESSID':
563 self.configList.append( self.hiddenessidEntry )
564 self.configList.append( self.encryptEntry )
565 if wlanconfig.encrypt.value is "on" :
566 self.configList.append( self.methodEntry )
567 if wlanconfig.method.value =="wep":
568 self.configList.append( self.keytypeEntry )
569 self.configList.append( self.keyEntry )
571 self["config"].list = self.configList
572 self["config"].l.setList(self.configList)
573 if not self.showTextIcon in self["config"].onSelectionChanged:
574 self["config"].onSelectionChanged.append(self.showTextIcon)
576 def showTextIcon(self):
577 if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
578 self["VKeyIcon"].show()
580 self["VKeyIcon"].hide()
583 if self.essidSelected is None:
585 self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
586 self.scanAplistTimer.start(100,True)
588 self.apList = [self.essidSelected]
589 wlanconfig.essid = ConfigSelection(choices = self.apList)
590 if self.ssid is not None:
591 wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
593 wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
596 def getScanResult(self, wirelessObj):
599 Iwscanresult = wirelessObj.scan()
601 print "%s Interface doesn't support scanning.."%self.iface
604 def scanApList(self):
605 if self.oldInterfaceState is not True:
606 os_system("ifconfig "+self.iface+" up")
607 iNetwork.setAdapterAttribute(self.iface, "up", True)
608 wirelessObj = Wireless(self.iface)
609 Iwscanresult=self.getScanResult(wirelessObj)
610 if Iwscanresult is None or len(Iwscanresult.aplist) == 0 :
613 Iwscanresult=self.getScanResult(wirelessObj)
614 self.configurationmsg.close(True)
615 if Iwscanresult is None or len( Iwscanresult.aplist) == 0:
616 self.emptyListMsgTimer.start(100,True)
618 for ap in Iwscanresult:
619 if ap.essid is not None and ap.essid not in self.apList and len(ap.essid) > 0:
620 self.apList.append(ap.essid)
621 self.apList.append('Input hidden ESSID')
622 if selectap is not None and selectap in self.apList:
623 wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList)
624 elif self.scan_ssid is not None and self.scan_ssid.strip() == '1':
625 wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList)
626 elif self.ssid is not None and self.ssid in self.apList:
627 wlanconfig.essid = ConfigSelection(default=self.ssid, choices = self.apList)
630 wlanconfig.essid = ConfigSelection(defalut = self.apList[0], choices = self.apList)
632 wlanconfig.essid = ConfigSelection(choices = self.apList)
633 if self.ssid is not None:
634 wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
636 wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
639 def emptyListMsg(self):
640 self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
643 ConfigListScreen.keyLeft(self)
647 ConfigListScreen.keyRight(self)
651 if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \
652 or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \
653 or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry \
654 or self["config"].getCurrent() == self.DNSConfigEntry:
657 def saveWlanConfig(self):
659 if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
660 self["config"].getCurrent()[1].onDeselect(self.session)
661 if self["config"].isChanged():
662 self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) )
664 self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
668 def checkNetworkConfig(self, ret = False):
670 if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
671 self["config"].getCurrent()[1].onSelect(self.session)
673 if wlanconfig.essid.value == 'Input hidden ESSID':
674 if len(wlanconfig.hiddenessid.value) == 0:
675 self.session.open(MessageBox, ("PLEASE INPUT HIDDEN ESSID"), type = MessageBox.TYPE_ERROR, timeout = 10)
677 if len(wlanconfig.key.value) == 0:
678 self.session.open(MessageBox, ("PLEASE INPUT NETWORK KEY"), type = MessageBox.TYPE_ERROR, timeout = 10)
680 self.checkNetworkShares()
682 def checkNetworkShares(self):
684 self.Console = Console()
685 cmd = "cat /proc/mounts"
686 self.Console.ePopen(cmd, self.checkSharesFinished, self.confirmAnotherIfaces)
688 def checkSharesFinished(self, result, retval, extra_args):
689 callback = extra_args
690 # print "checkMountsFinished : result : \n",result
691 networks = ['nfs','smbfs','ncp','coda']
692 for line in result.splitlines():
693 split = line.strip().split(' ',3)
694 if split[2] in networks:
695 self.session.open(MessageBox, ("NOT deconfiguring network interfaces :\n network shares still mounted\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
697 if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
698 self["config"].getCurrent()[1].onSelect(self.session)
702 def confirmAnotherIfaces(self, ret = False):
706 num_configured_if = len(iNetwork.getConfiguredAdapters())
707 if num_configured_if >= 1:
708 if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
709 self.getWpaPhrase(False)
711 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)
713 self.getWpaPhrase(False)
715 def getWpaPhrase(self,ret):
717 configuredInterfaces = iNetwork.getConfiguredAdapters()
718 for interface in configuredInterfaces:
719 if interface == self.iface:
721 iNetwork.setAdapterAttribute(interface, "up", False)
722 iNetwork.deactivateInterface(interface)
723 if wlanconfig.method.value =="wep":
724 self.writeWpasupplicantConf("wep") # passphrasekey is not None
726 if wlanconfig.essid.value == 'Input hidden ESSID':
727 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.hiddenessid.value,wlanconfig.key.value)
729 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.essid.value,wlanconfig.key.value)
731 self.wpaphraseconsole = Console()
732 self.wpaphraseconsole.ePopen(cmd, self.parseWpaPhrase, self.writeWpasupplicantConf)
734 def parseWpaPhrase(self, result, retval, extra_args):
735 (writewlanconfig) = extra_args
736 if self.wpaphraseconsole is not None:
738 self.wpaphraseconsole.killAll()
739 self.wpaphraseconsole = None
740 # print "parseWpaPhrase result : "
743 for line in result.splitlines():
744 if line.find('ssid') == -1 and line.find('#psk=') != -1:
746 elif line.find('psk=') != -1:
749 writewlanconfig(psk,plainpwd)
751 writewlanconfig(None)
753 writewlanconfig(None)
755 def writeWpasupplicantConf(self, passphrasekey=None,plainpwd=None):
757 wpafd = open("/etc/wpa_supplicant.conf","w")
759 contents = "#WPA Supplicant Configuration by STB\n"
760 contents += "ctrl_interface=/var/run/wpa_supplicant\n"
761 contents += "eapol_version=1\n"
762 contents += "fast_reauth=1\n"
763 contents += "ap_scan=1\n"
764 contents += "network={\n"
765 if wlanconfig.essid.value == 'Input hidden ESSID':
766 contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n"
767 contents += "\tscan_ssid=1\n"
769 contents += "\tssid=\""+wlanconfig.essid.value+"\"\n"
770 contents += "\tscan_ssid=0\n"
771 if wlanconfig.encrypt.value == "on":
772 if wlanconfig.method.value =="wep":
773 contents += "\tkey_mgmt=NONE\n"
774 contents += "\twep_key0="
775 if wlanconfig.keytype.value == "ascii":
776 contents += "\""+wlanconfig.key.value+"\"\n"
778 contents += wlanconfig.key.value+"\n"
780 # print "plainpwd : ",plainpwd
781 # print "passphrasekey : ",passphrasekey
782 if wlanconfig.method.value == "wpa":
783 contents += "\tkey_mgmt=WPA-PSK\n"
784 contents += "\tproto=WPA\n"
785 contents += "\tpairwise=CCMP TKIP\n"
786 contents += "\tgroup=CCMP TKIP\n"
787 elif wlanconfig.method.value == "wpa2":
788 contents += "\tkey_mgmt=WPA-PSK\n"
789 contents += "\tproto=RSN\n"
790 contents += "\tpairwise=CCMP TKIP\n"
791 contents += "\tgroup=CCMP TKIP\n"
793 contents += "\tkey_mgmt=WPA-PSK\n"
794 contents += "\tproto=WPA RSN\n"
795 contents += "\tpairwise=CCMP TKIP\n"
796 contents += "\tgroup=CCMP TKIP\n"
797 contents += plainpwd+"\n"
798 contents += passphrasekey+"\n"
800 contents += "\tkey_mgmt=NONE\n"
802 print "content = \n"+contents
803 wpafd.write(contents)
805 self.writeNetConfig()
807 self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
810 self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10)
813 def writeNetConfig(self):
814 if wlanconfig.usedevice.value=="on":
815 iNetwork.setAdapterAttribute(self.iface, "up", True)
816 if wlanconfig.usedhcp.value =="on":
817 iNetwork.setAdapterAttribute(self.iface, "dhcp", True)
819 iNetwork.setAdapterAttribute(self.iface, "dhcp", False)
820 iNetwork.setAdapterAttribute(self.iface, "ip", wlanconfig.ip.value)
821 iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value)
822 if wlanconfig.usegateway.value == "on":
823 iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value)
824 if wlanconfig.hasdnsconfigentry.value == "on" or wlanconfig.usedhcp.value == "off":
825 interfacesDnsLines = self.makeLineDnsNameservers([self.manualPrimaryDNS.value, self.manualSecondaryDNS.value])
826 if interfacesDnsLines == "" :
827 interfacesDnsLines = False
828 iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", interfacesDnsLines)
830 iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False)
832 iNetwork.setAdapterAttribute(self.iface, "up", False)
833 iNetwork.deactivateInterface(self.iface)
834 contents = "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n"
835 contents += "\tpost-down wpa_cli terminate\n"
836 iNetwork.setAdapterAttribute(self.iface, "configStrings", contents)
837 iNetwork.writeNetworkConfig()
838 iNetwork.restartNetwork(self.updateCurrentInterfaces)
839 self.configurationmsg = None
840 self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
842 def makeLineDnsNameservers(self, nameservers = []):
844 entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ])
846 line+="\tdns-nameservers %s\n" % entry
849 def updateCurrentInterfaces(self,ret):
851 iNetwork.getInterfaces(self.configurationMsgClose)
853 def configurationMsgClose(self,ret):
854 if ret is True and self.configurationmsg is not None:
855 self.configurationmsg.close(True)
857 def configFinished(self,data):
860 self.session.openWithCallback(self.configFinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
861 selectap = wlanconfig.essid.value
863 def configFinishedCB(self,data):
868 def formatip(self, iplist):
871 # print "iplist : ",iplist
874 result = str(iplist[0])+"."+str(iplist[1])+"."+str(iplist[2])+"."+str(iplist[3])
877 # print "result : ",result
882 def keyCancelConfirm(self, result):
885 if self.oldInterfaceState is False:
886 iNetwork.setAdapterAttribute(self.iface, "up", False)
887 iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
891 def keyCancel(self,yesno = True):
892 if self["config"].isChanged():
893 self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
895 self.keyCancelConfirm(True)
897 def keyCancelCB(self,data):
903 iNetwork.stopRestartConsole()
904 iNetwork.stopGetInterfacesConsole()
905 iNetwork.stopDeactivateInterfaceConsole()
906 self.stopwlanscanapConsole()
907 self.stopCheckNetworkSharesConsole()
908 self.stopWpaPhraseConsole()
910 def stopwlanscanapConsole(self):
911 if self.wlanscanap is not None:
912 if len(self.wlanscanap.appContainers):
913 for name in self.wlanscanap.appContainers.keys():
914 self.wlanscanap.kill(name)
916 def stopCheckNetworkSharesConsole(self):
917 if self.Console is not None:
918 if len(self.Console.appContainers):
919 for name in self.Console.appContainers.keys():
920 self.Console.kill(name)
922 def stopWpaPhraseConsole(self):
923 if self.wpaphraseconsole is not None:
924 if len(self.wpaphraseconsole.appContainers):
925 for name in self.wpaphraseconsole.appContainers.keys():
926 self.wpaphraseconsole.kill(name)
928 class WlanScanAp(Screen,HelpableScreen):
930 <screen position="center,center" size="510,400" title="Wireless Network AP Scan..." >
931 <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
932 <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
934 <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
935 <ePixmap pixmap="skin_default/buttons/green.png" position="185,360" size="140,40" alphatest="on" />
936 <ePixmap pixmap="skin_default/buttons/blue.png" position="360,360" size="140,40" alphatest="on" />
938 <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
939 <widget source="key_green" render="Label" position="185,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
940 <widget source="key_blue" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
942 <widget name="menulist" position="20,20" size="230,260" backgroundColor="#371e1c1a" transparent="1" zPosition="10" scrollbarMode="showOnDemand" />
944 <widget source="Address" render="Label" position="265,70" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
945 <widget source="ESSID" render="Label" position="265,100" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
946 <widget source="Protocol" render="Label" position="265,130" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
947 <widget source="Frequency" render="Label" position="265,160" zPosition="1" size="240,40" font="Regular;18" halign="center" valign="center" />
948 <widget source="Encryption key" render="Label" position="265,200" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
949 <widget source="BitRate" render="Label" position="265,220" zPosition="1" size="240,60" font="Regular;18" halign="center" valign="center" />
952 def __init__(self, session, iface):
953 Screen.__init__(self,session)
954 HelpableScreen.__init__(self)
955 self.session = session
957 self.wlanscanap = None
961 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
963 "up": (self.up, _("move up to previous entry")),
964 "down": (self.down, _("move down to next entry")),
965 "left": (self.left, _("move up to first entry")),
966 "right": (self.right, _("move down to last entry")),
969 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
971 "cancel": (self.close, _("exit")),
972 "ok": (self.ok, "select AP"),
975 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
977 "red": (self.close, _("exit")),
978 "green": (self.ok, "select AP"),
979 "yellow": (self.restartScanAP, "restart scan AP"),
980 "blue": (self.startWlanConfig, "Edit Wireless settings"),
983 self["menulist"] = MenuList(self.setApList)
984 self["key_red"] = StaticText(_("Close"))
985 self["key_green"] = StaticText(_("Select"))
986 self["key_blue"] = StaticText(_("EditSetting"))
987 self["Address"] = StaticText(_("Scanning AP List.."))
988 self["ESSID"] = StaticText(_("Wait a moment"))
989 self["Protocol"] = StaticText(" ")
990 self["Frequency"] = StaticText(" ")
991 self["Encryption key"] = StaticText(" ")
992 self["BitRate"] = StaticText(" ")
993 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
994 self.getAplistTimer = eTimer()
995 self.getAplistTimer.callback.append(self.getApList)
996 self.scanAplistTimer = eTimer()
997 self.scanAplistTimer.callback.append(self.scanApList)
998 self.emptyListMsgTimer = eTimer()
999 self.emptyListMsgTimer.callback.append(self.emptyListMsg)
1001 self.onClose.append(self.__onClose)
1002 self.getAplistTimer.start(100,True)
1005 self["menulist"].pageUp()
1006 self.displayApInfo()
1009 self["menulist"].pageDown()
1010 self.displayApInfo()
1013 self["menulist"].up()
1014 self.displayApInfo()
1017 self["menulist"].down()
1018 self.displayApInfo()
1022 if self["menulist"].getCurrent() is not None:
1023 selectAp=self["menulist"].getCurrent()[0]
1027 def startWlanConfig(self):
1028 if self["menulist"].getCurrent() is not None:
1029 selectAp=self["menulist"].getCurrent()[0]
1030 self.close(selectAp)
1032 def getApList(self):
1035 self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
1036 self.scanAplistTimer.start(100,True)
1038 def getScanResult(self, wirelessObj):
1041 Iwscanresult = wirelessObj.scan()
1043 print "%s Interface doesn't support scanning.."%self.iface
1046 def scanApList(self):
1047 if self.oldInterfaceState is not True:
1048 os_system("ifconfig "+self.iface+" up")
1049 iNetwork.setAdapterAttribute(self.iface, "up", True)
1050 wirelessObj = Wireless(self.iface)
1051 Iwscanresult=self.getScanResult(wirelessObj)
1052 if Iwscanresult is None or len(Iwscanresult.aplist) == 0 :
1055 Iwscanresult=self.getScanResult(wirelessObj)
1056 self.configurationmsg.close(True)
1057 if Iwscanresult is not None and len(Iwscanresult.aplist) != 0:
1058 (num_channels, frequencies) = wirelessObj.getChannelInfo()
1060 for ap in Iwscanresult:
1061 self.apList[index] = {}
1062 self.apList[index]["Address"] = ap.bssid
1063 if len(ap.essid) == 0:
1064 self.apList[index]["ESSID"] = "<hidden ESSID>"
1066 self.apList[index]["ESSID"] = ap.essid
1067 self.setApList.append( (self.apList[index]["ESSID"], index) )
1068 self.apList[index]["Protocol"] = ap.protocol
1069 self.apList[index]["Frequency"] = wirelessObj._formatFrequency(ap.frequency.getFrequency())
1071 self.apList[index]["Channel"] = frequencies.index(self.apList[index]["Frequency"] + 1)
1073 self.apList[index]["Channel"] = "Unknown"
1075 self.apList[index]["Quality"] = "%s/%s" % \
1076 ( ap.quality.quality, wirelessObj.getQualityMax().quality )
1077 self.apList[index]["Signal Level"] = "%s/%s" % \
1078 ( ap.quality.getSignallevel(), "100" )
1079 self.apList[index]["Noise Level"] = "%s/%s" % \
1080 ( ap.quality.getNoiselevel(), "100" )
1082 # get encryption key on/off
1083 key_status = "Unknown"
1084 if (ap.encode.flags & pythonwifi.flags.IW_ENCODE_DISABLED):
1086 elif (ap.encode.flags & pythonwifi.flags.IW_ENCODE_NOKEY):
1087 if (ap.encode.length <= 0):
1089 self.apList[index]["Encryption key"] = key_status
1090 self.apList[index]["BitRate"] = wirelessObj._formatBitrate(ap.rate[-1][-1])
1093 # print self.setApList
1094 self.displayApInfo()
1095 if len(self.apList) == 0:
1096 self.emptyListMsgTimer.start(100,True)
1098 def displayApInfo(self):
1099 if len(self.apList) >0:
1100 self["menulist"].setList(self.setApList)
1101 if self["menulist"].getCurrent() is not None:
1102 index = self["menulist"].getCurrent()[1]
1103 for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]:
1104 if self.apList[index].has_key(key) and self.apList[index][key] is not None:
1105 self[key].setText((key+": "+self.apList[index][key]))
1107 self[key].setText((key+": None"))
1109 def emptyListMsg(self):
1110 self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
1111 self["Address"].setText(_("No AP detected."))
1112 self["ESSID"].setText(_(""))
1114 def restartScanAP(self):
1115 self.getAplistTimer.start(100,True)
1117 def __onClose(self):
1118 if self.oldInterfaceState is False:
1119 iNetwork.setAdapterAttribute(self.iface, "up", False)
1120 iNetwork.deactivateInterface(self.iface)
1122 class NetworkAdapterTest(Screen):
1123 def __init__(self, session,iface):
1124 Screen.__init__(self, session)
1126 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
1128 self.onClose.append(self.cleanup)
1129 self.onHide.append(self.cleanup)
1131 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
1135 "up": lambda: self.updownhandler('up'),
1136 "down": lambda: self.updownhandler('down'),
1140 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1143 "back": self.cancel,
1145 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1147 "red": self.closeInfo,
1148 "back": self.closeInfo,
1150 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
1152 "green": self.KeyGreen,
1154 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
1156 "green": self.KeyGreenRestart,
1158 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
1160 "yellow": self.KeyYellow,
1163 self["shortcutsgreen_restart"].setEnabled(False)
1164 self["updown_actions"].setEnabled(False)
1165 self["infoshortcuts"].setEnabled(False)
1166 self.onClose.append(self.delTimer)
1167 self.onLayoutFinish.append(self.layoutFinished)
1168 self.steptimer = False
1170 self.activebutton = 0
1171 self.nextStepTimer = eTimer()
1172 self.nextStepTimer.callback.append(self.nextStepTimerFire)
1175 if self.oldInterfaceState is False:
1176 iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
1177 iNetwork.deactivateInterface(self.iface)
1180 def closeInfo(self):
1181 self["shortcuts"].setEnabled(True)
1182 self["infoshortcuts"].setEnabled(False)
1183 self["InfoText"].hide()
1184 self["InfoTextBorder"].hide()
1185 self["key_red"].setText(_("Close"))
1189 del self.nextStepTimer
1191 def nextStepTimerFire(self):
1192 self.nextStepTimer.stop()
1193 self.steptimer = False
1196 def updownhandler(self,direction):
1197 if direction == 'up':
1198 if self.activebutton >=2:
1199 self.activebutton -= 1
1201 self.activebutton = 6
1202 self.setActiveButton(self.activebutton)
1203 if direction == 'down':
1204 if self.activebutton <=5:
1205 self.activebutton += 1
1207 self.activebutton = 1
1208 self.setActiveButton(self.activebutton)
1210 def setActiveButton(self,button):
1212 self["EditSettingsButton"].setPixmapNum(0)
1213 self["EditSettings_Text"].setForegroundColorNum(0)
1214 self["NetworkInfo"].setPixmapNum(0)
1215 self["NetworkInfo_Text"].setForegroundColorNum(1)
1216 self["AdapterInfo"].setPixmapNum(1) # active
1217 self["AdapterInfo_Text"].setForegroundColorNum(2) # active
1219 self["AdapterInfo_Text"].setForegroundColorNum(1)
1220 self["AdapterInfo"].setPixmapNum(0)
1221 self["DhcpInfo"].setPixmapNum(0)
1222 self["DhcpInfo_Text"].setForegroundColorNum(1)
1223 self["NetworkInfo"].setPixmapNum(1) # active
1224 self["NetworkInfo_Text"].setForegroundColorNum(2) # active
1226 self["NetworkInfo"].setPixmapNum(0)
1227 self["NetworkInfo_Text"].setForegroundColorNum(1)
1228 self["IPInfo"].setPixmapNum(0)
1229 self["IPInfo_Text"].setForegroundColorNum(1)
1230 self["DhcpInfo"].setPixmapNum(1) # active
1231 self["DhcpInfo_Text"].setForegroundColorNum(2) # active
1233 self["DhcpInfo"].setPixmapNum(0)
1234 self["DhcpInfo_Text"].setForegroundColorNum(1)
1235 self["DNSInfo"].setPixmapNum(0)
1236 self["DNSInfo_Text"].setForegroundColorNum(1)
1237 self["IPInfo"].setPixmapNum(1) # active
1238 self["IPInfo_Text"].setForegroundColorNum(2) # active
1240 self["IPInfo"].setPixmapNum(0)
1241 self["IPInfo_Text"].setForegroundColorNum(1)
1242 self["EditSettingsButton"].setPixmapNum(0)
1243 self["EditSettings_Text"].setForegroundColorNum(0)
1244 self["DNSInfo"].setPixmapNum(1) # active
1245 self["DNSInfo_Text"].setForegroundColorNum(2) # active
1247 self["DNSInfo"].setPixmapNum(0)
1248 self["DNSInfo_Text"].setForegroundColorNum(1)
1249 self["EditSettingsButton"].setPixmapNum(1) # active
1250 self["EditSettings_Text"].setForegroundColorNum(2) # active
1251 self["AdapterInfo"].setPixmapNum(0)
1252 self["AdapterInfo_Text"].setForegroundColorNum(1)
1255 next = self.nextstep
1271 self.steptimer = True
1272 self.nextStepTimer.start(3000)
1273 self["key_yellow"].setText(_("Stop test"))
1276 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
1277 self["Adapter"].setForegroundColorNum(2)
1278 self["Adaptertext"].setForegroundColorNum(1)
1279 self["AdapterInfo_Text"].setForegroundColorNum(1)
1280 self["AdapterInfo_OK"].show()
1281 self.steptimer = True
1282 self.nextStepTimer.start(3000)
1285 self["Networktext"].setForegroundColorNum(1)
1286 self["Network"].setText(_("Please wait..."))
1287 self.AccessPointInfo(self.iface)
1288 self["NetworkInfo_Text"].setForegroundColorNum(1)
1289 self.steptimer = True
1290 self.nextStepTimer.start(3000)
1293 self["Dhcptext"].setForegroundColorNum(1)
1294 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
1295 self["Dhcp"].setForegroundColorNum(2)
1296 self["Dhcp"].setText(_("enabled"))
1297 self["DhcpInfo_Check"].setPixmapNum(0)
1299 self["Dhcp"].setForegroundColorNum(1)
1300 self["Dhcp"].setText(_("disabled"))
1301 self["DhcpInfo_Check"].setPixmapNum(1)
1302 self["DhcpInfo_Check"].show()
1303 self["DhcpInfo_Text"].setForegroundColorNum(1)
1304 self.steptimer = True
1305 self.nextStepTimer.start(3000)
1308 self["IPtext"].setForegroundColorNum(1)
1309 self["IP"].setText(_("Please wait..."))
1310 iNetwork.checkNetworkState(self.NetworkStatedataAvail)
1313 self.steptimer = False
1314 self.nextStepTimer.stop()
1315 self["DNStext"].setForegroundColorNum(1)
1316 self["DNS"].setText(_("Please wait..."))
1317 iNetwork.checkDNSLookup(self.DNSLookupdataAvail)
1320 self["shortcutsgreen"].setEnabled(False)
1321 self["shortcutsyellow"].setEnabled(True)
1322 self["updown_actions"].setEnabled(False)
1323 self["key_yellow"].setText("")
1324 self["key_green"].setText("")
1325 self.steptimer = True
1326 self.nextStepTimer.start(1000)
1328 def KeyGreenRestart(self):
1330 self.layoutFinished()
1331 self["Adapter"].setText((""))
1332 self["Network"].setText((""))
1333 self["Dhcp"].setText((""))
1334 self["IP"].setText((""))
1335 self["DNS"].setText((""))
1336 self["AdapterInfo_Text"].setForegroundColorNum(0)
1337 self["NetworkInfo_Text"].setForegroundColorNum(0)
1338 self["DhcpInfo_Text"].setForegroundColorNum(0)
1339 self["IPInfo_Text"].setForegroundColorNum(0)
1340 self["DNSInfo_Text"].setForegroundColorNum(0)
1341 self["shortcutsgreen_restart"].setEnabled(False)
1342 self["shortcutsgreen"].setEnabled(False)
1343 self["shortcutsyellow"].setEnabled(True)
1344 self["updown_actions"].setEnabled(False)
1345 self["key_yellow"].setText("")
1346 self["key_green"].setText("")
1347 self.steptimer = True
1348 self.nextStepTimer.start(1000)
1351 self["infoshortcuts"].setEnabled(True)
1352 self["shortcuts"].setEnabled(False)
1353 if self.activebutton == 1: # Adapter Check
1354 self["InfoText"].setText(_("This test detects your configured Wireless LAN-Adapter."))
1355 self["InfoTextBorder"].show()
1356 self["InfoText"].show()
1357 self["key_red"].setText(_("Back"))
1358 if self.activebutton == 2: #LAN Check
1359 self["InfoText"].setText(_("This test checks whether a network cable is connected to your Wireless LAN-Adapter."))
1360 self["InfoTextBorder"].show()
1361 self["InfoText"].show()
1362 self["key_red"].setText(_("Back"))
1363 if self.activebutton == 3: #DHCP Check
1364 self["InfoText"].setText(_("This test checks whether your Wireless LAN Adapter is set up for automatic IP Address configuration with DHCP.\nIf you get a \"disabled\" message:\n - then your Wireless LAN Adapter is configured for manual IP Setup\n- verify thay you have entered correct IP informations in the AdapterSetup dialog.\nIf you get an \"enabeld\" message:\n-verify that you have a configured and working DHCP Server in your network."))
1365 self["InfoTextBorder"].show()
1366 self["InfoText"].show()
1367 self["key_red"].setText(_("Back"))
1368 if self.activebutton == 4: # IP Check
1369 self["InfoText"].setText(_("This test checks whether a valid IP Address is found for your LAN Adapter.\nIf you get a \"unconfirmed\" message:\n- no valid IP Address was found\n- please check your DHCP, cabling and adapter setup"))
1370 self["InfoTextBorder"].show()
1371 self["InfoText"].show()
1372 self["key_red"].setText(_("Back"))
1373 if self.activebutton == 5: # DNS Check
1374 self["InfoText"].setText(_("This test checks for configured Nameservers.\nIf you get a \"unconfirmed\" message:\n- please check your DHCP, cabling and Adapter setup\n- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"))
1375 self["InfoTextBorder"].show()
1376 self["InfoText"].show()
1377 self["key_red"].setText(_("Back"))
1378 if self.activebutton == 6: # Edit Settings
1380 self.session.open(WlanConfig,self.iface)
1381 self["shortcuts"].setEnabled(True)
1382 self["infoshortcuts"].setEnabled(False)
1384 def KeyYellow(self):
1386 self["shortcutsgreen_restart"].setEnabled(True)
1387 self["shortcutsgreen"].setEnabled(False)
1388 self["shortcutsyellow"].setEnabled(False)
1389 self["key_green"].setText(_("Restart test"))
1390 self["key_yellow"].setText("")
1391 self.steptimer = False
1392 self.nextStepTimer.stop()
1394 def layoutFinished(self):
1395 self.setTitle(_("Network test: ") + iNetwork.getFriendlyAdapterName(self.iface) )
1396 self["shortcutsyellow"].setEnabled(False)
1397 self["AdapterInfo_OK"].hide()
1398 self["NetworkInfo_Check"].hide()
1399 self["DhcpInfo_Check"].hide()
1400 self["IPInfo_Check"].hide()
1401 self["DNSInfo_Check"].hide()
1402 self["EditSettings_Text"].hide()
1403 self["EditSettingsButton"].hide()
1404 self["InfoText"].hide()
1405 self["InfoTextBorder"].hide()
1406 self["key_yellow"].setText("")
1408 def setLabels(self):
1409 self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))
1410 self["Adapter"] = MultiColorLabel()
1411 self["AdapterInfo"] = MultiPixmap()
1412 self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info"))
1413 self["AdapterInfo_OK"] = Pixmap()
1415 if self.iface in iNetwork.wlan_interfaces:
1416 self["Networktext"] = MultiColorLabel(_("Wireless Network"))
1418 self["Networktext"] = MultiColorLabel(_("Local Network"))
1420 self["Network"] = MultiColorLabel()
1421 self["NetworkInfo"] = MultiPixmap()
1422 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
1423 self["NetworkInfo_Check"] = MultiPixmap()
1425 self["Dhcptext"] = MultiColorLabel(_("DHCP"))
1426 self["Dhcp"] = MultiColorLabel()
1427 self["DhcpInfo"] = MultiPixmap()
1428 self["DhcpInfo_Text"] = MultiColorLabel(_("Show Info"))
1429 self["DhcpInfo_Check"] = MultiPixmap()
1431 self["IPtext"] = MultiColorLabel(_("IP Address"))
1432 self["IP"] = MultiColorLabel()
1433 self["IPInfo"] = MultiPixmap()
1434 self["IPInfo_Text"] = MultiColorLabel(_("Show Info"))
1435 self["IPInfo_Check"] = MultiPixmap()
1437 self["DNStext"] = MultiColorLabel(_("Nameserver"))
1438 self["DNS"] = MultiColorLabel()
1439 self["DNSInfo"] = MultiPixmap()
1440 self["DNSInfo_Text"] = MultiColorLabel(_("Show Info"))
1441 self["DNSInfo_Check"] = MultiPixmap()
1443 self["EditSettings_Text"] = MultiColorLabel(_("Edit settings"))
1444 self["EditSettingsButton"] = MultiPixmap()
1446 self["key_red"] = StaticText(_("Close"))
1447 self["key_green"] = StaticText(_("Start test"))
1448 self["key_yellow"] = StaticText(_("Stop test"))
1450 self["InfoTextBorder"] = Pixmap()
1451 self["InfoText"] = Label()
1453 def NetworkStatedataAvail(self,data):
1455 self["IP"].setForegroundColorNum(2)
1456 self["IP"].setText(_("confirmed"))
1457 self["IPInfo_Check"].setPixmapNum(0)
1459 self["IP"].setForegroundColorNum(1)
1460 self["IP"].setText(_("unconfirmed"))
1461 self["IPInfo_Check"].setPixmapNum(1)
1462 self["IPInfo_Check"].show()
1463 self["IPInfo_Text"].setForegroundColorNum(1)
1464 self.steptimer = True
1465 self.nextStepTimer.start(3000)
1467 def DNSLookupdataAvail(self,data):
1469 self["DNS"].setForegroundColorNum(2)
1470 self["DNS"].setText(_("confirmed"))
1471 self["DNSInfo_Check"].setPixmapNum(0)
1473 self["DNS"].setForegroundColorNum(1)
1474 self["DNS"].setText(_("unconfirmed"))
1475 self["DNSInfo_Check"].setPixmapNum(1)
1476 self["DNSInfo_Check"].show()
1477 self["DNSInfo_Text"].setForegroundColorNum(1)
1478 self["EditSettings_Text"].show()
1479 self["EditSettingsButton"].setPixmapNum(1)
1480 self["EditSettings_Text"].setForegroundColorNum(2) # active
1481 self["EditSettingsButton"].show()
1482 self["key_yellow"].setText("")
1483 self["key_green"].setText(_("Restart test"))
1484 self["shortcutsgreen"].setEnabled(False)
1485 self["shortcutsgreen_restart"].setEnabled(True)
1486 self["shortcutsyellow"].setEnabled(False)
1487 self["updown_actions"].setEnabled(True)
1488 self.activebutton = 6
1490 def getInfoCB(self,status):
1491 if status is not None:
1492 if status.startswith("No Connection") or status.startswith("Not-Associated") or status == False:
1493 self["Network"].setForegroundColorNum(1)
1494 self["Network"].setText(_("disconnected"))
1495 self["NetworkInfo_Check"].setPixmapNum(1)
1496 self["NetworkInfo_Check"].show()
1498 self["Network"].setForegroundColorNum(2)
1499 self["Network"].setText(_("connected"))
1500 self["NetworkInfo_Check"].setPixmapNum(0)
1501 self["NetworkInfo_Check"].show()
1504 iNetwork.stopLinkStateConsole()
1505 iNetwork.stopPingConsole()
1506 iNetwork.stopDNSConsole()
1508 def AccessPointInfo(self,iface):
1509 cmd = "iwconfig %s"%iface
1510 self.iwconfigConsole = Console()
1511 self.iwconfigConsole.ePopen(cmd,self.readAP,self.getInfoCB)
1513 def readAP(self,result,retval,extra_args):
1514 (callback) = extra_args
1516 if self.iwconfigConsole is not None:
1518 self.iwconfigConsole = None
1519 for content in result.splitlines():
1520 if 'Access Point' in content:
1521 self.apState = content.strip().split('Access Point: ')[1]
1522 callback(self.apState)
1524 callback(self.apState)
1526 class Wlanstatus(Screen):
1528 <screen position="center,center" size="510,400" title="Wireless Network Status..." >
1529 <widget source="status" render="Label" position="5,15" size="500,350" font="Regular;18" zPosition="1" />
1531 <ePixmap pixmap="skin_default/buttons/red.png" position="185,360" size="140,40" alphatest="on" />
1532 <widget source="key_red" render="Label" position="185,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
1535 def __init__(self, session,iface):
1536 Screen.__init__(self,session)
1537 self.session = session
1539 self["status"] = StaticText(_("Wait a moment..."))
1540 self["key_red"] = StaticText(_("Close"))
1541 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
1544 "cancel": self.close,
1548 self.onClose.append(self.cleanup)
1550 def readstatus(self):
1551 self.wlanstatus = Console()
1552 cmd1 = "iwconfig "+self.iface
1553 self.wlanstatus.ePopen(cmd1, self.iwconfigfinnished,self.statusdisplay)
1555 def iwconfigfinnished(self, result, retval,extra_args):
1557 (statecallback) = extra_args
1558 if self.wlanstatus is not None:
1560 statecallback(result)
1567 def statusdisplay(self,data):
1569 self["status"].setText(_("No information..."))
1571 self["status"].setText(data)
1577 self.stopWlanStatusConsole()
1579 def stopWlanStatusConsole(self):
1580 if self.wlanstatus is not None:
1581 if len(self.wlanstatus.appContainers):
1582 for name in self.wlanstatus.appContainers.keys():
1583 self.wlanstatus.kill(name)
1585 def openconfig(session, **kwargs):
1586 session.open(WlanSelection)
1588 def selSetup(menuid, **kwargs):
1590 if menuid != "system":
1593 for x in iNetwork.getInstalledAdapters():
1594 if x.startswith('eth'):
1598 return [(_("Wireless LAN Setup"), openconfig, "wlansetup_config", 80)]
1603 def Plugins(**kwargs):
1604 return PluginDescriptor(name=_("Wireless LAN Setup"), description="Wireless LAN Setup", where = PluginDescriptor.WHERE_MENU, fnc=selSetup)