NetworkSetup: use manual-nameserver.
[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 checkIfaceMode(self, iface = None):
78                 try:
79                         obj = Wireless(iface)
80                         if obj.getMode() == 'Master':
81                                 return -1
82                         else:
83                                 return 0
84                 except:
85                         return -2
86
87         def ok(self):
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 )
91                         return
92                 iface=self["menulist"].getCurrent()[1]
93                 if iface == None:
94                         return
95                 elif iNetwork.getAdapterAttribute(iface, "up") == True:
96                         ret = self.checkIfaceMode(iface)
97                         if ret == -2:
98                                 self.session.open(MessageBox, (_("Invalid WirelessLan Module.\n")),MessageBox.TYPE_ERROR,5 )
99                                 return
100                         elif ret == -1:
101                                 self.session.open(MessageBox, (_("Can not setup WirelessLan Module in 'AP Mode'\n")),MessageBox.TYPE_ERROR,5 )
102                                 return
103                 self.session.open(WlanSetup, iface)
104
105         def getWlandevice(self):
106                 list = []
107                 for x in iNetwork.getInstalledAdapters():
108                         if x.startswith('eth') or x.startswith('br') or x.startswith('mon'):
109                                 continue
110                         description=self.getAdapterDescription(x)
111                         if description == "Unknown network adapter":
112                                 list.append((description,x))
113                         else:
114                                 list.append((description + " (%s)"%x,x))
115                 return list
116
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.")
133                                 else:
134                                         return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter")
135                         else:
136                                 return _("Unknown network adapter")
137                 else:
138                         return _("Unknown network adapter")
139
140         def cleanup(self):
141                 iNetwork.stopGetInterfacesConsole()
142
143 class WlanSetup(Screen,HelpableScreen):
144         skin =  """
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" />
148
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" />
151
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" />
154
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" />
157                 </screen>
158                 """
159         def __init__(self, session, ifaces):
160                 Screen.__init__(self, session)
161                 HelpableScreen.__init__(self)
162                 self.session = session
163                 self.iface = ifaces
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)
177                 
178                 self.oktext = _("Press OK on your remote control to continue.")
179                 
180                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
181                         {
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")),
186                         })
187                 
188                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
189                         {
190                         "cancel": (self.close, _("exit networkadapter setup menu")),
191                         "ok": (self.ok, _("select menu entry")),
192                         })
193
194                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
195                         {
196                         "red": (self.close, _("exit networkadapter setup menu")),
197                         "green": (self.ok, _("select menu entry")),
198                         })
199
200                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
201                 {
202                         "ok": self.ok,
203                         "back": self.close,
204                         "up": self.up,
205                         "down": self.down,
206                         "red": self.close,
207                         "left": self.left,
208                         "right": self.right,
209                 }, -2)
210                 self.onClose.append(self.cleanup)
211
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 )
225
226         def up(self):
227                 self["menulist"].up()
228                 self.loadDescription()
229
230         def down(self):
231                 self["menulist"].down()
232                 self.loadDescription()
233
234         def left(self):
235                 self["menulist"].pageUp()
236                 self.loadDescription()
237
238         def right(self):
239                 self["menulist"].pageDown()
240                 self.loadDescription()
241
242         def ok(self):
243                 self.cleanup()
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 ) )
256
257         def checklist(self):
258                 self["menulist"].setList(self.MakeMenu())
259
260         def MakeMenu(self):
261                 menu = []
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"))
269
270                 return menu
271
272         def WlanScanApCallback(self, essid = None):
273                 if essid is not None:
274                         self.session.openWithCallback(self.checklist, WlanConfig, self.iface, essid)
275
276         def restartLan(self, ret = False):
277                 if (ret == True):
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)
280
281         def restartLanDataAvail(self, data):
282                 if data is True:
283                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
284
285         def getInterfacesDataAvail(self, data):
286                 if data is True:
287                         self.restartLanRef.close(True)
288
289         def restartfinishedCB(self,data):
290                 if data is True:
291                         self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 5, default = False)
292
293         def cleanup(self):
294                 iNetwork.stopRestartConsole()
295                 iNetwork.stopGetInterfacesConsole()
296
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])
315
316 selectap = None 
317 class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
318         skin =  """
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" />
322
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" />
325
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" />
340                 </screen>
341                 """
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" ],
358                 {
359                         "ok": self.saveWlanConfig,
360                         "green": self.saveWlanConfig,
361                         "cancel": self.keyCancel,
362                         "red": self.keyCancel,
363                 }, -2)
364                 self["HelpWindow"] = Pixmap()
365                 self["HelpWindow"].hide()
366                 self["VKeyIcon"] = Pixmap()
367                 self["VKeyIcon"].hide()
368                 self.iface = iface
369                 self.essidSelected = essidSelected
370                 self.ssid = None
371                 self.ap_scan = None
372                 self.scan_ssid = None
373                 self.key_mgmt = None
374                 self.proto = None
375                 self.key_type = None
376                 self.encryption_key = None
377                 self.wlanscanap = None
378                 self.wpaphraseconsole = None
379                 self.list = []
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)
390
391         def updateInterfaces(self,callback = None):
392                 iNetwork.config_ready = False
393                 iNetwork.msgPlugins()
394                 iNetwork.getInterfaces(callback)
395
396         def readWlanSettings(self,ret=None):
397                 if ret is not True:
398                         print "getInterfaces Fail... "
399                 if iNetwork.getAdapterAttribute(self.iface, "up") == True:
400                         default_tmp = "on"
401                 else:
402                         default_tmp = "off"
403                 wlanconfig.usedevice = ConfigSelection(default=default_tmp, choices = [("off", _("off")), ("on", _("on"))])
404
405                 if iNetwork.getAdapterAttribute(self.iface, "dhcp"):
406                         default_tmp = "on"
407                 else:
408                         default_tmp = "off"
409                 wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
410
411                 if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"):
412                         self.dnsconfigdefault="on"
413                 else:
414                         self.dnsconfigdefault="off"
415                 wlanconfig.hasdnsconfigentry = ConfigSelection(default=self.dnsconfigdefault, choices = [("off", _("no")), ("on", _("yes"))])
416
417                 wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0]
418
419                 wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])
420                 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
421                         default_tmp = "on"
422                 else:
423                         default_tmp = "off"
424                 wlanconfig.usegateway = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
425
426                 wlanconfig.gateway = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])
427
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"))))
431
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())
437
438                 if self.encryption_key is not None:
439                         default_tmp = "on"
440                 else:
441                         default_tmp = "off"
442                 wlanconfig.encrypt = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
443
444                 if self.key_mgmt=="NONE":
445                         default_tmp = "wep"
446                 elif self.key_mgmt == "WPA-PSK":
447                         if self.proto == "WPA":
448                                 default_tmp = "wpa"
449                         elif self.proto == "RSN":
450                                 default_tmp = "wpa2"
451                         elif self.proto in ( "WPA RSN", "WPA WPA2"):
452                                 default_tmp = "wpa/wpa2"
453                         else:
454                                 default_tmp = "wpa"
455                 else:
456                         default_tmp = "wep"
457
458                 wlanconfig.method = ConfigSelection(default = default_tmp, choices = [
459                         ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
460
461                 if self.key_type == 0:
462                         default_tmp = "hex"
463                 else:
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)
469                 self.getApList()
470
471         def readWpaSupplicantConf(self):
472                 try:
473                         if fileExists("/etc/wpa_supplicant.conf"):
474                                 wpafd = open("/etc/wpa_supplicant.conf","r")
475                                 if wpafd >0:
476                                         data = wpafd.readline()
477                                         while len(data) > 0:
478 #                                               print "####readWpaSupplicantConf, data : ",data
479                                                 data = data.lstrip()
480                                                 if len(data) == 0:
481                                                         data = wpafd.readline()
482                                                         continue
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
511                                         wpafd.close()
512                                 else:
513                                         print 'read error'
514                         else:
515                                 pass
516                 except:
517                         print 'failed loading wpasupplicant.conf'
518
519         def createConfig(self):
520                 self.configList=[]
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)
529
530                 self.ipEntry = getConfigListEntry(_("IP"), wlanconfig.ip)
531                 self.netmaskEntry = getConfigListEntry(_("NetMask"), wlanconfig.netmask)
532
533                 self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway)
534                 self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway)
535
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)
545
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)
560
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 )
570
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)
575
576         def showTextIcon(self):
577                 if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
578                         self["VKeyIcon"].show()
579                 else:
580                         self["VKeyIcon"].hide()
581
582         def getApList(self):
583                 if self.essidSelected is None:
584                         self.apList = []
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)
587                 else:
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)
592                         else:
593                                 wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
594                         self.createConfig()
595
596         def getScanResult(self, wirelessObj):
597                 Iwscanresult  = None
598                 try:
599                         Iwscanresult  = wirelessObj.scan()
600                 except IOError:
601                         print "%s Interface doesn't support scanning.."%self.iface
602                 return Iwscanresult
603
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 :
611                         import time
612                         time.sleep(1.5)
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)
617                 else:
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)
628                 else:
629                         try:
630                                 wlanconfig.essid = ConfigSelection(defalut = self.apList[0], choices = self.apList)
631                         except:
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)
635                 else:
636                         wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
637                 self.createConfig()
638
639         def emptyListMsg(self):
640                 self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
641
642         def keyLeft(self):
643                 ConfigListScreen.keyLeft(self)
644                 self.newConfig()
645
646         def keyRight(self):
647                 ConfigListScreen.keyRight(self)
648                 self.newConfig()
649
650         def newConfig(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:
655                         self.createConfig()
656
657         def saveWlanConfig(self):
658                 try:
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") ) )
663                         else:
664                                 self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
665                 except:
666                         pass
667
668         def checkNetworkConfig(self, ret = False):
669                 if ret == False:
670                         if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
671                                 self["config"].getCurrent()[1].onSelect(self.session)
672                         return
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)
676                                 return
677                 if len(wlanconfig.key.value) == 0:
678                         self.session.open(MessageBox, ("PLEASE INPUT NETWORK KEY"), type = MessageBox.TYPE_ERROR, timeout = 10)
679                         return
680                 self.checkNetworkShares()
681
682         def checkNetworkShares(self):
683                 if not self.Console:
684                         self.Console = Console()
685                 cmd = "cat /proc/mounts"
686                 self.Console.ePopen(cmd, self.checkSharesFinished, self.confirmAnotherIfaces)
687
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)
696                                 callback(False)
697                                 if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
698                                         self["config"].getCurrent()[1].onSelect(self.session)
699                                 return
700                 callback(True)
701
702         def confirmAnotherIfaces(self, ret = False):
703                 if ret == False:
704                         return
705                 else:
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)
710                                 else:
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)
712                         else:
713                                 self.getWpaPhrase(False)
714
715         def getWpaPhrase(self,ret):
716                 if ret == True:
717                         configuredInterfaces = iNetwork.getConfiguredAdapters()
718                         for interface in configuredInterfaces:
719                                 if interface == self.iface:
720                                         continue
721                                 iNetwork.setAdapterAttribute(interface, "up", False)
722                                 iNetwork.deactivateInterface(interface)
723                 if wlanconfig.method.value =="wep":
724                         self.writeWpasupplicantConf("wep") # passphrasekey is not None
725                 else:
726                         if wlanconfig.essid.value == 'Input hidden ESSID':
727                                 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.hiddenessid.value,wlanconfig.key.value)
728                         else :
729                                 cmd = "wpa_passphrase '%s' %s" % (wlanconfig.essid.value,wlanconfig.key.value)
730                         print cmd
731                         self.wpaphraseconsole = Console()
732                         self.wpaphraseconsole.ePopen(cmd, self.parseWpaPhrase, self.writeWpasupplicantConf)
733
734         def parseWpaPhrase(self, result, retval, extra_args):
735                 (writewlanconfig) = extra_args
736                 if self.wpaphraseconsole is not None:
737                         if retval == 0:
738                                 self.wpaphraseconsole.killAll()
739                                 self.wpaphraseconsole = None
740 #                               print "parseWpaPhrase result : "
741 #                               print result
742                                 psk = None
743                                 for line in result.splitlines():
744                                         if line.find('ssid') == -1 and line.find('#psk=') != -1:
745                                                 plainpwd        = line
746                                         elif line.find('psk=') != -1:
747                                                 psk = line
748                                 if psk:
749                                         writewlanconfig(psk,plainpwd)
750                                 else:
751                                         writewlanconfig(None)
752                         else:
753                                 writewlanconfig(None)
754
755         def writeWpasupplicantConf(self, passphrasekey=None,plainpwd=None):
756                 if passphrasekey:
757                         wpafd = open("/etc/wpa_supplicant.conf","w")
758                         if wpafd > 0:
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"
768                                 else :
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"
777                                                 else:
778                                                         contents += wlanconfig.key.value+"\n"
779                                         else:
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"
792                                                 else:
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"
799                                 else:
800                                         contents += "\tkey_mgmt=NONE\n"
801                                 contents += "}\n"
802                                 print "content = \n"+contents
803                                 wpafd.write(contents)
804                                 wpafd.close()
805                                 self.writeNetConfig()
806                         else :
807                                 self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
808                                 return
809                 else:
810                         self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10)
811                         return
812
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)
818                         else:
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)
829                         else:
830                                 iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False)
831                 else:
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)
841
842         def makeLineDnsNameservers(self, nameservers = []):
843                 line = "" 
844                 entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ])
845                 if len(entry):
846                         line+="\tdns-nameservers %s\n" % entry
847                 return line
848
849         def updateCurrentInterfaces(self,ret):
850                 if ret is True:
851                         iNetwork.getInterfaces(self.configurationMsgClose)
852
853         def configurationMsgClose(self,ret):
854                 if ret is True and self.configurationmsg is not None:
855                         self.configurationmsg.close(True)
856
857         def configFinished(self,data):
858                 global selectap
859                 if data is True:
860                         self.session.openWithCallback(self.configFinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
861                         selectap = wlanconfig.essid.value
862
863         def configFinishedCB(self,data):
864                 if data is not None:
865                         if data is True:
866                                 self.close()
867         
868         def formatip(self, iplist):
869                 list = []
870                 list = iplist
871 #               print "iplist : ",iplist
872                 try:
873                         if len(iplist) == 4:
874                                 result = str(iplist[0])+"."+str(iplist[1])+"."+str(iplist[2])+"."+str(iplist[3])
875                         else:
876                                 result ="0.0.0.0"
877 #                       print "result : ",result
878                         return result
879                 except:
880                         return "[N/A]"
881                         
882         def keyCancelConfirm(self, result):
883                 if not result:
884                         return
885                 if self.oldInterfaceState is False:
886                         iNetwork.setAdapterAttribute(self.iface, "up", False)
887                         iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
888                 else:
889                         self.close()
890
891         def keyCancel(self,yesno = True):
892                 if self["config"].isChanged():
893                         self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
894                 else:
895                         self.keyCancelConfirm(True)
896
897         def keyCancelCB(self,data):
898                 if data is not None:
899                         if data is True:
900                                 self.close()
901
902         def cleanup(self):
903                 iNetwork.stopRestartConsole()
904                 iNetwork.stopGetInterfacesConsole()
905                 iNetwork.stopDeactivateInterfaceConsole()
906                 self.stopwlanscanapConsole()
907                 self.stopCheckNetworkSharesConsole()
908                 self.stopWpaPhraseConsole()
909
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)
915
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)
921
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)
927
928 class WlanScanAp(Screen,HelpableScreen):
929         skin =  """
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" />
933
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" />
937
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" />
941
942                         <widget name="menulist" position="20,20" size="230,260" backgroundColor="#371e1c1a" transparent="1" zPosition="10" scrollbarMode="showOnDemand" />
943
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" />
950                 </screen>
951                 """
952         def __init__(self, session, iface):
953                 Screen.__init__(self,session)
954                 HelpableScreen.__init__(self)
955                 self.session = session
956                 self.iface = iface
957                 self.wlanscanap = None
958                 self.apList = {}
959                 self.setApList = []
960
961                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
962                 {
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")),
967                 }, -2)
968
969                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
970                 {
971                         "cancel": (self.close, _("exit")),
972                         "ok": (self.ok, "select AP"),
973                 })
974
975                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
976                 {
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"),
981                 })
982
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)
1000                 self.apList = {}
1001                 self.onClose.append(self.__onClose)
1002                 self.getAplistTimer.start(100,True)
1003                 
1004         def left(self):
1005                 self["menulist"].pageUp()
1006                 self.displayApInfo()
1007         
1008         def right(self):
1009                 self["menulist"].pageDown()
1010                 self.displayApInfo()
1011
1012         def up(self):
1013                 self["menulist"].up()
1014                 self.displayApInfo()
1015                 
1016         def down(self):
1017                 self["menulist"].down()
1018                 self.displayApInfo()
1019
1020         def ok(self):
1021                 global selectap
1022                 if self["menulist"].getCurrent() is not None:
1023                         selectAp=self["menulist"].getCurrent()[0]
1024                         selectap = selectAp
1025                 self.close()
1026
1027         def startWlanConfig(self):
1028                 if self["menulist"].getCurrent() is not None:
1029                         selectAp=self["menulist"].getCurrent()[0]
1030                         self.close(selectAp)
1031
1032         def getApList(self):
1033                 self.apList = {}
1034                 self.setApList = []
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)
1037
1038         def getScanResult(self, wirelessObj):
1039                 Iwscanresult  = None
1040                 try:
1041                         Iwscanresult  = wirelessObj.scan()
1042                 except IOError:
1043                         print "%s Interface doesn't support scanning.."%self.iface
1044                 return Iwscanresult
1045
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 :
1053                         import time
1054                         time.sleep(1.5)
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()
1059                         index = 1
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>"
1065                                 else:
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())
1070                                 try:
1071                                         self.apList[index]["Channel"] = frequencies.index(self.apList[index]["Frequency"] + 1)
1072                                 except:
1073                                         self.apList[index]["Channel"] = "Unknown"
1074
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" )
1081
1082 # get encryption key on/off
1083                                 key_status = "Unknown"
1084                                 if (ap.encode.flags & pythonwifi.flags.IW_ENCODE_DISABLED):
1085                                         key_status = "off"
1086                                 elif (ap.encode.flags & pythonwifi.flags.IW_ENCODE_NOKEY):
1087                                         if (ap.encode.length <= 0):
1088                                                 key_status = "on"
1089                                 self.apList[index]["Encryption key"] = key_status
1090                                 self.apList[index]["BitRate"] = wirelessObj._formatBitrate(ap.rate[-1][-1])
1091                                 index += 1
1092 #               print self.apList
1093 #               print self.setApList
1094                 self.displayApInfo()
1095                 if len(self.apList) == 0:
1096                         self.emptyListMsgTimer.start(100,True)
1097
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]))
1106                                         else:
1107                                                 self[key].setText((key+": None"))
1108
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(_(""))
1113
1114         def restartScanAP(self):
1115                 self.getAplistTimer.start(100,True)
1116
1117         def __onClose(self):
1118                 if self.oldInterfaceState is False:
1119                         iNetwork.setAdapterAttribute(self.iface, "up", False)
1120                         iNetwork.deactivateInterface(self.iface)
1121
1122 class NetworkAdapterTest(Screen):
1123         def __init__(self, session,iface):
1124                 Screen.__init__(self, session)
1125                 self.iface = iface
1126                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
1127                 self.setLabels()
1128                 self.onClose.append(self.cleanup)
1129                 self.onHide.append(self.cleanup)
1130                 
1131                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
1132                 {
1133                         "ok": self.KeyOK,
1134                         "blue": self.KeyOK,
1135                         "up": lambda: self.updownhandler('up'),
1136                         "down": lambda: self.updownhandler('down'),
1137                 
1138                 }, -2)
1139                 
1140                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1141                 {
1142                         "red": self.cancel,
1143                         "back": self.cancel,
1144                 }, -2)
1145                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
1146                 {
1147                         "red": self.closeInfo,
1148                         "back": self.closeInfo,
1149                 }, -2)
1150                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
1151                 {
1152                         "green": self.KeyGreen,
1153                 }, -2)
1154                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
1155                 {
1156                         "green": self.KeyGreenRestart,
1157                 }, -2)
1158                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
1159                 {
1160                         "yellow": self.KeyYellow,
1161                 }, -2)
1162                 
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
1169                 self.nextstep = 0
1170                 self.activebutton = 0
1171                 self.nextStepTimer = eTimer()
1172                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
1173
1174         def cancel(self):
1175                 if self.oldInterfaceState is False:
1176                         iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
1177                         iNetwork.deactivateInterface(self.iface)
1178                 self.close()
1179
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"))
1186
1187         def delTimer(self):
1188                 del self.steptimer
1189                 del self.nextStepTimer
1190
1191         def nextStepTimerFire(self):
1192                 self.nextStepTimer.stop()
1193                 self.steptimer = False
1194                 self.runTest()
1195
1196         def updownhandler(self,direction):
1197                 if direction == 'up':
1198                         if self.activebutton >=2:
1199                                 self.activebutton -= 1
1200                         else:
1201                                 self.activebutton = 6
1202                         self.setActiveButton(self.activebutton)
1203                 if direction == 'down':
1204                         if self.activebutton <=5:
1205                                 self.activebutton += 1
1206                         else:
1207                                 self.activebutton = 1
1208                         self.setActiveButton(self.activebutton)
1209
1210         def setActiveButton(self,button):
1211                 if button == 1:
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
1218                 if button == 2:
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
1225                 if button == 3:
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
1232                 if button == 4:
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                
1239                 if button == 5:
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
1246                 if button == 6:
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)
1253                         
1254         def runTest(self):
1255                 next = self.nextstep
1256                 if next == 0:
1257                         self.doStep1()
1258                 elif next == 1:
1259                         self.doStep2()
1260                 elif next == 2:
1261                         self.doStep3()
1262                 elif next == 3:
1263                         self.doStep4()
1264                 elif next == 4:
1265                         self.doStep5()
1266                 elif next == 5:
1267                         self.doStep6()
1268                 self.nextstep += 1
1269
1270         def doStep1(self):
1271                 self.steptimer = True
1272                 self.nextStepTimer.start(3000)
1273                 self["key_yellow"].setText(_("Stop test"))
1274
1275         def doStep2(self):
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)
1283
1284         def doStep3(self):
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)
1291
1292         def doStep4(self):
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)
1298                 else:
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)
1306
1307         def doStep5(self):
1308                 self["IPtext"].setForegroundColorNum(1)
1309                 self["IP"].setText(_("Please wait..."))
1310                 iNetwork.checkNetworkState(self.NetworkStatedataAvail)
1311
1312         def doStep6(self):
1313                 self.steptimer = False
1314                 self.nextStepTimer.stop()
1315                 self["DNStext"].setForegroundColorNum(1)
1316                 self["DNS"].setText(_("Please wait..."))
1317                 iNetwork.checkDNSLookup(self.DNSLookupdataAvail)
1318
1319         def KeyGreen(self):
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)
1327
1328         def KeyGreenRestart(self):
1329                 self.nextstep = 0
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)
1349
1350         def KeyOK(self):
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
1379                         self.cleanup()
1380                         self.session.open(WlanConfig,self.iface)
1381                         self["shortcuts"].setEnabled(True)              
1382                         self["infoshortcuts"].setEnabled(False)
1383
1384         def KeyYellow(self):
1385                 self.nextstep = 0
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()
1393
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("")
1407
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()
1414                 
1415                 if self.iface in iNetwork.wlan_interfaces:
1416                         self["Networktext"] = MultiColorLabel(_("Wireless Network"))
1417                 else:
1418                         self["Networktext"] = MultiColorLabel(_("Local Network"))
1419                 
1420                 self["Network"] = MultiColorLabel()
1421                 self["NetworkInfo"] = MultiPixmap()
1422                 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
1423                 self["NetworkInfo_Check"] = MultiPixmap()
1424                 
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()
1430                 
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()
1436                 
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()
1442                 
1443                 self["EditSettings_Text"] = MultiColorLabel(_("Edit settings"))
1444                 self["EditSettingsButton"] = MultiPixmap()
1445                 
1446                 self["key_red"] = StaticText(_("Close"))
1447                 self["key_green"] = StaticText(_("Start test"))
1448                 self["key_yellow"] = StaticText(_("Stop test"))
1449                 
1450                 self["InfoTextBorder"] = Pixmap()
1451                 self["InfoText"] = Label()
1452
1453         def NetworkStatedataAvail(self,data):
1454                 if data <= 2:
1455                         self["IP"].setForegroundColorNum(2)
1456                         self["IP"].setText(_("confirmed"))
1457                         self["IPInfo_Check"].setPixmapNum(0)
1458                 else:
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)          
1466                 
1467         def DNSLookupdataAvail(self,data):
1468                 if data <= 2:
1469                         self["DNS"].setForegroundColorNum(2)
1470                         self["DNS"].setText(_("confirmed"))
1471                         self["DNSInfo_Check"].setPixmapNum(0)
1472                 else:
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
1489
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()
1497                         else:
1498                                 self["Network"].setForegroundColorNum(2)
1499                                 self["Network"].setText(_("connected"))
1500                                 self["NetworkInfo_Check"].setPixmapNum(0)
1501                                 self["NetworkInfo_Check"].show()
1502                                                 
1503         def cleanup(self):
1504                 iNetwork.stopLinkStateConsole()
1505                 iNetwork.stopPingConsole()
1506                 iNetwork.stopDNSConsole()
1507
1508         def AccessPointInfo(self,iface):
1509                 cmd = "iwconfig %s"%iface
1510                 self.iwconfigConsole = Console()
1511                 self.iwconfigConsole.ePopen(cmd,self.readAP,self.getInfoCB)
1512
1513         def readAP(self,result,retval,extra_args):
1514                 (callback) = extra_args
1515                 self.apState = None
1516                 if self.iwconfigConsole is not None:
1517                         if retval == 0:
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)
1523                                                 return
1524                 callback(self.apState)
1525                 
1526 class Wlanstatus(Screen):
1527         skin =  """
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" />
1530
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" />
1533                 </screen>
1534                 """
1535         def __init__(self, session,iface):
1536                 Screen.__init__(self,session)
1537                 self.session = session
1538                 self.iface = iface
1539                 self["status"] = StaticText(_("Wait a moment..."))
1540                 self["key_red"] = StaticText(_("Close"))
1541                 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
1542                 {
1543                         "ok": self.ok,
1544                         "cancel": self.close,
1545                         "red": self.close,
1546                 }, -2)
1547                 self.readstatus()
1548                 self.onClose.append(self.cleanup)
1549
1550         def readstatus(self):
1551                 self.wlanstatus = Console()
1552                 cmd1 = "iwconfig "+self.iface
1553                 self.wlanstatus.ePopen(cmd1, self.iwconfigfinnished,self.statusdisplay)
1554
1555         def iwconfigfinnished(self, result, retval,extra_args):
1556                 try:
1557                         (statecallback) = extra_args
1558                         if self.wlanstatus is not None:
1559                                 if retval == 0:
1560                                         statecallback(result)
1561                                 else:
1562                                         statecallback(0)
1563                 except:
1564                         self.close()
1565
1566
1567         def statusdisplay(self,data):
1568                 if data == 0:
1569                         self["status"].setText(_("No information..."))
1570                 else:
1571                         self["status"].setText(data)
1572
1573         def ok(self):
1574                 pass
1575
1576         def cleanup(self):
1577                 self.stopWlanStatusConsole()
1578
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)
1584
1585 def openconfig(session, **kwargs):
1586         session.open(WlanSelection)
1587
1588 def selSetup(menuid, **kwargs):
1589         list=[]
1590         if menuid != "system":
1591                 return [ ]
1592         else:
1593                 for x in iNetwork.getInstalledAdapters():
1594                         if x.startswith('eth'):
1595                                 continue
1596                         list.append(x)
1597                 if len(list):
1598                         return [(_("Wireless LAN Setup"), openconfig, "wlansetup_config", 80)]
1599                 else:
1600                         return [ ]
1601         return [ ]
1602
1603 def Plugins(**kwargs):
1604         return  PluginDescriptor(name=_("Wireless LAN Setup"), description="Wireless LAN Setup", where = PluginDescriptor.WHERE_MENU, fnc=selSetup)