summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorEcco Park <eccopark@google.com>2018-04-12 18:33:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-04-12 18:33:18 +0000
commit356af575e0317a61da154b97139bdc2cbc1d2c09 (patch)
treed28708b0a32fc16bd62205c041d4493c54234e76 /service
parent03b2a94a34ab39bc7d8a26824808d7b2e99ee650 (diff)
parent2e889dc0b3f348f45cc5f5006d8784bed30583a9 (diff)
Merge changes from topic "passpoint_r1" into pi-dev
* changes: Wifi: Allow Hotspot 2.0 connection without Roaming Consortium ANQP-element Wifi: Allow Hotspot 2.0 credential without realm matching
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/hotspot2/ANQPMatcher.java6
-rw-r--r--service/java/com/android/server/wifi/hotspot2/NetworkDetail.java2
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointManager.java2
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointProvider.java28
-rw-r--r--service/java/com/android/server/wifi/util/InformationElementUtil.java7
5 files changed, 36 insertions, 9 deletions
diff --git a/service/java/com/android/server/wifi/hotspot2/ANQPMatcher.java b/service/java/com/android/server/wifi/hotspot2/ANQPMatcher.java
index 649534662..a144874b8 100644
--- a/service/java/com/android/server/wifi/hotspot2/ANQPMatcher.java
+++ b/service/java/com/android/server/wifi/hotspot2/ANQPMatcher.java
@@ -163,7 +163,7 @@ public class ANQPMatcher {
}
}
- if (realmMatch == AuthMatch.NONE || realmData.getEAPMethods().isEmpty()) {
+ if (realmData.getEAPMethods().isEmpty()) {
return realmMatch;
}
@@ -179,6 +179,10 @@ public class ANQPMatcher {
if (eapMethodMatch == AuthMatch.NONE) {
return AuthMatch.NONE;
}
+
+ if (realmMatch == AuthMatch.NONE) {
+ return eapMethodMatch;
+ }
return realmMatch | eapMethodMatch;
}
diff --git a/service/java/com/android/server/wifi/hotspot2/NetworkDetail.java b/service/java/com/android/server/wifi/hotspot2/NetworkDetail.java
index 0c7716286..edee2da1a 100644
--- a/service/java/com/android/server/wifi/hotspot2/NetworkDetail.java
+++ b/service/java/com/android/server/wifi/hotspot2/NetworkDetail.java
@@ -253,7 +253,7 @@ public class NetworkDetail {
mHSRelease = vsa.hsRelease;
mAnqpDomainID = vsa.anqpDomainID;
mAnqpOICount = roamingConsortium.anqpOICount;
- mRoamingConsortiums = roamingConsortium.roamingConsortiums;
+ mRoamingConsortiums = roamingConsortium.getRoamingConsortiums();
mExtendedCapabilities = extendedCapabilities;
mANQPElements = null;
//set up channel info
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
index 9423edea9..a0915fa52 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
@@ -411,7 +411,7 @@ public class PasspointManager {
for (Map.Entry<String, PasspointProvider> entry : mProviders.entrySet()) {
PasspointProvider provider = entry.getValue();
- PasspointMatch matchStatus = provider.match(anqpEntry.getElements());
+ PasspointMatch matchStatus = provider.match(anqpEntry.getElements(), roamingConsortium);
if (matchStatus == PasspointMatch.HomeProvider
|| matchStatus == PasspointMatch.RoamingProvider) {
allMatches.add(Pair.create(provider, matchStatus));
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java b/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java
index 23ab57ff4..f86a938d7 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointProvider.java
@@ -40,6 +40,7 @@ import com.android.server.wifi.hotspot2.anqp.RoamingConsortiumElement;
import com.android.server.wifi.hotspot2.anqp.ThreeGPPNetworkElement;
import com.android.server.wifi.hotspot2.anqp.eap.AuthParam;
import com.android.server.wifi.hotspot2.anqp.eap.NonEAPInnerAuth;
+import com.android.server.wifi.util.InformationElementUtil.RoamingConsortium;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@@ -253,10 +254,12 @@ public class PasspointProvider {
* Return the matching status with the given AP, based on the ANQP elements from the AP.
*
* @param anqpElements ANQP elements from the AP
+ * @param roamingConsortium Roaming Consortium information element from the AP
* @return {@link PasspointMatch}
*/
- public PasspointMatch match(Map<ANQPElementType, ANQPElement> anqpElements) {
- PasspointMatch providerMatch = matchProvider(anqpElements);
+ public PasspointMatch match(Map<ANQPElementType, ANQPElement> anqpElements,
+ RoamingConsortium roamingConsortium) {
+ PasspointMatch providerMatch = matchProvider(anqpElements, roamingConsortium);
// Perform authentication match against the NAI Realm.
int authMatch = ANQPMatcher.matchNAIRealm(
@@ -454,9 +457,11 @@ public class PasspointProvider {
* Perform a provider match based on the given ANQP elements.
*
* @param anqpElements List of ANQP elements
+ * @param roamingConsortium Roaming Consortium information element from the AP
* @return {@link PasspointMatch}
*/
- private PasspointMatch matchProvider(Map<ANQPElementType, ANQPElement> anqpElements) {
+ private PasspointMatch matchProvider(Map<ANQPElementType, ANQPElement> anqpElements,
+ RoamingConsortium roamingConsortium) {
// Domain name matching.
if (ANQPMatcher.matchDomainName(
(DomainNameElement) anqpElements.get(ANQPElementType.ANQPDomName),
@@ -464,13 +469,26 @@ public class PasspointProvider {
return PasspointMatch.HomeProvider;
}
- // Roaming Consortium OI matching.
+ // ANQP Roaming Consortium OI matching.
+ long[] providerOIs = mConfig.getHomeSp().getRoamingConsortiumOis();
if (ANQPMatcher.matchRoamingConsortium(
(RoamingConsortiumElement) anqpElements.get(ANQPElementType.ANQPRoamingConsortium),
- mConfig.getHomeSp().getRoamingConsortiumOis())) {
+ providerOIs)) {
return PasspointMatch.RoamingProvider;
}
+ long[] roamingConsortiums = roamingConsortium.getRoamingConsortiums();
+ // Roaming Consortium OI information element matching.
+ if (roamingConsortiums != null && providerOIs != null) {
+ for (long sta_oi: roamingConsortiums) {
+ for (long ap_oi: providerOIs) {
+ if (sta_oi == ap_oi) {
+ return PasspointMatch.RoamingProvider;
+ }
+ }
+ }
+ }
+
// 3GPP Network matching.
if (ANQPMatcher.matchThreeGPPNetwork(
(ThreeGPPNetworkElement) anqpElements.get(ANQPElementType.ANQP3GPPNetwork),
diff --git a/service/java/com/android/server/wifi/util/InformationElementUtil.java b/service/java/com/android/server/wifi/util/InformationElementUtil.java
index 14912b5f5..2128a410d 100644
--- a/service/java/com/android/server/wifi/util/InformationElementUtil.java
+++ b/service/java/com/android/server/wifi/util/InformationElementUtil.java
@@ -259,7 +259,12 @@ public class InformationElementUtil {
public static class RoamingConsortium {
public int anqpOICount = 0;
- public long[] roamingConsortiums = null;
+
+ private long[] roamingConsortiums = null;
+
+ public long[] getRoamingConsortiums() {
+ return roamingConsortiums;
+ }
public void from(InformationElement ie) {
if (ie.id != InformationElement.EID_ROAMING_CONSORTIUM) {