/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.wifi.passpoint; import android.os.Parcelable; import android.os.Parcel; import java.util.HashMap; /** * Required Mobile Device Management Tree Structure * * +----------+ * | ./(Root) | * +----+-----+ * | * +---------+ | +---------+ +---------+ * | DevInfo |-----------+---------| Wi-Fi |--|SP FQDN* | * +---------+ | +---------+ +---------+ * +---------+ | | * |DevDetail|-----------+ +-----------------------+ * +---------+ |PerproviderSubscription|--<X>+ * +-----------------------+ * * This class contains all nodes start from Wi-Fi * @hide **/ public class WifiPasspointDmTree implements Parcelable { private final static String TAG = "WifiTree"; public int PpsMoId;//plugfest used only public HashMap<String, SpFqdn> spFqdn = new HashMap<String, SpFqdn>();//Maps.newHashMap(); public SpFqdn createSpFqdn(String name) { SpFqdn obj = new SpFqdn(name); spFqdn.put(name, obj); return obj; } public static class SpFqdn implements Parcelable { public String nodeName; public PerProviderSubscription perProviderSubscription = new PerProviderSubscription(); public SpFqdn(String name) { nodeName = name; } public SpFqdn() { } public SpFqdn(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeParcelable(perProviderSubscription, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); perProviderSubscription = in.readParcelable(PerProviderSubscription.class .getClassLoader()); } } public static final Parcelable.Creator<SpFqdn> CREATOR = new Parcelable.Creator<SpFqdn>() { public SpFqdn createFromParcel(Parcel in) { return new SpFqdn(in); } public SpFqdn[] newArray(int size) { return new SpFqdn[size]; } }; } /** * PerProviderSubscription **/ public static class PerProviderSubscription implements Parcelable { /** * PerProviderSubscription/UpdateIdentifier **/ public String UpdateIdentifier; public HashMap<String, CredentialInfo> credentialInfo = new HashMap<String, CredentialInfo>(); public CredentialInfo createCredentialInfo(String name) { CredentialInfo obj = new CredentialInfo(name); credentialInfo.put(name, obj); return obj; } public PerProviderSubscription() { } public PerProviderSubscription(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(UpdateIdentifier); out.writeMap(credentialInfo); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { UpdateIdentifier = in.readString(); in.readMap(credentialInfo, CredentialInfo.class.getClassLoader()); } } public static final Parcelable.Creator<PerProviderSubscription> CREATOR = new Parcelable.Creator<PerProviderSubscription>() { public PerProviderSubscription createFromParcel(Parcel in) { return new PerProviderSubscription(in); } public PerProviderSubscription[] newArray(int size) { return new PerProviderSubscription[size]; } }; } /** * PerProviderSubscription/<X+> * This interior node contains the Home SP information, subscription policy, management and credential information. **/ public static class CredentialInfo implements Parcelable { public String nodeName; public Policy policy = new Policy(); public String credentialPriority; public HashMap<String, AAAServerTrustRoot> aAAServerTrustRoot = new HashMap<String, AAAServerTrustRoot>(); public SubscriptionUpdate subscriptionUpdate = new SubscriptionUpdate(); public HomeSP homeSP = new HomeSP(); public SubscriptionParameters subscriptionParameters = new SubscriptionParameters(); public Credential credential = new Credential(); public Extension extension = new Extension(); public CredentialInfo(String nn) { nodeName = nn; } public AAAServerTrustRoot createAAAServerTrustRoot(String name, String url, String fp) { AAAServerTrustRoot obj = new AAAServerTrustRoot(name, url, fp); aAAServerTrustRoot.put(name, obj); return obj; } public CredentialInfo() { } public CredentialInfo(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeParcelable(policy, flags); out.writeString(credentialPriority); out.writeMap(aAAServerTrustRoot); out.writeParcelable(subscriptionUpdate, flags); out.writeParcelable(homeSP, flags); out.writeParcelable(subscriptionParameters, flags); out.writeParcelable(credential, flags); //out.writeParcelable(extension, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); policy = in.readParcelable(Policy.class.getClassLoader()); credentialPriority = in.readString(); in.readMap(aAAServerTrustRoot, AAAServerTrustRoot.class.getClassLoader()); subscriptionUpdate = in.readParcelable(SubscriptionUpdate.class.getClassLoader()); homeSP = in.readParcelable(HomeSP.class.getClassLoader()); subscriptionParameters = in.readParcelable(SubscriptionParameters.class .getClassLoader()); credential = in.readParcelable(Credential.class.getClassLoader()); //extension = in.readParcelable(Extension.class.getClassLoader()); } } public static final Parcelable.Creator<CredentialInfo> CREATOR = new Parcelable.Creator<CredentialInfo>() { public CredentialInfo createFromParcel(Parcel in) { return new CredentialInfo(in); } public CredentialInfo[] newArray(int size) { return new CredentialInfo[size]; } }; } /** * PerProviderSubscription/<X+>/Policy **/ public static class Policy implements Parcelable { public HashMap<String, PreferredRoamingPartnerList> preferredRoamingPartnerList = new HashMap<String, PreferredRoamingPartnerList>(); public HashMap<String, MinBackhaulThresholdNetwork> minBackhaulThreshold = new HashMap<String, MinBackhaulThresholdNetwork>(); public PolicyUpdate policyUpdate = new PolicyUpdate(); public HashMap<String, SPExclusionList> sPExclusionList = new HashMap<String, SPExclusionList>(); public HashMap<String, RequiredProtoPortTuple> requiredProtoPortTuple = new HashMap<String, RequiredProtoPortTuple>(); public String maximumBSSLoadValue; public PreferredRoamingPartnerList createPreferredRoamingPartnerList(String name, String fqdn, String priority, String country) { PreferredRoamingPartnerList obj = new PreferredRoamingPartnerList(name, fqdn, priority, country); preferredRoamingPartnerList.put(name, obj); return obj; } public MinBackhaulThresholdNetwork createMinBackhaulThreshold(String name, String type, String dl, String ul) { MinBackhaulThresholdNetwork obj = new MinBackhaulThresholdNetwork(name, type, dl, ul); minBackhaulThreshold.put(name, obj); return obj; } public SPExclusionList createSPExclusionList(String name, String ssid) { SPExclusionList obj = new SPExclusionList(name, ssid); sPExclusionList.put(name, obj); return obj; } public RequiredProtoPortTuple createRequiredProtoPortTuple(String name, String proto, String port) { RequiredProtoPortTuple obj = new RequiredProtoPortTuple(name, proto, port); requiredProtoPortTuple.put(name, obj); return obj; } public Policy() { } public Policy(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeMap(preferredRoamingPartnerList); out.writeMap(minBackhaulThreshold); out.writeParcelable(policyUpdate, flags); out.writeMap(sPExclusionList); out.writeMap(requiredProtoPortTuple); out.writeString(maximumBSSLoadValue); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { in.readMap(preferredRoamingPartnerList, PreferredRoamingPartnerList.class.getClassLoader()); in.readMap(minBackhaulThreshold, MinBackhaulThresholdNetwork.class.getClassLoader()); policyUpdate = in.readParcelable(PolicyUpdate.class.getClassLoader()); in.readMap(sPExclusionList, SPExclusionList.class.getClassLoader()); in.readMap(requiredProtoPortTuple, RequiredProtoPortTuple.class.getClassLoader()); maximumBSSLoadValue = in.readString(); } } public static final Parcelable.Creator<Policy> CREATOR = new Parcelable.Creator<Policy>() { public Policy createFromParcel(Parcel in) { return new Policy(in); } public Policy[] newArray(int size) { return new Policy[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/PreferredRoamingPartnerList/<X+> **/ public static class PreferredRoamingPartnerList implements Parcelable { public String nodeName; public String FQDN_Match; //maximum 255 + ",includeSubdomains", equals 273 public String Priority; public String Country; // maximum 600 octets public PreferredRoamingPartnerList(String nn, String f, String p, String c) { nodeName = nn; FQDN_Match = f; Priority = p; Country = c; } public PreferredRoamingPartnerList() { } public PreferredRoamingPartnerList(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(FQDN_Match); out.writeString(Priority); out.writeString(Country); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); FQDN_Match = in.readString(); Priority = in.readString(); Country = in.readString(); } } public static final Parcelable.Creator<PreferredRoamingPartnerList> CREATOR = new Parcelable.Creator<PreferredRoamingPartnerList>() { public PreferredRoamingPartnerList createFromParcel(Parcel in) { return new PreferredRoamingPartnerList(in); } public PreferredRoamingPartnerList[] newArray(int size) { return new PreferredRoamingPartnerList[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/MinBackhaulThreshold **/ public static class MinBackhaulThresholdNetwork implements Parcelable { public String nodeName; public String NetworkType; public String DLBandwidth; public String ULBandwidth; public MinBackhaulThresholdNetwork(String nn, String nt, String d, String u) { nodeName = nn; NetworkType = nt; DLBandwidth = d; ULBandwidth = u; } public MinBackhaulThresholdNetwork() { } public MinBackhaulThresholdNetwork(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(NetworkType); out.writeString(DLBandwidth); out.writeString(ULBandwidth); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); NetworkType = in.readString(); DLBandwidth = in.readString(); ULBandwidth = in.readString(); } } public static final Parcelable.Creator<MinBackhaulThresholdNetwork> CREATOR = new Parcelable.Creator<MinBackhaulThresholdNetwork>() { public MinBackhaulThresholdNetwork createFromParcel(Parcel in) { return new MinBackhaulThresholdNetwork(in); } public MinBackhaulThresholdNetwork[] newArray(int size) { return new MinBackhaulThresholdNetwork[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/PolicyUpdate **/ public static class PolicyUpdate implements Parcelable { public String UpdateInterval; public String UpdateMethod; public String Restriction; public String URI; public UsernamePassword usernamePassword = new UsernamePassword(); public String Other; public TrustRoot trustRoot = new TrustRoot(); public PolicyUpdate() { } public PolicyUpdate(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(UpdateInterval); out.writeString(UpdateMethod); out.writeString(Restriction); out.writeString(URI); out.writeParcelable(usernamePassword, flags); out.writeString(Other); out.writeParcelable(trustRoot, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { UpdateInterval = in.readString(); UpdateMethod = in.readString(); Restriction = in.readString(); URI = in.readString(); usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader()); Other = in.readString(); trustRoot = in.readParcelable(TrustRoot.class.getClassLoader()); } } public static final Parcelable.Creator<PolicyUpdate> CREATOR = new Parcelable.Creator<PolicyUpdate>() { public PolicyUpdate createFromParcel(Parcel in) { return new PolicyUpdate(in); } public PolicyUpdate[] newArray(int size) { return new PolicyUpdate[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/SPExclusionList **/ public static class SPExclusionList implements Parcelable { public String nodeName; public String SSID; public SPExclusionList(String nn, String s) { nodeName = nn; SSID = s; } public SPExclusionList() { } public SPExclusionList(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(SSID); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); SSID = in.readString(); } } public static final Parcelable.Creator<SPExclusionList> CREATOR = new Parcelable.Creator<SPExclusionList>() { public SPExclusionList createFromParcel(Parcel in) { return new SPExclusionList(in); } public SPExclusionList[] newArray(int size) { return new SPExclusionList[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/RequiredProtoPortTuple **/ public static class RequiredProtoPortTuple implements Parcelable { public String nodeName; public String IPProtocol; public String PortNumber; public RequiredProtoPortTuple() { } public RequiredProtoPortTuple(String nn, String protocol, String port) { nodeName = nn; IPProtocol = protocol; PortNumber = port; } public RequiredProtoPortTuple(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(IPProtocol); out.writeString(PortNumber); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); IPProtocol = in.readString(); PortNumber = in.readString(); } } public static final Parcelable.Creator<RequiredProtoPortTuple> CREATOR = new Parcelable.Creator<RequiredProtoPortTuple>() { public RequiredProtoPortTuple createFromParcel(Parcel in) { return new RequiredProtoPortTuple(in); } public RequiredProtoPortTuple[] newArray(int size) { return new RequiredProtoPortTuple[size]; } }; } /** * PerProviderSubscription/<X+>/AAAServerTrustRoot **/ public static class AAAServerTrustRoot implements Parcelable { public String nodeName; public String CertURL; public String CertSHA256Fingerprint; public AAAServerTrustRoot(String nn, String url, String fp) { nodeName = nn; CertURL = url; CertSHA256Fingerprint = fp; } public AAAServerTrustRoot() { } public AAAServerTrustRoot(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(CertURL); out.writeString(CertSHA256Fingerprint); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); CertURL = in.readString(); CertSHA256Fingerprint = in.readString(); } } public static final Parcelable.Creator<AAAServerTrustRoot> CREATOR = new Parcelable.Creator<AAAServerTrustRoot>() { public AAAServerTrustRoot createFromParcel(Parcel in) { return new AAAServerTrustRoot(in); } public AAAServerTrustRoot[] newArray(int size) { return new AAAServerTrustRoot[size]; } }; } /** * PerProviderSubscription/<X+>/SubscriptionUpdate **/ public static class SubscriptionUpdate implements Parcelable { public String UpdateInterval; public String UpdateMethod; public String Restriction; public String URI; public UsernamePassword usernamePassword = new UsernamePassword(); public String Other; public TrustRoot trustRoot = new TrustRoot(); public SubscriptionUpdate() { } public SubscriptionUpdate(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(UpdateInterval); out.writeString(UpdateMethod); out.writeString(Restriction); out.writeString(URI); out.writeParcelable(usernamePassword, flags); out.writeString(Other); out.writeParcelable(trustRoot, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { UpdateInterval = in.readString(); UpdateMethod = in.readString(); Restriction = in.readString(); URI = in.readString(); usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader()); Other = in.readString(); trustRoot = in.readParcelable(TrustRoot.class.getClassLoader()); } } public static final Parcelable.Creator<SubscriptionUpdate> CREATOR = new Parcelable.Creator<SubscriptionUpdate>() { public SubscriptionUpdate createFromParcel(Parcel in) { return new SubscriptionUpdate(in); } public SubscriptionUpdate[] newArray(int size) { return new SubscriptionUpdate[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/PolicyUpdate/TrustRoot * PerProviderSubscription/<X+>/SubscriptionUpdate/TrustRoot * PerProviderSubscription/<X+>/AAAServerTrustRoot/<X+> **/ public static class TrustRoot implements Parcelable { public String CertURL; public String CertSHA256Fingerprint; public TrustRoot() { } public TrustRoot(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(CertURL); out.writeString(CertSHA256Fingerprint); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { CertURL = in.readString(); CertSHA256Fingerprint = in.readString(); } } public static final Parcelable.Creator<TrustRoot> CREATOR = new Parcelable.Creator<TrustRoot>() { public TrustRoot createFromParcel(Parcel in) { return new TrustRoot(in); } public TrustRoot[] newArray(int size) { return new TrustRoot[size]; } }; } /** * PerProviderSubscription/<X+>/Policy/PolicyUpdate/UsernamePassword * PerProviderSubscription/<X+>/SubscriptionUpdate/UsernamePassword * PerProviderSubscription/<X+>/Credential/UsernamePassword **/ public static class UsernamePassword implements Parcelable { public String Username; public String Password; //following are Credential node used only public boolean MachineManaged; public String SoftTokenApp; public String AbleToShare; public EAPMethod eAPMethod = new EAPMethod(); public UsernamePassword() { } public UsernamePassword(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(Username); out.writeString(Password); out.writeInt(MachineManaged ? 1 : 0); out.writeString(SoftTokenApp); out.writeString(AbleToShare); out.writeParcelable(eAPMethod, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { Username = in.readString(); Password = in.readString(); MachineManaged = (in.readInt() == 1) ? true : false; SoftTokenApp = in.readString(); AbleToShare = in.readString(); eAPMethod = in.readParcelable(EAPMethod.class.getClassLoader()); } } public static final Parcelable.Creator<UsernamePassword> CREATOR = new Parcelable.Creator<UsernamePassword>() { public UsernamePassword createFromParcel(Parcel in) { return new UsernamePassword(in); } public UsernamePassword[] newArray(int size) { return new UsernamePassword[size]; } }; } /** * PerProviderSubscription/<X+>/Credential/UsernamePassword/EAPMethod **/ public static class EAPMethod implements Parcelable { public String EAPType; public String VendorId; public String VendorType; public String InnerEAPType; public String InnerVendorId; public String InnerVendorType; public String InnerMethod; public EAPMethod() { } public EAPMethod(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(EAPType); out.writeString(VendorId); out.writeString(VendorType); out.writeString(InnerEAPType); out.writeString(InnerVendorId); out.writeString(InnerVendorType); out.writeString(InnerMethod); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { EAPType = in.readString(); VendorId = in.readString(); VendorType = in.readString(); InnerEAPType = in.readString(); InnerVendorId = in.readString(); InnerVendorType = in.readString(); InnerMethod = in.readString(); } } public static final Parcelable.Creator<EAPMethod> CREATOR = new Parcelable.Creator<EAPMethod>() { public EAPMethod createFromParcel(Parcel in) { return new EAPMethod(in); } public EAPMethod[] newArray(int size) { return new EAPMethod[size]; } }; } /** * PerProviderSubscription/<X+>/HomeSP **/ public static class HomeSP implements Parcelable { public HashMap<String, NetworkID> networkID = new HashMap<String, NetworkID>(); public String FriendlyName; public String IconURL; public String FQDN; public HashMap<String, HomeOIList> homeOIList = new HashMap<String, HomeOIList>(); public HashMap<String, OtherHomePartners> otherHomePartners = new HashMap<String, OtherHomePartners>(); public String RoamingConsortiumOI; public NetworkID createNetworkID(String name, String ssid, String hessid) { NetworkID obj = new NetworkID(name, ssid, hessid); networkID.put(name, obj); return obj; } public HomeOIList createHomeOIList(String name, String homeoi, boolean required) { HomeOIList obj = new HomeOIList(name, homeoi, required); homeOIList.put(name, obj); return obj; } public OtherHomePartners createOtherHomePartners(String name, String fqdn) { OtherHomePartners obj = new OtherHomePartners(name, fqdn); otherHomePartners.put(name, obj); return obj; } public HomeSP() { } public HomeSP(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeMap(networkID); out.writeString(FriendlyName); out.writeString(IconURL); out.writeString(FQDN); out.writeMap(homeOIList); out.writeMap(otherHomePartners); out.writeString(RoamingConsortiumOI); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { in.readMap(networkID, NetworkID.class.getClassLoader()); FriendlyName = in.readString(); IconURL = in.readString(); FQDN = in.readString(); in.readMap(homeOIList, HomeOIList.class.getClassLoader()); in.readMap(otherHomePartners, OtherHomePartners.class.getClassLoader()); RoamingConsortiumOI = in.readString(); } } public static final Parcelable.Creator<HomeSP> CREATOR = new Parcelable.Creator<HomeSP>() { public HomeSP createFromParcel(Parcel in) { return new HomeSP(in); } public HomeSP[] newArray(int size) { return new HomeSP[size]; } }; } /** * PerProviderSubscription/<X+>/HomeSP/NetworkID **/ public static class NetworkID implements Parcelable { public String nodeName; public String SSID; public String HESSID; public NetworkID(String nn, String s, String h) { nodeName = nn; SSID = s; HESSID = h; } public NetworkID() { } public NetworkID(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(SSID); out.writeString(HESSID); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); SSID = in.readString(); HESSID = in.readString(); } } public static final Parcelable.Creator<NetworkID> CREATOR = new Parcelable.Creator<NetworkID>() { public NetworkID createFromParcel(Parcel in) { return new NetworkID(in); } public NetworkID[] newArray(int size) { return new NetworkID[size]; } }; } /** * PerProviderSubscription/<X+>/HomeSP/HomeOIList **/ public static class HomeOIList implements Parcelable { public String nodeName; public String HomeOI; public boolean HomeOIRequired; public HomeOIList(String nn, String h, boolean r) { nodeName = nn; HomeOI = h; HomeOIRequired = r; } public HomeOIList() { } public HomeOIList(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(HomeOI); out.writeInt(HomeOIRequired ? 1 : 0); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); HomeOI = in.readString(); HomeOIRequired = (in.readInt() == 1) ? true : false; } } public static final Parcelable.Creator<HomeOIList> CREATOR = new Parcelable.Creator<HomeOIList>() { public HomeOIList createFromParcel(Parcel in) { return new HomeOIList(in); } public HomeOIList[] newArray(int size) { return new HomeOIList[size]; } }; } /** * PerProviderSubscription/<X+>/HomeSP/OtherHomePartners **/ public static class OtherHomePartners implements Parcelable { public String nodeName; public String FQDN; public OtherHomePartners(String nn, String f) { nodeName = nn; FQDN = f; } public OtherHomePartners() { } public OtherHomePartners(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(nodeName); out.writeString(FQDN); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { nodeName = in.readString(); FQDN = in.readString(); } } public static final Parcelable.Creator<OtherHomePartners> CREATOR = new Parcelable.Creator<OtherHomePartners>() { public OtherHomePartners createFromParcel(Parcel in) { return new OtherHomePartners(in); } public OtherHomePartners[] newArray(int size) { return new OtherHomePartners[size]; } }; } /** * PerProviderSubscription/<X+>/SubscriptionParameters **/ public static class SubscriptionParameters implements Parcelable { public String CreationDate; public String ExpirationDate; public String TypeOfSubscription; public UsageLimits usageLimits = new UsageLimits(); public SubscriptionParameters() { } public SubscriptionParameters(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(CreationDate); out.writeString(ExpirationDate); out.writeString(TypeOfSubscription); out.writeParcelable(usageLimits, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { CreationDate = in.readString(); ExpirationDate = in.readString(); TypeOfSubscription = in.readString(); usageLimits = in.readParcelable(UsageLimits.class.getClassLoader()); } } public static final Parcelable.Creator<SubscriptionParameters> CREATOR = new Parcelable.Creator<SubscriptionParameters>() { public SubscriptionParameters createFromParcel(Parcel in) { return new SubscriptionParameters(in); } public SubscriptionParameters[] newArray(int size) { return new SubscriptionParameters[size]; } }; } /** * PerProviderSubscription/<X+>/SubscriptionParameters/UsageLimits **/ public static class UsageLimits implements Parcelable { public String DataLimit; public String StartDate; public String TimeLimit; public String UsageTimePeriod; public UsageLimits() { } public UsageLimits(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(DataLimit); out.writeString(StartDate); out.writeString(TimeLimit); out.writeString(UsageTimePeriod); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { DataLimit = in.readString(); StartDate = in.readString(); TimeLimit = in.readString(); UsageTimePeriod = in.readString(); } } public static final Parcelable.Creator<UsageLimits> CREATOR = new Parcelable.Creator<UsageLimits>() { public UsageLimits createFromParcel(Parcel in) { return new UsageLimits(in); } public UsageLimits[] newArray(int size) { return new UsageLimits[size]; } }; } /** * PerProviderSubscription/<X+>/Credential **/ public static class Credential implements Parcelable { public String CreationDate; public String ExpirationDate; public UsernamePassword usernamePassword = new UsernamePassword(); public DigitalCertificate digitalCertificate = new DigitalCertificate(); public String Realm; public boolean CheckAAAServerCertStatus; public SIM sim = new SIM(); public Credential() { } public Credential(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(CreationDate); out.writeString(ExpirationDate); out.writeParcelable(usernamePassword, flags); out.writeParcelable(digitalCertificate, flags); out.writeString(Realm); out.writeInt(CheckAAAServerCertStatus ? 1 : 0); out.writeParcelable(sim, flags); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { CreationDate = in.readString(); ExpirationDate = in.readString(); usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader()); digitalCertificate = in.readParcelable(DigitalCertificate.class.getClassLoader()); Realm = in.readString(); CheckAAAServerCertStatus = (in.readInt() == 1) ? true : false; sim = in.readParcelable(SIM.class.getClassLoader()); } } public static final Parcelable.Creator<Credential> CREATOR = new Parcelable.Creator<Credential>() { public Credential createFromParcel(Parcel in) { return new Credential(in); } public Credential[] newArray(int size) { return new Credential[size]; } }; } /** * PerProviderSubscription/<X+>/Credential/DigitalCertificate **/ public static class DigitalCertificate implements Parcelable { public String CertificateType; public String CertSHA256Fingerprint; public DigitalCertificate() { } public DigitalCertificate(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(CertificateType); out.writeString(CertSHA256Fingerprint); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { CertificateType = in.readString(); CertSHA256Fingerprint = in.readString(); } } public static final Parcelable.Creator<DigitalCertificate> CREATOR = new Parcelable.Creator<DigitalCertificate>() { public DigitalCertificate createFromParcel(Parcel in) { return new DigitalCertificate(in); } public DigitalCertificate[] newArray(int size) { return new DigitalCertificate[size]; } }; } /** * PerProviderSubscription/<X+>/Credential/SIM **/ public static class SIM implements Parcelable { public String IMSI; public String EAPType; public SIM() { } public SIM(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(IMSI); out.writeString(EAPType); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { IMSI = in.readString(); EAPType = in.readString(); } } public static final Parcelable.Creator<SIM> CREATOR = new Parcelable.Creator<SIM>() { public SIM createFromParcel(Parcel in) { return new SIM(in); } public SIM[] newArray(int size) { return new SIM[size]; } }; } /** * PerProviderSubscription/<X+>/Extension **/ public static class Extension { public String empty; } public WifiPasspointDmTree() { } public WifiPasspointDmTree(Parcel in) { readFromParcel(in); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeMap(spFqdn); } public void readFromParcel(Parcel in) { if (in == null) { //log here } else { in.readMap(spFqdn, SpFqdn.class.getClassLoader()); } } public static final Parcelable.Creator<WifiPasspointDmTree> CREATOR = new Parcelable.Creator<WifiPasspointDmTree>() { public WifiPasspointDmTree createFromParcel(Parcel in) { return new WifiPasspointDmTree(in); } public WifiPasspointDmTree[] newArray(int size) { return new WifiPasspointDmTree[size]; } }; }