Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56878760 authored by Irfan Sheriff's avatar Irfan Sheriff
Browse files

Fix lease duration handling

Convert lease time in seconds to long before alarm
set up and add sanity check

Change-Id: I99524c97d9a643ffa8234d016d0e819a284977a1
parent 5994bff9
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
    private static final int DHCP_RENEW = 0;
    private static final String ACTION_DHCP_RENEW = "android.net.wifi.DHCP_RENEW";

    //Used for sanity check on setting up renewal
    private static final int MIN_RENEWAL_TIME_SECS = 5 * 60;  // 5 minutes

    private enum DhcpAction {
        START,
        RENEW
@@ -331,12 +334,20 @@ public class DhcpStateMachine extends HierarchicalStateMachine {

        if (success) {
            Log.d(TAG, "DHCP succeeded on " + mInterfaceName);
           long leaseDuration = dhcpInfoInternal.leaseDuration; //int to long conversion

           //Sanity check for renewal
           //TODO: would be good to notify the user that his network configuration is
           //bad and that the device cannot renew below MIN_RENEWAL_TIME_SECS
           if (leaseDuration < MIN_RENEWAL_TIME_SECS) {
               leaseDuration = MIN_RENEWAL_TIME_SECS;
           }
           //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() +
                    dhcpInfoInternal.leaseDuration * 480, //in milliseconds
                   leaseDuration * 480, //in milliseconds
                   mDhcpRenewalIntent);

            mController.obtainMessage(CMD_POST_DHCP_ACTION, DHCP_SUCCESS, 0, dhcpInfoInternal)