diff options
author | Ecco Park <eccopark@google.com> | 2018-04-12 18:33:18 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-04-12 18:33:18 +0000 |
commit | 356af575e0317a61da154b97139bdc2cbc1d2c09 (patch) | |
tree | d28708b0a32fc16bd62205c041d4493c54234e76 /service | |
parent | 03b2a94a34ab39bc7d8a26824808d7b2e99ee650 (diff) | |
parent | 2e889dc0b3f348f45cc5f5006d8784bed30583a9 (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')
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) { |