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