diff options
Diffstat (limited to 'service/java/com/android/server/wifi/WifiStateMachine.java')
-rw-r--r-- | service/java/com/android/server/wifi/WifiStateMachine.java | 116 |
1 files changed, 74 insertions, 42 deletions
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index e02579937..8afbad3c5 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -756,6 +756,9 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno /* alert from firmware */ static final int CMD_FIRMWARE_ALERT = BASE + 100; + /* SIM is removed; reset any cached data for it */ + static final int CMD_RESET_SIM_NETWORKS = BASE + 101; + /** * Make this timer 40 seconds, which is about the normal DHCP timeout. * In no valid case, the WiFiStateMachine should remain stuck in ObtainingIpAddress @@ -1150,7 +1153,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno mP2pSupported = mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_WIFI_DIRECT); - mWifiNative = new WifiNative(mInterfaceName); + mWifiNative = new WifiNative(mInterfaceName, mContext); mWifiConfigStore = new WifiConfigStore(context,this, mWifiNative); mWifiAutoJoinController = new WifiAutoJoinController(context, this, mWifiConfigStore, mWifiConnectionStatistics, mWifiNative); @@ -1975,14 +1978,13 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno || workSource != null)) { mScanWorkSource = workSource != null ? workSource : new WorkSource(callingUid); - WorkSource batteryWorkSource = mScanWorkSource; if (mScanWorkSource.size() == 1 && mScanWorkSource.get(0) < 0) { // WiFi uses negative UIDs to mean special things. BatteryStats don't care! - batteryWorkSource = new WorkSource(Process.WIFI_UID); + mScanWorkSource = new WorkSource(Process.WIFI_UID); } try { - mBatteryStats.noteWifiScanStartedFromSource(batteryWorkSource); + mBatteryStats.noteWifiScanStartedFromSource(mScanWorkSource); } catch (RemoteException e) { log(e.toString()); } @@ -2539,6 +2541,14 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } /** + * reset cached SIM credential data + */ + public synchronized void resetSimAuthNetworks() { + sendMessage(CMD_RESET_SIM_NETWORKS); + } + + + /** * Get Network object of current wifi network * @return Network object of current wifi network */ @@ -2718,13 +2728,10 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno * ****************************************************** */ - private void logStateAndMessage(Message message, String state) { + private void logStateAndMessage(Message message, State state) { messageHandlingStatus = 0; if (mLogMessages) { - //long now = SystemClock.elapsedRealtimeNanos(); - //String ts = String.format("[%,d us]", now/1000); - - logd(" " + state + " " + getLogRecString(message)); + logd(" " + state.getClass().getSimpleName() + " " + getLogRecString(message)); } } @@ -5738,7 +5745,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno class DefaultState extends State { @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: { @@ -6027,7 +6034,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case CMD_START_SUPPLICANT: /* Stop a running supplicant after a runtime restart @@ -6138,7 +6145,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case WifiMonitor.SUP_CONNECTION_EVENT: @@ -6240,7 +6247,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_STOP_SUPPLICANT: /* Supplicant stopped by user */ @@ -6339,9 +6346,15 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno mWifiP2pChannel.sendMessage(WifiP2pServiceImpl.SET_COUNTRY_CODE, country); break; + case CMD_GET_IBSS_SUPPORTED: deferMessage(message); break; + + case CMD_RESET_SIM_NETWORKS: + log("resetting EAP-SIM/AKA/AKA' networks since SIM was removed"); + mWifiConfigStore.resetSimNetworks(); + break; default: return NOT_HANDLED; } @@ -6382,7 +6395,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case WifiMonitor.SUP_CONNECTION_EVENT: @@ -6431,7 +6444,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: @@ -6591,7 +6604,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_START_SCAN: @@ -6789,7 +6802,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case WifiStateMachine.CMD_DISABLE_P2P_RSP: @@ -6825,7 +6838,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno class DriverStoppingState extends State { @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: @@ -6858,7 +6871,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno class DriverStoppedState extends State { @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: StateChangeResult stateChangeResult = (StateChangeResult) message.obj; @@ -6890,7 +6903,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_SET_OPERATIONAL_MODE: @@ -7448,7 +7461,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno String bssid; String ssid; NetworkUpdateResult result; - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case WifiMonitor.ASSOCIATION_REJECTION_EVENT: @@ -8540,7 +8553,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case DhcpStateMachine.CMD_PRE_DHCP_ACTION: @@ -8863,6 +8876,17 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno case CMD_STOP_RSSI_MONITORING_OFFLOAD: stopRssiMonitoringOffload(); break; + case CMD_RESET_SIM_NETWORKS: + if (mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID) { + WifiConfiguration config = + mWifiConfigStore.getWifiConfiguration(mLastNetworkId); + if (mWifiConfigStore.isSimConfig(config)) { + mWifiNative.disconnect(); + transitionTo(mDisconnectingState); + } + } + /* allow parent state to reset data for other networks */ + return NOT_HANDLED; default: return NOT_HANDLED; } @@ -8951,7 +8975,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_STATIC_IP_SUCCESS: @@ -9010,7 +9034,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case WifiWatchdogStateMachine.POOR_LINK_DETECTED: @@ -9074,7 +9098,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); WifiConfiguration config; switch (message.what) { case CMD_IP_CONFIGURATION_LOST: @@ -9259,7 +9283,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { WifiConfiguration config = null; - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case CMD_RESTART_AUTOJOIN_OFFLOAD: @@ -9557,7 +9581,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case CMD_SET_OPERATIONAL_MODE: if (message.arg1 != CONNECT_MODE) { @@ -9661,7 +9685,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno public boolean processMessage(Message message) { boolean ret = HANDLED; - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case CMD_NO_NETWORKS_PERIODIC_SCAN: @@ -9931,7 +9955,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch (message.what) { case WifiMonitor.WPS_SUCCESS_EVENT: @@ -10055,7 +10079,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_START_SUPPLICANT: @@ -10099,7 +10123,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno class SoftApStartedState extends State { @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_STOP_AP: @@ -10143,7 +10167,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_TETHER_STATE_CHANGE: @@ -10184,7 +10208,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno class TetheredState extends State { @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_TETHER_STATE_CHANGE: @@ -10220,7 +10244,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } @Override public boolean processMessage(Message message) { - logStateAndMessage(message, getClass().getSimpleName()); + logStateAndMessage(message, this); switch(message.what) { case CMD_TETHER_STATE_CHANGE: @@ -10486,16 +10510,19 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno String kc = makeHex(result, 1+kc_offset, kc_len); sb.append(":" + kc + ":" + sres); logv("kc:" + kc + " sres:" + sres); + + String response = sb.toString(); + logv("Supplicant Response -" + response); + mWifiNative.simAuthResponse(requestData.networkId, "GSM-AUTH", response); } else { loge("bad response - " + tmResponse); + mWifiNative.simAuthFailedResponse(requestData.networkId); } } - String response = sb.toString(); - logv("Supplicant Response -" + response); - mWifiNative.simAuthResponse(requestData.networkId, "GSM-AUTH", response); } else { loge("could not get telephony manager"); + mWifiNative.simAuthFailedResponse(requestData.networkId); } } @@ -10539,6 +10566,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno } } + boolean good_response = false; if (tmResponse != null && tmResponse.length() > 4) { byte[] result = android.util.Base64.decode(tmResponse, android.util.Base64.DEFAULT); @@ -10554,6 +10582,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno String ik = makeHex(result, res_len + ck_len + 4, ik_len); sb.append(":" + ik + ":" + ck + ":" + res); logv("ik:" + ik + "ck:" + ck + " res:" + res); + good_response = true; } else if (tag == (byte) 0xdc) { loge("synchronisation failure"); int auts_len = result[1]; @@ -10561,18 +10590,21 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno res_type = "UMTS-AUTS"; sb.append(":" + auts); logv("auts:" + auts); + good_response = true; } else { loge("bad response - unknown tag = " + tag); - return; } } else { loge("bad response - " + tmResponse); - return; } - String response = sb.toString(); - logv("Supplicant Response -" + response); - mWifiNative.simAuthResponse(requestData.networkId, res_type, response); + if (good_response) { + String response = sb.toString(); + if (VDBG) logv("Supplicant Response -" + response); + mWifiNative.simAuthResponse(requestData.networkId, res_type, response); + } else { + mWifiNative.umtsAuthFailedResponse(requestData.networkId); + } } /** |