1package com.android.hotspot2.pps;
2
3import android.util.Base64;
4
5import com.android.hotspot2.Utils;
6import com.android.hotspot2.omadm.MOManager;
7import com.android.hotspot2.omadm.OMAException;
8import com.android.hotspot2.omadm.OMANode;
9
10import java.nio.charset.StandardCharsets;
11
12import static com.android.hotspot2.omadm.MOManager.TAG_CertSHA256Fingerprint;
13import static com.android.hotspot2.omadm.MOManager.TAG_CertURL;
14import static com.android.hotspot2.omadm.MOManager.TAG_Password;
15import static com.android.hotspot2.omadm.MOManager.TAG_Restriction;
16import static com.android.hotspot2.omadm.MOManager.TAG_TrustRoot;
17import static com.android.hotspot2.omadm.MOManager.TAG_URI;
18import static com.android.hotspot2.omadm.MOManager.TAG_UpdateInterval;
19import static com.android.hotspot2.omadm.MOManager.TAG_UpdateMethod;
20import static com.android.hotspot2.omadm.MOManager.TAG_Username;
21import static com.android.hotspot2.omadm.MOManager.TAG_UsernamePassword;
22
23public class UpdateInfo {
24    public enum UpdateRestriction {HomeSP, RoamingPartner, Unrestricted}
25
26    private final long mInterval;
27    private final boolean mSPPClientInitiated;
28    private final UpdateRestriction mUpdateRestriction;
29    private final String mURI;
30    private final String mUsername;
31    private final String mPassword;
32    private final String mCertURL;
33    private final String mCertFP;
34
35    public UpdateInfo(OMANode policyUpdate) throws OMAException {
36        mInterval = MOManager.getLong(policyUpdate, TAG_UpdateInterval, null) *
37                MOManager.IntervalFactor;
38        mSPPClientInitiated = MOManager.getSelection(policyUpdate, TAG_UpdateMethod);
39        mUpdateRestriction = MOManager.getSelection(policyUpdate, TAG_Restriction);
40        mURI = MOManager.getString(policyUpdate, TAG_URI);
41
42        OMANode unp = policyUpdate.getChild(TAG_UsernamePassword);
43        if (unp != null) {
44            mUsername = MOManager.getString(unp.getChild(TAG_Username));
45            String pw = MOManager.getString(unp.getChild(TAG_Password));
46            mPassword = new String(Base64.decode(pw.getBytes(StandardCharsets.US_ASCII),
47                    Base64.DEFAULT), StandardCharsets.UTF_8);
48        } else {
49            mUsername = null;
50            mPassword = null;
51        }
52
53        OMANode trustRoot = MOManager.getChild(policyUpdate, TAG_TrustRoot);
54        mCertURL = MOManager.getString(trustRoot, TAG_CertURL);
55        mCertFP = MOManager.getString(trustRoot, TAG_CertSHA256Fingerprint);
56    }
57
58    public long getInterval() {
59        return mInterval;
60    }
61
62    public boolean isSPPClientInitiated() {
63        return mSPPClientInitiated;
64    }
65
66    public UpdateRestriction getUpdateRestriction() {
67        return mUpdateRestriction;
68    }
69
70    public String getURI() {
71        return mURI;
72    }
73
74    public String getUsername() {
75        return mUsername;
76    }
77
78    public String getPassword() {
79        return mPassword;
80    }
81
82    public String getCertURL() {
83        return mCertURL;
84    }
85
86    public String getCertFP() {
87        return mCertFP;
88    }
89
90    @Override
91    public String toString() {
92        return "UpdateInfo{" +
93                "interval=" + Utils.toHMS(mInterval) +
94                ", SPPClientInitiated=" + mSPPClientInitiated +
95                ", updateRestriction=" + mUpdateRestriction +
96                ", URI='" + mURI + '\'' +
97                ", username='" + mUsername + '\'' +
98                ", password=" + mPassword +
99                ", certURL='" + mCertURL + '\'' +
100                ", certFP='" + mCertFP + '\'' +
101                '}';
102    }
103}
104