summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorSohani Rao <sohanirao@google.com>2017-02-06 14:02:17 -0800
committerSohani Rao <sohanirao@google.com>2017-03-29 19:28:35 -0700
commit6459709af0e494f81c0b792566d9e8bee4b19d95 (patch)
tree0e789d04581bce2416220fb5854c07ae0709887c /service
parent32575fa7a506bf05edb20a37e59d42af981a0a13 (diff)
Send Auth failure reason in broadcast intent
SupplicantStateChange broadcast intent for authentication failure doesn't capture the reason for authentication failure. To indicate this reason to the user, use the newly defined (but hidden), auth failure codes to make the intent richer. Bug: 33245941 Test: Unit test Change-Id: I76496cfc7365103d9ec74b12d60bde772fcba801
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceHal.java7
-rw-r--r--service/java/com/android/server/wifi/SupplicantStateTracker.java31
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java14
3 files changed, 34 insertions, 18 deletions
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java b/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
index 681cf3a3e..f21c75490 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
@@ -43,6 +43,7 @@ import android.hidl.manager.V1_0.IServiceNotification;
import android.net.IpConfiguration;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
import android.net.wifi.WifiSsid;
import android.os.HwRemoteBinder;
import android.os.RemoteException;
@@ -1919,7 +1920,7 @@ public class SupplicantStaIfaceHal {
if (mStateIsFourway
&& (!locallyGenerated || reasonCode != WLAN_REASON_IE_IN_4WAY_DIFFERS)) {
mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiMonitor.AUTHENTICATION_FAILURE_REASON_WRONG_PSWD);
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD);
}
mWifiMonitor.broadcastNetworkDisconnectionEvent(
mIfaceName, locallyGenerated ? 1 : 0, reasonCode,
@@ -1941,7 +1942,7 @@ public class SupplicantStaIfaceHal {
logCallback("onAuthenticationTimeout");
synchronized (mLock) {
mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiMonitor.AUTHENTICATION_FAILURE_REASON_TIMEOUT);
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_TIMEOUT);
}
}
@@ -1964,7 +1965,7 @@ public class SupplicantStaIfaceHal {
logCallback("onEapFailure");
synchronized (mLock) {
mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiMonitor.AUTHENTICATION_FAILURE_REASON_EAP_FAILURE);
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE);
}
}
diff --git a/service/java/com/android/server/wifi/SupplicantStateTracker.java b/service/java/com/android/server/wifi/SupplicantStateTracker.java
index 9ba64b9bc..cac7f06df 100644
--- a/service/java/com/android/server/wifi/SupplicantStateTracker.java
+++ b/service/java/com/android/server/wifi/SupplicantStateTracker.java
@@ -55,6 +55,14 @@ public class SupplicantStateTracker extends StateMachine {
* for all type of failures: EAP, WPS & WPA networks */
private boolean mAuthFailureInSupplicantBroadcast = false;
+ /* Authentication failure reason
+ * see {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_NONE},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_TIMEOUT},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_WRONG_PSWD},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_EAP_FAILURE}
+ */
+ private int mAuthFailureReason;
+
/* Maximum retries on a authentication failure notification */
private static final int MAX_RETRIES_ON_AUTHENTICATION_FAILURE = 2;
@@ -171,6 +179,11 @@ public class SupplicantStateTracker extends StateMachine {
}
private void sendSupplicantStateChangedBroadcast(SupplicantState state, boolean failedAuth) {
+ sendSupplicantStateChangedBroadcast(state, failedAuth, WifiManager.ERROR_AUTH_FAILURE_NONE);
+ }
+
+ private void sendSupplicantStateChangedBroadcast(SupplicantState state, boolean failedAuth,
+ int reasonCode) {
int supplState;
switch (state) {
case DISCONNECTED: supplState = BatteryStats.WIFI_SUPPL_STATE_DISCONNECTED; break;
@@ -204,8 +217,11 @@ public class SupplicantStateTracker extends StateMachine {
intent.putExtra(WifiManager.EXTRA_NEW_STATE, (Parcelable) state);
if (failedAuth) {
intent.putExtra(
- WifiManager.EXTRA_SUPPLICANT_ERROR,
- WifiManager.ERROR_AUTHENTICATING);
+ WifiManager.EXTRA_SUPPLICANT_ERROR,
+ WifiManager.ERROR_AUTHENTICATING);
+ intent.putExtra(
+ WifiManager.EXTRA_SUPPLICANT_ERROR_REASON,
+ reasonCode);
}
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
}
@@ -225,12 +241,15 @@ public class SupplicantStateTracker extends StateMachine {
switch (message.what) {
case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
mAuthFailureInSupplicantBroadcast = true;
+ mAuthFailureReason = message.arg2;
break;
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
SupplicantState state = stateChangeResult.state;
- sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast);
+ sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast,
+ mAuthFailureReason);
mAuthFailureInSupplicantBroadcast = false;
+ mAuthFailureReason = WifiManager.ERROR_AUTH_FAILURE_NONE;
transitionOnSupplicantStateChange(stateChangeResult);
break;
case WifiStateMachine.CMD_RESET_SUPPLICANT_STATE:
@@ -332,7 +351,7 @@ public class SupplicantStateTracker extends StateMachine {
}
mLoopDetectIndex = state.ordinal();
sendSupplicantStateChangedBroadcast(state,
- mAuthFailureInSupplicantBroadcast);
+ mAuthFailureInSupplicantBroadcast, mAuthFailureReason);
} else {
//Have the DefaultState handle the transition
return NOT_HANDLED;
@@ -361,7 +380,8 @@ public class SupplicantStateTracker extends StateMachine {
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
SupplicantState state = stateChangeResult.state;
- sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast);
+ sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast,
+ mAuthFailureReason);
/* Ignore any connecting state in completed state. Group re-keying
* events and other auth events that do not affect connectivity are
* ignored
@@ -390,6 +410,7 @@ public class SupplicantStateTracker extends StateMachine {
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
super.dump(fd, pw, args);
pw.println("mAuthFailureInSupplicantBroadcast " + mAuthFailureInSupplicantBroadcast);
+ pw.println("mAuthFailureReason " + mAuthFailureReason);
pw.println("mNetworksDisabledDuringConnect " + mNetworksDisabledDuringConnect);
pw.println();
}
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index 6c8ac813f..d1903a0de 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -96,15 +96,6 @@ public class WifiMonitor {
/* hotspot 2.0 events */
public static final int HS20_REMEDIATION_EVENT = BASE + 61;
- /**
- * Authentication Failure reasonCode, used internally by WifiStateMachine
- * @hide
- */
- public static final int AUTHENTICATION_FAILURE_REASON_DEFAULT = 0;
- public static final int AUTHENTICATION_FAILURE_REASON_TIMEOUT = 1;
- public static final int AUTHENTICATION_FAILURE_REASON_WRONG_PSWD = 2;
- public static final int AUTHENTICATION_FAILURE_REASON_EAP_FAILURE = 3;
-
/* WPS config errrors */
private static final int CONFIG_MULTIPLE_PBC_DETECTED = 12;
private static final int CONFIG_AUTH_FAILURE = 18;
@@ -480,7 +471,10 @@ public class WifiMonitor {
*
* @param iface Name of iface on which this occurred.
* @param reason Reason for authentication failure. This has to be one of the
- * |AUTHENTICATION_FAILURE_REASON_*| reason codes.
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_NONE},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_TIMEOUT},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_WRONG_PSWD},
+ * {@link android.net.wifi.WifiManager#ERROR_AUTH_FAILURE_EAP_FAILURE}
*/
public void broadcastAuthenticationFailureEvent(String iface, int reason) {
sendMessage(iface, AUTHENTICATION_FAILURE_EVENT, 0, reason);