summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiStateMachine.java
diff options
context:
space:
mode:
Diffstat (limited to 'service/java/com/android/server/wifi/WifiStateMachine.java')
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java116
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);
+ }
}
/**