diff options
Diffstat (limited to 'wifi/java/android')
-rw-r--r-- | wifi/java/android/net/wifi/SupplicantState.java | 20 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiConfigStore.java | 12 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateMachine.java | 34 |
3 files changed, 53 insertions, 13 deletions
diff --git a/wifi/java/android/net/wifi/SupplicantState.java b/wifi/java/android/net/wifi/SupplicantState.java index 169b2d6..6b79210 100644 --- a/wifi/java/android/net/wifi/SupplicantState.java +++ b/wifi/java/android/net/wifi/SupplicantState.java @@ -152,6 +152,26 @@ public enum SupplicantState implements Parcelable { return state != UNINITIALIZED && state != INVALID; } + static boolean isConnecting(SupplicantState state) { + switch(state) { + case ASSOCIATING: + case ASSOCIATED: + case FOUR_WAY_HANDSHAKE: + case GROUP_HANDSHAKE: + case COMPLETED: + return true; + case DISCONNECTED: + case INACTIVE: + case SCANNING: + case DORMANT: + case UNINITIALIZED: + case INVALID: + return false; + default: + throw new IllegalArgumentException("Unknown supplicant state"); + } + } + /** Implement the Parcelable interface {@hide} */ public int describeContents() { return 0; diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index d411715..f6317f5 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -686,13 +686,15 @@ class WifiConfigStore { } else if (key.equals(IP_ASSIGNMENT_KEY)) { ipAssignment = IpAssignment.valueOf(in.readUTF()); } else if (key.equals(LINK_ADDRESS_KEY)) { - LinkAddress linkAddr = new LinkAddress(InetAddress.getByName( - in.readUTF()), in.readInt()); + LinkAddress linkAddr = new LinkAddress( + NetworkUtils.numericToInetAddress(in.readUTF()), in.readInt()); linkProperties.addLinkAddress(linkAddr); } else if (key.equals(GATEWAY_KEY)) { - linkProperties.addGateway(InetAddress.getByName(in.readUTF())); + linkProperties.addGateway( + NetworkUtils.numericToInetAddress(in.readUTF())); } else if (key.equals(DNS_KEY)) { - linkProperties.addDns(InetAddress.getByName(in.readUTF())); + linkProperties.addDns( + NetworkUtils.numericToInetAddress(in.readUTF())); } else if (key.equals(PROXY_SETTINGS_KEY)) { proxySettings = ProxySettings.valueOf(in.readUTF()); } else if (key.equals(PROXY_HOST_KEY)) { @@ -706,7 +708,7 @@ class WifiConfigStore { } else { Log.e(TAG, "Ignore unknown key " + key + "while reading"); } - } catch (UnknownHostException e) { + } catch (IllegalArgumentException e) { Log.e(TAG, "Ignore invalid address while reading" + e); } } while (true); diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index d6f8e51..589d88c 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -344,6 +344,9 @@ public class WifiStateMachine extends HierarchicalStateMachine { */ private static final long DEFAULT_SCAN_INTERVAL_MS = 60 * 1000; /* 1 minute */ + private static final int MIN_RSSI = -200; + private static final int MAX_RSSI = 256; + /* Default parent state */ private HierarchicalState mDefaultState = new DefaultState(); /* Temporary initial state */ @@ -996,7 +999,8 @@ public class WifiStateMachine extends HierarchicalStateMachine { ifcg = service.getInterfaceConfig(intf); if (ifcg != null) { /* IP/netmask: 192.168.43.1/255.255.255.0 */ - ifcg.addr = new LinkAddress(InetAddress.getByName("192.168.43.1"), 24); + ifcg.addr = new LinkAddress(NetworkUtils.numericToInetAddress( + "192.168.43.1"), 24); ifcg.interfaceFlags = "[up]"; service.setInterfaceConfig(intf, ifcg); @@ -1238,7 +1242,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { */ private void fetchRssiAndLinkSpeedNative() { int newRssi = WifiNative.getRssiCommand(); - if (newRssi != -1 && -200 < newRssi && newRssi < 256) { // screen out invalid values + if (newRssi != -1 && MIN_RSSI < newRssi && newRssi < MAX_RSSI) { // screen out invalid values /* some implementations avoid negative values by adding 256 * so we need to adjust for that here. */ @@ -1263,7 +1267,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { } mLastSignalLevel = newSignalLevel; } else { - mWifiInfo.setRssi(-200); + mWifiInfo.setRssi(MIN_RSSI); } int newLinkSpeed = WifiNative.getLinkSpeedCommand(); if (newLinkSpeed != -1) { @@ -1385,15 +1389,17 @@ public class WifiStateMachine extends HierarchicalStateMachine { /* Disable interface */ NetworkUtils.disableInterface(mInterfaceName); - /* send event to CM & network change broadcast */ - setNetworkDetailedState(DetailedState.DISCONNECTED); - sendNetworkStateChangeBroadcast(mLastBssid); - /* Reset data structures */ mWifiInfo.setInetAddress(null); mWifiInfo.setBSSID(null); mWifiInfo.setSSID(null); mWifiInfo.setNetworkId(-1); + mWifiInfo.setRssi(MIN_RSSI); + mWifiInfo.setLinkSpeed(-1); + + /* send event to CM & network change broadcast */ + setNetworkDetailedState(DetailedState.DISCONNECTED); + sendNetworkStateChangeBroadcast(mLastBssid); /* Clear network properties */ mLinkProperties.clear(); @@ -2362,7 +2368,10 @@ public class WifiStateMachine extends HierarchicalStateMachine { // 50023 supplicant_state_changed (custom|1|5) EventLog.writeEvent(EVENTLOG_SUPPLICANT_STATE_CHANGED, state.ordinal()); mWifiInfo.setSupplicantState(state); - mWifiInfo.setNetworkId(stateChangeResult.networkId); + // Network id is only valid when we start connecting + if (SupplicantState.isConnecting(state)) { + mWifiInfo.setNetworkId(stateChangeResult.networkId); + } if (state == SupplicantState.ASSOCIATING) { /* BSSID is valid only in ASSOCIATING state */ mWifiInfo.setBSSID(stateChangeResult.BSSID); @@ -2740,6 +2749,15 @@ public class WifiStateMachine extends HierarchicalStateMachine { } return HANDLED; } + @Override + public void exit() { + /* If a scan result is pending in connected state, the supplicant + * is in SCAN_ONLY_MODE. Restore CONNECT_MODE on exit + */ + if (mScanResultIsPending) { + WifiNative.setScanResultHandlingCommand(CONNECT_MODE); + } + } } class DisconnectingState extends HierarchicalState { |