Hi all,
I have created a patch which indexes the hidden ESSIDs when loading
profiles and checks for the recognized hidden ESSIDs before each scan.
Best regards,
--
Daniele C.
Patch for wicd-1.6.0 which indexes the hidden ESSIDs when loading profiles and
checks for
the recognized hidden ESSIDs before each scan.
Daniele C. (aka legolas558)
diff -ur wicd-orig/gui.py wicd-patched/gui.py
--- wicd-orig/gui.py 2009-06-12 19:03:09.000000000 +0200
+++ wicd-patched/gui.py 2009-07-03 11:50:58.000000000 +0200
@@ -498,7 +498,7 @@
"""
if fresh:
if hidden:
- wireless.SetHiddenNetworkESSID(noneToString(hidden))
+ wireless.AddHiddenNetworkESSID(noneToString(hidden))
self.refresh_clicked()
return
print "refreshing..."
diff -ur wicd-orig/networking.py wicd-patched/networking.py
--- wicd-orig/networking.py 2009-06-12 19:03:09.000000000 +0200
+++ wicd-patched/networking.py 2009-07-03 12:11:19.000000000 +0200
@@ -554,12 +554,9 @@
self.wiface =
self._backend.WirelessInterface(self.wireless_interface,
self.debug,
self.wpa_driver)
- def Scan(self, essid=None):
+ def Scan(self, hidden_essids):
""" Scan for available wireless networks.
- Keyword arguments:
- essid -- The essid of a hidden network
-
Returns:
A list of available networks sorted by strength.
@@ -577,15 +574,39 @@
# Prepare the interface for scanning
wiface.Up()
- # If there is a hidden essid then set it now, so that when it is
- # scanned it will be recognized.
- essid = misc.Noneify(essid)
- if essid is not None:
- print 'Setting hidden essid' + essid
- wiface.SetEssid(essid)
-
- aps = wiface.GetNetworks()
- aps.sort(cmp=comp, reverse=True)
+ if len(hidden_essids) != 0:
+ recognized_aps = []
+ # scan network interface after setting each hidden network ESSID
+ for essid in hidden_essids:
+ print 'Setting hidden essid ' + essid
+ wiface.SetEssid(essid)
+ t_aps = wiface.GetNetworks()
+ # save only the recognized hidden network AP info
+ for ap in t_aps:
+ if ap['hidden'] == True and ap['essid'] ==
essid:
+ recognized_aps.append(ap)
+ # replace hidden networks with the recognized hidden networks
+ aps = []
+ for ap in t_aps:
+ if ap['hidden'] == True:
+ ap_found = False
+ for hidden_ap in recognized_aps:
+ if ap['bssid'] == hidden_ap['bssid']:
+ aps.append(hidden_ap)
+ recognized_aps.remove(hidden_ap)
+ ap_found = True
+ break
+ # add the hidden network anyway if was not in
the recognized list
+ if ap_found == False:
+ aps.append(ap)
+ else:
+ # always add the non-hidden network
+ aps.append(ap)
+ else:
+ aps = wiface.GetNetworks()
+
+ # finally sort retrieved APs
+ aps.sort(cmp=comp, reverse=True)
return aps
diff -ur wicd-orig/wicd-curses.py wicd-patched/wicd-curses.py
--- wicd-orig/wicd-curses.py 2009-06-05 09:23:03.000000000 +0200
+++ wicd-patched/wicd-curses.py 2009-07-03 11:59:00.000000000 +0200
@@ -567,7 +567,7 @@
def doScan(self, sync=False):
self.scanning = True
- wireless.Scan(False)
+ wireless.Scan(sync)
def init_other_optcols(self):
# The "tabbed" preferences dialog
@@ -603,9 +603,9 @@
if exitcode != -1:
# That dialog will sit there for a while if I don't get rid of it
self.update_ui()
- wireless.SetHiddenNetworkESSID(misc.noneToString(hidden))
+ wireless.AddHiddenNetworkESSID(misc.noneToString(hidden))
wireless.Scan(False)
- wireless.SetHiddenNetworkESSID("")
+ #wireless.SetHiddenNetworkESSID("")
def update_focusloc(self):
# Location of last known focus is remapped to current location.
diff -ur wicd-orig/wicd-daemon.py wicd-patched/wicd-daemon.py
--- wicd-orig/wicd-daemon.py 2009-06-05 09:23:03.000000000 +0200
+++ wicd-patched/wicd-daemon.py 2009-07-03 13:41:53.000000000 +0200
@@ -934,7 +934,7 @@
""" Intitialize the wireless DBus interface. """
dbus.service.Object.__init__(self, bus_name=bus_name,
object_path='/org/wicd/daemon/wireless')
- self.hidden_essid = None
+ self.hidden_essids = []
self.daemon = daemon
self.wifi = wifi
self._debug_mode = debug
@@ -952,16 +952,19 @@
debug_mode = property(get_debug_mode, set_debug_mode)
@dbus.service.method('org.wicd.daemon.wireless')
- def SetHiddenNetworkESSID(self, essid):
+ def AddHiddenNetworkESSID(self, essid):
""" Sets the ESSID of a hidden network for use with Scan(). """
- self.hidden_essid = str(misc.Noneify(essid))
+ essid = str(misc.Noneify(essid))
+ if essid is not None and essid not in self.hidden_essids:
+ #print "Added hidden network " + essid
+ self.hidden_essids.append( essid )
@dbus.service.method('org.wicd.daemon.wireless')
def Scan(self, sync=False):
""" Scan for wireless networks.
- Scans for wireless networks, optionally using a (hidden) essid
- set with SetHiddenNetworkESSID.
+ Scans for wireless networks, optionally using the hidden essids
+ set with AddHiddenNetworkESSID.
The sync keyword argument specifies whether the scan should
be done synchronously.
@@ -987,7 +990,7 @@
def _sync_scan(self):
""" Run a scan and send a signal when its finished. """
- scan = self.wifi.Scan(str(self.hidden_essid))
+ scan = self.wifi.Scan(self.hidden_essids)
self.LastScan = scan
if self.debug_mode:
print 'scanning done'
@@ -1191,8 +1194,9 @@
# Read the essid because we need to name those hidden
# wireless networks now - but only read it if it is hidden.
if cur_network["hidden"]:
- if cur_network.get("essid") in ["", "Hidden", "<hidden>", None]:
- cur_network["essid"] = "<hidden>"
+ essid = cur_network.get("essid")
+ if essid in ["", "Hidden", "<hidden>", None]:
+ cur_network['essid'] =
self.config.get_option(cur_network['bssid'], 'essid', '<hidden>')
return "100: Loaded Profile"
@dbus.service.method('org.wicd.daemon.wireless')