WifiPasspointDmTree.java revision 7fee7232ee2ae45fb3cd4fcce314e8f1101ae8db
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.net.wifi.passpoint;
18
19import android.os.Parcelable;
20import android.os.Parcel;
21import android.util.Log;
22
23import java.util.HashMap;
24
25/**
26 * Required Mobile Device Management Tree Structure
27 *
28 *                           +----------+
29 *                           | ./(Root) |
30 *                           +----+-----+
31 *                                |
32 *          +---------+           |         +---------+   +---------+
33 *          | DevInfo |-----------+---------| Wi-Fi   |---|SP FQDN* |
34 *          +---------+           |         +---------+   +---------+
35 *          +---------+           |
36 *          |DevDetail|-----------+
37 *          +---------+
38 *
39 * For example,
40 * ./Wi-Fi/wi-fi.org/PerproviderSubscription/Cred01/Policy/PreferredRoamingPartnerList/Roa01/FQDN_Math
41 *
42 * This class contains all nodes start from Wi-Fi
43 * @hide
44 **/
45public class WifiPasspointDmTree implements Parcelable {
46    private final static String TAG = "WifiTree";
47    public int PpsMoId;//plugfest used only
48    public HashMap<String, SpFqdn> spFqdn = new HashMap<String, SpFqdn>();//Maps.newHashMap();
49
50    public SpFqdn createSpFqdn(String name) {
51        SpFqdn obj = new SpFqdn(name);
52        spFqdn.put(name, obj);
53        return obj;
54    }
55
56    public static class SpFqdn implements Parcelable {
57        public String nodeName;
58        public PerProviderSubscription perProviderSubscription = new PerProviderSubscription();
59
60        public SpFqdn(String name) {
61            nodeName = name;
62        }
63
64        public SpFqdn() {
65        }
66
67        public SpFqdn(Parcel in) {
68            readFromParcel(in);
69        }
70
71        public int describeContents() {
72            return 0;
73        }
74
75        public void writeToParcel(Parcel out, int flags) {
76            out.writeString(nodeName);
77            out.writeParcelable(perProviderSubscription, flags);
78        }
79
80        public void readFromParcel(Parcel in) {
81            if (in == null) {
82                //log here
83            } else {
84                nodeName = in.readString();
85                perProviderSubscription = in.readParcelable(PerProviderSubscription.class
86                        .getClassLoader());
87            }
88        }
89
90        public static final Parcelable.Creator<SpFqdn> CREATOR = new Parcelable.Creator<SpFqdn>() {
91            public SpFqdn createFromParcel(Parcel in) {
92                return new SpFqdn(in);
93            }
94
95            public SpFqdn[] newArray(int size) {
96                return new SpFqdn[size];
97            }
98        };
99    }
100
101    /**
102     * PerProviderSubscription
103     **/
104    public static class PerProviderSubscription implements Parcelable {
105        /**
106         * PerProviderSubscription/UpdateIdentifier
107         **/
108        public String UpdateIdentifier;
109        public HashMap<String, CredentialInfo> credentialInfo = new HashMap<String, CredentialInfo>();
110
111        public CredentialInfo createCredentialInfo(String name) {
112            CredentialInfo obj = new CredentialInfo(name);
113            credentialInfo.put(name, obj);
114            return obj;
115        }
116
117        public PerProviderSubscription() {
118        }
119
120        public PerProviderSubscription(Parcel in) {
121            readFromParcel(in);
122        }
123
124        public int describeContents() {
125            return 0;
126        }
127
128        public void writeToParcel(Parcel out, int flags) {
129            out.writeString(UpdateIdentifier);
130            out.writeMap(credentialInfo);
131        }
132
133        public void readFromParcel(Parcel in) {
134            if (in == null) {
135                //log here
136            } else {
137                UpdateIdentifier = in.readString();
138                in.readMap(credentialInfo, CredentialInfo.class.getClassLoader());
139            }
140        }
141
142        public static final Parcelable.Creator<PerProviderSubscription> CREATOR = new Parcelable.Creator<PerProviderSubscription>() {
143            public PerProviderSubscription createFromParcel(Parcel in) {
144                return new PerProviderSubscription(in);
145            }
146
147            public PerProviderSubscription[] newArray(int size) {
148                return new PerProviderSubscription[size];
149            }
150        };
151
152    }
153
154    /**
155     * PerProviderSubscription/<X+>
156     * This interior node contains the Home SP information, subscription policy, management and credential information.
157     **/
158    public static class CredentialInfo implements Parcelable {
159        public String nodeName;
160        public Policy policy = new Policy();
161        public String credentialPriority;
162        public HashMap<String, AAAServerTrustRoot> aAAServerTrustRoot = new HashMap<String, AAAServerTrustRoot>();
163        public SubscriptionUpdate subscriptionUpdate = new SubscriptionUpdate();
164        public HomeSP homeSP = new HomeSP();
165        public SubscriptionParameters subscriptionParameters = new SubscriptionParameters();
166        public Credential credential = new Credential();
167        public Extension extension = new Extension();
168
169        public CredentialInfo(String nn) {
170            nodeName = nn;
171        }
172
173        public AAAServerTrustRoot createAAAServerTrustRoot(String name, String url, String fp) {
174            AAAServerTrustRoot obj = new AAAServerTrustRoot(name, url, fp);
175            aAAServerTrustRoot.put(name, obj);
176            return obj;
177        }
178
179        public CredentialInfo() {
180        }
181
182        public CredentialInfo(Parcel in) {
183            readFromParcel(in);
184        }
185
186        public int describeContents() {
187            return 0;
188        }
189
190        public void writeToParcel(Parcel out, int flags) {
191            out.writeString(nodeName);
192            out.writeParcelable(policy, flags);
193            out.writeString(credentialPriority);
194            out.writeMap(aAAServerTrustRoot);
195            out.writeParcelable(subscriptionUpdate, flags);
196            out.writeParcelable(homeSP, flags);
197            out.writeParcelable(subscriptionParameters, flags);
198            out.writeParcelable(credential, flags);
199            //out.writeParcelable(extension, flags);
200        }
201
202        public void readFromParcel(Parcel in) {
203            if (in == null) {
204                //log here
205            } else {
206                nodeName = in.readString();
207                policy = in.readParcelable(Policy.class.getClassLoader());
208                credentialPriority = in.readString();
209                in.readMap(aAAServerTrustRoot, AAAServerTrustRoot.class.getClassLoader());
210                subscriptionUpdate = in.readParcelable(SubscriptionUpdate.class.getClassLoader());
211                homeSP = in.readParcelable(HomeSP.class.getClassLoader());
212                subscriptionParameters = in.readParcelable(SubscriptionParameters.class
213                        .getClassLoader());
214                credential = in.readParcelable(Credential.class.getClassLoader());
215                //extension = in.readParcelable(Extension.class.getClassLoader());
216            }
217        }
218
219        public static final Parcelable.Creator<CredentialInfo> CREATOR = new Parcelable.Creator<CredentialInfo>() {
220            public CredentialInfo createFromParcel(Parcel in) {
221                return new CredentialInfo(in);
222            }
223
224            public CredentialInfo[] newArray(int size) {
225                return new CredentialInfo[size];
226            }
227        };
228
229    }
230
231    /**
232     * PerProviderSubscription/<X+>/Policy
233     **/
234    public static class Policy implements Parcelable {
235        public HashMap<String, PreferredRoamingPartnerList> preferredRoamingPartnerList = new HashMap<String, PreferredRoamingPartnerList>();
236        public HashMap<String, MinBackhaulThresholdNetwork> minBackhaulThreshold = new HashMap<String, MinBackhaulThresholdNetwork>();
237        public PolicyUpdate policyUpdate = new PolicyUpdate();
238        public HashMap<String, SPExclusionList> sPExclusionList = new HashMap<String, SPExclusionList>();
239        public HashMap<String, RequiredProtoPortTuple> requiredProtoPortTuple = new HashMap<String, RequiredProtoPortTuple>();
240        public String maximumBSSLoadValue;
241
242        public PreferredRoamingPartnerList createPreferredRoamingPartnerList(String name,
243                String fqdn, String priority, String country) {
244            PreferredRoamingPartnerList obj = new PreferredRoamingPartnerList(name, fqdn, priority,
245                    country);
246            preferredRoamingPartnerList.put(name, obj);
247            return obj;
248        }
249
250        public MinBackhaulThresholdNetwork createMinBackhaulThreshold(String name, String type,
251                String dl, String ul) {
252            MinBackhaulThresholdNetwork obj = new MinBackhaulThresholdNetwork(name, type, dl, ul);
253            minBackhaulThreshold.put(name, obj);
254            return obj;
255        }
256
257        public SPExclusionList createSPExclusionList(String name, String ssid) {
258            SPExclusionList obj = new SPExclusionList(name, ssid);
259            sPExclusionList.put(name, obj);
260            return obj;
261        }
262
263        public RequiredProtoPortTuple createRequiredProtoPortTuple(String name, String proto,
264                String port) {
265            RequiredProtoPortTuple obj = new RequiredProtoPortTuple(name, proto, port);
266            requiredProtoPortTuple.put(name, obj);
267            return obj;
268        }
269
270        public Policy() {
271        }
272
273        public Policy(Parcel in) {
274            readFromParcel(in);
275        }
276
277        public int describeContents() {
278            return 0;
279        }
280
281        public void writeToParcel(Parcel out, int flags) {
282            out.writeMap(preferredRoamingPartnerList);
283            out.writeMap(minBackhaulThreshold);
284            out.writeParcelable(policyUpdate, flags);
285            out.writeMap(sPExclusionList);
286            out.writeMap(requiredProtoPortTuple);
287            out.writeString(maximumBSSLoadValue);
288        }
289
290        public void readFromParcel(Parcel in) {
291            if (in == null) {
292                //log here
293            } else {
294                in.readMap(preferredRoamingPartnerList,
295                        PreferredRoamingPartnerList.class.getClassLoader());
296                in.readMap(minBackhaulThreshold, MinBackhaulThresholdNetwork.class.getClassLoader());
297                policyUpdate = in.readParcelable(PolicyUpdate.class.getClassLoader());
298                in.readMap(sPExclusionList, SPExclusionList.class.getClassLoader());
299                in.readMap(requiredProtoPortTuple, RequiredProtoPortTuple.class.getClassLoader());
300                maximumBSSLoadValue = in.readString();
301
302            }
303        }
304
305        public static final Parcelable.Creator<Policy> CREATOR = new Parcelable.Creator<Policy>() {
306            public Policy createFromParcel(Parcel in) {
307                return new Policy(in);
308            }
309
310            public Policy[] newArray(int size) {
311                return new Policy[size];
312            }
313        };
314
315    }
316
317    /**
318     * PerProviderSubscription/<X+>/Policy/PreferredRoamingPartnerList/<X+>
319     **/
320    public static class PreferredRoamingPartnerList implements Parcelable {
321        public String nodeName;
322        public String FQDN_Match; //maximum 255 + ",includeSubdomains", equals 273
323        public String Priority;
324        public String Country; // maximum 600 octets
325
326        public PreferredRoamingPartnerList(String nn, String f, String p, String c) {
327            nodeName = nn;
328            FQDN_Match = f;
329            Priority = p;
330            Country = c;
331        }
332
333        public PreferredRoamingPartnerList() {
334        }
335
336        public PreferredRoamingPartnerList(Parcel in) {
337            readFromParcel(in);
338        }
339
340        public int describeContents() {
341            return 0;
342        }
343
344        public void writeToParcel(Parcel out, int flags) {
345            out.writeString(nodeName);
346            out.writeString(FQDN_Match);
347            out.writeString(Priority);
348            out.writeString(Country);
349        }
350
351        public void readFromParcel(Parcel in) {
352            if (in == null) {
353                //log here
354            } else {
355                nodeName = in.readString();
356                FQDN_Match = in.readString();
357                Priority = in.readString();
358                Country = in.readString();
359            }
360        }
361
362        public static final Parcelable.Creator<PreferredRoamingPartnerList> CREATOR = new Parcelable.Creator<PreferredRoamingPartnerList>() {
363            public PreferredRoamingPartnerList createFromParcel(Parcel in) {
364                return new PreferredRoamingPartnerList(in);
365            }
366
367            public PreferredRoamingPartnerList[] newArray(int size) {
368                return new PreferredRoamingPartnerList[size];
369            }
370        };
371    }
372
373    /**
374     * PerProviderSubscription/<X+>/Policy/MinBackhaulThreshold
375     **/
376    public static class MinBackhaulThresholdNetwork implements Parcelable {
377        public String nodeName;
378        public String NetworkType;
379        public String DLBandwidth;
380        public String ULBandwidth;
381
382        public MinBackhaulThresholdNetwork(String nn, String nt, String d, String u) {
383            nodeName = nn;
384            NetworkType = nt;
385            DLBandwidth = d;
386            ULBandwidth = u;
387        }
388
389        public MinBackhaulThresholdNetwork() {
390        }
391
392        public MinBackhaulThresholdNetwork(Parcel in) {
393            readFromParcel(in);
394        }
395
396        public int describeContents() {
397            return 0;
398        }
399
400        public void writeToParcel(Parcel out, int flags) {
401            out.writeString(nodeName);
402            out.writeString(NetworkType);
403            out.writeString(DLBandwidth);
404            out.writeString(ULBandwidth);
405        }
406
407        public void readFromParcel(Parcel in) {
408            if (in == null) {
409                //log here
410            } else {
411                nodeName = in.readString();
412                NetworkType = in.readString();
413                DLBandwidth = in.readString();
414                ULBandwidth = in.readString();
415            }
416        }
417
418        public static final Parcelable.Creator<MinBackhaulThresholdNetwork> CREATOR = new Parcelable.Creator<MinBackhaulThresholdNetwork>() {
419            public MinBackhaulThresholdNetwork createFromParcel(Parcel in) {
420                return new MinBackhaulThresholdNetwork(in);
421            }
422
423            public MinBackhaulThresholdNetwork[] newArray(int size) {
424                return new MinBackhaulThresholdNetwork[size];
425            }
426        };
427
428    }
429
430    /**
431     * PerProviderSubscription/<X+>/Policy/PolicyUpdate
432     **/
433    public static class PolicyUpdate implements Parcelable {
434        public String UpdateInterval;
435        public String UpdateMethod;
436        public String Restriction;
437        public String URI;
438        public UsernamePassword usernamePassword = new UsernamePassword();
439        public String Other;
440        public TrustRoot trustRoot = new TrustRoot();
441
442        public PolicyUpdate() {
443        }
444
445        public PolicyUpdate(Parcel in) {
446            readFromParcel(in);
447        }
448
449        public int describeContents() {
450            return 0;
451        }
452
453        public void writeToParcel(Parcel out, int flags) {
454            out.writeString(UpdateInterval);
455            out.writeString(UpdateMethod);
456            out.writeString(Restriction);
457            out.writeString(URI);
458            out.writeParcelable(usernamePassword, flags);
459            out.writeString(Other);
460            out.writeParcelable(trustRoot, flags);
461
462        }
463
464        public void readFromParcel(Parcel in) {
465            if (in == null) {
466                //log here
467            } else {
468                UpdateInterval = in.readString();
469                UpdateMethod = in.readString();
470                Restriction = in.readString();
471                URI = in.readString();
472                usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader());
473                Other = in.readString();
474                trustRoot = in.readParcelable(TrustRoot.class.getClassLoader());
475            }
476        }
477
478        public static final Parcelable.Creator<PolicyUpdate> CREATOR = new Parcelable.Creator<PolicyUpdate>() {
479            public PolicyUpdate createFromParcel(Parcel in) {
480                return new PolicyUpdate(in);
481            }
482
483            public PolicyUpdate[] newArray(int size) {
484                return new PolicyUpdate[size];
485            }
486        };
487    }
488
489    /**
490     * PerProviderSubscription/<X+>/Policy/SPExclusionList
491     **/
492    public static class SPExclusionList implements Parcelable {
493        public String nodeName;
494        public String SSID;
495
496        public SPExclusionList(String nn, String s) {
497            nodeName = nn;
498            SSID = s;
499        }
500
501        public SPExclusionList() {
502        }
503
504        public SPExclusionList(Parcel in) {
505            readFromParcel(in);
506        }
507
508        public int describeContents() {
509            return 0;
510        }
511
512        public void writeToParcel(Parcel out, int flags) {
513            out.writeString(nodeName);
514            out.writeString(SSID);
515        }
516
517        public void readFromParcel(Parcel in) {
518            if (in == null) {
519                //log here
520            } else {
521                nodeName = in.readString();
522                SSID = in.readString();
523            }
524        }
525
526        public static final Parcelable.Creator<SPExclusionList> CREATOR = new Parcelable.Creator<SPExclusionList>() {
527            public SPExclusionList createFromParcel(Parcel in) {
528                return new SPExclusionList(in);
529            }
530
531            public SPExclusionList[] newArray(int size) {
532                return new SPExclusionList[size];
533            }
534        };
535    }
536
537    /**
538     * PerProviderSubscription/<X+>/Policy/RequiredProtoPortTuple
539     **/
540    public static class RequiredProtoPortTuple implements Parcelable {
541        public String nodeName;
542        public String IPProtocol;
543        public String PortNumber;
544
545        public RequiredProtoPortTuple() {
546        }
547
548        public RequiredProtoPortTuple(String nn, String protocol, String port) {
549            nodeName = nn;
550            IPProtocol = protocol;
551            PortNumber = port;
552        }
553
554        public RequiredProtoPortTuple(Parcel in) {
555            readFromParcel(in);
556        }
557
558        public int describeContents() {
559            return 0;
560        }
561
562        public void writeToParcel(Parcel out, int flags) {
563            out.writeString(nodeName);
564            out.writeString(IPProtocol);
565            out.writeString(PortNumber);
566        }
567
568        public void readFromParcel(Parcel in) {
569            if (in == null) {
570                //log here
571            } else {
572                nodeName = in.readString();
573                IPProtocol = in.readString();
574                PortNumber = in.readString();
575            }
576        }
577
578        public static final Parcelable.Creator<RequiredProtoPortTuple> CREATOR = new Parcelable.Creator<RequiredProtoPortTuple>() {
579            public RequiredProtoPortTuple createFromParcel(Parcel in) {
580                return new RequiredProtoPortTuple(in);
581            }
582
583            public RequiredProtoPortTuple[] newArray(int size) {
584                return new RequiredProtoPortTuple[size];
585            }
586        };
587    }
588
589    /**
590     * PerProviderSubscription/<X+>/AAAServerTrustRoot
591     **/
592    public static class AAAServerTrustRoot implements Parcelable {
593        public String nodeName;
594        public String CertURL;
595        public String CertSHA256Fingerprint;
596
597        public AAAServerTrustRoot(String nn, String url, String fp) {
598            nodeName = nn;
599            CertURL = url;
600            CertSHA256Fingerprint = fp;
601        }
602
603        public AAAServerTrustRoot() {
604        }
605
606        public AAAServerTrustRoot(Parcel in) {
607            readFromParcel(in);
608        }
609
610        public int describeContents() {
611            return 0;
612        }
613
614        public void writeToParcel(Parcel out, int flags) {
615            out.writeString(nodeName);
616            out.writeString(CertURL);
617            out.writeString(CertSHA256Fingerprint);
618        }
619
620        public void readFromParcel(Parcel in) {
621            if (in == null) {
622                //log here
623            } else {
624                nodeName = in.readString();
625                CertURL = in.readString();
626                CertSHA256Fingerprint = in.readString();
627            }
628        }
629
630        public static final Parcelable.Creator<AAAServerTrustRoot> CREATOR = new Parcelable.Creator<AAAServerTrustRoot>() {
631            public AAAServerTrustRoot createFromParcel(Parcel in) {
632                return new AAAServerTrustRoot(in);
633            }
634
635            public AAAServerTrustRoot[] newArray(int size) {
636                return new AAAServerTrustRoot[size];
637            }
638        };
639    }
640
641    /**
642     * PerProviderSubscription/<X+>/SubscriptionUpdate
643     **/
644    public static class SubscriptionUpdate implements Parcelable {
645        public String UpdateInterval;
646        public String UpdateMethod;
647        public String Restriction;
648        public String URI;
649        public UsernamePassword usernamePassword = new UsernamePassword();
650        public String Other;
651        public TrustRoot trustRoot = new TrustRoot();
652
653        public SubscriptionUpdate() {
654        }
655
656        public SubscriptionUpdate(Parcel in) {
657            readFromParcel(in);
658        }
659
660        public int describeContents() {
661            return 0;
662        }
663
664        public void writeToParcel(Parcel out, int flags) {
665            out.writeString(UpdateInterval);
666            out.writeString(UpdateMethod);
667            out.writeString(Restriction);
668            out.writeString(URI);
669            out.writeParcelable(usernamePassword, flags);
670            out.writeString(Other);
671            out.writeParcelable(trustRoot, flags);
672        }
673
674        public void readFromParcel(Parcel in) {
675            if (in == null) {
676                //log here
677            } else {
678                UpdateInterval = in.readString();
679                UpdateMethod = in.readString();
680                Restriction = in.readString();
681                URI = in.readString();
682                usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader());
683                Other = in.readString();
684                trustRoot = in.readParcelable(TrustRoot.class.getClassLoader());
685            }
686        }
687
688        public static final Parcelable.Creator<SubscriptionUpdate> CREATOR = new Parcelable.Creator<SubscriptionUpdate>() {
689            public SubscriptionUpdate createFromParcel(Parcel in) {
690                return new SubscriptionUpdate(in);
691            }
692
693            public SubscriptionUpdate[] newArray(int size) {
694                return new SubscriptionUpdate[size];
695            }
696        };
697
698    }
699
700    /**
701     * PerProviderSubscription/<X+>/Policy/PolicyUpdate/TrustRoot
702     * PerProviderSubscription/<X+>/SubscriptionUpdate/TrustRoot
703     * PerProviderSubscription/<X+>/AAAServerTrustRoot/<X+>
704     **/
705    public static class TrustRoot implements Parcelable {
706        public String CertURL;
707        public String CertSHA256Fingerprint;
708
709        public TrustRoot() {
710        }
711
712        public TrustRoot(Parcel in) {
713            readFromParcel(in);
714        }
715
716        public int describeContents() {
717            return 0;
718        }
719
720        public void writeToParcel(Parcel out, int flags) {
721            out.writeString(CertURL);
722            out.writeString(CertSHA256Fingerprint);
723        }
724
725        public void readFromParcel(Parcel in) {
726            if (in == null) {
727                //log here
728            } else {
729                CertURL = in.readString();
730                CertSHA256Fingerprint = in.readString();
731            }
732        }
733
734        public static final Parcelable.Creator<TrustRoot> CREATOR = new Parcelable.Creator<TrustRoot>() {
735            public TrustRoot createFromParcel(Parcel in) {
736                return new TrustRoot(in);
737            }
738
739            public TrustRoot[] newArray(int size) {
740                return new TrustRoot[size];
741            }
742        };
743    }
744
745    /**
746     * PerProviderSubscription/<X+>/Policy/PolicyUpdate/UsernamePassword
747     * PerProviderSubscription/<X+>/SubscriptionUpdate/UsernamePassword
748     * PerProviderSubscription/<X+>/Credential/UsernamePassword
749     **/
750    public static class UsernamePassword implements Parcelable {
751        public String Username;
752        public String Password;
753        //following are Credential node used only
754        public boolean MachineManaged;
755        public String SoftTokenApp;
756        public String AbleToShare;
757        public EAPMethod eAPMethod = new EAPMethod();
758
759        public UsernamePassword() {
760        }
761
762        public UsernamePassword(Parcel in) {
763            readFromParcel(in);
764        }
765
766        public int describeContents() {
767            return 0;
768        }
769
770        public void writeToParcel(Parcel out, int flags) {
771            out.writeString(Username);
772            out.writeString(Password);
773            out.writeInt(MachineManaged ? 1 : 0);
774            out.writeString(SoftTokenApp);
775            out.writeString(AbleToShare);
776            out.writeParcelable(eAPMethod, flags);
777        }
778
779        public void readFromParcel(Parcel in) {
780            if (in == null) {
781                //log here
782            } else {
783                Username = in.readString();
784                Password = in.readString();
785                MachineManaged = (in.readInt() == 1) ? true : false;
786                SoftTokenApp = in.readString();
787                AbleToShare = in.readString();
788                eAPMethod = in.readParcelable(EAPMethod.class.getClassLoader());
789            }
790        }
791
792        public static final Parcelable.Creator<UsernamePassword> CREATOR = new Parcelable.Creator<UsernamePassword>() {
793            public UsernamePassword createFromParcel(Parcel in) {
794                return new UsernamePassword(in);
795            }
796
797            public UsernamePassword[] newArray(int size) {
798                return new UsernamePassword[size];
799            }
800        };
801
802    }
803
804    /**
805     * PerProviderSubscription/<X+>/Credential/UsernamePassword/EAPMethod
806     **/
807    public static class EAPMethod implements Parcelable {
808        public String EAPType;
809        public String VendorId;
810        public String VendorType;
811        public String InnerEAPType;
812        public String InnerVendorId;
813        public String InnerVendorType;
814        public String InnerMethod;
815
816        public EAPMethod() {
817        }
818
819        public EAPMethod(Parcel in) {
820            readFromParcel(in);
821        }
822
823        public int describeContents() {
824            return 0;
825        }
826
827        public void writeToParcel(Parcel out, int flags) {
828            out.writeString(EAPType);
829            out.writeString(VendorId);
830            out.writeString(VendorType);
831            out.writeString(InnerEAPType);
832            out.writeString(InnerVendorId);
833            out.writeString(InnerVendorType);
834            out.writeString(InnerMethod);
835        }
836
837        public void readFromParcel(Parcel in) {
838            if (in == null) {
839                //log here
840            } else {
841                EAPType = in.readString();
842                VendorId = in.readString();
843                VendorType = in.readString();
844                InnerEAPType = in.readString();
845                InnerVendorId = in.readString();
846                InnerVendorType = in.readString();
847                InnerMethod = in.readString();
848            }
849        }
850
851        public static final Parcelable.Creator<EAPMethod> CREATOR = new Parcelable.Creator<EAPMethod>() {
852            public EAPMethod createFromParcel(Parcel in) {
853                return new EAPMethod(in);
854            }
855
856            public EAPMethod[] newArray(int size) {
857                return new EAPMethod[size];
858            }
859        };
860    }
861
862    /**
863     * PerProviderSubscription/<X+>/HomeSP
864     **/
865    public static class HomeSP implements Parcelable {
866        public HashMap<String, NetworkID> networkID = new HashMap<String, NetworkID>();
867        public String FriendlyName;
868        public String IconURL;
869        public String FQDN;
870        public HashMap<String, HomeOIList> homeOIList = new HashMap<String, HomeOIList>();
871        public HashMap<String, OtherHomePartners> otherHomePartners = new HashMap<String, OtherHomePartners>();
872        public String RoamingConsortiumOI;
873
874        public NetworkID createNetworkID(String name, String ssid, String hessid) {
875            NetworkID obj = new NetworkID(name, ssid, hessid);
876            networkID.put(name, obj);
877            return obj;
878        }
879
880        public HomeOIList createHomeOIList(String name, String homeoi, boolean required) {
881            HomeOIList obj = new HomeOIList(name, homeoi, required);
882            homeOIList.put(name, obj);
883            return obj;
884        }
885
886        public OtherHomePartners createOtherHomePartners(String name, String fqdn) {
887            OtherHomePartners obj = new OtherHomePartners(name, fqdn);
888            otherHomePartners.put(name, obj);
889            return obj;
890        }
891
892        public HomeSP() {
893        }
894
895        public HomeSP(Parcel in) {
896            readFromParcel(in);
897        }
898
899        public int describeContents() {
900            return 0;
901        }
902
903        public void writeToParcel(Parcel out, int flags) {
904            out.writeMap(networkID);
905            out.writeString(FriendlyName);
906            out.writeString(IconURL);
907            out.writeString(FQDN);
908            out.writeMap(homeOIList);
909            out.writeMap(otherHomePartners);
910            out.writeString(RoamingConsortiumOI);
911        }
912
913        public void readFromParcel(Parcel in) {
914            if (in == null) {
915                //log here
916            } else {
917                in.readMap(networkID, NetworkID.class.getClassLoader());
918                FriendlyName = in.readString();
919                IconURL = in.readString();
920                FQDN = in.readString();
921                in.readMap(homeOIList, HomeOIList.class.getClassLoader());
922                in.readMap(otherHomePartners, OtherHomePartners.class.getClassLoader());
923                RoamingConsortiumOI = in.readString();
924            }
925        }
926
927        public static final Parcelable.Creator<HomeSP> CREATOR = new Parcelable.Creator<HomeSP>() {
928            public HomeSP createFromParcel(Parcel in) {
929                return new HomeSP(in);
930            }
931
932            public HomeSP[] newArray(int size) {
933                return new HomeSP[size];
934            }
935        };
936
937    }
938
939    /**
940     * PerProviderSubscription/<X+>/HomeSP/NetworkID
941     **/
942    public static class NetworkID implements Parcelable {
943        public String nodeName;
944        public String SSID;
945        public String HESSID;
946
947        public NetworkID(String nn, String s, String h) {
948            nodeName = nn;
949            SSID = s;
950            HESSID = h;
951        }
952
953        public NetworkID() {
954        }
955
956        public NetworkID(Parcel in) {
957            readFromParcel(in);
958        }
959
960        public int describeContents() {
961            return 0;
962        }
963
964        public void writeToParcel(Parcel out, int flags) {
965            out.writeString(nodeName);
966            out.writeString(SSID);
967            out.writeString(HESSID);
968        }
969
970        public void readFromParcel(Parcel in) {
971            if (in == null) {
972                //log here
973            } else {
974                nodeName = in.readString();
975                SSID = in.readString();
976                HESSID = in.readString();
977            }
978        }
979
980        public static final Parcelable.Creator<NetworkID> CREATOR = new Parcelable.Creator<NetworkID>() {
981            public NetworkID createFromParcel(Parcel in) {
982                return new NetworkID(in);
983            }
984
985            public NetworkID[] newArray(int size) {
986                return new NetworkID[size];
987            }
988        };
989
990    }
991
992    /**
993     * PerProviderSubscription/<X+>/HomeSP/HomeOIList
994     **/
995    public static class HomeOIList implements Parcelable {
996        public String nodeName;
997        public String HomeOI;
998        public boolean HomeOIRequired;
999
1000        public HomeOIList(String nn, String h, boolean r) {
1001            nodeName = nn;
1002            HomeOI = h;
1003            HomeOIRequired = r;
1004        }
1005
1006        public HomeOIList() {
1007        }
1008
1009        public HomeOIList(Parcel in) {
1010            readFromParcel(in);
1011        }
1012
1013        public int describeContents() {
1014            return 0;
1015        }
1016
1017        public void writeToParcel(Parcel out, int flags) {
1018            out.writeString(nodeName);
1019            out.writeString(HomeOI);
1020            out.writeInt(HomeOIRequired ? 1 : 0);
1021        }
1022
1023        public void readFromParcel(Parcel in) {
1024            if (in == null) {
1025                //log here
1026            } else {
1027                nodeName = in.readString();
1028                HomeOI = in.readString();
1029                HomeOIRequired = (in.readInt() == 1) ? true : false;
1030            }
1031        }
1032
1033        public static final Parcelable.Creator<HomeOIList> CREATOR = new Parcelable.Creator<HomeOIList>() {
1034            public HomeOIList createFromParcel(Parcel in) {
1035                return new HomeOIList(in);
1036            }
1037
1038            public HomeOIList[] newArray(int size) {
1039                return new HomeOIList[size];
1040            }
1041        };
1042
1043    }
1044
1045    /**
1046     * PerProviderSubscription/<X+>/HomeSP/OtherHomePartners
1047     **/
1048    public static class OtherHomePartners implements Parcelable {
1049        public String nodeName;
1050        public String FQDN;
1051
1052        public OtherHomePartners(String nn, String f) {
1053            nodeName = nn;
1054            FQDN = f;
1055        }
1056
1057        public OtherHomePartners() {
1058        }
1059
1060        public OtherHomePartners(Parcel in) {
1061            readFromParcel(in);
1062        }
1063
1064        public int describeContents() {
1065            return 0;
1066        }
1067
1068        public void writeToParcel(Parcel out, int flags) {
1069            out.writeString(nodeName);
1070            out.writeString(FQDN);
1071        }
1072
1073        public void readFromParcel(Parcel in) {
1074            if (in == null) {
1075                //log here
1076            } else {
1077                nodeName = in.readString();
1078                FQDN = in.readString();
1079            }
1080        }
1081
1082        public static final Parcelable.Creator<OtherHomePartners> CREATOR = new Parcelable.Creator<OtherHomePartners>() {
1083            public OtherHomePartners createFromParcel(Parcel in) {
1084                return new OtherHomePartners(in);
1085            }
1086
1087            public OtherHomePartners[] newArray(int size) {
1088                return new OtherHomePartners[size];
1089            }
1090        };
1091
1092    }
1093
1094    /**
1095     * PerProviderSubscription/<X+>/SubscriptionParameters
1096     **/
1097    public static class SubscriptionParameters implements Parcelable {
1098        public String CreationDate;
1099        public String ExpirationDate;
1100        public String TypeOfSubscription;
1101        public UsageLimits usageLimits = new UsageLimits();
1102
1103        public SubscriptionParameters() {
1104        }
1105
1106        public SubscriptionParameters(Parcel in) {
1107            readFromParcel(in);
1108        }
1109
1110        public int describeContents() {
1111            return 0;
1112        }
1113
1114        public void writeToParcel(Parcel out, int flags) {
1115            out.writeString(CreationDate);
1116            out.writeString(ExpirationDate);
1117            out.writeString(TypeOfSubscription);
1118            out.writeParcelable(usageLimits, flags);
1119        }
1120
1121        public void readFromParcel(Parcel in) {
1122            if (in == null) {
1123                //log here
1124            } else {
1125                CreationDate = in.readString();
1126                ExpirationDate = in.readString();
1127                TypeOfSubscription = in.readString();
1128                usageLimits = in.readParcelable(UsageLimits.class.getClassLoader());
1129            }
1130        }
1131
1132        public static final Parcelable.Creator<SubscriptionParameters> CREATOR = new Parcelable.Creator<SubscriptionParameters>() {
1133            public SubscriptionParameters createFromParcel(Parcel in) {
1134                return new SubscriptionParameters(in);
1135            }
1136
1137            public SubscriptionParameters[] newArray(int size) {
1138                return new SubscriptionParameters[size];
1139            }
1140        };
1141
1142    }
1143
1144    /**
1145     * PerProviderSubscription/<X+>/SubscriptionParameters/UsageLimits
1146     **/
1147    public static class UsageLimits implements Parcelable {
1148        public String DataLimit;
1149        public String StartDate;
1150        public String TimeLimit;
1151        public String UsageTimePeriod;
1152
1153        public UsageLimits() {
1154        }
1155
1156        public UsageLimits(Parcel in) {
1157            readFromParcel(in);
1158        }
1159
1160        public int describeContents() {
1161            return 0;
1162        }
1163
1164        public void writeToParcel(Parcel out, int flags) {
1165            out.writeString(DataLimit);
1166            out.writeString(StartDate);
1167            out.writeString(TimeLimit);
1168            out.writeString(UsageTimePeriod);
1169        }
1170
1171        public void readFromParcel(Parcel in) {
1172            if (in == null) {
1173                //log here
1174            } else {
1175                DataLimit = in.readString();
1176                StartDate = in.readString();
1177                TimeLimit = in.readString();
1178                UsageTimePeriod = in.readString();
1179            }
1180        }
1181
1182        public static final Parcelable.Creator<UsageLimits> CREATOR = new Parcelable.Creator<UsageLimits>() {
1183            public UsageLimits createFromParcel(Parcel in) {
1184                return new UsageLimits(in);
1185            }
1186
1187            public UsageLimits[] newArray(int size) {
1188                return new UsageLimits[size];
1189            }
1190        };
1191    }
1192
1193    /**
1194     * PerProviderSubscription/<X+>/Credential
1195     **/
1196    public static class Credential implements Parcelable {
1197        public String CreationDate;
1198        public String ExpirationDate;
1199        public UsernamePassword usernamePassword = new UsernamePassword();
1200        public DigitalCertificate digitalCertificate = new DigitalCertificate();
1201        public String Realm;
1202        public boolean CheckAAAServerCertStatus;
1203        public SIM sim = new SIM();
1204
1205        public Credential() {
1206        }
1207
1208        public Credential(Parcel in) {
1209            readFromParcel(in);
1210        }
1211
1212        public int describeContents() {
1213            return 0;
1214        }
1215
1216        public void writeToParcel(Parcel out, int flags) {
1217            out.writeString(CreationDate);
1218            out.writeString(ExpirationDate);
1219            out.writeParcelable(usernamePassword, flags);
1220            out.writeParcelable(digitalCertificate, flags);
1221            out.writeString(Realm);
1222            out.writeInt(CheckAAAServerCertStatus ? 1 : 0);
1223            out.writeParcelable(sim, flags);
1224        }
1225
1226        public void readFromParcel(Parcel in) {
1227            if (in == null) {
1228                //log here
1229            } else {
1230                CreationDate = in.readString();
1231                ExpirationDate = in.readString();
1232                usernamePassword = in.readParcelable(UsernamePassword.class.getClassLoader());
1233                digitalCertificate = in.readParcelable(DigitalCertificate.class.getClassLoader());
1234                Realm = in.readString();
1235                CheckAAAServerCertStatus = (in.readInt() == 1) ? true : false;
1236                sim = in.readParcelable(SIM.class.getClassLoader());
1237            }
1238        }
1239
1240        public static final Parcelable.Creator<Credential> CREATOR = new Parcelable.Creator<Credential>() {
1241            public Credential createFromParcel(Parcel in) {
1242                return new Credential(in);
1243            }
1244
1245            public Credential[] newArray(int size) {
1246                return new Credential[size];
1247            }
1248        };
1249    }
1250
1251    /**
1252     * PerProviderSubscription/<X+>/Credential/DigitalCertificate
1253     **/
1254    public static class DigitalCertificate implements Parcelable {
1255        public String CertificateType;
1256        public String CertSHA256Fingerprint;
1257
1258        public DigitalCertificate() {
1259        }
1260
1261        public DigitalCertificate(Parcel in) {
1262            readFromParcel(in);
1263        }
1264
1265        public int describeContents() {
1266            return 0;
1267        }
1268
1269        public void writeToParcel(Parcel out, int flags) {
1270            out.writeString(CertificateType);
1271            out.writeString(CertSHA256Fingerprint);
1272        }
1273
1274        public void readFromParcel(Parcel in) {
1275            if (in == null) {
1276                //log here
1277            } else {
1278                CertificateType = in.readString();
1279                CertSHA256Fingerprint = in.readString();
1280            }
1281        }
1282
1283        public static final Parcelable.Creator<DigitalCertificate> CREATOR = new Parcelable.Creator<DigitalCertificate>() {
1284            public DigitalCertificate createFromParcel(Parcel in) {
1285                return new DigitalCertificate(in);
1286            }
1287
1288            public DigitalCertificate[] newArray(int size) {
1289                return new DigitalCertificate[size];
1290            }
1291        };
1292
1293    }
1294
1295    /**
1296     * PerProviderSubscription/<X+>/Credential/SIM
1297     **/
1298    public static class SIM implements Parcelable {
1299        public String IMSI;
1300        public String EAPType;
1301
1302        public SIM() {
1303        }
1304
1305        public SIM(Parcel in) {
1306            readFromParcel(in);
1307        }
1308
1309        public int describeContents() {
1310            return 0;
1311        }
1312
1313        public void writeToParcel(Parcel out, int flags) {
1314            out.writeString(IMSI);
1315            out.writeString(EAPType);
1316        }
1317
1318        public void readFromParcel(Parcel in) {
1319            if (in == null) {
1320                //log here
1321            } else {
1322                IMSI = in.readString();
1323                EAPType = in.readString();
1324            }
1325        }
1326
1327        public static final Parcelable.Creator<SIM> CREATOR = new Parcelable.Creator<SIM>() {
1328            public SIM createFromParcel(Parcel in) {
1329                return new SIM(in);
1330            }
1331
1332            public SIM[] newArray(int size) {
1333                return new SIM[size];
1334            }
1335        };
1336
1337    }
1338
1339    /**
1340     * PerProviderSubscription/<X+>/Extension
1341     **/
1342    public static class Extension {
1343        public String empty;
1344    }
1345
1346    public WifiPasspointDmTree() {
1347    }
1348
1349    public WifiPasspointDmTree(Parcel in) {
1350        readFromParcel(in);
1351    }
1352
1353    public int describeContents() {
1354        return 0;
1355    }
1356
1357    public void writeToParcel(Parcel out, int flags) {
1358        out.writeMap(spFqdn);
1359    }
1360
1361    public void readFromParcel(Parcel in) {
1362        if (in == null) {
1363            //log here
1364        } else {
1365            in.readMap(spFqdn, SpFqdn.class.getClassLoader());
1366        }
1367    }
1368
1369    public static final Parcelable.Creator<WifiPasspointDmTree> CREATOR = new Parcelable.Creator<WifiPasspointDmTree>() {
1370        public WifiPasspointDmTree createFromParcel(Parcel in) {
1371            return new WifiPasspointDmTree(in);
1372        }
1373
1374        public WifiPasspointDmTree[] newArray(int size) {
1375            return new WifiPasspointDmTree[size];
1376        }
1377    };
1378
1379}
1380