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

Commit bd97157f authored by Shuibing Dai's avatar Shuibing Dai Committed by Android (Google) Code Review
Browse files

Merge "Add codes for scan vendor ies support"

parents 3542adde dcd8a101
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -9718,6 +9718,7 @@ package android.net.wifi.nl80211 {
    method public boolean tearDownInterfaces();
    method public boolean tearDownInterfaces();
    method public boolean tearDownSoftApInterface(@NonNull String);
    method public boolean tearDownSoftApInterface(@NonNull String);
    method public void unregisterCountryCodeChangedListener(@NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
    method public void unregisterCountryCodeChangedListener(@NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
    field public static final String EXTRA_SCANNING_PARAM_VENDOR_IES = "android.net.wifi.nl80211.extra.SCANNING_PARAM_VENDOR_IES";
    field public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
    field public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
+15 −2
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.Parcelable;
import android.util.Log;
import android.util.Log;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Objects;


/**
/**
@@ -35,6 +36,7 @@ public class SingleScanSettings implements Parcelable {
    public boolean enable6GhzRnr;
    public boolean enable6GhzRnr;
    public ArrayList<ChannelSettings> channelSettings;
    public ArrayList<ChannelSettings> channelSettings;
    public ArrayList<HiddenNetwork> hiddenNetworks;
    public ArrayList<HiddenNetwork> hiddenNetworks;
    public byte[] vendorIes;


    /** public constructor */
    /** public constructor */
    public SingleScanSettings() { }
    public SingleScanSettings() { }
@@ -53,13 +55,15 @@ public class SingleScanSettings implements Parcelable {
        return scanType == settings.scanType
        return scanType == settings.scanType
                && enable6GhzRnr == settings.enable6GhzRnr
                && enable6GhzRnr == settings.enable6GhzRnr
                && channelSettings.equals(settings.channelSettings)
                && channelSettings.equals(settings.channelSettings)
                && hiddenNetworks.equals(settings.hiddenNetworks);
                && hiddenNetworks.equals(settings.hiddenNetworks)
                && Arrays.equals(vendorIes, settings.vendorIes);
    }
    }


    /** override hash code */
    /** override hash code */
    @Override
    @Override
    public int hashCode() {
    public int hashCode() {
        return Objects.hash(scanType, channelSettings, hiddenNetworks, enable6GhzRnr);
        return Objects.hash(scanType, channelSettings, hiddenNetworks, enable6GhzRnr,
                Arrays.hashCode(vendorIes));
    }
    }




@@ -88,6 +92,11 @@ public class SingleScanSettings implements Parcelable {
        out.writeBoolean(enable6GhzRnr);
        out.writeBoolean(enable6GhzRnr);
        out.writeTypedList(channelSettings);
        out.writeTypedList(channelSettings);
        out.writeTypedList(hiddenNetworks);
        out.writeTypedList(hiddenNetworks);
        if (vendorIes == null) {
            out.writeByteArray(new byte[0]);
        } else {
            out.writeByteArray(vendorIes);
        }
    }
    }


    /** implement Parcelable interface */
    /** implement Parcelable interface */
@@ -108,6 +117,10 @@ public class SingleScanSettings implements Parcelable {
            in.readTypedList(result.channelSettings, ChannelSettings.CREATOR);
            in.readTypedList(result.channelSettings, ChannelSettings.CREATOR);
            result.hiddenNetworks = new ArrayList<HiddenNetwork>();
            result.hiddenNetworks = new ArrayList<HiddenNetwork>();
            in.readTypedList(result.hiddenNetworks, HiddenNetwork.CREATOR);
            in.readTypedList(result.hiddenNetworks, HiddenNetwork.CREATOR);
            result.vendorIes = in.createByteArray();
            if (result.vendorIes == null) {
                result.vendorIes = new byte[0];
            }
            if (in.dataAvail() != 0) {
            if (in.dataAvail() != 0) {
                Log.e(TAG, "Found trailing data after parcel parsing.");
                Log.e(TAG, "Found trailing data after parcel parsing.");
            }
            }
+5 −0
Original line number Original line Diff line number Diff line
@@ -96,6 +96,10 @@ public class WifiNl80211Manager {
    public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR =
    public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR =
            "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
            "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";


    // Extra scanning parameter used to add vendor IEs (byte[]).
    public static final String EXTRA_SCANNING_PARAM_VENDOR_IES =
            "android.net.wifi.nl80211.extra.SCANNING_PARAM_VENDOR_IES";

    private AlarmManager mAlarmManager;
    private AlarmManager mAlarmManager;
    private Handler mEventHandler;
    private Handler mEventHandler;


@@ -1135,6 +1139,7 @@ public class WifiNl80211Manager {
        settings.hiddenNetworks  = new ArrayList<>();
        settings.hiddenNetworks  = new ArrayList<>();
        if (extraScanningParams != null) {
        if (extraScanningParams != null) {
            settings.enable6GhzRnr = extraScanningParams.getBoolean(SCANNING_PARAM_ENABLE_6GHZ_RNR);
            settings.enable6GhzRnr = extraScanningParams.getBoolean(SCANNING_PARAM_ENABLE_6GHZ_RNR);
            settings.vendorIes = extraScanningParams.getByteArray(EXTRA_SCANNING_PARAM_VENDOR_IES);
        }
        }


        if (freqs != null) {
        if (freqs != null) {
+7 −1
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ public class SingleScanSettingsTest {
    private ChannelSettings mChannelSettings2;
    private ChannelSettings mChannelSettings2;
    private HiddenNetwork mHiddenNetwork1;
    private HiddenNetwork mHiddenNetwork1;
    private HiddenNetwork mHiddenNetwork2;
    private HiddenNetwork mHiddenNetwork2;
    private byte[] mVendorIes;


    @Before
    @Before
    public void setUp() {
    public void setUp() {
@@ -59,6 +60,9 @@ public class SingleScanSettingsTest {
        mHiddenNetwork1.ssid = TEST_SSID_1;
        mHiddenNetwork1.ssid = TEST_SSID_1;
        mHiddenNetwork2 = new HiddenNetwork();
        mHiddenNetwork2 = new HiddenNetwork();
        mHiddenNetwork2.ssid = TEST_SSID_2;
        mHiddenNetwork2.ssid = TEST_SSID_2;

        mVendorIes = new byte[]{(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x11, 0x22, 0x33,
                (byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x44, 0x55, 0x66};
    }
    }


    /**
    /**
@@ -69,12 +73,12 @@ public class SingleScanSettingsTest {
    public void canSerializeAndDeserialize() {
    public void canSerializeAndDeserialize() {
        SingleScanSettings scanSettings = new SingleScanSettings();
        SingleScanSettings scanSettings = new SingleScanSettings();
        scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
        scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;

        scanSettings.channelSettings =
        scanSettings.channelSettings =
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
        scanSettings.hiddenNetworks =
        scanSettings.hiddenNetworks =
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
        scanSettings.enable6GhzRnr = true;
        scanSettings.enable6GhzRnr = true;
        scanSettings.vendorIes = mVendorIes;


        Parcel parcel = Parcel.obtain();
        Parcel parcel = Parcel.obtain();
        scanSettings.writeToParcel(parcel, 0);
        scanSettings.writeToParcel(parcel, 0);
@@ -98,6 +102,7 @@ public class SingleScanSettingsTest {
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
        scanSettings1.hiddenNetworks =
        scanSettings1.hiddenNetworks =
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
        scanSettings1.vendorIes = mVendorIes;


        SingleScanSettings scanSettings2 = new SingleScanSettings();
        SingleScanSettings scanSettings2 = new SingleScanSettings();
        scanSettings2.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
        scanSettings2.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
@@ -105,6 +110,7 @@ public class SingleScanSettingsTest {
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
                new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
        scanSettings2.hiddenNetworks =
        scanSettings2.hiddenNetworks =
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
                new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
        scanSettings2.vendorIes = mVendorIes;


        assertEquals(scanSettings1, scanSettings2);
        assertEquals(scanSettings1, scanSettings2);
        assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
        assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
+18 −8
Original line number Original line Diff line number Diff line
@@ -68,6 +68,7 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Set;
import java.util.Set;
@@ -127,6 +128,9 @@ public class WifiNl80211ManagerTest {
    private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
    private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
    private static final int[] TEST_FREQUENCIES_1 = {};
    private static final int[] TEST_FREQUENCIES_1 = {};
    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
    private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
    private static final byte[] TEST_VENDOR_IES =
            new byte[]{(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x11, 0x22, 0x33,
                    (byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x44, 0x55, 0x66};
    private static final MacAddress TEST_RAW_MAC_BYTES = MacAddress.fromBytes(
    private static final MacAddress TEST_RAW_MAC_BYTES = MacAddress.fromBytes(
            new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05});
            new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05});


@@ -512,7 +516,7 @@ public class WifiNl80211ManagerTest {
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
    }
    }


    /**
    /**
@@ -523,12 +527,13 @@ public class WifiNl80211ManagerTest {
        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
        when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
        Bundle bundle = new Bundle();
        Bundle bundle = new Bundle();
        bundle.putBoolean(WifiNl80211Manager.SCANNING_PARAM_ENABLE_6GHZ_RNR, true);
        bundle.putBoolean(WifiNl80211Manager.SCANNING_PARAM_ENABLE_6GHZ_RNR, true);
        bundle.putByteArray(WifiNl80211Manager.EXTRA_SCANNING_PARAM_VENDOR_IES, TEST_VENDOR_IES);
        assertTrue(mWificondControl.startScan(
        assertTrue(mWificondControl.startScan(
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, bundle));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, bundle));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, true)));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, true, TEST_VENDOR_IES)));
    }
    }


    /**
    /**
@@ -542,7 +547,7 @@ public class WifiNl80211ManagerTest {
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, null));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, null));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
    }
    }


    /**
    /**
@@ -556,7 +561,7 @@ public class WifiNl80211ManagerTest {
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, new Bundle()));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, new Bundle()));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
    }
    }


    /**
    /**
@@ -577,7 +582,7 @@ public class WifiNl80211ManagerTest {
        // But the argument passed down should have the duplicate removed.
        // But the argument passed down should have the duplicate removed.
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
    }
    }


    /**
    /**
@@ -589,7 +594,7 @@ public class WifiNl80211ManagerTest {
        assertTrue(mWificondControl.startScan(
        assertTrue(mWificondControl.startScan(
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null, false)));
                IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null, false, null)));
    }
    }


    /**
    /**
@@ -1161,13 +1166,15 @@ public class WifiNl80211ManagerTest {
        private final Set<Integer> mExpectedFreqs;
        private final Set<Integer> mExpectedFreqs;
        private final List<byte[]> mExpectedSsids;
        private final List<byte[]> mExpectedSsids;
        private final boolean mExpectedEnable6GhzRnr;
        private final boolean mExpectedEnable6GhzRnr;
        private final byte[] mExpectedVendorIes;


        ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids,
        ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids,
                boolean expectedEnable6GhzRnr) {
                boolean expectedEnable6GhzRnr, byte[] expectedVendorIes) {
            this.mExpectedScanType = expectedScanType;
            this.mExpectedScanType = expectedScanType;
            this.mExpectedFreqs = expectedFreqs;
            this.mExpectedFreqs = expectedFreqs;
            this.mExpectedSsids = expectedSsids;
            this.mExpectedSsids = expectedSsids;
            this.mExpectedEnable6GhzRnr = expectedEnable6GhzRnr;
            this.mExpectedEnable6GhzRnr = expectedEnable6GhzRnr;
            this.mExpectedVendorIes = expectedVendorIes;
        }
        }


        @Override
        @Override
@@ -1202,12 +1209,15 @@ public class WifiNl80211ManagerTest {
                if (!mExpectedSsids.equals(ssidSet)) {
                if (!mExpectedSsids.equals(ssidSet)) {
                    return false;
                    return false;
                }
                }

            } else {
            } else {
                if (hiddenNetworks != null && hiddenNetworks.size() > 0) {
                if (hiddenNetworks != null && hiddenNetworks.size() > 0) {
                    return false;
                    return false;
                }
                }
            }
            }

            if (!Arrays.equals(mExpectedVendorIes, settings.vendorIes)) {
                return false;
            }
            return true;
            return true;
        }
        }