summaryrefslogtreecommitdiffstats
path: root/wifi
diff options
context:
space:
mode:
authorIsaac Levy <ilevy@google.com>2011-08-25 15:19:07 -0700
committerIsaac Levy <ilevy@google.com>2011-08-25 15:19:07 -0700
commit8fd4a3d0f72b3175936f1dd9ca174a91d196971f (patch)
tree270657a2c23ece37bb9a78f346c6cd9c4a8e6c5d /wifi
parentc39e8e89eb370ed66f552da3be258e57f1aabeb9 (diff)
downloadframeworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.zip
frameworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.tar.gz
frameworks_base-8fd4a3d0f72b3175936f1dd9ca174a91d196971f.tar.bz2
Prevent dup network adding - b/5200491
Change-Id: I8260cf73c4261e8efb696bb8557a39e02754190e
Diffstat (limited to 'wifi')
-rw-r--r--wifi/java/android/net/wifi/WifiConfigStore.java47
1 files changed, 33 insertions, 14 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index 5b4bce2..45c9869 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -281,7 +281,11 @@ class WifiConfigStore {
if (WifiNative.removeNetworkCommand(netId)) {
WifiNative.saveConfigCommand();
synchronized (sConfiguredNetworks) {
- sConfiguredNetworks.remove(netId);
+ WifiConfiguration config = sConfiguredNetworks.get(netId);
+ if (config != null) {
+ sConfiguredNetworks.remove(netId);
+ sNetworkIds.remove(configKey(config));
+ }
}
writeIpAndProxyConfigurations();
sendConfiguredNetworksChangedBroadcast();
@@ -315,7 +319,13 @@ class WifiConfigStore {
static boolean removeNetwork(int netId) {
boolean ret = WifiNative.removeNetworkCommand(netId);
synchronized (sConfiguredNetworks) {
- if (ret) sConfiguredNetworks.remove(netId);
+ if (ret) {
+ WifiConfiguration config = sConfiguredNetworks.get(netId);
+ if (config != null) {
+ sConfiguredNetworks.remove(netId);
+ sNetworkIds.remove(configKey(config));
+ }
+ }
}
sendConfiguredNetworksChangedBroadcast();
return ret;
@@ -854,18 +864,24 @@ class WifiConfigStore {
* refer to an existing configuration.
*/
int netId = config.networkId;
- boolean updateFailed = true;
+ boolean newNetwork = false;
// networkId of INVALID_NETWORK_ID means we want to create a new network
- boolean newNetwork = (netId == INVALID_NETWORK_ID);
-
- if (newNetwork) {
- netId = WifiNative.addNetworkCommand();
- if (netId < 0) {
- Log.e(TAG, "Failed to add a network!");
- return new NetworkUpdateResult(INVALID_NETWORK_ID);
- }
+ if (netId == INVALID_NETWORK_ID) {
+ Integer savedNetId = sNetworkIds.get(configKey(config));
+ if (savedNetId != null) {
+ netId = savedNetId;
+ } else {
+ newNetwork = true;
+ netId = WifiNative.addNetworkCommand();
+ if (netId < 0) {
+ Log.e(TAG, "Failed to add a network!");
+ return new NetworkUpdateResult(INVALID_NETWORK_ID);
+ }
+ }
}
+ boolean updateFailed = true;
+
setVariables: {
if (config.SSID != null &&
@@ -1053,12 +1069,15 @@ class WifiConfigStore {
if (sConfig == null) {
sConfig = new WifiConfiguration();
sConfig.networkId = netId;
- synchronized (sConfiguredNetworks) {
- sConfiguredNetworks.put(netId, sConfig);
- }
}
+
readNetworkVariables(sConfig);
+ synchronized (sConfiguredNetworks) {
+ sConfiguredNetworks.put(netId, sConfig);
+ sNetworkIds.put(configKey(sConfig), netId);
+ }
+
NetworkUpdateResult result = writeIpAndProxyConfigurationsOnChange(sConfig, config);
result.setNetworkId(netId);
return result;