diff options
author | Irfan Sheriff <isheriff@google.com> | 2011-06-15 09:28:23 -0700 |
---|---|---|
committer | Irfan Sheriff <isheriff@google.com> | 2011-06-15 13:51:55 -0700 |
commit | df1734e3f57646df1fa96275cbb65bb91ac9d2ac (patch) | |
tree | b2354b78a542b745eff6c27ed91fa5fec7b5fc03 | |
parent | afffa8fa9f82a7343e1158bf921931fd3e3df615 (diff) | |
download | frameworks_base-df1734e3f57646df1fa96275cbb65bb91ac9d2ac.zip frameworks_base-df1734e3f57646df1fa96275cbb65bb91ac9d2ac.tar.gz frameworks_base-df1734e3f57646df1fa96275cbb65bb91ac9d2ac.tar.bz2 |
Fix lease duration handling
We need to convert lease duration from int to long before
converting into milliseconds
Also add basic sanity check
Bug: 4561231
Change-Id: I9bcafaa798a04c8de3f2c1897dc5b3c4ae245672
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateTracker.java | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java index f313259..e645019 100644 --- a/wifi/java/android/net/wifi/WifiStateTracker.java +++ b/wifi/java/android/net/wifi/WifiStateTracker.java @@ -166,6 +166,9 @@ public class WifiStateTracker extends NetworkStateTracker { */ private static final int DEFAULT_MAX_DHCP_RETRIES = 9; + //Minimum dhcp lease duration for renewal + private static final int MIN_RENEWAL_TIME_SECS = 5 * 60; //5 minutes + private static final int DRIVER_POWER_MODE_AUTO = 0; private static final int DRIVER_POWER_MODE_ACTIVE = 1; @@ -2506,14 +2509,8 @@ public class WifiStateTracker extends NetworkStateTracker { if (NetworkUtils.runDhcp(mInterfaceName, mDhcpInfo)) { event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; Log.d(TAG, "DHCP succeeded with lease: " + mDhcpInfo.leaseDuration); - //Do it a bit earlier than half the lease duration time - //to beat the native DHCP client and avoid extra packets - //48% for one hour lease time = 29 minutes - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + - mDhcpInfo.leaseDuration * 480, //in milliseconds - mDhcpRenewalIntent); - } else { + setDhcpRenewalAlarm(mDhcpInfo.leaseDuration); + } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.e(TAG, "DHCP request failed: " + NetworkUtils.getDhcpError()); } @@ -2550,10 +2547,7 @@ public class WifiStateTracker extends NetworkStateTracker { msg.sendToTarget(); } - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + - mDhcpInfo.leaseDuration * 480, - mDhcpRenewalIntent); + setDhcpRenewalAlarm(mDhcpInfo.leaseDuration); } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.d(TAG, "DHCP renewal failed: " + NetworkUtils.getDhcpError()); @@ -2601,6 +2595,19 @@ public class WifiStateTracker extends NetworkStateTracker { return state == BluetoothHeadset.STATE_DISCONNECTED; } + private void setDhcpRenewalAlarm(long leaseDuration) { + //Do it a bit earlier than half the lease duration time + //to beat the native DHCP client and avoid extra packets + //48% for one hour lease time = 29 minutes + if (leaseDuration < MIN_RENEWAL_TIME_SECS) { + leaseDuration = MIN_RENEWAL_TIME_SECS; + } + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + + leaseDuration * 480, //in milliseconds + mDhcpRenewalIntent); + } + } private void checkUseStaticIp() { |