diff options
author | Peter Qiu <zqiu@google.com> | 2017-06-06 13:59:04 -0700 |
---|---|---|
committer | Peter Qiu <zqiu@google.com> | 2017-06-06 13:59:04 -0700 |
commit | c56add5be84ea0cf85bc77d5efc0494a68466570 (patch) | |
tree | 86a8ab863e3b451149d0c14dc0eadd4c3e511ecd /service | |
parent | 0169c9350c355acbfe790859a1cc77a1594b4c1b (diff) |
hotspot2: PasspointManager: add support for retrieving OSU providers info
The OSU provider icon data is included, will be added when icon
data retrieval/caching support is added.
Bug: 62235301
Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Change-Id: Ifbddc3c3626063b3c89361c09c7adbf0b054692d
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/hotspot2/PasspointManager.java | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java index f892e7051..3695ba35f 100644 --- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java +++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java @@ -33,6 +33,7 @@ import android.graphics.drawable.Icon; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; +import android.net.wifi.hotspot2.OsuProvider; import android.net.wifi.hotspot2.PasspointConfiguration; import android.os.UserHandle; import android.text.TextUtils; @@ -47,6 +48,8 @@ import com.android.server.wifi.WifiKeyStore; import com.android.server.wifi.WifiNative; import com.android.server.wifi.hotspot2.anqp.ANQPElement; import com.android.server.wifi.hotspot2.anqp.Constants; +import com.android.server.wifi.hotspot2.anqp.HSOsuProvidersElement; +import com.android.server.wifi.hotspot2.anqp.OsuProviderInfo; import com.android.server.wifi.util.InformationElementUtil; import com.android.server.wifi.util.ScanResultUtil; @@ -439,7 +442,13 @@ public class PasspointManager { InformationElementUtil.getHS2VendorSpecificIE(scanResult.informationElements); // Lookup ANQP data in the cache. - long bssid = Utils.parseMac(scanResult.BSSID); + long bssid; + try { + bssid = Utils.parseMac(scanResult.BSSID); + } catch (IllegalArgumentException e) { + Log.e(TAG, "Invalid BSSID provided in the scan result: " + scanResult.BSSID); + return new HashMap<Constants.ANQPElementType, ANQPElement>(); + } ANQPData anqpEntry = mAnqpCache.getEntry(ANQPNetworkKey.buildKey( scanResult.SSID, bssid, scanResult.hessid, vsa.anqpDomainID)); if (anqpEntry != null) { @@ -480,6 +489,45 @@ public class PasspointManager { } /** + * Return the list of Hosspot 2.0 OSU (Online Sign-Up) providers associated with the given + * AP. + * + * An empty list will be returned when an invalid scan result is provided or no match is found. + * + * @param scanResult The scan result of the AP + * @return List of {@link OsuProvider} + */ + public List<OsuProvider> getMatchingOsuProviders(ScanResult scanResult) { + if (scanResult == null) { + Log.e(TAG, "Attempt to retrieve OSU providers for a null ScanResult"); + return new ArrayList<OsuProvider>(); + } + if (!scanResult.isPasspointNetwork()) { + Log.e(TAG, "Attempt to retrieve OSU providers for a non-Passpoint AP"); + return new ArrayList<OsuProvider>(); + } + + // Lookup OSU Providers ANQP element. + Map<Constants.ANQPElementType, ANQPElement> anqpElements = getANQPElements(scanResult); + if (!anqpElements.containsKey(Constants.ANQPElementType.HSOSUProviders)) { + return new ArrayList<OsuProvider>(); + } + + HSOsuProvidersElement element = + (HSOsuProvidersElement) anqpElements.get(Constants.ANQPElementType.HSOSUProviders); + List<OsuProvider> providers = new ArrayList<>(); + for (OsuProviderInfo info : element.getProviders()) { + // TODO(b/62256482): include icon data once the icon file retrieval and management + // support is added. + OsuProvider provider = new OsuProvider(element.getOsuSsid(), info.getFriendlyName(), + info.getServiceDescription(), info.getServerUri(), + info.getNetworkAccessIdentifier(), info.getMethodList(), null); + providers.add(provider); + } + return providers; + } + + /** * Dump the current state of PasspointManager to the provided output stream. * * @param pw The output stream to write to |