233662a192f4379be5d53e1187b8666b0336c752
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / WirelessLanSetup / plugin.py
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
29 import time
30 from pythonwifi.iwlibs import Wireless
31 import pythonwifi.flags
32
33 class WlanSelection(Screen,HelpableScreen):
34         skin =  """
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" />
38
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" />
41
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" />
44
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" />
47                 </screen>
48                 """
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",
59                 {
60                         "ok": (self.ok, _("select interface")),
61                         "cancel": (self.close, _("exit network interface list")),
62                 })
63
64                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
65                 {
66                         "green": (self.ok, _("select interface")),
67                         "red": (self.close, _("exit network interface list")),
68                 })
69                 self.updateInterfaces()
70                 self.onClose.append(self.cleanup)
71
72         def updateInterfaces(self):
73                 iNetwork.config_ready = False
74                 iNetwork.msgPlugins()
75                 iNetwork.getInterfaces()
76
77         def ok(self):
78 #               print len(self["menulist"].list)
79                 if len(self["menulist"].list) == 0:
80                         self.session.open(MessageBox, (_("Can not find any WirelessLan Module\n")),MessageBox.TYPE_ERROR,5 )
81                         return
82                 ifaces=self["menulist"].getCurrent()[1]
83                 if ifaces == None:
84                         pass
85                 else:
86                         self.session.open(WlanSetup,ifaces)
87
88         def getWlandevice(self):
89                 list = []
90                 for x in iNetwork.getInstalledAdapters():
91                         if x.startswith('eth'):
92                                 continue
93                         description=self.getAdapterDescription(x)
94                         if description == "Unknown network adapter":
95                                 list.append((description,x))
96                         else:
97                                 list.append((description + " (%s)"%x,x))
98                 return list
99
100         def getAdapterDescription(self, iface):
101                 classdir = "/sys/class/net/" + iface + "/device/"
102                 driverdir = "/sys/class/net/" + iface + "/device/driver/"
103                 if os_path.exists(classdir):
104                         files = listdir(classdir)
105                         if 'driver' in files:
106                                 if os_path.realpath(driverdir).endswith('rtw_usb_drv'):
107                                         return _("Realtek")+ " " + _("WLAN adapter.")
108                                 elif os_path.realpath(driverdir).endswith('ath_pci'):
109                                         return _("Atheros")+ " " + _("WLAN adapter.")
110                                 elif os_path.realpath(driverdir).endswith('zd1211b'):
111                                         return _("Zydas")+ " " + _("WLAN adapter.")
112                                 elif os_path.realpath(driverdir).endswith('rt73'):
113                                         return _("Ralink")+ " " + _("WLAN adapter.")
114                                 elif os_path.realpath(driverdir).endswith('rt73usb'):
115                                         return _("Ralink")+ " " + _("WLAN adapter.")
116                                 else:
117                                         return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter")
118                         else:
119                                 return _("Unknown network adapter")
120                 else:
121                         return _("Unknown network adapter")
122
123         def cleanup(self):
124                 iNetwork.stopGetInterfacesConsole()
125
126 class WlanSetup(Screen,HelpableScreen):
127         skin =  """
128                 <screen position="center,center" size="510,400" title="Wireless Network Setup Menu..." >
129                         <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
130                         <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
131
132                         <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
133                         <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
134
135                         <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" />
136                         <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" />
137
138                         <widget name="menulist" position="20,20" size="230,260" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
139                         <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
140                 </screen>
141                 """
142         def __init__(self, session, ifaces):
143                 Screen.__init__(self, session)
144                 HelpableScreen.__init__(self)
145                 self.session = session
146                 self.iface = ifaces
147                 self.restartLanRef = None
148                 self.LinkState = None
149                 self.mainmenu = self.MakeMenu()
150                 self["menulist"] = MenuList(self.mainmenu)
151                 self["key_red"] = StaticText(_("Close"))
152                 self["key_green"] = StaticText(_("Select"))
153                 self["description"] = StaticText()
154                 self["IFtext"] = StaticText()
155                 self["IF"] = StaticText()
156                 self["Statustext"] = StaticText()
157                 self["statuspic"] = MultiPixmap()
158                 self["statuspic"].hide()
159                 self.onLayoutFinish.append(self.loadDescription)
160                 
161                 self.oktext = _("Press OK on your remote control to continue.")
162                 
163                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
164                         {
165                         "up": (self.up, _("move up to previous entry")),
166                         "down": (self.down, _("move down to next entry")),
167                         "left": (self.left, _("move up to first entry")),
168                         "right": (self.right, _("move down to last entry")),
169                         })
170                 
171                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
172                         {
173                         "cancel": (self.close, _("exit networkadapter setup menu")),
174                         "ok": (self.ok, _("select menu entry")),
175                         })
176
177                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
178                         {
179                         "red": (self.close, _("exit networkadapter setup menu")),
180                         "green": (self.ok, _("select menu entry")),
181                         })
182
183                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
184                 {
185                         "ok": self.ok,
186                         "back": self.close,
187                         "up": self.up,
188                         "down": self.down,
189                         "red": self.close,
190                         "left": self.left,
191                         "right": self.right,
192                 }, -2)
193                 self.onClose.append(self.cleanup)
194
195         def loadDescription(self):
196                 if self["menulist"].getCurrent()[1] == 'setting':
197                         self["description"].setText(_("Edit the network configuration of your STB.\n" ) + self.oktext )
198                 if self["menulist"].getCurrent()[1] == 'scanap':
199                         self["description"].setText(_("Scan your network for wireless access points and connect to them using your selected wireless device.\n" ) + self.oktext )
200                 if self["menulist"].getCurrent()[1] == 'dns':
201                         self["description"].setText(_("Edit the Nameserver configuration of your STB.\n" ) + self.oktext )
202                 if self["menulist"].getCurrent()[1] == 'status':
203                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
204                 if self["menulist"].getCurrent()[1] == 'test':
205                         self["description"].setText(_("Test the network configuration of your STB.\n" ) + self.oktext )
206                 if self["menulist"].getCurrent()[1] == 'restart':
207                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
208
209         def up(self):
210                 self["menulist"].up()
211                 self.loadDescription()
212
213         def down(self):
214                 self["menulist"].down()
215                 self.loadDescription()
216
217         def left(self):
218                 self["menulist"].pageUp()
219                 self.loadDescription()
220
221         def right(self):
222                 self["menulist"].pageDown()
223                 self.loadDescription()
224
225         def ok(self):
226                 self.cleanup()
227                 if self["menulist"].getCurrent()[1] == 'setting':
228                         self.session.openWithCallback(self.checklist, WlanConfig, self.iface)
229                 elif self["menulist"].getCurrent()[1] == 'scanap':
230                         self.session.openWithCallback(self.WlanScanApCallback, WlanScanAp, self.iface)
231                 elif self["menulist"].getCurrent()[1] == 'dns':
232                         self.session.open(NameserverSetup)
233                 elif self["menulist"].getCurrent()[1] == 'status':
234                         self.session.open(Wlanstatus, self.iface)
235                 elif self["menulist"].getCurrent()[1] == 'test':
236                         self.session.openWithCallback(self.checklist,NetworkAdapterTest,self.iface)
237                 elif self["menulist"].getCurrent()[1] == 'restart':
238                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
239
240         def checklist(self):
241                 self["menulist"].setList(self.MakeMenu())
242
243         def MakeMenu(self):
244                 menu = []
245                 menu.append((_("Adapter settings"), "setting"))
246                 menu.append((_("Scan Wireless AP"), "scanap"))
247                 menu.append((_("Nameserver settings"), "dns"))
248                 if iNetwork.getAdapterAttribute(self.iface, "up"):
249                         menu.append((_("Show WLAN Status"), "status"))
250                 menu.append((_("Network test"), "test"))
251                 menu.append((_("Restart network"), "restart"))
252
253                 return menu
254
255         def WlanScanApCallback(self, essid = None):
256                 if essid is not None:
257                         self.session.openWithCallback(self.checklist, WlanConfig, self.iface, essid)
258
259         def restartLan(self, ret = False):
260                 if (ret == True):
261                         iNetwork.restartNetwork(self.restartLanDataAvail)
262                         self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False)
263
264         def restartLanDataAvail(self, data):
265                 if data is True:
266                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
267
268         def getInterfacesDataAvail(self, data):
269                 if data is True:
270                         self.restartLanRef.close(True)
271
272         def restartfinishedCB(self,data):
273                 if data is True:
274                         self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 5, default = False)
275
276         def cleanup(self):
277                 iNetwork.stopRestartConsole()
278                 iNetwork.stopGetInterfacesConsole()
279
280 wlanconfig = ConfigSubsection()
281 wlanconfig.usedevice = ConfigSelection(default = "off", choices = [
282         ("off", _("off")), ("on", _("on"))])
283 wlanconfig.usedhcp = ConfigSelection(default = "off", choices = [
284         ("off", _("no")), ("on", _("yes"))])
285 wlanconfig.essid = ConfigSelection(default = "none", choices = ["none"])
286 wlanconfig.encrypt = ConfigSelection(default = "off", choices = [
287         ("off", _("no")), ("on", _("yes"))])
288 wlanconfig.method = ConfigSelection(default = "wep", choices = [
289         ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
290 wlanconfig.keytype = ConfigSelection(default = "ascii", choices = [
291         ("ascii", _("ASCII")), ("hex", _("HEX"))])
292 wlanconfig.key = ConfigPassword(default = "XXXXXXXX", visible_width = 50, fixed_size = False)
293 wlanconfig.usegateway = ConfigSelection(default = "off", choices = [
294         ("off", _("no")), ("on", _("yes"))])
295 wlanconfig.ip    = ConfigIP([0,0,0,0])
296 wlanconfig.netmask = ConfigIP([0,0,0,0])
297 wlanconfig.gateway = ConfigIP([0,0,0,0])
298
299 selectap = None 
300 class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
301         skin =  """
302                 <screen position="center,center" size="510,400" title="Wireless Network Configuration..." >
303                         <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
304                         <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
305
306                         <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" />
307                         <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" />
308
309                         <widget name="config" position="10,10" backgroundColor="#371e1c1a" transparent="1" size="480,210" scrollbarMode="showOnDemand" />
310                         <ePixmap pixmap="skin_default/div-h.png" position="0,225" zPosition="1" size="550,2" />
311                         <eLabel text="IP Address : " position="100,250" size="190,21" font="Regular;19" />
312                         <widget source="ipaddress" render="Label" position="300,250" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />
313                         <eLabel text="NetMask : " position="100,275" size="190,21" font="Regular;19" />
314                         <widget source="netmask" render="Label" position="300,275" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />     
315                         <eLabel text="Gateway : " position="100,300" size="190,21" font="Regular;19" />
316                         <widget source="gateway" render="Label" position="300,300" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />
317                         <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="460,230" zPosition="10" size="35,25" transparent="1" alphatest="on" />
318                         <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="383,420" zPosition="1" size="1,1" transparent="1" alphatest="on" />
319                 </screen>
320                 """
321         def __init__(self, session, iface, essidSelected = None):
322                 Screen.__init__(self,session)
323                 self.session = session
324                 self["key_red"] = StaticText(_("Close"))
325                 self["key_green"] = StaticText(_("Ok"))
326                 self["ipaddress"] = StaticText(_("[ N/A ]"))
327                 self["netmask"] = StaticText(_("[ N/A ]"))              
328                 self["gateway"] = StaticText(_("[ N/A ]"))
329                 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
330                 {
331                         "ok": self.saveWlanConfig,
332                         "green": self.saveWlanConfig,
333                         "cancel": self.keyCancel,
334                         "red": self.keyCancel,
335                 }, -2)
336                 self["HelpWindow"] = Pixmap()
337                 self["HelpWindow"].hide()
338                 self["VKeyIcon"] = Pixmap()
339                 self["VKeyIcon"].hide()
340                 self.iface = iface
341                 self.essidSelected = essidSelected
342                 self.ssid = None
343                 self.ap_scan = None
344                 self.scan_ssid = None
345                 self.key_mgmt = None
346                 self.proto = None
347                 self.key_type = None
348                 self.encryption_key = None
349                 self.wlanscanap = None
350                 self.wpaphraseconsole = None
351                 self.list = []
352                 ConfigListScreen.__init__(self, self.list,session = self.session)
353                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
354                 self.readWpaSupplicantConf()
355                 self.scanAplistTimer = eTimer()
356                 self.scanAplistTimer.callback.append(self.scanApList)
357                 self.emptyListMsgTimer = eTimer()
358                 self.emptyListMsgTimer.callback.append(self.emptyListMsg)
359                 self.Console = Console()
360                 self.updateInterfaces(self.readWlanSettings)
361                 self.onClose.append(self.cleanup)
362
363         def updateInterfaces(self,callback = None):
364                 iNetwork.config_ready = False
365                 iNetwork.msgPlugins()
366                 iNetwork.getInterfaces(callback)
367
368         def readWlanSettings(self,ret=None):
369                 if ret is not True:
370                         print "getInterfaces Fail... "
371                 if iNetwork.getAdapterAttribute(self.iface, "up") == True:
372                         default_tmp = "on"
373                 else:
374                         default_tmp = "off"
375                 wlanconfig.usedevice = ConfigSelection(default=default_tmp, choices = [("off", _("off")), ("on", _("on"))])
376
377                 if iNetwork.getAdapterAttribute(self.iface, "dhcp"):
378                         default_tmp = "on"
379                 else:
380                         default_tmp = "off"
381                 wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
382
383                 wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0]
384
385                 wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])
386                 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
387                         default_tmp = "on"
388                 else:
389                         default_tmp = "off"
390                 wlanconfig.usegateway = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
391
392                 wlanconfig.gateway = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])
393
394                 self["ipaddress"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "ip"))))
395                 self["netmask"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask"))))
396                 self["gateway"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway"))))
397
398                 if self.encryption_key is not None:
399                         default_tmp = "on"
400                 else:
401                         default_tmp = "off"
402                 wlanconfig.encrypt = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
403
404                 if self.key_mgmt=="NONE":
405                         default_tmp = "wep"
406                 elif self.key_mgmt == "WPA-PSK":
407                         if self.proto == "WPA":
408                                 default_tmp = "wpa"
409                         elif self.proto == "RSN":
410                                 default_tmp = "wpa2"
411                         elif self.proto in ( "WPA RSN", "WPA WPA2"):
412                                 default_tmp = "wpa/wpa2"
413                         else:
414                                 default_tmp = "wpa"
415                 else:
416                         default_tmp = "wep"
417
418                 wlanconfig.method = ConfigSelection(default = default_tmp, choices = [
419                         ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
420
421                 if self.key_type == 0:
422                         default_tmp = "hex"
423                 else:
424                         default_tmp = "ascii"
425                 wlanconfig.keytype = ConfigSelection(default = default_tmp, choices = [
426                         ("ascii", _("ASCII")), ("hex", _("HEX"))])
427                 default_tmp = self.encryption_key or "XXXXXXXX"
428                 wlanconfig.key = ConfigPassword(default = default_tmp, visible_width = 50, fixed_size = False)
429                 self.getApList()
430
431         def readWpaSupplicantConf(self):
432                 try:
433                         if fileExists("/etc/wpa_supplicant.conf"):
434                                 wpafd = open("/etc/wpa_supplicant.conf","r")
435                                 if wpafd >0:
436                                         data = wpafd.readline()
437                                         while len(data) > 0:
438 #                                               print "####readWpaSupplicantConf, data : ",data
439                                                 data = data.lstrip()
440                                                 if len(data) == 0:
441                                                         data = wpafd.readline()
442                                                         continue
443                                                 if data.startswith('ssid=') and len(data) > 6:
444                                                         self.ssid = data[6:-2]
445                                                 elif data.startswith('ap_scan=') :
446                                                         self.ap_scan = data[8:]
447 #                                                       print "####readWpaSupplicantConf, ap_scan : ",self.ap_scan
448                                                 elif data.startswith('scan_ssid=') and len(data) > 10:
449                                                         self.scan_ssid = data[10:-1]
450                                                 elif data.startswith('key_mgmt=') and len(data) > 9:
451                                                         self.key_mgmt = data[9:-1]
452                                                 elif data.startswith('proto=') and len(data) > 6:
453                                                         self.proto = data[6:-1]
454                                                 elif data.startswith('wep_key0="') and len(data) > 11:
455                                                         self.key_type = 1 # ascii
456                                                         self.encryption_key = data[10:-2]
457                                                 elif data.startswith('wep_key0=') and len(data) > 9:
458                                                         self.key_type = 0 # hex
459                                                         self.encryption_key = data[9:-1]
460                                                 elif data.startswith('psk="') and len(data) > 6:
461                                                         self.key_type = 1 # ascii
462                                                         self.encryption_key = data[5:-2]
463                                                 elif data.startswith('#psk="') and len(data) > 6:
464                                                         self.key_type = 0 # hex
465                                                         self.encryption_key = data[6:-2]
466                                                 elif not self.encryption_key and data.startswith('psk=') and len(data) > 4:
467                                                         self.key_type = 0 # hex
468                                                         self.encryption_key = data[4:-1]
469                                                 data = wpafd.readline()
470 #                                       print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key
471                                         wpafd.close()
472                                 else:
473                                         print 'read error'
474                         else:
475                                 pass
476                 except:
477                         print 'failed loading wpasupplicant.conf'
478
479         def createConfig(self):
480                 self.configList=[]
481                 self.usedeviceEntry = getConfigListEntry(_("Use Device"), wlanconfig.usedevice)
482                 self.usedhcpEntry = getConfigListEntry(_("Use DHCP"), wlanconfig.usedhcp)
483                 self.essidEntry = getConfigListEntry(_("ESSID"), wlanconfig.essid)
484                 self.hiddenessidEntry = getConfigListEntry(_("Input Hidden ESSID"), wlanconfig.hiddenessid)
485                 self.encryptEntry = getConfigListEntry(_("Encrypt"), wlanconfig.encrypt)
486                 self.methodEntry = getConfigListEntry(_("Method"), wlanconfig.method)
487                 self.keytypeEntry = getConfigListEntry(_("Key Type"), wlanconfig.keytype)
488                 self.keyEntry = getConfigListEntry(_("KEY"), wlanconfig.key)
489
490                 self.ipEntry = getConfigListEntry(_("IP"), wlanconfig.ip)
491                 self.netmaskEntry = getConfigListEntry(_("NetMask"), wlanconfig.netmask)
492
493                 self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway)
494                 self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway)
495
496                 self.configList.append( self.usedeviceEntry )
497                 if wlanconfig.usedevice.value is "on":
498                         self.configList.append( self.usedhcpEntry )
499                         if wlanconfig.usedhcp.value is "off":
500                                 self.configList.append(self.ipEntry)
501                                 self.configList.append(self.netmaskEntry)
502                                 self.configList.append(self.usegatewayEntry)
503                                 if wlanconfig.usegateway.value is "on":
504                                         self.configList.append(self.gatewayEntry)
505                         self.configList.append( self.essidEntry )
506                         if wlanconfig.essid.value == 'Input hidden ESSID':
507                                 self.configList.append( self.hiddenessidEntry )
508                         self.configList.append( self.encryptEntry )
509                         if wlanconfig.encrypt.value is "on" :
510                                 self.configList.append( self.methodEntry )
511                                 if wlanconfig.method.value =="wep":
512                                         self.configList.append( self.keytypeEntry )
513                                 self.configList.append( self.keyEntry )
514
515                 self["config"].list = self.configList
516                 self["config"].l.setList(self.configList)
517                 if not self.showTextIcon in self["config"].onSelectionChanged:
518                         self["config"].onSelectionChanged.append(self.showTextIcon)
519
520         def showTextIcon(self):
521                 if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
522                         self["VKeyIcon"].show()
523                 else:
524                         self["VKeyIcon"].hide()
525
526         def getApList(self):
527                 if self.essidSelected is None:
528                         self.apList = []
529                         self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
530                         self.scanAplistTimer.start(100,True)
531                 else:
532                         self.apList = [self.essidSelected]
533                         wlanconfig.essid = ConfigSelection(choices = self.apList)
534                         if self.ssid is not None:
535                                 wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
536                         else:
537                                 wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
538                         self.createConfig()
539
540         def scanApList(self):
541                 if self.oldInterfaceState is not True:
542                         os_system("ifconfig "+self.iface+" up")
543                         iNetwork.setAdapterAttribute(self.iface, "up", True)
544                 Iwscanresult  = None
545                 wirelessObj = Wireless(self.iface)
546                 try:
547                         Iwscanresult  = wirelessObj.scan()
548                 except IOError:
549                         print "%s Interface doesn't support scanning.."%self.iface
550 #                       self.session.open(MessageBox, "%s Interface doesn't support scanning.."%self.iface, MessageBox.TYPE_ERROR,10)
551                 self.configurationmsg.close(True)
552                 if Iwscanresult is None:
553                         self.emptyListMsgTimer.start(100,True)
554                 else:
555                         for ap in Iwscanresult:
556                                 if ap.essid not in self.apList and len(ap.essid) > 0:
557                                         self.apList.append(ap.essid)
558                 self.apList.append('Input hidden ESSID')
559                 if selectap is not None and selectap in self.apList:
560                         wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList)
561                 elif self.scan_ssid is not None and self.scan_ssid.strip() == '1':
562                         wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList)
563                 elif self.ssid is not None and self.ssid in self.apList:
564                         wlanconfig.essid = ConfigSelection(default=self.ssid, choices = self.apList)
565                 else:
566                         try:
567                                 wlanconfig.essid = ConfigSelection(defalut = self.apList[0], choices = self.apList)
568                         except:
569                                 wlanconfig.essid = ConfigSelection(choices = self.apList)
570                 if self.ssid is not None:
571                         wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
572                 else:
573                         wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
574                 self.createConfig()
575
576         def emptyListMsg(self):
577                 self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
578
579         def keyLeft(self):
580                 ConfigListScreen.keyLeft(self)
581                 self.newConfig()
582
583         def keyRight(self):
584                 ConfigListScreen.keyRight(self)
585                 self.newConfig()
586
587         def newConfig(self):
588                 if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \
589                         or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \
590                         or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry:
591                         self.createConfig()
592
593         def saveWlanConfig(self):
594                 try:
595                         if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
596                                 self["config"].getCurrent()[1].onDeselect(self.session)
597                         if self["config"].isChanged():
598                                 self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) )
599                         else:
600                                 self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
601                 except:
602                         pass
603
604         def checkNetworkConfig(self, ret = False):
605                 if ret == False:
606                         if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
607                                 self["config"].getCurrent()[1].onSelect(self.session)
608                         return
609                 if wlanconfig.essid.value == 'Input hidden ESSID':
610                         if len(wlanconfig.hiddenessid.value) == 0:
611                                 self.session.open(MessageBox, ("PLEASE INPUT HIDDEN ESSID"), type = MessageBox.TYPE_ERROR, timeout = 10)
612                                 return
613                 if len(wlanconfig.key.value) == 0:
614                         self.session.open(MessageBox, ("PLEASE INPUT NETWORK KEY"), type = MessageBox.TYPE_ERROR, timeout = 10)
615                         return
616                 self.checkNetworkShares()
617
618         def checkNetworkShares(self):
619                 if not self.Console:
620                         self.Console = Console()
621                 cmd = "cat /proc/mounts"
622                 self.Console.ePopen(cmd, self.checkSharesFinished, self.confirmAnotherIfaces)
623
624         def checkSharesFinished(self, result, retval, extra_args):
625                 callback = extra_args
626 #               print "checkMountsFinished : result : \n",result
627                 networks = ['nfs','smbfs','ncp','coda']
628                 for line in result.splitlines():
629                         split = line.strip().split(' ',3)
630                         if split[2] in networks:
631                                 self.session.open(MessageBox, ("NOT deconfiguring network interfaces :\n network shares still mounted\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
632                                 callback(False)
633                                 if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
634                                         self["config"].getCurrent()[1].onSelect(self.session)
635                                 return
636                 callback(True)
637
638         def confirmAnotherIfaces(self, ret = False):
639                 if ret == False:
640                         return
641                 else:
642                         num_configured_if = len(iNetwork.getConfiguredAdapters())
643                         if num_configured_if >= 1:
644                                 if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
645                                         self.getWpaPhrase(False)
646                                 else:
647                                         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)
648                         else:
649                                 self.getWpaPhrase(False)
650
651         def getWpaPhrase(self,ret):
652                 if ret == True:
653                         configuredInterfaces = iNetwork.getConfiguredAdapters()
654                         for interface in configuredInterfaces:
655                                 if interface == self.iface:
656                                         continue
657                                 iNetwork.setAdapterAttribute(interface, "up", False)
658                                 iNetwork.deactivateInterface(interface)
659                 if wlanconfig.method.value =="wep":
660                         self.writeWpasupplicantConf("wep") # passphrasekey is not None
661                 else:
662                         if wlanconfig.essid.value == 'Input hidden ESSID':
663                                 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.hiddenessid.value,wlanconfig.key.value)
664                         else :
665                                 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.essid.value,wlanconfig.key.value)
666                         print cmd
667                         self.wpaphraseconsole = Console()
668                         self.wpaphraseconsole.ePopen(cmd, self.parseWpaPhrase, self.writeWpasupplicantConf)
669
670         def parseWpaPhrase(self, result, retval, extra_args):
671                 (writewlanconfig) = extra_args
672                 if self.wpaphraseconsole is not None:
673                         if retval == 0:
674                                 self.wpaphraseconsole.killAll()
675                                 self.wpaphraseconsole = None
676 #                               print "parseWpaPhrase result : "
677 #                               print result
678                                 psk = None
679                                 for line in result.splitlines():
680                                         if line.find('ssid') == -1 and line.find('#psk=') != -1:
681                                                 plainpwd        = line
682                                         elif line.find('psk=') != -1:
683                                                 psk = line
684                                 if psk:
685                                         writewlanconfig(psk,plainpwd)
686                                 else:
687                                         writewlanconfig(None)
688                         else:
689                                 writewlanconfig(None)
690
691         def writeWpasupplicantConf(self, passphrasekey=None,plainpwd=None):
692                 if passphrasekey:
693                         wpafd = open("/etc/wpa_supplicant.conf","w")
694                         if wpafd > 0:
695                                 contents = "#WPA Supplicant Configuration by STB\n"
696                                 contents += "ctrl_interface=/var/run/wpa_supplicant\n"
697                                 contents += "eapol_version=1\n"
698                                 contents += "fast_reauth=1\n"
699                                 contents += "ap_scan=1\n"
700                                 contents += "network={\n"
701                                 if wlanconfig.essid.value == 'Input hidden ESSID':
702                                         contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n"
703                                         contents += "\tscan_ssid=1\n"
704                                 else :
705                                         contents += "\tssid=\""+wlanconfig.essid.value+"\"\n"
706                                         contents += "\tscan_ssid=0\n"
707                                 if wlanconfig.encrypt.value == "on":
708                                         if wlanconfig.method.value =="wep":
709                                                 contents += "\tkey_mgmt=NONE\n"
710                                                 contents += "\twep_key0="
711                                                 if wlanconfig.keytype.value == "ascii":
712                                                         contents += "\""+wlanconfig.key.value+"\"\n"
713                                                 else:
714                                                         contents += wlanconfig.key.value+"\n"
715                                         else:
716 #                                               print "plainpwd : ",plainpwd
717 #                                               print "passphrasekey : ",passphrasekey
718                                                 if wlanconfig.method.value == "wpa":
719                                                         contents += "\tkey_mgmt=WPA-PSK\n"
720                                                         contents += "\tproto=WPA\n"
721                                                         contents += "\tpairwise=CCMP TKIP\n"
722                                                         contents += "\tgroup=CCMP TKIP\n"       
723                                                 elif wlanconfig.method.value == "wpa2":
724                                                         contents += "\tkey_mgmt=WPA-PSK\n"
725                                                         contents += "\tproto=RSN\n"
726                                                         contents += "\tpairwise=CCMP TKIP\n"
727                                                         contents += "\tgroup=CCMP TKIP\n"
728                                                 else:
729                                                         contents += "\tkey_mgmt=WPA-PSK\n"
730                                                         contents += "\tproto=WPA RSN\n"
731                                                         contents += "\tpairwise=CCMP TKIP\n"
732                                                         contents += "\tgroup=CCMP TKIP\n"
733                                                 contents += plainpwd+"\n"
734                                                 contents += passphrasekey+"\n"
735                                 else:
736                                         contents += "\tkey_mgmt=NONE\n"
737                                 contents += "}\n"
738                                 print "content = \n"+contents
739                                 wpafd.write(contents)
740                                 wpafd.close()
741                                 self.writeNetConfig(0)
742                         else :
743                                 self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
744                                 self.writeNetConfig(-1)
745                 else:
746                         self.writeNetConfig(-2)
747
748         def writeNetConfig(self,ret = -1):
749                 if ret == -1:
750                         self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
751                         return
752                 elif ret == -2:
753                         self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10)
754                         return
755
756                 if wlanconfig.usedevice.value=="on":
757                         iNetwork.setAdapterAttribute(self.iface, "up", True)
758                         if wlanconfig.usedhcp.value =="on":
759                                 iNetwork.setAdapterAttribute(self.iface, "dhcp", True)
760                         else:
761                                 iNetwork.setAdapterAttribute(self.iface, "dhcp", False)
762                                 iNetwork.setAdapterAttribute(self.iface, "ip", wlanconfig.ip.value)
763                                 iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value)
764                                 if wlanconfig.usegateway.value == "on":
765                                         iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value)
766                 else:
767                         iNetwork.setAdapterAttribute(self.iface, "up", False)
768                         iNetwork.deactivateInterface(self.iface)
769                 contents = "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n"
770                 contents += "\tpost-down wpa_cli terminate\n\n"
771                 iNetwork.setAdapterAttribute(self.iface, "configStrings", contents)
772                 iNetwork.writeNetworkConfig()
773                 iNetwork.restartNetwork(self.updateCurrentInterfaces)
774                 self.configurationmsg = None
775                 self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
776
777
778         def updateCurrentInterfaces(self,ret):
779                 if ret is True:
780                         iNetwork.getInterfaces(self.configurationMsgClose)
781
782         def configurationMsgClose(self,ret):
783                 if ret is True and self.configurationmsg is not None:
784                         self.configurationmsg.close(True)
785
786         def configFinished(self,data):
787                 global selectap
788                 if data is True:
789                         self.session.openWithCallback(self.configFinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
790                         selectap = wlanconfig.essid.value
791
792         def configFinishedCB(self,data):
793                 if data is not None:
794                         if data is True:
795                                 self.close()
796         
797         def formatip(self, iplist):
798                 list = []
799                 list = iplist
800 #               print "iplist : ",iplist
801                 try:
802                         if len(iplist) == 4:
803                                 result = str(iplist[0])+"."+str(iplist[1])+"."+str(iplist[2])+"."+str(iplist[3])
804                         else:
805                                 result ="0.0.0.0"
806 #                       print "result : ",result
807                         return result
808                 except:
809                         return "[N/A]"
810                         
811         def keyCancelConfirm(self, result):
812                 if not result:
813                         return
814                 if self.oldInterfaceState is False:
815                         iNetwork.setAdapterAttribute(self.iface, "up", False)
816                         iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
817                 else:
818                         self.close()
819
820         def keyCancel(self,yesno = True):
821                 if self["config"].isChanged():
822                         self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
823                 else:
824                         self.keyCancelConfirm(True)
825
826         def keyCancelCB(self,data):
827                 if data is not None:
828                         if data is True:
829                                 self.close()
830
831         def cleanup(self):
832                 iNetwork.stopRestartConsole()
833                 iNetwork.stopGetInterfacesConsole()
834                 iNetwork.stopDeactivateInterfaceConsole()
835                 self.stopwlanscanapConsole()
836                 self.stopCheckNetworkSharesConsole()
837                 self.stopWpaPhraseConsole()
838
839         def stopwlanscanapConsole(self):
840                 if self.wlanscanap is not None:
841                         if len(self.wlanscanap.appContainers):
842                                 for name in self.wlanscanap.appContainers.keys():
843                                         self.wlanscanap.kill(name)
844
845         def stopCheckNetworkSharesConsole(self):
846                 if self.Console is not None:
847                         if len(self.Console.appContainers):
848                                 for name in self.Console.appContainers.keys():
849                                         self.Console.kill(name)
850
851         def stopWpaPhraseConsole(self):
852                 if self.wpaphraseconsole is not None:
853                         if len(self.wpaphraseconsole.appContainers):
854                                         for name in self.wpaphraseconsole.appContainers.keys():
855                                                 self.wpaphraseconsole.kill(name)
856
857 class WlanScanAp(Screen,HelpableScreen):
858         skin =  """
859                 <screen position="center,center" size="510,400" title="Wireless Network AP Scan..." >
860                         <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
861                         <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
862
863                         <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
864                         <ePixmap pixmap="skin_default/buttons/green.png" position="185,360" size="140,40" alphatest="on" />
865                         <ePixmap pixmap="skin_default/buttons/blue.png" position="360,360" size="140,40" alphatest="on" />
866
867                         <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" />
868                         <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" />
869                         <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" />
870
871                         <widget name="menulist" position="20,20" size="230,260" backgroundColor="#371e1c1a" transparent="1" zPosition="10" scrollbarMode="showOnDemand" />
872
873                         <widget source="Address" render="Label" position="265,70" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
874                         <widget source="ESSID" render="Label" position="265,100" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
875                         <widget source="Protocol" render="Label" position="265,130" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
876                         <widget source="Frequency" render="Label" position="265,160" zPosition="1" size="240,40" font="Regular;18" halign="center" valign="center" />
877                         <widget source="Encryption key" render="Label" position="265,200" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
878                         <widget source="BitRate" render="Label" position="265,220" zPosition="1" size="240,60" font="Regular;18" halign="center" valign="center" />
879                 </screen>
880                 """
881         def __init__(self, session, iface):
882                 Screen.__init__(self,session)
883                 HelpableScreen.__init__(self)
884                 self.session = session
885                 self.iface = iface
886                 self.wlanscanap = None
887                 self.apList = {}
888                 self.setApList = []
889
890                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
891                 {
892                         "up": (self.up, _("move up to previous entry")),
893                         "down": (self.down, _("move down to next entry")),
894                         "left": (self.left, _("move up to first entry")),
895                         "right": (self.right, _("move down to last entry")),
896                 }, -2)
897
898                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
899                 {
900                         "cancel": (self.close, _("exit")),
901                         "ok": (self.ok, "select AP"),
902                 })
903
904                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
905                 {
906                         "red": (self.close, _("exit")),
907                         "green": (self.ok, "select AP"),
908                         "yellow": (self.restartScanAP, "restart scan AP"),
909                         "blue": (self.startWlanConfig, "Edit Wireless settings"),
910                 })
911
912                 self["menulist"] = MenuList(self.setApList)
913                 self["key_red"] = StaticText(_("Close"))
914                 self["key_green"] = StaticText(_("Select"))
915                 self["key_blue"] = StaticText(_("EditSetting"))
916                 self["Address"] = StaticText(_("Scanning AP List.."))
917                 self["ESSID"] = StaticText(_("Wait a moment"))
918                 self["Protocol"] = StaticText(" ")
919                 self["Frequency"] = StaticText(" ")
920                 self["Encryption key"] = StaticText(" ")
921                 self["BitRate"] = StaticText(" ")
922                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
923                 self.getAplistTimer = eTimer()
924                 self.getAplistTimer.callback.append(self.getApList)
925                 self.scanAplistTimer = eTimer()
926                 self.scanAplistTimer.callback.append(self.scanApList)
927                 self.emptyListMsgTimer = eTimer()
928                 self.emptyListMsgTimer.callback.append(self.emptyListMsg)
929                 self.apList = {}
930                 self.onClose.append(self.__onClose)
931                 self.getAplistTimer.start(100,True)
932                 
933         def left(self):
934                 self["menulist"].pageUp()
935                 self.displayApInfo()
936         
937         def right(self):
938                 self["menulist"].pageDown()
939                 self.displayApInfo()
940
941         def up(self):
942                 self["menulist"].up()
943                 self.displayApInfo()
944                 
945         def down(self):
946                 self["menulist"].down()
947                 self.displayApInfo()
948
949         def ok(self):
950                 global selectap
951                 selectAp=self["menulist"].getCurrent()[0]
952                 selectap = selectAp
953                 self.close()
954
955         def startWlanConfig(self):
956                 selectAp=self["menulist"].getCurrent()[0]
957                 self.close(selectAp)
958
959         def getApList(self):
960                 self.apList = {}
961                 self.setApList = []
962                 self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
963                 self.scanAplistTimer.start(100,True)
964
965         def scanApList(self):
966                 if self.oldInterfaceState is not True:
967                         os_system("ifconfig "+self.iface+" up")
968                         iNetwork.setAdapterAttribute(self.iface, "up", True)
969                 Iwscanresult  = None
970                 wirelessObj = Wireless(self.iface)
971                 try:
972                         Iwscanresult  = wirelessObj.scan()
973                 except IOError:
974                         print "%s Interface doesn't support scanning.."%self.iface
975 #                       self.session.open(MessageBox, "%s Interface doesn't support scanning.."%self.iface, MessageBox.TYPE_ERROR,10)
976                 self.configurationmsg.close(True)
977                 if Iwscanresult is not None:
978                         (num_channels, frequencies) = wirelessObj.getChannelInfo()
979                         index = 1
980                         for ap in Iwscanresult:
981                                 self.apList[index] = {}
982                                 self.apList[index]["Address"] = ap.bssid
983                                 if len(ap.essid) == 0:
984                                         self.apList[index]["ESSID"] = "<hidden ESSID>"
985                                 else:
986                                         self.apList[index]["ESSID"] = ap.essid
987                                         self.setApList.append( (self.apList[index]["ESSID"], index) )
988                                 self.apList[index]["Protocol"] = ap.protocol
989                                 self.apList[index]["Frequency"] = wirelessObj._formatFrequency(ap.frequency.getFrequency())
990                                 try:
991                                         self.apList[index]["Channel"] = frequencies.index(self.apList[index]["Frequency"] + 1)
992                                 except:
993                                         self.apList[index]["Channel"] = "Unknown"
994
995                                 self.apList[index]["Quality"] = "%s/%s" % \
996                                         ( ap.quality.quality, wirelessObj.getQualityMax().quality )
997                                 self.apList[index]["Signal Level"] = "%s/%s" % \
998                                         ( ap.quality.getSignallevel(), "100" )
999                                 self.apList[index]["Noise Level"] = "%s/%s" % \
1000                                         ( ap.quality.getNoiselevel(), "100" )
1001
1002 # get encryption key on/off
1003                                 key_status = "Unknown"
1004                                 if (ap.encode.flags & pythonwifi.flags.IW_ENCODE_DISABLED):
1005                                         key_status = "off"
1006                                 elif (ap.encode.flags & pythonwifi.flags.IW_ENCODE_NOKEY):
1007                                         if (ap.encode.length <= 0):
1008                                                 key_status = "on"
1009                                 self.apList[index]["Encryption key"] = key_status
1010                                 self.apList[index]["BitRate"] = wirelessObj._formatBitrate(ap.rate[-1][-1])
1011                                 index += 1
1012 #               print self.apList
1013 #               print self.setApList
1014                 self.displayApInfo()
1015                 if len(self.apList) == 0:
1016                         self.emptyListMsgTimer.start(100,True)
1017
1018         def displayApInfo(self):
1019                 if len(self.apList) >0:
1020                         self["menulist"].setList(self.setApList)
1021                         index = self["menulist"].getCurrent()[1]
1022                         for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]:
1023                                 if self.apList[index].has_key(key):
1024                                         self[key].setText((key+":  "+self.apList[index][key]))
1025                                 else:
1026                                         self[key].setText((key+": None"))
1027
1028         def emptyListMsg(self):
1029                 self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
1030                 self["Address"].setText(_("No AP detected."))
1031                 self["ESSID"].setText(_(""))
1032
1033         def restartScanAP(self):
1034                 self.getAplistTimer.start(100,True)
1035
1036         def __onClose(self):
1037                 if self.oldInterfaceState is False:
1038                         iNetwork.setAdapterAttribute(self.iface, "up", False)
1039                         iNetwork.deactivateInterface(self.iface)
1040
1041 class NetworkAdapterTest(Screen):
1042         def __init__(self, session,iface):
1043                 Screen.__init__(self, session)
1044                 self.iface = iface
1045                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
1046                 self.setLabels()
1047                 self.onClose.append(self.cleanup)
1048                 self.onHide.append(self.cleanup)
1049                 
1050                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
1051                 {
1052                         "ok": self.KeyOK,
1053                         "blue": self.KeyOK,
1054                         "up": lambda: self.updownhandler('up'),
1055                         "down": lambda: self.updownhandler('down'),
1056                 
1057                 }, -2)
1058                 
1059                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1060                 {
1061                         "red": self.cancel,
1062                         "back": self.cancel,
1063                 }, -2)
1064                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1065                 {
1066                         "red": self.closeInfo,
1067                         "back": self.closeInfo,
1068                 }, -2)
1069                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
1070                 {
1071                         "green": self.KeyGreen,
1072                 }, -2)
1073                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
1074                 {
1075                         "green": self.KeyGreenRestart,
1076                 }, -2)
1077                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
1078                 {
1079                         "yellow": self.KeyYellow,
1080                 }, -2)
1081                 
1082                 self["shortcutsgreen_restart"].setEnabled(False)
1083                 self["updown_actions"].setEnabled(False)
1084                 self["infoshortcuts"].setEnabled(False)
1085                 self.onClose.append(self.delTimer)      
1086                 self.onLayoutFinish.append(self.layoutFinished)
1087                 self.steptimer = False
1088                 self.nextstep = 0
1089                 self.activebutton = 0
1090                 self.nextStepTimer = eTimer()
1091                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
1092
1093         def cancel(self):
1094                 if self.oldInterfaceState is False:
1095                         iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
1096                         iNetwork.deactivateInterface(self.iface)
1097                 self.close()
1098
1099         def closeInfo(self):
1100                 self["shortcuts"].setEnabled(True)              
1101                 self["infoshortcuts"].setEnabled(False)
1102                 self["InfoText"].hide()
1103                 self["InfoTextBorder"].hide()
1104                 self["key_red"].setText(_("Close"))
1105
1106         def delTimer(self):
1107                 del self.steptimer
1108                 del self.nextStepTimer
1109
1110         def nextStepTimerFire(self):
1111                 self.nextStepTimer.stop()
1112                 self.steptimer = False
1113                 self.runTest()
1114
1115         def updownhandler(self,direction):
1116                 if direction == 'up':
1117                         if self.activebutton >=2:
1118                                 self.activebutton -= 1
1119                         else:
1120                                 self.activebutton = 6
1121                         self.setActiveButton(self.activebutton)
1122                 if direction == 'down':
1123                         if self.activebutton <=5:
1124                                 self.activebutton += 1
1125                         else:
1126                                 self.activebutton = 1
1127                         self.setActiveButton(self.activebutton)
1128
1129         def setActiveButton(self,button):
1130                 if button == 1:
1131                         self["EditSettingsButton"].setPixmapNum(0)
1132                         self["EditSettings_Text"].setForegroundColorNum(0)
1133                         self["NetworkInfo"].setPixmapNum(0)
1134                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1135                         self["AdapterInfo"].setPixmapNum(1)               # active
1136                         self["AdapterInfo_Text"].setForegroundColorNum(2) # active
1137                 if button == 2:
1138                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1139                         self["AdapterInfo"].setPixmapNum(0)
1140                         self["DhcpInfo"].setPixmapNum(0)
1141                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1142                         self["NetworkInfo"].setPixmapNum(1)               # active
1143                         self["NetworkInfo_Text"].setForegroundColorNum(2) # active
1144                 if button == 3:
1145                         self["NetworkInfo"].setPixmapNum(0)
1146                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1147                         self["IPInfo"].setPixmapNum(0)
1148                         self["IPInfo_Text"].setForegroundColorNum(1)
1149                         self["DhcpInfo"].setPixmapNum(1)                  # active
1150                         self["DhcpInfo_Text"].setForegroundColorNum(2)    # active
1151                 if button == 4:
1152                         self["DhcpInfo"].setPixmapNum(0)
1153                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1154                         self["DNSInfo"].setPixmapNum(0)
1155                         self["DNSInfo_Text"].setForegroundColorNum(1)
1156                         self["IPInfo"].setPixmapNum(1)                  # active
1157                         self["IPInfo_Text"].setForegroundColorNum(2)    # active                
1158                 if button == 5:
1159                         self["IPInfo"].setPixmapNum(0)
1160                         self["IPInfo_Text"].setForegroundColorNum(1)
1161                         self["EditSettingsButton"].setPixmapNum(0)
1162                         self["EditSettings_Text"].setForegroundColorNum(0)
1163                         self["DNSInfo"].setPixmapNum(1)                 # active
1164                         self["DNSInfo_Text"].setForegroundColorNum(2)   # active
1165                 if button == 6:
1166                         self["DNSInfo"].setPixmapNum(0)
1167                         self["DNSInfo_Text"].setForegroundColorNum(1)
1168                         self["EditSettingsButton"].setPixmapNum(1)         # active
1169                         self["EditSettings_Text"].setForegroundColorNum(2) # active
1170                         self["AdapterInfo"].setPixmapNum(0)
1171                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1172                         
1173         def runTest(self):
1174                 next = self.nextstep
1175                 if next == 0:
1176                         self.doStep1()
1177                 elif next == 1:
1178                         self.doStep2()
1179                 elif next == 2:
1180                         self.doStep3()
1181                 elif next == 3:
1182                         self.doStep4()
1183                 elif next == 4:
1184                         self.doStep5()
1185                 elif next == 5:
1186                         self.doStep6()
1187                 self.nextstep += 1
1188
1189         def doStep1(self):
1190                 self.steptimer = True
1191                 self.nextStepTimer.start(3000)
1192                 self["key_yellow"].setText(_("Stop test"))
1193
1194         def doStep2(self):
1195                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
1196                 self["Adapter"].setForegroundColorNum(2)
1197                 self["Adaptertext"].setForegroundColorNum(1)
1198                 self["AdapterInfo_Text"].setForegroundColorNum(1)
1199                 self["AdapterInfo_OK"].show()
1200                 self.steptimer = True
1201                 self.nextStepTimer.start(3000)
1202
1203         def doStep3(self):
1204                 self["Networktext"].setForegroundColorNum(1)
1205                 self["Network"].setText(_("Please wait..."))
1206                 self.AccessPointInfo(self.iface)
1207                 self["NetworkInfo_Text"].setForegroundColorNum(1)
1208                 self.steptimer = True
1209                 self.nextStepTimer.start(3000)
1210
1211         def doStep4(self):
1212                 self["Dhcptext"].setForegroundColorNum(1)
1213                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
1214                         self["Dhcp"].setForegroundColorNum(2)
1215                         self["Dhcp"].setText(_("enabled"))
1216                         self["DhcpInfo_Check"].setPixmapNum(0)
1217                 else:
1218                         self["Dhcp"].setForegroundColorNum(1)
1219                         self["Dhcp"].setText(_("disabled"))
1220                         self["DhcpInfo_Check"].setPixmapNum(1)
1221                 self["DhcpInfo_Check"].show()
1222                 self["DhcpInfo_Text"].setForegroundColorNum(1)
1223                 self.steptimer = True
1224                 self.nextStepTimer.start(3000)
1225
1226         def doStep5(self):
1227                 self["IPtext"].setForegroundColorNum(1)
1228                 self["IP"].setText(_("Please wait..."))
1229                 iNetwork.checkNetworkState(self.NetworkStatedataAvail)
1230
1231         def doStep6(self):
1232                 self.steptimer = False
1233                 self.nextStepTimer.stop()
1234                 self["DNStext"].setForegroundColorNum(1)
1235                 self["DNS"].setText(_("Please wait..."))
1236                 iNetwork.checkDNSLookup(self.DNSLookupdataAvail)
1237
1238         def KeyGreen(self):
1239                 self["shortcutsgreen"].setEnabled(False)
1240                 self["shortcutsyellow"].setEnabled(True)
1241                 self["updown_actions"].setEnabled(False)
1242                 self["key_yellow"].setText("")
1243                 self["key_green"].setText("")
1244                 self.steptimer = True
1245                 self.nextStepTimer.start(1000)
1246
1247         def KeyGreenRestart(self):
1248                 self.nextstep = 0
1249                 self.layoutFinished()
1250                 self["Adapter"].setText((""))
1251                 self["Network"].setText((""))
1252                 self["Dhcp"].setText((""))
1253                 self["IP"].setText((""))
1254                 self["DNS"].setText((""))
1255                 self["AdapterInfo_Text"].setForegroundColorNum(0)
1256                 self["NetworkInfo_Text"].setForegroundColorNum(0)
1257                 self["DhcpInfo_Text"].setForegroundColorNum(0)
1258                 self["IPInfo_Text"].setForegroundColorNum(0)
1259                 self["DNSInfo_Text"].setForegroundColorNum(0)
1260                 self["shortcutsgreen_restart"].setEnabled(False)
1261                 self["shortcutsgreen"].setEnabled(False)
1262                 self["shortcutsyellow"].setEnabled(True)
1263                 self["updown_actions"].setEnabled(False)
1264                 self["key_yellow"].setText("")
1265                 self["key_green"].setText("")
1266                 self.steptimer = True
1267                 self.nextStepTimer.start(1000)
1268
1269         def KeyOK(self):
1270                 self["infoshortcuts"].setEnabled(True)
1271                 self["shortcuts"].setEnabled(False)
1272                 if self.activebutton == 1: # Adapter Check
1273                         self["InfoText"].setText(_("This test detects your configured Wireless LAN-Adapter."))
1274                         self["InfoTextBorder"].show()
1275                         self["InfoText"].show()
1276                         self["key_red"].setText(_("Back"))
1277                 if self.activebutton == 2: #LAN Check
1278                         self["InfoText"].setText(_("This test checks whether a network cable is connected to your Wireless LAN-Adapter."))
1279                         self["InfoTextBorder"].show()
1280                         self["InfoText"].show()
1281                         self["key_red"].setText(_("Back"))
1282                 if self.activebutton == 3: #DHCP Check
1283                         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."))
1284                         self["InfoTextBorder"].show()
1285                         self["InfoText"].show()
1286                         self["key_red"].setText(_("Back"))
1287                 if self.activebutton == 4: # IP Check
1288                         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"))
1289                         self["InfoTextBorder"].show()
1290                         self["InfoText"].show()
1291                         self["key_red"].setText(_("Back"))
1292                 if self.activebutton == 5: # DNS Check
1293                         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"))
1294                         self["InfoTextBorder"].show()
1295                         self["InfoText"].show()
1296                         self["key_red"].setText(_("Back"))
1297                 if self.activebutton == 6: # Edit Settings
1298                         self.cleanup()
1299                         self.session.open(WlanConfig,self.iface)
1300                         self["shortcuts"].setEnabled(True)              
1301                         self["infoshortcuts"].setEnabled(False)
1302
1303         def KeyYellow(self):
1304                 self.nextstep = 0
1305                 self["shortcutsgreen_restart"].setEnabled(True)
1306                 self["shortcutsgreen"].setEnabled(False)
1307                 self["shortcutsyellow"].setEnabled(False)
1308                 self["key_green"].setText(_("Restart test"))
1309                 self["key_yellow"].setText("")
1310                 self.steptimer = False
1311                 self.nextStepTimer.stop()
1312
1313         def layoutFinished(self):
1314                 self.setTitle(_("Network test: ") + iNetwork.getFriendlyAdapterName(self.iface) )
1315                 self["shortcutsyellow"].setEnabled(False)
1316                 self["AdapterInfo_OK"].hide()
1317                 self["NetworkInfo_Check"].hide()
1318                 self["DhcpInfo_Check"].hide()
1319                 self["IPInfo_Check"].hide()
1320                 self["DNSInfo_Check"].hide()
1321                 self["EditSettings_Text"].hide()
1322                 self["EditSettingsButton"].hide()
1323                 self["InfoText"].hide()
1324                 self["InfoTextBorder"].hide()
1325                 self["key_yellow"].setText("")
1326
1327         def setLabels(self):
1328                 self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))
1329                 self["Adapter"] = MultiColorLabel()
1330                 self["AdapterInfo"] = MultiPixmap()
1331                 self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info"))
1332                 self["AdapterInfo_OK"] = Pixmap()
1333                 
1334                 if self.iface in iNetwork.wlan_interfaces:
1335                         self["Networktext"] = MultiColorLabel(_("Wireless Network"))
1336                 else:
1337                         self["Networktext"] = MultiColorLabel(_("Local Network"))
1338                 
1339                 self["Network"] = MultiColorLabel()
1340                 self["NetworkInfo"] = MultiPixmap()
1341                 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
1342                 self["NetworkInfo_Check"] = MultiPixmap()
1343                 
1344                 self["Dhcptext"] = MultiColorLabel(_("DHCP"))
1345                 self["Dhcp"] = MultiColorLabel()
1346                 self["DhcpInfo"] = MultiPixmap()
1347                 self["DhcpInfo_Text"] = MultiColorLabel(_("Show Info"))
1348                 self["DhcpInfo_Check"] = MultiPixmap()
1349                 
1350                 self["IPtext"] = MultiColorLabel(_("IP Address"))
1351                 self["IP"] = MultiColorLabel()
1352                 self["IPInfo"] = MultiPixmap()
1353                 self["IPInfo_Text"] = MultiColorLabel(_("Show Info"))
1354                 self["IPInfo_Check"] = MultiPixmap()
1355                 
1356                 self["DNStext"] = MultiColorLabel(_("Nameserver"))
1357                 self["DNS"] = MultiColorLabel()
1358                 self["DNSInfo"] = MultiPixmap()
1359                 self["DNSInfo_Text"] = MultiColorLabel(_("Show Info"))
1360                 self["DNSInfo_Check"] = MultiPixmap()
1361                 
1362                 self["EditSettings_Text"] = MultiColorLabel(_("Edit settings"))
1363                 self["EditSettingsButton"] = MultiPixmap()
1364                 
1365                 self["key_red"] = StaticText(_("Close"))
1366                 self["key_green"] = StaticText(_("Start test"))
1367                 self["key_yellow"] = StaticText(_("Stop test"))
1368                 
1369                 self["InfoTextBorder"] = Pixmap()
1370                 self["InfoText"] = Label()
1371
1372         def NetworkStatedataAvail(self,data):
1373                 if data <= 2:
1374                         self["IP"].setForegroundColorNum(2)
1375                         self["IP"].setText(_("confirmed"))
1376                         self["IPInfo_Check"].setPixmapNum(0)
1377                 else:
1378                         self["IP"].setForegroundColorNum(1)
1379                         self["IP"].setText(_("unconfirmed"))
1380                         self["IPInfo_Check"].setPixmapNum(1)
1381                 self["IPInfo_Check"].show()
1382                 self["IPInfo_Text"].setForegroundColorNum(1)            
1383                 self.steptimer = True
1384                 self.nextStepTimer.start(3000)          
1385                 
1386         def DNSLookupdataAvail(self,data):
1387                 if data <= 2:
1388                         self["DNS"].setForegroundColorNum(2)
1389                         self["DNS"].setText(_("confirmed"))
1390                         self["DNSInfo_Check"].setPixmapNum(0)
1391                 else:
1392                         self["DNS"].setForegroundColorNum(1)
1393                         self["DNS"].setText(_("unconfirmed"))
1394                         self["DNSInfo_Check"].setPixmapNum(1)
1395                 self["DNSInfo_Check"].show()
1396                 self["DNSInfo_Text"].setForegroundColorNum(1)
1397                 self["EditSettings_Text"].show()
1398                 self["EditSettingsButton"].setPixmapNum(1)
1399                 self["EditSettings_Text"].setForegroundColorNum(2) # active
1400                 self["EditSettingsButton"].show()
1401                 self["key_yellow"].setText("")
1402                 self["key_green"].setText(_("Restart test"))
1403                 self["shortcutsgreen"].setEnabled(False)
1404                 self["shortcutsgreen_restart"].setEnabled(True)
1405                 self["shortcutsyellow"].setEnabled(False)
1406                 self["updown_actions"].setEnabled(True)
1407                 self.activebutton = 6
1408
1409         def getInfoCB(self,status):
1410                 if status is not None:
1411                         if status.startswith("No Connection") or status.startswith("Not-Associated") or status == False:
1412                                 self["Network"].setForegroundColorNum(1)
1413                                 self["Network"].setText(_("disconnected"))
1414                                 self["NetworkInfo_Check"].setPixmapNum(1)
1415                                 self["NetworkInfo_Check"].show()
1416                         else:
1417                                 self["Network"].setForegroundColorNum(2)
1418                                 self["Network"].setText(_("connected"))
1419                                 self["NetworkInfo_Check"].setPixmapNum(0)
1420                                 self["NetworkInfo_Check"].show()
1421                                                 
1422         def cleanup(self):
1423                 iNetwork.stopLinkStateConsole()
1424                 iNetwork.stopPingConsole()
1425                 iNetwork.stopDNSConsole()
1426
1427         def AccessPointInfo(self,iface):
1428                 cmd = "iwconfig %s"%iface
1429                 self.iwconfigConsole = Console()
1430                 self.iwconfigConsole.ePopen(cmd,self.readAP,self.getInfoCB)
1431
1432         def readAP(self,result,retval,extra_args):
1433                 (callback) = extra_args
1434                 self.apState = None
1435                 if self.iwconfigConsole is not None:
1436                         if retval == 0:
1437                                 self.iwconfigConsole = None
1438                                 for content in result.splitlines():
1439                                         if 'Access Point' in content:
1440                                                 self.apState = content.strip().split('Access Point: ')[1]
1441                                                 callback(self.apState)
1442                                                 return
1443                 callback(self.apState)
1444                 
1445 class Wlanstatus(Screen):
1446         skin =  """
1447                 <screen position="center,center" size="510,400" title="Wireless Network Status..." >
1448                         <widget source="status" render="Label" position="5,15" size="500,350" font="Regular;18" zPosition="1" />
1449
1450                         <ePixmap pixmap="skin_default/buttons/red.png" position="185,360" size="140,40" alphatest="on" />
1451                         <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" />
1452                 </screen>
1453                 """
1454         def __init__(self, session,iface):
1455                 Screen.__init__(self,session)
1456                 self.session = session
1457                 self.iface = iface
1458                 self["status"] = StaticText(_("Wait a moment..."))
1459                 self["key_red"] = StaticText(_("Close"))
1460                 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
1461                 {
1462                         "ok": self.ok,
1463                         "cancel": self.close,
1464                         "red": self.close,
1465                 }, -2)
1466                 self.readstatus()
1467                 self.onClose.append(self.cleanup)
1468
1469         def readstatus(self):
1470                 self.wlanstatus = Console()
1471                 cmd1 = "iwconfig "+self.iface
1472                 self.wlanstatus.ePopen(cmd1, self.iwconfigfinnished,self.statusdisplay)
1473
1474         def iwconfigfinnished(self, result, retval,extra_args):
1475                 try:
1476                         (statecallback) = extra_args
1477                         if self.wlanstatus is not None:
1478                                 if retval == 0:
1479                                         statecallback(result)
1480                                 else:
1481                                         statecallback(0)
1482                 except:
1483                         self.close()
1484
1485
1486         def statusdisplay(self,data):
1487                 if data == 0:
1488                         self["status"].setText(_("No information..."))
1489                 else:
1490                         self["status"].setText(data)
1491
1492         def ok(self):
1493                 pass
1494
1495         def cleanup(self):
1496                 self.stopWlanStatusConsole()
1497
1498         def stopWlanStatusConsole(self):
1499                 if self.wlanstatus is not None:
1500                         if len(self.wlanstatus.appContainers):
1501                                 for name in self.wlanstatus.appContainers.keys():
1502                                         self.wlanstatus.kill(name)
1503
1504 def openconfig(session, **kwargs):
1505         session.open(WlanSelection)
1506
1507 def selSetup(menuid, **kwargs):
1508         list=[]
1509         if menuid != "system":
1510                 return [ ]
1511         else:
1512                 for x in iNetwork.getInstalledAdapters():
1513                         if x.startswith('eth'):
1514                                 continue
1515                         list.append(x)
1516                 if len(list):
1517                         return [(_("Wireless LAN Setup"), openconfig, "wlansetup_config", 80)]
1518                 else:
1519                         return [ ]
1520         return [ ]
1521
1522 def Plugins(**kwargs):
1523         return  PluginDescriptor(name=_("Wireless LAN Setup"), description="Wireless LAN Setup", where = PluginDescriptor.WHERE_MENU, fnc=selSetup)