diff options
author | Irfan Sheriff <isheriff@google.com> | 2013-03-28 08:54:09 -0700 |
---|---|---|
committer | Irfan Sheriff <isheriff@google.com> | 2013-04-11 15:12:20 -0700 |
commit | 51e4ece385c6c34d97d5fa2dcc8e3b2c0bae7c22 (patch) | |
tree | facd9c425481431f46658551006e140a4dde197c /wifi | |
parent | 2e68794a3fe08934b006677ac029fec60f5087cf (diff) | |
download | frameworks_base-51e4ece385c6c34d97d5fa2dcc8e3b2c0bae7c22.zip frameworks_base-51e4ece385c6c34d97d5fa2dcc8e3b2c0bae7c22.tar.gz frameworks_base-51e4ece385c6c34d97d5fa2dcc8e3b2c0bae7c22.tar.bz2 |
Fix proxy and IP settings
- Network disconnect was clobbering IP and proxy settings.
- Track settings correctly in WifiConfigStore
Bug: 7299216
Change-Id: I30e5b68e59e30f7b99a71e8d7cf18750c784cec7
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/WifiConfigStore.java | 15 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateMachine.java | 41 |
2 files changed, 34 insertions, 22 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index 7b1a71f..d3d5b1b 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -634,6 +634,8 @@ class WifiConfigStore { if (config.priority > mLastPriority) { mLastPriority = config.priority; } + config.ipAssignment = IpAssignment.DHCP; + config.proxySettings = ProxySettings.NONE; mConfiguredNetworks.put(config.networkId, config); mNetworkIds.put(configKey(config), config.networkId); } @@ -831,8 +833,9 @@ class WifiConfigStore { while (true) { int id = -1; - IpAssignment ipAssignment = IpAssignment.UNASSIGNED; - ProxySettings proxySettings = ProxySettings.UNASSIGNED; + // Default is DHCP with no proxy + IpAssignment ipAssignment = IpAssignment.DHCP; + ProxySettings proxySettings = ProxySettings.NONE; LinkProperties linkProperties = new LinkProperties(); String proxyHost = null; int proxyPort = -1; @@ -902,7 +905,8 @@ class WifiConfigStore { config.ipAssignment = ipAssignment; break; case UNASSIGNED: - //Ignore + loge("BUG: Found UNASSIGNED IP on file, use DHCP"); + config.ipAssignment = IpAssignment.DHCP; break; default: loge("Ignore invalid ip assignment while reading"); @@ -920,7 +924,8 @@ class WifiConfigStore { config.proxySettings = proxySettings; break; case UNASSIGNED: - //Ignore + loge("BUG: Found UNASSIGNED proxy on file, use NONE"); + config.proxySettings = ProxySettings.NONE; break; default: loge("Ignore invalid proxy settings while reading"); @@ -1176,6 +1181,8 @@ class WifiConfigStore { WifiConfiguration currentConfig = mConfiguredNetworks.get(netId); if (currentConfig == null) { currentConfig = new WifiConfiguration(); + currentConfig.ipAssignment = IpAssignment.DHCP; + currentConfig.proxySettings = ProxySettings.NONE; currentConfig.networkId = netId; } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index c0a3bc1..c09e3aa 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1648,15 +1648,7 @@ public class WifiStateMachine extends StateMachine { private void handleNetworkDisconnect() { if (DBG) log("Stopping DHCP and clearing IP"); - /* - * stop DHCP - */ - if (mDhcpStateMachine != null) { - /* In case we were in middle of DHCP operation - restore back powermode */ - handlePostDhcpSetup(); - mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP); - } + stopDhcp(); try { mNwService.clearInterfaceAddresses(mInterfaceName); @@ -1734,6 +1726,24 @@ public class WifiStateMachine extends StateMachine { } + void startDhcp() { + if (mDhcpStateMachine == null) { + mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine( + mContext, WifiStateMachine.this, mInterfaceName); + + } + mDhcpStateMachine.registerForPreDhcpNotification(); + mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP); + } + + void stopDhcp() { + if (mDhcpStateMachine != null) { + /* In case we were in middle of DHCP operation restore back powermode */ + handlePostDhcpSetup(); + mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP); + } + } + void handlePostDhcpSetup() { /* Restore power save and suspend optimizations */ setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, true); @@ -1751,7 +1761,7 @@ public class WifiStateMachine extends StateMachine { mDhcpResults = dhcpResults; } LinkProperties linkProperties = dhcpResults.linkProperties; - mWifiConfigStore.setLinkProperties(mLastNetworkId, linkProperties); + mWifiConfigStore.setLinkProperties(mLastNetworkId, new LinkProperties(linkProperties)); InetAddress addr = null; Iterator<InetAddress> addrs = linkProperties.getAddresses().iterator(); if (addrs.hasNext()) { @@ -2996,15 +3006,10 @@ public class WifiStateMachine extends StateMachine { @Override public void enter() { if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) { - //start DHCP - if (mDhcpStateMachine == null) { - mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine( - mContext, WifiStateMachine.this, mInterfaceName); - - } - mDhcpStateMachine.registerForPreDhcpNotification(); - mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP); + startDhcp(); } else { + // stop any running dhcp before assigning static IP + stopDhcp(); DhcpResults dhcpResults = new DhcpResults( mWifiConfigStore.getLinkProperties(mLastNetworkId)); dhcpResults.linkProperties.setInterfaceName(mInterfaceName); |