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
Merged-In: I7c7675922a561a4642120df51715a550dab7f503
Merged-In: Ie91b974fbf70a4242f8b220d5fa3d6a0de59201d
Merged-In: I46c2e5252ae72a09a1550862847c1af441ece072
(cherry picked from commit a0885000f2)

Change-Id: I1981d8da79f24dd0b4d76b930a5f179682500294
This commit is contained in:
Erik Kline
2017-07-12 00:15:26 +09:00
parent b27c5e92a2
commit e10cd1c66a
2 changed files with 61 additions and 6 deletions

View File

@@ -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

View File

@@ -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;
@@ -53,7 +54,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,
@@ -108,7 +113,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(
@@ -206,15 +211,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