diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2019-12-02 10:31:39 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-12-02 10:31:39 +0000 |
commit | d82280212c9895033fd99ef245e95b271982215e (patch) | |
tree | d46db4faed89a5c62c4a4dc99abea94acf296725 /src/android/net/ip/IpClient.java | |
parent | 6c0ec1fb91e5faa50a4f82d0077d0a43e0e649ec (diff) | |
parent | 038f3cd08c8e7a296774409eab2eecaa6632c690 (diff) |
Merge "Add a ClearingIpAddressesState."
Diffstat (limited to 'src/android/net/ip/IpClient.java')
-rw-r--r-- | src/android/net/ip/IpClient.java | 84 |
1 files changed, 53 insertions, 31 deletions
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index 8808ee2..669dbfd 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java @@ -310,7 +310,7 @@ public class IpClient extends StateMachine { // Internal commands to use instead of trying to call transitionTo() inside // a given State's enter() method. Calling transitionTo() from enter/exit // encounters a Log.wtf() that can cause trouble on eng builds. - private static final int CMD_JUMP_STARTED_TO_RUNNING = 100; + private static final int CMD_ADDRESSES_CLEARED = 100; private static final int CMD_JUMP_RUNNING_TO_STOPPING = 101; private static final int CMD_JUMP_STOPPING_TO_STOPPED = 102; @@ -342,6 +342,7 @@ public class IpClient extends StateMachine { private final State mStoppedState = new StoppedState(); private final State mStoppingState = new StoppingState(); + private final State mClearingIpAddressesState = new ClearingIpAddressesState(); private final State mStartedState = new StartedState(); private final State mRunningState = new RunningState(); @@ -621,6 +622,7 @@ public class IpClient extends StateMachine { // CHECKSTYLE:OFF IndentationCheck addState(mStoppedState); addState(mStartedState); + addState(mClearingIpAddressesState, mStartedState); addState(mRunningState, mStartedState); addState(mStoppingState); // CHECKSTYLE:ON IndentationCheck @@ -1355,7 +1357,7 @@ public class IpClient extends StateMachine { case CMD_START: mConfiguration = (android.net.shared.ProvisioningConfiguration) msg.obj; - transitionTo(mStartedState); + transitionTo(mClearingIpAddressesState); break; case EVENT_NETLINK_LINKPROPERTIES_CHANGED: @@ -1437,18 +1439,11 @@ public class IpClient extends StateMachine { } } - class StartedState extends State { + class ClearingIpAddressesState extends State { @Override public void enter() { - mStartTimeMillis = SystemClock.elapsedRealtime(); - if (mConfiguration.mProvisioningTimeoutMs > 0) { - final long alarmTime = SystemClock.elapsedRealtime() - + mConfiguration.mProvisioningTimeoutMs; - mProvisioningTimeoutAlarm.schedule(alarmTime); - } - if (readyToProceed()) { - deferMessage(obtainMessage(CMD_JUMP_STARTED_TO_RUNNING)); + deferMessage(obtainMessage(CMD_ADDRESSES_CLEARED)); } else { // Clear all IPv4 and IPv6 before proceeding to RunningState. // Clean up any leftover state from an abnormal exit from @@ -1458,21 +1453,12 @@ public class IpClient extends StateMachine { } @Override - public void exit() { - mProvisioningTimeoutAlarm.cancel(); - } - - @Override public boolean processMessage(Message msg) { switch (msg.what) { - case CMD_JUMP_STARTED_TO_RUNNING: + case CMD_ADDRESSES_CLEARED: transitionTo(mRunningState); break; - case CMD_STOP: - transitionTo(mStoppingState); - break; - case EVENT_NETLINK_LINKPROPERTIES_CHANGED: handleLinkPropertiesUpdate(NO_CALLBACKS); if (readyToProceed()) { @@ -1480,6 +1466,50 @@ public class IpClient extends StateMachine { } break; + case CMD_STOP: + case EVENT_PROVISIONING_TIMEOUT: + // Fall through to StartedState. + return NOT_HANDLED; + + default: + // It's safe to process messages out of order because the + // only message that can both + // a) be received at this time and + // b) affect provisioning state + // is EVENT_NETLINK_LINKPROPERTIES_CHANGED (handled above). + deferMessage(msg); + } + return HANDLED; + } + + private boolean readyToProceed() { + return (!mLinkProperties.hasIpv4Address() && !mLinkProperties.hasGlobalIpv6Address()); + } + } + + class StartedState extends State { + @Override + public void enter() { + mStartTimeMillis = SystemClock.elapsedRealtime(); + if (mConfiguration.mProvisioningTimeoutMs > 0) { + final long alarmTime = SystemClock.elapsedRealtime() + + mConfiguration.mProvisioningTimeoutMs; + mProvisioningTimeoutAlarm.schedule(alarmTime); + } + } + + @Override + public void exit() { + mProvisioningTimeoutAlarm.cancel(); + } + + @Override + public boolean processMessage(Message msg) { + switch (msg.what) { + case CMD_STOP: + transitionTo(mStoppingState); + break; + case CMD_UPDATE_L2KEY_GROUPHINT: { final Pair<String, String> args = (Pair<String, String>) msg.obj; mL2Key = args.first; @@ -1497,22 +1527,14 @@ public class IpClient extends StateMachine { case EVENT_PROVISIONING_TIMEOUT: handleProvisioningFailure(); break; + default: - // It's safe to process messages out of order because the - // only message that can both - // a) be received at this time and - // b) affect provisioning state - // is EVENT_NETLINK_LINKPROPERTIES_CHANGED (handled above). - deferMessage(msg); + return NOT_HANDLED; } mMsgStateLogger.handled(this, getCurrentState()); return HANDLED; } - - private boolean readyToProceed() { - return (!mLinkProperties.hasIpv4Address() && !mLinkProperties.hasGlobalIpv6Address()); - } } class RunningState extends State { |