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

Commit 12cbeff3 authored by Xiao Ma's avatar Xiao Ma
Browse files

Add bssid field in the ScanResultInfo class.

This change adds a new filed: bssid in the ScanResultInfo class
which are encapsulated by WiFi when connecting to AP successfully,
using current connected AP's bssid as a hint to determine whether
L2 roaming happened or not. Also adding @NonNull annotation for
fields, methods and constructor params.

Bug: 131797393
Test: atest NetworkStackIntegrationTests NetworkStackTests
Test: atest FrameworksNetTests
Change-Id: Ia11f1954124f45f9586495f6be7fb7fb3430ae97
parent 7d3fbd8b
Loading
Loading
Loading
Loading
+28 −5
Original line number Diff line number Diff line
@@ -231,7 +231,11 @@ public class ProvisioningConfiguration {
     * InformationElements fields of ScanResult.
     */
    public static class ScanResultInfo {
        @NonNull
        private final String mSsid;
        @NonNull
        private final String mBssid;
        @NonNull
        private final List<InformationElement> mInformationElements;

       /**
@@ -240,6 +244,7 @@ public class ProvisioningConfiguration {
        */
        public static class InformationElement {
            private final int mId;
            @NonNull
            private final byte[] mPayload;

            public InformationElement(int id, @NonNull ByteBuffer payload) {
@@ -257,6 +262,7 @@ public class ProvisioningConfiguration {
           /**
            * Get the specific content of the information element.
            */
            @NonNull
            public ByteBuffer getPayload() {
                return ByteBuffer.wrap(mPayload).asReadOnlyBuffer();
            }
@@ -293,6 +299,7 @@ public class ProvisioningConfiguration {
             * Create an instance of {@link InformationElement} based on the contents of the
             * specified {@link InformationElementParcelable}.
             */
            @Nullable
            public static InformationElement fromStableParcelable(InformationElementParcelable p) {
                if (p == null) return null;
                return new InformationElement(p.id,
@@ -300,8 +307,12 @@ public class ProvisioningConfiguration {
            }
        }

        public ScanResultInfo(String ssid, @NonNull List<InformationElement> informationElements) {
        public ScanResultInfo(@NonNull String ssid, @NonNull String bssid,
                @NonNull List<InformationElement> informationElements) {
            Objects.requireNonNull(ssid, "ssid must not be null.");
            Objects.requireNonNull(bssid, "bssid must not be null.");
            mSsid = ssid;
            mBssid = bssid;
            mInformationElements =
                    Collections.unmodifiableList(new ArrayList<>(informationElements));
        }
@@ -309,13 +320,23 @@ public class ProvisioningConfiguration {
        /**
         * Get the scanned network name.
         */
        @NonNull
        public String getSsid() {
            return mSsid;
        }

        /**
         * Get the address of the access point.
         */
        @NonNull
        public String getBssid() {
            return mBssid;
        }

        /**
         * Get all information elements found in the beacon.
         */
        @NonNull
        public List<InformationElement> getInformationElements() {
            return mInformationElements;
        }
@@ -324,6 +345,7 @@ public class ProvisioningConfiguration {
        public String toString() {
            StringBuffer str = new StringBuffer();
            str.append("SSID: ").append(mSsid);
            str.append(", BSSID: ").append(mBssid);
            str.append(", Information Elements: {");
            for (InformationElement ie : mInformationElements) {
                str.append("[").append(ie.toString()).append("]");
@@ -338,12 +360,13 @@ public class ProvisioningConfiguration {
            if (!(o instanceof ScanResultInfo)) return false;
            ScanResultInfo other = (ScanResultInfo) o;
            return Objects.equals(mSsid, other.mSsid)
                    && Objects.equals(mBssid, other.mBssid)
                    && mInformationElements.equals(other.mInformationElements);
        }

        @Override
        public int hashCode() {
            return Objects.hash(mSsid, mInformationElements);
            return Objects.hash(mSsid, mBssid, mInformationElements);
        }

        /**
@@ -352,6 +375,7 @@ public class ProvisioningConfiguration {
        public ScanResultInfoParcelable toStableParcelable() {
            final ScanResultInfoParcelable p = new ScanResultInfoParcelable();
            p.ssid = mSsid;
            p.bssid = mBssid;
            p.informationElements = toParcelableArray(mInformationElements,
                    InformationElement::toStableParcelable, InformationElementParcelable.class);
            return p;
@@ -366,11 +390,10 @@ public class ProvisioningConfiguration {
            final List<InformationElement> ies = new ArrayList<InformationElement>();
            ies.addAll(fromParcelableArray(p.informationElements,
                    InformationElement::fromStableParcelable));
            return new ScanResultInfo(p.ssid, ies);
            return new ScanResultInfo(p.ssid, p.bssid, ies);
        }

        private static byte[] convertToByteArray(final ByteBuffer buffer) {
            if (buffer == null) return null;
        private static byte[] convertToByteArray(@NonNull final ByteBuffer buffer) {
            final byte[] bytes = new byte[buffer.limit()];
            final ByteBuffer copy = buffer.asReadOnlyBuffer();
            try {
+1 −0
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@
package android.net;
parcelable ScanResultInfoParcelable {
  String ssid;
  String bssid;
  android.net.InformationElementParcelable[] informationElements;
}
+1 −0
Original line number Diff line number Diff line
@@ -20,5 +20,6 @@ import android.net.InformationElementParcelable;

parcelable ScanResultInfoParcelable {
    String ssid;
    String bssid;
    InformationElementParcelable[] informationElements;
}
+5 −3
Original line number Diff line number Diff line
@@ -234,6 +234,7 @@ public class IpClientIntegrationTest {
            (byte) 0x00, (byte) 0x17, (byte) 0xF2
    };
    private static final byte TEST_VENDOR_SPECIFIC_TYPE = 0x06;
    private static final String TEST_DEFAULT_BSSID = "00:11:22:33:44:55";

    private class Dependencies extends IpClient.Dependencies {
        private boolean mIsDhcpLeaseCacheEnabled;
@@ -1578,7 +1579,7 @@ public class IpClientIntegrationTest {
    }

    private ScanResultInfo makeScanResultInfo(final int id, final String ssid,
            final byte[] oui, final byte type, final byte[] data) {
            final String bssid, final byte[] oui, final byte type, final byte[] data) {
        final ByteBuffer payload = ByteBuffer.allocate(4 + data.length);
        payload.put(oui);
        payload.put(type);
@@ -1586,13 +1587,14 @@ public class IpClientIntegrationTest {
        payload.flip();
        final ScanResultInfo.InformationElement ie =
                new ScanResultInfo.InformationElement(id /* IE id */, payload);
        return new ScanResultInfo(ssid, Collections.singletonList(ie));
        return new ScanResultInfo(ssid, bssid, Collections.singletonList(ie));
    }

    private void doUpstreamHotspotDetectionTest(final int id, final String displayName,
            final String ssid, final byte[] oui, final byte type, final byte[] data)
            throws Exception {
        final ScanResultInfo info = makeScanResultInfo(id, ssid, oui, type, data);
        final ScanResultInfo info = makeScanResultInfo(id, ssid, TEST_DEFAULT_BSSID, oui, type,
                data);
        final long currentTime = System.currentTimeMillis();
        final List<DhcpPacket> sentPackets = performDhcpHandshake(true /* isSuccessLease */,
                TEST_LEASE_DURATION_S, true /* isDhcpLeaseCacheEnabled */,
+2 −1
Original line number Diff line number Diff line
@@ -57,7 +57,8 @@ public class ProvisioningConfigurationTest {
        final ScanResultInfo.InformationElement ie =
                new ScanResultInfo.InformationElement(0xdd /* vendor specific IE id */,
                        ByteBuffer.wrap(payload));
        return new ScanResultInfo(ssid, Collections.singletonList(ie));
        return new ScanResultInfo(ssid, "01:02:03:04:05:06" /* bssid string */,
                Collections.singletonList(ie));
    }

    @Before