dfdd4cfce557ed75ecc96b76d3fde1804e3d6302
[enigma2.git] / lib / python / Screens / NetworkSetup.py
1 from Screen import Screen
2 from Components.ActionMap import ActionMap,NumberActionMap
3 from Screens.MessageBox import MessageBox
4 from Screens.Standby import *
5 from Components.ConfigList import ConfigListScreen
6 from Components.config import config, getConfigListEntry
7 from Components.Network import iNetwork
8 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
9 from Components.Label import Label
10 from Components.Pixmap import Pixmap
11 from Tools.LoadPixmap import LoadPixmap
12 from Components.MenuList import MenuList
13 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigNothing, ConfigSubsection, ConfigText, ConfigSelection, getConfigListEntry
14 from Components.PluginComponent import plugins
15 from Plugins.Plugin import PluginDescriptor
16 from enigma import eTimer, eConsoleAppContainer,gRGB
17 import time, os, re
18 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
19
20 Black = "#000000"
21 Grey = "#8c8c93"
22 Green = "1cff1c"
23 nextstep = None
24 activebutton = None
25
26 def getColor(str):
27         return gRGB(int(str[1:], 0x10))
28
29 class NetworkAdapterSelection(Screen):
30         def __init__(self, session):
31                 Screen.__init__(self, session)
32                 iNetwork.getInterfaces()
33                 self.wlan_errortext = _("No working wireless networkadapter found.\nPlease verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly.")
34                 self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.")
35                 self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
36                 if len(self.adapters) == 0:
37                         self.onFirstExecBegin.append(self.NetworkFallback)
38                         
39                 self["adapterlist"] = MenuList(self.adapters)
40                 self["actions"] = ActionMap(["OkCancelActions"],
41                 {
42                         "ok": self.okbuttonClick,
43                         "cancel": self.close
44                 })
45
46                 if len(self.adapters) == 1:
47                         self.onFirstExecBegin.append(self.okbuttonClick)
48
49         def okbuttonClick(self):
50                 selection = self["adapterlist"].getCurrent()
51                 if selection is not None:
52                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[1])
53         
54         def AdapterSetupClosed(self, *ret):
55                 self.close()
56
57         def NetworkFallback(self):
58                 if iNetwork.configuredInterfaces.has_key('wlan0') is True:
59                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.wlan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
60                 else:
61                         self.session.openWithCallback(self.ErrorMessageClosed, MessageBox, self.lan_errortext, type = MessageBox.TYPE_INFO,timeout = 10)
62
63         def ErrorMessageClosed(self, *ret):
64                 if iNetwork.configuredInterfaces.has_key('wlan0') is True:
65                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'wlan0')
66                 else:
67                         self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, 'eth0')
68                         
69 class NameserverSetup(Screen, ConfigListScreen):
70
71         def __init__(self, session):
72                 Screen.__init__(self, session)
73                 iNetwork.getInterfaces()
74                 self.backupNameserverList = iNetwork.getNameserverList()[:]
75                 print "backup-list:", self.backupNameserverList
76
77                 self["ButtonGreentext"] = Label(_("Add"))
78                 self["ButtonYellowtext"] = Label(_("Delete"))
79                 self["ButtonRedtext"] = Label(_("Close"))               
80                 self.createConfig()
81
82                 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
83                 {
84                         "ok": self.ok,
85                         "cancel": self.cancel,
86                         "red": self.cancel,
87                         "green": self.add,
88                         "yellow": self.remove
89                 }, -2)
90
91                 self.list = []
92                 ConfigListScreen.__init__(self, self.list)
93                 self.createSetup()
94
95         def createConfig(self):
96                 self.nameservers = iNetwork.getNameserverList()
97                 self.nameserverEntries = []
98
99                 for nameserver in self.nameservers:
100                         self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
101
102         def createSetup(self):
103                 self.list = []
104
105                 for i in range(len(self.nameserverEntries)):
106                         self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
107
108                 self["config"].list = self.list
109                 self["config"].l.setList(self.list)
110
111         def ok(self):
112                 iNetwork.clearNameservers()
113                 for nameserver in self.nameserverEntries:
114                         iNetwork.addNameserver(nameserver.value)
115                 iNetwork.writeNameserverConfig()
116                 self.close()
117
118         def cancel(self):
119                 iNetwork.clearNameservers()
120                 print "backup-list:", self.backupNameserverList
121                 for nameserver in self.backupNameserverList:
122                         iNetwork.addNameserver(nameserver)
123                 self.close()
124
125         def add(self):
126                 iNetwork.addNameserver([0,0,0,0])
127                 self.createConfig()
128                 self.createSetup()
129
130         def remove(self):
131                 print "currentIndex:", self["config"].getCurrentIndex()
132
133                 index = self["config"].getCurrentIndex()
134                 if index < len(self.nameservers):
135                         iNetwork.removeNameserver(self.nameservers[index])
136                         self.createConfig()
137                         self.createSetup()
138
139
140 class AdapterSetup(Screen, ConfigListScreen):
141         def __init__(self, session, iface):
142                 Screen.__init__(self, session)
143                 self.session = session
144                 iNetwork.getInterfaces()
145                 ## FIXME , workaround against current wizzard not able to send arguments
146                 if iface == 0:
147                         self.iface = "eth0"
148                 elif iface == 1:
149                         self.iface = "wlan0"
150                 else:
151                         self.iface = iface
152
153                 if self.iface == 'wlan0':
154                         from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
155                         self.ws = wpaSupplicant()
156                         list = []
157                         list.append(_("WEP"))
158                         list.append(_("WPA"))
159                         list.append(_("WPA2"))
160                         if iNetwork.getAdapterAttribute('wlan0', 'up') is True:
161                                 try:
162                                         self.w = Wlan('wlan0')
163                                         aps = self.w.getNetworkList()
164                                         nwlist = []
165                                         if aps is not None:
166                                                 print "[Wlan.py] got Accespoints!"
167                                                 for ap in aps:
168                                                         a = aps[ap]
169                                                         if a['active']:
170                                                                 if a['essid'] == "":
171                                                                         a['essid'] = a['bssid']
172                                                                 nwlist.append( a['essid'])
173                                         nwlist.sort(key = lambda x: x[0])
174                                 except:
175                                         nwlist = []
176                                         nwlist.append("No Networks found")
177                                         
178                         if nwlist is None:
179                                 nwlist = []
180                                 nwlist.append("No Networks found")                              
181
182                         config.plugins.wlan.essid = NoSave(ConfigSelection(nwlist, default = nwlist[0]))                        
183                         config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
184                         config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = _("WPA")))
185                         config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = "mysecurewlan", fixed_size = False))
186                         self.ws.loadConfig()
187
188                 self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
189                 self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
190                 self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
191                 self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
192                 self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
193                 nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
194                 self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
195                 self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
196
197                 self["actions"] = ActionMap(["SetupActions","ShortcutActions"],
198                 {
199                         "ok": self.ok,
200                         "cancel": self.cancel,
201                         "red": self.cancel,
202                         "blue": self.KeyBlue,
203                 }, -2)
204
205                 self.list = []
206                 ConfigListScreen.__init__(self, self.list)
207                 self.createSetup()
208                 self.onLayoutFinish.append(self.layoutFinished)
209                 
210                 self["DNS1text"] = Label(_("Primary DNS"))
211                 self["DNS2text"] = Label(_("Secondary DNS"))
212                 self["DNS1"] = Label()
213                 self["DNS2"] = Label()
214                 
215                 self["introduction"] = Label(_("Current settings:"))
216                 
217                 self["IPtext"] = Label(_("IP Address"))
218                 self["Netmasktext"] = Label(_("Netmask"))
219                 self["Gatewaytext"] = Label(_("Gateway"))
220                 
221                 self["IP"] = Label()
222                 self["Mask"] = Label()
223                 self["Gateway"] = Label()
224                 
225                 self["BottomBG"] = Pixmap()
226                 self["Adaptertext"] = Label(_("Network:"))
227                 self["Adapter"] = Label()
228                 self["introduction2"] = Label(_("Press OK to activate the settings."))
229                 self["ButtonRed"] = Pixmap()
230                 self["ButtonRedtext"] = Label(_("Close"))
231                 self["ButtonBlue"] = Pixmap()
232                 self["ButtonBluetext"] = Label(_("Edit DNS"))
233
234         def layoutFinished(self):
235                 self["DNS1"].setText(self.primaryDNS.getText())
236                 self["DNS2"].setText(self.secondaryDNS.getText())
237                 print "self.ipConfigEntry.getText()--->>>",self.ipConfigEntry.getText()
238                 if self.ipConfigEntry.getText() is not None:
239                         self["IP"].setText(self.ipConfigEntry.getText())
240                 else:
241                         self["IP"].setText([0,0,0,0])
242                 self["Mask"].setText(self.netmaskConfigEntry.getText())
243                 self["Gateway"].setText(self.gatewayConfigEntry.getText())              
244                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
245                 
246         def createSetup(self):
247                 self.list = []
248
249                 self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
250                 self.list.append(self.dhcpEntry)
251                 if not self.dhcpConfigEntry.value:
252                         self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
253                         self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
254                         self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
255                         if self.hasGatewayConfigEntry.value:
256                                 self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
257
258                 self.extended = None
259                 self.extendedSetup = None
260                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
261                         callFnc = p.__call__["ifaceSupported"](self.iface)
262                         if callFnc is not None:
263                                 self.extended = callFnc
264                                 print p.__call__
265                                 if p.__call__.has_key("configStrings"):
266                                         self.configStrings = p.__call__["configStrings"]
267                                 else:
268                                         self.configStrings = None
269
270                                 self.list.append(getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid))
271                                 self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
272                                 self.list.append(self.encryptionEnabled)
273                 
274                                 if config.plugins.wlan.encryption.enabled.value:
275                                         self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type))
276                                         self.list.append(getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk))
277
278
279                 self["config"].list = self.list
280                 self["config"].l.setList(self.list)
281
282         def KeyBlue(self):
283                 self.session.open(NameserverSetup)
284
285         def newConfig(self):
286                 print self["config"].getCurrent()
287                 if self["config"].getCurrent() == self.dhcpEntry:
288                         self.createSetup()
289
290         def keyLeft(self):
291                 ConfigListScreen.keyLeft(self)
292                 self.createSetup()
293
294         def keyRight(self):
295                 ConfigListScreen.keyRight(self)
296                 self.createSetup()
297
298         def ok(self):
299                 selection = self["config"].getCurrent()
300                 if selection == self.extendedSetup:
301                         self.extended(self.session, self.iface)
302                 else:
303                         iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
304                         iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
305                         iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
306                         if self.hasGatewayConfigEntry.value:
307                                 iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
308                         else:
309                                 iNetwork.removeAdapterAttribute(self.iface, "gateway")
310
311                         if self.extended is not None and self.configStrings is not None:
312                                 iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
313                                 self.ws.writeConfig()
314                         
315                         iNetwork.deactivateNetworkConfig()
316                         iNetwork.writeNetworkConfig()
317                         iNetwork.activateNetworkConfig()
318                         self.close()
319
320         def cancel(self):
321                 iNetwork.getInterfaces()
322                 self.close()
323
324         def run(self):
325                 self.ok()
326
327
328 class AdapterSetupConfiguration(Screen):
329         
330         def __init__(self, session,iface):
331                 Screen.__init__(self, session)
332                 self.iface = iface
333                 self.session = session
334                 self.mainmenu = self.genMainMenu()
335                 self["menulist"] = MenuList(self.mainmenu)
336                 self["description"] = Label()
337                 self["IFtext"] = Label()
338                 self["IF"] = Label()
339                 self["BottomBG"] = Label()
340                 self["Statustext"] = Label()
341                 self["statuspic_active"] = Pixmap()
342                 self["statuspic_active"].hide()
343                 self["statuspic_inactive"] = Pixmap()
344                 self["statuspic_inactive"].hide()
345                 self["BottomBG"] = Pixmap()
346                 self["ButtonRed"] = Pixmap()
347                 self["ButtonRedtext"] = Label(_("Close"))
348
349                 self.oktext = _("Press OK on your remote control to continue.")
350                 self.reboottext = _("Your Dreambox will restart after pressing OK on your remote control.")
351                 self.errortext = _("No working wireless interface found.\n Please verify that you have attached a compatible WLAN USB Stick or enable you local network interface.")    
352                 
353                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
354                 {
355                         "ok": self.ok,
356                         "back": self.close,
357                         "up": self.up,
358                         "down": self.down,
359                         "red": self.close,
360                         "left": self.left,
361                         "right": self.right,                    
362                 }, -2)
363
364                 iNetwork.getInterfaces()
365                 self.onLayoutFinish.append(self.layoutFinished)
366                 self.updateStatusbar()
367
368         def ok(self):
369                 if self["menulist"].getCurrent()[1] == 'edit':
370                         if self.iface == 'wlan0':
371                                 from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
372                                 ifobj = Wireless(self.iface) # a Wireless NIC Object
373                                 self.wlanresponse = ifobj.getStatistics()
374                                 if self.wlanresponse[0] != 19: # Wlan Interface found.
375                                         self.session.open(AdapterSetup,self.iface)
376                                 else:
377                                         # Display Wlan not available Message
378                                         self.showErrorMessage()
379                         else:
380                                 self.session.open(AdapterSetup,self.iface)
381                 if self["menulist"].getCurrent()[1] == 'test':
382                         self.session.open(NetworkAdapterTest,self.iface)
383                 if self["menulist"].getCurrent()[1] == 'dns':
384                         self.session.open(NameserverSetup)
385                 if self["menulist"].getCurrent()[1] == 'scanwlan':
386                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
387                         ifobj = Wireless(self.iface) # a Wireless NIC Object
388                         self.wlanresponse = ifobj.getStatistics()
389                         if self.wlanresponse[0] != 19:
390                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanScan
391                                 self.session.open(WlanScan,self.iface)
392                         else:
393                                 # Display Wlan not available Message
394                                 self.showErrorMessage()
395                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
396                         from Plugins.SystemPlugins.WirelessLan.iwlibs import Wireless
397                         ifobj = Wireless(self.iface) # a Wireless NIC Object
398                         self.wlanresponse = ifobj.getStatistics()
399                         if self.wlanresponse[0] != 19:
400                                 from Plugins.SystemPlugins.WirelessLan.plugin import WlanStatus
401                                 self.session.open(WlanStatus,self.iface)
402                         else:
403                                 # Display Wlan not available Message
404                                 self.showErrorMessage()
405                 if self["menulist"].getCurrent()[1] == 'lanrestart':
406                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
407                 if self["menulist"].getCurrent()[1] == 'enablewlan':
408                         self.session.openWithCallback(self.enableWlan, MessageBox, _("Are you sure you want to enable WLAN support?\nConnect your Wlan USB Stick to your Dreambox and press OK.\n\n") )
409                 if self["menulist"].getCurrent()[1] == 'enablelan':
410                         self.session.openWithCallback(self.enableLan, MessageBox, (_("Are you sure you want to enable your local network?\n\n") + self.oktext ) )
411                 if self["menulist"].getCurrent()[1] == 'openwizard':
412                         from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
413                         self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard)
414         
415         def up(self):
416                 self["menulist"].up()
417                 self.loadDescription()
418
419         def down(self):
420                 self["menulist"].down()
421                 self.loadDescription()
422
423         def left(self):
424                 self["menulist"].pageUp()
425                 self.loadDescription()
426
427         def right(self):
428                 self["menulist"].pageDown()
429                 self.loadDescription()
430
431         def layoutFinished(self):
432                 idx = 0
433                 self["menulist"].moveToIndex(idx)
434                 self.loadDescription()
435
436         def loadDescription(self):
437                 if self["menulist"].getCurrent()[1] == 'edit':
438                         self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext )
439                 if self["menulist"].getCurrent()[1] == 'test':
440                         self["description"].setText(_("Test the network configuration of your Dreambox.\n" ) + self.oktext )
441                 if self["menulist"].getCurrent()[1] == 'enablelan':
442                         self["description"].setText(_("Enable the local network of your Dreambox.\n\n" ) + self.oktext )
443                 if self["menulist"].getCurrent()[1] == 'dns':
444                         self["description"].setText(_("Edit the Nameserver configuration of your Dreambox.\n" ) + self.oktext )
445                 if self["menulist"].getCurrent()[1] == 'scanwlan':
446                         self["description"].setText(_("Scan your network for wireless Access Points and connect to them using your WLAN USB Stick\n" ) + self.oktext )
447                 if self["menulist"].getCurrent()[1] == 'wlanstatus':
448                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
449                 if self["menulist"].getCurrent()[1] == 'lanrestart':
450                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
451                 if self["menulist"].getCurrent()[1] == 'enablewlan':
452                         self["description"].setText(_("Pressing OK enables the built in wireless LAN support of your Dreambox.\nWlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are supported.\nConnect your Wlan USB Stick to your Dreambox before pressing OK.\n\n" ) + self.reboottext )
453                 if self["menulist"].getCurrent()[1] == 'openwizard':
454                         self["description"].setText(_("Use the Networkwizard to configure your Network\n" ) + self.oktext )
455
456
457         def updateStatusbar(self):
458                 self["IFtext"].setText(_("Network:"))
459                 self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
460                 self["Statustext"].setText(_("Link:"))
461
462                 if self.iface == 'wlan0':
463                         try:
464                                 from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan, WlanList, wpaSupplicant
465                                 w = Wlan(self.iface)
466                                 stats = w.getStatus()
467                                 if stats['BSSID'] == "00:00:00:00:00:00":
468                                         self["statuspic_active"].hide()
469                                         self["statuspic_inactive"].show()
470                                 else:
471                                         self["statuspic_active"].show()
472                                         self["statuspic_inactive"].hide()
473                         except:
474                                         self["statuspic_active"].hide()
475                                         self["statuspic_inactive"].show()
476                 else:
477                         self.getLinkState(self.iface)
478                 
479         def doNothing(self):
480                 pass
481
482         def genMainMenu(self):
483                 menu = []
484                 menu.append((_("Adapter settings"), "edit"))
485                 menu.append((_("Nameserver settings"), "dns"))
486                 menu.append((_("Network test"), "test"))
487                 menu.append((_("Restart network"), "lanrestart"))
488                 
489                 self.extended = None
490                 self.extendedSetup = None
491                 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
492                         callFnc = p.__call__["ifaceSupported"](self.iface)
493                         if callFnc is not None:
494                                 menu.append((_("Scan Wireless Networks"), "scanwlan"))
495                                 menu.append((_("Show WLAN Status"), "wlanstatus"))
496                                 menu.append((_("Enable LAN"), "enablelan"))
497                         if callFnc is None and iNetwork.ifaces.has_key('wlan0') is False:
498                                 menu.append((_("Enable WLAN"), "enablewlan"))
499                         if callFnc is None and iNetwork.ifaces.has_key('wlan0') is True:
500                                 menu.append((_("Enable LAN"), "enablelan"))
501                                 
502                 if os.path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
503                         menu.append((_("NetworkWizard"), "openwizard"));
504                 return menu
505
506         def AdapterSetupClosed(self, *ret):
507                 self.mainmenu = self.genMainMenu()
508                 self["menulist"].l.setList(self.mainmenu)
509         
510         def enableWlan(self, ret = False):
511                 if (ret == True):
512                         iNetwork.resetNetworkConfig('wlan')
513                         iNetwork.getInterfaces()
514                         if iNetwork.getAdapterAttribute('wlan0', 'up') is True:
515                                 self.iface = 'wlan0'
516                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, 'wlan0')
517                         else:
518                                 self.session.openWithCallback(self.restartDreambox, MessageBox, _("Your wireless LAN Adapter could not be startet.\nDo you want to reboot your Dreambox to apply the new configuration?\n"))
519
520         
521         def enableLan(self, ret = False):
522                 if (ret == True):
523                         iNetwork.resetNetworkConfig('lan')
524                         iNetwork.getInterfaces()
525                         if iNetwork.getAdapterAttribute('eth0', 'up') is True:
526                                 self.iface = 'eth0'
527                                 self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, 'eth0')
528                         else:
529                                 self.session.openWithCallback(self.restartDreambox, MessageBox, _("Your local LAN Adapter could not be startet.\nDo you want to reboot your Dreambox to apply the new configuration?\n"))
530
531
532         def restartLan(self, ret = False):
533                 if (ret == True):
534                         iNetwork.restartNetwork()
535
536         def restartDreambox(self, ret = False):
537                 if (ret == True):
538                         TryQuitMainloop(self.session,2)
539
540
541         def getLinkState(self,iface):
542                 iNetwork.getLinkState(iface,self.dataAvail)
543
544         def dataAvail(self,data):
545                 self.output = data.strip()
546                 result = self.output.split('\n')
547                 pattern = re.compile("Link detected: yes")
548                 for item in result:
549                         if re.search(pattern, item):
550                                 self["statuspic_active"].show()
551                                 self["statuspic_inactive"].hide()
552                         else:
553                                 self["statuspic_active"].hide()
554                                 self["statuspic_inactive"].show()
555         
556         def showErrorMessage(self):
557                 self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 )
558
559
560 class NetworkAdapterTest(Screen):       
561
562         def __init__(self, session,iface):
563                 Screen.__init__(self, session)
564                 self.iface = iface
565                 iNetwork.getInterfaces()
566                 self.setLabels()
567         
568                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
569                 {
570                         "ok": self.KeyOK,
571                         "blue": self.KeyOK,
572                         "up": lambda: self.updownhandler('up'),
573                         "down": lambda: self.updownhandler('down'),
574         
575                 }, -2)
576
577                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
578                 {
579                         "red": self.close,
580                         "back": self.close,
581                 }, -2)
582                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
583                 {
584                         "red": self.closeInfo,
585                         "back": self.closeInfo,
586                 }, -2)
587                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
588                 {
589                         "green": self.KeyGreen,
590                 }, -2)
591                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
592                 {
593                         "green": self.KeyGreenRestart,
594                 }, -2)
595                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
596                 {
597                         "yellow": self.KeyYellow,
598                 }, -2)
599
600                 self["shortcutsgreen_restart"].setEnabled(False)
601                 self["updown_actions"].setEnabled(False)
602                 self["infoshortcuts"].setEnabled(False)
603                 self.onClose.append(self.delTimer)      
604                 self.onLayoutFinish.append(self.layoutFinished)
605                 self.steptimer = False
606                 global nextstep
607                 nextstep = 0
608                 global activebutton
609                 activebutton = 0                
610                 self.nextStepTimer = eTimer()
611                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
612
613         def closeInfo(self):
614                 self["shortcuts"].setEnabled(True)              
615                 self["infoshortcuts"].setEnabled(False)
616                 self["InfoText"].hide()
617                 self["InfoTextBorder"].hide()
618                 self["ButtonRedtext"].setText(_("Close"))
619                 
620         def delTimer(self):
621                 del self.steptimer
622                 del self.nextStepTimer
623
624         def nextStepTimerFire(self):
625                 global nextstep
626                 self.nextstep= nextstep
627                 self.nextStepTimer.stop()
628                 self.steptimer = False
629                 self.runTest(self.nextstep)
630
631         def updownhandler(self,direction):
632                 global activebutton
633                 if direction == 'up':
634                         if activebutton >=2:
635                                 activebutton = activebutton -1
636                         self.setActiveButton(activebutton)
637                 if direction == 'down':
638                         if activebutton <=5:
639                                 activebutton = activebutton +1
640                         self.setActiveButton(activebutton)
641
642         def setActiveButton(self,button):
643                 if button == 1:
644                         self["NetworkInfo"].show()
645                         self["NetworkInfo_selected"].hide()
646                         self["AdapterInfo"].hide()
647                         self["AdapterInfo_selected"].show()
648                 if button == 2:
649                         self["AdapterInfo"].show()
650                         self["AdapterInfo_selected"].hide()
651                         self["DhcpInfo"].show()
652                         self["DhcpInfo_selected"].hide()
653                         self["NetworkInfo"].hide()
654                         self["NetworkInfo_selected"].show()             
655                 if button == 3:
656                         self["NetworkInfo"].show()
657                         self["NetworkInfo_selected"].hide()
658                         self["IPInfo"].show()
659                         self["IPInfo_selected"].hide()
660                         self["DhcpInfo"].hide()
661                         self["DhcpInfo_selected"].show()
662                 if button == 4:
663                         self["DhcpInfo"].show()
664                         self["DhcpInfo_selected"].hide()
665                         self["DNSInfo"].show()
666                         self["DNSInfo_selected"].hide()
667                         self["IPInfo"].hide()
668                         self["IPInfo_selected"].show()
669                 if button == 5:
670                         self["IPInfo"].show()
671                         self["IPInfo_selected"].hide()
672                         self["EditSettingsButton"].show()
673                         self["EditSettingsButton_selected"].hide()
674                         self["DNSInfo"].hide()
675                         self["DNSInfo_selected"].show()
676                 if button == 6:
677                         self["DNSInfo"].show()
678                         self["DNSInfo_selected"].hide()
679                         self["EditSettingsButton"].hide()
680                         self["EditSettingsButton_selected"].show()
681                         
682         def runTest(self,next):
683                 global nextstep
684                 if next == 0:
685                         nextstep = next + 1
686                         self.doStep1()
687                 if next == 1:
688                         nextstep = next + 1
689                         self.doStep2()          
690                 if next == 2:
691                         nextstep = next + 1
692                         self.doStep3()
693                 if next == 3:
694                         nextstep = next + 1
695                         self.doStep4()
696                 if next == 4:
697                         nextstep = next + 1
698                         self.doStep5()
699                 if next == 5:
700                         nextstep = next + 1
701                         self.doStep6()                  
702                 
703         def doStep1(self):
704                 self.steptimer = True
705                 self.nextStepTimer.start(3000)
706
707         def doStep2(self):
708                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
709                 self["Adapter"].instance.setForegroundColor(getColor(Green))
710                 self["AdapterInfo_Text"].instance.setForegroundColor(getColor(Black))
711                 self["AdapterInfo_OK"].show()           
712                 self.steptimer = True
713                 self.nextStepTimer.start(3000)          
714
715         def doStep3(self):
716                 self.getLinkState(self.iface)
717                 self["NetworkInfo_Text"].instance.setForegroundColor(getColor(Black))
718                 self.steptimer = True
719                 self.nextStepTimer.start(3000)                  
720
721         def doStep4(self):
722                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
723                         self["Dhcp"].instance.setForegroundColor(getColor(Green))
724                         self["Dhcp"].setText(_("enabled"))
725                         self["DhcpInfo_OK"].show()
726                         self["DhcpInfo_NOK"].hide()
727                 else:
728                         self["Dhcp"].instance.setForegroundColor(getColor(Grey))
729                         self["Dhcp"].setText(_("disabled"))             
730                         self["DhcpInfo_NOK"].show()
731                         self["DhcpInfo_OK"].hide()
732                 self["DhcpInfo_Text"].instance.setForegroundColor(getColor(Black))      
733                 self.steptimer = True
734                 self.nextStepTimer.start(3000)
735
736         def doStep5(self):
737                 ret = iNetwork.checkNetworkState()
738                 if ret == True:
739                         self["IP"].instance.setForegroundColor(getColor(Green))
740                         self["IP"].setText(_("confirmed"))
741                         self["IPInfo_OK"].show()
742                         self["IPInfo_NOK"].hide()
743                 else:
744                         self["IP"].instance.setForegroundColor(getColor(Grey))
745                         self["IP"].setText(_("unconfirmed"))                    
746                         self["IPInfo_NOK"].show()
747                         self["IPInfo_OK"].hide()
748                 self["IPInfo_Text"].instance.setForegroundColor(getColor(Black))        
749                 self.steptimer = True
750                 self.nextStepTimer.start(3000)
751
752         def doStep6(self):
753                 self.steptimer = False
754                 self.nextStepTimer.stop()
755                 if len (iNetwork.getNameserverList()) != 0:
756                         self["DNS"].instance.setForegroundColor(getColor(Green))
757                         self["DNS"].setText(_("confirmed"))
758                         self["DNSInfo_OK"].show()
759                         self["DNSInfo_NOK"].hide()
760                 else:
761                         self["DNS"].instance.setForegroundColor(getColor(Grey))
762                         self["DNS"].setText(_("unconfirmed"))
763                         self["DNSInfo_NOK"].show()
764                         self["DNSInfo_OK"].hide()
765                         
766                 self["DNSInfo_Text"].instance.setForegroundColor(getColor(Black))
767                 self["EditSettings_Text"].show()
768                 self["EditSettingsButton_selected"].show()
769                 self["ButtonYellow_off"].show()
770                 self["ButtonYellow"].hide()
771                 self["ButtonGreentext"].setText(_("Restart test"))
772                 self["ButtonGreen"].show()              
773                 self["ButtonGreen_off"].hide()
774                 self["shortcutsgreen"].setEnabled(False)
775                 self["shortcutsgreen_restart"].setEnabled(True)
776                 self["shortcutsyellow"].setEnabled(False)
777                 self["updown_actions"].setEnabled(True)
778                 global activebutton
779                 activebutton = 6
780                 
781         def KeyGreen(self):
782                 self["shortcutsgreen"].setEnabled(False)
783                 self["shortcutsyellow"].setEnabled(True)
784                 self["updown_actions"].setEnabled(False)
785                 self["ButtonYellow_off"].hide()
786                 self["ButtonYellow"].show()
787                 self["ButtonGreen"].hide()              
788                 self["ButtonGreen_off"].show()
789                 self.steptimer = True
790                 self.nextStepTimer.start(1000)
791
792         def KeyGreenRestart(self):
793                 global nextstep
794                 nextstep = 0            
795                 self.layoutFinished()
796                 self["Adapter"].setText((""))
797                 self["Network"].setText((""))
798                 self["Dhcp"].setText((""))
799                 self["IP"].setText((""))
800                 self["DNS"].setText((""))
801                 self["AdapterInfo_Text"].instance.setForegroundColor(getColor(Grey))
802                 self["NetworkInfo_Text"].instance.setForegroundColor(getColor(Grey))
803                 self["DhcpInfo_Text"].instance.setForegroundColor(getColor(Grey))
804                 self["IPInfo_Text"].instance.setForegroundColor(getColor(Grey))
805                 self["DNSInfo_Text"].instance.setForegroundColor(getColor(Grey))
806                 self["shortcutsgreen_restart"].setEnabled(False)
807                 self["shortcutsgreen"].setEnabled(False)
808                 self["shortcutsyellow"].setEnabled(True)
809                 self["updown_actions"].setEnabled(False)
810                 self["ButtonYellow_off"].hide()
811                 self["ButtonYellow"].show()
812                 self["ButtonGreen"].hide()              
813                 self["ButtonGreen_off"].show()
814                 self.steptimer = True
815                 self.nextStepTimer.start(1000)
816                 
817         def KeyOK(self):
818                 global activebutton
819                 self["infoshortcuts"].setEnabled(True)
820                 self["shortcuts"].setEnabled(False)
821                 if activebutton == 1: # Adapter Check
822                         self["InfoText"].setText(_("This test detects your configured LAN-Adapter."))
823                         self["InfoTextBorder"].show()
824                         self["InfoText"].show()
825                         self["ButtonRedtext"].setText(_("Back"))
826                 if activebutton == 2: #LAN Check
827                         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"))
828                         self["InfoTextBorder"].show()
829                         self["InfoText"].show()
830                         self["ButtonRedtext"].setText(_("Back"))
831                 if activebutton == 3: #DHCP Check
832                         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."))
833                         self["InfoTextBorder"].show()
834                         self["InfoText"].show()
835                         self["ButtonRedtext"].setText(_("Back"))
836                 if activebutton == 4: # IP Check
837                         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"))
838                         self["InfoTextBorder"].show()
839                         self["InfoText"].show()
840                         self["ButtonRedtext"].setText(_("Back"))
841                 if activebutton == 5: # DNS Check
842                         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"))
843                         self["InfoTextBorder"].show()
844                         self["InfoText"].show()
845                         self["ButtonRedtext"].setText(_("Back"))
846                 if activebutton == 6: # Edit Settings
847                         self.session.open(AdapterSetup,self.iface)
848
849         def KeyYellow(self):
850                 global nextstep
851                 nextstep = 0
852                 self["shortcutsgreen_restart"].setEnabled(True)
853                 self["shortcutsgreen"].setEnabled(False)
854                 self["shortcutsyellow"].setEnabled(False)
855                 self["ButtonGreentext"].setText(_("Restart test"))
856                 self["ButtonYellow_off"].show()
857                 self["ButtonYellow"].hide()
858                 self["ButtonGreen"].show()              
859                 self["ButtonGreen_off"].hide()
860                 self.steptimer = False
861                 self.nextStepTimer.stop()
862                 
863         def layoutFinished(self):
864                 self["shortcutsyellow"].setEnabled(False)
865                 self["AdapterInfo_selected"].hide()
866                 self["AdapterInfo_OK"].hide()
867                 
868                 self["NetworkInfo_selected"].hide()
869                 self["NetworkInfo_OK"].hide()
870                 self["NetworkInfo_NOK"].hide()
871                 
872                 self["DhcpInfo_selected"].hide()
873                 self["DhcpInfo_OK"].hide()
874                 self["DhcpInfo_NOK"].hide()
875                 
876                 self["IPInfo_selected"].hide()
877                 self["IPInfo_OK"].hide()
878                 self["IPInfo_NOK"].hide()
879                 
880                 self["DNSInfo_selected"].hide()
881                 self["DNSInfo_OK"].hide()
882                 self["DNSInfo_NOK"].hide()
883                 
884                 self["EditSettings_Text"].hide()
885                 self["EditSettingsButton"].hide()
886                 self["EditSettingsButton_selected"].hide()
887                 self["ButtonYellow"].hide()
888                 self["ButtonGreen_off"].hide()
889                 self["InfoText"].hide()
890                 self["InfoTextBorder"].hide()
891                 
892         def setLabels(self):
893                 self["Adaptertext"] = Label(_("LAN Adapter"))
894                 self["Adapter"] = Label()
895                 self["AdapterInfo"] = Pixmap()
896                 self["AdapterInfo_selected"] = Pixmap()
897                 self["AdapterInfo_Text"] = Label(_("Show Info"))
898                 self["AdapterInfo_OK"] = Pixmap()
899                 
900                 if self.iface == 'wlan0':
901                         self["Networktext"] = Label(_("Wireless Network"))
902                 else:
903                         self["Networktext"] = Label(_("Local Network"))
904                 
905                 self["Network"] = Label()
906                 self["NetworkInfo"] = Pixmap()
907                 self["NetworkInfo_selected"] = Pixmap()
908                 self["NetworkInfo_Text"] = Label(_("Show Info"))
909                 self["NetworkInfo_OK"] = Pixmap()
910                 self["NetworkInfo_NOK"] = Pixmap()
911                 
912                 self["Dhcptext"] = Label(_("DHCP"))
913                 self["Dhcp"] = Label()
914                 self["DhcpInfo"] = Pixmap()
915                 self["DhcpInfo_selected"] = Pixmap()
916                 self["DhcpInfo_Text"] = Label(_("Show Info"))
917                 self["DhcpInfo_OK"] = Pixmap()
918                 self["DhcpInfo_NOK"] = Pixmap()
919                 
920                 self["IPtext"] = Label(_("IP Address"))
921                 self["IP"] = Label()
922                 self["IPInfo"] = Pixmap()
923                 self["IPInfo_selected"] = Pixmap()
924                 self["IPInfo_Text"] = Label(_("Show Info"))
925                 self["IPInfo_OK"] = Pixmap()
926                 self["IPInfo_NOK"] = Pixmap()
927                 
928                 self["DNStext"] = Label(_("Nameserver"))
929                 self["DNS"] = Label()
930                 self["DNSInfo"] = Pixmap()
931                 self["DNSInfo_selected"] = Pixmap()
932                 self["DNSInfo_Text"] = Label(_("Show Info"))
933                 self["DNSInfo_OK"] = Pixmap()
934                 self["DNSInfo_NOK"] = Pixmap()
935                 
936                 self["EditSettings_Text"] = Label(_("Edit settings"))           
937                 self["EditSettingsButton"] = Pixmap()
938                 self["EditSettingsButton_selected"] = Pixmap()
939                 
940                 self["ButtonRedtext"] = Label(_("Close"))
941                 self["ButtonRed"] = Pixmap()
942                 self["ButtonGreentext"] = Label(_("Start test"))
943                 self["ButtonGreen"] = Pixmap()
944                 self["ButtonGreen_off"] = Pixmap()
945                 self["ButtonYellowtext"] = Label(_("Stop test"))
946                 self["ButtonYellow"] = Pixmap()         
947                 self["ButtonYellow_off"] = Pixmap()
948                 
949                 self["InfoTextBorder"] = Pixmap()
950                 self["InfoText"] = Label()
951
952         def getLinkState(self,iface):
953                 if iface == 'wlan0':
954                         try:
955                                 from Plugins.SystemPlugins.WirelessLan.Wlan import Wlan
956                                 w = Wlan(iface)
957                                 stats = w.getStatus()
958                                 if stats['BSSID'] == "00:00:00:00:00:00":
959                                         self["Network"].instance.setForegroundColor(getColor(Grey))
960                                         self["Network"].setText(_("disconnected"))
961                                         self["NetworkInfo_OK"].hide()
962                                         self["NetworkInfo_NOK"].show()
963                                 else:
964                                         self["Network"].instance.setForegroundColor(getColor(Green))
965                                         self["Network"].setText(_("connected"))
966                                         self["NetworkInfo_OK"].show()
967                                         self["NetworkInfo_NOK"].hide()
968                         except:
969                                         self["Network"].instance.setForegroundColor(getColor(Grey))
970                                         self["Network"].setText(_("disconnected"))
971                                         self["NetworkInfo_OK"].hide()
972                                         self["NetworkInfo_NOK"].show()                          
973                 else:
974                         iNetwork.getLinkState(iface,self.dataAvail)
975
976         def dataAvail(self,data):
977                 self.output = data.strip()
978                 result = self.output.split('\n')
979                 pattern = re.compile("Link detected: yes")
980                 for item in result:
981                         if re.search(pattern, item):
982                                 self["Network"].instance.setForegroundColor(getColor(Green))
983                                 self["Network"].setText(_("connected"))
984                                 self["NetworkInfo_OK"].show()
985                                 self["NetworkInfo_NOK"].hide()
986                         else:
987                                 self["Network"].instance.setForegroundColor(getColor(Grey))
988                                 self["Network"].setText(_("disconnected"))
989                                 self["NetworkInfo_OK"].hide()
990                                 self["NetworkInfo_NOK"].show()
991
992