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 Diff line number Diff line
@@ -9718,6 +9718,7 @@ package android.net.wifi.nl80211 {
    method public boolean tearDownInterfaces();
    method public boolean tearDownSoftApInterface(@NonNull String);
    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 int SCAN_TYPE_PNO_SCAN = 1; // 0x1
    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
+15 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.Parcelable;
import android.util.Log;

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

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

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

    /** override hash code */
    @Override
    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.writeTypedList(channelSettings);
        out.writeTypedList(hiddenNetworks);
        if (vendorIes == null) {
            out.writeByteArray(new byte[0]);
        } else {
            out.writeByteArray(vendorIes);
        }
    }

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

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

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

    @Before
    public void setUp() {
@@ -59,6 +60,9 @@ public class SingleScanSettingsTest {
        mHiddenNetwork1.ssid = TEST_SSID_1;
        mHiddenNetwork2 = new HiddenNetwork();
        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() {
        SingleScanSettings scanSettings = new SingleScanSettings();
        scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;

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

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

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

        assertEquals(scanSettings1, scanSettings2);
        assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
+18 −8
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -127,6 +128,9 @@ public class WifiNl80211ManagerTest {
    private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
    private static final int[] TEST_FREQUENCIES_1 = {};
    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(
            new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05});

@@ -512,7 +516,7 @@ public class WifiNl80211ManagerTest {
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                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);
        Bundle bundle = new Bundle();
        bundle.putBoolean(WifiNl80211Manager.SCANNING_PARAM_ENABLE_6GHZ_RNR, true);
        bundle.putByteArray(WifiNl80211Manager.EXTRA_SCANNING_PARAM_VENDOR_IES, TEST_VENDOR_IES);
        assertTrue(mWificondControl.startScan(
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
                SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, bundle));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                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));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                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()));
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                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.
        verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
                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(
                TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
        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 List<byte[]> mExpectedSsids;
        private final boolean mExpectedEnable6GhzRnr;
        private final byte[] mExpectedVendorIes;

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

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

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

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