diff options
Diffstat (limited to 'wifi/java/android')
8 files changed, 689 insertions, 439 deletions
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index 58b0d61..99151c3 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -90,6 +90,19 @@ public class ScanResult implements Parcelable { */ public final static int UNSPECIFIED = -1; + /** information element from beacon + * @hide + */ + public static class InformationElement { + public int id; + public byte[] bytes; + } + + /** information elements found in the beacon + * @hide + */ + public InformationElement informationElements[]; + /** {@hide} */ public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, long tsf) { @@ -131,8 +144,7 @@ public class ScanResult implements Parcelable { distanceCm = source.distanceCm; distanceSdCm = source.distanceSdCm; seen = source.seen; - if (source.passpoint != null) - passpoint = new WifiPasspointInfo(source.passpoint); + passpoint = source.passpoint; } } @@ -166,8 +178,7 @@ public class ScanResult implements Parcelable { sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")). append("(cm)"); - if (passpoint != null) - sb.append(", passpoint: [").append(passpoint.toString()).append("]"); + sb.append(", passpoint: ").append(passpoint != null ? "yes" : "no"); return sb.toString(); } @@ -199,6 +210,16 @@ public class ScanResult implements Parcelable { } else { dest.writeInt(0); } + if (informationElements != null) { + dest.writeInt(informationElements.length); + for (int i = 0; i < informationElements.length; i++) { + dest.writeInt(informationElements[i].id); + dest.writeInt(informationElements[i].bytes.length); + dest.writeByteArray(informationElements[i].bytes); + } + } else { + dest.writeInt(0); + } } /** Implement the Parcelable interface {@hide} */ @@ -223,6 +244,17 @@ public class ScanResult implements Parcelable { if (in.readInt() == 1) { sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in); } + int n = in.readInt(); + if (n != 0) { + sr.informationElements = new InformationElement[n]; + for (int i = 0; i < n; i++) { + sr.informationElements[i] = new InformationElement(); + sr.informationElements[i].id = in.readInt(); + int len = in.readInt(); + sr.informationElements[i].bytes = new byte[len]; + in.readByteArray(sr.informationElements[i].bytes); + } + } return sr; } @@ -230,5 +262,4 @@ public class ScanResult implements Parcelable { return new ScanResult[size]; } }; - } diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 963117c..5dfc318 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -324,6 +324,24 @@ public class WifiConfiguration implements Parcelable { /** * @hide + * Uid of app creating the configuration + */ + public int creatorUid; + + /** + * @hide + * Uid of last app issuing a connection related command + */ + public int lastConnectUid; + + /** + * @hide + * Uid of last app modifying the configuration + */ + public int lastUpdateUid; + + /** + * @hide * BSSID list on which this configuration was seen. * TODO: prevent this list to grow infinitely, age-out the results */ @@ -441,10 +459,17 @@ public class WifiConfiguration implements Parcelable { /** @hide * if this is set, the WifiConfiguration cannot use linkages so as to bump * it's relative priority. + * - status between and 128 indicate various level of blacklisting depending + * on the severity or frequency of the connection error + * - deleted status indicates that the user is deleting the configuration, and so + * although it may have been self added we will not re-self-add it, ignore it, + * not return it to applications, and not connect to it * */ public static final int AUTO_JOIN_TEMPORARY_DISABLED = 1; /** @hide */ - public static final int AUTO_JOIN_DISABLED_ON_AUTH_FAILURE = 2; + public static final int AUTO_JOIN_DISABLED_ON_AUTH_FAILURE = 128; + /** @hide */ + public static final int AUTO_JOIN_DELETED = 200; /** * @hide @@ -453,11 +478,29 @@ public class WifiConfiguration implements Parcelable { /** * Set if the configuration was self added by the framework + * This boolean is cleared if we get a connect/save/ update or + * any wifiManager command that indicate the user interacted with the configuration + * since we will now consider that the configuration belong to him. * @hide */ public boolean selfAdded; /** + * Set if the configuration was self added by the framework + * This boolean is set once and never cleared. It is used + * so as we never loose track of who created the + * configuration in the first place. + * @hide + */ + public boolean didSelfAdd; + + /** + * peer WifiConfiguration this WifiConfiguration was added for + * @hide + */ + public String peerWifiConfiguration; + + /** * @hide * Indicate that a WifiConfiguration is temporary and should not be saved * nor considered by AutoJoin. @@ -513,6 +556,7 @@ public class WifiConfiguration implements Parcelable { enterpriseConfig = new WifiEnterpriseConfig(); autoJoinStatus = AUTO_JOIN_ENABLED; selfAdded = false; + didSelfAdd = false; ephemeral = false; mIpConfiguration = new IpConfiguration(); } @@ -650,6 +694,10 @@ public class WifiConfiguration implements Parcelable { sbuf.append(mIpConfiguration.toString()); + if (selfAdded) sbuf.append("selfAdded"); + if (creatorUid != 0) sbuf.append("uid=" + Integer.toString(creatorUid)); + + return sbuf.toString(); } @@ -883,6 +931,7 @@ public class WifiConfiguration implements Parcelable { networkId = source.networkId; status = source.status; disableReason = source.disableReason; + disableReason = source.disableReason; SSID = source.SSID; BSSID = source.BSSID; FQDN = source.FQDN; @@ -933,6 +982,11 @@ public class WifiConfiguration implements Parcelable { } lastFailure = source.lastFailure; + didSelfAdd = source.didSelfAdd; + lastConnectUid = source.lastConnectUid; + lastUpdateUid = source.lastUpdateUid; + creatorUid = source.creatorUid; + peerWifiConfiguration = source.peerWifiConfiguration; } } @@ -972,6 +1026,10 @@ public class WifiConfiguration implements Parcelable { dest.writeString(defaultGwMacAddress); dest.writeInt(autoJoinStatus); dest.writeInt(selfAdded ? 1 : 0); + dest.writeInt(didSelfAdd ? 1 : 0); + dest.writeInt(creatorUid); + dest.writeInt(lastConnectUid); + dest.writeInt(lastUpdateUid); /* TODO: should we write the cache results to the parcel? if (scanResultCache != null) { @@ -1017,6 +1075,10 @@ public class WifiConfiguration implements Parcelable { config.defaultGwMacAddress = in.readString(); config.autoJoinStatus = in.readInt(); config.selfAdded = in.readInt() != 0; + config.didSelfAdd = in.readInt() != 0; + config.creatorUid = in.readInt(); + config.lastConnectUid = in.readInt(); + config.lastUpdateUid = in.readInt(); /* TODO: should we write the cache results to the parcel? boolean done = false; diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java index 9ea7027..3b65ca8 100644 --- a/wifi/java/android/net/wifi/WifiScanner.java +++ b/wifi/java/android/net/wifi/WifiScanner.java @@ -40,6 +40,7 @@ import java.util.concurrent.CountDownLatch; * Get an instance of this class by calling * {@link android.content.Context#getSystemService(String) Context.getSystemService(Context * .WIFI_SCANNING_SERVICE)}. + * @hide */ public class WifiScanner { @@ -72,16 +73,14 @@ public class WifiScanner { public static final int REASON_INVALID_LISTENER = -2; /** Invalid request */ public static final int REASON_INVALID_REQUEST = -3; - /** Request conflicts with other scans that may be going on */ - public static final int REASON_CONFLICTING_REQUEST = -4; /** * Generic action callback invocation interface * @hide */ public static interface ActionListener { - public void onSuccess(Object result); - public void onFailure(int reason, Object exception); + public void onSuccess(); + public void onFailure(int reason, String description); } /** @@ -193,58 +192,6 @@ public class WifiScanner { } - /** information element from beacon */ - public static class InformationElement { - public int id; - public byte[] bytes; - } - - /** scan result with information elements from beacons */ - public static class FullScanResult implements Parcelable { - public ScanResult result; - public InformationElement informationElements[]; - - /** Implement the Parcelable interface {@hide} */ - public int describeContents() { - return 0; - } - - /** Implement the Parcelable interface {@hide} */ - public void writeToParcel(Parcel dest, int flags) { - result.writeToParcel(dest, flags); - dest.writeInt(informationElements.length); - for (int i = 0; i < informationElements.length; i++) { - dest.writeInt(informationElements[i].id); - dest.writeInt(informationElements[i].bytes.length); - dest.writeByteArray(informationElements[i].bytes); - } - } - - /** Implement the Parcelable interface {@hide} */ - public static final Creator<FullScanResult> CREATOR = - new Creator<FullScanResult>() { - public FullScanResult createFromParcel(Parcel in) { - FullScanResult result = new FullScanResult(); - result.result = ScanResult.CREATOR.createFromParcel(in); - int n = in.readInt(); - result.informationElements = new InformationElement[n]; - for (int i = 0; i < n; i++) { - result.informationElements[i] = new InformationElement(); - result.informationElements[i].id = in.readInt(); - int len = in.readInt(); - result.informationElements[i].bytes = new byte[len]; - in.readByteArray(result.informationElements[i].bytes); - } - - return result; - } - - public FullScanResult[] newArray(int size) { - return new FullScanResult[size]; - } - }; - } - /** @hide */ public static class ParcelableScanResults implements Parcelable { public ScanResult mResults[]; @@ -305,7 +252,7 @@ public class WifiScanner { /** * reports full scan result for each access point found in scan */ - public void onFullResult(FullScanResult fullScanResult); + public void onFullResult(ScanResult fullScanResult); } /** @hide */ @@ -336,13 +283,12 @@ public class WifiScanner { } /** * retrieves currently available scan results - * @param flush {@code true} means flush all results - * @param listener specifies which scan to cancel; must be same object as passed in {@link - * #startBackgroundScan} */ - public void retrieveScanResults(boolean flush, ScanListener listener) { + public ScanResult[] getScanResults() { validateChannel(); - sAsyncChannel.sendMessage(CMD_GET_SCAN_RESULTS, 0, getListenerKey(listener)); + Message reply = sAsyncChannel.sendMessageSynchronously(CMD_GET_SCAN_RESULTS, 0); + ScanResult[] results = (ScanResult[]) reply.obj; + return results; } /** specifies information about an access point of interest */ @@ -490,7 +436,7 @@ public class WifiScanner { } /** interface to receive hotlist events on; use this on {@link #setHotlist} */ - public static interface HotlistListener extends ActionListener { + public static interface HotspotListener extends ActionListener { /** indicates that access points were found by on going scans * @param results list of scan results, one for each access point visible currently */ @@ -550,10 +496,10 @@ public class WifiScanner { * @param hotspots access points of interest * @param apLostThreshold number of scans needed to indicate that AP is lost * @param listener object provided to report events on; this object must be unique and must - * also be provided on {@link #resetHotlist} + * also be provided on {@link #stopTrackingHotspots} */ - public void setHotlist(HotspotInfo[] hotspots, - int apLostThreshold, HotlistListener listener) { + public void startTrackingHotspots(HotspotInfo[] hotspots, + int apLostThreshold, HotspotListener listener) { validateChannel(); HotlistSettings settings = new HotlistSettings(); settings.hotspotInfos = hotspots; @@ -562,9 +508,9 @@ public class WifiScanner { /** * remove tracking of interesting access points - * @param listener same object provided in {@link #setHotlist} + * @param listener same object provided in {@link #startTrackingHotspots} */ - public void resetHotlist(HotlistListener listener) { + public void stopTrackingHotspots(HotspotListener listener) { validateChannel(); sAsyncChannel.sendMessage(CMD_RESET_HOTLIST, 0, removeListener(listener)); } @@ -769,10 +715,10 @@ public class WifiScanner { switch (msg.what) { /* ActionListeners grouped together */ case CMD_OP_SUCCEEDED : - ((ActionListener) listener).onSuccess(msg.obj); + ((ActionListener) listener).onSuccess(); break; case CMD_OP_FAILED : - ((ActionListener) listener).onFailure(msg.arg1, msg.obj); + ((ActionListener) listener).onFailure(msg.arg1, (String)msg.obj); removeListener(msg.arg2); break; case CMD_SCAN_RESULT : @@ -780,14 +726,14 @@ public class WifiScanner { ((ParcelableScanResults) msg.obj).getResults()); return; case CMD_FULL_SCAN_RESULT : - FullScanResult result = (FullScanResult) msg.obj; + ScanResult result = (ScanResult) msg.obj; ((ScanListener) listener).onFullResult(result); return; case CMD_PERIOD_CHANGED: ((ScanListener) listener).onPeriodChanged(msg.arg1); return; case CMD_AP_FOUND: - ((HotlistListener) listener).onFound( + ((HotspotListener) listener).onFound( ((ParcelableScanResults) msg.obj).getResults()); return; case CMD_WIFI_CHANGE_DETECTED: diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java index f809abf..54ac71e 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java @@ -20,10 +20,13 @@ import android.net.wifi.WifiEnterpriseConfig; import android.os.Parcelable; import android.os.Parcel; +import java.util.ArrayList; import java.util.Collection; -import java.util.Set; +import java.util.List; import java.util.Iterator; import java.util.Map; +import java.util.Set; + /** * A class representing a Wi-Fi Passpoint credential. @@ -32,64 +35,76 @@ import java.util.Map; public class WifiPasspointCredential implements Parcelable { private final static String TAG = "PasspointCredential"; - private String mWifiTreePath; - private String mWifiSPFQDN; + private final static boolean DBG = true; + + /** Wi-Fi nodes**/ + private String mWifiSpFqdn; + + /** PerProviderSubscription nodes **/ private String mCredentialName; - private String mUpdateIdentifier; + + /** SubscriptionUpdate nodes **/ + private String mSubscriptionUpdateInterval; private String mSubscriptionUpdateMethod; - private WifiEnterpriseConfig mEnterpriseConfig; + private String mSubscriptionUpdateRestriction; + private String mSubscriptionUpdateURI; + private String mSubscriptionUpdateUsername; + private String mSubscriptionUpdatePassword; + + /** HomeSP nodes **/ + private String mHomeSpFqdn; + private String mFriendlyName; + private Collection<WifiPasspointDmTree.HomeOIList> mHomeOIList; + private Collection<WifiPasspointDmTree.OtherHomePartners> mOtherHomePartnerList; + + /** SubscriptionParameters nodes**/ + private String mCreationDate; + private String mExpirationDate; + + /** Credential nodes **/ private String mType; private String mInnerMethod; private String mCertType; private String mCertSha256Fingerprint; + private String mUpdateIdentifier; private String mUsername; private String mPasswd; + private String mRealm; private String mImsi; private String mMcc; private String mMnc; private String mCaRootCert; - private String mRealm; - private int mPriority; //User preferred priority; The smaller, the higher - private boolean mUserPreferred = false; - private String mHomeSpFqdn; - private String mFriendlyName; - private String mOtherhomepartnerFqdn; private String mClientCert; - private String mCreationDate; - private String mExpirationDate; - - private String mSubscriptionDMAccUsername; - private String mSubscriptionDMAccPassword; - private String mSubscriptionUpdateInterval; + private boolean mCheckAaaServerCertStatus; - private String mPolicyUpdateURI; + /** Policy nodes **/ + private String mPolicyUpdateUri; private String mPolicyUpdateInterval; - private String mPolicyDMAccUsername; - private String mPolicyDMAccPassword; + private String mPolicyUpdateUsername; + private String mPolicyUpdatePassword; private String mPolicyUpdateRestriction; private String mPolicyUpdateMethod; - private Collection<WifiPasspointDmTree.PreferredRoamingPartnerList> mPreferredRoamingPartnerList; - private Collection<WifiPasspointDmTree.HomeOIList> mHomeOIList; private Collection<WifiPasspointDmTree.MinBackhaulThresholdNetwork> mMinBackhaulThresholdNetwork; - private Collection<WifiPasspointDmTree.RequiredProtoPortTuple> mRequiredProtoPortTuple; private Collection<WifiPasspointDmTree.SPExclusionList> mSpExclusionList; + private Collection<WifiPasspointDmTree.RequiredProtoPortTuple> mRequiredProtoPortTuple; private String mMaxBssLoad; - private boolean mIsMachineRemediation; - - private String mAAACertURL; - private String mAAASha256Fingerprint; + /** CrednetialPriority node **/ + private int mCrednetialPriority; - private String mSubscriptionUpdateRestriction; - private String mSubscriptionUpdateURI; + /** AAAServerTrustRoot nodes **/ + private String mAaaCertUrl; + private String mAaaSha256Fingerprint; - private boolean mCheckAaaServerCertStatus; + /** Others **/ + private boolean mIsMachineRemediation; + private boolean mUserPreferred = false; + private String mWifiTreePath; + private WifiEnterpriseConfig mEnterpriseConfig; /** @hide */ - public WifiPasspointCredential() { - - } + public WifiPasspointCredential() {} /** * Constructor @@ -114,84 +129,6 @@ public class WifiPasspointCredential implements Parcelable { public WifiPasspointCredential(String type, String caroot, String clientcert, - WifiPasspointDmTree.SpFqdn sp, - WifiPasspointDmTree.CredentialInfo credinfo) { - - if (credinfo == null) { - return; - } - - mType = type; - mCaRootCert = caroot; - mClientCert = clientcert; - - mWifiSPFQDN = sp.nodeName; - mUpdateIdentifier = sp.perProviderSubscription.UpdateIdentifier; - - mCredentialName = credinfo.nodeName; - Set set = credinfo.homeSP.otherHomePartners.entrySet(); - Iterator i = set.iterator(); - if (i.hasNext()) { - Map.Entry entry3 = (Map.Entry) i.next(); - WifiPasspointDmTree.OtherHomePartners ohp = (WifiPasspointDmTree.OtherHomePartners) entry3.getValue(); - mOtherhomepartnerFqdn = ohp.FQDN; - } - - set = credinfo.aAAServerTrustRoot.entrySet(); - i = set.iterator(); - if (i.hasNext()) { - Map.Entry entry3 = (Map.Entry) i.next(); - WifiPasspointDmTree.AAAServerTrustRoot aaa = (WifiPasspointDmTree.AAAServerTrustRoot) entry3.getValue(); - mAAACertURL = aaa.CertURL; - mAAASha256Fingerprint = aaa.CertSHA256Fingerprint; - } - - mCertType = credinfo.credential.digitalCertificate.CertificateType; - mCertSha256Fingerprint = credinfo.credential.digitalCertificate.CertSHA256Fingerprint; - mUsername = credinfo.credential.usernamePassword.Username; - mPasswd = credinfo.credential.usernamePassword.Password; - mIsMachineRemediation = credinfo.credential.usernamePassword.MachineManaged; - mInnerMethod = credinfo.credential.usernamePassword.eAPMethod.InnerMethod; - mImsi = credinfo.credential.sim.IMSI; - mCreationDate = credinfo.credential.CreationDate; - mExpirationDate = credinfo.credential.ExpirationDate; - mRealm = credinfo.credential.Realm; - - if (credinfo.credentialPriority == null) { - credinfo.credentialPriority = "128"; - } - mPriority = Integer.parseInt(credinfo.credentialPriority); - - mHomeSpFqdn = credinfo.homeSP.FQDN; - - mSubscriptionUpdateInterval = credinfo.subscriptionUpdate.UpdateInterval; - mSubscriptionUpdateMethod = credinfo.subscriptionUpdate.UpdateMethod; - mSubscriptionUpdateRestriction = credinfo.subscriptionUpdate.Restriction; - mSubscriptionUpdateURI = credinfo.subscriptionUpdate.URI; - mSubscriptionDMAccUsername = credinfo.subscriptionUpdate.usernamePassword.Username; - mSubscriptionDMAccPassword = credinfo.subscriptionUpdate.usernamePassword.Password; - - mPolicyUpdateURI = credinfo.policy.policyUpdate.URI; - mPolicyUpdateInterval = credinfo.policy.policyUpdate.UpdateInterval; - mPolicyDMAccUsername = credinfo.policy.policyUpdate.usernamePassword.Username; - mPolicyDMAccPassword = credinfo.policy.policyUpdate.usernamePassword.Password; - mPolicyUpdateRestriction = credinfo.policy.policyUpdate.Restriction; - mPolicyUpdateMethod = credinfo.policy.policyUpdate.UpdateMethod; - mPreferredRoamingPartnerList = credinfo.policy.preferredRoamingPartnerList.values(); - mMinBackhaulThresholdNetwork = credinfo.policy.minBackhaulThreshold.values(); - mRequiredProtoPortTuple = credinfo.policy.requiredProtoPortTuple.values(); - mMaxBssLoad = credinfo.policy.maximumBSSLoadValue; - mSpExclusionList = credinfo.policy.sPExclusionList.values(); - - mHomeOIList = credinfo.homeSP.homeOIList.values(); - mFriendlyName = credinfo.homeSP.FriendlyName; - mCheckAaaServerCertStatus = credinfo.credential.CheckAAAServerCertStatus; - } - - /** @hide */ - public WifiPasspointCredential(String type, - String caroot, - String clientcert, String mcc, String mnc, WifiPasspointDmTree.SpFqdn sp, @@ -205,25 +142,19 @@ public class WifiPasspointCredential implements Parcelable { mCaRootCert = caroot; mClientCert = clientcert; - mWifiSPFQDN = sp.nodeName; + mWifiSpFqdn = sp.nodeName; mUpdateIdentifier = sp.perProviderSubscription.UpdateIdentifier; mCredentialName = credinfo.nodeName; - Set set = credinfo.homeSP.otherHomePartners.entrySet(); - Iterator i = set.iterator(); - if (i.hasNext()) { - Map.Entry entry3 = (Map.Entry) i.next(); - WifiPasspointDmTree.OtherHomePartners ohp = (WifiPasspointDmTree.OtherHomePartners) entry3.getValue(); - mOtherhomepartnerFqdn = ohp.FQDN; - } + mOtherHomePartnerList = credinfo.homeSP.otherHomePartners.values(); - set = credinfo.aAAServerTrustRoot.entrySet(); - i = set.iterator(); + Set set = credinfo.aAAServerTrustRoot.entrySet(); + Iterator i = set.iterator(); if (i.hasNext()) { Map.Entry entry3 = (Map.Entry) i.next(); WifiPasspointDmTree.AAAServerTrustRoot aaa = (WifiPasspointDmTree.AAAServerTrustRoot) entry3.getValue(); - mAAACertURL = aaa.CertURL; - mAAASha256Fingerprint = aaa.CertSHA256Fingerprint; + mAaaCertUrl = aaa.CertURL; + mAaaSha256Fingerprint = aaa.CertSHA256Fingerprint; } mCertType = credinfo.credential.digitalCertificate.CertificateType; @@ -240,22 +171,24 @@ public class WifiPasspointCredential implements Parcelable { mRealm = credinfo.credential.Realm; if (credinfo.credentialPriority == null) { - credinfo.credentialPriority = "128"; + mCrednetialPriority = 128; + } else { + mCrednetialPriority = Integer.parseInt(credinfo.credentialPriority); } - mPriority = Integer.parseInt(credinfo.credentialPriority); mHomeSpFqdn = credinfo.homeSP.FQDN; + mSubscriptionUpdateInterval = credinfo.subscriptionUpdate.UpdateInterval; mSubscriptionUpdateMethod = credinfo.subscriptionUpdate.UpdateMethod; mSubscriptionUpdateRestriction = credinfo.subscriptionUpdate.Restriction; mSubscriptionUpdateURI = credinfo.subscriptionUpdate.URI; - mSubscriptionDMAccUsername = credinfo.subscriptionUpdate.usernamePassword.Username; - mSubscriptionDMAccPassword = credinfo.subscriptionUpdate.usernamePassword.Password; + mSubscriptionUpdateUsername = credinfo.subscriptionUpdate.usernamePassword.Username; + mSubscriptionUpdatePassword = credinfo.subscriptionUpdate.usernamePassword.Password; - mPolicyUpdateURI = credinfo.policy.policyUpdate.URI; + mPolicyUpdateUri = credinfo.policy.policyUpdate.URI; mPolicyUpdateInterval = credinfo.policy.policyUpdate.UpdateInterval; - mPolicyDMAccUsername = credinfo.policy.policyUpdate.usernamePassword.Username; - mPolicyDMAccPassword = credinfo.policy.policyUpdate.usernamePassword.Password; + mPolicyUpdateUsername = credinfo.policy.policyUpdate.usernamePassword.Username; + mPolicyUpdatePassword = credinfo.policy.policyUpdate.usernamePassword.Password; mPolicyUpdateRestriction = credinfo.policy.policyUpdate.Restriction; mPolicyUpdateMethod = credinfo.policy.policyUpdate.UpdateMethod; mPreferredRoamingPartnerList = credinfo.policy.preferredRoamingPartnerList.values(); @@ -266,6 +199,7 @@ public class WifiPasspointCredential implements Parcelable { mHomeOIList = credinfo.homeSP.homeOIList.values(); mFriendlyName = credinfo.homeSP.FriendlyName; + mCheckAaaServerCertStatus = credinfo.credential.CheckAAAServerCertStatus; } /** @hide */ @@ -284,8 +218,8 @@ public class WifiPasspointCredential implements Parcelable { } /** @hide */ - public String getWifiSPFQDN() { - return mWifiSPFQDN; + public String getWifiSpFqdn() { + return mWifiSpFqdn; } /** @hide */ @@ -294,7 +228,7 @@ public class WifiPasspointCredential implements Parcelable { } /** @hide */ - public String getEapMethodStr() { + public String getType() { return mType; } @@ -384,14 +318,14 @@ public class WifiPasspointCredential implements Parcelable { return 0; } - return mPriority; + return mCrednetialPriority; } /** * Get the fully qualified domain name (FQDN) of this Passpoint credential. * @return FQDN */ - public String getFqdn() { + public String getHomeSpFqdn() { return mHomeSpFqdn; } @@ -405,23 +339,23 @@ public class WifiPasspointCredential implements Parcelable { /** @hide */ - public String getOtherhomepartners() { - return mOtherhomepartnerFqdn; + public Collection<WifiPasspointDmTree.OtherHomePartners> getOtherHomePartnerList() { + return mOtherHomePartnerList; } /** @hide */ - public String getSubscriptionDMAccUsername() { - return mSubscriptionDMAccUsername; + public String getSubscriptionUpdateUsername() { + return mSubscriptionUpdateUsername; } /** @hide */ - public String getSubscriptionDMAccPassword() { - return mSubscriptionDMAccPassword; + public String getSubscriptionUpdatePassword() { + return mSubscriptionUpdatePassword; } /** @hide */ - public String getPolicyUpdateURI() { - return mPolicyUpdateURI; + public String getPolicyUpdateUri() { + return mPolicyUpdateUri; } /** @hide */ @@ -430,13 +364,13 @@ public class WifiPasspointCredential implements Parcelable { } /** @hide */ - public String getPolicyDMAccUsername() { - return mPolicyDMAccUsername; + public String getPolicyUpdateUsername() { + return mPolicyUpdateUsername; } /** @hide */ - public String getPolicyDMAccPassword() { - return mPolicyDMAccPassword; + public String getPolicyUpdatePassword() { + return mPolicyUpdatePassword; } /** @hide */ @@ -465,12 +399,12 @@ public class WifiPasspointCredential implements Parcelable { } /** @hide */ - public Collection<WifiPasspointDmTree.PreferredRoamingPartnerList> getPrpList() { + public Collection<WifiPasspointDmTree.PreferredRoamingPartnerList> getPreferredRoamingPartnerList() { return mPreferredRoamingPartnerList; } /** @hide */ - public Collection<WifiPasspointDmTree.HomeOIList> getHomeOIList() { + public Collection<WifiPasspointDmTree.HomeOIList> getHomeOiList() { return mHomeOIList; } @@ -495,13 +429,13 @@ public class WifiPasspointCredential implements Parcelable { } /** @hide */ - public String getAAACertURL() { - return mAAACertURL; + public String getAaaCertUrl() { + return mAaaCertUrl; } /** @hide */ - public String getAAASha256Fingerprint() { - return mAAASha256Fingerprint; + public String getAaaSha256Fingerprint() { + return mAaaSha256Fingerprint; } /** @hide */ @@ -578,72 +512,75 @@ public class WifiPasspointCredential implements Parcelable { StringBuffer sb = new StringBuffer(); String none = "<none>"; - sb.append(", UpdateIdentifier: ") - .append(mUpdateIdentifier == null ? none : mUpdateIdentifier). - append(", SubscriptionUpdateMethod: ") - .append(mSubscriptionUpdateMethod == null ? none : mSubscriptionUpdateMethod). - append(", Type: ").append(mType == null ? none : mType). - append(", Username: ").append(mUsername == null ? none : mUsername). - append(", Passwd: ").append(mPasswd == null ? none : mPasswd). - append(", SubDMAccUsername: ") - .append(mSubscriptionDMAccUsername == null ? none : mSubscriptionDMAccUsername). - append(", SubDMAccPassword: ") - .append(mSubscriptionDMAccPassword == null ? none : mSubscriptionDMAccPassword). - append(", PolDMAccUsername: ") - .append(mPolicyDMAccUsername == null ? none : mPolicyDMAccUsername). - append(", PolDMAccPassword: ") - .append(mPolicyDMAccPassword == null ? none : mPolicyDMAccPassword). - append(", Imsi: ").append(mImsi == null ? none : mImsi). - append(", Mcc: ").append(mMcc == null ? none : mMcc). - append(", Mnc: ").append(mMnc == null ? none : mMnc). - append(", CaRootCert: ").append(mCaRootCert == null ? none : mCaRootCert). - append(", Realm: ").append(mRealm == null ? none : mRealm). - append(", Priority: ").append(mPriority). - append(", Fqdn: ").append(mHomeSpFqdn == null ? none : mHomeSpFqdn). - append(", Otherhomepartners: ") - .append(mOtherhomepartnerFqdn == null ? none : mOtherhomepartnerFqdn). - append(", ExpirationDate: ") - .append(mExpirationDate == null ? none : mExpirationDate). - append(", MaxBssLoad: ").append(mMaxBssLoad == null ? none : mMaxBssLoad). - append(", SPExclusionList: ").append(mSpExclusionList); - - if (mPreferredRoamingPartnerList != null) { - sb.append("PreferredRoamingPartnerList:"); - for (WifiPasspointDmTree.PreferredRoamingPartnerList prpListItem : mPreferredRoamingPartnerList) { - sb.append("[fqdnmatch:").append(prpListItem.FQDN_Match). - append(", priority:").append(prpListItem.Priority). - append(", country:").append(prpListItem.Country).append("]"); + if (!DBG) { + sb.append(none); + } else { + sb.append(", UpdateIdentifier: ") + .append(mUpdateIdentifier == null ? none : mUpdateIdentifier) + .append(", SubscriptionUpdateMethod: ") + .append(mSubscriptionUpdateMethod == null ? none : mSubscriptionUpdateMethod) + .append(", Type: ").append(mType == null ? none : mType) + .append(", Username: ").append(mUsername == null ? none : mUsername) + .append(", Passwd: ").append(mPasswd == null ? none : mPasswd) + .append(", SubDMAccUsername: ") + .append(mSubscriptionUpdateUsername == null ? none : mSubscriptionUpdateUsername) + .append(", SubDMAccPassword: ") + .append(mSubscriptionUpdatePassword == null ? none : mSubscriptionUpdatePassword) + .append(", PolDMAccUsername: ") + .append(mPolicyUpdateUsername == null ? none : mPolicyUpdateUsername) + .append(", PolDMAccPassword: ") + .append(mPolicyUpdatePassword == null ? none : mPolicyUpdatePassword) + .append(", Imsi: ").append(mImsi == null ? none : mImsi) + .append(", Mcc: ").append(mMcc == null ? none : mMcc) + .append(", Mnc: ").append(mMnc == null ? none : mMnc) + .append(", CaRootCert: ").append(mCaRootCert == null ? none : mCaRootCert) + .append(", Realm: ").append(mRealm == null ? none : mRealm) + .append(", Priority: ").append(mCrednetialPriority) + .append(", Fqdn: ").append(mHomeSpFqdn == null ? none : mHomeSpFqdn) + .append(", Otherhomepartners: ") + .append(mOtherHomePartnerList == null ? none : mOtherHomePartnerList) + .append(", ExpirationDate: ") + .append(mExpirationDate == null ? none : mExpirationDate) + .append(", MaxBssLoad: ").append(mMaxBssLoad == null ? none : mMaxBssLoad) + .append(", SPExclusionList: ").append(mSpExclusionList); + + if (mPreferredRoamingPartnerList != null) { + sb.append("PreferredRoamingPartnerList:"); + for (WifiPasspointDmTree.PreferredRoamingPartnerList prpListItem : mPreferredRoamingPartnerList) { + sb.append("[fqdnmatch:").append(prpListItem.FQDN_Match). + append(", priority:").append(prpListItem.Priority). + append(", country:").append(prpListItem.Country).append("]"); + } } - } - if (mHomeOIList != null) { - sb.append("HomeOIList:"); - for (WifiPasspointDmTree.HomeOIList HomeOIListItem : mHomeOIList) { - sb.append("[HomeOI:").append(HomeOIListItem.HomeOI). - append(", HomeOIRequired:").append(HomeOIListItem.HomeOIRequired). - append("]"); + if (mHomeOIList != null) { + sb.append("HomeOIList:"); + for (WifiPasspointDmTree.HomeOIList HomeOIListItem : mHomeOIList) { + sb.append("[HomeOI:").append(HomeOIListItem.HomeOI). + append(", HomeOIRequired:").append(HomeOIListItem.HomeOIRequired). + append("]"); + } } - } - if (mMinBackhaulThresholdNetwork != null) { - sb.append("BackHaulThreshold:"); - for (WifiPasspointDmTree.MinBackhaulThresholdNetwork BhtListItem : mMinBackhaulThresholdNetwork) { - sb.append("[networkType:").append(BhtListItem.NetworkType). - append(", dlBandwidth:").append(BhtListItem.DLBandwidth). - append(", ulBandwidth:").append(BhtListItem.ULBandwidth). - append("]"); + if (mMinBackhaulThresholdNetwork != null) { + sb.append("BackHaulThreshold:"); + for (WifiPasspointDmTree.MinBackhaulThresholdNetwork BhtListItem : mMinBackhaulThresholdNetwork) { + sb.append("[networkType:").append(BhtListItem.NetworkType). + append(", dlBandwidth:").append(BhtListItem.DLBandwidth). + append(", ulBandwidth:").append(BhtListItem.ULBandwidth). + append("]"); + } } - } - if (mRequiredProtoPortTuple != null) { - sb.append("WifiMORequiredProtoPortTupleList:"); - for (WifiPasspointDmTree.RequiredProtoPortTuple RpptListItem : mRequiredProtoPortTuple) { - sb.append("[IPProtocol:").append(RpptListItem.IPProtocol). - append(", PortNumber:").append(RpptListItem.PortNumber). - append("]"); + if (mRequiredProtoPortTuple != null) { + sb.append("WifiMORequiredProtoPortTupleList:"); + for (WifiPasspointDmTree.RequiredProtoPortTuple RpptListItem : mRequiredProtoPortTuple) { + sb.append("[IPProtocol:").append(RpptListItem.IPProtocol). + append(", PortNumber:").append(RpptListItem.PortNumber). + append("]"); + } } } - return sb.toString(); } @@ -654,19 +591,22 @@ public class WifiPasspointCredential implements Parcelable { /** Implement the Parcelable interface {@hide} */ public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mWifiSpFqdn); + dest.writeString(mCredentialName); dest.writeString(mType); - dest.writeString(mUsername); - dest.writeString(mPasswd); - dest.writeString(mImsi); - dest.writeString(mMcc); - dest.writeString(mMnc); - dest.writeString(mCaRootCert); - dest.writeString(mRealm); - dest.writeInt(mPriority); + dest.writeInt(mCrednetialPriority); dest.writeString(mHomeSpFqdn); - dest.writeString(mOtherhomepartnerFqdn); - dest.writeString(mClientCert); - dest.writeString(mExpirationDate); + dest.writeString(mRealm); + } + + /** Implement the Parcelable interface {@hide} */ + public void readFromParcel(Parcel in) { + mWifiSpFqdn = in.readString(); + mCredentialName = in.readString(); + mType = in.readString(); + mCrednetialPriority = in.readInt(); + mHomeSpFqdn = in.readString(); + mRealm = in.readString(); } /** Implement the Parcelable interface {@hide} */ @@ -674,19 +614,12 @@ public class WifiPasspointCredential implements Parcelable { new Creator<WifiPasspointCredential>() { public WifiPasspointCredential createFromParcel(Parcel in) { WifiPasspointCredential pc = new WifiPasspointCredential(); + pc.mWifiSpFqdn = in.readString(); + pc.mCredentialName = in.readString(); pc.mType = in.readString(); - pc.mUsername = in.readString(); - pc.mPasswd = in.readString(); - pc.mImsi = in.readString(); - pc.mMcc = in.readString(); - pc.mMnc = in.readString(); - pc.mCaRootCert = in.readString(); - pc.mRealm = in.readString(); - pc.mPriority = in.readInt(); + pc.mCrednetialPriority = in.readInt(); pc.mHomeSpFqdn = in.readString(); - pc.mOtherhomepartnerFqdn = in.readString(); - pc.mClientCert = in.readString(); - pc.mExpirationDate = in.readString(); + pc.mRealm = in.readString(); return pc; } @@ -699,9 +632,9 @@ public class WifiPasspointCredential implements Parcelable { public int compareTo(WifiPasspointCredential another) { //The smaller the higher - if (mPriority < another.mPriority) { + if (mCrednetialPriority < another.mCrednetialPriority) { return -1; - } else if (mPriority == another.mPriority) { + } else if (mCrednetialPriority == another.mCrednetialPriority) { return this.mType.compareTo(another.mType); } else { return 1; diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointDmTree.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointDmTree.java index 9ff1973..bbf5fc6 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointDmTree.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointDmTree.java @@ -25,19 +25,17 @@ import java.util.HashMap; /** * Required Mobile Device Management Tree Structure * - * +----------+ - * | ./(Root) | - * +----+-----+ - * | - * +---------+ | +---------+ +---------+ - * | DevInfo |-----------+---------| Wi-Fi |---|SP FQDN* | - * +---------+ | +---------+ +---------+ - * +---------+ | - * |DevDetail|-----------+ - * +---------+ - * - * For example, - * ./Wi-Fi/wi-fi.org/PerproviderSubscription/Cred01/Policy/PreferredRoamingPartnerList/Roa01/FQDN_Math + * +----------+ + * | ./(Root) | + * +----+-----+ + * | + * +---------+ | +---------+ +---------+ + * | DevInfo |-----------+---------| Wi-Fi |--|SP FQDN* | + * +---------+ | +---------+ +---------+ + * +---------+ | | + * |DevDetail|-----------+ +-----------------------+ + * +---------+ |PerproviderSubscription|--<X>+ + * +-----------------------+ * * This class contains all nodes start from Wi-Fi * @hide diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java index 99bea2f..5ef1bf9 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java @@ -88,68 +88,174 @@ public class WifiPasspointInfo implements Parcelable { CONNECTION_CAPABILITY | OSU_PROVIDER; - /** TODO doc */ - public String bssid; - /** TODO doc */ - public String venueName; + public static class WanMetrics { + public static final int STATUS_RESERVED = 0; + public static final int STATUS_UP = 1; + public static final int STATUS_DOWN = 2; + public static final int STATUS_TEST = 3; + + public int wanInfo; + public long downlinkSpeed; + public long uplinkSpeed; + public int downlinkLoad; + public int uplinkLoad; + public int lmd; + + public int getLinkStatus() { + return wanInfo & 0x3; + } - /** TODO doc */ - public String networkAuthType; + public boolean getSymmetricLink() { + return (wanInfo & (1 << 2)) != 0; + } - /** TODO doc */ - public String roamingConsortium; + public boolean getAtCapacity() { + return (wanInfo & (1 << 3)) != 0; + } - /** TODO doc */ - public String ipAddrTypeAvaibility; + @Override + public String toString() { + return wanInfo + "," + downlinkSpeed + "," + uplinkSpeed + "," + + downlinkLoad + "," + uplinkLoad + "," + lmd; + } + } - /** TODO doc */ - public String naiRealm; + public static class IpProtoPort { + public static final int STATUS_CLOSED = 0; + public static final int STATUS_OPEN = 1; + public static final int STATUS_UNKNOWN = 2; - /** TODO doc */ - public String cellularNetwork; + public int proto; + public int port; + public int status; - /** TODO doc */ - public String domainName; + @Override + public String toString() { + return proto + "," + port + "," + status; + } + } - /** TODO doc */ - public String operatorFriendlyName; + public static class NetworkAuthType { + public static final int TYPE_TERMS_AND_CONDITION = 0; + public static final int TYPE_ONLINE_ENROLLMENT = 1; + public static final int TYPE_HTTP_REDIRECTION = 2; + public static final int TYPE_DNS_REDIRECTION = 3; - /** TODO doc */ - public String wanMetrics; + public int type; + public String redirectUrl; - /** TODO doc */ - public String connectionCapability; + @Override + public String toString() { + return type + "," + redirectUrl; + } + } - /** TODO doc */ - public List<WifiPasspointOsuProvider> osuProviderList; + public static class IpAddressType { + public static final int IPV6_NOT_AVAILABLE = 0; + public static final int IPV6_AVAILABLE = 1; + public static final int IPV6_UNKNOWN = 2; + + public static final int IPV4_NOT_AVAILABLE = 0; + public static final int IPV4_PUBLIC = 1; + public static final int IPV4_PORT_RESTRICTED = 2; + public static final int IPV4_SINGLE_NAT = 3; + public static final int IPV4_DOUBLE_NAT = 4; + public static final int IPV4_PORT_RESTRICTED_SINGLE_NAT = 5; + public static final int IPV4_PORT_RESTRICTED_DOUBLE_NAT = 6; + public static final int IPV4_PORT_UNKNOWN = 7; + + private static final int NULL_VALUE = -1; + + public int availability; + + public int getIpv6Availability() { + return availability & 0x3; + } + + public int getIpv4Availability() { + return (availability & 0xFF) >> 2; + } + + @Override + public String toString() { + return getIpv6Availability() + "," + getIpv4Availability(); + } + } + + public static class NaiRealm { + public static final int ENCODING_RFC4282 = 0; + public static final int ENCODING_UTF8 = 1; + + public int encoding; + public String realm; - /** default constructor @hide */ - public WifiPasspointInfo() { - // osuProviderList = new ArrayList<OsuProvider>(); + @Override + public String toString() { + return encoding + "," + realm; + } } - /** copy constructor @hide */ - public WifiPasspointInfo(WifiPasspointInfo source) { - // TODO - bssid = source.bssid; - venueName = source.venueName; - networkAuthType = source.networkAuthType; - roamingConsortium = source.roamingConsortium; - ipAddrTypeAvaibility = source.ipAddrTypeAvaibility; - naiRealm = source.naiRealm; - cellularNetwork = source.cellularNetwork; - domainName = source.domainName; - operatorFriendlyName = source.operatorFriendlyName; - wanMetrics = source.wanMetrics; - connectionCapability = source.connectionCapability; - if (source.osuProviderList != null) { - osuProviderList = new ArrayList<WifiPasspointOsuProvider>(); - for (WifiPasspointOsuProvider osu : source.osuProviderList) - osuProviderList.add(new WifiPasspointOsuProvider(osu)); + public static class CellularNetwork { + public byte[] rawData; + + public int getMnc() { + // TODO + return 0; + } + + public int getMcc() { + // TODO + return 0; + } + + @Override + public String toString() { + if (rawData == null) return null; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < rawData.length; i++) + sb.append(String.format("%02X", rawData[i])); + return sb.toString(); } + } + /** BSSID */ + public String bssid; + + /** venue name */ + public String venueName; + + /** list of network authentication types */ + public List<NetworkAuthType> networkAuthType; + + /** list of roaming consortium OIs */ + public List<String> roamingConsortium; + + /** IP address availability */ + public IpAddressType ipAddrTypeAvailability; + + /** NAI realm */ + public List<NaiRealm> naiRealm; + + /** 3GPP cellular network */ + public CellularNetwork cellularNetwork; + + /** fully qualified domain name (FQDN) */ + public List<String> domainName; + + /** HS 2.0 operator friendly name */ + public String operatorFriendlyName; + + /** HS 2.0 wan metrics */ + public WanMetrics wanMetrics; + + /** HS 2.0 list of IP proto port */ + public List<IpProtoPort> connectionCapability; + + /** HS 2.0 list of OSU providers */ + public List<WifiPasspointOsuProvider> osuProviderList; + /** * Convert mask to ANQP subtypes, for supplicant command use. * @@ -193,46 +299,149 @@ public class WifiPasspointInfo implements Parcelable { @Override public String toString() { StringBuffer sb = new StringBuffer(); + sb.append("BSSID: ").append(bssid); + if (venueName != null) - sb.append(" venueName: ").append(venueName); - if (networkAuthType != null) - sb.append(" networkAuthType: ").append(networkAuthType); - if (roamingConsortium != null) - sb.append(" roamingConsortium: ").append(roamingConsortium); - if (ipAddrTypeAvaibility != null) - sb.append(" ipAddrTypeAvaibility: ").append(ipAddrTypeAvaibility); - if (naiRealm != null) - sb.append(" naiRealm: ").append(naiRealm); + sb.append(" venueName: ").append(venueName.replace("\n", "\\n")); + + if (networkAuthType != null) { + sb.append(" networkAuthType: "); + for (NetworkAuthType auth : networkAuthType) + sb.append("(").append(auth.toString()).append(")"); + } + + if (roamingConsortium != null) { + sb.append(" roamingConsortium: "); + for (String oi : roamingConsortium) + sb.append("(").append(oi).append(")"); + } + + if (ipAddrTypeAvailability != null) { + sb.append(" ipAddrTypeAvaibility: ").append("(") + .append(ipAddrTypeAvailability.toString()).append(")"); + } + + if (naiRealm != null) { + sb.append(" naiRealm: "); + for (NaiRealm realm : naiRealm) + sb.append("(").append(realm.toString()).append(")"); + } + if (cellularNetwork != null) - sb.append(" cellularNetwork: ").append(cellularNetwork); - if (domainName != null) - sb.append(" domainName: ").append(domainName); + sb.append(" cellularNetwork: ").append("(") + .append(cellularNetwork.toString()).append(")"); + + if (domainName != null) { + sb.append(" domainName: "); + for (String fqdn : domainName) + sb.append("(").append(fqdn).append(")"); + } + if (operatorFriendlyName != null) - sb.append(" operatorFriendlyName: ").append(operatorFriendlyName); + sb.append(" operatorFriendlyName: ").append("(") + .append(operatorFriendlyName).append(")"); + if (wanMetrics != null) - sb.append(" wanMetrics: ").append(wanMetrics); - if (connectionCapability != null) - sb.append(" connectionCapability: ").append(connectionCapability); - if (osuProviderList != null) - sb.append(" osuProviderList: (size=" + osuProviderList.size() + ")"); + sb.append(" wanMetrics: ").append("(") + .append(wanMetrics.toString()).append(")"); + + if (connectionCapability != null) { + sb.append(" connectionCapability: "); + for (IpProtoPort ip : connectionCapability) + sb.append("(").append(ip.toString()).append(")"); + } + + if (osuProviderList != null) { + sb.append(" osuProviderList: "); + for (WifiPasspointOsuProvider osu : osuProviderList) + sb.append("(").append(osu.toString()).append(")"); + } + return sb.toString(); } /** Implement the Parcelable interface {@hide} */ @Override public void writeToParcel(Parcel out, int flags) { - out.writeValue(bssid); - out.writeValue(venueName); - out.writeValue(networkAuthType); - out.writeValue(roamingConsortium); - out.writeValue(ipAddrTypeAvaibility); - out.writeValue(naiRealm); - out.writeValue(cellularNetwork); - out.writeValue(domainName); - out.writeValue(operatorFriendlyName); - out.writeValue(wanMetrics); - out.writeValue(connectionCapability); + out.writeString(bssid); + out.writeString(venueName); + + if (networkAuthType == null) { + out.writeInt(0); + } else { + out.writeInt(networkAuthType.size()); + for (NetworkAuthType auth : networkAuthType) { + out.writeInt(auth.type); + out.writeString(auth.redirectUrl); + } + } + + if (roamingConsortium == null) { + out.writeInt(0); + } else { + out.writeInt(roamingConsortium.size()); + for (String oi : roamingConsortium) + out.writeString(oi); + } + + if (ipAddrTypeAvailability == null) { + out.writeInt(IpAddressType.NULL_VALUE); + } else { + out.writeInt(ipAddrTypeAvailability.availability); + } + + if (naiRealm == null) { + out.writeInt(0); + } else { + out.writeInt(naiRealm.size()); + for (NaiRealm realm : naiRealm) { + out.writeInt(realm.encoding); + out.writeString(realm.realm); + } + } + + if (cellularNetwork == null) { + out.writeInt(0); + } else { + out.writeInt(cellularNetwork.rawData.length); + out.writeByteArray(cellularNetwork.rawData); + } + + + if (domainName == null) { + out.writeInt(0); + } else { + out.writeInt(domainName.size()); + for (String fqdn : domainName) + out.writeString(fqdn); + } + + out.writeString(operatorFriendlyName); + + if (wanMetrics == null) { + out.writeInt(0); + } else { + out.writeInt(1); + out.writeInt(wanMetrics.wanInfo); + out.writeLong(wanMetrics.downlinkSpeed); + out.writeLong(wanMetrics.uplinkSpeed); + out.writeInt(wanMetrics.downlinkLoad); + out.writeInt(wanMetrics.uplinkLoad); + out.writeInt(wanMetrics.lmd); + } + + if (connectionCapability == null) { + out.writeInt(0); + } else { + out.writeInt(connectionCapability.size()); + for (IpProtoPort ip : connectionCapability) { + out.writeInt(ip.proto); + out.writeInt(ip.port); + out.writeInt(ip.status); + } + } + if (osuProviderList == null) { out.writeInt(0); } else { @@ -254,18 +463,86 @@ public class WifiPasspointInfo implements Parcelable { @Override public WifiPasspointInfo createFromParcel(Parcel in) { WifiPasspointInfo p = new WifiPasspointInfo(); - p.bssid = (String) in.readValue(String.class.getClassLoader()); - p.venueName = (String) in.readValue(String.class.getClassLoader()); - p.networkAuthType = (String) in.readValue(String.class.getClassLoader()); - p.roamingConsortium = (String) in.readValue(String.class.getClassLoader()); - p.ipAddrTypeAvaibility = (String) in.readValue(String.class.getClassLoader()); - p.naiRealm = (String) in.readValue(String.class.getClassLoader()); - p.cellularNetwork = (String) in.readValue(String.class.getClassLoader()); - p.domainName = (String) in.readValue(String.class.getClassLoader()); - p.operatorFriendlyName = (String) in.readValue(String.class.getClassLoader()); - p.wanMetrics = (String) in.readValue(String.class.getClassLoader()); - p.connectionCapability = (String) in.readValue(String.class.getClassLoader()); - int n = in.readInt(); + int n; + + p.bssid = in.readString(); + p.venueName = in.readString(); + + n = in.readInt(); + if (n > 0) { + p.networkAuthType = new ArrayList<NetworkAuthType>(); + for (int i = 0; i < n; i++) { + NetworkAuthType auth = new NetworkAuthType(); + auth.type = in.readInt(); + auth.redirectUrl = in.readString(); + p.networkAuthType.add(auth); + } + } + + n = in.readInt(); + if (n > 0) { + p.roamingConsortium = new ArrayList<String>(); + for (int i = 0; i < n; i++) + p.roamingConsortium.add(in.readString()); + } + + n = in.readInt(); + if (n != IpAddressType.NULL_VALUE) { + p.ipAddrTypeAvailability = new IpAddressType(); + p.ipAddrTypeAvailability.availability = n; + } + + n = in.readInt(); + if (n > 0) { + p.naiRealm = new ArrayList<NaiRealm>(); + for (int i = 0; i < n; i++) { + NaiRealm realm = new NaiRealm(); + realm.encoding = in.readInt(); + realm.realm = in.readString(); + p.naiRealm.add(realm); + } + } + + n = in.readInt(); + if (n > 0) { + p.cellularNetwork = new CellularNetwork(); + p.cellularNetwork.rawData = new byte[n]; + in.readByteArray(p.cellularNetwork.rawData); + } + + n = in.readInt(); + if (n > 0) { + p.domainName = new ArrayList<String>(); + for (int i = 0; i < n; i++) + p.domainName.add(in.readString()); + } + + p.operatorFriendlyName = in.readString(); + + n = in.readInt(); + if (n > 0) { + p.wanMetrics = new WanMetrics(); + p.wanMetrics.wanInfo = in.readInt(); + p.wanMetrics.downlinkSpeed = in.readLong(); + p.wanMetrics.uplinkSpeed = in.readLong(); + p.wanMetrics.downlinkLoad = in.readInt(); + p.wanMetrics.uplinkLoad = in.readInt(); + p.wanMetrics.lmd = in.readInt(); + } + + n = in.readInt(); + if (n > 0) { + p.connectionCapability = new ArrayList<IpProtoPort>(); + for (int i = 0; i < n; i++) { + IpProtoPort ip = new IpProtoPort(); + ip.proto = in.readInt(); + ip.port = in.readInt(); + ip.status = in.readInt(); + p.connectionCapability.add(ip); + } + } + + n = in.readInt(); if (n > 0) { p.osuProviderList = new ArrayList<WifiPasspointOsuProvider>(); for (int i = 0; i < n; i++) { @@ -274,6 +551,7 @@ public class WifiPasspointInfo implements Parcelable { p.osuProviderList.add(osu); } } + return p; } diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointOsuProvider.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointOsuProvider.java index 18a8f1e..f40dc4f 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointOsuProvider.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointOsuProvider.java @@ -94,10 +94,10 @@ public class WifiPasspointOsuProvider implements Parcelable { sb.append(" serverUri: ").append(serverUri); sb.append(" osuMethod: ").append(osuMethod); if (iconFileName != null) { - sb.append(" icon: [").append(iconWidth).append("x") + sb.append(" icon: <").append(iconWidth).append("x") .append(iconHeight).append(" ") .append(iconType).append(" ") - .append(iconFileName); + .append(iconFileName).append(">"); } if (osuNai != null) sb.append(" osuNai: ").append(osuNai); @@ -113,16 +113,16 @@ public class WifiPasspointOsuProvider implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { - out.writeValue(ssid); - out.writeValue(friendlyName); - out.writeValue(serverUri); + out.writeString(ssid); + out.writeString(friendlyName); + out.writeString(serverUri); out.writeInt(osuMethod); out.writeInt(iconWidth); out.writeInt(iconHeight); - out.writeValue(iconType); - out.writeValue(iconFileName); - out.writeValue(osuNai); - out.writeValue(osuService); + out.writeString(iconType); + out.writeString(iconFileName); + out.writeString(osuNai); + out.writeString(osuService); // TODO: icon image? } @@ -131,16 +131,16 @@ public class WifiPasspointOsuProvider implements Parcelable { @Override public WifiPasspointOsuProvider createFromParcel(Parcel in) { WifiPasspointOsuProvider osu = new WifiPasspointOsuProvider(); - osu.ssid = (String) in.readValue(String.class.getClassLoader()); - osu.friendlyName = (String) in.readValue(String.class.getClassLoader()); - osu.serverUri = (String) in.readValue(String.class.getClassLoader()); + osu.ssid = in.readString(); + osu.friendlyName = in.readString(); + osu.serverUri = in.readString(); osu.osuMethod = in.readInt(); osu.iconWidth = in.readInt(); osu.iconHeight = in.readInt(); - osu.iconType = (String) in.readValue(String.class.getClassLoader()); - osu.iconFileName = (String) in.readValue(String.class.getClassLoader()); - osu.osuNai = (String) in.readValue(String.class.getClassLoader()); - osu.osuService = (String) in.readValue(String.class.getClassLoader()); + osu.iconType = in.readString(); + osu.iconFileName = in.readString(); + osu.osuNai = in.readString(); + osu.osuService = in.readString(); return osu; } diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointPolicy.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointPolicy.java index 5f76562..9fccf0a 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointPolicy.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointPolicy.java @@ -35,7 +35,7 @@ public class WifiPasspointPolicy implements Parcelable { public static final int UNRESTRICTED = 2; private String mName; - private int mSubscriptionPriority; + private int mCredentialPriority; private int mRoamingPriority; private String mBssid; private String mSsid; @@ -44,11 +44,13 @@ public class WifiPasspointPolicy implements Parcelable { private boolean mIsHomeSp; /** @hide */ - public WifiPasspointPolicy(String name, int priority, String ssid, + public WifiPasspointPolicy(String name, String ssid, String bssid, WifiPasspointCredential pc, int restriction, boolean ishomesp) { mName = name; - mSubscriptionPriority = priority; + if (pc != null) { + mCredentialPriority = pc.getPriority(); + } //PerProviderSubscription/<X+>/Policy/PreferredRoamingPartnerList/<X+>/Priority mRoamingPriority = 128; //default priority value of 128 mSsid = ssid; @@ -102,8 +104,8 @@ public class WifiPasspointPolicy implements Parcelable { } /** @hide */ - public void setSubscriptionPriority(int priority) { - mSubscriptionPriority = priority; + public void setCredentialPriority(int priority) { + mCredentialPriority = priority; } /** @hide */ @@ -111,8 +113,8 @@ public class WifiPasspointPolicy implements Parcelable { mRoamingPriority = priority; } - public int getSubscriptionPriority() { - return mSubscriptionPriority; + public int getCredentialPriority() { + return mCredentialPriority; } public int getRoamingPriority() { @@ -132,11 +134,11 @@ public class WifiPasspointPolicy implements Parcelable { return -1; } else if ((this.mIsHomeSp == true && another.getHomeSp() == true)) { Log.d(TAG, "both HomeSP"); - //if both home sp, compare subscription priority - if (this.mSubscriptionPriority < another.getSubscriptionPriority()) { + //if both home sp, compare credential priority + if (this.mCredentialPriority < another.getCredentialPriority()) { Log.d(TAG, "this priority is higher"); return -1; - } else if (this.mSubscriptionPriority == another.getSubscriptionPriority()) { + } else if (this.mCredentialPriority == another.getCredentialPriority()) { Log.d(TAG, "both priorities equal"); //if priority still the same, compare name(ssid) if (this.mName.compareTo(another.mName) != 0) { @@ -192,7 +194,7 @@ public class WifiPasspointPolicy implements Parcelable { @Override /** @hide */ public String toString() { - return "PasspointPolicy: name=" + mName + " SubscriptionPriority=" + mSubscriptionPriority + + return "PasspointPolicy: name=" + mName + " CredentialPriority=" + mCredentialPriority + " mRoamingPriority" + mRoamingPriority + " ssid=" + mSsid + " restriction=" + mRestriction + " ishomesp=" + mIsHomeSp + " Credential=" + mCredential; |
