Merge branch 'bug_202_networkconfig_cleanup'
[vuplus_dvbapp] / lib / python / Screens / NetworkSetup.py
1 from 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 Components.Sources.StaticText import StaticText
9 from Components.Sources.Boolean import Boolean
10 from Components.Label import Label,MultiColorLabel
11 from Components.Pixmap import Pixmap,MultiPixmap
12 from Components.MenuList import MenuList
13 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing
14 from Components.ConfigList import ConfigListScreen
15 from Components.PluginComponent import plugins
16 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
17 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
18 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
19 from Tools.LoadPixmap import LoadPixmap
20 from Plugins.Plugin import PluginDescriptor
21 from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
22 from os import path as os_path, system as os_system, unlink
23 from re import compile as re_compile, search as re_search
24
25
26 class InterfaceList(MenuList):
27         def __init__(self, list, enableWrapAround=False):
28                 MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
29                 self.l.setFont(0, gFont("Regular", 20))
30                 self.l.setItemHeight(30)
31
32 def InterfaceEntryComponent(index,name,default,active ):
33         res = [
34                 (index),
35                 MultiContentEntryText(pos=(80, 5), size=(430, 25), font=0, text=name)
36         ]
37         num_configured_if = len(iNetwork.getConfiguredAdapters())
38         if num_configured_if >= 2:
39                 if default is True:
40                         png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png"))
41                 if default is False:
42                         png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png"))
43                 res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png))
44         if active is True:
45                 png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png"))
46         if active is False:
47                 png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png"))
48         res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2))
49         return res
50
51
52 class NetworkAdapterSelection(Screen,HelpableScreen):
53         def __init__(self, session):
54                 Screen.__init__(self, session)
55                 HelpableScreen.__init__(self)
56                 
57                 self.wlan_errortext = _("No working wireless network adapter found.\nPlease verify that you have attached a compatible WLAN device and your network is configured correctly.")
58                 self.lan_errortext = _("No working local network adapter found.\nPlease verify that you have attached a network cable and your network is configured correctly.")
59                 self.oktext = _("Press OK on your remote control to continue.")
60                 self.edittext = _("Press OK to edit the settings.")
61                 self.defaulttext = _("Press yellow to set this interface as default interface.")
62                 self.restartLanRef = None
63                 
64                 self["key_red"] = StaticText(_("Close"))
65                 self["key_green"] = StaticText(_("Select"))
66                 self["key_yellow"] = StaticText("")
67                 self["introduction"] = StaticText(self.edittext)
68                 
69                 self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
70                 
71                 if not self.adapters:
72                         self.onFirstExecBegin.append(self.NetworkFallback)
73                         
74                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
75                         {
76                         "cancel": (self.close, _("exit network interface list")),
77                         "ok": (self.okbuttonClick, _("select interface")),
78                         })
79
80                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
81                         {
82                         "red": (self.close, _("exit network interface list")),
83                         "green": (self.okbuttonClick, _("select interface")),
84                         })
85                 
86                 self["DefaultInterfaceAction"] = HelpableActionMap(self, "ColorActions",
87                         {
88                         "yellow": (self.setDefaultInterface, [_("Set interface as default Interface"),_("* Only available if more than one interface is active.")] ),
89                         })
90
91                 self.list = []
92                 self["list"] = InterfaceList(self.list)
93                 self.updateList()
94
95                 if len(self.adapters) == 1:
96                         self.onFirstExecBegin.append(self.okbuttonClick)
97                 self.onClose.append(self.cleanup)
98
99
100         def updateList(self):
101                 self.list = []
102                 default_gw = None
103                 num_configured_if = len(iNetwork.getConfiguredAdapters())
104                 if num_configured_if >= 2:
105                         self["key_yellow"].setText(_("Default"))
106                         self["introduction"].setText(self.defaulttext)
107                         self["DefaultInterfaceAction"].setEnabled(True)
108                 else:
109                         self["key_yellow"].setText("")
110                         self["introduction"].setText(self.edittext)
111                         self["DefaultInterfaceAction"].setEnabled(False)
112
113                 if num_configured_if < 2 and os_path.exists("/etc/default_gw"):
114                         unlink("/etc/default_gw")
115                         
116                 if os_path.exists("/etc/default_gw"):
117                         fp = file('/etc/default_gw', 'r')
118                         result = fp.read()
119                         fp.close()
120                         default_gw = result
121                                         
122                 if len(self.adapters) == 0: # no interface available => display only eth0
123                         self.list.append(InterfaceEntryComponent("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True ))
124                 else:
125                         for x in self.adapters:
126                                 if x[1] == default_gw:
127                                         default_int = True
128                                 else:
129                                         default_int = False
130                                 if iNetwork.getAdapterAttribute(x[1], 'up') is True:
131                                         active_int = True
132                                 else:
133                                         active_int = False
134                                 self.list.append(InterfaceEntryComponent(index = x[1],name = _(x[0]),default=default_int,active=active_int ))
135
136                 self["list"].l.setList(self.list)
137
138         def setDefaultInterface(self):
139                 selection = self["list"].getCurrent()
140                 num_if = len(self.list)
141                 old_default_gw = None
142                 num_configured_if = len(iNetwork.getConfiguredAdapters())
143                 if os_path.exists("/etc/default_gw"):
144                         fp = open('/etc/default_gw', 'r')
145                         old_default_gw = fp.read()
146                         fp.close()
147                 if num_configured_if > 1 and (not old_default_gw or old_default_gw != selection[0]):
148                         fp = open('/etc/default_gw', 'w+')
149                         fp.write(selection[0])
150                         fp.close()
151                         self.restartLan()
152                 elif old_default_gw and num_configured_if < 2:
153                         unlink("/etc/default_gw")
154                         self.restartLan()
155
156         def okbuttonClick(self):
157                 selection = self["list"].getCurrent()
158                 if selection is not None:
159                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[0])
160
161         def AdapterSetupClosed(self, *ret):
162                 if len(self.adapters) == 1:
163                         self.close()
164                 else:
165                         self.updateList()
166
167         def NetworkFallback(self):
168                 if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
169                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
170                 if iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
171                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
172                 else:
173                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
174
175         def ErrorMessageClosed(self, *ret):
176                 if iNetwork.configuredNetworkAdapters.has_key('wlan0') is True:
177                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0')
178                 elif iNetwork.configuredNetworkAdapters.has_key('ath0') is True:
179                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'ath0')
180                 else:
181                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0')
182
183         def cleanup(self):
184                 iNetwork.stopLinkStateConsole()
185                 iNetwork.stopRestartConsole()
186                 iNetwork.stopGetInterfacesConsole()
187
188         def restartLan(self):
189                 iNetwork.restartNetwork(self.restartLanDataAvail)
190                 self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while we configure your network..."), type = MessageBox.TYPE_INFO, enable_input = False)
191                         
192         def restartLanDataAvail(self, data):
193                 if data is True:
194                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
195
196         def getInterfacesDataAvail(self, data):
197                 if data is True:
198                         self.restartLanRef.close(True)
199
200         def restartfinishedCB(self,data):
201                 if data is True:
202                         self.updateList()
203                         self.session.open(MessageBox, _("Finished configuring your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False)
204
205
206
207 class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
208         def __init__(self, session):
209                 Screen.__init__(self, session)
210                 HelpableScreen.__init__(self)
211                 self.backupNameserverList = iNetwork.getNameserverList()[:]
212                 print "backup-list:", self.backupNameserverList
213                 
214                 self["key_red"] = StaticText(_("Cancel"))
215                 self["key_green"] = StaticText(_("Add"))
216                 self["key_yellow"] = StaticText(_("Delete"))
217
218                 self["introduction"] = StaticText(_("Press OK to activate the settings."))
219                 self.createConfig()
220
221                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
222                         {
223                         "cancel": (self.cancel, _("exit nameserver configuration")),
224                         "ok": (self.ok, _("activate current configuration")),
225                         })
226
227                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
228                         {
229                         "red": (self.cancel, _("exit nameserver configuration")),
230                         "green": (self.add, _("add a nameserver entry")),
231                         "yellow": (self.remove, _("remove a nameserver entry")),
232                         })
233
234                 self["actions"] = NumberActionMap(["SetupActions"],
235                 {
236                         "ok": self.ok,
237                 }, -2)
238
239                 self.list = []
240                 ConfigListScreen.__init__(self, self.list)
241                 self.createSetup()
242
243         def createConfig(self):
244                 self.nameservers = iNetwork.getNameserverList()
245                 self.nameserverEntries = [ NoSave(ConfigIP(default=nameserver)) for nameserver in self.nameservers]
246
247         def createSetup(self):
248                 self.list = []
249
250                 i = 1
251                 for x in self.nameserverEntries:
252                         self.list.append(getConfigListEntry(_("Nameserver %d") % (i), x))
253                         i += 1
254
255                 self["config"].list = self.list
256                 self["config"].l.setList(self.list)
257
258         def ok(self):
259                 iNetwork.clearNameservers()
260                 for nameserver in self.nameserverEntries:
261                         iNetwork.addNameserver(nameserver.value)
262                 iNetwork.writeNameserverConfig()
263                 self.close()
264
265         def run(self):
266                 self.ok()
267
268         def cancel(self):
269                 iNetwork.clearNameservers()
270                 print "backup-list:", self.backupNameserverList
271                 for nameserver in self.backupNameserverList:
272                         iNetwork.addNameserver(nameserver)
273                 self.close()
274
275         def add(self):
276                 iNetwork.addNameserver([0,0,0,0])
277                 self.createConfig()
278                 self.createSetup()
279
280         def remove(self):
281                 print "currentIndex:", self["config"].getCurrentIndex()
282                 index = self["config"].getCurrentIndex()
283                 if index < len(self.nameservers):
284                         iNetwork.removeNameserver(self.nameservers[index])
285                         self.createConfig()
286                         self.createSetup()
287
288
289 class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
290         def __init__(self, session, networkinfo, essid=None, aplist=None):
291                 Screen.__init__(self, session)
292                 HelpableScreen.__init__(self)
293                 self.session = session
294                 if isinstance(networkinfo, (list, tuple)):
295                         self.iface = networkinfo[0]
296                         self.essid = networkinfo[1]
297                         self.aplist = networkinfo[2]
298                 else:
299                         self.iface = networkinfo
300                         self.essid = essid
301                         self.aplist = aplist
302                 self.extended = None
303                 self.applyConfigRef = None
304                 self.finished_cb = None
305                 self.oktext = _("Press OK on your remote control to continue.")
306                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
307
308                 self.createConfig()
309
310                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
311                         {
312                         "cancel": (self.keyCancel, _("exit network adapter configuration")),
313                         "ok": (self.keySave, _("activate network adapter configuration")),
314                         })
315
316                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
317                         {
318                         "red": (self.keyCancel, _("exit network adapter configuration")),
319                         "blue": (self.KeyBlue, _("open nameserver configuration")),
320                         })
321
322                 self["actions"] = NumberActionMap(["SetupActions"],
323                 {
324                         "ok": self.keySave,
325                 }, -2)
326
327                 self.list = []
328                 ConfigListScreen.__init__(self, self.list,session = self.session)
329                 self.createSetup()
330                 self.onLayoutFinish.append(self.layoutFinished)
331                 self.onClose.append(self.cleanup)
332
333                 self["DNS1text"] = StaticText(_("Primary DNS"))
334                 self["DNS2text"] = StaticText(_("Secondary DNS"))
335                 self["DNS1"] = StaticText()
336                 self["DNS2"] = StaticText()
337                 self["introduction"] = StaticText(_("Current settings:"))
338
339                 self["IPtext"] = StaticText(_("IP Address"))
340                 self["Netmasktext"] = StaticText(_("Netmask"))
341                 self["Gatewaytext"] = StaticText(_("Gateway"))
342
343                 self["IP"] = StaticText()
344                 self["Mask"] = StaticText()
345                 self["Gateway"] = StaticText()
346
347                 self["Adaptertext"] = StaticText(_("Network:"))
348                 self["Adapter"] = StaticText()
349                 self["introduction2"] = StaticText(_("Press OK to activate the settings."))
350                 self["key_red"] = StaticText(_("Cancel"))
351                 self["key_blue"] = StaticText(_("Edit DNS"))
352
353                 self["VKeyIcon"] = Boolean(False)
354                 self["HelpWindow"] = Pixmap()
355                 self["HelpWindow"].hide()
356                 
357         def layoutFinished(self):
358                 self["DNS1"].setText(self.primaryDNS.getText())
359                 self["DNS2"].setText(self.secondaryDNS.getText())
360                 if self.ipConfigEntry.getText() is not None:
361                         if self.ipConfigEntry.getText() == "0.0.0.0":
362                                 self["IP"].setText(_("N/A"))
363                         else:   
364                                 self["IP"].setText(self.ipConfigEntry.getText())
365                 else:
366                         self["IP"].setText(_("N/A"))
367                 if self.netmaskConfigEntry.getText() is not None:
368                         if self.netmaskConfigEntry.getText() == "0.0.0.0":
369                                         self["Mask"].setText(_("N/A"))
370                         else:   
371                                 self["Mask"].setText(self.netmaskConfigEntry.getText())
372                 else:
373                         self["IP"].setText(_("N/A"))                    
374                 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
375                         if self.gatewayConfigEntry.getText() == "0.0.0.0":
376                                 self["Gatewaytext"].setText(_("Gateway"))
377                                 self["Gateway"].setText(_("N/A"))
378                         else:
379                                 self["Gatewaytext"].setText(_("Gateway"))
380                                 self["Gateway"].setText(self.gatewayConfigEntry.getText())
381                 else:
382                         self["Gateway"].setText("")
383                         self["Gatewaytext"].setText("")
384                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
385
386         def createConfig(self):
387                 self.InterfaceEntry = None
388                 self.dhcpEntry = None
389                 self.gatewayEntry = None
390                 self.hiddenSSID = None
391                 self.wlanSSID = None
392                 self.encryptionEnabled = None
393                 self.encryptionKey = None
394                 self.encryptionType = None
395                 self.nwlist = None
396                 self.encryptionlist = None
397                 self.weplist = None
398                 self.wsconfig = None
399                 self.default = None
400
401                 if self.iface == "wlan0" or self.iface == "ath0" :
402                         from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
403                         self.w = Wlan(self.iface)
404                         self.ws = wpaSupplicant()
405                         self.encryptionlist = []
406                         self.encryptionlist.append(("WEP", _("WEP")))
407                         self.encryptionlist.append(("WPA", _("WPA")))
408                         self.encryptionlist.append(("WPA2", _("WPA2")))
409                         self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2")))
410                         self.weplist = []
411                         self.weplist.append("ASCII")
412                         self.weplist.append("HEX")
413                         if self.aplist is not None:
414                                 self.nwlist = self.aplist
415                                 self.nwlist.sort(key = lambda x: x[0])
416                         else:
417                                 self.nwlist = []
418                                 self.aps = None
419                                 try:
420                                         self.aps = self.w.getNetworkList()
421                                         if self.aps is not None:
422                                                 for ap in self.aps:
423                                                         a = self.aps[ap]
424                                                         if a['active']:
425                                                                 if a['essid'] != '':
426                                                                         self.nwlist.append((a['essid'],a['essid']))
427                                         self.nwlist.sort(key = lambda x: x[0])
428                                 except:
429                                         self.nwlist.append(("No Networks found",_("No Networks found")))
430
431                         self.wsconfig = self.ws.loadConfig()
432                         if self.essid is not None: # ssid from wlan scan
433                                 self.default = self.essid
434                         else:
435                                 self.default = self.wsconfig['ssid']
436
437                         if "hidden..." not in self.nwlist:
438                                 self.nwlist.append(("hidden...",_("enter hidden network SSID")))
439                         if self.default not in self.nwlist:
440                                 self.nwlist.append((self.default,self.default))
441                         config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
442                         config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = self.wsconfig['hiddenessid'], visible_width = 50, fixed_size = False))
443
444                         config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] ))
445                         config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] ))
446                         config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] ))
447                         config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
448
449                 self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
450                 self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
451                 self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
452                 self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
453                 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
454                         self.dhcpdefault=True
455                 else:
456                         self.dhcpdefault=False
457                 self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=self.dhcpdefault or False))
458                 self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
459                 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
460                 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
461                 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
462
463         def createSetup(self):
464                 self.list = []
465                 self.InterfaceEntry = getConfigListEntry(_("Use Interface"), self.activateInterfaceEntry)
466
467                 self.list.append(self.InterfaceEntry)
468                 if self.activateInterfaceEntry.value:
469                         self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
470                         self.list.append(self.dhcpEntry)
471                         if not self.dhcpConfigEntry.value:
472                                 self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
473                                 self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
474                                 self.gatewayEntry = getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry)
475                                 self.list.append(self.gatewayEntry)
476                                 if self.hasGatewayConfigEntry.value:
477                                         self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
478
479                         self.extended = None
480                         for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
481                                 callFnc = p.__call__["ifaceSupported"](self.iface)
482                                 if callFnc is not None:
483                                         if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin
484                                                 self.extended = callFnc
485                                                 if p.__call__.has_key("configStrings"):
486                                                         self.configStrings = p.__call__["configStrings"]
487                                                 else:
488                                                         self.configStrings = None
489                                                 if config.plugins.wlan.essid.value == 'hidden...':
490                                                         self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
491                                                         self.list.append(self.wlanSSID)
492                                                         self.hiddenSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.hiddenessid)
493                                                         self.list.append(self.hiddenSSID)
494                                                 else:
495                                                         self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
496                                                         self.list.append(self.wlanSSID)
497                                                 self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
498                                                 self.list.append(self.encryptionEnabled)
499                                                 
500                                                 if config.plugins.wlan.encryption.enabled.value:
501                                                         self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)
502                                                         self.list.append(self.encryptionType)
503                                                         if config.plugins.wlan.encryption.type.value == 'WEP':
504                                                                 self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype))
505                                                                 self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
506                                                                 self.list.append(self.encryptionKey)
507                                                         else:
508                                                                 self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
509                                                                 self.list.append(self.encryptionKey)
510
511                 self["config"].list = self.list
512                 self["config"].l.setList(self.list)
513
514         def KeyBlue(self):
515                 self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup)
516
517         def newConfig(self):
518                 if self["config"].getCurrent() == self.InterfaceEntry:
519                         self.createSetup()
520                 if self["config"].getCurrent() == self.dhcpEntry:
521                         self.createSetup()
522                 if self["config"].getCurrent() == self.gatewayEntry:
523                         self.createSetup()
524                 if self.iface == "wlan0" or self.iface == "ath0" :
525                         if self["config"].getCurrent() == self.wlanSSID:
526                                 self.createSetup()
527                         if self["config"].getCurrent() == self.encryptionEnabled:
528                                 self.createSetup()
529                         if self["config"].getCurrent() == self.encryptionType:
530                                 self.createSetup()
531
532         def keyLeft(self):
533                 ConfigListScreen.keyLeft(self)
534                 self.newConfig()
535
536         def keyRight(self):
537                 ConfigListScreen.keyRight(self)
538                 self.newConfig()
539         
540         def keySave(self):
541                 self.hideInputHelp()
542                 if self["config"].isChanged():
543                         self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) )
544                 else:
545                         if self.finished_cb:
546                                 self.finished_cb()
547                         else:
548                                 self.close('cancel')
549
550         def keySaveConfirm(self, ret = False):
551                 if (ret == True):               
552                         num_configured_if = len(iNetwork.getConfiguredAdapters())
553                         if num_configured_if >= 1:
554                                 if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
555                                         self.applyConfig(True)
556                                 else:
557                                         self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
558                         else:
559                                 self.applyConfig(True)
560                 else:
561                         self.keyCancel()                
562
563         def secondIfaceFoundCB(self,data):
564                 if data is False:
565                         self.applyConfig(True)
566                 else:
567                         configuredInterfaces = iNetwork.getConfiguredAdapters()
568                         for interface in configuredInterfaces:
569                                 if interface == self.iface:
570                                         continue
571                                 iNetwork.setAdapterAttribute(interface, "up", False)
572                                 iNetwork.deactivateInterface(interface)
573                                 self.applyConfig(True)
574
575         def applyConfig(self, ret = False):
576                 if (ret == True):
577                         iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value)
578                         iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
579                         iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
580                         iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
581                         if self.hasGatewayConfigEntry.value:
582                                 iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
583                         else:
584                                 iNetwork.removeAdapterAttribute(self.iface, "gateway")
585                         if self.extended is not None and self.configStrings is not None:
586                                 iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
587                                 self.ws.writeConfig()
588                         if self.activateInterfaceEntry.value is False:
589                                 iNetwork.deactivateInterface(self.iface)
590                         iNetwork.writeNetworkConfig()
591                         iNetwork.restartNetwork(self.applyConfigDataAvail)
592                         self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
593                 else:
594                         self.keyCancel()
595
596         def applyConfigDataAvail(self, data):
597                 if data is True:
598                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
599
600         def getInterfacesDataAvail(self, data):
601                 if data is True:
602                         self.applyConfigRef.close(True)
603
604         def applyConfigfinishedCB(self,data):
605                 if data is True:
606                         if self.finished_cb:
607                                 self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
608                         else:
609                                 self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
610
611         def ConfigfinishedCB(self,data):
612                 if data is not None:
613                         if data is True:
614                                 self.close('ok')
615
616         def keyCancelConfirm(self, result):
617                 if not result:
618                         return
619                 if self.oldInterfaceState is False:
620                         iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
621                 else:
622                         self.close('cancel')
623
624         def keyCancel(self):
625                 self.hideInputHelp()
626                 if self["config"].isChanged():
627                         self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
628                 else:
629                         self.close('cancel')
630
631         def keyCancelCB(self,data):
632                 if data is not None:
633                         if data is True:
634                                 self.close('cancel')
635
636         def runAsync(self, finished_cb):
637                 self.finished_cb = finished_cb
638                 self.keySave()
639
640         def NameserverSetupClosed(self, *ret):
641                 iNetwork.loadNameserverConfig()
642                 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
643                 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
644                 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
645                 self.createSetup()
646                 self.layoutFinished()
647
648         def cleanup(self):
649                 iNetwork.stopLinkStateConsole()
650                 
651         def hideInputHelp(self):
652                 current = self["config"].getCurrent()
653                 if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...':
654                         if current[1].help_window.instance is not None:
655                                 current[1].help_window.instance.hide()
656                 elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
657                         if current[1].help_window.instance is not None:
658                                 current[1].help_window.instance.hide()
659
660
661 class AdapterSetupConfiguration(Screen, HelpableScreen):
662         def __init__(self, session,iface):
663                 Screen.__init__(self, session)
664                 HelpableScreen.__init__(self)
665                 self.session = session
666                 self.iface = iface
667                 self.restartLanRef = None
668                 self.mainmenu = self.genMainMenu()
669                 self["menulist"] = MenuList(self.mainmenu)
670                 self["key_red"] = StaticText(_("Close"))
671                 self["description"] = StaticText()
672                 self["IFtext"] = StaticText()
673                 self["IF"] = StaticText()
674                 self["Statustext"] = StaticText()
675                 self["statuspic"] = MultiPixmap()
676                 self["statuspic"].hide()
677                 
678                 self.oktext = _("Press OK on your remote control to continue.")
679                 self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
680                 self.errortext = _("No working wireless network interface found.\n Please verify that you have attached a compatible WLAN device or enable your local network interface.")      
681                 
682                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
683                         {
684                         "up": (self.up, _("move up to previous entry")),
685                         "down": (self.down, _("move down to next entry")),
686                         "left": (self.left, _("move up to first entry")),
687                         "right": (self.right, _("move down to last entry")),
688                         })
689                 
690                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
691                         {
692                         "cancel": (self.close, _("exit networkadapter setup menu")),
693                         "ok": (self.ok, _("select menu entry")),
694                         })
695
696                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
697                         {
698                         "red": (self.close, _("exit networkadapter setup menu")),       
699                         })
700
701                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
702                 {
703                         "ok": self.ok,
704                         "back": self.close,
705                         "up": self.up,
706                         "down": self.down,
707                         "red": self.close,
708                         "left": self.left,
709                         "right": self.right,
710                 }, -2)
711                 
712                 self.updateStatusbar()
713                 self.onLayoutFinish.append(self.layoutFinished)
714                 self.onClose.append(self.cleanup)
715
716         def ok(self):
717                 if self["menulist"].getCurrent()[1] == 'edit':
718                         if self.iface == 'wlan0' or self.iface == 'ath0':
719                                 try:
720                                         from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
721                                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
722                                 except ImportError:
723                                         self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
724                                 else:
725                                         ifobj = Wireless(self.iface) # a Wireless NIC Object
726                                         self.wlanresponse = ifobj.getStatistics()
727                                         if self.wlanresponse[0] != 19: # Wlan Interface found.
728                                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
729                                         else:
730                                                 # Display Wlan not available Message
731                                                 self.showErrorMessage()
732                         else:
733                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup,self.iface)
734                 if self["menulist"].getCurrent()[1] == 'test':
735                         self.session.open(NetworkAdapterTest,self.iface)
736                 if self["menulist"].getCurrent()[1] == 'dns':
737                         self.session.open(NameserverSetup)
738                 if self["menulist"].getCurrent()[1] == 'scanwlan':
739                         try:
740                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
741                                 from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
742                         except ImportError:
743                                 self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
744                         else:
745                                 ifobj = Wireless(self.iface) # a Wireless NIC Object
746                                 self.wlanresponse = ifobj.getStatistics()
747                                 if self.wlanresponse[0] != 19:
748                                         self.session.openWithCallback(self.WlanScanClosed, WlanScan, self.iface)
749                                 else:
750                                         # Display Wlan not available Message
751                                         self.showErrorMessage()
752                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
753                         try:
754                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
755                                 from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
756                         except ImportError:
757                                 self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
758                         else:   
759                                 ifobj = Wireless(self.iface) # a Wireless NIC Object
760                                 self.wlanresponse = ifobj.getStatistics()
761                                 if self.wlanresponse[0] != 19:
762                                         self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
763                                 else:
764                                         # Display Wlan not available Message
765                                         self.showErrorMessage()
766                 if self["menulist"].getCurrent()[1] == 'lanrestart':
767                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
768                 if self["menulist"].getCurrent()[1] == 'openwizard':
769                         from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
770                         self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard)
771                 if self["menulist"].getCurrent()[1][0] == 'extendedSetup':
772                         self.extended = self["menulist"].getCurrent()[1][2]
773                         self.extended(self.session, self.iface)
774         
775         def up(self):
776                 self["menulist"].up()
777                 self.loadDescription()
778
779         def down(self):
780                 self["menulist"].down()
781                 self.loadDescription()
782
783         def left(self):
784                 self["menulist"].pageUp()
785                 self.loadDescription()
786
787         def right(self):
788                 self["menulist"].pageDown()
789                 self.loadDescription()
790
791         def layoutFinished(self):
792                 idx = 0
793                 self["menulist"].moveToIndex(idx)
794                 self.loadDescription()
795
796         def loadDescription(self):
797                 if self["menulist"].getCurrent()[1] == 'edit':
798                         self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext )
799                 if self["menulist"].getCurrent()[1] == 'test':
800                         self["description"].setText(_("Test the network configuration of your Dreambox.\n" ) + self.oktext )
801                 if self["menulist"].getCurrent()[1] == 'dns':
802                         self["description"].setText(_("Edit the Nameserver configuration of your Dreambox.\n" ) + self.oktext )
803                 if self["menulist"].getCurrent()[1] == 'scanwlan':
804                         self["description"].setText(_("Scan your network for wireless Access Points and connect to them using your selected wireless device.\n" ) + self.oktext )
805                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
806                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
807                 if self["menulist"].getCurrent()[1] == 'lanrestart':
808                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
809                 if self["menulist"].getCurrent()[1] == 'openwizard':
810                         self["description"].setText(_("Use the Networkwizard to configure your Network\n" ) + self.oktext )
811                 if self["menulist"].getCurrent()[1][0] == 'extendedSetup':
812                         self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext )
813                 
814         def updateStatusbar(self, data = None):
815                 self["IFtext"].setText(_("Network:"))
816                 self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
817                 self["Statustext"].setText(_("Link:"))
818                 
819                 if self.iface == 'wlan0' or self.iface == 'ath0':
820                         try:
821                                 from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
822                         except:
823                                 self["statuspic"].setPixmapNum(1)
824                                 self["statuspic"].show()
825                         else:
826                                 iStatus.getDataForInterface(self.iface,self.getInfoCB)
827                 else:
828                         iNetwork.getLinkState(self.iface,self.dataAvail)
829
830         def doNothing(self):
831                 pass
832
833         def genMainMenu(self):
834                 menu = []
835                 menu.append((_("Adapter settings"), "edit"))
836                 menu.append((_("Nameserver settings"), "dns"))
837                 menu.append((_("Network test"), "test"))
838                 menu.append((_("Restart network"), "lanrestart"))
839
840                 self.extended = None
841                 self.extendedSetup = None               
842                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
843                         callFnc = p.__call__["ifaceSupported"](self.iface)
844                         if callFnc is not None:
845                                 self.extended = callFnc
846                                 if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin
847                                         menu.append((_("Scan Wireless Networks"), "scanwlan"))
848                                         if iNetwork.getAdapterAttribute(self.iface, "up"):
849                                                 menu.append((_("Show WLAN Status"), "wlanstatus"))
850                                 else:
851                                         if p.__call__.has_key("menuEntryName"):
852                                                 menuEntryName = p.__call__["menuEntryName"](self.iface)
853                                         else:
854                                                 menuEntryName = _('Extended Setup...')
855                                         if p.__call__.has_key("menuEntryDescription"):
856                                                 menuEntryDescription = p.__call__["menuEntryDescription"](self.iface)
857                                         else:
858                                                 menuEntryDescription = _('Extended Networksetup Plugin...')
859                                         self.extendedSetup = ('extendedSetup',menuEntryDescription, self.extended)
860                                         menu.append((menuEntryName,self.extendedSetup))                                 
861                         
862                 if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
863                         menu.append((_("NetworkWizard"), "openwizard"))
864
865                 return menu
866
867         def AdapterSetupClosed(self, *ret):
868                 if ret is not None and len(ret):
869                         if ret[0] == 'ok' and (self.iface == 'wlan0' or self.iface == 'ath0') and iNetwork.getAdapterAttribute(self.iface, "up") is True:
870                                 try:
871                                         from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
872                                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
873                                 except ImportError:
874                                         self.session.open(MessageBox, _("The wireless LAN plugin is not installed!\nPlease install it."), type = MessageBox.TYPE_INFO,timeout = 10 )
875                                 else:   
876                                         ifobj = Wireless(self.iface) # a Wireless NIC Object
877                                         self.wlanresponse = ifobj.getStatistics()
878                                         if self.wlanresponse[0] != 19:
879                                                 self.session.openWithCallback(self.WlanStatusClosed, WlanStatus,self.iface)
880                                         else:
881                                                 # Display Wlan not available Message
882                                                 self.showErrorMessage()
883                         else:
884                                 self.mainmenu = self.genMainMenu()
885                                 self["menulist"].l.setList(self.mainmenu)
886                                 self.updateStatusbar()
887                 else:
888                         self.mainmenu = self.genMainMenu()
889                         self["menulist"].l.setList(self.mainmenu)
890                         self.updateStatusbar()
891
892         def WlanStatusClosed(self, *ret):
893                 if ret is not None and len(ret):
894                         from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
895                         iStatus.stopWlanConsole()
896                         self.mainmenu = self.genMainMenu()
897                         self["menulist"].l.setList(self.mainmenu)
898                         self.updateStatusbar()
899
900         def WlanScanClosed(self,*ret):
901                 if ret[0] is not None:
902                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1])
903                 else:
904                         from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
905                         iStatus.stopWlanConsole()
906                         self.mainmenu = self.genMainMenu()
907                         self["menulist"].l.setList(self.mainmenu)
908                         self.updateStatusbar()
909                         
910         def restartLan(self, ret = False):
911                 if (ret == True):
912                         iNetwork.restartNetwork(self.restartLanDataAvail)
913                         self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False)
914                         
915         def restartLanDataAvail(self, data):
916                 if data is True:
917                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
918
919         def getInterfacesDataAvail(self, data):
920                 if data is True:
921                         self.restartLanRef.close(True)
922
923         def restartfinishedCB(self,data):
924                 if data is True:
925                         self.updateStatusbar()
926                         self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False)
927
928         def dataAvail(self,data):
929                 self.output = data.strip()
930                 result = self.output.split('\n')
931                 pattern = re_compile("Link detected: yes")
932                 for item in result:
933                         if re_search(pattern, item):
934                                 self["statuspic"].setPixmapNum(0)
935                         else:
936                                 self["statuspic"].setPixmapNum(1)
937                 self["statuspic"].show()
938
939         def showErrorMessage(self):
940                 self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 )
941                 
942         def cleanup(self):
943                 iNetwork.stopLinkStateConsole()
944                 iNetwork.stopDeactivateInterfaceConsole()
945                 try:
946                         from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
947                 except ImportError:
948                         pass
949                 else:
950                         iStatus.stopWlanConsole()
951
952         def getInfoCB(self,data,status):
953                 if data is not None:
954                         if data is True:
955                                 if status is not None:
956                                         if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
957                                                 self["statuspic"].setPixmapNum(1)
958                                         else:
959                                                 self["statuspic"].setPixmapNum(0)
960                                         self["statuspic"].show()
961
962 class NetworkAdapterTest(Screen):       
963         def __init__(self, session,iface):
964                 Screen.__init__(self, session)
965                 self.iface = iface
966                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
967                 self.setLabels()
968                 self.onClose.append(self.cleanup)
969                 self.onHide.append(self.cleanup)
970                 
971                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
972                 {
973                         "ok": self.KeyOK,
974                         "blue": self.KeyOK,
975                         "up": lambda: self.updownhandler('up'),
976                         "down": lambda: self.updownhandler('down'),
977                 
978                 }, -2)
979                 
980                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
981                 {
982                         "red": self.cancel,
983                         "back": self.cancel,
984                 }, -2)
985                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
986                 {
987                         "red": self.closeInfo,
988                         "back": self.closeInfo,
989                 }, -2)
990                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
991                 {
992                         "green": self.KeyGreen,
993                 }, -2)
994                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
995                 {
996                         "green": self.KeyGreenRestart,
997                 }, -2)
998                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
999                 {
1000                         "yellow": self.KeyYellow,
1001                 }, -2)
1002                 
1003                 self["shortcutsgreen_restart"].setEnabled(False)
1004                 self["updown_actions"].setEnabled(False)
1005                 self["infoshortcuts"].setEnabled(False)
1006                 self.onClose.append(self.delTimer)      
1007                 self.onLayoutFinish.append(self.layoutFinished)
1008                 self.steptimer = False
1009                 self.nextstep = 0
1010                 self.activebutton = 0
1011                 self.nextStepTimer = eTimer()
1012                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
1013
1014         def cancel(self):
1015                 if self.oldInterfaceState is False:
1016                         iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
1017                         iNetwork.deactivateInterface(self.iface)
1018                 self.close()
1019
1020         def closeInfo(self):
1021                 self["shortcuts"].setEnabled(True)              
1022                 self["infoshortcuts"].setEnabled(False)
1023                 self["InfoText"].hide()
1024                 self["InfoTextBorder"].hide()
1025                 self["key_red"].setText(_("Close"))
1026
1027         def delTimer(self):
1028                 del self.steptimer
1029                 del self.nextStepTimer
1030
1031         def nextStepTimerFire(self):
1032                 self.nextStepTimer.stop()
1033                 self.steptimer = False
1034                 self.runTest()
1035
1036         def updownhandler(self,direction):
1037                 if direction == 'up':
1038                         if self.activebutton >=2:
1039                                 self.activebutton -= 1
1040                         else:
1041                                 self.activebutton = 6
1042                         self.setActiveButton(self.activebutton)
1043                 if direction == 'down':
1044                         if self.activebutton <=5:
1045                                 self.activebutton += 1
1046                         else:
1047                                 self.activebutton = 1
1048                         self.setActiveButton(self.activebutton)
1049
1050         def setActiveButton(self,button):
1051                 if button == 1:
1052                         self["EditSettingsButton"].setPixmapNum(0)
1053                         self["EditSettings_Text"].setForegroundColorNum(0)
1054                         self["NetworkInfo"].setPixmapNum(0)
1055                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1056                         self["AdapterInfo"].setPixmapNum(1)               # active
1057                         self["AdapterInfo_Text"].setForegroundColorNum(2) # active
1058                 if button == 2:
1059                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1060                         self["AdapterInfo"].setPixmapNum(0)
1061                         self["DhcpInfo"].setPixmapNum(0)
1062                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1063                         self["NetworkInfo"].setPixmapNum(1)               # active
1064                         self["NetworkInfo_Text"].setForegroundColorNum(2) # active
1065                 if button == 3:
1066                         self["NetworkInfo"].setPixmapNum(0)
1067                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1068                         self["IPInfo"].setPixmapNum(0)
1069                         self["IPInfo_Text"].setForegroundColorNum(1)
1070                         self["DhcpInfo"].setPixmapNum(1)                  # active
1071                         self["DhcpInfo_Text"].setForegroundColorNum(2)    # active
1072                 if button == 4:
1073                         self["DhcpInfo"].setPixmapNum(0)
1074                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1075                         self["DNSInfo"].setPixmapNum(0)
1076                         self["DNSInfo_Text"].setForegroundColorNum(1)
1077                         self["IPInfo"].setPixmapNum(1)                  # active
1078                         self["IPInfo_Text"].setForegroundColorNum(2)    # active                
1079                 if button == 5:
1080                         self["IPInfo"].setPixmapNum(0)
1081                         self["IPInfo_Text"].setForegroundColorNum(1)
1082                         self["EditSettingsButton"].setPixmapNum(0)
1083                         self["EditSettings_Text"].setForegroundColorNum(0)
1084                         self["DNSInfo"].setPixmapNum(1)                 # active
1085                         self["DNSInfo_Text"].setForegroundColorNum(2)   # active
1086                 if button == 6:
1087                         self["DNSInfo"].setPixmapNum(0)
1088                         self["DNSInfo_Text"].setForegroundColorNum(1)
1089                         self["EditSettingsButton"].setPixmapNum(1)         # active
1090                         self["EditSettings_Text"].setForegroundColorNum(2) # active
1091                         self["AdapterInfo"].setPixmapNum(0)
1092                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1093                         
1094         def runTest(self):
1095                 next = self.nextstep
1096                 if next == 0:
1097                         self.doStep1()
1098                 elif next == 1:
1099                         self.doStep2()
1100                 elif next == 2:
1101                         self.doStep3()
1102                 elif next == 3:
1103                         self.doStep4()
1104                 elif next == 4:
1105                         self.doStep5()
1106                 elif next == 5:
1107                         self.doStep6()
1108                 self.nextstep += 1
1109
1110         def doStep1(self):
1111                 self.steptimer = True
1112                 self.nextStepTimer.start(3000)
1113                 self["key_yellow"].setText(_("Stop test"))
1114
1115         def doStep2(self):
1116                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
1117                 self["Adapter"].setForegroundColorNum(2)
1118                 self["Adaptertext"].setForegroundColorNum(1)
1119                 self["AdapterInfo_Text"].setForegroundColorNum(1)
1120                 self["AdapterInfo_OK"].show()
1121                 self.steptimer = True
1122                 self.nextStepTimer.start(3000)
1123
1124         def doStep3(self):
1125                 self["Networktext"].setForegroundColorNum(1)
1126                 self["Network"].setText(_("Please wait..."))
1127                 self.getLinkState(self.iface)
1128                 self["NetworkInfo_Text"].setForegroundColorNum(1)
1129                 self.steptimer = True
1130                 self.nextStepTimer.start(3000)
1131
1132         def doStep4(self):
1133                 self["Dhcptext"].setForegroundColorNum(1)
1134                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
1135                         self["Dhcp"].setForegroundColorNum(2)
1136                         self["Dhcp"].setText(_("enabled"))
1137                         self["DhcpInfo_Check"].setPixmapNum(0)
1138                 else:
1139                         self["Dhcp"].setForegroundColorNum(1)
1140                         self["Dhcp"].setText(_("disabled"))
1141                         self["DhcpInfo_Check"].setPixmapNum(1)
1142                 self["DhcpInfo_Check"].show()
1143                 self["DhcpInfo_Text"].setForegroundColorNum(1)
1144                 self.steptimer = True
1145                 self.nextStepTimer.start(3000)
1146
1147         def doStep5(self):
1148                 self["IPtext"].setForegroundColorNum(1)
1149                 self["IP"].setText(_("Please wait..."))
1150                 iNetwork.checkNetworkState(self.NetworkStatedataAvail)
1151
1152         def doStep6(self):
1153                 self.steptimer = False
1154                 self.nextStepTimer.stop()
1155                 self["DNStext"].setForegroundColorNum(1)
1156                 self["DNS"].setText(_("Please wait..."))
1157                 iNetwork.checkDNSLookup(self.DNSLookupdataAvail)
1158
1159         def KeyGreen(self):
1160                 self["shortcutsgreen"].setEnabled(False)
1161                 self["shortcutsyellow"].setEnabled(True)
1162                 self["updown_actions"].setEnabled(False)
1163                 self["key_yellow"].setText("")
1164                 self["key_green"].setText("")
1165                 self.steptimer = True
1166                 self.nextStepTimer.start(1000)
1167
1168         def KeyGreenRestart(self):
1169                 self.nextstep = 0
1170                 self.layoutFinished()
1171                 self["Adapter"].setText((""))
1172                 self["Network"].setText((""))
1173                 self["Dhcp"].setText((""))
1174                 self["IP"].setText((""))
1175                 self["DNS"].setText((""))
1176                 self["AdapterInfo_Text"].setForegroundColorNum(0)
1177                 self["NetworkInfo_Text"].setForegroundColorNum(0)
1178                 self["DhcpInfo_Text"].setForegroundColorNum(0)
1179                 self["IPInfo_Text"].setForegroundColorNum(0)
1180                 self["DNSInfo_Text"].setForegroundColorNum(0)
1181                 self["shortcutsgreen_restart"].setEnabled(False)
1182                 self["shortcutsgreen"].setEnabled(False)
1183                 self["shortcutsyellow"].setEnabled(True)
1184                 self["updown_actions"].setEnabled(False)
1185                 self["key_yellow"].setText("")
1186                 self["key_green"].setText("")
1187                 self.steptimer = True
1188                 self.nextStepTimer.start(1000)
1189
1190         def KeyOK(self):
1191                 self["infoshortcuts"].setEnabled(True)
1192                 self["shortcuts"].setEnabled(False)
1193                 if self.activebutton == 1: # Adapter Check
1194                         self["InfoText"].setText(_("This test detects your configured LAN-Adapter."))
1195                         self["InfoTextBorder"].show()
1196                         self["InfoText"].show()
1197                         self["key_red"].setText(_("Back"))
1198                 if self.activebutton == 2: #LAN Check
1199                         self["InfoText"].setText(_("This test checks whether a network cable is connected to your LAN-Adapter.\nIf you get a \"disconnected\" message:\n- verify that a network cable is attached\n- verify that the cable is not broken"))
1200                         self["InfoTextBorder"].show()
1201                         self["InfoText"].show()
1202                         self["key_red"].setText(_("Back"))
1203                 if self.activebutton == 3: #DHCP Check
1204                         self["InfoText"].setText(_("This test checks whether your LAN Adapter is set up for automatic IP Address configuration with DHCP.\nIf you get a \"disabled\" message:\n - then your 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."))
1205                         self["InfoTextBorder"].show()
1206                         self["InfoText"].show()
1207                         self["key_red"].setText(_("Back"))
1208                 if self.activebutton == 4: # IP Check
1209                         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"))
1210                         self["InfoTextBorder"].show()
1211                         self["InfoText"].show()
1212                         self["key_red"].setText(_("Back"))
1213                 if self.activebutton == 5: # DNS Check
1214                         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"))
1215                         self["InfoTextBorder"].show()
1216                         self["InfoText"].show()
1217                         self["key_red"].setText(_("Back"))
1218                 if self.activebutton == 6: # Edit Settings
1219                         self.session.open(AdapterSetup,self.iface)
1220
1221         def KeyYellow(self):
1222                 self.nextstep = 0
1223                 self["shortcutsgreen_restart"].setEnabled(True)
1224                 self["shortcutsgreen"].setEnabled(False)
1225                 self["shortcutsyellow"].setEnabled(False)
1226                 self["key_green"].setText(_("Restart test"))
1227                 self["key_yellow"].setText("")
1228                 self.steptimer = False
1229                 self.nextStepTimer.stop()
1230
1231         def layoutFinished(self):
1232                 self["shortcutsyellow"].setEnabled(False)
1233                 self["AdapterInfo_OK"].hide()
1234                 self["NetworkInfo_Check"].hide()
1235                 self["DhcpInfo_Check"].hide()
1236                 self["IPInfo_Check"].hide()
1237                 self["DNSInfo_Check"].hide()
1238                 self["EditSettings_Text"].hide()
1239                 self["EditSettingsButton"].hide()
1240                 self["InfoText"].hide()
1241                 self["InfoTextBorder"].hide()
1242                 self["key_yellow"].setText("")
1243
1244         def setLabels(self):
1245                 self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))
1246                 self["Adapter"] = MultiColorLabel()
1247                 self["AdapterInfo"] = MultiPixmap()
1248                 self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info"))
1249                 self["AdapterInfo_OK"] = Pixmap()
1250                 
1251                 if self.iface == 'wlan0' or self.iface == 'ath0':
1252                         self["Networktext"] = MultiColorLabel(_("Wireless Network"))
1253                 else:
1254                         self["Networktext"] = MultiColorLabel(_("Local Network"))
1255                 
1256                 self["Network"] = MultiColorLabel()
1257                 self["NetworkInfo"] = MultiPixmap()
1258                 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
1259                 self["NetworkInfo_Check"] = MultiPixmap()
1260                 
1261                 self["Dhcptext"] = MultiColorLabel(_("DHCP"))
1262                 self["Dhcp"] = MultiColorLabel()
1263                 self["DhcpInfo"] = MultiPixmap()
1264                 self["DhcpInfo_Text"] = MultiColorLabel(_("Show Info"))
1265                 self["DhcpInfo_Check"] = MultiPixmap()
1266                 
1267                 self["IPtext"] = MultiColorLabel(_("IP Address"))
1268                 self["IP"] = MultiColorLabel()
1269                 self["IPInfo"] = MultiPixmap()
1270                 self["IPInfo_Text"] = MultiColorLabel(_("Show Info"))
1271                 self["IPInfo_Check"] = MultiPixmap()
1272                 
1273                 self["DNStext"] = MultiColorLabel(_("Nameserver"))
1274                 self["DNS"] = MultiColorLabel()
1275                 self["DNSInfo"] = MultiPixmap()
1276                 self["DNSInfo_Text"] = MultiColorLabel(_("Show Info"))
1277                 self["DNSInfo_Check"] = MultiPixmap()
1278                 
1279                 self["EditSettings_Text"] = MultiColorLabel(_("Edit settings"))
1280                 self["EditSettingsButton"] = MultiPixmap()
1281                 
1282                 self["key_red"] = StaticText(_("Close"))
1283                 self["key_green"] = StaticText(_("Start test"))
1284                 self["key_yellow"] = StaticText(_("Stop test"))
1285                 
1286                 self["InfoTextBorder"] = Pixmap()
1287                 self["InfoText"] = Label()
1288
1289         def getLinkState(self,iface):
1290                 if iface == 'wlan0' or iface == 'ath0':
1291                         try:
1292                                 from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
1293                         except:
1294                                         self["Network"].setForegroundColorNum(1)
1295                                         self["Network"].setText(_("disconnected"))
1296                                         self["NetworkInfo_Check"].setPixmapNum(1)
1297                                         self["NetworkInfo_Check"].show()
1298                         else:
1299                                 iStatus.getDataForInterface(self.iface,self.getInfoCB)
1300                 else:
1301                         iNetwork.getLinkState(iface,self.LinkStatedataAvail)
1302
1303         def LinkStatedataAvail(self,data):
1304                 self.output = data.strip()
1305                 result = self.output.split('\n')
1306                 pattern = re_compile("Link detected: yes")
1307                 for item in result:
1308                         if re_search(pattern, item):
1309                                 self["Network"].setForegroundColorNum(2)
1310                                 self["Network"].setText(_("connected"))
1311                                 self["NetworkInfo_Check"].setPixmapNum(0)
1312                         else:
1313                                 self["Network"].setForegroundColorNum(1)
1314                                 self["Network"].setText(_("disconnected"))
1315                                 self["NetworkInfo_Check"].setPixmapNum(1)
1316                 self["NetworkInfo_Check"].show()
1317
1318         def NetworkStatedataAvail(self,data):
1319                 if data <= 2:
1320                         self["IP"].setForegroundColorNum(2)
1321                         self["IP"].setText(_("confirmed"))
1322                         self["IPInfo_Check"].setPixmapNum(0)
1323                 else:
1324                         self["IP"].setForegroundColorNum(1)
1325                         self["IP"].setText(_("unconfirmed"))
1326                         self["IPInfo_Check"].setPixmapNum(1)
1327                 self["IPInfo_Check"].show()
1328                 self["IPInfo_Text"].setForegroundColorNum(1)            
1329                 self.steptimer = True
1330                 self.nextStepTimer.start(3000)          
1331                 
1332         def DNSLookupdataAvail(self,data):
1333                 if data <= 2:
1334                         self["DNS"].setForegroundColorNum(2)
1335                         self["DNS"].setText(_("confirmed"))
1336                         self["DNSInfo_Check"].setPixmapNum(0)
1337                 else:
1338                         self["DNS"].setForegroundColorNum(1)
1339                         self["DNS"].setText(_("unconfirmed"))
1340                         self["DNSInfo_Check"].setPixmapNum(1)
1341                 self["DNSInfo_Check"].show()
1342                 self["DNSInfo_Text"].setForegroundColorNum(1)
1343                 self["EditSettings_Text"].show()
1344                 self["EditSettingsButton"].setPixmapNum(1)
1345                 self["EditSettings_Text"].setForegroundColorNum(2) # active
1346                 self["EditSettingsButton"].show()
1347                 self["key_yellow"].setText("")
1348                 self["key_green"].setText(_("Restart test"))
1349                 self["shortcutsgreen"].setEnabled(False)
1350                 self["shortcutsgreen_restart"].setEnabled(True)
1351                 self["shortcutsyellow"].setEnabled(False)
1352                 self["updown_actions"].setEnabled(True)
1353                 self.activebutton = 6
1354
1355         def getInfoCB(self,data,status):
1356                 if data is not None:
1357                         if data is True:
1358                                 if status is not None:
1359                                         if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
1360                                                 self["Network"].setForegroundColorNum(1)
1361                                                 self["Network"].setText(_("disconnected"))
1362                                                 self["NetworkInfo_Check"].setPixmapNum(1)
1363                                                 self["NetworkInfo_Check"].show()
1364                                         else:
1365                                                 self["Network"].setForegroundColorNum(2)
1366                                                 self["Network"].setText(_("connected"))
1367                                                 self["NetworkInfo_Check"].setPixmapNum(0)
1368                                                 self["NetworkInfo_Check"].show()
1369                                                 
1370         def cleanup(self):
1371                 iNetwork.stopLinkStateConsole()
1372                 iNetwork.stopDNSConsole()
1373                 try:
1374                         from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status
1375                 except ImportError:
1376                         pass
1377                 else:
1378                         iStatus.stopWlanConsole()
1379