Enigma2-{Network,NetworkWizard,WirelessLan}: more work on wireless lan / networking...
authorMladen Horvat <acid-burn@opendreambox.org>
Wed, 13 Apr 2011 14:23:09 +0000 (16:23 +0200)
committerMladen Horvat <acid-burn@opendreambox.org>
Wed, 13 Apr 2011 14:23:09 +0000 (16:23 +0200)
fixes #725

lib/python/Components/Network.py
lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py
lib/python/Plugins/SystemPlugins/NetworkWizard/networkwizard.xml
lib/python/Plugins/SystemPlugins/WirelessLan/Wlan.py
lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py
lib/python/Screens/NetworkSetup.py

index f38ee515382de5cb1b831b45a4a1f46daf623912..68f980174f84edc0e0ba0419f77a9b3d6b867386 100755 (executable)
@@ -541,7 +541,7 @@ class Network:
                def buildCommands(iface):
                        commands.append("ifdown " + iface)
                        commands.append("ip addr flush dev " + iface)
-                       # HACK: wpa_supplicant sometimes doesn't quit properly on SIGTERM
+                       #wpa_supplicant sometimes doesn't quit properly on SIGTERM
                        if os_path.exists('/var/run/wpa_supplicant/'+ iface):
                                commands.append("wpa_cli -i" + iface + " terminate")
                        
@@ -558,16 +558,35 @@ class Network:
                                        callback(True)
                                return
                        buildCommands(ifaces)
-               self.deactivateInterfaceConsole.eBatch(commands, self.deactivateInterfaceFinished, callback, debug=True)
+               self.deactivateInterfaceConsole.eBatch(commands, self.deactivateInterfaceFinished, [ifaces,callback], debug=True)
 
        def deactivateInterfaceFinished(self,extra_args):
-               callback = extra_args
+               (ifaces, callback) = extra_args
+               def checkCommandResult(iface):
+                       if self.deactivateInterfaceConsole and self.deactivateInterfaceConsole.appResults.has_key("ifdown " + iface):
+                               result = str(self.deactivateInterfaceConsole.appResults.get("ifdown " + iface)).strip("\n")
+                               if result == "ifdown: interface " + iface + " not configured":
+                                       return False
+                               else:
+                                       return True
+               #ifdown sometimes can't get the interface down.
+               if isinstance(ifaces, (list, tuple)):
+                       for iface in ifaces:
+                               if checkCommandResult(iface) is False:
+                                       Console().ePopen(("ifconfig " + iface + " down" ))
+               else:
+                       if checkCommandResult(ifaces) is False:
+                               Console().ePopen(("ifconfig " + ifaces + " down" ))
+
                if self.deactivateInterfaceConsole:
                        if len(self.deactivateInterfaceConsole.appContainers) == 0:
                                if callback is not None:
                                        callback(True)
 
        def activateInterface(self,iface,callback = None):
+               if self.config_ready:
+                       self.config_ready = False
+                       self.msgPlugins()
                if iface == 'eth0' and self.onRemoteRootFS():
                        if callback is not None:
                                callback(True)
@@ -576,7 +595,7 @@ class Network:
                        self.activateInterfaceConsole = Console()
                commands = []
                commands.append("ifup " + iface)
-               self.deactivateInterfaceConsole.eBatch(commands, self.activateInterfaceFinished, callback, debug=True)
+               self.activateInterfaceConsole.eBatch(commands, self.activateInterfaceFinished, callback, debug=True)
 
        def activateInterfaceFinished(self,extra_args):
                callback = extra_args
index 9f2540665da857bf931d8c58641eefebfe164178..cb954bb23b7bfdd00e8fec6efce8cb91260ee572 100755 (executable)
@@ -57,7 +57,6 @@ class NetworkWizard(WizardLanguage, Rc):
                self.AdapterRef = None
                self.APList = None
                self.newAPlist = None
-               self.WlanList = None
                self.oldlist = None
                
                self.originalInterfaceState = {}
@@ -79,6 +78,11 @@ class NetworkWizard(WizardLanguage, Rc):
                self.checkOldInterfaceState()
                pass
 
+       def back(self):
+               self.stopScan()
+               self.ap = None
+               WizardLanguage.back(self)
+               
        def stopScan(self):
                self.rescanTimer.stop()
                if self.w is not None:
@@ -88,7 +92,6 @@ class NetworkWizard(WizardLanguage, Rc):
 
        def getInstalledInterfaceCount(self):
                self.originalInterfaceState = {}
-               self.stopScan()
                self.Adapterlist = iNetwork.getAdapterList()
                self.InstalledInterfaceCount = len(self.Adapterlist)
                if self.Adapterlist is not None:
@@ -105,7 +108,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                if not iNetwork.isWirelessInterface(self.selectedInterface):
                                        self.NextStep = 'nwconfig'
                                else:
-                                       self.NextStep = 'scanwlan'
+                                       self.NextStep = 'asknetworktype'
                                self.checkInterface(self.selectedInterface)
                        else:
                                self.NextStep = 'selectinterface'
@@ -115,19 +118,19 @@ class NetworkWizard(WizardLanguage, Rc):
                        if not iNetwork.isWirelessInterface(self.selectedInterface):
                                self.NextStep = 'nwconfig'
                        else:
-                               self.NextStep = 'scanwlan'
+                               self.NextStep = 'asknetworktype'
                        self.checkInterface(self.selectedInterface)
 
        def checkOldInterfaceState(self):
                # disable up interface if it was originally down and config is unchanged.
                if self.originalInterfaceStateChanged is False:
                        for interface in self.originalInterfaceState.keys():
-                               if self.originalInterfaceState[interface]["up"] is False:
-                                       if iNetwork.checkforInterface(interface) is True:
-                                               system("ifconfig " + interface + " down")
+                               if interface == self.selectedInterface:
+                                       if self.originalInterfaceState[interface]["up"] is False:
+                                               if iNetwork.checkforInterface(interface) is True:
+                                                       system("ifconfig " + interface + " down")
 
        def listInterfaces(self):
-               self.stopScan()
                self.checkOldInterfaceState()
                list = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
                list.append((_("Exit network wizard"), "end"))
@@ -143,7 +146,7 @@ class NetworkWizard(WizardLanguage, Rc):
                elif index == 'eth0':
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def InterfaceSelectionMoved(self):
                self.InterfaceSelect(self.selection)
@@ -229,7 +232,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        if data is True:
                                if status is not None:
                                        text1 = _("Your Dreambox is now ready to use.\n\nYour internet connection is working now.\n\n")
-                                       text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["acesspoint"]) + "\n"
+                                       text2 = _('Accesspoint:') + "\t" + str(status[self.selectedInterface]["accesspoint"]) + "\n"
                                        text3 = _('SSID:') + "\t" + str(status[self.selectedInterface]["essid"]) + "\n"
                                        text4 = _('Link Quality:') + "\t" + str(status[self.selectedInterface]["quality"])+ "\n"
                                        text5 = _('Signal Strength:') + "\t" + str(status[self.selectedInterface]["signal"]) + "\n"
@@ -239,7 +242,7 @@ class NetworkWizard(WizardLanguage, Rc):
                                        infotext = text1 + text2 + text3 + text4 + text5 + text7 +"\n" + text8
                                        self.currStep = self.getStepWithID("checkWlanstatusend")
                                        self.Text = infotext
-                                       if str(status[self.selectedInterface]["acesspoint"]) == "Not-Associated":
+                                       if str(status[self.selectedInterface]["accesspoint"]) == "Not-Associated":
                                                self.InterfaceState = False
                                        self.afterAsyncCode()
 
@@ -284,42 +287,32 @@ class NetworkWizard(WizardLanguage, Rc):
                                newList.append(oldentry)
                                
                for newentry in newList:
-                       if newentry[1] == "<hidden>":
-                               continue
                        self.newAPlist.append(newentry)
-               
-               if len(self.newAPlist):
-                       if "<hidden>" not in self.newAPlist:
-                               self.newAPlist.append(( _("enter hidden network SSID"), "<hidden>" ))
 
+               if len(self.newAPlist):
                        if (self.wizard[self.currStep].has_key("dynamiclist")):
                                currentListEntry = self["list"].getCurrent()
-                               idx = 0
-                               for entry in self.newAPlist:
-                                       if entry == currentListEntry:
-                                               newListIndex = idx
-                                       idx +=1
+                               if currentListEntry is not None:
+                                       idx = 0
+                                       for entry in self.newAPlist:
+                                               if entry == currentListEntry:
+                                                       newListIndex = idx
+                                               idx +=1
                                self.wizard[self.currStep]["evaluatedlist"] = self.newAPlist
                                self['list'].setList(self.newAPlist)
-                               self["list"].setIndex(newListIndex)
+                               if newListIndex is not None:
+                                       self["list"].setIndex(newListIndex)
                                self["list"].updateList(self.newAPlist)
 
        def listAccessPoints(self):
                self.APList = []
                if self.WlanPluginInstalled is False:
-                       self.APList.append( ( _("No networks found"),_("unavailable") ) )
-                       return self.APList
+                       self.APList.append( ( _("No networks found"), None ) )
                else:
-                       try:
-                               from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
-                               iWlan.setInterface(self.selectedInterface)
-                               self.w = iWlan.getInterface()
-                               aps = iWlan.getNetworkList()
-                       except ValueError:
-                               self.APList = []
-                               self.APList.append( ( _("No networks found"),_("unavailable") ) )
-                               return self.APList
-
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import iWlan
+                       iWlan.setInterface(self.selectedInterface)
+                       self.w = iWlan.getInterface()
+                       aps = iWlan.getNetworkList()
                        if aps is not None:
                                print "[NetworkWizard.py] got Accespoints!"
                                tmplist = []
@@ -337,28 +330,16 @@ class NetworkWizard(WizardLanguage, Rc):
                                                                complist.remove(compentry)
                                for entry in complist:
                                        self.APList.append( (entry[1], entry[1]) )
-
-                       if "<hidden>" not in self.APList:
-                               self.APList.append(( _("enter hidden network SSID"), "<hidden>" ))
+                       if not len(aps):
+                               self.APList.append( ( _("No networks found"), None ) )
                        
-                       self.rescanTimer.start(5000)
-                       return self.APList
+               self.rescanTimer.start(4000)
+               return self.APList
 
-       def AccessPointsSelectionMade(self, index):
-               self.ap = index
-               self.WlanList = []
-               if (self.wizard[self.currStep].has_key("dynamiclist")):
-                       for entry in self['list'].list:
-                               if entry[1] == "<hidden>":
-                                       continue
-                               self.WlanList.append( (entry[1], entry[0]) )
-               self.AccessPointsSelect(index)
-
-       def AccessPointsSelect(self, index):
-               self.NextStep = 'wlanconfig'
 
        def AccessPointsSelectionMoved(self):
-               self.AccessPointsSelect(self.selection)
+               self.ap = self.selection
+               self.NextStep = 'wlanconfig'
 
        def checkWlanSelection(self):
                self.stopScan()
@@ -391,7 +372,7 @@ class NetworkWizard(WizardLanguage, Rc):
                        self.selectedInterface = "eth0"
                        self.NextStep = 'nwconfig'
                else:
-                       self.NextStep = 'scanwlan'
+                       self.NextStep = 'asknetworktype'
 
        def ChoicesSelectionMoved(self):
                pass
index c4300436e4b71bef08170c306d05405aa4b38150..0b3a2988e1d78f0426e79aa0427432d5ffaf7775 100755 (executable)
@@ -87,13 +87,33 @@ self.selectKey("DOWN")
                         <listentry caption="Exit network wizard" step="end" />
                 </list>
         </step>
+
+        <step id="asknetworktype">
+               <condition>
+self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
+               </condition>
+                <text value="Wireless network connection setup." />
+                <displaytext value="Wireless network connection setup" />
+                <code>
+self.clearSelectedKeys()
+self.selectKey("OK")
+self.selectKey("UP")
+self.selectKey("DOWN")
+                </code>
+                <list>
+                        <listentry caption="List available networks" step="scanwlan" />
+                        <listentry caption="Manual configuration" step="wlanconfig" />
+                        <listentry caption="Exit network wizard" step="end" />
+                </list>
+        </step>
+
         <step id="scanwlan">
                <condition>
 self.condition = (self.isInterfaceUp == True and self.WlanPluginInstalled == True)
                 </condition>
                 <text value="Please select the wireless network that you want to connect to.\n\nPlease press OK to continue." />
                 <displaytext value="Select wireless network" />
-                <list type="dynamic" source="listAccessPoints" evaluation="AccessPointsSelectionMade" onselect="AccessPointsSelectionMoved" />
+                <list type="dynamic" source="listAccessPoints" onselect="AccessPointsSelectionMoved" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -138,7 +158,7 @@ self.selectKey("DOWN")
         <step id="wlanconfig">
                 <text value="Please configure your internet connection by filling out the required values.\nWhen you are ready press OK to continue." />
                 <displaytext value="Configure interface" />
-                <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap,self.WlanList)" type="ConfigList" />
+                <config screen="AdapterSetup" module="NetworkSetup" args="(self.selectedInterface,self.ap)" type="ConfigList" />
                 <code>
 self.clearSelectedKeys()
 self.selectKey("OK")
@@ -196,4 +216,3 @@ self.selectKey("OK")
         </step>
 </wizard>
 
-
index 4a7b1e88c6a10426807fbb89e1e446bd3780cd51..a1851579de30c38e7b393edd64a752124d05db77 100755 (executable)
@@ -6,29 +6,28 @@ from os import system, path as os_path
 from string import maketrans, strip
 import sys
 import types
-from re import compile as re_compile, search as re_search
+from re import compile as re_compile, search as re_search, escape as re_escape
 from pythonwifi.iwlibs import getNICnames, Wireless, Iwfreq, getWNICnames
 from pythonwifi import flags as wififlags
 
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
 config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = True))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2"))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
 
 def getWlanConfigName(iface):
        return '/etc/wpa_supplicant.' + iface + '.conf'
@@ -74,10 +73,9 @@ class Wlan:
                        scanresults = ifobj.scan()
                except:
                        scanresults = None
-                       print "[Wlan.py] No Wireless Networks could be found"
-               
+                       print "[Wlan.py] No wireless networks could be found"
+               aps = {}
                if scanresults is not None:
-                       aps = {}
                        (num_channels, frequencies) = ifobj.getChannelInfo()
                        index = 1
                        for result in scanresults:
@@ -116,9 +114,9 @@ class Wlan:
                                        'signal' : str(signal),
                                        'custom' : extra,
                                }
-                               #print "GOT APS ENTRY:",aps[bssid]
+
                                index = index + 1
-                       return aps
+               return aps
                
        def stopGetNetworkList(self):
                if self.oldInterfaceState is not None:
@@ -137,10 +135,9 @@ class wpaSupplicant:
        def writeConfig(self, iface):
                essid = config.plugins.wlan.essid.value
                hiddenessid = config.plugins.wlan.hiddenessid.value
-               encrypted = config.plugins.wlan.encryption.enabled.value
-               encryption = config.plugins.wlan.encryption.type.value
-               wepkeytype = config.plugins.wlan.encryption.wepkeytype.value
-               psk = config.plugins.wlan.encryption.psk.value
+               encryption = config.plugins.wlan.encryption.value
+               wepkeytype = config.plugins.wlan.wepkeytype.value
+               psk = config.plugins.wlan.psk.value
                fp = file(getWlanConfigName(iface), 'w')
                fp.write('#WPA Supplicant Configuration by enigma2\n')
                fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
@@ -154,31 +151,29 @@ class wpaSupplicant:
                fp.write('network={\n')
                fp.write('\tssid="'+essid+'"\n')
                fp.write('\tscan_ssid=0\n')                     
-               if encrypted:
-                       if encryption in ('WPA', 'WPA2', 'WPA/WPA2'):
-                               fp.write('\tkey_mgmt=WPA-PSK\n')
-               
-                               if encryption == 'WPA':
-                                       fp.write('\tproto=WPA\n')
-                                       fp.write('\tpairwise=TKIP\n')
-                                       fp.write('\tgroup=TKIP\n')
-                               elif encryption == 'WPA2':
-                                       fp.write('\tproto=RSN\n')
-                                       fp.write('\tpairwise=CCMP\n')
-                                       fp.write('\tgroup=CCMP\n')
-                               else:
-                                       fp.write('\tproto=WPA RSN\n')
-                                       fp.write('\tpairwise=CCMP TKIP\n')
-                                       fp.write('\tgroup=CCMP TKIP\n')
-                               fp.write('\tpsk="'+psk+'"\n')
-                       elif encryption == 'WEP':
-                               fp.write('\tkey_mgmt=NONE\n')
-                               if wepkeytype == 'ASCII':
-                                       fp.write('\twep_key0="'+psk+'"\n')
-                               else:
-                                       fp.write('\twep_key0='+psk+'\n')
+               if encryption in ('WPA', 'WPA2', 'WPA/WPA2'):
+                       fp.write('\tkey_mgmt=WPA-PSK\n')
+                       if encryption == 'WPA':
+                               fp.write('\tproto=WPA\n')
+                               fp.write('\tpairwise=TKIP\n')
+                               fp.write('\tgroup=TKIP\n')
+                       elif encryption == 'WPA2':
+                               fp.write('\tproto=RSN\n')
+                               fp.write('\tpairwise=CCMP\n')
+                               fp.write('\tgroup=CCMP\n')
+                       else:
+                               fp.write('\tproto=WPA RSN\n')
+                               fp.write('\tpairwise=CCMP TKIP\n')
+                               fp.write('\tgroup=CCMP TKIP\n')
+                       fp.write('\tpsk="'+psk+'"\n')
+               elif encryption == 'WEP':
+                       fp.write('\tkey_mgmt=NONE\n')
+                       if wepkeytype == 'ASCII':
+                               fp.write('\twep_key0="'+psk+'"\n')
+                       else:
+                               fp.write('\twep_key0='+psk+'\n')
                else:
-                       fp.write('\tkey_mgmt=NONE\n')                   
+                       fp.write('\tkey_mgmt=NONE\n')
                fp.write('}')
                fp.write('\n')
                fp.close()
@@ -195,54 +190,51 @@ class wpaSupplicant:
                        supplicant = fp.readlines()
                        fp.close()
                        essid = None
+                       encryption = "Unencrypted"
 
                        for s in supplicant:
                                split = s.strip().split('=',1)
                                if split[0] == 'ap_scan':
-                                       #print "[Wlan.py] Got Hidden SSID Scan Value ",split[1]
                                        if split[1] == '2':
                                                config.plugins.wlan.hiddenessid.value = True
                                        else:
                                                config.plugins.wlan.hiddenessid.value = False
-                                       
+
                                elif split[0] == 'ssid':
-                                       #print "[Wlan.py] Got SSID ",split[1][1:-1]
                                        essid = split[1][1:-1]
                                        config.plugins.wlan.essid.value = essid
-                               
+
                                elif split[0] == 'proto':
-                                       config.plugins.wlan.encryption.enabled.value = True
                                        if split[1] == 'WPA' :
                                                mode = 'WPA'
                                        if split[1] == 'RSN':
                                                mode = 'WPA2'
                                        if split[1] in ('WPA RSN', 'WPA WPA2'):
                                                mode = 'WPA/WPA2'
-                                       #print "[Wlan.py] Got Encryption: ",mode
-                                       config.plugins.wlan.encryption.type.value = mode
+                                       encryption = mode
                                        
                                elif split[0] == 'wep_key0':
-                                       config.plugins.wlan.encryption.enabled.value = True
-                                       config.plugins.wlan.encryption.type.value = 'WEP'
+                                       encryption = 'WEP'
                                        if split[1].startswith('"') and split[1].endswith('"'):
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'ASCII'
-                                               config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                               config.plugins.wlan.wepkeytype.value = 'ASCII'
+                                               config.plugins.wlan.psk.value = split[1][1:-1]
                                        else:
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'HEX'
-                                               config.plugins.wlan.encryption.psk.value = split[1]                                             
+                                               config.plugins.wlan.wepkeytype.value = 'HEX'
+                                               config.plugins.wlan.psk.value = split[1]                                                
                                        
                                elif split[0] == 'psk':
-                                       config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+                                       config.plugins.wlan.psk.value = split[1][1:-1]
                                else:
                                        pass
+
+                       config.plugins.wlan.encryption.value = encryption
                                
                        wsconfig = {
                                        'hiddenessid': config.plugins.wlan.hiddenessid.value,
                                        'ssid': config.plugins.wlan.essid.value,
-                                       'encryption': config.plugins.wlan.encryption.enabled.value,
-                                       'encryption_type': config.plugins.wlan.encryption.type.value,
-                                       'encryption_wepkeytype': config.plugins.wlan.encryption.wepkeytype.value,
-                                       'key': config.plugins.wlan.encryption.psk.value,
+                                       'encryption': config.plugins.wlan.encryption.value,
+                                       'wepkeytype': config.plugins.wlan.wepkeytype.value,
+                                       'key': config.plugins.wlan.psk.value,
                                }
                
                        for (key, item) in wsconfig.items():
@@ -250,24 +242,21 @@ class wpaSupplicant:
                                        if key == 'hiddenessid':
                                                wsconfig['hiddenessid'] = False
                                        if key == 'ssid':
-                                               wsconfig['ssid'] = "home"
+                                               wsconfig['ssid'] = ""
                                        if key == 'encryption':
-                                               wsconfig['encryption'] = True                           
-                                       if key == 'encryption_type':
-                                               wsconfig['encryption_type'] = "WPA/WPA2"
-                                       if key == 'encryption_wepkeytype':
-                                               wsconfig['encryption_wepkeytype'] = "ASCII"
+                                               wsconfig['encryption'] = "WPA2"                 
+                                       if key == 'wepkeytype':
+                                               wsconfig['wepkeytype'] = "ASCII"
                                        if key == 'key':
-                                               wsconfig['key'] = "mysecurewlan"
+                                               wsconfig['key'] = ""
                except:
                        print "[Wlan.py] Error parsing ",configfile
                        wsconfig = {
                                        'hiddenessid': False,
-                                       'ssid': "home",
-                                       'encryption': True,
-                                       'encryption_type': "WPA/WPA2",
-                                       'encryption_wepkeytype': "ASCII",
-                                       'key': "mysecurewlan",
+                                       'ssid': "",
+                                       'encryption': "WPA2",
+                                       'wepkeytype': "ASCII",
+                                       'key': "",
                                }
                #print "[Wlan.py] WS-CONFIG-->",wsconfig
                return wsconfig
@@ -277,6 +266,7 @@ class Status:
        def __init__(self):
                self.wlaniface = {}
                self.backupwlaniface = {}
+               self.statusCallback = None
                self.WlanConsole = Console()
 
        def stopWlanConsole(self):
@@ -288,66 +278,54 @@ class Status:
        def getDataForInterface(self, iface, callback = None):
                self.WlanConsole = Console()
                cmd = "iwconfig " + iface
-               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, [iface, callback])
+               if callback is not None:
+                       self.statusCallback = callback
+               self.WlanConsole.ePopen(cmd, self.iwconfigFinished, iface)
 
        def iwconfigFinished(self, result, retval, extra_args):
-               (iface, callback) = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
+               iface = extra_args
+               data = { 'essid': False, 'frequency': False, 'accesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
                for line in result.splitlines():
                        line = line.strip()
                        if "ESSID" in line:
                                if "off/any" in line:
-                                       ssid = _("No Connection")
+                                       ssid = "off"
                                else:
                                        if "Nickname" in line:
-                                               tmpssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
-                                               if tmpssid in ('', ' '):
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid
+                                               ssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
                                        else:
-                                               tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                               if tmpssid in ('', ' '):
-                                                       ssid = _("Hidden networkname")
-                                               else:
-                                                       ssid = tmpssid                                          
+                                               ssid=(line[line.index('ESSID')+7:len(line)-1])
                                if ssid is not None:
                                        data['essid'] = ssid
-                       if 'Frequency' in line:
+                       if "Frequency" in line:
                                frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
                                if frequency is not None:
                                        data['frequency'] = frequency
                        if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)]
+                               if "Sensitivity" in line:
+                                       ap=line[line.index('Access Point')+14:line.index('   Sensitivity')]
+                               else:
+                                       ap=line[line.index('Access Point')+14:len(line)]
                                if ap is not None:
-                                       data['acesspoint'] = ap
-                                       if ap == "Not-Associated":
-                                               data['essid'] = _("No Connection")
+                                       data['accesspoint'] = ap
                        if "Bit Rate" in line:
                                if "kb" in line:
                                        br = line[line.index('Bit Rate')+9 :line.index(' kb/s')]
-                                       if br == '0':
-                                               br = _("Unsupported")
-                                       else:
-                                               br += " Mb/s"
                                else:
-                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')] + " Mb/s"
+                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
                                if br is not None:
                                        data['bitrate'] = br
-                       if 'Encryption key' in line:
+                       if "Encryption key" in line:
                                if ":off" in line:
-                                       if data['acesspoint'] is not "Not-Associated":
-                                               enc = _("Unsupported")
-                                       else:
-                                               enc = _("Disabled")
+                                       enc = "off"
                                elif "Security" in line:
                                        enc = line[line.index('Encryption key')+15 :line.index('   Security')]
                                        if enc is not None:
-                                               enc = _("Enabled")
+                                               enc = "on"
                                else:
                                        enc = line[line.index('Encryption key')+15 :len(line)]
                                        if enc is not None:
-                                               enc = _("Enabled")                                      
+                                               enc = "on"
                                if enc is not None:
                                        data['encryption'] = enc
                        if 'Quality' in line:
@@ -359,8 +337,7 @@ class Status:
                                        data['quality'] = qual
                        if 'Signal level' in line:
                                if "dBm" in line:
-                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')]
-                                       signal += " dBm"
+                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')] + " dBm"
                                elif "/100" in line:
                                        if "Noise" in line:
                                                signal = line[line.index('Signal level')+13:line.index('  Noise')]
@@ -380,8 +357,9 @@ class Status:
                if self.WlanConsole is not None:
                        if len(self.WlanConsole.appContainers) == 0:
                                print "[Wlan.py] self.wlaniface after loading:", self.wlaniface
-                               if callback is not None:
-                                       callback(True,self.wlaniface)
+                               if self.statusCallback is not None:
+                                               self.statusCallback(True,self.wlaniface)
+                                               self.statusCallback = None
 
        def getAdapterAttribute(self, iface, attribute):
                self.iface = iface
index 6e88a3ea4636f389edbb5525340032e4117163dc..3462146f97f2034476f41fb113eb30031afa9732 100644 (file)
@@ -19,29 +19,29 @@ from Wlan import iWlan, wpaSupplicant, iStatus, getWlanConfigName
 import hashlib
 from time import time
 from os import urandom, system
+from re import escape as re_escape
 
 plugin_path = eEnv.resolve("${libdir}/enigma2/python/Plugins/SystemPlugins/WirelessLan")
 
 
 list = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
-config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
+config.plugins.wlan.essid = NoSave(ConfigText(default = "", fixed_size = False))
 config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = False))
+config.plugins.wlan.encryption = NoSave(ConfigSelection(list, default = "WPA2"))
+config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
+config.plugins.wlan.psk = NoSave(ConfigPassword(default = "", fixed_size = False))
 
-config.plugins.wlan.encryption = ConfigSubsection()
-config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
-config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
-config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
-config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
 
 
 class WlanStatus(Screen):
@@ -108,7 +108,7 @@ class WlanStatus(Screen):
                }, -1)
                self.timer = eTimer()
                self.timer.timeout.get().append(self.resetList) 
-               self.onShown.append(lambda: self.timer.start(5000))
+               self.onShown.append(lambda: self.timer.start(8000))
                self.onLayoutFinish.append(self.layoutFinished)
                self.onClose.append(self.cleanup)
 
@@ -116,7 +116,7 @@ class WlanStatus(Screen):
                iStatus.stopWlanConsole()
                
        def layoutFinished(self):
-               self.setTitle(_("Wireless Network State"))
+               self.setTitle(_("Wireless network state"))
                
        def resetList(self):
                iStatus.getDataForInterface(self.iface,self.getInfoCB)
@@ -125,32 +125,65 @@ class WlanStatus(Screen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       self["BSSID"].setText(status[self.iface]["acesspoint"])
-                                       self["ESSID"].setText(status[self.iface]["essid"])
-                                       self["quality"].setText(status[self.iface]["quality"])
-                                       self["signal"].setText(status[self.iface]["signal"])
-                                       self["bitrate"].setText(status[self.iface]["bitrate"])
-                                       self["enc"].setText(status[self.iface]["encryption"])
+                                       if status[self.iface]["essid"] == "off":
+                                               essid = _("No Connection")
+                                       else:
+                                               essid = status[self.iface]["essid"]
+                                       if status[self.iface]["accesspoint"] == "Not-Associated":
+                                               accesspoint = _("Not-Associated")
+                                               essid = _("No Connection")
+                                       else:
+                                               accesspoint = status[self.iface]["accesspoint"]
+                                       if self.has_key("BSSID"):
+                                               self["BSSID"].setText(accesspoint)
+                                       if self.has_key("ESSID"):
+                                               self["ESSID"].setText(essid)
+
+                                       quality = status[self.iface]["quality"]
+                                       if self.has_key("quality"):
+                                               self["quality"].setText(quality)
+                                               
+                                       if status[self.iface]["bitrate"] == '0':
+                                               bitrate = _("Unsupported")
+                                       else:
+                                               bitrate = str(status[self.iface]["bitrate"]) + " Mb/s"
+                                       if self.has_key("bitrate"):
+                                               self["bitrate"].setText(bitrate)                                        
+                                       
+                                       signal = status[self.iface]["signal"]
+                                       if self.has_key("signal"):
+                                               self["signal"].setText(signal)
+
+                                       if status[self.iface]["encryption"] == "off":
+                                               if accesspoint == "Not-Associated":
+                                                       encryption = _("Disabled")
+                                               else:
+                                                       encryption = _("Unsupported")
+                                       else:
+                                               encryption = _("Enabled")
+                                       if self.has_key("enc"):
+                                               self["enc"].setText(encryption)
                                        self.updateStatusLink(status)
 
        def exit(self):
                self.timer.stop()
-               self.close(True)        
+               self.close(True)
 
        def updateStatusbar(self):
-               self["BSSID"].setText(_("Please wait..."))
-               self["ESSID"].setText(_("Please wait..."))
-               self["quality"].setText(_("Please wait..."))
-               self["signal"].setText(_("Please wait..."))
-               self["bitrate"].setText(_("Please wait..."))
-               self["enc"].setText(_("Please wait..."))
+               wait_txt = _("Please wait...")
+               self["BSSID"].setText(wait_txt)
+               self["ESSID"].setText(wait_txt)
+               self["quality"].setText(wait_txt)
+               self["signal"].setText(wait_txt)
+               self["bitrate"].setText(wait_txt)
+               self["enc"].setText(wait_txt)
                self["IFtext"].setText(_("Network:"))
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
                self["Statustext"].setText(_("Link:"))
 
        def updateStatusLink(self,status):
                if status is not None:
-                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                self["statuspic"].setPixmapNum(1)
                        else:
                                self["statuspic"].setPixmapNum(0)
@@ -234,19 +267,15 @@ class WlanScan(Screen):
                        iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
-                       if cur[1] is not None:
-                               if cur[1] == '<hidden>':
-                                       essid = cur[1]
-                               else:
-                                       essid = cur[0]
-                               self.close(essid,self.getWlanList())
+                       if cur[0] is not None:
+                               self.close(cur[0])
                        else:
-                               self.close(None,None)
+                               self.close(None)
                else:
                        iWlan.stopGetNetworkList()
                        self.rescanTimer.stop()
                        del self.rescanTimer
-                       self.close(None,None)
+                       self.close(None)
        
        def cancel(self):
                iWlan.stopGetNetworkList()
@@ -261,10 +290,7 @@ class WlanScan(Screen):
        def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal):
                divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png"))
                encryption = encrypted and _("Yes") or _("No")
-               if bssid == '<hidden>':                 
-                       return((essid, bssid, None, None, None, None, divpng))
-               else:                                   
-                       return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
+               return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng))
 
        def updateAPList(self):
                newList = []
@@ -281,20 +307,19 @@ class WlanScan(Screen):
                                tmpList.append(data)
 
                if len(tmpList):
-                       if "<hidden>" not in tmpList:
-                               tmpList.append( ( _("enter hidden network SSID"), "<hidden>", True, self.iface, _("unavailable"), "" ) )
-
                        for entry in tmpList:
                                self.newAPList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
        
                        currentListEntry = self["list"].getCurrent()
-                       idx = 0
-                       for entry in self.newAPList:
-                               if entry[0] == currentListEntry[0]:
-                                       newListIndex = idx
-                               idx +=1
+                       if currentListEntry is not None:
+                               idx = 0
+                               for entry in self.newAPList:
+                                       if entry[0] == currentListEntry[0]:
+                                               newListIndex = idx
+                                       idx +=1
                        self['list'].setList(self.newAPList)
-                       self["list"].setIndex(newListIndex)
+                       if newListIndex is not None:
+                               self["list"].setIndex(newListIndex)
                        self["list"].updateList(self.newAPList)
                        self.listLength = len(self.newAPList)
                        self.buildWlanList()
@@ -326,9 +351,6 @@ class WlanScan(Screen):
                                else:
                                        self.oldlist[entry[0]]['data'] = entry
                
-               if "<hidden>" not in self.cleanList:
-                       self.cleanList.append( ( _("enter hidden network SSID"), "<hidden>", True, self.iface, _("unavailable"), "" ) )
-
                for entry in self.cleanList:
                        self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ))
                
@@ -341,20 +363,17 @@ class WlanScan(Screen):
 
        def setInfo(self):
                length = self.getLength()
-               if length <= 1:
-                       self["info"].setText(_("No wireless networks found! Please refresh."))
-               elif length == 2:
+               if length == 0:
+                       self["info"].setText(_("No wireless networks found! Searching..."))
+               elif length == 1:
                        self["info"].setText(_("1 wireless network found!"))
                else:
-                       self["info"].setText(str(length-1)+_(" wireless networks found!"))
+                       self["info"].setText(str(length)+_(" wireless networks found!"))
 
        def buildWlanList(self):
                self.WlanList = []
                for entry in self['list'].list:
-                       if entry[1] == "<hidden>":
-                               continue
-                       else:
-                               self.WlanList.append( (entry[0], entry[0]) )
+                       self.WlanList.append( (entry[0], entry[0]) )
 
        def getLength(self):
                return self.listLength          
@@ -419,8 +438,11 @@ def callFunction(iface):
        return None
 
 def configStrings(iface):
-       hardware_info = HardwareInfo()
-       if  hardware_info.device_name != "dm7025":
+       try:
+               device = open("/proc/stb/info/model", "r").readline().strip()
+       except:
+               device = ""     
+       if device != "dm7025":
                rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
                etpm = eTPM()
                l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
@@ -440,14 +462,14 @@ def configStrings(iface):
                        return
                val = etpm.challenge(rnd)
                result = decrypt_block(val, l3key)
-       if hardware_info.device_name == "dm7025" or result[80:88] == rnd:
+       if device == "dm7025" or result[80:88] == rnd:
                driver = iNetwork.detectWlanModule(iface)
        else:
                driver = 'dreambox'
        print 'Using "%s" as wpa-supplicant driver' % (driver)
        ret = ""
        if driver == 'madwifi' and config.plugins.wlan.hiddenessid.value:
-               ret += "\tpre-up iwconfig " + iface + " essid \"" + config.plugins.wlan.essid.value + "\" || true\n"
+               ret += "\tpre-up iwconfig " + iface + " essid \"" + re_escape(config.plugins.wlan.essid.value) + "\" || true\n"
        ret += "\tpre-up wpa_supplicant -i" + iface + " -c" + getWlanConfigName(iface) + " -B -dd -D" + driver + " || true\n"
        ret += "\tpre-down wpa_cli -i" + iface + " terminate || true\n"
        return ret
index e7ba6071aee54deff0bbda40d5bb0bf800f6cad3..4b15ee0073433eefa3ca01b3d76087d1f9c14d42 100755 (executable)
@@ -296,18 +296,16 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen):
 
 
 class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
-       def __init__(self, session, networkinfo, essid=None, aplist=None):
+       def __init__(self, session, networkinfo, essid=None):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
                self.session = session
                if isinstance(networkinfo, (list, tuple)):
                        self.iface = networkinfo[0]
                        self.essid = networkinfo[1]
-                       self.aplist = networkinfo[2]
                else:
                        self.iface = networkinfo
                        self.essid = essid
-                       self.aplist = aplist
                        
                self.extended = None
                self.applyConfigRef = None
@@ -399,71 +397,36 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                self.gatewayEntry = None
                self.hiddenSSID = None
                self.wlanSSID = None
-               self.encryptionEnabled = None
-               self.encryptionKey = None
+               self.encryption = None
                self.encryptionType = None
-               self.nwlist = None
+               self.encryptionKey = None
                self.encryptionlist = None
                self.weplist = None
                self.wsconfig = None
                self.default = None
-               self.hiddenNW = None
 
                if iNetwork.isWirelessInterface(self.iface):
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant, iWlan
-                       iWlan.setInterface(self.iface)
-                       self.w = iWlan.getInterface()
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant
                        self.ws = wpaSupplicant()
                        self.encryptionlist = []
+                       self.encryptionlist.append(("Unencrypted", _("Unencrypted")))
                        self.encryptionlist.append(("WEP", _("WEP")))
                        self.encryptionlist.append(("WPA", _("WPA")))
-                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.encryptionlist.append(("WPA/WPA2", _("WPA or WPA2")))
+                       self.encryptionlist.append(("WPA2", _("WPA2")))
                        self.weplist = []
                        self.weplist.append("ASCII")
                        self.weplist.append("HEX")
-                       if self.aplist is not None:
-                               self.nwlist = self.aplist
-                               self.nwlist.sort(key = lambda x: x[0])
-                       else:
-                               self.nwlist = []
-                               self.aps = None
-                               try:
-                                       self.aps = iWlan.getNetworkList()
-                                       if self.aps is not None:
-                                               for ap in self.aps:
-                                                       a = self.aps[ap]
-                                                       if a['active']:
-                                                               if a['essid'] != '':
-                                                                       self.nwlist.append((a['essid'],a['essid']))
-                                       self.nwlist.sort(key = lambda x: x[0])
-                                       iWlan.stopGetNetworkList()
-                               except:
-                                       self.nwlist.append(("No Networks found",_("No Networks found")))
 
                        self.wsconfig = self.ws.loadConfig(self.iface)
-                       if self.essid is not None: # ssid from wlan scan
-                               self.default = self.essid
-                               self.hiddenNW = self.wsconfig['hiddenessid']
-                               if self.essid == '<hidden>':
-                                       self.hiddenNW = True
-                                       self.default = self.default = self.wsconfig['ssid']
-                       else:
-                               self.hiddenNW = self.wsconfig['hiddenessid']
-                               self.default = self.wsconfig['ssid']
+                       if self.essid is None:
+                               self.essid = self.wsconfig['ssid']
 
-                       if (self.default not in self.nwlist and self.default is not '<hidden>'):
-                               self.nwlist.append((self.default,self.default))
-                       
-                       config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = self.hiddenNW))
-                       if config.plugins.wlan.hiddenessid.value is True:
-                               config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False))
-                       else:
-                               config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
-                       config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] ))
-                       config.plugins.wlan.encryption.type = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption_type'] ))
-                       config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['encryption_wepkeytype'] ))
-                       config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.hiddenessid = NoSave(ConfigYesNo(default = self.wsconfig['hiddenessid']))
+                       config.plugins.wlan.essid = NoSave(ConfigText(default = self.essid, visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.encryption = NoSave(ConfigSelection(self.encryptionlist, default = self.wsconfig['encryption'] ))
+                       config.plugins.wlan.wepkeytype = NoSave(ConfigSelection(self.weplist, default = self.wsconfig['wepkeytype'] ))
+                       config.plugins.wlan.psk = NoSave(ConfigPassword(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
 
                self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
                self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
@@ -505,30 +468,20 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                                if p.__call__.has_key("configStrings"):
                                                        self.configStrings = p.__call__["configStrings"]
 
-                                               self.hiddenSSID = getConfigListEntry(_("enter hidden network SSID"), config.plugins.wlan.hiddenessid)
+                                               self.hiddenSSID = getConfigListEntry(_("Hidden network"), config.plugins.wlan.hiddenessid)
                                                self.list.append(self.hiddenSSID)
-
-                                               if config.plugins.wlan.hiddenessid.value is True:
-                                                       config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False))
-                                                       self.wlanSSID = getConfigListEntry(_("Hidden network SSID"), config.plugins.wlan.essid)
-                                               else:
-                                                       config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
-                                                       self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
+                                               self.wlanSSID = getConfigListEntry(_("Networkname (SSID)"), config.plugins.wlan.essid)
                                                self.list.append(self.wlanSSID)
-                                               self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
-                                               self.list.append(self.encryptionEnabled)
-                                               
-                                               if config.plugins.wlan.encryption.enabled.value:
-                                                       self.encryptionType = getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type)
-                                                       self.list.append(self.encryptionType)
-                                                       if config.plugins.wlan.encryption.type.value == 'WEP':
-                                                               self.list.append(getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.encryption.wepkeytype))
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
-                                                       else:
-                                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)
-                                                               self.list.append(self.encryptionKey)
+                                               self.encryption = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption)
+                                               self.list.append(self.encryption)                                               
 
+                                               self.encryptionType = getConfigListEntry(_("Encryption Keytype"), config.plugins.wlan.wepkeytype)
+                                               self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.psk)
+                                               
+                                               if config.plugins.wlan.encryption.value != "Unencrypted":
+                                                       if config.plugins.wlan.encryption.value == 'WEP':
+                                                               self.list.append(self.encryptionType)
+                                                       self.list.append(self.encryptionKey)
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
@@ -543,11 +496,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                if self["config"].getCurrent() == self.gatewayEntry:
                        self.createSetup()
                if iNetwork.isWirelessInterface(self.iface):
-                       if self["config"].getCurrent() == self.hiddenSSID:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionEnabled:
-                               self.createSetup()
-                       if self["config"].getCurrent() == self.encryptionType:
+                       if self["config"].getCurrent() == self.encryption:
                                self.createSetup()
 
        def keyLeft(self):
@@ -607,16 +556,20 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                                iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
                        else:
                                iNetwork.removeAdapterAttribute(self.iface, "gateway")
-                       if self.extended is not None and self.configStrings is not None:
+
+                       if (self.extended is not None and self.configStrings is not None):
                                iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
                                self.ws.writeConfig(self.iface)
-
+                               
                        if self.activateInterfaceEntry.value is False:
                                iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
                                iNetwork.writeNetworkConfig()
                                self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
                        else:
-                               iNetwork.deactivateInterface(self.iface,self.activateInterfaceCB)
+                               if self.oldInterfaceState is False:
+                                       iNetwork.activateInterface(self.iface,self.deactivateInterfaceCB)
+                               else:
+                                       iNetwork.deactivateInterface(self.iface,self.activateInterfaceCB)
                                iNetwork.writeNetworkConfig()
                                self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
                else:
@@ -687,10 +640,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen):
                
        def hideInputHelp(self):
                current = self["config"].getCurrent()
-               if current == self.wlanSSID and config.plugins.wlan.hiddenessid.value:
+               if current == self.wlanSSID:
                        if current[1].help_window.instance is not None:
                                current[1].help_window.instance.hide()
-               elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value:
+               elif current == self.encryptionKey and config.plugins.wlan.encryption.value is not "Unencrypted":
                        if current[1].help_window.instance is not None:
                                current[1].help_window.instance.hide()
 
@@ -764,7 +717,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                                ifobj = Wireless(iface) # a Wireless NIC Object
                                wlanresponse = ifobj.getAPaddr()
                        except IOError, (error_no, error_str):
-                               if error_no in (errno.EOPNOTSUPP, errno.EINVAL, errno.ENODEV, errno.EPERM):
+                               if error_no in (errno.EOPNOTSUPP, errno.ENODEV, errno.EPERM):
                                        return False
                                else:
                                        print "error: ",error_no,error_str
@@ -939,7 +892,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
 
        def WlanScanClosed(self,*ret):
                if ret[0] is not None:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0],ret[1])
+                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetup, self.iface,ret[0])
                else:
                        from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus
                        iStatus.stopWlanConsole()
@@ -998,7 +951,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self.LinkState = False
                                                self["statuspic"].setPixmapNum(1)
                                                self["statuspic"].show()
@@ -1420,7 +1373,7 @@ class NetworkAdapterTest(Screen):
                if data is not None:
                        if data is True:
                                if status is not None:
-                                       if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
+                                       if status[self.iface]["essid"] == "off" or status[self.iface]["accesspoint"] == "Not-Associated" or status[self.iface]["accesspoint"] == False:
                                                self["Network"].setForegroundColorNum(1)
                                                self["Network"].setText(_("disconnected"))
                                                self["NetworkInfo_Check"].setPixmapNum(1)