mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-21 08:14:00 +08:00
WifiManager: fix NEED_AUTH for wrong network (#37320)
* stash * test seemed to work * simplify * clean up * move under * Revert "move under" This reverts commit ce940cffb32378cbe5a69edaf6fc9d9cec202e54. * back * fix
This commit is contained in:
@@ -146,6 +146,7 @@ class ConnectStatus(IntEnum):
|
||||
@dataclass
|
||||
class WifiState:
|
||||
ssid: str | None = None
|
||||
prev_ssid: str | None = None
|
||||
status: ConnectStatus = ConnectStatus.DISCONNECTED
|
||||
|
||||
|
||||
@@ -284,7 +285,10 @@ class WifiManager:
|
||||
return self._tethering_password
|
||||
|
||||
def _set_connecting(self, ssid: str | None):
|
||||
self._wifi_state = WifiState(ssid=ssid, status=ConnectStatus.DISCONNECTED if ssid is None else ConnectStatus.CONNECTING)
|
||||
# Track prev ssid so late NEED_AUTH signals target the right network
|
||||
self._wifi_state = WifiState(ssid=ssid,
|
||||
prev_ssid=self.connecting_to_ssid if ssid is not None else None,
|
||||
status=ConnectStatus.DISCONNECTED if ssid is None else ConnectStatus.CONNECTING)
|
||||
|
||||
def _enqueue_callbacks(self, cbs: list[Callable], *args):
|
||||
for cb in cbs:
|
||||
@@ -391,16 +395,18 @@ class WifiManager:
|
||||
|
||||
self._wifi_state = wifi_state
|
||||
|
||||
# BAD PASSWORD
|
||||
# BAD PASSWORD - use prev if current has already moved on to a new connection
|
||||
# - strong network rejects with NEED_AUTH+SUPPLICANT_DISCONNECT
|
||||
# - weak/gone network fails with FAILED+NO_SECRETS
|
||||
elif ((new_state == NMDeviceState.NEED_AUTH and change_reason == NMDeviceStateReason.SUPPLICANT_DISCONNECT) or
|
||||
(new_state == NMDeviceState.FAILED and change_reason == NMDeviceStateReason.NO_SECRETS)):
|
||||
|
||||
if self._wifi_state.ssid:
|
||||
self._enqueue_callbacks(self._need_auth, self._wifi_state.ssid)
|
||||
|
||||
self._set_connecting(None)
|
||||
failed_ssid = self._wifi_state.prev_ssid or self._wifi_state.ssid
|
||||
if failed_ssid:
|
||||
self._enqueue_callbacks(self._need_auth, failed_ssid)
|
||||
self._wifi_state.prev_ssid = None
|
||||
if self._wifi_state.ssid == failed_ssid:
|
||||
self._set_connecting(None)
|
||||
|
||||
elif new_state in (NMDeviceState.NEED_AUTH, NMDeviceState.IP_CONFIG, NMDeviceState.IP_CHECK,
|
||||
NMDeviceState.SECONDARIES, NMDeviceState.FAILED):
|
||||
@@ -410,7 +416,7 @@ class WifiManager:
|
||||
# Note that IP address from Ip4Config may not be propagated immediately and could take until the next scan results
|
||||
self._update_networks()
|
||||
|
||||
wifi_state = replace(self._wifi_state, status=ConnectStatus.CONNECTED)
|
||||
wifi_state = replace(self._wifi_state, prev_ssid=None, status=ConnectStatus.CONNECTED)
|
||||
|
||||
conn_path, _ = self._get_active_wifi_connection(self._conn_monitor)
|
||||
if conn_path is None:
|
||||
|
||||
Reference in New Issue
Block a user