summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Quattlebaum <rquattle@google.com>2017-08-08 11:52:29 -0700
committerRobert Quattlebaum <rquattle@google.com>2017-08-09 12:48:54 -0700
commit148f5a4d4bc6aebb47f04872048c3ccfabed3157 (patch)
tree35a7c1167e2fbaafeeaa7941e19925ae42c0ca97
parentc90f0063b4c9959c22f6fce8006c8214e7e25c46 (diff)
downloadlowpan-148f5a4d4bc6aebb47f04872048c3ccfabed3157.tar.gz
LowpanServiceImpl: Add outstanding NetworkRequest
This change adds an outstanding NetworkRequest which makes sure that we keep LoWPAN networks around instead of shutting them down as unwanted. Bug: b/64482750 Change-Id: I2310f2499f161096af5410b27160b875de520c4a
-rw-r--r--service/java/com/android/server/lowpan/LowpanInterfaceTracker.java26
-rw-r--r--service/java/com/android/server/lowpan/LowpanServiceImpl.java27
2 files changed, 48 insertions, 5 deletions
diff --git a/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java b/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java
index b01baab..83522c9 100644
--- a/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java
+++ b/service/java/com/android/server/lowpan/LowpanInterfaceTracker.java
@@ -177,14 +177,26 @@ class LowpanInterfaceTracker extends StateMachine {
if (DBG) {
Log.i(TAG, "CMD_START_NETWORK");
}
- // TODO: Call mLowpanInterface.setEnabled(true)?
+ 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;
}
- // TODO: Call mLowpanInterface.setEnabled(false)?
break;
case CMD_STATE_CHANGE:
@@ -267,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();
}
diff --git a/service/java/com/android/server/lowpan/LowpanServiceImpl.java b/service/java/com/android/server/lowpan/LowpanServiceImpl.java
index 967dc79..9450089 100644
--- a/service/java/com/android/server/lowpan/LowpanServiceImpl.java
+++ b/service/java/com/android/server/lowpan/LowpanServiceImpl.java
@@ -18,9 +18,13 @@ package com.android.server.lowpan;
import android.content.pm.PackageManager;
import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
import android.net.lowpan.ILowpanInterface;
import android.net.lowpan.ILowpanManager;
import android.net.lowpan.ILowpanManagerListener;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
import android.os.Binder;
import android.os.HandlerThread;
import android.os.IBinder;
@@ -28,11 +32,11 @@ import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.util.Log;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* LowpanService handles remote LoWPAN operation requests by implementing the ILowpanManager
@@ -64,6 +68,25 @@ public class LowpanServiceImpl extends ILowpanManager.Stub {
return looper;
}
+ public void createOutstandingNetworkRequest() {
+ final ConnectivityManager cm =
+ (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ if (cm == null) {
+ throw new IllegalStateException("Bad luck, ConnectivityService not started.");
+ }
+
+ NetworkRequest request = new NetworkRequest.Builder()
+ .clearCapabilities()
+ .addTransportType(NetworkCapabilities.TRANSPORT_LOWPAN)
+ .build();
+
+ // Note that this method only ever gets called once,
+ // so we don't need to bother with worrying about unregistering.
+
+ cm.requestNetwork(request, new NetworkCallback());
+ }
+
public void checkAndStartLowpan() {
synchronized (mInterfaceMap) {
if (mStarted.compareAndSet(false, true)) {
@@ -73,6 +96,8 @@ public class LowpanServiceImpl extends ILowpanManager.Stub {
}
}
+ createOutstandingNetworkRequest();
+
// TODO: Bring up any daemons(like wpantund)?
}