From a0885000f227ebf15f0b78d1d28c7a5de4afa8ea Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Wed, 12 Jul 2017 00:15:26 +0900 Subject: [PATCH] Avoid exposing OffloadCallbackEvent values Keep the android.hardware.tetheroffload.control.V1_0.OffloadCallbackEvent import from leaking outside of OffloadHardwareInterface by converting each event type into a separate callback. Add basic logging implementation in OffloadController. Seems like every call just needs to log save for two that actually need to do work: - onSupportAvailable() * poll stats and notify NetworkStatsService * (re)push all state, as the hardware now supports offload (again) - onStoppedLimitReached() * poll stats and notify NetworkStatsService Test: as follows - built - flashed - booted - "runtest frameworks-net" passed Bug: 29337859 Bug: 32163131 Change-Id: I46c2e5252ae72a09a1550862847c1af441ece072 --- .../tethering/OffloadController.java | 32 +++++++++++++++-- .../tethering/OffloadHardwareInterface.java | 35 ++++++++++++++++--- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/tethering/OffloadController.java b/services/core/java/com/android/server/connectivity/tethering/OffloadController.java index 20ec20681ce22..e18552855fc8d 100644 --- a/services/core/java/com/android/server/connectivity/tethering/OffloadController.java +++ b/services/core/java/com/android/server/connectivity/tethering/OffloadController.java @@ -77,8 +77,36 @@ public class OffloadController { mControlInitialized = mHwInterface.initOffloadControl( new OffloadHardwareInterface.ControlCallback() { @Override - public void onOffloadEvent(int event) { - mLog.log("got offload event: " + event); + public void onStarted() { + mLog.log("onStarted"); + } + + @Override + public void onStoppedError() { + mLog.log("onStoppedError"); + } + + @Override + public void onStoppedUnsupported() { + mLog.log("onStoppedUnsupported"); + } + + @Override + public void onSupportAvailable() { + mLog.log("onSupportAvailable"); + + // [1] Poll for statistics and notify NetworkStats + // [2] (Re)Push all state: + // [a] push local prefixes + // [b] push downstreams + // [c] push upstream parameters + pushUpstreamParameters(); + } + + @Override + public void onStoppedLimitReached() { + mLog.log("onStoppedLimitReached"); + // Poll for statistics and notify NetworkStats } @Override diff --git a/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java b/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java index 09fd96b4966e0..805ea1cd69b8a 100644 --- a/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java +++ b/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java @@ -21,6 +21,7 @@ import static com.android.internal.util.BitUtils.uint16; import android.hardware.tetheroffload.control.V1_0.IOffloadControl; import android.hardware.tetheroffload.control.V1_0.ITetheringOffloadCallback; import android.hardware.tetheroffload.control.V1_0.NatTimeoutUpdate; +import android.hardware.tetheroffload.control.V1_0.OffloadCallbackEvent; import android.os.Handler; import android.os.RemoteException; import android.net.util.SharedLog; @@ -48,7 +49,11 @@ public class OffloadHardwareInterface { private ControlCallback mControlCallback; public static class ControlCallback { - public void onOffloadEvent(int event) {} + public void onStarted() {} + public void onStoppedError() {} + public void onStoppedUnsupported() {} + public void onSupportAvailable() {} + public void onStoppedLimitReached() {} public void onNatTimeoutUpdate(int proto, String srcAddr, int srcPort, @@ -80,7 +85,7 @@ public class OffloadHardwareInterface { (controlCb == null) ? "null" : "0x" + Integer.toHexString(System.identityHashCode(controlCb))); - mTetheringOffloadCallback = new TetheringOffloadCallback(mHandler, mControlCallback); + mTetheringOffloadCallback = new TetheringOffloadCallback(mHandler, mControlCallback, mLog); final CbResults results = new CbResults(); try { mOffloadControl.initOffload( @@ -158,15 +163,37 @@ public class OffloadHardwareInterface { private static class TetheringOffloadCallback extends ITetheringOffloadCallback.Stub { public final Handler handler; public final ControlCallback controlCb; + public final SharedLog log; - public TetheringOffloadCallback(Handler h, ControlCallback cb) { + public TetheringOffloadCallback(Handler h, ControlCallback cb, SharedLog sharedLog) { handler = h; controlCb = cb; + log = sharedLog; } @Override public void onEvent(int event) { - handler.post(() -> { controlCb.onOffloadEvent(event); }); + handler.post(() -> { + switch (event) { + case OffloadCallbackEvent.OFFLOAD_STARTED: + controlCb.onStarted(); + break; + case OffloadCallbackEvent.OFFLOAD_STOPPED_ERROR: + controlCb.onStoppedError(); + break; + case OffloadCallbackEvent.OFFLOAD_STOPPED_UNSUPPORTED: + controlCb.onStoppedUnsupported(); + break; + case OffloadCallbackEvent.OFFLOAD_SUPPORT_AVAILABLE: + controlCb.onSupportAvailable(); + break; + case OffloadCallbackEvent.OFFLOAD_STOPPED_LIMIT_REACHED: + controlCb.onStoppedLimitReached(); + break; + default: + log.e("Unsupported OffloadCallbackEvent: " + event); + } + }); } @Override