summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorPeter Qiu <zqiu@google.com>2017-06-06 13:59:04 -0700
committerPeter Qiu <zqiu@google.com>2017-06-06 13:59:04 -0700
commitc56add5be84ea0cf85bc77d5efc0494a68466570 (patch)
tree86a8ab863e3b451149d0c14dc0eadd4c3e511ecd /service
parent0169c9350c355acbfe790859a1cc77a1594b4c1b (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.java50
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