Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28630218 authored by Peter Qiu's avatar Peter Qiu Committed by android-build-merger
Browse files

Merge "hotspot2: update PasspointConfiguration APIs" am: 59da9b24

am: 4ed5fe81

Change-Id: I678ec9518c7c88acefd1bb99bcb3add27ca52b87
parents 10d3007e 4ed5fe81
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ public final class ConfigBuilder {
        }

        // Credential is needed for storing the certificates and private client key.
        if (config.credential == null) {
        if (config.getCredential() == null) {
            throw new IOException("Passpoint profile missing credential");
        }

@@ -183,7 +183,7 @@ public final class ConfigBuilder {
        byte[] caCertData = mimeParts.get(TYPE_CA_CERT);
        if (caCertData != null) {
            try {
                config.credential.caCertificate = parseCACert(caCertData);
                config.getCredential().setCaCertificate(parseCACert(caCertData));
            } catch (CertificateException e) {
                throw new IOException("Failed to parse CA Certificate");
            }
@@ -194,9 +194,9 @@ public final class ConfigBuilder {
        if (pkcs12Data != null) {
            try {
                Pair<PrivateKey, List<X509Certificate>> clientKey = parsePkcs12(pkcs12Data);
                config.credential.clientPrivateKey = clientKey.first;
                config.credential.clientCertificateChain =
                        clientKey.second.toArray(new X509Certificate[clientKey.second.size()]);
                config.getCredential().setClientPrivateKey(clientKey.first);
                config.getCredential().setClientCertificateChain(
                        clientKey.second.toArray(new X509Certificate[clientKey.second.size()]));
            } catch(GeneralSecurityException | IOException e) {
                throw new IOException("Failed to parse PCKS12 string");
            }
+174 −84
Original line number Diff line number Diff line
@@ -58,21 +58,58 @@ public final class PasspointConfiguration implements Parcelable {
     */
    private static final int NULL_VALUE = -1;

    public HomeSP homeSp = null;
    public Credential credential = null;
    public Policy policy = null;
    /**
     * Configurations under HomeSP subtree.
     */
    private HomeSP mHomeSp = null;
    public void setHomeSp(HomeSP homeSp) { mHomeSp = homeSp; }
    public HomeSP getHomeSp() { return mHomeSp; }

    /**
     * Configurations under Credential subtree.
     */
    private Credential mCredential = null;
    public void setCredential(Credential credential) {
        mCredential = credential;
    }
    public Credential getCredential() {
        return mCredential;
    }

    /**
     * Configurations under Policy subtree.
     */
    private Policy mPolicy = null;
    public void setPolicy(Policy policy) {
        mPolicy = policy;
    }
    public Policy getPolicy() {
        return mPolicy;
    }

    /**
     * Meta data for performing subscription update.
     */
    public UpdateParameter subscriptionUpdate = null;
    private UpdateParameter mSubscriptionUpdate = null;
    public void setSubscriptionUpdate(UpdateParameter subscriptionUpdate) {
        mSubscriptionUpdate = subscriptionUpdate;
    }
    public UpdateParameter getSubscriptionUpdate() {
        return mSubscriptionUpdate;
    }

    /**
     * List of HTTPS URL for retrieving trust root certificate and the corresponding SHA-256
     * fingerprint of the certificate.  The certificates are used for verifying AAA server's
     * identity during EAP authentication.
     */
    public Map<String, byte[]> trustRootCertList = null;
    private Map<String, byte[]> mTrustRootCertList = null;
    public void setTrustRootCertList(Map<String, byte[]> trustRootCertList) {
        mTrustRootCertList = trustRootCertList;
    }
    public Map<String, byte[]> getTrustRootCertList() {
        return mTrustRootCertList;
    }

    /**
     * Set by the subscription server, updated every time the configuration is updated by
@@ -80,14 +117,26 @@ public final class PasspointConfiguration implements Parcelable {
     *
     * Use Integer.MIN_VALUE to indicate unset value.
     */
    public int updateIdentifier = Integer.MIN_VALUE;
    private int mUpdateIdentifier = Integer.MIN_VALUE;
    public void setUpdateIdentifier(int updateIdentifier) {
        mUpdateIdentifier = updateIdentifier;
    }
    public int getUpdateIdentififer() {
        return mUpdateIdentifier;
    }

    /**
     * The priority of the credential.
     *
     * Use Integer.MIN_VALUE to indicate unset value.
     */
    public int credentialPriority = Integer.MIN_VALUE;
    private int mCredentialPriority = Integer.MIN_VALUE;
    public void setCredentialPriority(int credentialPriority) {
        mCredentialPriority = credentialPriority;
    }
    public int getCredentialPriority() {
        return mCredentialPriority;
    }

    /**
     * The time this subscription is created. It is in the format of number
@@ -95,7 +144,13 @@ public final class PasspointConfiguration implements Parcelable {
     *
     * Use Long.MIN_VALUE to indicate unset value.
     */
    public long subscriptionCreationTimeInMs = Long.MIN_VALUE;
    private long mSubscriptionCreationTimeInMs = Long.MIN_VALUE;
    public void setSubscriptionCreationTimeInMs(long subscriptionCreationTimeInMs) {
        mSubscriptionCreationTimeInMs = subscriptionCreationTimeInMs;
    }
    public long getSubscriptionCreationTimeInMs() {
        return mSubscriptionCreationTimeInMs;
    }

    /**
     * The time this subscription will expire. It is in the format of number
@@ -103,20 +158,38 @@ public final class PasspointConfiguration implements Parcelable {
     *
     * Use Long.MIN_VALUE to indicate unset value.
     */
    public long subscriptionExpirationTimeInMs = Long.MIN_VALUE;
    private long mSubscriptionExpirationTimeInMs = Long.MIN_VALUE;
    public void setSubscriptionExpirationTimeInMs(long subscriptionExpirationTimeInMs) {
        mSubscriptionExpirationTimeInMs = subscriptionExpirationTimeInMs;
    }
    public long getSubscriptionExpirationTimeInMs() {
        return mSubscriptionExpirationTimeInMs;
    }

    /**
     * The type of the subscription.  This is defined by the provider and the value is provider
     * specific.
     */
    public String subscriptionType = null;
    private String mSubscriptionType = null;
    public void setSubscriptionType(String subscriptionType) {
        mSubscriptionType = subscriptionType;
    }
    public String getSubscriptionType() {
        return mSubscriptionType;
    }

    /**
     * The time period for usage statistics accumulation. A value of zero means that usage
     * statistics are not accumulated on a periodic basis (e.g., a one-time limit for
     * “pay as you go” - PAYG service). A non-zero value specifies the usage interval in minutes.
     */
    public long usageLimitUsageTimePeriodInMinutes = Long.MIN_VALUE;
    private long mUsageLimitUsageTimePeriodInMinutes = Long.MIN_VALUE;
    public void setUsageLimitUsageTimePeriodInMinutes(long usageLimitUsageTimePeriodInMinutes) {
        mUsageLimitUsageTimePeriodInMinutes = usageLimitUsageTimePeriodInMinutes;
    }
    public long getUsageLimitUsageTimePeriodInMinutes() {
        return mUsageLimitUsageTimePeriodInMinutes;
    }

    /**
     * The time at which usage statistic accumulation  begins.  It is in the format of number
@@ -124,7 +197,13 @@ public final class PasspointConfiguration implements Parcelable {
     *
     * Use Long.MIN_VALUE to indicate unset value.
     */
    public long usageLimitStartTimeInMs = Long.MIN_VALUE;
    private long mUsageLimitStartTimeInMs = Long.MIN_VALUE;
    public void setUsageLimitStartTimeInMs(long usageLimitStartTimeInMs) {
        mUsageLimitStartTimeInMs = usageLimitStartTimeInMs;
    }
    public long getUsageLimitStartTimeInMs() {
        return mUsageLimitStartTimeInMs;
    }

    /**
     * The cumulative data limit in megabytes for the {@link #usageLimitUsageTimePeriodInMinutes}.
@@ -132,14 +211,25 @@ public final class PasspointConfiguration implements Parcelable {
     *
     * Use Long.MIN_VALUE to indicate unset value.
     */
    public long usageLimitDataLimit = Long.MIN_VALUE;
    private long mUsageLimitDataLimit = Long.MIN_VALUE;
    public void setUsageLimitDataLimit(long usageLimitDataLimit) {
        mUsageLimitDataLimit = usageLimitDataLimit;
    }
    public long getUsageLimitDataLimit() {
        return mUsageLimitDataLimit;
    }

    /**
     * The cumulative time limit in minutes for the {@link #usageLimitUsageTimePeriodInMinutes}.
     * A value of zero indicate unlimited time usage.
     */
    public long usageLimitTimeLimitInMinutes = Long.MIN_VALUE;

    private long mUsageLimitTimeLimitInMinutes = Long.MIN_VALUE;
    public void setUsageLimitTimeLimitInMinutes(long usageLimitTimeLimitInMinutes) {
        mUsageLimitTimeLimitInMinutes = usageLimitTimeLimitInMinutes;
    }
    public long getUsageLimitTimeLimitInMinutes() {
        return mUsageLimitTimeLimitInMinutes;
    }

    /**
     * Constructor for creating PasspointConfiguration with default values.
@@ -156,30 +246,30 @@ public final class PasspointConfiguration implements Parcelable {
            return;
        }

        if (source.homeSp != null) {
            homeSp = new HomeSP(source.homeSp);
        if (source.mHomeSp != null) {
            mHomeSp = new HomeSP(source.mHomeSp);
        }
        if (source.credential != null) {
            credential = new Credential(source.credential);
        if (source.mCredential != null) {
            mCredential = new Credential(source.mCredential);
        }
        if (source.policy != null) {
            policy = new Policy(source.policy);
        if (source.mPolicy != null) {
            mPolicy = new Policy(source.mPolicy);
        }
        if (source.trustRootCertList != null) {
            trustRootCertList = Collections.unmodifiableMap(source.trustRootCertList);
        if (source.mTrustRootCertList != null) {
            mTrustRootCertList = Collections.unmodifiableMap(source.mTrustRootCertList);
        }
        if (source.subscriptionUpdate != null) {
            subscriptionUpdate = new UpdateParameter(source.subscriptionUpdate);
        if (source.mSubscriptionUpdate != null) {
            mSubscriptionUpdate = new UpdateParameter(source.mSubscriptionUpdate);
        }
        updateIdentifier = source.updateIdentifier;
        credentialPriority = source.credentialPriority;
        subscriptionCreationTimeInMs = source.subscriptionCreationTimeInMs;
        subscriptionExpirationTimeInMs = source.subscriptionExpirationTimeInMs;
        subscriptionType = source.subscriptionType;
        usageLimitDataLimit = source.usageLimitDataLimit;
        usageLimitStartTimeInMs = source.usageLimitStartTimeInMs;
        usageLimitTimeLimitInMinutes = source.usageLimitTimeLimitInMinutes;
        usageLimitUsageTimePeriodInMinutes = source.usageLimitUsageTimePeriodInMinutes;
        mUpdateIdentifier = source.mUpdateIdentifier;
        mCredentialPriority = source.mCredentialPriority;
        mSubscriptionCreationTimeInMs = source.mSubscriptionCreationTimeInMs;
        mSubscriptionExpirationTimeInMs = source.mSubscriptionExpirationTimeInMs;
        mSubscriptionType = source.mSubscriptionType;
        mUsageLimitDataLimit = source.mUsageLimitDataLimit;
        mUsageLimitStartTimeInMs = source.mUsageLimitStartTimeInMs;
        mUsageLimitTimeLimitInMinutes = source.mUsageLimitTimeLimitInMinutes;
        mUsageLimitUsageTimePeriodInMinutes = source.mUsageLimitUsageTimePeriodInMinutes;
    }

    @Override
@@ -189,20 +279,20 @@ public final class PasspointConfiguration implements Parcelable {

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(homeSp, flags);
        dest.writeParcelable(credential, flags);
        dest.writeParcelable(policy, flags);
        dest.writeParcelable(subscriptionUpdate, flags);
        writeTrustRootCerts(dest, trustRootCertList);
        dest.writeInt(updateIdentifier);
        dest.writeInt(credentialPriority);
        dest.writeLong(subscriptionCreationTimeInMs);
        dest.writeLong(subscriptionExpirationTimeInMs);
        dest.writeString(subscriptionType);
        dest.writeLong(usageLimitUsageTimePeriodInMinutes);
        dest.writeLong(usageLimitStartTimeInMs);
        dest.writeLong(usageLimitDataLimit);
        dest.writeLong(usageLimitTimeLimitInMinutes);
        dest.writeParcelable(mHomeSp, flags);
        dest.writeParcelable(mCredential, flags);
        dest.writeParcelable(mPolicy, flags);
        dest.writeParcelable(mSubscriptionUpdate, flags);
        writeTrustRootCerts(dest, mTrustRootCertList);
        dest.writeInt(mUpdateIdentifier);
        dest.writeInt(mCredentialPriority);
        dest.writeLong(mSubscriptionCreationTimeInMs);
        dest.writeLong(mSubscriptionExpirationTimeInMs);
        dest.writeString(mSubscriptionType);
        dest.writeLong(mUsageLimitUsageTimePeriodInMinutes);
        dest.writeLong(mUsageLimitStartTimeInMs);
        dest.writeLong(mUsageLimitDataLimit);
        dest.writeLong(mUsageLimitTimeLimitInMinutes);
    }

    @Override
@@ -214,22 +304,22 @@ public final class PasspointConfiguration implements Parcelable {
            return false;
        }
        PasspointConfiguration that = (PasspointConfiguration) thatObject;
        return (homeSp == null ? that.homeSp == null : homeSp.equals(that.homeSp))
                && (credential == null ? that.credential == null
                        : credential.equals(that.credential))
                && (policy == null ? that.policy == null : policy.equals(that.policy))
                && (subscriptionUpdate == null ? that.subscriptionUpdate == null
                        : subscriptionUpdate.equals(that.subscriptionUpdate))
                && isTrustRootCertListEquals(trustRootCertList, that.trustRootCertList)
                && updateIdentifier == that.updateIdentifier
                && credentialPriority == that.credentialPriority
                && subscriptionCreationTimeInMs == that.subscriptionCreationTimeInMs
                && subscriptionExpirationTimeInMs == that.subscriptionExpirationTimeInMs
                && TextUtils.equals(subscriptionType, that.subscriptionType)
                && usageLimitUsageTimePeriodInMinutes == that.usageLimitUsageTimePeriodInMinutes
                && usageLimitStartTimeInMs == that.usageLimitStartTimeInMs
                && usageLimitDataLimit == that.usageLimitDataLimit
                && usageLimitTimeLimitInMinutes == that .usageLimitTimeLimitInMinutes;
        return (mHomeSp == null ? that.mHomeSp == null : mHomeSp.equals(that.mHomeSp))
                && (mCredential == null ? that.mCredential == null
                        : mCredential.equals(that.mCredential))
                && (mPolicy == null ? that.mPolicy == null : mPolicy.equals(that.mPolicy))
                && (mSubscriptionUpdate == null ? that.mSubscriptionUpdate == null
                        : mSubscriptionUpdate.equals(that.mSubscriptionUpdate))
                && isTrustRootCertListEquals(mTrustRootCertList, that.mTrustRootCertList)
                && mUpdateIdentifier == that.mUpdateIdentifier
                && mCredentialPriority == that.mCredentialPriority
                && mSubscriptionCreationTimeInMs == that.mSubscriptionCreationTimeInMs
                && mSubscriptionExpirationTimeInMs == that.mSubscriptionExpirationTimeInMs
                && TextUtils.equals(mSubscriptionType, that.mSubscriptionType)
                && mUsageLimitUsageTimePeriodInMinutes == that.mUsageLimitUsageTimePeriodInMinutes
                && mUsageLimitStartTimeInMs == that.mUsageLimitStartTimeInMs
                && mUsageLimitDataLimit == that.mUsageLimitDataLimit
                && mUsageLimitTimeLimitInMinutes == that.mUsageLimitTimeLimitInMinutes;
    }

    /**
@@ -238,20 +328,20 @@ public final class PasspointConfiguration implements Parcelable {
     * @return true on success or false on failure
     */
    public boolean validate() {
        if (homeSp == null || !homeSp.validate()) {
        if (mHomeSp == null || !mHomeSp.validate()) {
            return false;
        }
        if (credential == null || !credential.validate()) {
        if (mCredential == null || !mCredential.validate()) {
            return false;
        }
        if (policy != null && !policy.validate()) {
        if (mPolicy != null && !mPolicy.validate()) {
            return false;
        }
        if (subscriptionUpdate != null && !subscriptionUpdate.validate()) {
        if (mSubscriptionUpdate != null && !mSubscriptionUpdate.validate()) {
            return false;
        }
        if (trustRootCertList != null) {
            for (Map.Entry<String, byte[]> entry : trustRootCertList.entrySet()) {
        if (mTrustRootCertList != null) {
            for (Map.Entry<String, byte[]> entry : mTrustRootCertList.entrySet()) {
                String url = entry.getKey();
                byte[] certFingerprint = entry.getValue();
                if (TextUtils.isEmpty(url)) {
@@ -283,20 +373,20 @@ public final class PasspointConfiguration implements Parcelable {
            @Override
            public PasspointConfiguration createFromParcel(Parcel in) {
                PasspointConfiguration config = new PasspointConfiguration();
                config.homeSp = in.readParcelable(null);
                config.credential = in.readParcelable(null);
                config.policy = in.readParcelable(null);
                config.subscriptionUpdate = in.readParcelable(null);
                config.trustRootCertList = readTrustRootCerts(in);
                config.updateIdentifier = in.readInt();
                config.credentialPriority = in.readInt();
                config.subscriptionCreationTimeInMs = in.readLong();
                config.subscriptionExpirationTimeInMs = in.readLong();
                config.subscriptionType = in.readString();
                config.usageLimitUsageTimePeriodInMinutes = in.readLong();
                config.usageLimitStartTimeInMs = in.readLong();
                config.usageLimitDataLimit = in.readLong();
                config.usageLimitTimeLimitInMinutes = in.readLong();
                config.setHomeSp(in.readParcelable(null));
                config.setCredential(in.readParcelable(null));
                config.setPolicy(in.readParcelable(null));
                config.setSubscriptionUpdate(in.readParcelable(null));
                config.setTrustRootCertList(readTrustRootCerts(in));
                config.setUpdateIdentifier(in.readInt());
                config.setCredentialPriority(in.readInt());
                config.setSubscriptionCreationTimeInMs(in.readLong());
                config.setSubscriptionExpirationTimeInMs(in.readLong());
                config.setSubscriptionType(in.readString());
                config.setUsageLimitUsageTimePeriodInMinutes(in.readLong());
                config.setUsageLimitStartTimeInMs(in.readLong());
                config.setUsageLimitDataLimit(in.readLong());
                config.setUsageLimitTimeLimitInMinutes(in.readLong());
                return config;
            }

+65 −65

File changed.

Preview size limit exceeded, changes collapsed.

+286 −160

File changed.

Preview size limit exceeded, changes collapsed.

+102 −54
Original line number Diff line number Diff line
@@ -52,17 +52,35 @@ public final class HomeSP implements Parcelable {
    /**
     * FQDN (Fully Qualified Domain Name) of this home service provider.
     */
    public String fqdn = null;
    private String mFqdn = null;
    public void setFqdn(String fqdn) {
        mFqdn = fqdn;
    }
    public String getFqdn() {
        return mFqdn;
    }

    /**
     * Friendly name of this home service provider.
     */
    public String friendlyName = null;
    private String mFriendlyName = null;
    public void setFriendlyName(String friendlyName) {
        mFriendlyName = friendlyName;
    }
    public String getFriendlyName() {
        return mFriendlyName;
    }

    /**
     * Icon URL of this home service provider.
     */
    public String iconUrl = null;
    private String mIconUrl = null;
    public void setIconUrl(String iconUrl) {
        mIconUrl = iconUrl;
    }
    public String getIconUrl() {
        return mIconUrl;
    }

    /**
     * <SSID, HESSID> duple of the networks that are consider home networks.
@@ -71,7 +89,13 @@ public final class HomeSP implements Parcelable {
     * all nodes in the PSS MO are encoded using UTF-8 unless stated otherwise.  Thus, the SSID
     * string is assumed to be encoded using UTF-8.
     */
    public Map<String, Long> homeNetworkIds = null;
    private Map<String, Long> mHomeNetworkIds = null;
    public void setHomeNetworkIds(Map<String, Long> homeNetworkIds) {
        mHomeNetworkIds = homeNetworkIds;
    }
    public Map<String, Long> getHomeNetworkIds() {
        return mHomeNetworkIds;
    }

    /**
     * Used for determining if this provider is a member of a given Hotspot provider.
@@ -83,7 +107,13 @@ public final class HomeSP implements Parcelable {
     * Refer to HomeSP/HomeOIList subtree in PerProviderSubscription (PPS) Management Object
     * (MO) tree for more detail.
     */
    public long[] matchAllOIs = null;
    private long[] mMatchAllOIs = null;
    public void setMatchAllOIs(long[] matchAllOIs) {
        mMatchAllOIs = matchAllOIs;
    }
    public long[] getMatchAllOIs() {
        return mMatchAllOIs;
    }

    /**
     * Used for determining if this provider is a member of a given Hotspot provider.
@@ -92,13 +122,19 @@ public final class HomeSP implements Parcelable {
     * of that Hotspot provider (e.g. successful authentication with such Hotspot
     * is possible).
     *
     * {@link #matchAllOIs} will have precedence over this one, meaning this list will
     * only be used for matching if {@link #matchAllOIs} is null or empty.
     * {@link #mMatchAllOIs} will have precedence over this one, meaning this list will
     * only be used for matching if {@link #mMatchAllOIs} is null or empty.
     *
     * Refer to HomeSP/HomeOIList subtree in PerProviderSubscription (PPS) Management Object
     * (MO) tree for more detail.
     */
    public long[] matchAnyOIs = null;
    private long[] mMatchAnyOIs = null;
    public void setMatchAnyOIs(long[] matchAnyOIs) {
        mMatchAnyOIs = matchAnyOIs;
    }
    public long[] getMatchAnysOIs() {
        return mMatchAnyOIs;
    }

    /**
     * List of FQDN (Fully Qualified Domain Name) of partner providers.
@@ -106,13 +142,25 @@ public final class HomeSP implements Parcelable {
     * This relationship is most likely achieved via a commercial agreement or
     * operator merges between the providers.
     */
    public String[] otherHomePartners = null;
    private String[] mOtherHomePartners = null;
    public void setOtherHomePartners(String[] otherHomePartners) {
        mOtherHomePartners = otherHomePartners;
    }
    public String[] getOtherHomePartners() {
        return mOtherHomePartners;
    }

    /**
     * List of Organization Identifiers (OIs) identifying a roaming consortium of
     * which this provider is a member.
     */
    public long[] roamingConsortiumOIs = null;
    private long[] mRoamingConsortiumOIs = null;
    public void setRoamingConsortiumOIs(long[] roamingConsortiumOIs) {
        mRoamingConsortiumOIs = roamingConsortiumOIs;
    }
    public long[] getRoamingConsortiumOIs() {
        return mRoamingConsortiumOIs;
    }

    /**
     * Constructor for creating HomeSP with default values.
@@ -128,25 +176,25 @@ public final class HomeSP implements Parcelable {
        if (source == null) {
            return;
        }
        fqdn = source.fqdn;
        friendlyName = source.friendlyName;
        iconUrl = source.iconUrl;
        if (source.homeNetworkIds != null) {
            homeNetworkIds = Collections.unmodifiableMap(source.homeNetworkIds);
        mFqdn = source.mFqdn;
        mFriendlyName = source.mFriendlyName;
        mIconUrl = source.mIconUrl;
        if (source.mHomeNetworkIds != null) {
            mHomeNetworkIds = Collections.unmodifiableMap(source.mHomeNetworkIds);
        }
        if (source.matchAllOIs != null) {
            matchAllOIs = Arrays.copyOf(source.matchAllOIs, source.matchAllOIs.length);
        if (source.mMatchAllOIs != null) {
            mMatchAllOIs = Arrays.copyOf(source.mMatchAllOIs, source.mMatchAllOIs.length);
        }
        if (source.matchAnyOIs != null) {
            matchAnyOIs = Arrays.copyOf(source.matchAnyOIs, source.matchAnyOIs.length);
        if (source.mMatchAnyOIs != null) {
            mMatchAnyOIs = Arrays.copyOf(source.mMatchAnyOIs, source.mMatchAnyOIs.length);
        }
        if (source.otherHomePartners != null) {
            otherHomePartners = Arrays.copyOf(source.otherHomePartners,
                    source.otherHomePartners.length);
        if (source.mOtherHomePartners != null) {
            mOtherHomePartners = Arrays.copyOf(source.mOtherHomePartners,
                    source.mOtherHomePartners.length);
        }
        if (source.roamingConsortiumOIs != null) {
            roamingConsortiumOIs = Arrays.copyOf(source.roamingConsortiumOIs,
                    source.roamingConsortiumOIs.length);
        if (source.mRoamingConsortiumOIs != null) {
            mRoamingConsortiumOIs = Arrays.copyOf(source.mRoamingConsortiumOIs,
                    source.mRoamingConsortiumOIs.length);
        }
    }

@@ -157,14 +205,14 @@ public final class HomeSP implements Parcelable {

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(fqdn);
        dest.writeString(friendlyName);
        dest.writeString(iconUrl);
        writeHomeNetworkIds(dest, homeNetworkIds);
        dest.writeLongArray(matchAllOIs);
        dest.writeLongArray(matchAnyOIs);
        dest.writeStringArray(otherHomePartners);
        dest.writeLongArray(roamingConsortiumOIs);
        dest.writeString(mFqdn);
        dest.writeString(mFriendlyName);
        dest.writeString(mIconUrl);
        writeHomeNetworkIds(dest, mHomeNetworkIds);
        dest.writeLongArray(mMatchAllOIs);
        dest.writeLongArray(mMatchAnyOIs);
        dest.writeStringArray(mOtherHomePartners);
        dest.writeLongArray(mRoamingConsortiumOIs);
    }

    @Override
@@ -177,15 +225,15 @@ public final class HomeSP implements Parcelable {
        }
        HomeSP that = (HomeSP) thatObject;

        return TextUtils.equals(fqdn, that.fqdn)
                && TextUtils.equals(friendlyName, that.friendlyName)
                && TextUtils.equals(iconUrl, that.iconUrl)
                && (homeNetworkIds == null ? that.homeNetworkIds == null
                        : homeNetworkIds.equals(that.homeNetworkIds))
                && Arrays.equals(matchAllOIs, that.matchAllOIs)
                && Arrays.equals(matchAnyOIs, that.matchAnyOIs)
                && Arrays.equals(otherHomePartners, that.otherHomePartners)
                && Arrays.equals(roamingConsortiumOIs, that.roamingConsortiumOIs);
        return TextUtils.equals(mFqdn, that.mFqdn)
                && TextUtils.equals(mFriendlyName, that.mFriendlyName)
                && TextUtils.equals(mIconUrl, that.mIconUrl)
                && (mHomeNetworkIds == null ? that.mHomeNetworkIds == null
                        : mHomeNetworkIds.equals(that.mHomeNetworkIds))
                && Arrays.equals(mMatchAllOIs, that.mMatchAllOIs)
                && Arrays.equals(mMatchAnyOIs, that.mMatchAnyOIs)
                && Arrays.equals(mOtherHomePartners, that.mOtherHomePartners)
                && Arrays.equals(mRoamingConsortiumOIs, that.mRoamingConsortiumOIs);
    }

    /**
@@ -194,17 +242,17 @@ public final class HomeSP implements Parcelable {
     * @return true on success or false on failure
     */
    public boolean validate() {
        if (TextUtils.isEmpty(fqdn)) {
        if (TextUtils.isEmpty(mFqdn)) {
            Log.d(TAG, "Missing FQDN");
            return false;
        }
        if (TextUtils.isEmpty(friendlyName)) {
        if (TextUtils.isEmpty(mFriendlyName)) {
            Log.d(TAG, "Missing friendly name");
            return false;
        }
        // Verify SSIDs specified in the NetworkID
        if (homeNetworkIds != null) {
            for (Map.Entry<String, Long> entry : homeNetworkIds.entrySet()) {
        if (mHomeNetworkIds != null) {
            for (Map.Entry<String, Long> entry : mHomeNetworkIds.entrySet()) {
                if (entry.getKey() == null ||
                        entry.getKey().getBytes(StandardCharsets.UTF_8).length > MAX_SSID_BYTES) {
                    Log.d(TAG, "Invalid SSID in HomeNetworkIDs");
@@ -220,14 +268,14 @@ public final class HomeSP implements Parcelable {
            @Override
            public HomeSP createFromParcel(Parcel in) {
                HomeSP homeSp = new HomeSP();
                homeSp.fqdn = in.readString();
                homeSp.friendlyName = in.readString();
                homeSp.iconUrl = in.readString();
                homeSp.homeNetworkIds = readHomeNetworkIds(in);
                homeSp.matchAllOIs = in.createLongArray();
                homeSp.matchAnyOIs = in.createLongArray();
                homeSp.otherHomePartners = in.createStringArray();
                homeSp.roamingConsortiumOIs = in.createLongArray();
                homeSp.setFqdn(in.readString());
                homeSp.setFriendlyName(in.readString());
                homeSp.setIconUrl(in.readString());
                homeSp.setHomeNetworkIds(readHomeNetworkIds(in));
                homeSp.setMatchAllOIs(in.createLongArray());
                homeSp.setMatchAnyOIs(in.createLongArray());
                homeSp.setOtherHomePartners(in.createStringArray());
                homeSp.setRoamingConsortiumOIs(in.createLongArray());
                return homeSp;
            }

Loading