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

Commit df9aab85 authored by Xiao Ma's avatar Xiao Ma Committed by android-build-merger
Browse files

Merge "Separate the timeout behavior from PacketRetransmittingState class."

am: 940b8967

Change-Id: I9ca0300e7af321402e960b81482d7e7f5e7427ab
parents 3496918e 940b8967
Loading
Loading
Loading
Loading
+44 −19
Original line number Diff line number Diff line
@@ -829,6 +829,42 @@ public class DhcpClient extends StateMachine {
                (leaseTimeMillis > 0) ? SystemClock.elapsedRealtime() + leaseTimeMillis : 0;
    }

    abstract class TimeoutState extends LoggingState {
        protected int mTimeout = 0;

        @Override
        public void enter() {
            super.enter();
            maybeInitTimeout();
        }

        @Override
        public boolean processMessage(Message message) {
            super.processMessage(message);
            switch (message.what) {
                case CMD_TIMEOUT:
                    timeout();
                    return HANDLED;
                default:
                    return NOT_HANDLED;
            }
        }

        @Override
        public void exit() {
            super.exit();
            mTimeoutAlarm.cancel();
        }

        protected abstract void timeout();
        private void maybeInitTimeout() {
            if (mTimeout > 0) {
                long alarmTime = SystemClock.elapsedRealtime() + mTimeout;
                mTimeoutAlarm.schedule(alarmTime);
            }
        }
    }

    /**
     * Retransmits packets using jittered exponential backoff with an optional timeout. Packet
     * transmission is triggered by CMD_KICK, which is sent by an AlarmManager alarm. If a subclass
@@ -840,22 +876,22 @@ public class DhcpClient extends StateMachine {
     * packet needs to be transmitted, and receivePacket, which is triggered by CMD_RECEIVED_PACKET
     * sent by the receive thread. They may also set mTimeout and implement timeout.
     */
    abstract class PacketRetransmittingState extends LoggingState {

    abstract class PacketRetransmittingState extends TimeoutState {
        private int mTimer;
        protected int mTimeout = 0;

        @Override
        public void enter() {
            super.enter();
            initTimer();
            maybeInitTimeout();
            sendMessage(CMD_KICK);
        }

        @Override
        public boolean processMessage(Message message) {
            super.processMessage(message);
            if (super.processMessage(message) == HANDLED) {
                return HANDLED;
            }

            switch (message.what) {
                case CMD_KICK:
                    sendPacket();
@@ -864,9 +900,6 @@ public class DhcpClient extends StateMachine {
                case CMD_RECEIVED_PACKET:
                    receivePacket((DhcpPacket) message.obj);
                    return HANDLED;
                case CMD_TIMEOUT:
                    timeout();
                    return HANDLED;
                default:
                    return NOT_HANDLED;
            }
@@ -876,11 +909,10 @@ public class DhcpClient extends StateMachine {
        public void exit() {
            super.exit();
            mKickAlarm.cancel();
            mTimeoutAlarm.cancel();
        }

        abstract protected boolean sendPacket();
        abstract protected void receivePacket(DhcpPacket packet);
        protected abstract boolean sendPacket();
        protected abstract void receivePacket(DhcpPacket packet);
        protected void timeout() {}

        protected void initTimer() {
@@ -903,13 +935,6 @@ public class DhcpClient extends StateMachine {
                mTimer = MAX_TIMEOUT_MS;
            }
        }

        protected void maybeInitTimeout() {
            if (mTimeout > 0) {
                long alarmTime = SystemClock.elapsedRealtime() + mTimeout;
                mTimeoutAlarm.schedule(alarmTime);
            }
        }
    }

    class ObtainingConfigurationState extends LoggingState {
@@ -1167,7 +1192,7 @@ public class DhcpClient extends StateMachine {
            startNewTransaction();
        }

        abstract protected Inet4Address packetDestination();
        protected abstract Inet4Address packetDestination();

        protected boolean sendPacket() {
            return sendRequestPacket(