diff options
| -rw-r--r-- | libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp | 9 | ||||
| -rw-r--r-- | libs/binder/libbinder_rpc_unstable.cpp | 9 | ||||
| -rw-r--r-- | libs/binder/libbinder_rpc_unstable.map.txt | 1 |
3 files changed, 18 insertions, 1 deletions
diff --git a/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp b/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp index 0309d6ca53..08f5eedacd 100644 --- a/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp +++ b/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp @@ -20,7 +20,16 @@ extern "C" { struct AIBinder; +// Starts an RPC server on a given port and a given root IBinder object. +// This function sets up the server and joins before returning. bool RunRpcServer(AIBinder* service, unsigned int port); + +// Starts an RPC server on a given port and a given root IBinder object. +// This function sets up the server, calls readyCallback with a given param, and +// then joins before returning. +bool RunRpcServerCallback(AIBinder* service, unsigned int port, void (*readyCallback)(void* param), + void* param); + AIBinder* RpcClient(unsigned int cid, unsigned int port); // Connect to an RPC server with preconnected file descriptors. diff --git a/libs/binder/libbinder_rpc_unstable.cpp b/libs/binder/libbinder_rpc_unstable.cpp index 304415a7ce..cad55fb439 100644 --- a/libs/binder/libbinder_rpc_unstable.cpp +++ b/libs/binder/libbinder_rpc_unstable.cpp @@ -29,7 +29,8 @@ using android::base::unique_fd; extern "C" { -bool RunRpcServer(AIBinder* service, unsigned int port) { +bool RunRpcServerCallback(AIBinder* service, unsigned int port, void (*readyCallback)(void* param), + void* param) { auto server = RpcServer::make(); server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction(); if (status_t status = server->setupVsockServer(port); status != OK) { @@ -38,6 +39,8 @@ bool RunRpcServer(AIBinder* service, unsigned int port) { return false; } server->setRootObject(AIBinder_toPlatformBinder(service)); + + if (readyCallback) readyCallback(param); server->join(); // Shutdown any open sessions since server failed. @@ -45,6 +48,10 @@ bool RunRpcServer(AIBinder* service, unsigned int port) { return true; } +bool RunRpcServer(AIBinder* service, unsigned int port) { + return RunRpcServerCallback(service, port, nullptr, nullptr); +} + AIBinder* RpcClient(unsigned int cid, unsigned int port) { auto session = RpcSession::make(); if (status_t status = session->setupVsockClient(cid, port); status != OK) { diff --git a/libs/binder/libbinder_rpc_unstable.map.txt b/libs/binder/libbinder_rpc_unstable.map.txt index 1138786a64..e8565695a3 100644 --- a/libs/binder/libbinder_rpc_unstable.map.txt +++ b/libs/binder/libbinder_rpc_unstable.map.txt @@ -1,6 +1,7 @@ LIBBINDER_RPC_UNSTABLE_SHIM { # platform-only global: RunRpcServer; + RunRpcServerCallback; RpcClient; RpcPreconnectedClient; local: |