MCPcopy Create free account
hub / github.com/PierreGode/Ragnar / _set_current_ssid

Method _set_current_ssid

wifi_manager.py:288–341  ·  view source on GitHub ↗

Update current SSID and propagate to storage with debounce. First-time establishment (no active network yet) propagates immediately so the per-network DB switches before the next scan cycle. Subsequent *changes* between known SSIDs are debounced: a transient misread of

(self, ssid)

Source from the content-addressed store, hash-verified

286 ssid = str(entry).strip()
287 if ssid and ssid not in seen:
288 known_ssids.append(ssid)
289 seen.add(ssid)
290 except Exception as exc:
291 self.logger.debug(f"Unable to enumerate known SSIDs: {exc}")
292 return known_ssids
293
294 def _run_iwlist_scan(self, interface, *, system_profiles=None, known_ssids=None, log_target=None):
295 """Execute iwlist scan and return normalized network list."""
296 logger_target = log_target or self.logger
297 system_profiles = set(system_profiles or [])
298 known_set = set(known_ssids or self._get_known_ssids())
299 cmd = ['sudo', 'iwlist', interface, 'scan']
300 logger_target.debug(f"Running iwlist scan on {interface}: {' '.join(cmd)}")
301 try:
302 result = subprocess.run(cmd, capture_output=True, text=True, timeout=20)
303 except FileNotFoundError:
304 logger_target.warning("iwlist command not available; cannot perform fallback scan")
305 return []
306 except Exception as exc:
307 logger_target.warning(f"iwlist scan execution failed: {exc}")
308 return []
309
310 if result.returncode != 0:
311 stderr_snippet = (result.stderr or '').strip()
312 logger_target.warning(f"iwlist scan returned code {result.returncode} on {interface}: {stderr_snippet}")
313 return []
314
315 parsed_networks = self._parse_iwlist_output(result.stdout or '') or []
316 if not parsed_networks:
317 logger_target.info(f"iwlist scan on {interface} returned no parseable networks")
318 return []
319
320 deduped = {}
321 for network in parsed_networks:
322 ssid = network.get('ssid')
323 if not ssid or ssid == self.ap_ssid:
324 continue
325 try:
326 signal = int(network.get('signal', 0) or 0)
327 except (TypeError, ValueError):
328 signal = 0
329 existing = deduped.get(ssid)
330 if not existing or signal > existing.get('signal', 0):
331 enriched = {
332 'ssid': ssid,
333 'signal': signal,
334 'security': network.get('security', 'Unknown'),
335 'known': ssid in known_set or ssid in system_profiles,
336 'has_system_profile': ssid in system_profiles,
337 'scan_method': 'iwlist'
338 }
339 deduped[ssid] = enriched
340
341 final_networks = sorted(deduped.values(), key=lambda x: x.get('signal', 0), reverse=True)
342 logger_target.info(f"iwlist scan discovered {len(final_networks)} networks on {interface}")
343 return final_networks
344

Calls 3

debugMethod · 0.80
infoMethod · 0.80