summaryrefslogtreecommitdiffstats
path: root/wifi/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/java/android')
-rw-r--r--wifi/java/android/net/wifi/RssiPacketCountInfo.java6
-rw-r--r--wifi/java/android/net/wifi/ScanResult.java21
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java166
-rw-r--r--wifi/java/android/net/wifi/WifiEnterpriseConfig.java4
-rw-r--r--wifi/java/android/net/wifi/WifiInfo.java212
-rw-r--r--wifi/java/android/net/wifi/WifiLinkLayerStats.java2
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java20
-rw-r--r--wifi/java/android/net/wifi/WifiScanner.java108
-rw-r--r--wifi/java/android/net/wifi/WpsInfo.java2
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java467
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointDmTree.java24
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java447
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java5
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointOsuProvider.java32
-rw-r--r--wifi/java/android/net/wifi/passpoint/WifiPasspointPolicy.java24
15 files changed, 1059 insertions, 481 deletions
diff --git a/wifi/java/android/net/wifi/RssiPacketCountInfo.java b/wifi/java/android/net/wifi/RssiPacketCountInfo.java
index f549e1d..0de2033 100644
--- a/wifi/java/android/net/wifi/RssiPacketCountInfo.java
+++ b/wifi/java/android/net/wifi/RssiPacketCountInfo.java
@@ -34,14 +34,17 @@ public class RssiPacketCountInfo implements Parcelable {
public int txbad;
+ public int rxgood;
+
public RssiPacketCountInfo() {
- rssi = txgood = txbad = 0;
+ rssi = txgood = txbad = rxgood = 0;
}
private RssiPacketCountInfo(Parcel in) {
rssi = in.readInt();
txgood = in.readInt();
txbad = in.readInt();
+ rxgood = in.readInt();
}
@Override
@@ -49,6 +52,7 @@ public class RssiPacketCountInfo implements Parcelable {
out.writeInt(rssi);
out.writeInt(txgood);
out.writeInt(txbad);
+ out.writeInt(rxgood);
}
@Override
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index f6d7f55..8191edd 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -89,6 +89,21 @@ public class ScanResult implements Parcelable {
* {@hide}
*/
public final static int UNSPECIFIED = -1;
+ /**
+ * @hide
+ * TODO: makes real freq boundaries
+ */
+ public boolean is24GHz() {
+ return frequency > 2400 && frequency < 2500;
+ }
+
+ /**
+ * @hide
+ * TODO: makes real freq boundaries
+ */
+ public boolean is5GHz() {
+ return frequency > 4900 && frequency < 5900;
+ }
/** information element from beacon
* @hide
@@ -144,8 +159,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;
}
}
@@ -179,8 +193,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();
}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 5dfc318..48396d5 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -347,9 +347,68 @@ public class WifiConfiguration implements Parcelable {
*/
public HashMap<String, ScanResult> scanResultCache;
+ /** The Below RSSI thresholds are used to configure AutoJoin
+ * - GOOD/LOW/BAD thresholds are used so as to calculate link score
+ * - UNWANTED_SOFT are used by the blacklisting logic so as to handle the unwanted network message coming from CS
+ * - UNBLACKLIST thresholds are used so as to tweak the speed at which the network is unblacklisted (i.e. if
+ * it is seen with good RSSI, it is blacklisted faster)
+ * - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from the network we need to be before autojoin kicks in
+ */
/** @hide **/
public static int INVALID_RSSI = -127;
+ /** @hide **/
+ public static int UNWANTED_BLACKLIST_SOFT_RSSI_24 = -80;
+
+ /** @hide **/
+ public static int UNWANTED_BLACKLIST_SOFT_RSSI_5 = -70;
+
+ /** @hide **/
+ public static int GOOD_RSSI_24 = -65;
+
+ /** @hide **/
+ public static int LOW_RSSI_24 = -75;
+
+ /** @hide **/
+ public static int BAD_RSSI_24 = -85;
+
+ /** @hide **/
+ public static int GOOD_RSSI_5 = -55;
+
+ /** @hide **/
+ public static int LOW_RSSI_5 = -65;
+
+ /** @hide **/
+ public static int BAD_RSSI_5 = -75;
+
+ /** @hide **/
+ public static int UNWANTED_BLACKLIST_SOFT_BUMP = 4;
+
+ /** @hide **/
+ public static int UNWANTED_BLACKLIST_HARD_BUMP = 8;
+
+ /** @hide **/
+ public static int UNBLACKLIST_THRESHOLD_24_SOFT = -75;
+
+ /** @hide **/
+ public static int UNBLACKLIST_THRESHOLD_24_HARD = -68;
+
+ /** @hide **/
+ public static int UNBLACKLIST_THRESHOLD_5_SOFT = -63;
+
+ /** @hide **/
+ public static int UNBLACKLIST_THRESHOLD_5_HARD = -56;
+
+ /** @hide **/
+ public static int INITIAL_AUTO_JOIN_ATTEMPT_MIN_24 = -80;
+
+ /** @hide **/
+ public static int INITIAL_AUTO_JOIN_ATTEMPT_MIN_5 = -70;
+
+ /** @hide
+ * 5GHz band is prefered over 2.4 if the 5GHz RSSI is higher than this threshold **/
+ public static int A_BAND_PREFERENCE_RSSI_THRESHOLD = -65;
+
/**
* @hide
* A summary of the RSSI and Band status for that configuration
@@ -426,11 +485,11 @@ public class WifiConfiguration implements Parcelable {
if (result.seen == 0)
continue;
- if ((result.frequency > 4900) && (result.frequency < 5900)) {
+ if (result.is5GHz()) {
//strictly speaking: [4915, 5825]
//number of known BSSID on 5GHz band
status.num5 = status.num5 + 1;
- } else if ((result.frequency > 2400) && (result.frequency < 2500)) {
+ } else if (result.is24GHz()) {
//strictly speaking: [2412, 2482]
//number of known BSSID on 2.4Ghz band
status.num24 = status.num24 + 1;
@@ -438,12 +497,12 @@ public class WifiConfiguration implements Parcelable {
if ((now_ms - result.seen) > age) continue;
- if ((result.frequency > 4900) && (result.frequency < 5900)) {
+ if (result.is5GHz()) {
if (result.level > status.rssi5) {
status.rssi5 = result.level;
status.age5 = result.seen;
}
- } else if ((result.frequency > 2400) && (result.frequency < 2500)) {
+ } else if (result.is24GHz()) {
if (result.level > status.rssi24) {
status.rssi24 = result.level;
status.age24 = result.seen;
@@ -456,7 +515,7 @@ public class WifiConfiguration implements Parcelable {
/** @hide */
public static final int AUTO_JOIN_ENABLED = 0;
- /** @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
@@ -465,7 +524,17 @@ public class WifiConfiguration implements Parcelable {
* 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
* */
+
+ /** @hide
+ * network was temporary disabled due to bad connection, most likely due
+ * to weak RSSI */
public static final int AUTO_JOIN_TEMPORARY_DISABLED = 1;
+ /** @hide
+ * network was temporary disabled due to bad connection, which cant be attributed
+ * to weak RSSI */
+ public static final int AUTO_JOIN_TEMPORARY_DISABLED_LINK_ERRORS = 32;
+ /** @hide */
+ public static final int AUTO_JOIN_TEMPORARY_DISABLED_AT_SUPPLICANT = 64;
/** @hide */
public static final int AUTO_JOIN_DISABLED_ON_AUTH_FAILURE = 128;
/** @hide */
@@ -476,6 +545,24 @@ public class WifiConfiguration implements Parcelable {
*/
public int autoJoinStatus;
+
+ /**
+ * @hide
+ */
+ public long blackListTimestamp;
+
+ /**
+ * @hide
+ * last time the system was connected to this configuration.
+ */
+ public long lastConnected;
+
+ /**
+ * @hide
+ * last time the system was disconnected to this configuration.
+ */
+ public long lastDisconnected;
+
/**
* Set if the configuration was self added by the framework
* This boolean is cleared if we get a connect/save/ update or
@@ -586,7 +673,20 @@ public class WifiConfiguration implements Parcelable {
// TODO: Add more checks
return true;
+ }
+ /**
+ * Helper function, identify if a configuration is linked
+ * @hide
+ */
+ public boolean isLinked(WifiConfiguration config) {
+ if (config.linkedConfigurations != null && linkedConfigurations != null) {
+ if (config.linkedConfigurations.get(configKey()) != null
+ && linkedConfigurations.get(config.configKey()) != null) {
+ return true;
+ }
+ }
+ return false;
}
/**
@@ -614,6 +714,17 @@ public class WifiConfiguration implements Parcelable {
return mostRecent;
}
+ /** @hide **/
+ public void setAutoJoinStatus(int status) {
+ if (status < 0) status = 0;
+ if (status == 0) {
+ blackListTimestamp = 0;
+ } else if (status > autoJoinStatus) {
+ blackListTimestamp = System.currentTimeMillis();
+ }
+ autoJoinStatus = status;
+ }
+
@Override
public String toString() {
StringBuilder sbuf = new StringBuilder();
@@ -697,6 +808,15 @@ public class WifiConfiguration implements Parcelable {
if (selfAdded) sbuf.append("selfAdded");
if (creatorUid != 0) sbuf.append("uid=" + Integer.toString(creatorUid));
+ if (blackListTimestamp != 0) {
+ long now_ms = System.currentTimeMillis();
+ long diff = now_ms - blackListTimestamp;
+ if (diff <= 0) {
+ sbuf.append("blackListed since <incorrect>");
+ } else {
+ sbuf.append("blackListed since ").append(Long.toString(diff/1000)).append( "sec");
+ }
+ }
return sbuf.toString();
}
@@ -987,6 +1107,9 @@ public class WifiConfiguration implements Parcelable {
lastUpdateUid = source.lastUpdateUid;
creatorUid = source.creatorUid;
peerWifiConfiguration = source.peerWifiConfiguration;
+ blackListTimestamp = source.blackListTimestamp;
+ lastConnected = source.lastConnected;
+ lastDisconnected = source.lastDisconnected;
}
}
@@ -1030,17 +1153,7 @@ public class WifiConfiguration implements Parcelable {
dest.writeInt(creatorUid);
dest.writeInt(lastConnectUid);
dest.writeInt(lastUpdateUid);
- /*
- TODO: should we write the cache results to the parcel?
- if (scanResultCache != null) {
- dest.writeInt(WifiConfiguration.SCAN_CACHE_TAG);
- dest.writeInt(scanResultCache.size());
- for (ScanResult result : scanResultCache.values()) {
- result.writeToParcel(dest, flags);
- }
- } else {
- dest.writeInt(WifiConfiguration.NOTHING_TAG);
- }*/
+ dest.writeLong(blackListTimestamp);
}
/** Implement the Parcelable interface {@hide} */
@@ -1079,26 +1192,7 @@ public class WifiConfiguration implements Parcelable {
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;
- do {
- int tag = in.readInt();
- switch (tag) {
- case WifiConfiguration.SCAN_CACHE_TAG:
- int size = in.readInt();
- config.scanResultCache = new HashMap<String, ScanResult>();
- while (size > 0) {
- ScanResult result = ScanResult.CREATOR.createFromParcel(in);
- config.scanResultCache.put(result.BSSID, result);
- size--;
- }
- break;
- case WifiConfiguration.NOTHING_TAG:
- done = true;
- break;
- }
- } while (!done);*/
+ config.blackListTimestamp = in.readLong();
return config;
}
diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
index 1484d49..7debb93 100644
--- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -224,9 +224,9 @@ public class WifiEnterpriseConfig implements Parcelable {
public static final int TTLS = 2;
/** EAP-Password */
public static final int PWD = 3;
- /** EAP-Subscriber Identity Module */
+ /** EAP-Subscriber Identity Module {@hide} */
public static final int SIM = 4;
- /** EAP-Authentication and Key Agreement */
+ /** EAP-Authentication and Key Agreement {@hide} */
public static final int AKA = 5;
/** @hide */
public static final String[] strings = { "PEAP", "TLS", "TTLS", "PWD", "SIM", "AKA" };
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java
index f44cb0a..6760c56 100644
--- a/wifi/java/android/net/wifi/WifiInfo.java
+++ b/wifi/java/android/net/wifi/WifiInfo.java
@@ -40,7 +40,7 @@ public class WifiInfo implements Parcelable {
* of <code>DetailedState</code>.
*/
private static final EnumMap<SupplicantState, DetailedState> stateMap =
- new EnumMap<SupplicantState, DetailedState>(SupplicantState.class);
+ new EnumMap<SupplicantState, DetailedState>(SupplicantState.class);
static {
stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED);
@@ -62,14 +62,31 @@ public class WifiInfo implements Parcelable {
private String mBSSID;
private WifiSsid mWifiSsid;
private int mNetworkId;
- /** Received Signal Strength Indicator */
+
+ /** @hide **/
+ public static final int INVALID_RSSI = -127;
+
+ /** @hide **/
+ public static final int MIN_RSSI = -126;
+
+ /** @hide **/
+ public static final int MAX_RSSI = 200;
+
+
+ /**
+ * Received Signal Strength Indicator
+ */
private int mRssi;
- /** Link speed in Mbps */
+ /**
+ * Link speed in Mbps
+ */
public static final String LINK_SPEED_UNITS = "Mbps";
private int mLinkSpeed;
- /** Frequency in MHz */
+ /**
+ * Frequency in MHz
+ */
public static final String FREQUENCY_UNITS = "MHz";
private int mFrequency;
@@ -77,9 +94,116 @@ public class WifiInfo implements Parcelable {
private String mMacAddress;
/**
- * Flag indicating that AP has hinted that upstream connection is metered,
- * and sensitive to heavy data transfers.
+ * @hide
+ */
+ public long txBad;
+ /**
+ * @hide
+ */
+ public long txRetries;
+ /**
+ * @hide
+ */
+ public long txSuccess;
+ /**
+ * @hide
+ */
+ public long rxSuccess;
+ /**
+ * @hide
+ */
+ public double txBadRate;
+ /**
+ * @hide
+ */
+ public double txRetriesRate;
+ /**
+ * @hide
+ */
+ public double txSuccessRate;
+ /**
+ * @hide
+ */
+ public double rxSuccessRate;
+
+ /**
+ * @hide
+ */
+ public int badRssiCount;
+
+ /**
+ * @hide
+ */
+ public int lowRssiCount;
+
+ /**
+ * @hide *
*/
+ public int score;
+
+ /**
+ * TODO: get actual timestamp and calculate true rates
+ * @hide
+ */
+ public void updatePacketRates(WifiLinkLayerStats stats) {
+ if (stats != null) {
+ long txgood = stats.txmpdu_be + stats.txmpdu_bk + stats.txmpdu_vi + stats.txmpdu_vo;
+ long txretries = stats.retries_be + stats.retries_bk
+ + stats.retries_vi + stats.retries_vo;
+ long rxgood = stats.rxmpdu_be + stats.rxmpdu_bk + stats.rxmpdu_vi + stats.rxmpdu_vo;
+ long txbad = stats.lostmpdu_be + stats.lostmpdu_bk
+ + stats.lostmpdu_vi + stats.lostmpdu_vo;
+
+ txBadRate = (txBadRate * 0.5)
+ + ((double) (txbad - txBad) * 0.5);
+ txSuccessRate = (txSuccessRate * 0.5)
+ + ((double) (txgood - txSuccess) * 0.5);
+ rxSuccessRate = (rxSuccessRate * 0.5)
+ + ((double) (rxgood - rxSuccess) * 0.5);
+ txRetriesRate = (txRetriesRate * 0.5)
+ + ((double) (txretries - txRetries) * 0.5);
+
+ txBad = txbad;
+ txSuccess = txgood;
+ rxSuccess = rxgood;
+ txRetries = txretries;
+ } else {
+ txBad = 0;
+ txSuccess = 0;
+ rxSuccess = 0;
+ txRetries = 0;
+ txBadRate = 0;
+ txSuccessRate = 0;
+ rxSuccessRate = 0;
+ txRetriesRate = 0;
+ }
+ }
+
+
+ /**
+ * This function is less powerful and used if the WifiLinkLayerStats API is not implemented
+ * at the Wifi HAL
+ * @hide
+ */
+ public void updatePacketRates(long txPackets, long rxPackets) {
+ //paranoia
+ txBad = 0;
+ txRetries = 0;
+ txBadRate = 0;
+ txRetriesRate = 0;
+
+ txSuccessRate = (txSuccessRate * 0.5)
+ + ((double) (txPackets - txSuccess) * 0.5);
+ rxSuccessRate = (rxSuccessRate * 0.5)
+ + ((double) (rxPackets - rxSuccess) * 0.5);
+ txSuccess = txPackets;
+ rxSuccess = rxPackets;
+ }
+
+ /**
+ * Flag indicating that AP has hinted that upstream connection is metered,
+ * and sensitive to heavy data transfers.
+ */
private boolean mMeteredHint;
/** @hide */
@@ -88,9 +212,32 @@ public class WifiInfo implements Parcelable {
mBSSID = null;
mNetworkId = -1;
mSupplicantState = SupplicantState.UNINITIALIZED;
- mRssi = -9999;
+ mRssi = INVALID_RSSI;
mLinkSpeed = -1;
mFrequency = -1;
+ txBad = 0;
+ }
+
+ /** @hide */
+ public void reset() {
+ setInetAddress(null);
+ setBSSID(null);
+ setSSID(null);
+ setNetworkId(-1);
+ setRssi(INVALID_RSSI);
+ setLinkSpeed(-1);
+ setFrequency(-1);
+ setMeteredHint(false);
+ txSuccess = 0;
+ rxSuccess = 0;
+ txRetries = 0;
+ txBadRate = 0;
+ txSuccessRate = 0;
+ rxSuccessRate = 0;
+ txRetriesRate = 0;
+ lowRssiCount = 0;
+ badRssiCount = 0;
+ score = 0;
}
/**
@@ -109,6 +256,17 @@ public class WifiInfo implements Parcelable {
mIpAddress = source.mIpAddress;
mMacAddress = source.mMacAddress;
mMeteredHint = source.mMeteredHint;
+ txBad = source.txBad;
+ txRetries = source.txRetries;
+ txSuccess = source.txSuccess;
+ rxSuccess = source.rxSuccess;
+ txBadRate = source.txBadRate;
+ txRetriesRate = source.txRetriesRate;
+ txSuccessRate = source.txSuccessRate;
+ rxSuccessRate = source.rxSuccessRate;
+ score = source.score;
+ badRssiCount = source.badRssiCount;
+ lowRssiCount = source.lowRssiCount;
}
}
@@ -158,7 +316,7 @@ public class WifiInfo implements Parcelable {
/**
* Returns the received signal strength indicator of the current 802.11
* network, in dBm.
- * @return the RSSI, in the range -110 to 10
+ * @return the RSSI, in the range -127 to 200
*/
public int getRssi() {
return mRssi;
@@ -166,6 +324,10 @@ public class WifiInfo implements Parcelable {
/** @hide */
public void setRssi(int rssi) {
+ if (rssi < INVALID_RSSI)
+ rssi = INVALID_RSSI;
+ if (rssi > MAX_RSSI)
+ rssi = MAX_RSSI;
mRssi = rssi;
}
@@ -198,6 +360,22 @@ public class WifiInfo implements Parcelable {
}
/**
+ * @hide
+ * TODO: makes real freq boundaries
+ */
+ public boolean is24GHz() {
+ return mFrequency < 4000;
+ }
+
+ /**
+ * @hide
+ * TODO: makes real freq boundaries
+ */
+ public boolean is5GHz() {
+ return mFrequency > 4000;
+ }
+
+ /**
* Record the MAC address of the WLAN interface
* @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form
* @hide
@@ -325,8 +503,8 @@ public class WifiInfo implements Parcelable {
append(", Link speed: ").append(mLinkSpeed).append(LINK_SPEED_UNITS).
append(", Frequency: ").append(mFrequency).append(FREQUENCY_UNITS).
append(", Net ID: ").append(mNetworkId).
- append(", Metered hint: ").append(mMeteredHint);
-
+ append(", Metered hint: ").append(mMeteredHint).
+ append(", score: ").append(Integer.toString(score));
return sb.toString();
}
@@ -356,6 +534,13 @@ public class WifiInfo implements Parcelable {
dest.writeString(mBSSID);
dest.writeString(mMacAddress);
dest.writeInt(mMeteredHint ? 1 : 0);
+ dest.writeInt(score);
+ dest.writeDouble(txSuccessRate);
+ dest.writeDouble(txRetriesRate);
+ dest.writeDouble(txBadRate);
+ dest.writeDouble(rxSuccessRate);
+ dest.writeInt(badRssiCount);
+ dest.writeInt(lowRssiCount);
mSupplicantState.writeToParcel(dest, flags);
}
@@ -379,6 +564,13 @@ public class WifiInfo implements Parcelable {
info.mBSSID = in.readString();
info.mMacAddress = in.readString();
info.mMeteredHint = in.readInt() != 0;
+ info.score = in.readInt();
+ info.txSuccessRate = in.readDouble();
+ info.txRetriesRate = in.readDouble();
+ info.txBadRate = in.readDouble();
+ info.rxSuccessRate = in.readDouble();
+ info.badRssiCount = in.readInt();
+ info.lowRssiCount = in.readInt();
info.mSupplicantState = SupplicantState.CREATOR.createFromParcel(in);
return info;
}
diff --git a/wifi/java/android/net/wifi/WifiLinkLayerStats.java b/wifi/java/android/net/wifi/WifiLinkLayerStats.java
index 922eddd..ae2fa98 100644
--- a/wifi/java/android/net/wifi/WifiLinkLayerStats.java
+++ b/wifi/java/android/net/wifi/WifiLinkLayerStats.java
@@ -111,6 +111,8 @@ public class WifiLinkLayerStats implements Parcelable {
/** {@hide} */
public String toString() {
StringBuilder sbuf = new StringBuilder();
+ sbuf.append(" WifiLinkLayerStats: ").append('\n');
+
if (this.SSID != null) {
sbuf.append(" SSID: ").append(this.SSID).append('\n');
}
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index bf46745..141a69e 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -1413,14 +1413,12 @@ public class WifiManager {
/**
* Passed with {@link ActionListener#onFailure}.
* Indicates that the operation failed due to an internal error.
- * @hide
*/
public static final int ERROR = 0;
/**
* Passed with {@link ActionListener#onFailure}.
* Indicates that the operation is already in progress
- * @hide
*/
public static final int IN_PROGRESS = 1;
@@ -1428,30 +1426,28 @@ public class WifiManager {
* Passed with {@link ActionListener#onFailure}.
* Indicates that the operation failed because the framework is busy and
* unable to service the request
- * @hide
*/
public static final int BUSY = 2;
/* WPS specific errors */
- /** WPS overlap detected {@hide} */
+ /** WPS overlap detected */
public static final int WPS_OVERLAP_ERROR = 3;
- /** WEP on WPS is prohibited {@hide} */
+ /** WEP on WPS is prohibited */
public static final int WPS_WEP_PROHIBITED = 4;
- /** TKIP only prohibited {@hide} */
+ /** TKIP only prohibited */
public static final int WPS_TKIP_ONLY_PROHIBITED = 5;
- /** Authentication failure on WPS {@hide} */
+ /** Authentication failure on WPS */
public static final int WPS_AUTH_FAILURE = 6;
- /** WPS timed out {@hide} */
+ /** WPS timed out */
public static final int WPS_TIMED_OUT = 7;
/**
* Passed with {@link ActionListener#onFailure}.
* Indicates that the operation failed due to invalid inputs
- * @hide
*/
public static final int INVALID_ARGS = 8;
- /** Interface for callback invocation on an application action {@hide} */
+ /** Interface for callback invocation on an application action */
public interface ActionListener {
/** The operation succeeded */
public void onSuccess();
@@ -1463,7 +1459,7 @@ public class WifiManager {
public void onFailure(int reason);
}
- /** Interface for callback invocation on a start WPS action {@hide} */
+ /** Interface for callback invocation on a start WPS action */
public interface WpsListener {
/** WPS start succeeded */
public void onStartSuccess(String pin);
@@ -1745,7 +1741,6 @@ public class WifiManager {
* @param listener for callbacks on success or failure. Can be null.
* @throws IllegalStateException if the WifiManager instance needs to be
* initialized again
- * @hide
*/
public void startWps(WpsInfo config, WpsListener listener) {
if (config == null) throw new IllegalArgumentException("config cannot be null");
@@ -1759,7 +1754,6 @@ public class WifiManager {
* @param listener for callbacks on success or failure. Can be null.
* @throws IllegalStateException if the WifiManager instance needs to be
* initialized again
- * @hide
*/
public void cancelWps(ActionListener listener) {
validateChannel();
diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java
index 3b65ca8..21b700d 100644
--- a/wifi/java/android/net/wifi/WifiScanner.java
+++ b/wifi/java/android/net/wifi/WifiScanner.java
@@ -153,12 +153,17 @@ public class WifiScanner {
dest.writeInt(band);
dest.writeInt(periodInMs);
dest.writeInt(reportEvents);
- dest.writeInt(channels.length);
- for (int i = 0; i < channels.length; i++) {
- dest.writeInt(channels[i].frequency);
- dest.writeInt(channels[i].dwellTimeMS);
- dest.writeInt(channels[i].passive ? 1 : 0);
+ if (channels != null) {
+ dest.writeInt(channels.length);
+
+ for (int i = 0; i < channels.length; i++) {
+ dest.writeInt(channels[i].frequency);
+ dest.writeInt(channels[i].dwellTimeMS);
+ dest.writeInt(channels[i].passive ? 1 : 0);
+ }
+ } else {
+ dest.writeInt(0);
}
}
@@ -211,10 +216,14 @@ public class WifiScanner {
/** Implement the Parcelable interface {@hide} */
public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mResults.length);
- for (int i = 0; i < mResults.length; i++) {
- ScanResult result = mResults[i];
- result.writeToParcel(dest, flags);
+ if (mResults != null) {
+ dest.writeInt(mResults.length);
+ for (int i = 0; i < mResults.length; i++) {
+ ScanResult result = mResults[i];
+ result.writeToParcel(dest, flags);
+ }
+ } else {
+ dest.writeInt(0);
}
}
@@ -324,13 +333,17 @@ public class WifiScanner {
dest.writeInt(unchangedSampleSize);
dest.writeInt(minApsBreachingThreshold);
dest.writeInt(periodInMs);
- dest.writeInt(hotspotInfos.length);
- for (int i = 0; i < hotspotInfos.length; i++) {
- HotspotInfo info = hotspotInfos[i];
- dest.writeString(info.bssid);
- dest.writeInt(info.low);
- dest.writeInt(info.high);
- dest.writeInt(info.frequencyHint);
+ if (hotspotInfos != null) {
+ dest.writeInt(hotspotInfos.length);
+ for (int i = 0; i < hotspotInfos.length; i++) {
+ HotspotInfo info = hotspotInfos[i];
+ dest.writeString(info.bssid);
+ dest.writeInt(info.low);
+ dest.writeInt(info.high);
+ dest.writeInt(info.frequencyHint);
+ }
+ } else {
+ dest.writeInt(0);
}
}
@@ -456,13 +469,18 @@ public class WifiScanner {
/** Implement the Parcelable interface {@hide} */
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(apLostThreshold);
- dest.writeInt(hotspotInfos.length);
- for (int i = 0; i < hotspotInfos.length; i++) {
- HotspotInfo info = hotspotInfos[i];
- dest.writeString(info.bssid);
- dest.writeInt(info.low);
- dest.writeInt(info.high);
- dest.writeInt(info.frequencyHint);
+
+ if (hotspotInfos != null) {
+ dest.writeInt(hotspotInfos.length);
+ for (int i = 0; i < hotspotInfos.length; i++) {
+ HotspotInfo info = hotspotInfos[i];
+ dest.writeString(info.bssid);
+ dest.writeInt(info.low);
+ dest.writeInt(info.high);
+ dest.writeInt(info.frequencyHint);
+ }
+ } else {
+ dest.writeInt(0);
}
}
@@ -680,6 +698,42 @@ public class WifiScanner {
}
}
+ /** @hide */
+ public static class OperationResult implements Parcelable {
+ public int reason;
+ public String description;
+
+ public OperationResult(int reason, String description) {
+ this.reason = reason;
+ this.description = description;
+ }
+
+ /** Implement the Parcelable interface {@hide} */
+ public int describeContents() {
+ return 0;
+ }
+
+ /** Implement the Parcelable interface {@hide} */
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(reason);
+ dest.writeString(description);
+ }
+
+ /** Implement the Parcelable interface {@hide} */
+ public static final Creator<OperationResult> CREATOR =
+ new Creator<OperationResult>() {
+ public OperationResult createFromParcel(Parcel in) {
+ int reason = in.readInt();
+ String description = in.readString();
+ return new OperationResult(reason, description);
+ }
+
+ public OperationResult[] newArray(int size) {
+ return new OperationResult[size];
+ }
+ };
+ }
+
private static class ServiceHandler extends Handler {
ServiceHandler(Looper looper) {
super(looper);
@@ -717,9 +771,11 @@ public class WifiScanner {
case CMD_OP_SUCCEEDED :
((ActionListener) listener).onSuccess();
break;
- case CMD_OP_FAILED :
- ((ActionListener) listener).onFailure(msg.arg1, (String)msg.obj);
- removeListener(msg.arg2);
+ case CMD_OP_FAILED : {
+ OperationResult result = (OperationResult)msg.obj;
+ ((ActionListener) listener).onFailure(result.reason, result.description);
+ removeListener(msg.arg2);
+ }
break;
case CMD_SCAN_RESULT :
((ScanListener) listener).onResults(
diff --git a/wifi/java/android/net/wifi/WpsInfo.java b/wifi/java/android/net/wifi/WpsInfo.java
index 2ad4ad0..ae2e771 100644
--- a/wifi/java/android/net/wifi/WpsInfo.java
+++ b/wifi/java/android/net/wifi/WpsInfo.java
@@ -40,7 +40,7 @@ public class WpsInfo implements Parcelable {
/** Wi-Fi Protected Setup. www.wi-fi.org/wifi-protected-setup has details */
public int setup;
- /** @hide */
+ /** Passed with pin method KEYPAD */
public String BSSID;
/** Passed with pin method configuration */
diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointCredential.java
index 0769a64..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,77 +35,90 @@ import java.util.Map;
public class WifiPasspointCredential implements Parcelable {
private final static String TAG = "PasspointCredential";
- 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 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;
+ /** CrednetialPriority node **/
+ private int mCrednetialPriority;
- private String mAAACertURL;
- private String mAAASha256Fingerprint;
+ /** AAAServerTrustRoot nodes **/
+ private String mAaaCertUrl;
+ private String mAaaSha256Fingerprint;
- private String mSubscriptionUpdateRestriction;
- private String mSubscriptionUpdateURI;
-
- private boolean mCheckAaaServerCertStatus;
+ /** Others **/
+ private boolean mIsMachineRemediation;
+ private boolean mUserPreferred = false;
+ private String mWifiTreePath;
+ private WifiEnterpriseConfig mEnterpriseConfig;
/** @hide */
- public WifiPasspointCredential() {
-
- }
+ public WifiPasspointCredential() {}
/**
* Constructor
* @param realm Realm of the passpoint credential
- * @param config Credential information, must be either EAP-TLS or EAP-TTLS.
+ * @param fqdn Fully qualified domain name (FQDN) of the credential
+ * @param config Enterprise config, must be either EAP-TLS or EAP-TTLS
* @see WifiEnterpriseConfig
*/
- public WifiPasspointCredential(String realm, WifiEnterpriseConfig config) {
+ public WifiPasspointCredential(String realm, String fqdn, WifiEnterpriseConfig config) {
mRealm = realm;
switch (config.getEapMethod()) {
case WifiEnterpriseConfig.Eap.TLS:
- // TODO;
- break;
case WifiEnterpriseConfig.Eap.TTLS:
- // TODO;
+ mEnterpriseConfig = new WifiEnterpriseConfig(config);
break;
default:
// ignore
@@ -113,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,
@@ -204,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;
@@ -239,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();
@@ -265,6 +199,7 @@ public class WifiPasspointCredential implements Parcelable {
mHomeOIList = credinfo.homeSP.homeOIList.values();
mFriendlyName = credinfo.homeSP.FriendlyName;
+ mCheckAaaServerCertStatus = credinfo.credential.CheckAAAServerCertStatus;
}
/** @hide */
@@ -283,8 +218,8 @@ public class WifiPasspointCredential implements Parcelable {
}
/** @hide */
- public String getWifiSPFQDN() {
- return mWifiSPFQDN;
+ public String getWifiSpFqdn() {
+ return mWifiSpFqdn;
}
/** @hide */
@@ -293,16 +228,26 @@ public class WifiPasspointCredential implements Parcelable {
}
/** @hide */
- public String getEapMethodStr() {
+ public String getType() {
return mType;
}
/**
- * Get EAP method of this Passpoint credential.
- * @return EAP method, refer to {@link WifiEnterpriseConfig.Eap} for possible return values
+ * Get enterprise config of this Passpoint credential.
+ * @return Enterprise config
+ * @see WifiEnterpriseConfig
*/
- public int getEapMethod() {
- return 0;
+ public WifiEnterpriseConfig getEnterpriseConfig() {
+ return new WifiEnterpriseConfig(mEnterpriseConfig);
+ }
+
+ /**
+ * Set enterprise config of this Passpoint credential.
+ * @param config Enterprise config, must be either EAP-TLS or EAP-TTLS
+ * @see WifiEnterpriseConfig
+ */
+ public void setEnterpriseConfig(WifiEnterpriseConfig config) {
+ // TODO
}
/** @hide */
@@ -315,10 +260,7 @@ public class WifiPasspointCredential implements Parcelable {
return mCertSha256Fingerprint;
}
- /**
- * Get the user name of this Passpoint credential, for EAP-TTLS only.
- * @return user name
- */
+ /** @hide */
public String getUserName() {
return mUsername;
}
@@ -329,10 +271,7 @@ public class WifiPasspointCredential implements Parcelable {
return mPasswd;
}
- /**
- * Get the IMSI of this Passpoint credential, for EAP-SIM / EAP-AKA only.
- * @return IMSI
- */
+ /** @hide */
public String getImsi() {
return mImsi;
}
@@ -348,62 +287,75 @@ public class WifiPasspointCredential implements Parcelable {
}
/** @hide */
- public String getCaRootCert() {
+ public String getCaRootCertPath() {
return mCaRootCert;
}
- /**
- * Get the client certificate path of this Passpoint credential, for EAP-TLS only.
- * @return client certificate path
- */
+ /** @hide */
public String getClientCertPath() {
return mClientCert;
}
/**
- * Get the realm of this Passpoint credential, for all EAP methods.
+ * Get the realm of this Passpoint credential.
* @return Realm
*/
public String getRealm() {
return mRealm;
}
+ /**
+ * Set the ream of this Passpoint credential.
+ * @param realm Realm
+ */
+ public void setRealm(String realm) {
+ mRealm = realm;
+ }
+
/** @hide */
public int getPriority() {
if (mUserPreferred) {
return 0;
}
- return mPriority;
+ return mCrednetialPriority;
}
/**
- * Get the fully qualified domain name (FQDN) of this Passpoint credential,
- * for all EAP methods.
+ * Get the fully qualified domain name (FQDN) of this Passpoint credential.
* @return FQDN
*/
- public String getFqdn() {
+ public String getHomeSpFqdn() {
return mHomeSpFqdn;
}
+ /**
+ * Set the fully qualified domain name (FQDN) of this Passpoint credential.
+ * @param fqdn FQDN
+ */
+ public void setFqdn(String fqdn) {
+ mHomeSpFqdn = fqdn;
+ }
+
+
/** @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 */
@@ -412,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 */
@@ -447,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;
}
@@ -477,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 */
@@ -560,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();
}
@@ -636,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} */
@@ -656,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;
}
@@ -681,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..8ab5c1e 100644
--- a/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java
+++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointInfo.java
@@ -88,68 +88,160 @@ 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;
- /** default constructor @hide */
- public WifiPasspointInfo() {
- // osuProviderList = new ArrayList<OsuProvider>();
+ public int getIpv6Availability() {
+ return availability & 0x3;
+ }
+
+ public int getIpv4Availability() {
+ return (availability & 0xFF) >> 2;
+ }
+
+ @Override
+ public String toString() {
+ return getIpv6Availability() + "," + getIpv4Availability();
+ }
}
- /** 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 NaiRealm {
+ public static final int ENCODING_RFC4282 = 0;
+ public static final int ENCODING_UTF8 = 1;
+
+ public int encoding;
+ public String realm;
+
+ @Override
+ public String toString() {
+ return encoding + "," + realm;
}
}
+ public static class CellularNetwork {
+ public String mcc;
+ public String mnc;
+
+ @Override
+ public String toString() {
+ return mcc + "," + mnc;
+ }
+ }
+
+ /** 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 List<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 +285,154 @@ 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);
- if (cellularNetwork != null)
- sb.append(" cellularNetwork: ").append(cellularNetwork);
- if (domainName != null)
- sb.append(" domainName: ").append(domainName);
+ 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: ");
+ for (CellularNetwork plmn : cellularNetwork)
+ sb.append("(").append(plmn.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.size());
+ for (CellularNetwork plmn : cellularNetwork) {
+ out.writeString(plmn.mcc);
+ out.writeString(plmn.mnc);
+ }
+ }
+
+
+ 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 +454,90 @@ 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 ArrayList<CellularNetwork>();
+ for (int i = 0; i < n; i++) {
+ CellularNetwork plmn = new CellularNetwork();
+ plmn.mcc = in.readString();
+ plmn.mnc = in.readString();
+ p.cellularNetwork.add(plmn);
+ }
+ }
+
+ 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 +546,7 @@ public class WifiPasspointInfo implements Parcelable {
p.osuProviderList.add(osu);
}
}
+
return p;
}
diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java
index e140c13..55acbad 100644
--- a/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java
+++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java
@@ -444,10 +444,9 @@ public class WifiPasspointManager {
return null;
}
- /* TODO: add credential APIs */
-
/**
- * Give a list of all saved Passpoint credentials.
+ * Get a list of saved Passpoint credentials. Only those credentials owned
+ * by the caller will be returned.
*
* @return The list of credentials
*/
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;