summaryrefslogtreecommitdiff
path: root/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'service/java/com/android/server/lowpan/LowpanInterfaceTracker.java')
-rw-r--r--service/java/com/android/server/lowpan/LowpanInterfaceTracker.java101
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();
}
}