summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiConfigStore.java
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2014-12-01 18:19:33 -0800
committerVinit Deshpande <vinitd@google.com>2014-12-04 06:19:17 +0000
commite3939cb40d9ba3842be105a6e85172dc06e14758 (patch)
tree9ed5daa76808662a86673c814dab836a93dd1ae9 /service/java/com/android/server/wifi/WifiConfigStore.java
parent94d2ff04bd5a0aaf2a761f15c958034ad54ff5a9 (diff)
downloadandroid_frameworks_opt_net_wifi-e3939cb40d9ba3842be105a6e85172dc06e14758.tar.gz
android_frameworks_opt_net_wifi-e3939cb40d9ba3842be105a6e85172dc06e14758.tar.bz2
android_frameworks_opt_net_wifi-e3939cb40d9ba3842be105a6e85172dc06e14758.zip
Read all networks despite message limit of 4096 bytes
This change uses list_network last_id=x form of list_networks to retrieve all networks saved in the system. Bug: 18566264 Change-Id: Ie439acd98d39ca32417418944035dcce3068d44b
Diffstat (limited to 'service/java/com/android/server/wifi/WifiConfigStore.java')
-rw-r--r--service/java/com/android/server/wifi/WifiConfigStore.java114
1 files changed, 61 insertions, 53 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigStore.java b/service/java/com/android/server/wifi/WifiConfigStore.java
index f10e78ab0..c7b8ab301 100644
--- a/service/java/com/android/server/wifi/WifiConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiConfigStore.java
@@ -1320,76 +1320,84 @@ public class WifiConfigStore extends IpConfigStore {
void loadConfiguredNetworks() {
- String listStr = mWifiNative.listNetworks();
mLastPriority = 0;
mConfiguredNetworks.clear();
mNetworkIds.clear();
- if (listStr == null)
- return;
+ int last_id = -1;
+ boolean done = false;
+ while (!done) {
- String[] lines = listStr.split("\n");
+ String listStr = mWifiNative.listNetworks(last_id);
+ if (listStr == null)
+ return;
- if (showNetworks) {
- localLog("WifiConfigStore: loadConfiguredNetworks: ");
- for (String net : lines) {
- localLog(net);
- }
- }
+ String[] lines = listStr.split("\n");
- // Skip the first line, which is a header
- for (int i = 1; i < lines.length; i++) {
- String[] result = lines[i].split("\t");
- // network-id | ssid | bssid | flags
- WifiConfiguration config = new WifiConfiguration();
- try {
- config.networkId = Integer.parseInt(result[0]);
- } catch(NumberFormatException e) {
- loge("Failed to read network-id '" + result[0] + "'");
- continue;
+ if (showNetworks) {
+ localLog("WifiConfigStore: loadConfiguredNetworks: ");
+ for (String net : lines) {
+ localLog(net);
+ }
}
- if (result.length > 3) {
- if (result[3].indexOf("[CURRENT]") != -1)
- config.status = WifiConfiguration.Status.CURRENT;
- else if (result[3].indexOf("[DISABLED]") != -1)
- config.status = WifiConfiguration.Status.DISABLED;
- else
+
+ // Skip the first line, which is a header
+ for (int i = 1; i < lines.length; i++) {
+ String[] result = lines[i].split("\t");
+ // network-id | ssid | bssid | flags
+ WifiConfiguration config = new WifiConfiguration();
+ try {
+ config.networkId = Integer.parseInt(result[0]);
+ last_id = config.networkId;
+ } catch(NumberFormatException e) {
+ loge("Failed to read network-id '" + result[0] + "'");
+ continue;
+ }
+ if (result.length > 3) {
+ if (result[3].indexOf("[CURRENT]") != -1)
+ config.status = WifiConfiguration.Status.CURRENT;
+ else if (result[3].indexOf("[DISABLED]") != -1)
+ config.status = WifiConfiguration.Status.DISABLED;
+ else
+ config.status = WifiConfiguration.Status.ENABLED;
+ } else {
config.status = WifiConfiguration.Status.ENABLED;
- } else {
- config.status = WifiConfiguration.Status.ENABLED;
- }
+ }
- readNetworkVariables(config);
+ readNetworkVariables(config);
- Checksum csum = new CRC32();
- if (config.SSID != null) {
- csum.update(config.SSID.getBytes(), 0, config.SSID.getBytes().length);
- long d = csum.getValue();
- loge(" got CRC SSID " + config.SSID + " -> " + d);
- if (mDeletedSSIDs.contains(d)) {
- loge(" was deleted");
+ Checksum csum = new CRC32();
+ if (config.SSID != null) {
+ csum.update(config.SSID.getBytes(), 0, config.SSID.getBytes().length);
+ long d = csum.getValue();
+ loge(" got CRC SSID " + config.SSID + " -> " + d);
+ if (mDeletedSSIDs.contains(d)) {
+ loge(" was deleted");
+ }
}
- }
- if (config.priority > mLastPriority) {
- mLastPriority = config.priority;
- }
+ if (config.priority > mLastPriority) {
+ mLastPriority = config.priority;
+ }
- config.setIpAssignment(IpAssignment.DHCP);
- config.setProxySettings(ProxySettings.NONE);
+ config.setIpAssignment(IpAssignment.DHCP);
+ config.setProxySettings(ProxySettings.NONE);
- if (mNetworkIds.containsKey(configKey(config))) {
- // That SSID is already known, just ignore this duplicate entry
- if (showNetworks) localLog("discarded duplicate network ", config.networkId);
- } else if(config.isValid()){
- mConfiguredNetworks.put(config.networkId, config);
- mNetworkIds.put(configKey(config), config.networkId);
- if (showNetworks) localLog("loaded configured network", config.networkId);
- } else {
- if (showNetworks) log("Ignoring loaded configured for network " + config.networkId
- + " because config are not valid");
+ if (mNetworkIds.containsKey(configKey(config))) {
+ // That SSID is already known, just ignore this duplicate entry
+ if (showNetworks) localLog("discarded duplicate network ", config.networkId);
+ } else if(config.isValid()){
+ mConfiguredNetworks.put(config.networkId, config);
+ mNetworkIds.put(configKey(config), config.networkId);
+ if (showNetworks) localLog("loaded configured network", config.networkId);
+ } else {
+ if (showNetworks) log("Ignoring loaded configured for network " + config.networkId
+ + " because config are not valid");
+ }
}
+
+ done = (lines.length == 1);
}
readIpAndProxyConfigurations();