package com.android.hotspot2.pps; import com.android.hotspot2.Utils; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class HomeSP { private final Map<String, Long> mSSIDs; // SSID, HESSID, [0,N] private final String mFQDN; private final DomainMatcher mDomainMatcher; private final Set<String> mOtherHomePartners; private final HashSet<Long> mRoamingConsortiums; // [0,N] private final Set<Long> mMatchAnyOIs; // [0,N] private final List<Long> mMatchAllOIs; // [0,N] private final Credential mCredential; // Informational: private final String mFriendlyName; // [1] private final String mIconURL; // [0,1] private final Policy mPolicy; private final int mCredentialPriority; private final Map<String, String> mAAATrustRoots; private final UpdateInfo mSubscriptionUpdate; private final SubscriptionParameters mSubscriptionParameters; private final int mUpdateIdentifier; @Deprecated public HomeSP(Map<String, Long> ssidMap, /*@NotNull*/ String fqdn, /*@NotNull*/ HashSet<Long> roamingConsortiums, /*@NotNull*/ Set<String> otherHomePartners, /*@NotNull*/ Set<Long> matchAnyOIs, /*@NotNull*/ List<Long> matchAllOIs, String friendlyName, String iconURL, Credential credential) { mSSIDs = ssidMap; List<List<String>> otherPartners = new ArrayList<>(otherHomePartners.size()); for (String otherPartner : otherHomePartners) { otherPartners.add(Utils.splitDomain(otherPartner)); } mOtherHomePartners = otherHomePartners; mFQDN = fqdn; mDomainMatcher = new DomainMatcher(Utils.splitDomain(fqdn), otherPartners); mRoamingConsortiums = roamingConsortiums; mMatchAnyOIs = matchAnyOIs; mMatchAllOIs = matchAllOIs; mFriendlyName = friendlyName; mIconURL = iconURL; mCredential = credential; mPolicy = null; mCredentialPriority = -1; mAAATrustRoots = null; mSubscriptionUpdate = null; mSubscriptionParameters = null; mUpdateIdentifier = -1; } public HomeSP(Map<String, Long> ssidMap, /*@NotNull*/ String fqdn, /*@NotNull*/ HashSet<Long> roamingConsortiums, /*@NotNull*/ Set<String> otherHomePartners, /*@NotNull*/ Set<Long> matchAnyOIs, /*@NotNull*/ List<Long> matchAllOIs, String friendlyName, String iconURL, Credential credential, Policy policy, int credentialPriority, Map<String, String> AAATrustRoots, UpdateInfo subscriptionUpdate, SubscriptionParameters subscriptionParameters, int updateIdentifier) { mSSIDs = ssidMap; List<List<String>> otherPartners = new ArrayList<>(otherHomePartners.size()); for (String otherPartner : otherHomePartners) { otherPartners.add(Utils.splitDomain(otherPartner)); } mOtherHomePartners = otherHomePartners; mFQDN = fqdn; mDomainMatcher = new DomainMatcher(Utils.splitDomain(fqdn), otherPartners); mRoamingConsortiums = roamingConsortiums; mMatchAnyOIs = matchAnyOIs; mMatchAllOIs = matchAllOIs; mFriendlyName = friendlyName; mIconURL = iconURL; mCredential = credential; mPolicy = policy; mCredentialPriority = credentialPriority; mAAATrustRoots = AAATrustRoots; mSubscriptionUpdate = subscriptionUpdate; mSubscriptionParameters = subscriptionParameters; mUpdateIdentifier = updateIdentifier; } public int getUpdateIdentifier() { return mUpdateIdentifier; } public UpdateInfo getSubscriptionUpdate() { return mSubscriptionUpdate; } public Policy getPolicy() { return mPolicy; } private String imsiMatch(List<String> imsis, String mccMnc) { if (mCredential.getImsi().matchesMccMnc(mccMnc)) { for (String imsi : imsis) { if (imsi.startsWith(mccMnc)) { return imsi; } } } return null; } public String getFQDN() { return mFQDN; } public String getFriendlyName() { return mFriendlyName; } public HashSet<Long> getRoamingConsortiums() { return mRoamingConsortiums; } public Credential getCredential() { return mCredential; } public Map<String, Long> getSSIDs() { return mSSIDs; } public Collection<String> getOtherHomePartners() { return mOtherHomePartners; } public Set<Long> getMatchAnyOIs() { return mMatchAnyOIs; } public List<Long> getMatchAllOIs() { return mMatchAllOIs; } public String getIconURL() { return mIconURL; } public boolean deepEquals(HomeSP other) { return mFQDN.equals(other.mFQDN) && mSSIDs.equals(other.mSSIDs) && mOtherHomePartners.equals(other.mOtherHomePartners) && mRoamingConsortiums.equals(other.mRoamingConsortiums) && mMatchAnyOIs.equals(other.mMatchAnyOIs) && mMatchAllOIs.equals(other.mMatchAllOIs) && mFriendlyName.equals(other.mFriendlyName) && Utils.compare(mIconURL, other.mIconURL) == 0 && mCredential.equals(other.mCredential); } @Override public boolean equals(Object thatObject) { if (this == thatObject) { return true; } else if (thatObject == null || getClass() != thatObject.getClass()) { return false; } HomeSP that = (HomeSP) thatObject; return mFQDN.equals(that.mFQDN); } @Override public int hashCode() { return mFQDN.hashCode(); } @Override public String toString() { return "HomeSP{" + "SSIDs=" + mSSIDs + ", FQDN='" + mFQDN + '\'' + ", DomainMatcher=" + mDomainMatcher + ", RoamingConsortiums={" + Utils.roamingConsortiumsToString(mRoamingConsortiums) + '}' + ", MatchAnyOIs={" + Utils.roamingConsortiumsToString(mMatchAnyOIs) + '}' + ", MatchAllOIs={" + Utils.roamingConsortiumsToString(mMatchAllOIs) + '}' + ", Credential=" + mCredential + ", FriendlyName='" + mFriendlyName + '\'' + ", IconURL='" + mIconURL + '\'' + '}'; } }