diff options
Diffstat (limited to 'service/java/com/android/server/lowpan/LowpanInterfaceTracker.java')
-rw-r--r-- | service/java/com/android/server/lowpan/LowpanInterfaceTracker.java | 101 |
1 files changed, 45 insertions, 56 deletions
diff --git a/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java b/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java index 89b058c..69842c2 100644 --- a/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java +++ b/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java @@ -73,8 +73,6 @@ class LowpanInterfaceTracker extends StateMachine { /** The base for LoWPAN message codes */ static final int BASE = Protocol.BASE_LOWPAN; - static final int CMD_REGISTER = BASE + 1; - static final int CMD_UNREGISTER = BASE + 2; static final int CMD_START_NETWORK = BASE + 3; static final int CMD_STOP_NETWORK = BASE + 4; static final int CMD_STATE_CHANGE = BASE + 5; @@ -89,7 +87,7 @@ class LowpanInterfaceTracker extends StateMachine { private LowpanInterface mLowpanInterface; private NetworkAgent mNetworkAgent; private NetworkFactory mNetworkFactory; - private final IpManager mIpManager; + private IpManager mIpManager; private final IpManager.Callback mIpManagerCallback = new IpManagerCallback(); // Instance Variables @@ -106,7 +104,6 @@ class LowpanInterfaceTracker extends StateMachine { final DefaultState mDefaultState = new DefaultState(); final NormalState mNormalState = new NormalState(); - final InitState mInitState = new InitState(); final OfflineState mOfflineState = new OfflineState(); final CommissioningState mCommissioningState = new CommissioningState(); final AttachingState mAttachingState = new AttachingState(); @@ -154,30 +151,6 @@ class LowpanInterfaceTracker extends StateMachine { // State Definitions - class InitState extends State { - @Override - public void enter() {} - - @Override - public boolean processMessage(Message message) { - switch (message.what) { - case CMD_REGISTER: - if (DBG) { - Log.i(TAG, "CMD_REGISTER"); - } - transitionTo(mDefaultState); - break; - - default: - return NOT_HANDLED; - } - return HANDLED; - } - - @Override - public void exit() {} - } - class DefaultState extends State { @Override public void enter() { @@ -200,20 +173,29 @@ class LowpanInterfaceTracker extends StateMachine { boolean retValue = NOT_HANDLED; switch (message.what) { - case CMD_UNREGISTER: - transitionTo(mInitState); - retValue = HANDLED; - break; - case CMD_START_NETWORK: if (DBG) { Log.i(TAG, "CMD_START_NETWORK"); } + try { + mLowpanInterface.setEnabled(true); + } catch (LowpanException | LowpanRuntimeException x) { + Log.e(TAG, "Exception while enabling: " + x); + transitionTo(mFaultState); + return HANDLED; + } break; case CMD_STOP_NETWORK: if (DBG) { - Log.i(TAG, "CMD_START_NETWORK"); + Log.i(TAG, "CMD_STOP_NETWORK"); + } + try { + mLowpanInterface.setEnabled(false); + } catch (LowpanException | LowpanRuntimeException x) { + Log.e(TAG, "Exception while disabling: " + x); + transitionTo(mFaultState); + return HANDLED; } break; @@ -225,7 +207,7 @@ class LowpanInterfaceTracker extends StateMachine { "LowpanInterface changed state from \"" + mState + "\" to \"" - + message.obj.toString() + + message.obj + "\"."); } mState = (String) message.obj; @@ -255,7 +237,6 @@ class LowpanInterfaceTracker extends StateMachine { @Override public void exit() { - mLowpanInterface.unregisterCallback(mLocalLowpanCallback); } } @@ -267,15 +248,17 @@ class LowpanInterfaceTracker extends StateMachine { Log.i(TAG, "NormalState.enter()"); } + mIpManager = new IpManager(mContext, mInterfaceName, mIpManagerCallback); + if (mHwAddr == null) { byte[] hwAddr = null; try { hwAddr = mLowpanInterface.getService().getMacAddress(); } catch (RemoteException | ServiceSpecificException x) { - // Don't let misbehavior of an interface service + // Don't let misbehavior of the interface service // crash the system service. - Log.e(TAG, x.toString()); + Log.e(TAG, "Call to getMacAddress() failed: " + x); transitionTo(mFaultState); } @@ -296,7 +279,13 @@ class LowpanInterfaceTracker extends StateMachine { Log.i(TAG, "UNWANTED."); } - // TODO: Figure out how to properly handle this. + try { + mLowpanInterface.setEnabled(false); + } catch (LowpanException | LowpanRuntimeException x) { + Log.e(TAG, "Exception while disabling: " + x); + transitionTo(mFaultState); + return HANDLED; + } shutdownNetworkAgent(); } @@ -313,7 +302,7 @@ class LowpanInterfaceTracker extends StateMachine { break; case CMD_PROVISIONING_FAILURE: - Log.i(TAG, "Provisioning Failure: " + message.obj.toString()); + Log.i(TAG, "Provisioning Failure: " + message.obj); break; } @@ -324,6 +313,11 @@ class LowpanInterfaceTracker extends StateMachine { public void exit() { shutdownNetworkAgent(); mNetworkFactory.unregister(); + + if (mIpManager != null) { + mIpManager.shutdown(); + } + mIpManager = null; } } @@ -332,6 +326,8 @@ class LowpanInterfaceTracker extends StateMachine { public void enter() { shutdownNetworkAgent(); mNetworkInfo.setIsAvailable(true); + + mIpManager.stop(); } @Override @@ -385,17 +381,15 @@ class LowpanInterfaceTracker extends StateMachine { public boolean processMessage(Message message) { switch (message.what) { case CMD_STATE_CHANGE: - if (!mState.equals(message.obj)) { - if (!LowpanInterface.STATE_ATTACHED.equals(message.obj)) { - return NOT_HANDLED; - } + if (!mState.equals(message.obj) + && !LowpanInterface.STATE_ATTACHED.equals(message.obj)) { + return NOT_HANDLED; } - break; + return HANDLED; default: return NOT_HANDLED; } - return HANDLED; } @Override @@ -439,7 +433,7 @@ class LowpanInterfaceTracker extends StateMachine { if (x.getCause() instanceof RemoteException) { // Don't let misbehavior of an interface service // crash the system service. - Log.e(TAG, x.toString()); + Log.e(TAG, "RuntimeException while populating InitialConfiguration: " + x); transitionTo(mFaultState); } else { @@ -483,7 +477,7 @@ class LowpanInterfaceTracker extends StateMachine { switch (message.what) { case CMD_PROVISIONING_SUCCESS: - Log.i(TAG, "Provisioning Success: " + message.obj.toString()); + Log.i(TAG, "Provisioning Success: " + message.obj); transitionTo(mConnectedState); return HANDLED; } @@ -555,7 +549,6 @@ class LowpanInterfaceTracker extends StateMachine { mNetworkCapabilities.setLinkDownstreamBandwidthKbps(100); // CHECKSTYLE:OFF IndentationCheck - addState(mInitState); addState(mDefaultState); addState(mFaultState, mDefaultState); addState(mNormalState, mDefaultState); @@ -567,7 +560,7 @@ class LowpanInterfaceTracker extends StateMachine { addState(mConnectedState, mAttachedState); // CHECKSTYLE:ON IndentationCheck - setInitialState(mInitState); + setInitialState(mDefaultState); mNetworkFactory = new NetworkFactory(looper, context, NETWORK_TYPE, mNetworkCapabilities) { @@ -582,10 +575,6 @@ class LowpanInterfaceTracker extends StateMachine { } }; - mIpManager = new IpManager(mContext, mInterfaceName, mIpManagerCallback); - - start(); - if (DBG) { Log.i(TAG, "LowpanInterfaceTracker() end"); } @@ -625,13 +614,13 @@ class LowpanInterfaceTracker extends StateMachine { if (DBG) { Log.i(TAG, "register()"); } - sendMessage(CMD_REGISTER); + start(); } public void unregister() { if (DBG) { Log.i(TAG, "unregister()"); } - sendMessage(CMD_UNREGISTER); + quit(); } } |