servicemp3.cpp: more simple/flexible streaming detection
[enigma2.git] / lib / python / Plugins / SystemPlugins / WirelessLan / Wlan.py
index 1c1471cee25fd9fc7623abcb6c1a303a6b4d10ed..a1851579de30c38e7b393edd64a752124d05db77 100755 (executable)
@@ -1,39 +1,42 @@
-#from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER
-#from Components.MultiContent import MultiContentEntryText
-#from Components.GUIComponent import GUIComponent
-#from Components.HTMLComponent import HTMLComponent
 from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.Console import Console
 from Components.config import config, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
 from Components.Console import Console
+from Components.Network import iNetwork
 
 
-from os import system
+from os import system, path as os_path
 from string import maketrans, strip
 import sys
 import types
 from string import maketrans, strip
 import sys
 import types
-from re import compile as re_compile, search as re_search
-from iwlibs import getNICnames, Wireless, Iwfreq
+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 = []
+list.append("Unencrypted")
 list.append("WEP")
 list.append("WPA")
 list.append("WEP")
 list.append("WPA")
-list.append("WPA2")
 list.append("WPA/WPA2")
 list.append("WPA/WPA2")
+list.append("WPA2")
 
 weplist = []
 weplist.append("ASCII")
 weplist.append("HEX")
 
 config.plugins.wlan = ConfigSubsection()
 
 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.hiddenessid = 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'
 
 class Wlan:
 
 class Wlan:
-       def __init__(self, iface):
+       def __init__(self, iface = None):
+               self.iface = iface
+               self.oldInterfaceState = None
+               
                a = ''; b = ''
                for i in range(0, 255):
                        a = a + chr(i)
                a = ''; b = ''
                for i in range(0, 255):
                        a = a + chr(i)
@@ -42,466 +45,309 @@ class Wlan:
                        else:
                                b = b + chr(i)
                
                        else:
                                b = b + chr(i)
                
-               self.iface = iface
-               self.wlaniface = {}
-               self.WlanConsole = Console()
                self.asciitrans = maketrans(a, b)
 
                self.asciitrans = maketrans(a, b)
 
-       def stopWlanConsole(self):
-               if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
-                       self.WlanConsole = None
-                       del self.WlanConsole
-                       
-       def getDataForInterface(self, callback = None):
-               #get ip out of ip addr, as avahi sometimes overrides it in ifconfig.
-               print "self.iface im getDataForInterface",self.iface
-               if len(self.WlanConsole.appContainers) == 0:
-                       self.WlanConsole = Console()
-                       cmd = "iwconfig " + self.iface
-                       self.WlanConsole.ePopen(cmd, self.iwconfigFinished, callback)
-
-       def iwconfigFinished(self, result, retval, extra_args):
-               print "self.iface im iwconfigFinished",self.iface
-               callback = extra_args
-               data = { 'essid': False, 'frequency': False, 'acesspoint': False, 'bitrate': False, 'encryption': False, 'quality': False, 'signal': False }
-               #print "result im iwconfigFinished",result
-               
-               for line in result.splitlines():
-                       #print "line",line
-                       line = line.strip()
-                       if "ESSID" in line:
-                               if "off/any" in line:
-                                       ssid = _("No Connection")
-                               else:
-                                       tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                       if tmpssid == '':
-                                               ssid = _("Hidden networkname")
-                                       elif tmpssid ==' ':
-                                               ssid = _("Hidden networkname")
-                                       else:
-                                           ssid = tmpssid
-                               #print "SSID->",ssid
-                               if ssid is not None:
-                                       data['essid'] = ssid
-                       if 'Frequency' in line:
-                               frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
-                               #print "Frequency",frequency   
-                               if frequency is not None:
-                                       data['frequency'] = frequency
-                       if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)-1]
-                               #print "AP",ap
-                               if ap is not None:
-                                       data['acesspoint'] = ap
-                       if "Bit Rate" in line:
-                               br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
-                               #print "Bitrate",br
-                               if br is not None:
-                                       data['bitrate'] = br
-                       if 'Encryption key' in line:
-                               if ":off" in line:
-                                   enc = _("Disabled")
-                               else:
-                                   enc = line[line.index('Encryption key')+15 :line.index('   Security')]
-                               #print "Encryption key",enc 
-                               if enc is not None:
-                                       data['encryption'] = _("Enabled")
-                       if 'Quality' in line:
-                               if "/100" in line:
-                                       qual = line[line.index('Quality')+8:line.index('/100')]
-                               else:
-                                       qual = line[line.index('Quality')+8:line.index('Sig')]
-                               #print "Quality",qual
-                               if qual is not None:
-                                       data['quality'] = qual
-                       if 'Signal level' in line:
-                               signal = line[line.index('Signal level')+14 :line.index(' dBm')]
-                               #print "Signal level",signal            
-                               if signal is not None:
-                                       data['signal'] = signal
-
-               self.wlaniface[self.iface] = data
-               
-               if len(self.WlanConsole.appContainers) == 0:
-                       print "self.wlaniface after loading:", self.wlaniface
-                       self.WlanConsole = None
-                       if callback is not None:
-                               callback(True,self.wlaniface)
-
-       def getAdapterAttribute(self, attribute):
-               print "im getAdapterAttribute"
-               if self.wlaniface.has_key(self.iface):
-                       print "self.wlaniface.has_key",self.iface
-                       if self.wlaniface[self.iface].has_key(attribute):
-                               return self.wlaniface[self.iface][attribute]
-               return None
-               
        def asciify(self, str):
                return str.translate(self.asciitrans)
        def asciify(self, str):
                return str.translate(self.asciitrans)
-
        
        def getWirelessInterfaces(self):
        
        def getWirelessInterfaces(self):
-               iwifaces = None
-               try:
-                       iwifaces = getNICnames()
-               except:
-                       print "[Wlan.py] No Wireless Networkcards could be found"
-               
-               return iwifaces
+               return getWNICnames()
+
+       def setInterface(self, iface = None):
+               self.iface = iface
+
+       def getInterface(self):
+               return self.iface
 
 
-       
        def getNetworkList(self):
        def getNetworkList(self):
-               system("ifconfig "+self.iface+" up")
+               if self.oldInterfaceState is None:
+                       self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
+               if self.oldInterfaceState is False:
+                       if iNetwork.getAdapterAttribute(self.iface, "up") is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", True)
+                               system("ifconfig "+self.iface+" up")
+
                ifobj = Wireless(self.iface) # a Wireless NIC Object
                ifobj = Wireless(self.iface) # a Wireless NIC Object
-               
-               #Association mappings
-               stats, quality, discard, missed_beacon = ifobj.getStatistics()
-               snr = quality.signallevel - quality.noiselevel
 
                try:
                        scanresults = ifobj.scan()
                except:
                        scanresults = None
 
                try:
                        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:
                if scanresults is not None:
-                       aps = {}
+                       (num_channels, frequencies) = ifobj.getChannelInfo()
+                       index = 1
                        for result in scanresults:
                        for result in scanresults:
-                       
                                bssid = result.bssid
                                bssid = result.bssid
-               
-                               encryption = map(lambda x: hex(ord(x)), result.encode)
-               
-                               if encryption[-1] == "0x8":
+
+                               if result.encode.flags & wififlags.IW_ENCODE_DISABLED > 0:
+                                       encryption = False
+                               elif result.encode.flags & wififlags.IW_ENCODE_NOKEY > 0:
                                        encryption = True
                                else:
                                        encryption = True
                                else:
-                                       encryption = False
-               
+                                       encryption = None
+                               
+                               signal = str(result.quality.siglevel-0x100) + " dBm"
+                               quality = "%s/%s" % (result.quality.quality,ifobj.getQualityMax().quality)
+                               
                                extra = []
                                for element in result.custom:
                                        element = element.encode()
                                        extra.append( strip(self.asciify(element)) )
                                extra = []
                                for element in result.custom:
                                        element = element.encode()
                                        extra.append( strip(self.asciify(element)) )
-                               
-                               if result.quality.sl is 0 and len(extra) > 0:
-                                       begin = extra[0].find('SignalStrength=')+15
-                                                                       
-                                       done = False
-                                       end = begin+1
-                                       
-                                       while not done:
-                                               if extra[0][begin:end].isdigit():
-                                                       end += 1
-                                               else:
-                                                       done = True
-                                                       end -= 1
-                                       
-                                       signal = extra[0][begin:end]
-                                       #print "[Wlan.py] signal is:" + str(signal)
+                               for element in extra:
+                                       if 'SignalStrength' in element:
+                                               signal = element[element.index('SignalStrength')+15:element.index(',L')]                                        
+                                       if 'LinkQuality' in element:
+                                               quality = element[element.index('LinkQuality')+12:len(element)]                         
 
 
-                               else:
-                                       signal = str(result.quality.sl)
-                               
                                aps[bssid] = {
                                        'active' : True,
                                        'bssid': result.bssid,
                                aps[bssid] = {
                                        'active' : True,
                                        'bssid': result.bssid,
-                                       'channel': result.frequency.getChannel(result.frequency.getFrequency()),
+                                       'channel': frequencies.index(ifobj._formatFrequency(result.frequency.getFrequency())) + 1,
                                        'encrypted': encryption,
                                        'essid': strip(self.asciify(result.essid)),
                                        'iface': self.iface,
                                        'encrypted': encryption,
                                        'essid': strip(self.asciify(result.essid)),
                                        'iface': self.iface,
-                                       'maxrate' : result.rate[-1],
-                                       'noise' : result.quality.getNoiselevel(),
-                                       'quality' : str(result.quality.quality),
-                                       'signal' : signal,
+                                       'maxrate' : ifobj._formatBitrate(result.rate[-1][-1]),
+                                       'noise' : '',#result.quality.nlevel-0x100,
+                                       'quality' : str(quality),
+                                       'signal' : str(signal),
                                        'custom' : extra,
                                }
                                        'custom' : extra,
                                }
-                               print aps[bssid]
-                       return aps
 
 
+                               index = index + 1
+               return aps
                
                
-       def getStatus(self):
-               ifobj = Wireless(self.iface)
-               fq = Iwfreq()
-               try:
-                       self.channel = str(fq.getChannel(str(ifobj.getFrequency()[0:-3])))
-               except:
-                       self.channel = 0
-               #print ifobj.getStatistics()
-               status = {
-                                 'BSSID': str(ifobj.getAPaddr()),
-                                 'ESSID': str(ifobj.getEssid()),
-                                 'quality': str(ifobj.getStatistics()[1].quality),
-                                 'signal': str(ifobj.getStatistics()[1].sl),
-                                 'bitrate': str(ifobj.getBitrate()),
-                                 'channel': str(self.channel),
-                                 #'channel': str(fq.getChannel(str(ifobj.getFrequency()[0:-3]))),
-               }
-               
-               for (key, item) in status.items():
-                       if item is "None" or item is "":
-                                       status[key] = _("N/A")
-                               
-               return status
+       def stopGetNetworkList(self):
+               if self.oldInterfaceState is not None:
+                       if self.oldInterfaceState is False:
+                               iNetwork.setAdapterAttribute(self.iface, "up", False)
+                               system("ifconfig "+self.iface+" down")
+                               self.oldInterfaceState = None
+                               self.iface = None
 
 
+iWlan = Wlan()
 
 class wpaSupplicant:
        def __init__(self):
                pass
 
 class wpaSupplicant:
        def __init__(self):
                pass
-       
                
                
-       def writeConfig(self):  
-                       
-                       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
-                       fp = file('/etc/wpa_supplicant.conf', 'w')
-                       fp.write('#WPA Supplicant Configuration by enigma2\n')
-                       fp.write('ctrl_interface=/var/run/wpa_supplicant\n')
-                       fp.write('eapol_version=1\n')
-                       fp.write('fast_reauth=1\n')     
-                       if essid == 'hidden...':
-                               fp.write('ap_scan=2\n')
+       def writeConfig(self, iface):
+               essid = config.plugins.wlan.essid.value
+               hiddenessid = config.plugins.wlan.hiddenessid.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')
+               fp.write('eapol_version=1\n')
+               fp.write('fast_reauth=1\n')     
+
+               if hiddenessid:
+                       fp.write('ap_scan=2\n')
+               else:
+                       fp.write('ap_scan=1\n')
+               fp.write('network={\n')
+               fp.write('\tssid="'+essid+'"\n')
+               fp.write('\tscan_ssid=0\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:
                        else:
-                               fp.write('ap_scan=1\n')
-                       fp.write('network={\n')
-                       if essid == 'hidden...':
-                               fp.write('\tssid="'+hiddenessid+'"\n')
+                               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:
                        else:
-                               fp.write('\tssid="'+essid+'"\n')
-                       fp.write('\tscan_ssid=0\n')                     
-                       if encrypted:
-                               if encryption == 'WPA' or encryption == 'WPA2' or encryption == '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=WPA RSN\n')
-                                               fp.write('\tpairwise=CCMP TKIP\n')
-                                               fp.write('\tgroup=CCMP TKIP\n')                                         
-                                       else:
-                                               fp.write('\tproto=WPA WPA2\n')
-                                               fp.write('\tpairwise=CCMP\n')
-                                               fp.write('\tgroup=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('}')
-                       fp.write('\n')
-                       fp.close()
-                       system("cat /etc/wpa_supplicant.conf")
+                               fp.write('\twep_key0='+psk+'\n')
+               else:
+                       fp.write('\tkey_mgmt=NONE\n')
+               fp.write('}')
+               fp.write('\n')
+               fp.close()
+               #system('cat ' + getWlanConfigName(iface))
                
                
-       def loadConfig(self):
+       def loadConfig(self,iface):
+               configfile = getWlanConfigName(iface)
+               if not os_path.exists(configfile):
+                       configfile = '/etc/wpa_supplicant.conf'
                try:
                        #parse the wpasupplicant configfile
                try:
                        #parse the wpasupplicant configfile
-                       fp = file('/etc/wpa_supplicant.conf', 'r')
+                       print "[Wlan.py] parsing configfile: ",configfile
+                       fp = file(configfile, 'r')
                        supplicant = fp.readlines()
                        fp.close()
                        supplicant = fp.readlines()
                        fp.close()
-                       ap_scan = False
                        essid = None
                        essid = None
+                       encryption = "Unencrypted"
 
                        for s in supplicant:
                                split = s.strip().split('=',1)
                                if split[0] == 'ap_scan':
 
                        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':
                                        if split[1] == '2':
-                                               ap_scan = True
+                                               config.plugins.wlan.hiddenessid.value = True
                                        else:
                                        else:
-                                               ap_scan = False
-                                               
+                                               config.plugins.wlan.hiddenessid.value = False
+
                                elif split[0] == 'ssid':
                                elif split[0] == 'ssid':
-                                       print "[Wlan.py] Got SSID "+split[1][1:-1]
                                        essid = split[1][1:-1]
                                        essid = split[1][1:-1]
-                                       
+                                       config.plugins.wlan.essid.value = essid
+
                                elif split[0] == 'proto':
                                elif split[0] == 'proto':
-                                       print "split[1]",split[1]
-                                       config.plugins.wlan.encryption.enabled.value = True
-                                       if split[1] == "WPA" :
+                                       if split[1] == 'WPA' :
                                                mode = 'WPA'
                                                mode = 'WPA'
-                                       if split[1] == "WPA WPA2" :
-                                               mode = 'WPA/WPA2'
-                                       if split[1] == "WPA RSN" :
+                                       if split[1] == 'RSN':
                                                mode = 'WPA2'
                                                mode = 'WPA2'
-                                       config.plugins.wlan.encryption.type.value = mode
-                                       print "[Wlan.py] Got Encryption: "+mode
-                                       
-                               #currently unused !
-                               #elif split[0] == 'key_mgmt':
-                               #       print "split[1]",split[1]
-                               #       if split[1] == "WPA-PSK" :
-                               #               config.plugins.wlan.encryption.enabled.value = True
-                               #               config.plugins.wlan.encryption.type.value = "WPA/WPA2"
-                               #       print "[Wlan.py] Got Encryption: "+ config.plugins.wlan.encryption.type.value
+                                       if split[1] in ('WPA RSN', 'WPA WPA2'):
+                                               mode = 'WPA/WPA2'
+                                       encryption = mode
                                        
                                elif split[0] == 'wep_key0':
                                        
                                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('"'):
                                        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:
                                        else:
-                                               config.plugins.wlan.encryption.wepkeytype.value = 'HEX'
-                                               config.plugins.wlan.encryption.psk.value = split[1]                                             
-                                       print "[Wlan.py] Got Encryption: WEP - keytype is: "+config.plugins.wlan.encryption.wepkeytype.value
-                                       print "[Wlan.py] Got Encryption: WEP - key0 is: "+config.plugins.wlan.encryption.psk.value
+                                               config.plugins.wlan.wepkeytype.value = 'HEX'
+                                               config.plugins.wlan.psk.value = split[1]                                                
                                        
                                elif split[0] == 'psk':
                                        
                                elif split[0] == 'psk':
-                                       config.plugins.wlan.encryption.psk.value = split[1][1:-1]
-                                       print "[Wlan.py] Got PSK: "+split[1][1:-1]
+                                       config.plugins.wlan.psk.value = split[1][1:-1]
                                else:
                                        pass
                                else:
                                        pass
+
+                       config.plugins.wlan.encryption.value = encryption
                                
                                
-                       if ap_scan is True:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = 'hidden...'
-                       else:
-                               config.plugins.wlan.hiddenessid.value = essid
-                               config.plugins.wlan.essid.value = essid
                        wsconfig = {
                                        'hiddenessid': config.plugins.wlan.hiddenessid.value,
                                        'ssid': config.plugins.wlan.essid.value,
                        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():
                                if item is "None" or item is "":
                                        if key == 'hiddenessid':
                                }
                
                        for (key, item) in wsconfig.items():
                                if item is "None" or item is "":
                                        if key == 'hiddenessid':
-                                               wsconfig['hiddenessid'] = "home"
+                                               wsconfig['hiddenessid'] = False
                                        if key == 'ssid':
                                        if key == 'ssid':
-                                               wsconfig['ssid'] = "home"
+                                               wsconfig['ssid'] = ""
                                        if key == 'encryption':
                                        if key == 'encryption':
-                                               wsconfig['encryption'] = True                           
-                                       if key == 'encryption':
-                                               wsconfig['encryption_type'] = "WPA/WPA2"
-                                       if key == 'encryption':
-                                               wsconfig['encryption_wepkeytype'] = "ASCII"
-                                       if key == 'encryption':
-                                               wsconfig['key'] = "mysecurewlan"
-
+                                               wsconfig['encryption'] = "WPA2"                 
+                                       if key == 'wepkeytype':
+                                               wsconfig['wepkeytype'] = "ASCII"
+                                       if key == 'key':
+                                               wsconfig['key'] = ""
                except:
                except:
-                       print "[Wlan.py] Error parsing /etc/wpa_supplicant.conf"
+                       print "[Wlan.py] Error parsing ",configfile
                        wsconfig = {
                        wsconfig = {
-                                       'hiddenessid': "home",
-                                       'ssid': "home",
-                                       'encryption': True,
-                                       'encryption_type': "WPA/WPA2",
-                                       'encryption_wepkeytype': "ASCII",
-                                       'key': "mysecurewlan",
+                                       'hiddenessid': False,
+                                       'ssid': "",
+                                       'encryption': "WPA2",
+                                       'wepkeytype': "ASCII",
+                                       'key': "",
                                }
                                }
-               print "[Wlan.py] WS-CONFIG-->",wsconfig
+               #print "[Wlan.py] WS-CONFIG-->",wsconfig
                return wsconfig
 
                return wsconfig
 
-       
-       def restart(self, iface):
-               system("start-stop-daemon -K -x /usr/sbin/wpa_supplicant")
-               system("start-stop-daemon -S -x /usr/sbin/wpa_supplicant -- -B -i"+iface+" -c/etc/wpa_supplicant.conf")
 
 class Status:
        def __init__(self):
                self.wlaniface = {}
                self.backupwlaniface = {}
 
 class Status:
        def __init__(self):
                self.wlaniface = {}
                self.backupwlaniface = {}
+               self.statusCallback = None
                self.WlanConsole = Console()
 
        def stopWlanConsole(self):
                if self.WlanConsole is not None:
                self.WlanConsole = Console()
 
        def stopWlanConsole(self):
                if self.WlanConsole is not None:
-                       print "killing self.WlanConsole"
+                       print "[iStatus] killing self.WlanConsole"
+                       self.WlanConsole.killAll()
                        self.WlanConsole = None
                        
        def getDataForInterface(self, iface, callback = None):
                self.WlanConsole = Console()
                cmd = "iwconfig " + iface
                        self.WlanConsole = None
                        
        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):
 
        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:
                for line in result.splitlines():
                        line = line.strip()
                        if "ESSID" in line:
                                if "off/any" in line:
-                                       ssid = _("No Connection")
+                                       ssid = "off"
                                else:
                                else:
-                                       tmpssid=(line[line.index('ESSID')+7:len(line)-1])
-                                       if tmpssid == '':
-                                               ssid = _("Hidden networkname")
-                                       elif tmpssid ==' ':
-                                               ssid = _("Hidden networkname")
+                                       if "Nickname" in line:
+                                               ssid=(line[line.index('ESSID')+7:line.index('"  Nickname')])
                                        else:
                                        else:
-                                           ssid = tmpssid
-                               #print "SSID->",ssid
+                                               ssid=(line[line.index('ESSID')+7:len(line)-1])
                                if ssid is not None:
                                        data['essid'] = ssid
                                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')]
                                frequency = line[line.index('Frequency')+10 :line.index(' GHz')]
-                               #print "Frequency",frequency   
                                if frequency is not None:
                                        data['frequency'] = frequency
                        if "Access Point" in line:
                                if frequency is not None:
                                        data['frequency'] = frequency
                        if "Access Point" in line:
-                               ap=line[line.index('Access Point')+14:len(line)]
-                               #print "AP",ap
+                               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:
                                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 "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:
                                else:
-                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')] + " Mb/s"
-                               #print "Bitrate",br
+                                       br = line[line.index('Bit Rate')+9 :line.index(' Mb/s')]
                                if br is not None:
                                        data['bitrate'] = br
                                if br is not None:
                                        data['bitrate'] = br
-                       if 'Encryption key' in line:
+                       if "Encryption key" in line:
                                if ":off" in line:
                                if ":off" in line:
-                                       if data['acesspoint'] is not "Not-Associated":
-                                               enc = _("Unsupported")
-                                       else:
-                                               enc = _("Disabled")
-                               else:
+                                       enc = "off"
+                               elif "Security" in line:
                                        enc = line[line.index('Encryption key')+15 :line.index('   Security')]
                                        if enc is not None:
                                        enc = line[line.index('Encryption key')+15 :line.index('   Security')]
                                        if enc is not None:
-                                               enc = _("Enabled")
-                               #print "Encryption key",enc 
+                                               enc = "on"
+                               else:
+                                       enc = line[line.index('Encryption key')+15 :len(line)]
+                                       if enc is not None:
+                                               enc = "on"
                                if enc is not None:
                                        data['encryption'] = enc
                        if 'Quality' in line:
                                if "/100" in line:
                                if enc is not None:
                                        data['encryption'] = enc
                        if 'Quality' in line:
                                if "/100" in line:
-                                       qual = line[line.index('Quality')+8:line.index('/100')]
+                                       qual = line[line.index('Quality')+8:line.index('  Signal')]
                                else:
                                        qual = line[line.index('Quality')+8:line.index('Sig')]
                                else:
                                        qual = line[line.index('Quality')+8:line.index('Sig')]
-                               #print "Quality",qual
                                if qual is not None:
                                        data['quality'] = qual
                        if 'Signal level' in line:
                                if "dBm" in line:
                                if qual is not None:
                                        data['quality'] = qual
                        if 'Signal level' in line:
                                if "dBm" in line:
-                                       signal = line[line.index('Signal level')+14 :line.index(' dBm')]
-                                       signal += " dBm"
+                                       signal = line[line.index('Signal level')+13 :line.index(' dBm')] + " dBm"
                                elif "/100" in line:
                                elif "/100" in line:
-                                       signal = line[line.index('Signal level')+13:line.index('/100  Noise')]
-                                       signal += "%"
+                                       if "Noise" in line:
+                                               signal = line[line.index('Signal level')+13:line.index('  Noise')]
+                                       else:
+                                               signal = line[line.index('Signal level')+13:len(line)]
                                else:
                                else:
-                                       signal = line[line.index('Signal level')+13:line.index('  Noise')]
-                                       signal += "%"
-                               #print "Signal level",signal            
+                                       if "Noise" in line:
+                                               signal = line[line.index('Signal level')+13:line.index('  Noise')]
+                                       else:
+                                               signal = line[line.index('Signal level')+13:len(line)]                                          
                                if signal is not None:
                                        data['signal'] = signal
 
                                if signal is not None:
                                        data['signal'] = signal
 
@@ -510,17 +356,16 @@ class Status:
                
                if self.WlanConsole is not None:
                        if len(self.WlanConsole.appContainers) == 0:
                
                if self.WlanConsole is not None:
                        if len(self.WlanConsole.appContainers) == 0:
-                               print "self.wlaniface after loading:", self.wlaniface
-                               if callback is not None:
-                                       callback(True,self.wlaniface)
+                               print "[Wlan.py] self.wlaniface after loading:", self.wlaniface
+                               if self.statusCallback is not None:
+                                               self.statusCallback(True,self.wlaniface)
+                                               self.statusCallback = None
 
        def getAdapterAttribute(self, iface, attribute):
 
        def getAdapterAttribute(self, iface, attribute):
-               print "im getAdapterAttribute"
                self.iface = iface
                if self.wlaniface.has_key(self.iface):
                self.iface = iface
                if self.wlaniface.has_key(self.iface):
-                       print "self.wlaniface.has_key",self.iface
                        if self.wlaniface[self.iface].has_key(attribute):
                                return self.wlaniface[self.iface][attribute]
                return None
        
                        if self.wlaniface[self.iface].has_key(attribute):
                                return self.wlaniface[self.iface][attribute]
                return None
        
-iStatus = Status()
\ No newline at end of file
+iStatus = Status()