Loading src/android/net/dhcp/DhcpClient.java +44 −19 Original line number Original line Diff line number Diff line Loading @@ -829,6 +829,42 @@ public class DhcpClient extends StateMachine { (leaseTimeMillis > 0) ? SystemClock.elapsedRealtime() + leaseTimeMillis : 0; (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 * 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 * transmission is triggered by CMD_KICK, which is sent by an AlarmManager alarm. If a subclass Loading @@ -840,22 +876,22 @@ public class DhcpClient extends StateMachine { * packet needs to be transmitted, and receivePacket, which is triggered by CMD_RECEIVED_PACKET * 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. * 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; private int mTimer; protected int mTimeout = 0; @Override @Override public void enter() { public void enter() { super.enter(); super.enter(); initTimer(); initTimer(); maybeInitTimeout(); sendMessage(CMD_KICK); sendMessage(CMD_KICK); } } @Override @Override public boolean processMessage(Message message) { public boolean processMessage(Message message) { super.processMessage(message); if (super.processMessage(message) == HANDLED) { return HANDLED; } switch (message.what) { switch (message.what) { case CMD_KICK: case CMD_KICK: sendPacket(); sendPacket(); Loading @@ -864,9 +900,6 @@ public class DhcpClient extends StateMachine { case CMD_RECEIVED_PACKET: case CMD_RECEIVED_PACKET: receivePacket((DhcpPacket) message.obj); receivePacket((DhcpPacket) message.obj); return HANDLED; return HANDLED; case CMD_TIMEOUT: timeout(); return HANDLED; default: default: return NOT_HANDLED; return NOT_HANDLED; } } Loading @@ -876,11 +909,10 @@ public class DhcpClient extends StateMachine { public void exit() { public void exit() { super.exit(); super.exit(); mKickAlarm.cancel(); mKickAlarm.cancel(); mTimeoutAlarm.cancel(); } } abstract protected boolean sendPacket(); protected abstract boolean sendPacket(); abstract protected void receivePacket(DhcpPacket packet); protected abstract void receivePacket(DhcpPacket packet); protected void timeout() {} protected void timeout() {} protected void initTimer() { protected void initTimer() { Loading @@ -903,13 +935,6 @@ public class DhcpClient extends StateMachine { mTimer = MAX_TIMEOUT_MS; mTimer = MAX_TIMEOUT_MS; } } } } protected void maybeInitTimeout() { if (mTimeout > 0) { long alarmTime = SystemClock.elapsedRealtime() + mTimeout; mTimeoutAlarm.schedule(alarmTime); } } } } class ObtainingConfigurationState extends LoggingState { class ObtainingConfigurationState extends LoggingState { Loading Loading @@ -1167,7 +1192,7 @@ public class DhcpClient extends StateMachine { startNewTransaction(); startNewTransaction(); } } abstract protected Inet4Address packetDestination(); protected abstract Inet4Address packetDestination(); protected boolean sendPacket() { protected boolean sendPacket() { return sendRequestPacket( return sendRequestPacket( Loading Loading
src/android/net/dhcp/DhcpClient.java +44 −19 Original line number Original line Diff line number Diff line Loading @@ -829,6 +829,42 @@ public class DhcpClient extends StateMachine { (leaseTimeMillis > 0) ? SystemClock.elapsedRealtime() + leaseTimeMillis : 0; (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 * 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 * transmission is triggered by CMD_KICK, which is sent by an AlarmManager alarm. If a subclass Loading @@ -840,22 +876,22 @@ public class DhcpClient extends StateMachine { * packet needs to be transmitted, and receivePacket, which is triggered by CMD_RECEIVED_PACKET * 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. * 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; private int mTimer; protected int mTimeout = 0; @Override @Override public void enter() { public void enter() { super.enter(); super.enter(); initTimer(); initTimer(); maybeInitTimeout(); sendMessage(CMD_KICK); sendMessage(CMD_KICK); } } @Override @Override public boolean processMessage(Message message) { public boolean processMessage(Message message) { super.processMessage(message); if (super.processMessage(message) == HANDLED) { return HANDLED; } switch (message.what) { switch (message.what) { case CMD_KICK: case CMD_KICK: sendPacket(); sendPacket(); Loading @@ -864,9 +900,6 @@ public class DhcpClient extends StateMachine { case CMD_RECEIVED_PACKET: case CMD_RECEIVED_PACKET: receivePacket((DhcpPacket) message.obj); receivePacket((DhcpPacket) message.obj); return HANDLED; return HANDLED; case CMD_TIMEOUT: timeout(); return HANDLED; default: default: return NOT_HANDLED; return NOT_HANDLED; } } Loading @@ -876,11 +909,10 @@ public class DhcpClient extends StateMachine { public void exit() { public void exit() { super.exit(); super.exit(); mKickAlarm.cancel(); mKickAlarm.cancel(); mTimeoutAlarm.cancel(); } } abstract protected boolean sendPacket(); protected abstract boolean sendPacket(); abstract protected void receivePacket(DhcpPacket packet); protected abstract void receivePacket(DhcpPacket packet); protected void timeout() {} protected void timeout() {} protected void initTimer() { protected void initTimer() { Loading @@ -903,13 +935,6 @@ public class DhcpClient extends StateMachine { mTimer = MAX_TIMEOUT_MS; mTimer = MAX_TIMEOUT_MS; } } } } protected void maybeInitTimeout() { if (mTimeout > 0) { long alarmTime = SystemClock.elapsedRealtime() + mTimeout; mTimeoutAlarm.schedule(alarmTime); } } } } class ObtainingConfigurationState extends LoggingState { class ObtainingConfigurationState extends LoggingState { Loading Loading @@ -1167,7 +1192,7 @@ public class DhcpClient extends StateMachine { startNewTransaction(); startNewTransaction(); } } abstract protected Inet4Address packetDestination(); protected abstract Inet4Address packetDestination(); protected boolean sendPacket() { protected boolean sendPacket() { return sendRequestPacket( return sendRequestPacket( Loading