1package com.android.hotspot2.pps;
2
3import com.android.hotspot2.Utils;
4
5import java.util.ArrayList;
6import java.util.Collection;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11
12public class HomeSP {
13    private final Map<String, Long> mSSIDs;        // SSID, HESSID, [0,N]
14    private final String mFQDN;
15    private final DomainMatcher mDomainMatcher;
16    private final Set<String> mOtherHomePartners;
17    private final HashSet<Long> mRoamingConsortiums;    // [0,N]
18    private final Set<Long> mMatchAnyOIs;           // [0,N]
19    private final List<Long> mMatchAllOIs;          // [0,N]
20
21    private final Credential mCredential;
22
23    // Informational:
24    private final String mFriendlyName;             // [1]
25    private final String mIconURL;                  // [0,1]
26
27    private final Policy mPolicy;
28    private final int mCredentialPriority;
29    private final Map<String, String> mAAATrustRoots;
30    private final UpdateInfo mSubscriptionUpdate;
31    private final SubscriptionParameters mSubscriptionParameters;
32    private final int mUpdateIdentifier;
33
34    @Deprecated
35    public HomeSP(Map<String, Long> ssidMap,
36                   /*@NotNull*/ String fqdn,
37                   /*@NotNull*/ HashSet<Long> roamingConsortiums,
38                   /*@NotNull*/ Set<String> otherHomePartners,
39                   /*@NotNull*/ Set<Long> matchAnyOIs,
40                   /*@NotNull*/ List<Long> matchAllOIs,
41                   String friendlyName,
42                   String iconURL,
43                   Credential credential) {
44
45        mSSIDs = ssidMap;
46        List<List<String>> otherPartners = new ArrayList<>(otherHomePartners.size());
47        for (String otherPartner : otherHomePartners) {
48            otherPartners.add(Utils.splitDomain(otherPartner));
49        }
50        mOtherHomePartners = otherHomePartners;
51        mFQDN = fqdn;
52        mDomainMatcher = new DomainMatcher(Utils.splitDomain(fqdn), otherPartners);
53        mRoamingConsortiums = roamingConsortiums;
54        mMatchAnyOIs = matchAnyOIs;
55        mMatchAllOIs = matchAllOIs;
56        mFriendlyName = friendlyName;
57        mIconURL = iconURL;
58        mCredential = credential;
59
60        mPolicy = null;
61        mCredentialPriority = -1;
62        mAAATrustRoots = null;
63        mSubscriptionUpdate = null;
64        mSubscriptionParameters = null;
65        mUpdateIdentifier = -1;
66    }
67
68    public HomeSP(Map<String, Long> ssidMap,
69                   /*@NotNull*/ String fqdn,
70                   /*@NotNull*/ HashSet<Long> roamingConsortiums,
71                   /*@NotNull*/ Set<String> otherHomePartners,
72                   /*@NotNull*/ Set<Long> matchAnyOIs,
73                   /*@NotNull*/ List<Long> matchAllOIs,
74                   String friendlyName,
75                   String iconURL,
76                   Credential credential,
77
78                   Policy policy,
79                   int credentialPriority,
80                   Map<String, String> AAATrustRoots,
81                   UpdateInfo subscriptionUpdate,
82                   SubscriptionParameters subscriptionParameters,
83                   int updateIdentifier) {
84
85        mSSIDs = ssidMap;
86        List<List<String>> otherPartners = new ArrayList<>(otherHomePartners.size());
87        for (String otherPartner : otherHomePartners) {
88            otherPartners.add(Utils.splitDomain(otherPartner));
89        }
90        mOtherHomePartners = otherHomePartners;
91        mFQDN = fqdn;
92        mDomainMatcher = new DomainMatcher(Utils.splitDomain(fqdn), otherPartners);
93        mRoamingConsortiums = roamingConsortiums;
94        mMatchAnyOIs = matchAnyOIs;
95        mMatchAllOIs = matchAllOIs;
96        mFriendlyName = friendlyName;
97        mIconURL = iconURL;
98        mCredential = credential;
99
100        mPolicy = policy;
101        mCredentialPriority = credentialPriority;
102        mAAATrustRoots = AAATrustRoots;
103        mSubscriptionUpdate = subscriptionUpdate;
104        mSubscriptionParameters = subscriptionParameters;
105        mUpdateIdentifier = updateIdentifier;
106    }
107
108    public int getUpdateIdentifier() {
109        return mUpdateIdentifier;
110    }
111
112    public UpdateInfo getSubscriptionUpdate() {
113        return mSubscriptionUpdate;
114    }
115
116    public Policy getPolicy() {
117        return mPolicy;
118    }
119
120    private String imsiMatch(List<String> imsis, String mccMnc) {
121        if (mCredential.getImsi().matchesMccMnc(mccMnc)) {
122            for (String imsi : imsis) {
123                if (imsi.startsWith(mccMnc)) {
124                    return imsi;
125                }
126            }
127        }
128        return null;
129    }
130
131    public String getFQDN() {
132        return mFQDN;
133    }
134
135    public String getFriendlyName() {
136        return mFriendlyName;
137    }
138
139    public HashSet<Long> getRoamingConsortiums() {
140        return mRoamingConsortiums;
141    }
142
143    public Credential getCredential() {
144        return mCredential;
145    }
146
147    public Map<String, Long> getSSIDs() {
148        return mSSIDs;
149    }
150
151    public Collection<String> getOtherHomePartners() {
152        return mOtherHomePartners;
153    }
154
155    public Set<Long> getMatchAnyOIs() {
156        return mMatchAnyOIs;
157    }
158
159    public List<Long> getMatchAllOIs() {
160        return mMatchAllOIs;
161    }
162
163    public String getIconURL() {
164        return mIconURL;
165    }
166
167    public boolean deepEquals(HomeSP other) {
168        return mFQDN.equals(other.mFQDN) &&
169                mSSIDs.equals(other.mSSIDs) &&
170                mOtherHomePartners.equals(other.mOtherHomePartners) &&
171                mRoamingConsortiums.equals(other.mRoamingConsortiums) &&
172                mMatchAnyOIs.equals(other.mMatchAnyOIs) &&
173                mMatchAllOIs.equals(other.mMatchAllOIs) &&
174                mFriendlyName.equals(other.mFriendlyName) &&
175                Utils.compare(mIconURL, other.mIconURL) == 0 &&
176                mCredential.equals(other.mCredential);
177    }
178
179    @Override
180    public boolean equals(Object thatObject) {
181        if (this == thatObject) {
182            return true;
183        } else if (thatObject == null || getClass() != thatObject.getClass()) {
184            return false;
185        }
186
187        HomeSP that = (HomeSP) thatObject;
188        return mFQDN.equals(that.mFQDN);
189    }
190
191    @Override
192    public int hashCode() {
193        return mFQDN.hashCode();
194    }
195
196    @Override
197    public String toString() {
198        return "HomeSP{" +
199                "SSIDs=" + mSSIDs +
200                ", FQDN='" + mFQDN + '\'' +
201                ", DomainMatcher=" + mDomainMatcher +
202                ", RoamingConsortiums={" + Utils.roamingConsortiumsToString(mRoamingConsortiums) +
203                '}' +
204                ", MatchAnyOIs={" + Utils.roamingConsortiumsToString(mMatchAnyOIs) + '}' +
205                ", MatchAllOIs={" + Utils.roamingConsortiumsToString(mMatchAllOIs) + '}' +
206                ", Credential=" + mCredential +
207                ", FriendlyName='" + mFriendlyName + '\'' +
208                ", IconURL='" + mIconURL + '\'' +
209                '}';
210    }
211}
212