HomeSP.java revision 03e92b925a595a1a467290a2d54ca2602cce9b9e
16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.hotspot2.pps; 26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.ANQPElement; 471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.anqp.CellularNetwork; 56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.DomainNameElement; 66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.HSConnectionCapabilityElement; 76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.HSWanMetricsElement; 86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.IPAddressTypeAvailabilityElement; 96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.NAIRealmData; 106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.NAIRealmElement; 116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.RoamingConsortiumElement; 126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.anqp.ThreeGPPNetworkElement; 1371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.AuthMatch; 146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.hotspot2.NetworkInfo; 156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport com.android.server.wifi.hotspot2.PasspointMatch; 1671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvistimport com.android.server.wifi.hotspot2.Utils; 176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.ArrayList; 196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.EnumMap; 206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.List; 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Map; 226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Set; 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.ANQPElementType; 256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class HomeSP { 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final Map<String, String> mSSIDs; // SSID, HESSID, [0,N] 2871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist private final String mFQDN; 296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final DomainMatcher mDomainMatcher; 306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final Set<Long> mRoamingConsortiums; // [0,N] 316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final Set<Long> mMatchAnyOIs; // [0,N] 326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final List<Long> mMatchAllOIs; // [0,N] 336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 3471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist private final Credential mCredential; 356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist // Informational: 376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mFriendlyName; // [1] 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final String mIconURL; // [0,1] 396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public HomeSP(Map<String, String> ssidMap, 416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist /*@NotNull*/ String fqdn, 426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist /*@NotNull*/ Set<Long> roamingConsortiums, 436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist /*@NotNull*/ Set<String> otherHomePartners, 446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist /*@NotNull*/ Set<Long> matchAnyOIs, 456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist /*@NotNull*/ List<Long> matchAllOIs, 466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist String friendlyName, 476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist String iconURL, 4871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist Credential credential) { 496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mSSIDs = ssidMap; 516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist List<List<String>> otherPartners = new ArrayList<List<String>>(otherHomePartners.size()); 526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (String otherPartner : otherHomePartners) { 5371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist otherPartners.add(Utils.splitDomain(otherPartner)); 546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 5571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist mFQDN = fqdn; 5671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist mDomainMatcher = new DomainMatcher(Utils.splitDomain(fqdn), otherPartners); 576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mRoamingConsortiums = roamingConsortiums; 586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mMatchAnyOIs = matchAnyOIs; 596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mMatchAllOIs = matchAllOIs; 606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mFriendlyName = friendlyName; 616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mIconURL = iconURL; 6271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist mCredential = credential; 636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public PasspointMatch match(NetworkInfo networkInfo, List<ANQPElement> anqpElements) { 666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (mSSIDs.containsKey(networkInfo.getSSID())) { 686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist String hessid = mSSIDs.get(networkInfo.getSSID()); 696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (hessid == null || networkInfo.getHESSID().equals(hessid)) { 7071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist System.out.println("-- SSID"); 716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.HomeProvider; 726a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist List<Long> allOIs = null; 766a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (networkInfo.getRoamingConsortiums() != null) { 786a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist allOIs = new ArrayList<Long>(); 796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (long oi : networkInfo.getRoamingConsortiums()) { 806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist allOIs.add(oi); 816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 836a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Map<ANQPElementType, ANQPElement> anqpElementMap = null; 856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (anqpElements != null) { 876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist anqpElementMap = new EnumMap<ANQPElementType, ANQPElement>(ANQPElementType.class); 886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (ANQPElement element : anqpElements) { 896a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist anqpElementMap.put(element.getID(), element); 906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (element.getID() == ANQPElementType.ANQPRoamingConsortium) { 916a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist RoamingConsortiumElement rcElement = (RoamingConsortiumElement) element; 926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (!rcElement.getOIs().isEmpty()) { 936a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (allOIs == null) { 946a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist allOIs = new ArrayList<Long>(rcElement.getOIs()); 956a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } else { 966a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist allOIs.addAll(rcElement.getOIs()); 976a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 986a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 996a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1006a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1016a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1026a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 10371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // !!! wlan.mnc<MNC>.mcc<MCC>.3gppnetwork.org 10471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 1056a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (allOIs != null) { 1066a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (!mRoamingConsortiums.isEmpty()) { 1076a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (long oi : allOIs) { 1086a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (mRoamingConsortiums.contains(oi)) { 10971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist System.out.println("-- RC"); 1106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.HomeProvider; 1116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (!mMatchAnyOIs.isEmpty() || !mMatchAllOIs.isEmpty()) { 1156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (long anOI : allOIs) { 1166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 11771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist boolean oneMatchesAll = !mMatchAllOIs.isEmpty(); 1186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (long spOI : mMatchAllOIs) { 1206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (spOI != anOI) { 1216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist oneMatchesAll = false; 1226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist break; 1236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (oneMatchesAll) { 12771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist System.out.println("-- 1inAll"); 1286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.HomeProvider; 1296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (mMatchAnyOIs.contains(anOI)) { 13271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist System.out.println("-- 1ofAll"); 1336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.HomeProvider; 1346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (anqpElementMap == null) { 1406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.Incomplete; 1416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist DomainNameElement domainNameElement = 1446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (DomainNameElement) anqpElementMap.get(ANQPElementType.ANQPDomName); 1456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist NAIRealmElement naiRealmElement = 1466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (NAIRealmElement) anqpElementMap.get(ANQPElementType.ANQPNAIRealm); 1476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ThreeGPPNetworkElement threeGPPNetworkElement = 1486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (ThreeGPPNetworkElement) anqpElementMap.get(ANQPElementType.ANQP3GPPNetwork); 1496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist // For future policy decisions: 1516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist IPAddressTypeAvailabilityElement ipAddressAvailabilityElement = 1526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (IPAddressTypeAvailabilityElement) anqpElementMap.get( 1536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ANQPElementType.ANQPIPAddrAvailability); 1546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist HSConnectionCapabilityElement hsConnCapElement = 1556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (HSConnectionCapabilityElement) anqpElementMap.get( 1566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ANQPElementType.HSConnCapability); 1576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist HSWanMetricsElement hsWanMetricsElement = 1586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist (HSWanMetricsElement) anqpElementMap.get(ANQPElementType.HSWANMetrics); 1596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (domainNameElement != null) { 1616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (String domain : domainNameElement.getDomains()) { 16271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist DomainMatcher.Match match = mDomainMatcher.isSubDomain(Utils.splitDomain(domain)); 1636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (match != DomainMatcher.Match.None) { 1646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return PasspointMatch.HomeProvider; 1656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 16971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (naiRealmElement != null) { 17071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist AuthMatch authMatch = matchRealms(naiRealmElement, threeGPPNetworkElement); 17171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (authMatch != AuthMatch.None) { 17271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return PasspointMatch.RoamingProvider; 17371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 1746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 17571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return PasspointMatch.None; 17671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 1776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 17871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist private AuthMatch matchRealms(NAIRealmElement naiRealmElement, 17971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ThreeGPPNetworkElement threeGPPNetworkElement) { 18071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist List<String> credRealm = Utils.splitDomain(mCredential.getRealm()); 1816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 18271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist for (NAIRealmData naiRealmData : naiRealmElement.getRealmData()) { 1836a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 18471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist DomainMatcher.Match match = DomainMatcher.Match.None; 18571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist for (String anRealm : naiRealmData.getRealms()) { 18671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist List<String> anRealmLabels = Utils.splitDomain(anRealm); 18771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist match = mDomainMatcher.isSubDomain(anRealmLabels); 1886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (match != DomainMatcher.Match.None) { 18971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist break; 19071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 19171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (anRealmLabels.equals(credRealm)) { 19271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist match = DomainMatcher.Match.Secondary; 19371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist break; 19471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 19571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 19671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 19771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (match != DomainMatcher.Match.None) { 19871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (mCredential.getImsi() != null) { 19971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // All the device has is one of EAP-SIM, AKA or AKA', 20071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // so a 3GPP element must appear and contain a matching MNC/MCC 20171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (threeGPPNetworkElement == null) { 20271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return AuthMatch.None; 20371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 20471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist for (CellularNetwork network : threeGPPNetworkElement.getPlmns()) { 20571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (network.matchIMSI(mCredential.getImsi())) { 20671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist AuthMatch authMatch = 20771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist naiRealmData.matchEAPMethods(mCredential.getEAPMethod()); 20871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (authMatch != AuthMatch.None) { 20971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return authMatch; 2106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 21371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } else { 21471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist AuthMatch authMatch = naiRealmData.matchEAPMethods(mCredential.getEAPMethod()); 21571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (authMatch != AuthMatch.None) { 21671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // Note: Something more intelligent could be done here based on the 21771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // authMatch value. It may be useful to have a secondary score to 21871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist // distinguish more predictable EAP method/parameter matching. 21971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return authMatch; 22071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 2216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 22471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return AuthMatch.None; 2256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 22703e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande public String getFQDN() { return mFQDN; } 22803e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande public String getFriendlyName() { return mFriendlyName; } 22903e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande public Set<Long> getRoamingConsortiums() { return mRoamingConsortiums; } 23003e92b925a595a1a467290a2d54ca2602cce9b9eVinit Deshpande public Credential getCredential() { return mCredential; } 2316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 23271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist @Override 23371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public boolean equals(Object thatObject) { 23471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist if (this == thatObject) { 23571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return true; 23671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } else if (thatObject == null || getClass() != thatObject.getClass()) { 23771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return false; 2386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 24071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist HomeSP that = (HomeSP) thatObject; 24171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return mFQDN.equals(that.mFQDN); 24271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 24371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 24471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist @Override 24571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public int hashCode() { 24671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return mFQDN.hashCode(); 24771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 24871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 24971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist @Override 25071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public String toString() { 25171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist return "HomeSP{" + 25271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist "mSSIDs=" + mSSIDs + 25371a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mFQDN='" + mFQDN + '\'' + 25471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mDomainMatcher=" + mDomainMatcher + 25571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mRoamingConsortiums={" + Utils.roamingConsortiumsToString(mRoamingConsortiums) + 25671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist '}' + 25771a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mMatchAnyOIs={" + Utils.roamingConsortiumsToString(mMatchAnyOIs) + '}' + 25871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mMatchAllOIs={" + Utils.roamingConsortiumsToString(mMatchAllOIs) + '}' + 25971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mCredential=" + mCredential + 26071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mFriendlyName='" + mFriendlyName + '\'' + 26171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist ", mIconURL='" + mIconURL + '\'' + 26271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist '}'; 2636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 2646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 265