Remove ServiceManager usage from IpSecTransform

Remove ServiceManager hidden API dependency because this class
is going to be moved into mainline module. Thus have IpSecTransform
calls createTransform and deleteTransform through IpSecManager to
remove the ServiceManager usage.

Bug: 204153604
Test: FrameworksNetTests
Change-Id: Iba48da4aecac1080684d5a7e7e7ca2e31219591a
This commit is contained in:
Aaron Huang
2021-12-28 02:33:53 +08:00
parent 03cbe3f73b
commit 80a73fd6cc
2 changed files with 28 additions and 20 deletions

View File

@@ -27,6 +27,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.net.annotations.PolicyDirection;
import android.os.Binder;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
@@ -980,6 +981,29 @@ public final class IpSecManager {
}
}
/**
* @hide
*/
public IpSecTransformResponse createTransform(IpSecConfig config, IBinder binder,
String callingPackage) {
try {
return mService.createTransform(config, binder, callingPackage);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* @hide
*/
public void deleteTransform(int resourceId) {
try {
mService.deleteTransform(resourceId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Construct an instance of IpSecManager within an application context.
*

View File

@@ -26,9 +26,6 @@ import android.annotation.SystemApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceSpecificException;
import android.util.Log;
@@ -93,16 +90,9 @@ public final class IpSecTransform implements AutoCloseable {
mResourceId = INVALID_RESOURCE_ID;
}
private IIpSecService getIpSecService() {
IBinder b = ServiceManager.getService(android.content.Context.IPSEC_SERVICE);
if (b == null) {
throw new RemoteException("Failed to connect to IpSecService")
.rethrowAsRuntimeException();
private IpSecManager getIpSecManager(Context context) {
return context.getSystemService(IpSecManager.class);
}
return IIpSecService.Stub.asInterface(b);
}
/**
* Checks the result status and throws an appropriate exception if the status is not Status.OK.
*/
@@ -130,8 +120,7 @@ public final class IpSecTransform implements AutoCloseable {
IpSecManager.SpiUnavailableException {
synchronized (this) {
try {
IIpSecService svc = getIpSecService();
IpSecTransformResponse result = svc.createTransform(
IpSecTransformResponse result = getIpSecManager(mContext).createTransform(
mConfig, new Binder(), mContext.getOpPackageName());
int status = result.status;
checkResultStatus(status);
@@ -140,8 +129,6 @@ public final class IpSecTransform implements AutoCloseable {
mCloseGuard.open("build");
} catch (ServiceSpecificException e) {
throw IpSecManager.rethrowUncheckedExceptionFromServiceSpecificException(e);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
}
@@ -177,10 +164,7 @@ public final class IpSecTransform implements AutoCloseable {
return;
}
try {
IIpSecService svc = getIpSecService();
svc.deleteTransform(mResourceId);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
getIpSecManager(mContext).deleteTransform(mResourceId);
} catch (Exception e) {
// On close we swallow all random exceptions since failure to close is not
// actionable by the user.