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')

Reply via email to