Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32f4ab45 authored by Irfan Sheriff's avatar Irfan Sheriff Committed by Android (Google) Code Review
Browse files

Merge "WPS fixes and refactor"

parents 21c7fe22 02fb46a2
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -173,14 +173,17 @@ static jboolean android_net_wifi_wpsPbcCommand(JNIEnv* env, jobject clazz, jstri
    return doBooleanCommand(cmdstr, "OK");
}

static jboolean android_net_wifi_wpsPinFromAccessPointCommand(JNIEnv* env, jobject clazz, jstring bssid, int apPin)
static jboolean android_net_wifi_wpsPinFromAccessPointCommand(JNIEnv* env, jobject clazz,
        jstring bssid, jstring apPin)
{
    char cmdstr[BUF_SIZE];
    jboolean isCopy;

    const char *bssidStr = env->GetStringUTFChars(bssid, &isCopy);
    int numWritten = snprintf(cmdstr, sizeof(cmdstr), "WPS_REG %s %d", bssidStr, apPin);
    const char *apPinStr = env->GetStringUTFChars(apPin, &isCopy);
    int numWritten = snprintf(cmdstr, sizeof(cmdstr), "WPS_REG %s %s", bssidStr, apPinStr);
    env->ReleaseStringUTFChars(bssid, bssidStr);
    env->ReleaseStringUTFChars(apPin, apPinStr);

    if ((numWritten == -1) || (numWritten >= (int)sizeof(cmdstr))) {
        return false;
@@ -188,7 +191,7 @@ static jboolean android_net_wifi_wpsPinFromAccessPointCommand(JNIEnv* env, jobje
    return doBooleanCommand(cmdstr, "OK");
}

static jint android_net_wifi_wpsPinFromDeviceCommand(JNIEnv* env, jobject clazz, jstring bssid)
static jstring android_net_wifi_wpsPinFromDeviceCommand(JNIEnv* env, jobject clazz, jstring bssid)
{
    char cmdstr[BUF_SIZE];
    jboolean isCopy;
@@ -198,9 +201,9 @@ static jint android_net_wifi_wpsPinFromDeviceCommand(JNIEnv* env, jobject clazz,
    env->ReleaseStringUTFChars(bssid, bssidStr);

    if ((numWritten == -1) || (numWritten >= (int)sizeof(cmdstr))) {
        return -1;
        return NULL;
    }
    return doIntCommand(cmdstr);
    return doStringCommand(env, cmdstr);
}

static jboolean android_net_wifi_setCountryCodeCommand(JNIEnv* env, jobject clazz, jstring country)
@@ -648,9 +651,9 @@ static JNINativeMethod gWifiMethods[] = {
    { "addToBlacklistCommand", "(Ljava/lang/String;)Z", (void*) android_net_wifi_addToBlacklistCommand },
    { "clearBlacklistCommand", "()Z", (void*) android_net_wifi_clearBlacklistCommand },
    { "startWpsPbcCommand", "(Ljava/lang/String;)Z", (void*) android_net_wifi_wpsPbcCommand },
    { "startWpsWithPinFromAccessPointCommand", "(Ljava/lang/String;I)Z",
    { "startWpsWithPinFromAccessPointCommand", "(Ljava/lang/String;Ljava/lang/String;)Z",
        (void*) android_net_wifi_wpsPinFromAccessPointCommand },
    { "startWpsWithPinFromDeviceCommand", "(Ljava/lang/String;)I",
    { "startWpsWithPinFromDeviceCommand", "(Ljava/lang/String;)Ljava/lang/String;",
        (void*) android_net_wifi_wpsPinFromDeviceCommand },
    { "setSuspendOptimizationsCommand", "(Z)Z",
        (void*) android_net_wifi_setSuspendOptimizationsCommand},
+4 −13
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WpsConfiguration;
import android.net.ConnectivityManager;
import android.net.InterfaceConfiguration;
import android.net.DhcpInfo;
@@ -843,23 +844,13 @@ public class WifiService extends IWifiManager.Stub {
        mWifiStateMachine.forgetNetwork(netId);
    }

    public void startWpsPbc(String bssid) {
        enforceChangePermission();
        mWifiStateMachine.startWpsPbc(bssid);
    }

    public void startWpsWithPinFromAccessPoint(String bssid, int apPin) {
        enforceChangePermission();
        mWifiStateMachine.startWpsWithPinFromAccessPoint(bssid, apPin);
    }

    public int startWpsWithPinFromDevice(String bssid) {
    public String startWps(WpsConfiguration config) {
        enforceChangePermission();
        if (mChannel != null) {
            return mWifiStateMachine.syncStartWpsWithPinFromDevice(mChannel, bssid);
            return mWifiStateMachine.startWps(mChannel, config);
        } else {
            Slog.e(TAG, "mChannel is not initialized");
            return -1;
            return "";
        }
    }

+2 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.net.wifi;

import android.net.wifi.WifiInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WpsConfiguration;
import android.net.wifi.ScanResult;
import android.net.DhcpInfo;

@@ -108,10 +109,6 @@ interface IWifiManager

    void forgetNetwork(int networkId);

    void startWpsPbc(String bssid);

    void startWpsWithPinFromAccessPoint(String bssid, int apPin);

    int startWpsWithPinFromDevice(String bssid);
    String startWps(in WpsConfiguration config);
}
+0 −23
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.util.Log;
 * that is based on these state changes:
 * - detect a failed WPA handshake that loops indefinitely
 * - password failure handling
 * - Enable networks after a WPS success/failure
 */
class SupplicantStateTracker extends HierarchicalStateMachine {

@@ -49,10 +48,6 @@ class SupplicantStateTracker extends HierarchicalStateMachine {
    /* Maximum retries on a password failure notification */
    private static final int MAX_RETRIES_ON_PASSWORD_FAILURE = 2;

    /* Track if WPS was started since we need to re-enable networks
     * and load configuration afterwards */
    private boolean mWpsStarted = false;

    private Context mContext;

    private HierarchicalState mUninitializedState = new UninitializedState();
@@ -156,11 +151,6 @@ class SupplicantStateTracker extends HierarchicalStateMachine {
                    mPasswordFailuresCount++;
                    mAuthFailureInSupplicantBroadcast = true;
                    break;
                case WifiStateMachine.CMD_START_WPS_PBC:
                case WifiStateMachine.CMD_START_WPS_PIN_FROM_AP:
                case WifiStateMachine.CMD_START_WPS_PIN_FROM_DEVICE:
                    mWpsStarted = true;
                    break;
                case WifiStateMachine.SUPPLICANT_STATE_CHANGE_EVENT:
                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
                    sendSupplicantStateChangedBroadcast(stateChangeResult,
@@ -192,12 +182,6 @@ class SupplicantStateTracker extends HierarchicalStateMachine {
        @Override
         public void enter() {
             if (DBG) Log.d(TAG, getName() + "\n");
             /* A failed WPS connection */
             if (mWpsStarted) {
                 Log.e(TAG, "WPS set up failed, enabling other networks");
                 WifiConfigStore.enableAllNetworks();
                 mWpsStarted = false;
             }
             mWifiStateMachine.setNetworkAvailable(false);
         }
        @Override
@@ -289,13 +273,6 @@ class SupplicantStateTracker extends HierarchicalStateMachine {
             if (DBG) Log.d(TAG, getName() + "\n");
             /* Reset password failure count */
             mPasswordFailuresCount = 0;

             /* A successful WPS connection */
             if (mWpsStarted) {
                 WifiConfigStore.enableAllNetworks();
                 WifiConfigStore.loadConfiguredNetworks();
                 mWpsStarted = false;
             }
         }
        @Override
        public boolean processMessage(Message message) {
+21 −7
Original line number Diff line number Diff line
@@ -366,8 +366,8 @@ class WifiConfigStore {
     * Start WPS pin method configuration with pin obtained
     * from the access point
     */
    static boolean startWpsWithPinFromAccessPoint(String bssid, int apPin) {
        if (WifiNative.startWpsWithPinFromAccessPointCommand(bssid, apPin)) {
    static boolean startWpsWithPinFromAccessPoint(WpsConfiguration config) {
        if (WifiNative.startWpsWithPinFromAccessPointCommand(config.BSSID, config.pin)) {
            /* WPS leaves all networks disabled */
            markAllNetworksDisabled();
            return true;
@@ -379,14 +379,16 @@ class WifiConfigStore {
    /**
     * Start WPS pin method configuration with pin obtained
     * from the device
     * @return empty string on failure. null is never returned.
     */
    static int startWpsWithPinFromDevice(String bssid) {
        int pin = WifiNative.startWpsWithPinFromDeviceCommand(bssid);
    static String startWpsWithPinFromDevice(WpsConfiguration config) {
        String pin = WifiNative.startWpsWithPinFromDeviceCommand(config.BSSID);
        /* WPS leaves all networks disabled */
        if (pin != -1) {
        if (!TextUtils.isEmpty(pin)) {
            markAllNetworksDisabled();
        } else {
            Log.e(TAG, "Failed to start WPS pin method configuration");
            pin = "";
        }
        return pin;
    }
@@ -394,8 +396,8 @@ class WifiConfigStore {
    /**
     * Start WPS push button configuration
     */
    static boolean startWpsPbc(String bssid) {
        if (WifiNative.startWpsPbcCommand(bssid)) {
    static boolean startWpsPbc(WpsConfiguration config) {
        if (WifiNative.startWpsPbcCommand(config.BSSID)) {
            /* WPS leaves all networks disabled */
            markAllNetworksDisabled();
            return true;
@@ -527,6 +529,18 @@ class WifiConfigStore {
        sendConfiguredNetworksChangedBroadcast();
    }

    static void updateIpAndProxyFromWpsConfig(int netId, WpsConfiguration wpsConfig) {
        synchronized (sConfiguredNetworks) {
            WifiConfiguration config = sConfiguredNetworks.get(netId);
            if (config != null) {
                config.ipAssignment = wpsConfig.ipAssignment;
                config.proxySettings = wpsConfig.proxySettings;
                config.linkProperties = wpsConfig.linkProperties;
                writeIpAndProxyConfigurations();
            }
        }
    }

    /* Mark all networks except specified netId as disabled */
    private static void markAllNetworksDisabledExcept(int netId) {
        synchronized (sConfiguredNetworks) {
Loading