diff options
5 files changed, 37 insertions, 9 deletions
diff --git a/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java b/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java index 17b3ded..c349fa7 100644 --- a/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java +++ b/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java @@ -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 { diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ScanResultInfoParcelable.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ScanResultInfoParcelable.aidl index 24a0ca2..f7ac167 100644 --- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ScanResultInfoParcelable.aidl +++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ScanResultInfoParcelable.aidl @@ -18,5 +18,6 @@ package android.net; parcelable ScanResultInfoParcelable { String ssid; + String bssid; android.net.InformationElementParcelable[] informationElements; } diff --git a/common/networkstackclient/src/android/net/ScanResultInfoParcelable.aidl b/common/networkstackclient/src/android/net/ScanResultInfoParcelable.aidl index f5f101d..a19729b 100644 --- a/common/networkstackclient/src/android/net/ScanResultInfoParcelable.aidl +++ b/common/networkstackclient/src/android/net/ScanResultInfoParcelable.aidl @@ -20,5 +20,6 @@ import android.net.InformationElementParcelable; parcelable ScanResultInfoParcelable { String ssid; + String bssid; InformationElementParcelable[] informationElements; } diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java index 9f0ef99..ce2efbb 100644 --- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java +++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java @@ -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 */, diff --git a/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java b/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java index e9384c8..8a8ff8f 100644 --- a/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java +++ b/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java @@ -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 |