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

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

Merge "Clean up changing AP configuration"

parents ca2c8e75 c2f54c26
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -167,11 +167,15 @@ interface INetworkManagementService
    /**
     * Start Wifi Access Point
     */
    void startAccessPoint(in WifiConfiguration wifiConfig, String intf);
    void startAccessPoint(in WifiConfiguration wifiConfig, String wlanIface, String softapIface);

    /**
     * Stop Wifi Access Point
     */
    void stopAccessPoint();

    /**
     * Set Access Point config
     */
    void setAccessPoint(in WifiConfiguration wifiConfig, String wlanIface, String softapIface);
}
+26 −10
Original line number Diff line number Diff line
@@ -460,17 +460,17 @@ class NetworkManagementService extends INetworkManagementService.Stub {
        throw new IllegalStateException("Got an empty response");
    }

    public void startAccessPoint(WifiConfiguration wifiConfig, String intf)
    public void startAccessPoint(WifiConfiguration wifiConfig, String wlanIface, String softapIface)
             throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService");
        mConnector.doCommand(String.format("softap stop " + intf));
        mConnector.doCommand(String.format("softap fwreload " + intf + " AP"));
        mConnector.doCommand(String.format("softap start " + intf));
        mConnector.doCommand(String.format("softap stop " + wlanIface));
        mConnector.doCommand(String.format("softap fwreload " + wlanIface + " AP"));
        mConnector.doCommand(String.format("softap start " + wlanIface));
        if (wifiConfig == null) {
            mConnector.doCommand(String.format("softap set " + intf + " wl0.1"));
            mConnector.doCommand(String.format("softap set " + wlanIface + " " + softapIface));
        } else {
            /**
             * softap set arg1 arg2 arg3 [arg4 arg5 arg6 arg7 arg8]
@@ -482,10 +482,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
             * argv6 - Channel
             * argv7 - Preamble
             * argv8 - Max SCB
             *
             * TODO: get a configurable softap interface from driver
             */
            String str = String.format("softap set " + intf + " wl0.1 %s %s %s", wifiConfig.SSID,
            String str = String.format("softap set " + wlanIface + " " + softapIface + " %s %s %s",
                                       wifiConfig.SSID,
                                       wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA_PSK) ?
                                       "wpa2-psk" : "open",
                                       wifiConfig.preSharedKey);
@@ -502,4 +501,21 @@ class NetworkManagementService extends INetworkManagementService.Stub {
        mConnector.doCommand("softap stopap");
    }

    public void setAccessPoint(WifiConfiguration wifiConfig, String wlanIface, String softapIface)
            throws IllegalStateException {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
        mContext.enforceCallingOrSelfPermission(
            android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService");
        if (wifiConfig == null) {
            mConnector.doCommand(String.format("softap set " + wlanIface + " " + softapIface));
        } else {
            String str = String.format("softap set " + wlanIface + " " + softapIface +
                                       " %s %s %s", wifiConfig.SSID,
                                       wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA_PSK) ?
                                       "wpa2-psk" : "open",
                                       wifiConfig.preSharedKey);
            mConnector.doCommand(str);
        }
    }
}
+13 −4
Original line number Diff line number Diff line
@@ -96,6 +96,8 @@ public class WifiService extends IWifiManager.Stub {
    private static final boolean DBG = false;
    private static final Pattern scanResultPattern = Pattern.compile("\t+");
    private final WifiStateTracker mWifiStateTracker;
    /* TODO: fetch a configurable interface */
    private static final String SOFTAP_IFACE = "wl0.1";

    private Context mContext;
    private int mWifiApState;
@@ -582,9 +584,10 @@ public class WifiService extends IWifiManager.Stub {
    }

    /**
     * see {@link android.net.wifi.WifiManager#startAccessPoint(WifiConfiguration)}
     * see {@link android.net.wifi.WifiManager#setWifiApEnabled(WifiConfiguration, boolean)}
     * @param wifiConfig SSID, security and channel details as
     *        part of WifiConfiguration
     * @param enabled, true to enable and false to disable
     * @return {@code true} if the start operation was
     *         started or is already in the queue.
     */
@@ -656,11 +659,16 @@ public class WifiService extends IWifiManager.Stub {
            if(enable && (wifiConfig != null)) {
                try {
                    persistApConfiguration(wifiConfig);
                    nwService.stopAccessPoint();
                    nwService.startAccessPoint(wifiConfig, mWifiStateTracker.getInterfaceName());
                    nwService.setAccessPoint(wifiConfig, mWifiStateTracker.getInterfaceName(),
                                             SOFTAP_IFACE);
                    return true;
                } catch(Exception e) {
                    Slog.e(TAG, "Exception in nwService during AP restart");
                    try {
                        nwService.stopAccessPoint();
                    } catch (Exception ee) {
                        Slog.e(TAG, "Could not stop AP, :" + ee);
                    }
                    setWifiApEnabledState(WIFI_AP_STATE_FAILED, uid, DriverAction.DRIVER_UNLOAD);
                    return false;
                }
@@ -696,7 +704,8 @@ public class WifiService extends IWifiManager.Stub {
            }

            try {
                nwService.startAccessPoint(wifiConfig, mWifiStateTracker.getInterfaceName());
                nwService.startAccessPoint(wifiConfig, mWifiStateTracker.getInterfaceName(),
                                           SOFTAP_IFACE);
            } catch(Exception e) {
                Slog.e(TAG, "Exception in startAccessPoint()");
                setWifiApEnabledState(WIFI_AP_STATE_FAILED, uid, DriverAction.DRIVER_UNLOAD);