AVF: promote FD->IBinder to SystemApi.
This is needed, dotchya know.
Normally, in the same process, you do all of this, but to
pass a connection to another process, imagine
processes "Q -> R -> S", where:
- Q is client
- R is VM creator
- S is VM
Then Q can call binderFromPreconnectedClient, and it can
implement the provider by calling an API on R which will
return the results of R calling connectVsock.
This way, you can have direct Q<->S communication, instead of two hops.
Bugs: me
Test: TH
Change-Id: If968f18f2c96511fd8359cc68febd01d7dae3833
diff --git a/libs/framework-virtualization/api/system-current.txt b/libs/framework-virtualization/api/system-current.txt
index 233491f..975bafe 100644
--- a/libs/framework-virtualization/api/system-current.txt
+++ b/libs/framework-virtualization/api/system-current.txt
@@ -2,6 +2,7 @@
package android.system.virtualmachine {
public class VirtualMachine implements java.lang.AutoCloseable {
+ method @NonNull @WorkerThread public static android.os.IBinder binderFromPreconnectedClient(@NonNull android.system.virtualmachine.VirtualMachine.VsockConnectionProvider) throws android.system.virtualmachine.VirtualMachineException;
method public void clearCallback();
method @WorkerThread public void close();
method @NonNull @WorkerThread public android.os.IBinder connectToVsockServer(@IntRange(from=android.system.virtualmachine.VirtualMachine.MIN_VSOCK_PORT, to=android.system.virtualmachine.VirtualMachine.MAX_VSOCK_PORT) long) throws android.system.virtualmachine.VirtualMachineException;
@@ -25,6 +26,10 @@
field public static final String USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION = "android.permission.USE_CUSTOM_VIRTUAL_MACHINE";
}
+ public static interface VirtualMachine.VsockConnectionProvider {
+ method @NonNull public android.os.ParcelFileDescriptor addConnection() throws android.system.virtualmachine.VirtualMachineException;
+ }
+
public interface VirtualMachineCallback {
method public void onError(@NonNull android.system.virtualmachine.VirtualMachine, int, @NonNull String);
method public void onPayloadFinished(@NonNull android.system.virtualmachine.VirtualMachine, int);
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachine.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachine.java
index 0445fcb..5fcb975 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachine.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachine.java
@@ -1970,8 +1970,11 @@
*
* @hide
*/
+ @SystemApi
+ @SuppressLint("UnflaggedApi") // already existing functionality exposed, users should flag
public interface VsockConnectionProvider {
@NonNull
+ @SuppressLint("UnflaggedApi") // already existing functionality exposed, users should flag
public ParcelFileDescriptor addConnection() throws VirtualMachineException;
}
@@ -2035,6 +2038,8 @@
*
* @hide
*/
+ @SystemApi
+ @SuppressLint("UnflaggedApi") // already existing functionality exposed, users should flag
@WorkerThread
@NonNull
public static IBinder binderFromPreconnectedClient(@NonNull VsockConnectionProvider provider)