diff options
author | Robert Quattlebaum <rquattle@google.com> | 2017-08-08 11:52:29 -0700 |
---|---|---|
committer | Robert Quattlebaum <rquattle@google.com> | 2017-08-09 12:48:54 -0700 |
commit | 148f5a4d4bc6aebb47f04872048c3ccfabed3157 (patch) | |
tree | 35a7c1167e2fbaafeeaa7941e19925ae42c0ca97 | |
parent | c90f0063b4c9959c22f6fce8006c8214e7e25c46 (diff) | |
download | lowpan-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.java | 26 | ||||
-rw-r--r-- | service/java/com/android/server/lowpan/LowpanServiceImpl.java | 27 |
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)? } |