from Components.MenuList import MenuList
from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
from Components.ConfigList import ConfigListScreen
-from Components.Network import Network, iNetwork
+from Components.Network import iNetwork
from Components.Console import Console
from Plugins.Plugin import PluginDescriptor
from os import system, path as os_path, listdir
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
from Tools.LoadPixmap import LoadPixmap
from Tools.HardwareInfo import HardwareInfo
-from Wlan import Wlan, wpaSupplicant, iStatus
-import sha
+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.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 = 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):
<screen name="WlanStatus" position="center,center" size="560,400" title="Wireless Network State" >
<ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
<widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
-
- <widget source="LabelBSSID" render="Label" position="10,60" size="250,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="LabelESSID" render="Label" position="10,100" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="LabelQuality" render="Label" position="10,140" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="LabelSignal" render="Label" position="10,180" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="LabelBitrate" render="Label" position="10,220" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="LabelEnc" render="Label" position="10,260" size="250,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
-
- <widget source="BSSID" render="Label" position="320,60" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="ESSID" render="Label" position="320,100" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="quality" render="Label" position="320,140" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="signal" render="Label" position="320,180" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="bitrate" render="Label" position="320,220" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget source="enc" render="Label" position="320,260" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+
+ <widget source="LabelBSSID" render="Label" position="10,60" size="200,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="LabelESSID" render="Label" position="10,100" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="LabelQuality" render="Label" position="10,140" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="LabelSignal" render="Label" position="10,180" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="LabelBitrate" render="Label" position="10,220" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="LabelEnc" render="Label" position="10,260" size="200,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="BSSID" render="Label" position="220,60" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="ESSID" render="Label" position="220,100" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="quality" render="Label" position="220,140" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="signal" render="Label" position="220,180" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="bitrate" render="Label" position="220,220" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget source="enc" render="Label" position="220,260" size="330,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
<ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
<widget source="IFtext" render="Label" position="10,355" size="120,21" zPosition="10" font="Regular;20" halign="left" backgroundColor="#25062748" transparent="1" />
}, -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)
iStatus.stopWlanConsole()
def layoutFinished(self):
- self.setTitle(_("Wireless Network State"))
+ self.setTitle(_("Wireless network state"))
def resetList(self):
iStatus.getDataForInterface(self.iface,self.getInfoCB)
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)
"red": self.cancel,
"green": self.select,
})
+ iWlan.setInterface(self.iface)
+ self.w = iWlan.getInterface()
self.onLayoutFinish.append(self.layoutFinished)
self.getAccessPoints(refresh = False)
def select(self):
cur = self["list"].getCurrent()
if cur is not None:
+ 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:
- self.rescanTimer.stop()
- del self.rescanTimer
- self.close(None,None)
-
- def WlanSetupClosed(self, *ret):
- if ret[0] == 2:
+ iWlan.stopGetNetworkList()
self.rescanTimer.stop()
del self.rescanTimer
self.close(None)
def cancel(self):
- if self.oldInterfaceState is False:
- iNetwork.setAdapterAttribute(self.iface, "up", False)
- iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
- else:
- self.rescanTimer.stop()
- del self.rescanTimer
- self.close(None)
-
- def deactivateInterfaceCB(self,data):
- if data is not None:
- if data is True:
- self.rescanTimer.stop()
- del self.rescanTimer
- self.close(None)
+ iWlan.stopGetNetworkList()
+ self.rescanTimer.stop()
+ del self.rescanTimer
+ self.close(None)
def rescanTimerFired(self):
self.rescanTimer.stop()
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 = []
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()
def getAccessPoints(self, refresh = False):
self.APList = []
self.cleanList = []
- self.w = Wlan(self.iface)
- aps = self.w.getNetworkList()
+ aps = iWlan.getNetworkList()
if aps is not None:
print "[WirelessLan.py] got Accespoints!"
tmpList = []
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] ))
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...":
- self.WlanList.append(( "hidden...",_("enter hidden network SSID") ))#continue
- else:
- self.WlanList.append( (entry[0], entry[0]) )
+ self.WlanList.append( (entry[0], entry[0]) )
def getLength(self):
return self.listLength
if len(src) != 128 and len(src) != 202:
return None
dest = rsa_pub1024(src[:128], mod)
- hash = sha.new(dest[1:107])
+ hash = hashlib.sha1(dest[1:107])
if len(src) == 202:
hash.update(src[131:192])
result = hash.digest()
return dest
return None
-def validate_cert(cert, key):
+def validate_certificate(cert, key):
buf = decrypt_block(cert[8:], key)
if buf is None:
return None
return buf[36:107] + cert[139:196]
-def read_random():
+def get_random():
try:
- fd = open("/dev/urandom", "r")
- buf = fd.read(8)
- fd.close()
- return buf
+ xor = lambda a,b: ''.join(chr(ord(c)^ord(d)) for c,d in zip(a,b*100))
+ random = urandom(8)
+ x = str(time())[-8:]
+ result = xor(random, x)
+
+ return result
except:
return None
def WlanStatusScreenMain(session, iface):
session.open(WlanStatus, iface)
-
def callFunction(iface):
- w = Wlan(iface)
- i = w.getWirelessInterfaces()
+ iWlan.setInterface(iface)
+ i = iWlan.getWirelessInterfaces()
if i:
- if iface in i:
+ if iface in i or iNetwork.isWirelessInterface(iface):
return WlanStatusScreenMain
+ return None
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)
if l2cert is None:
return
- l2key = validate_cert(l2cert, rootkey)
+ l2key = validate_certificate(l2cert, rootkey)
if l2key is None:
return
l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
if l3cert is None:
- print "better run the genuine dreambox plugin"
return
- l3key = validate_cert(l3cert, l2key)
+ l3key = validate_certificate(l3cert, l2key)
if l3key is None:
return
- rnd = read_random()
+ rnd = get_random()
if rnd is None:
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'
- if driver in ('ralink', 'zydas'):
- return " pre-up /usr/sbin/wpa_supplicant -i"+iface+" -c/etc/wpa_supplicant.conf -B -D"+driver+"\n post-down wpa_cli terminate"
- else:
- if config.plugins.wlan.essid.value == "hidden...":
- return ' pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.hiddenessid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n post-down wpa_cli terminate'
- else:
- return ' pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.essid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n post-down wpa_cli terminate'
+ print 'Using "%s" as wpa-supplicant driver' % (driver)
+ ret = ""
+ if driver == 'madwifi' and config.plugins.wlan.hiddenessid.value:
+ 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
def Plugins(**kwargs):
return PluginDescriptor(name=_("Wireless LAN"), description=_("Connect to a Wireless Network"), where = PluginDescriptor.WHERE_NETWORKSETUP, needsRestart = False, fnc={"ifaceSupported": callFunction, "configStrings": configStrings, "WlanPluginEntry": lambda x: "Wireless Network Configuartion..."})